From 268afb7c4367c901a8a70a0cb30ea1f8ef6a33d2 Mon Sep 17 00:00:00 2001 From: zbeyens Date: Sat, 21 Sep 2024 22:39:15 +0200 Subject: [PATCH 1/8] shadcn --- .eslintrc.cjs | 3 +- .../docs/components/installation/next.mdx | 97 +- .../docs/components/installation/vite.mdx | 48 +- apps/www/contentlayer.config.js | 2 +- apps/www/package.json | 4 +- apps/www/public/registry/index.json | 2 +- .../registry/styles/default/calendar.json | 2 +- .../registry/styles/default/command.json | 2 +- apps/www/scripts/build-registry.mts | 1001 +++++++++++------ apps/www/src/components/block-toolbar.tsx | 2 +- apps/www/src/components/theme-customizer.tsx | 666 +++++++++++ apps/www/src/components/theme-wrapper.tsx | 35 + apps/www/src/components/themes-selector.tsx | 122 ++ apps/www/src/components/themes-styles.tsx | 28 + apps/www/src/components/toc.tsx | 5 +- apps/www/src/hooks/use-config.ts | 3 +- apps/www/src/hooks/use-themes-config.ts | 16 + apps/www/src/lib/_blocks.ts | 17 +- .../dark.json => highlighter-theme.json} | 0 apps/www/src/lib/rehype-component.ts | 2 +- apps/www/src/lib/themes.ts | 508 +++++++++ apps/www/src/lib/themes/light.json | 380 ------- apps/www/src/lib/utils.ts | 6 + .../src/registry/default/plate-ui/command.tsx | 2 +- .../src/registry/default/plate-ui/input.tsx | 2 +- .../{themes.ts => registry-base-colors.ts} | 4 +- .../{colors.ts => registry-colors.ts} | 0 .../{example.ts => registry-examples.ts} | 52 +- apps/www/src/registry/registry-hooks.ts | 24 + apps/www/src/registry/registry-lib.ts | 15 + .../{styles.ts => registry-styles.ts} | 0 apps/www/src/registry/registry-themes.ts | 178 +++ .../src/registry/{ui.ts => registry-ui.ts} | 148 +-- apps/www/src/registry/registry.ts | 15 +- apps/www/src/registry/schema.ts | 49 +- apps/www/tsconfig.json | 2 +- config/eslint/bases/unicorn.cjs | 27 +- docs/vendor.md | 2 +- .../cli/test/fixtures/next/tailwind.config.js | 58 +- tailwind.config.cjs | 6 +- .../src/components/plate-ui/input.tsx | 2 +- yarn.lock | 166 +-- 42 files changed, 2598 insertions(+), 1105 deletions(-) create mode 100644 apps/www/src/components/theme-customizer.tsx create mode 100644 apps/www/src/components/theme-wrapper.tsx create mode 100644 apps/www/src/components/themes-selector.tsx create mode 100644 apps/www/src/components/themes-styles.tsx create mode 100644 apps/www/src/hooks/use-themes-config.ts rename apps/www/src/lib/{themes/dark.json => highlighter-theme.json} (100%) create mode 100644 apps/www/src/lib/themes.ts delete mode 100644 apps/www/src/lib/themes/light.json create mode 100644 apps/www/src/lib/utils.ts rename apps/www/src/registry/{themes.ts => registry-base-colors.ts} (99%) rename apps/www/src/registry/{colors.ts => registry-colors.ts} (100%) rename apps/www/src/registry/{example.ts => registry-examples.ts} (79%) create mode 100644 apps/www/src/registry/registry-hooks.ts create mode 100644 apps/www/src/registry/registry-lib.ts rename apps/www/src/registry/{styles.ts => registry-styles.ts} (100%) create mode 100644 apps/www/src/registry/registry-themes.ts rename apps/www/src/registry/{ui.ts => registry-ui.ts} (84%) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 3d752f6fec..f364cb7ea3 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,7 +1,7 @@ +const { filePatterns } = require('./config/eslint/constants/file-patterns.cjs'); const { getDefaultIgnorePatterns, } = require('./config/eslint/helpers/getDefaultIgnorePatterns.cjs'); -const { filePatterns } = require('./config/eslint/constants/file-patterns.cjs'); /** @type {import('eslint').Linter.Config} */ module.exports = { @@ -34,6 +34,7 @@ module.exports = { '.out', '**/*.mdx', '**/__registry__', + '**/scripts/build-registry.mts', ], overrides: [ { diff --git a/apps/www/content/docs/components/installation/next.mdx b/apps/www/content/docs/components/installation/next.mdx index 5ee65d30d4..0a8c30f5c9 100644 --- a/apps/www/content/docs/components/installation/next.mdx +++ b/apps/www/content/docs/components/installation/next.mdx @@ -13,16 +13,10 @@ A Inter as the default font. Inter is not required. You can replace it with any other font. - -Here's how you can configure Inter for Next.js: - -**1. Import the font in the root layout:** - -```js showLineNumbers title=app/layout.tsx {2,5-8,16-17} -import "@/styles/globals.css" -import { Inter as FontSans } from "next/font/google" - -import { cn } from "@udecode/cn" - -export const fontSans = FontSans({ - subsets: ["latin"], - variable: "--font-sans", -}) - -export default function RootLayout({ children }: RootLayoutProps) { - return ( - - - - ... - - - ) -} -``` - -**2. Configure `theme.extend.fontFamily` in `tailwind.config.js`** - -```js showLineNumbers title=tailwind.config.js {9-11} -const { fontFamily } = require("tailwindcss/defaultTheme") - -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: ["class"], - content: ["app/**/*.{ts,tsx}", "components/**/*.{ts,tsx}"], - theme: { - extend: { - fontFamily: { - sans: ["var(--font-sans)", ...fontFamily.sans], - }, - }, - }, -} -``` - -### App structure - -Here's how we structure our Next.js apps. You can use this as a reference: - -```txt {7-11,15-18} -. -├── src -│ ├── app -│ │ ├── layout.tsx -│ │ └── page.tsx -│ │ components -│ │ ├── ui -│ │ │ ├── button.tsx -│ │ │ ├── dropdown-menu.tsx -│ │ │ ├── paragraph-element.tsx -│ │ │ └── ... -│ │ ├── main-nav.tsx -│ │ ├── page-header.tsx -│ │ └── ... -│ │ styles -│ │ └── globals.css -├── next.config.js -├── package.json -├── postcss.config.js -├── tailwind.config.js -└── tsconfig.json -``` - -- We place the UI components in the `components/ui` folder. If you already have one and want to keep them separated, you could use `components/plate-ui`. -- The rest of the components such as `` and `` are placed in the `components` folder. -- The `styles` folder contains the global CSS. - ### Add TooltipProvider Wrap your editor with `TooltipProvider`. Here's an example: diff --git a/apps/www/content/docs/components/installation/vite.mdx b/apps/www/content/docs/components/installation/vite.mdx index edb81e3807..28e843d49d 100644 --- a/apps/www/content/docs/components/installation/vite.mdx +++ b/apps/www/content/docs/components/installation/vite.mdx @@ -23,21 +23,47 @@ npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p ``` -### Edit tsconfig.json +### Edit tsconfig.json file -Add the following code to the `tsconfig.json` file to resolve paths: +The current version of Vite splits TypeScript configuration into three files, two of which need to be edited. +Add the `baseUrl` and `paths` properties to the `compilerOptions` section of the `tsconfig.json` and +`tsconfig.app.json` files: -```bash {4-9} showLineNumbers +```ts {11-16} showLineNumbers +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} +``` + +### Edit tsconfig.app.json file + +Add the following code to the `tsconfig.app.json` file to resolve paths, for your IDE: + +```ts {4-9} showLineNumbers { "compilerOptions": { - // ... + // ... existing compilerOptions ... "baseUrl": ".", "paths": { "@/*": [ "./src/*" ] } - // ... + // ... rest of the file ... } } ``` @@ -68,10 +94,10 @@ export default defineConfig({ ### Run the CLI -Run the `plate-ui` init command to setup your project: +Run the `shadcn` init command to setup your project: ```bash -npx @udecode/plate-ui@latest init +npx shadcn@latest init ``` ### Configure plate-components.json @@ -81,13 +107,7 @@ You will be asked a few questions to configure `plate-components.json`: ```txt showLineNumbers Which style would you like to use? › Default Which color would you like to use as base color? › Slate -Where is your global CSS file? › › src/styles/globals.css Do you want to use CSS variables for colors? › no / yes -Are you using a custom tailwind prefix eg. tw-? (Leave blank if not) ... -Where is your tailwind.config.js located? › tailwind.config.js -Configure the import alias for components: › @/components -Configure the import alias for ui: › @/components/plate-ui -Are you using React Server Components? › no / yes (no) ``` ### Add TooltipProvider @@ -109,7 +129,7 @@ We use icons from Lucide. You can use any You can now start adding components to your project. ```bash -npx @udecode/plate-ui@latest add button +npx shadcn@latest add button ``` The command above will add the `Button` component to your project. You can then import it like this: diff --git a/apps/www/contentlayer.config.js b/apps/www/contentlayer.config.js index afd4c8bbb4..cce45c5605 100644 --- a/apps/www/contentlayer.config.js +++ b/apps/www/contentlayer.config.js @@ -132,7 +132,7 @@ export default makeSource({ { getHighlighter: async () => { const theme = await loadTheme( - path.join(process.cwd(), '/src/lib/themes/dark.json') + path.join(process.cwd(), '/src/lib/highlighter-theme.json') ); return await getHighlighter({ theme }); diff --git a/apps/www/package.json b/apps/www/package.json index 340f3da668..9267366071 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -149,7 +149,7 @@ "react-dom": "^18.3.1", "react-lite-youtube-embed": "^2.4.0", "react-markdown": "9.0.1", - "react-resizable-panels": "^0.0.55", + "react-resizable-panels": "^2.0.22", "react-syntax-highlighter": "^15.5.0", "react-tweet": "^3.2.1", "react-wrap-balancer": "^1.1.1", @@ -165,7 +165,7 @@ "ts-morph": "^22.0.0", "unist-builder": "4.0.0", "unist-util-visit": "^5.0.0", - "vaul": "^0.9.2" + "vaul": "0.9.0" }, "devDependencies": { "@shikijs/compat": "^1.17.5", diff --git a/apps/www/public/registry/index.json b/apps/www/public/registry/index.json index ad900028f3..70142bb388 100644 --- a/apps/www/public/registry/index.json +++ b/apps/www/public/registry/index.json @@ -196,7 +196,7 @@ }, { "dependencies": [ - "react-day-picker", + "react-day-picker@8.10.1", "date-fns" ], "files": [ diff --git a/apps/www/public/registry/styles/default/calendar.json b/apps/www/public/registry/styles/default/calendar.json index ae6e9b56b2..a1faef5402 100644 --- a/apps/www/public/registry/styles/default/calendar.json +++ b/apps/www/public/registry/styles/default/calendar.json @@ -1,6 +1,6 @@ { "dependencies": [ - "react-day-picker", + "react-day-picker@8.10.1", "date-fns" ], "files": [ diff --git a/apps/www/public/registry/styles/default/command.json b/apps/www/public/registry/styles/default/command.json index 928c562333..c74513338f 100644 --- a/apps/www/public/registry/styles/default/command.json +++ b/apps/www/public/registry/styles/default/command.json @@ -4,7 +4,7 @@ ], "files": [ { - "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DialogProps } from '@radix-ui/react-dialog';\n\nimport { cn, createPrimitiveElement, withCn, withRef } from '@udecode/cn';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { Icons } from '@/components/icons';\n\nimport { Dialog, DialogContent } from './dialog';\n\nexport const Command = withCn(\n CommandPrimitive,\n 'flex size-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground'\n);\n\nexport function CommandDialog({ children, ...props }: DialogProps) {\n return (\n \n \n \n {children}\n \n \n \n );\n}\n\nexport const CommandInput = withRef(\n ({ className, ...props }, ref) => (\n
\n \n \n
\n )\n);\n\nexport const CommandList = withCn(\n CommandPrimitive.List,\n 'max-h-[500px] overflow-y-auto overflow-x-hidden'\n);\n\nexport const CommandEmpty = withCn(\n CommandPrimitive.Empty,\n 'py-6 text-center text-sm'\n);\n\nexport const CommandGroup = withCn(\n CommandPrimitive.Group,\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground'\n);\n\nexport const CommandSeparator = withCn(\n CommandPrimitive.Separator,\n '-mx-1 h-px bg-border'\n);\n\nexport const CommandItem = withCn(\n CommandPrimitive.Item,\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50'\n);\n\nexport const CommandShortcut = withCn(\n createPrimitiveElement('span'),\n 'ml-auto text-xs tracking-widest text-muted-foreground'\n);\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DialogProps } from '@radix-ui/react-dialog';\n\nimport { cn, createPrimitiveElement, withCn, withRef } from '@udecode/cn';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { Icons } from '@/components/icons';\n\nimport { Dialog, DialogContent } from './dialog';\n\nexport const Command = withCn(\n CommandPrimitive,\n 'flex size-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground'\n);\n\nexport function CommandDialog({ children, ...props }: DialogProps) {\n return (\n \n \n \n {children}\n \n \n \n );\n}\n\nexport const CommandInput = withRef(\n ({ className, ...props }, ref) => (\n
\n \n \n
\n )\n);\n\nexport const CommandList = withCn(\n CommandPrimitive.List,\n 'max-h-[500px] overflow-y-auto overflow-x-hidden'\n);\n\nexport const CommandEmpty = withCn(\n CommandPrimitive.Empty,\n 'py-6 text-center text-sm'\n);\n\nexport const CommandGroup = withCn(\n CommandPrimitive.Group,\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground'\n);\n\nexport const CommandSeparator = withCn(\n CommandPrimitive.Separator,\n '-mx-1 h-px bg-border'\n);\n\nexport const CommandItem = withCn(\n CommandPrimitive.Item,\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50'\n);\n\nexport const CommandShortcut = withCn(\n createPrimitiveElement('span'),\n 'ml-auto text-xs tracking-widest text-muted-foreground'\n);\n", "name": "command.tsx" } ], diff --git a/apps/www/scripts/build-registry.mts b/apps/www/scripts/build-registry.mts index f23c790381..3babbba869 100644 --- a/apps/www/scripts/build-registry.mts +++ b/apps/www/scripts/build-registry.mts @@ -1,296 +1,581 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - -import template from 'lodash.template'; -import fs from 'node:fs'; -import path from 'node:path'; -import { rimraf } from 'rimraf'; - -import { colorMapping, colors } from '../src/registry/colors'; -import { registry } from '../src/registry/registry'; -import { registrySchema } from '../src/registry/schema'; -import { styles } from '../src/registry/styles'; -import { themes } from '../src/registry/themes'; - -const REGISTRY_PATH = path.join(process.cwd(), 'public/registry'); - -const result = registrySchema.safeParse(registry); - -if (!result.success) { - console.error((result as any).error); - // eslint-disable-next-line unicorn/no-process-exit - process.exit(1); +// @sts-nocheck +import { existsSync, promises as fs, readFileSync } from "fs" +import { tmpdir } from "os" +import path from "path" +import { cwd } from "process" +import template from "lodash.template" +import { rimraf } from "rimraf" +import { Project, ScriptKind, SyntaxKind } from "ts-morph" +import { z } from "zod" + +import { registry } from "../src/registry/registry" +import { baseColors } from "../src/registry/registry-base-colors" +import { colorMapping, colors } from "../src/registry/registry-colors" +import { styles } from "../src/registry/registry-styles" +import { + Registry, + RegistryEntry, + registryEntrySchema, + registryItemTypeSchema, + registrySchema, +} from "../src/registry/schema" + +const REGISTRY_PATH = path.join(process.cwd(), "public/r") + +const REGISTRY_INDEX_WHITELIST: z.infer[] = [ + "registry:ui", + "registry:lib", + "registry:hook", + "registry:theme", + "registry:block", +] + +const project = new Project({ + compilerOptions: {}, +}) + +async function createTempSourceFile(filename: string) { + const dir = await fs.mkdtemp(path.join(tmpdir(), "shadcn-")) + return path.join(dir, filename) } // ---------------------------------------------------------------------------- // Build __registry__/index.tsx. // ---------------------------------------------------------------------------- -let index = `// @ts-nocheck +async function buildRegistry(registry: Registry) { + let index = `// @ts-nocheck // This file is autogenerated by scripts/build-registry.ts // Do not edit this file directly. -import * as React from 'react' -export const Index: Record = { -`; +import * as React from "react" -for (const style of styles) { - index += ` '${style.name}': {`; +export const Index: Record = { +` + + for (const style of styles) { + index += ` "${style.name}": {` + + // Build style index. + for (const item of registry) { + const resolveFiles = item.files?.map( + (file) => + `registry/${style.name}/${ + typeof file === "string" ? file : file.path + }` + ) + if (!resolveFiles) { + continue + } - // Build style index. - for (const item of result.data) { - // if (item.type === "components:plate-ui") { - // continue - // } + const type = item.type.split(":")[1] + let sourceFilename = "" + + let chunks: any = [] + if (item.type === "registry:block") { + const file = resolveFiles[0] + const filename = path.basename(file) + const raw = await fs.readFile(file, "utf8") + const tempFile = await createTempSourceFile(filename) + const sourceFile = project.createSourceFile(tempFile, raw, { + scriptKind: ScriptKind.TSX, + }) + + // Find all imports. + const imports = new Map< + string, + { + module: string + text: string + isDefault?: boolean + } + >() + sourceFile.getImportDeclarations().forEach((node) => { + const module = node.getModuleSpecifier().getLiteralValue() + node.getNamedImports().forEach((item) => { + imports.set(item.getText(), { + module, + text: node.getText(), + }) + }) + + const defaultImport = node.getDefaultImport() + if (defaultImport) { + imports.set(defaultImport.getText(), { + module, + text: defaultImport.getText(), + isDefault: true, + }) + } + }) + + // Find all opening tags with x-chunk attribute. + const components = sourceFile + .getDescendantsOfKind(SyntaxKind.JsxOpeningElement) + .filter((node) => { + return node.getAttribute("x-chunk") !== undefined + }) + + chunks = await Promise.all( + components.map(async (component, index) => { + const chunkName = `${item.name}-chunk-${index}` + + // Get the value of x-chunk attribute. + const attr = component + .getAttributeOrThrow("x-chunk") + .asKindOrThrow(SyntaxKind.JsxAttribute) + + const description = attr + .getInitializerOrThrow() + .asKindOrThrow(SyntaxKind.StringLiteral) + .getLiteralValue() + + // Delete the x-chunk attribute. + attr.remove() + + // Add a new attribute to the component. + component.addAttribute({ + name: "x-chunk", + initializer: `"${chunkName}"`, + }) + + // Get the value of x-chunk-container attribute. + const containerAttr = component + .getAttribute("x-chunk-container") + ?.asKindOrThrow(SyntaxKind.JsxAttribute) + + const containerClassName = containerAttr + ?.getInitializer() + ?.asKindOrThrow(SyntaxKind.StringLiteral) + .getLiteralValue() + + containerAttr?.remove() + + const parentJsxElement = component.getParentIfKindOrThrow( + SyntaxKind.JsxElement + ) - const resolveFiles = item.files.map((file) => - item.external ? `${file}` : `registry/${style.name}/${file}` - ); + // Find all opening tags on component. + const children = parentJsxElement + .getDescendantsOfKind(SyntaxKind.JsxOpeningElement) + .map((node) => { + return node.getTagNameNode().getText() + }) + .concat( + parentJsxElement + .getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement) + .map((node) => { + return node.getTagNameNode().getText() + }) + ) + + const componentImports = new Map< + string, + string | string[] | Set + >() + children.forEach((child) => { + const importLine = imports.get(child) + if (importLine) { + const imports = componentImports.get(importLine.module) || [] + + const newImports = importLine.isDefault + ? importLine.text + : new Set([...imports, child]) + + componentImports.set( + importLine.module, + importLine?.isDefault ? newImports : Array.from(newImports) + ) + } + }) + + const componnetImportLines = Array.from( + componentImports.keys() + ).map((key) => { + const values = componentImports.get(key) + const specifier = Array.isArray(values) + ? `{${values.join(",")}}` + : values + + return `import ${specifier} from "${key}"` + }) + + const code = ` + 'use client' + + ${componnetImportLines.join("\n")} + + export default function Component() { + return (${parentJsxElement.getText()}) + }` + + const targetFile = file.replace(item.name, `${chunkName}`) + const targetFilePath = path.join( + cwd(), + `registry/${style.name}/${type}/${chunkName}.tsx` + ) - const type = item.type.split(':')[1]; + // Write component file. + rimraf.sync(targetFilePath) + await fs.writeFile(targetFilePath, code, "utf8") + + return { + name: chunkName, + description, + component: `React.lazy(() => import("@/registry/${style.name}/${type}/${chunkName}")),`, + file: targetFile, + container: { + className: containerClassName, + }, + } + }) + ) + + // // Write the source file for blocks only. + sourceFilename = `__registry__/${style.name}/${type}/${item.name}.tsx` + + if (item.files) { + const files = item.files.map((file) => + typeof file === "string" + ? { type: "registry:page", path: file } + : file + ) + if (files?.length) { + sourceFilename = `__registry__/${style.name}/${files[0].path}` + } + } - const importPath = item.external - ? `@/${item.files[0]}` - : `@/registry/${style.name}/${type}/${item.name}`; + const sourcePath = path.join(process.cwd(), sourceFilename) + if (!existsSync(sourcePath)) { + await fs.mkdir(sourcePath, { recursive: true }) + } - index += ` - '${item.name}': { - name: '${item.name}', - type: '${item.type}', - registryDependencies: ${JSON.stringify(item.registryDependencies ?? [])}, - ${ - item.items - ? `items: [${item.items.map((i) => `'${i}'`)}],` - : `files: [${resolveFiles.map((file) => `'${file}'`)}], - category: "${item.category}", - subcategory: "${item.subcategory}",` - }${ - item.items - ? '' - : ` - component: React.lazy(() => import('${importPath}')),` + rimraf.sync(sourcePath) + await fs.writeFile(sourcePath, sourceFile.getText()) } - },`; - - if (item.files.length > 1) { - // If 'items' is defined - for (const [subIndex, subItem] of item.files.entries()) { - if (subIndex === 0) continue; - const file = path.basename(subItem); + let componentPath = `@/registry/${style.name}/${type}/${item.name}` - const subName = file.slice(0, Math.max(0, file.indexOf('.'))); - const ext = file.slice(Math.max(file.indexOf('.'), -1)); + if (item.files) { + const files = item.files.map((file) => + typeof file === "string" + ? { type: "registry:page", path: file } + : file + ) + if (files?.length) { + componentPath = `@/registry/${style.name}/${files[0].path}` + } + } - if (['.ts', '.tsx'].includes(ext)) { - index += ` - '${subName}': { - name: '${subName}', - type: '${item.type}', + index += ` + "${item.name}": { + name: "${item.name}", + type: "${item.type}", registryDependencies: ${JSON.stringify(item.registryDependencies)}, - files: ['${resolveFiles[subIndex]}'], - component: React.lazy(() => import('@/registry/${ - style.name - }/${type}/${subName}')), - },`; + files: [${resolveFiles.map((file) => `"${file}"`)}], + component: React.lazy(() => import("${componentPath}")), + source: "${sourceFilename}", + category: "${item.category}", + subcategory: "${item.subcategory}", + chunks: [${chunks.map( + (chunk: any) => `{ + name: "${chunk.name}", + description: "${chunk.description ?? "No description"}", + component: ${chunk.component} + file: "${chunk.file}", + container: { + className: "${chunk.container.className}" } - } + }` + )}] + },` } + + index += ` + },` } index += ` - },`; } - -index += ` +` + + // ---------------------------------------------------------------------------- + // Build registry/index.json. + // ---------------------------------------------------------------------------- + const items = registry + .filter((item) => ["registry:ui"].includes(item.type)) + .map((item) => { + return { + ...item, + files: item.files?.map((_file) => { + const file = + typeof _file === "string" + ? { + path: _file, + type: item.type, + } + : _file + + return file + }), + } + }) + const registryJson = JSON.stringify(items, null, 2) + rimraf.sync(path.join(REGISTRY_PATH, "index.json")) + await fs.writeFile( + path.join(REGISTRY_PATH, "index.json"), + registryJson, + "utf8" + ) + + // Write style index. + rimraf.sync(path.join(process.cwd(), "__registry__/index.tsx")) + await fs.writeFile(path.join(process.cwd(), "__registry__/index.tsx"), index) } -`; -// Write style index. -const indexPath = path.join(process.cwd(), 'src/__registry__/index.tsx'); +// ---------------------------------------------------------------------------- +// Build registry/styles/[style]/[name].json. +// ---------------------------------------------------------------------------- +async function buildStyles(registry: Registry) { + for (const style of styles) { + const targetPath = path.join(REGISTRY_PATH, "styles", style.name) + + // Create directory if it doesn't exist. + if (!existsSync(targetPath)) { + await fs.mkdir(targetPath, { recursive: true }) + } -const writeFile: typeof fs.writeFileSync = (filePath, ...args) => { - const dirPath = path.dirname(filePath as string); + for (const item of registry) { + if (!REGISTRY_INDEX_WHITELIST.includes(item.type)) { + continue + } - rimraf.sync(filePath as string); + let files + if (item.files) { + files = await Promise.all( + item.files.map(async (_file) => { + const file = + typeof _file === "string" + ? { + path: _file, + type: item.type, + content: "", + target: "", + } + : _file + + const content = await fs.readFile( + path.join(process.cwd(), "registry", style.name, file.path), + "utf8" + ) - if (!fs.existsSync(dirPath)) { - fs.mkdirSync(dirPath, { recursive: true }); - } + const tempFile = await createTempSourceFile(file.path) + const sourceFile = project.createSourceFile(tempFile, content, { + scriptKind: ScriptKind.TSX, + }) + + sourceFile.getVariableDeclaration("iframeHeight")?.remove() + sourceFile.getVariableDeclaration("containerClassName")?.remove() + sourceFile.getVariableDeclaration("description")?.remove() + + return { + path: file.path, + type: file.type, + content: sourceFile.getText(), + target: file.target, + } + }) + ) + } - fs.writeFileSync(filePath, ...args); -}; + const payload = registryEntrySchema + .omit({ + source: true, + category: true, + subcategory: true, + chunks: true, + }) + .safeParse({ + ...item, + files, + }) + + if (payload.success) { + await fs.writeFile( + path.join(targetPath, `${item.name}.json`), + JSON.stringify(payload.data, null, 2), + "utf8" + ) + } + } + } -writeFile(indexPath, index); + // ---------------------------------------------------------------------------- + // Build registry/styles/index.json. + // ---------------------------------------------------------------------------- + const stylesJson = JSON.stringify(styles, null, 2) + await fs.writeFile( + path.join(REGISTRY_PATH, "styles/index.json"), + stylesJson, + "utf8" + ) +} // ---------------------------------------------------------------------------- -// Build registry/styles/[style]/[name].json. +// Build registry/styles/[name]/index.json. // ---------------------------------------------------------------------------- -for (const style of styles) { - const targetPath = path.join(REGISTRY_PATH, 'styles', style.name); +async function buildStylesIndex() { + for (const style of styles) { + const targetPath = path.join(REGISTRY_PATH, "styles", style.name) + + const dependencies = [ + "tailwindcss-animate", + "class-variance-authority", + "lucide-react", + ] + + // TODO: Remove this when we migrate to lucide-react. + // if (style.name === "new-york") { + // dependencies.push("@radix-ui/react-icons") + // } - for (const item of result.data) { - if (item.type !== 'components:plate-ui') { - continue; + const payload: RegistryEntry = { + name: style.name, + type: "registry:style", + dependencies, + registryDependencies: ["utils"], + tailwind: { + config: { + plugins: [`require("tailwindcss-animate")`], + }, + }, + cssVars: {}, + files: [], } - const files = item.files?.map((file) => { - const content = fs.readFileSync( - path.join(process.cwd(), 'src/registry', style.name, file), - 'utf8' - ); - - return { - content, - name: path.basename(file), - }; - }); - - const payload = { - ...item, - files, - }; - - writeFile( - path.join(targetPath, `${item.name}.json`), + await fs.writeFile( + path.join(targetPath, "index.json"), JSON.stringify(payload, null, 2), - 'utf8' - ); + "utf8" + ) } } -// ---------------------------------------------------------------------------- -// Build registry/styles/index.json. -// ---------------------------------------------------------------------------- -const stylesJson = JSON.stringify(styles, null, 2); -writeFile(path.join(REGISTRY_PATH, 'styles/index.json'), stylesJson, 'utf8'); - -// ---------------------------------------------------------------------------- -// Build registry/index.json. -// ---------------------------------------------------------------------------- -const names = result.data.filter((item) => item.type === 'components:plate-ui'); -const registryJson = JSON.stringify(names, null, 2); -writeFile(path.join(REGISTRY_PATH, 'index.json'), registryJson, 'utf8'); - // ---------------------------------------------------------------------------- // Build registry/colors/index.json. // ---------------------------------------------------------------------------- -const colorsTargetPath = path.join(REGISTRY_PATH, 'colors'); +async function buildThemes() { + const colorsTargetPath = path.join(REGISTRY_PATH, "colors") + rimraf.sync(colorsTargetPath) + if (!existsSync(colorsTargetPath)) { + await fs.mkdir(colorsTargetPath, { recursive: true }) + } -const colorsData: Record = {}; + const colorsData: Record = {} + for (const [color, value] of Object.entries(colors)) { + if (typeof value === "string") { + colorsData[color] = value + continue + } -for (const [color, value] of Object.entries(colors)) { - if (typeof value === 'string') { - colorsData[color] = value; + if (Array.isArray(value)) { + colorsData[color] = value.map((item) => ({ + ...item, + rgbChannel: item.rgb.replace(/^rgb\((\d+),(\d+),(\d+)\)$/, "$1 $2 $3"), + hslChannel: item.hsl.replace( + /^hsl\(([\d.]+),([\d.]+%),([\d.]+%)\)$/, + "$1 $2 $3" + ), + })) + continue + } - continue; - } - if (Array.isArray(value)) { - colorsData[color] = value.map((item) => ({ - ...item, - hslChannel: item.hsl.replace( - /^hsl\(([\d.]+),([\d.]+%),([\d.]+%)\)$/, - '$1 $2 $3' - ), - rgbChannel: item.rgb.replace(/^rgb\((\d+),(\d+),(\d+)\)$/, '$1 $2 $3'), - })); - - continue; - } - if (typeof value === 'object') { - colorsData[color] = { - ...value, - hslChannel: value.hsl.replace( - /^hsl\(([\d.]+),([\d.]+%),([\d.]+%)\)$/, - '$1 $2 $3' - ), - rgbChannel: value.rgb.replace(/^rgb\((\d+),(\d+),(\d+)\)$/, '$1 $2 $3'), - }; - - continue; + if (typeof value === "object") { + colorsData[color] = { + ...value, + rgbChannel: value.rgb.replace(/^rgb\((\d+),(\d+),(\d+)\)$/, "$1 $2 $3"), + hslChannel: value.hsl.replace( + /^hsl\(([\d.]+),([\d.]+%),([\d.]+%)\)$/, + "$1 $2 $3" + ), + } + continue + } } -} -writeFile( - path.join(colorsTargetPath, 'index.json'), - JSON.stringify(colorsData, null, 2), - 'utf8' -); + await fs.writeFile( + path.join(colorsTargetPath, "index.json"), + JSON.stringify(colorsData, null, 2), + "utf8" + ) -// ---------------------------------------------------------------------------- -// Build registry/colors/[base].json. -// ---------------------------------------------------------------------------- -export const BASE_STYLES = `@tailwind base; + // ---------------------------------------------------------------------------- + // Build registry/colors/[base].json. + // ---------------------------------------------------------------------------- + const BASE_STYLES = `@tailwind base; @tailwind components; @tailwind utilities; -`; + ` -export const BASE_STYLES_WITH_VARIABLES = `@tailwind base; + const BASE_STYLES_WITH_VARIABLES = `@tailwind base; @tailwind components; @tailwind utilities; - + @layer base { :root { --background: <%- colors.light["background"] %>; --foreground: <%- colors.light["foreground"] %>; - --card: <%- colors.light["card"] %>; --card-foreground: <%- colors.light["card-foreground"] %>; - --popover: <%- colors.light["popover"] %>; --popover-foreground: <%- colors.light["popover-foreground"] %>; - --primary: <%- colors.light["primary"] %>; --primary-foreground: <%- colors.light["primary-foreground"] %>; - --secondary: <%- colors.light["secondary"] %>; --secondary-foreground: <%- colors.light["secondary-foreground"] %>; - --muted: <%- colors.light["muted"] %>; --muted-foreground: <%- colors.light["muted-foreground"] %>; - --accent: <%- colors.light["accent"] %>; --accent-foreground: <%- colors.light["accent-foreground"] %>; - --destructive: <%- colors.light["destructive"] %>; --destructive-foreground: <%- colors.light["destructive-foreground"] %>; - --border: <%- colors.light["border"] %>; --input: <%- colors.light["input"] %>; --ring: <%- colors.light["ring"] %>; - --radius: 0.5rem; + --chart-1: <%- colors.light["chart-1"] %>; + --chart-2: <%- colors.light["chart-2"] %>; + --chart-3: <%- colors.light["chart-3"] %>; + --chart-4: <%- colors.light["chart-4"] %>; + --chart-5: <%- colors.light["chart-5"] %>; } - + .dark { --background: <%- colors.dark["background"] %>; --foreground: <%- colors.dark["foreground"] %>; - --card: <%- colors.dark["card"] %>; --card-foreground: <%- colors.dark["card-foreground"] %>; - --popover: <%- colors.dark["popover"] %>; --popover-foreground: <%- colors.dark["popover-foreground"] %>; - --primary: <%- colors.dark["primary"] %>; --primary-foreground: <%- colors.dark["primary-foreground"] %>; - --secondary: <%- colors.dark["secondary"] %>; --secondary-foreground: <%- colors.dark["secondary-foreground"] %>; - --muted: <%- colors.dark["muted"] %>; --muted-foreground: <%- colors.dark["muted-foreground"] %>; - --accent: <%- colors.dark["accent"] %>; --accent-foreground: <%- colors.dark["accent-foreground"] %>; - --destructive: <%- colors.dark["destructive"] %>; --destructive-foreground: <%- colors.dark["destructive-foreground"] %>; - --border: <%- colors.dark["border"] %>; --input: <%- colors.dark["input"] %>; --ring: <%- colors.dark["ring"] %>; + --chart-1: <%- colors.dark["chart-1"] %>; + --chart-2: <%- colors.dark["chart-2"] %>; + --chart-3: <%- colors.dark["chart-3"] %>; + --chart-4: <%- colors.dark["chart-4"] %>; + --chart-5: <%- colors.dark["chart-5"] %>; } } - + @layer base { * { @apply border-border; @@ -298,180 +583,198 @@ export const BASE_STYLES_WITH_VARIABLES = `@tailwind base; body { @apply bg-background text-foreground; } -}`; - -for (const baseColor of ['slate', 'gray', 'zinc', 'neutral', 'stone']) { - const base: Record = { - cssVars: {}, - inlineColors: {}, - }; - - for (const [mode, values] of Object.entries(colorMapping)) { - base.inlineColors[mode] = {}; - base.cssVars[mode] = {}; - - for (const [key, value] of Object.entries(values)) { - if (typeof value === 'string') { - const resolvedColor = (value as any).replaceAll( - '{{base}}-', - `${baseColor}-` - ); - base.inlineColors[mode][key] = resolvedColor; - - const [resolvedBase, scale] = resolvedColor.split('-'); - const color = scale - ? colorsData[resolvedBase].find( - (item) => item.scale === Number.parseInt(scale) - ) - : colorsData[resolvedBase]; +}` - if (color) { - base.cssVars[mode][key] = color.hslChannel; + for (const baseColor of ["slate", "gray", "zinc", "neutral", "stone"]) { + const base: Record = { + inlineColors: {}, + cssVars: {}, + } + for (const [mode, values] of Object.entries(colorMapping)) { + base["inlineColors"][mode] = {} + base["cssVars"][mode] = {} + for (const [key, value] of Object.entries(values)) { + if (typeof value === "string") { + // Chart colors do not have a 1-to-1 mapping with tailwind colors. + if (key.startsWith("chart-")) { + base["cssVars"][mode][key] = value + continue + } + + const resolvedColor = value.replace(/{{base}}-/g, `${baseColor}-`) + base["inlineColors"][mode][key] = resolvedColor + + const [resolvedBase, scale] = resolvedColor.split("-") + const color = scale + ? colorsData[resolvedBase].find( + (item: any) => item.scale === parseInt(scale) + ) + : colorsData[resolvedBase] + if (color) { + base["cssVars"][mode][key] = color.hslChannel + } } } } - } - // Build css vars. - base.inlineColorsTemplate = template(BASE_STYLES)({}); - base.cssVarsTemplate = template(BASE_STYLES_WITH_VARIABLES)({ - colors: base.cssVars, - }); - - writeFile( - path.join(REGISTRY_PATH, `colors/${baseColor}.json`), - JSON.stringify(base, null, 2), - 'utf8' - ); -} + // Build css vars. + base["inlineColorsTemplate"] = template(BASE_STYLES)({}) + base["cssVarsTemplate"] = template(BASE_STYLES_WITH_VARIABLES)({ + colors: base["cssVars"], + }) -// ---------------------------------------------------------------------------- -// Build registry/themes.css -// ---------------------------------------------------------------------------- -export const THEME_STYLES_WITH_VARIABLES = ` - .theme-<%- theme %> { - --background: <%- colors.light["background"] %>; - --foreground: <%- colors.light["foreground"] %>; - - --muted: <%- colors.light["muted"] %>; - --muted-foreground: <%- colors.light["muted-foreground"] %>; - - --popover: <%- colors.light["popover"] %>; - --popover-foreground: <%- colors.light["popover-foreground"] %>; - - --card: <%- colors.light["card"] %>; - --card-foreground: <%- colors.light["card-foreground"] %>; - - --border: <%- colors.light["border"] %>; - --input: <%- colors.light["input"] %>; - - --primary: <%- colors.light["primary"] %>; - --primary-foreground: <%- colors.light["primary-foreground"] %>; - - --secondary: <%- colors.light["secondary"] %>; - --secondary-foreground: <%- colors.light["secondary-foreground"] %>; - - --accent: <%- colors.light["accent"] %>; - --accent-foreground: <%- colors.light["accent-foreground"] %>; - - --destructive: <%- colors.light["destructive"] %>; - --destructive-foreground: <%- colors.light["destructive-foreground"] %>; - - --ring: <%- colors.light["ring"] %>; - - --radius: <%- colors.light["radius"] %>; - } - - .dark .theme-<%- theme %> { - --background: <%- colors.dark["background"] %>; - --foreground: <%- colors.dark["foreground"] %>; - - --muted: <%- colors.dark["muted"] %>; - --muted-foreground: <%- colors.dark["muted-foreground"] %>; - - --popover: <%- colors.dark["popover"] %>; - --popover-foreground: <%- colors.dark["popover-foreground"] %>; - - --card: <%- colors.dark["card"] %>; - --card-foreground: <%- colors.dark["card-foreground"] %>; - - --border: <%- colors.dark["border"] %>; - --input: <%- colors.dark["input"] %>; - - --primary: <%- colors.dark["primary"] %>; - --primary-foreground: <%- colors.dark["primary-foreground"] %>; - - --secondary: <%- colors.dark["secondary"] %>; - --secondary-foreground: <%- colors.dark["secondary-foreground"] %>; - - --accent: <%- colors.dark["accent"] %>; - --accent-foreground: <%- colors.dark["accent-foreground"] %>; - - --destructive: <%- colors.dark["destructive"] %>; - --destructive-foreground: <%- colors.dark["destructive-foreground"] %>; - - --ring: <%- colors.dark["ring"] %>; - }`; + await fs.writeFile( + path.join(REGISTRY_PATH, `colors/${baseColor}.json`), + JSON.stringify(base, null, 2), + "utf8" + ) -const themeCSS = []; + // ---------------------------------------------------------------------------- + // Build registry/themes.css + // ---------------------------------------------------------------------------- + const THEME_STYLES_WITH_VARIABLES = ` +.theme-<%- theme %> { + --background: <%- colors.light["background"] %>; + --foreground: <%- colors.light["foreground"] %>; -for (const theme of themes) { - themeCSS.push( - template(THEME_STYLES_WITH_VARIABLES)({ - colors: theme.cssVars, - theme: theme.name, - }) - ); + --muted: <%- colors.light["muted"] %>; + --muted-foreground: <%- colors.light["muted-foreground"] %>; + + --popover: <%- colors.light["popover"] %>; + --popover-foreground: <%- colors.light["popover-foreground"] %>; + + --card: <%- colors.light["card"] %>; + --card-foreground: <%- colors.light["card-foreground"] %>; + + --border: <%- colors.light["border"] %>; + --input: <%- colors.light["input"] %>; + + --primary: <%- colors.light["primary"] %>; + --primary-foreground: <%- colors.light["primary-foreground"] %>; + + --secondary: <%- colors.light["secondary"] %>; + --secondary-foreground: <%- colors.light["secondary-foreground"] %>; + + --accent: <%- colors.light["accent"] %>; + --accent-foreground: <%- colors.light["accent-foreground"] %>; + + --destructive: <%- colors.light["destructive"] %>; + --destructive-foreground: <%- colors.light["destructive-foreground"] %>; + + --ring: <%- colors.light["ring"] %>; + + --radius: <%- colors.light["radius"] %>; } -writeFile(path.join(REGISTRY_PATH, `themes.css`), themeCSS.join('\n'), 'utf8'); +.dark .theme-<%- theme %> { + --background: <%- colors.dark["background"] %>; + --foreground: <%- colors.dark["foreground"] %>; -// ---------------------------------------------------------------------------- -// Build registry/themes/[theme].json -// ---------------------------------------------------------------------------- -rimraf.sync(path.join(REGISTRY_PATH, 'themes')); - -for (const baseColor of ['slate', 'gray', 'zinc', 'neutral', 'stone']) { - const payload = { - cssVars: {}, - label: baseColor.charAt(0).toUpperCase() + baseColor.slice(1), - name: baseColor, - }; - - for (const [mode, values] of Object.entries(colorMapping)) { - payload.cssVars[mode] = {}; - - for (const [key, value] of Object.entries(values)) { - if (typeof value === 'string') { - const resolvedColor = value.replaceAll('{{base}}-', `${baseColor}-`); - payload.cssVars[mode][key] = resolvedColor; - - const [resolvedBase, scale] = resolvedColor.split('-'); - const color = scale - ? colorsData[resolvedBase].find( - (item) => item.scale === Number.parseInt(scale) - ) - : colorsData[resolvedBase]; + --muted: <%- colors.dark["muted"] %>; + --muted-foreground: <%- colors.dark["muted-foreground"] %>; - if (color) { - payload.cssVars[mode][key] = color.hslChannel; + --popover: <%- colors.dark["popover"] %>; + --popover-foreground: <%- colors.dark["popover-foreground"] %>; + + --card: <%- colors.dark["card"] %>; + --card-foreground: <%- colors.dark["card-foreground"] %>; + + --border: <%- colors.dark["border"] %>; + --input: <%- colors.dark["input"] %>; + + --primary: <%- colors.dark["primary"] %>; + --primary-foreground: <%- colors.dark["primary-foreground"] %>; + + --secondary: <%- colors.dark["secondary"] %>; + --secondary-foreground: <%- colors.dark["secondary-foreground"] %>; + + --accent: <%- colors.dark["accent"] %>; + --accent-foreground: <%- colors.dark["accent-foreground"] %>; + + --destructive: <%- colors.dark["destructive"] %>; + --destructive-foreground: <%- colors.dark["destructive-foreground"] %>; + + --ring: <%- colors.dark["ring"] %>; +}` + + const themeCSS = [] + for (const theme of baseColors) { + themeCSS.push( + // @ts-ignore + template(THEME_STYLES_WITH_VARIABLES)({ + colors: theme.cssVars, + theme: theme.name, + }) + ) + } + + await fs.writeFile( + path.join(REGISTRY_PATH, `themes.css`), + themeCSS.join("\n"), + "utf8" + ) + + // ---------------------------------------------------------------------------- + // Build registry/themes/[theme].json + // ---------------------------------------------------------------------------- + rimraf.sync(path.join(REGISTRY_PATH, "themes")) + for (const baseColor of ["slate", "gray", "zinc", "neutral", "stone"]) { + const payload: Record = { + name: baseColor, + label: baseColor.charAt(0).toUpperCase() + baseColor.slice(1), + cssVars: {}, + } + for (const [mode, values] of Object.entries(colorMapping)) { + payload.cssVars[mode] = {} + for (const [key, value] of Object.entries(values)) { + if (typeof value === "string") { + const resolvedColor = value.replace(/{{base}}-/g, `${baseColor}-`) + payload.cssVars[mode][key] = resolvedColor + + const [resolvedBase, scale] = resolvedColor.split("-") + const color = scale + ? colorsData[resolvedBase].find( + (item: any) => item.scale === parseInt(scale) + ) + : colorsData[resolvedBase] + if (color) { + payload["cssVars"][mode][key] = color.hslChannel + } + } } } + + const targetPath = path.join(REGISTRY_PATH, "themes") + + // Create directory if it doesn't exist. + if (!existsSync(targetPath)) { + await fs.mkdir(targetPath, { recursive: true }) + } + + await fs.writeFile( + path.join(targetPath, `${payload.name}.json`), + JSON.stringify(payload, null, 2), + "utf8" + ) } } +} - const targetPath = path.join(REGISTRY_PATH, 'themes'); +try { + const result = registrySchema.safeParse(registry) - // Create directory if it doesn't exist. - if (!fs.existsSync(targetPath)) { - fs.mkdirSync(targetPath, { recursive: true }); + if (!result.success) { + console.error(result.error) + process.exit(1) } - fs.writeFileSync( - path.join(targetPath, `${payload.name}.json`), - JSON.stringify(payload, null, 2), - 'utf8' - ); -} + await buildRegistry(result.data) + await buildStyles(result.data) + await buildStylesIndex() + await buildThemes() -console.info('✅ Done!'); + console.log("✅ Done!") +} catch (error) { + console.error(error) + process.exit(1) +} \ No newline at end of file diff --git a/apps/www/src/components/block-toolbar.tsx b/apps/www/src/components/block-toolbar.tsx index e4e63b5c55..ff76e33fcb 100644 --- a/apps/www/src/components/block-toolbar.tsx +++ b/apps/www/src/components/block-toolbar.tsx @@ -33,7 +33,7 @@ export function BlockToolbar({ return (
{ + setMounted(true); + }, []); + + return ( +
+ + + + + + + + +
+ + + + + + + + +
+ {mounted ? ( + <> + {['zinc', 'rose', 'blue', 'green', 'orange'].map((color) => { + const baseColor = baseColors.find( + (baseColor) => baseColor.name === color + ); + const isActive = config.theme === color; + + if (!baseColor) { + return null; + } + + return ( + + + + + + {baseColor.label} + + + ); + })} + + ) : ( +
+ + + + + +
+ )} +
+
+ +
+ ); +} + +function Customizer() { + const [mounted, setMounted] = React.useState(false); + const { resolvedTheme: mode, setTheme: setMode } = useTheme(); + const [config, setConfig] = useConfig(); + + React.useEffect(() => { + setMounted(true); + }, []); + + return ( + +
+
+
+ Customize +
+
+ Pick a style and color for your components. +
+
+ +
+
+
+
+ + + + + About styles + + +

+ What is the difference between the New York and Default style? +

+

+ A style comes with its own set of components, animations, + icons and more. +

+

+ The Default style has + larger inputs, uses lucide-react for icons and + tailwindcss-animate for animations. +

+

+ The New York style ships + with smaller buttons and cards with shadows. It uses icons + from Radix Icons. +

+
+
+
+
+ + {/* */} +
+
+
+ +
+ {baseColors.map((theme) => { + const isActive = config.theme === theme.name; + + return mounted ? ( + + ) : ( + + ); + })} +
+
+
+ +
+ {['0', '0.3', '0.5', '0.75', '1.0'].map((value) => { + return ( + + ); + })} +
+
+
+ +
+ {mounted ? ( + <> + + + + ) : ( + <> + + + + )} +
+
+
+
+ ); +} + +function CopyCodeButton({ + className, + ...props +}: React.ComponentProps) { + const [config] = useConfig(); + const activeTheme = baseColors.find((theme) => theme.name === config.theme); + const [hasCopied, setHasCopied] = React.useState(false); + + React.useEffect(() => { + setTimeout(() => { + setHasCopied(false); + }, 2000); + }, [hasCopied]); + + return ( + <> + {activeTheme && ( + + )} + + + + + + + Theme + + Copy and paste the following code into your CSS file. + + + + + {activeTheme && ( + + )} + + + + + ); +} + +function CustomizerCode() { + const [config] = useConfig(); + const activeTheme = baseColors.find((theme) => theme.name === config.theme); + + return ( + +
+
+          
+            @layer base {
+              :root {
+            
+                  --background:{' '}
+              {activeTheme?.cssVars.light.background};
+            
+            
+                  --foreground:{' '}
+              {activeTheme?.cssVars.light.foreground};
+            
+            {[
+              'card',
+              'popover',
+              'primary',
+              'secondary',
+              'muted',
+              'accent',
+              'destructive',
+            ].map((prefix) => (
+              <>
+                
+                      --{prefix}:{' '}
+                  {
+                    activeTheme?.cssVars.light[
+                      prefix as keyof typeof activeTheme.cssVars.light
+                    ]
+                  }
+                  ;
+                
+                
+                      --{prefix}-foreground:{' '}
+                  {
+                    activeTheme?.cssVars.light[
+                      `${prefix}-foreground` as keyof typeof activeTheme.cssVars.light
+                    ]
+                  }
+                  ;
+                
+              
+            ))}
+            
+                  --border:{' '}
+              {activeTheme?.cssVars.light.border};
+            
+            
+                  --input:{' '}
+              {activeTheme?.cssVars.light.input};
+            
+            
+                  --ring: {activeTheme?.cssVars.light.ring};
+            
+            
+                  --radius: {config.radius}rem;
+            
+            {['chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5'].map(
+              (prefix) => (
+                
+                      --{prefix}:{' '}
+                  {
+                    activeTheme?.cssVars.light[
+                      prefix as keyof typeof activeTheme.cssVars.light
+                    ]
+                  }
+                  ;
+                
+              )
+            )}
+              }
+             
+              .dark {
+            
+                  --background:{' '}
+              {activeTheme?.cssVars.dark.background};
+            
+            
+                  --foreground:{' '}
+              {activeTheme?.cssVars.dark.foreground};
+            
+            {[
+              'card',
+              'popover',
+              'primary',
+              'secondary',
+              'muted',
+              'accent',
+              'destructive',
+            ].map((prefix) => (
+              <>
+                
+                      --{prefix}:{' '}
+                  {
+                    activeTheme?.cssVars.dark[
+                      prefix as keyof typeof activeTheme.cssVars.dark
+                    ]
+                  }
+                  ;
+                
+                
+                      --{prefix}-foreground:{' '}
+                  {
+                    activeTheme?.cssVars.dark[
+                      `${prefix}-foreground` as keyof typeof activeTheme.cssVars.dark
+                    ]
+                  }
+                  ;
+                
+              
+            ))}
+            
+                  --border:{' '}
+              {activeTheme?.cssVars.dark.border};
+            
+            
+                  --input: {activeTheme?.cssVars.dark.input}
+              ;
+            
+            
+                  --ring: {activeTheme?.cssVars.dark.ring};
+            
+            {['chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5'].map(
+              (prefix) => (
+                
+                      --{prefix}:{' '}
+                  {
+                    activeTheme?.cssVars.dark[
+                      prefix as keyof typeof activeTheme.cssVars.dark
+                    ]
+                  }
+                  ;
+                
+              )
+            )}
+              }
+            }
+          
+        
+
+
+ ); +} + +function getThemeCode(theme: BaseColor, radius: number) { + if (!theme) { + return ''; + } + + return template(BASE_STYLES_WITH_VARIABLES)({ + colors: theme.cssVars, + radius, + }); +} + +const BASE_STYLES_WITH_VARIABLES = ` +@layer base { + :root { + --background: <%- colors.light["background"] %>; + --foreground: <%- colors.light["foreground"] %>; + --card: <%- colors.light["card"] %>; + --card-foreground: <%- colors.light["card-foreground"] %>; + --popover: <%- colors.light["popover"] %>; + --popover-foreground: <%- colors.light["popover-foreground"] %>; + --primary: <%- colors.light["primary"] %>; + --primary-foreground: <%- colors.light["primary-foreground"] %>; + --secondary: <%- colors.light["secondary"] %>; + --secondary-foreground: <%- colors.light["secondary-foreground"] %>; + --muted: <%- colors.light["muted"] %>; + --muted-foreground: <%- colors.light["muted-foreground"] %>; + --accent: <%- colors.light["accent"] %>; + --accent-foreground: <%- colors.light["accent-foreground"] %>; + --destructive: <%- colors.light["destructive"] %>; + --destructive-foreground: <%- colors.light["destructive-foreground"] %>; + --border: <%- colors.light["border"] %>; + --input: <%- colors.light["input"] %>; + --ring: <%- colors.light["ring"] %>; + --radius: <%- radius %>rem; + --chart-1: <%- colors.light["chart-1"] %>; + --chart-2: <%- colors.light["chart-2"] %>; + --chart-3: <%- colors.light["chart-3"] %>; + --chart-4: <%- colors.light["chart-4"] %>; + --chart-5: <%- colors.light["chart-5"] %>; + } + + .dark { + --background: <%- colors.dark["background"] %>; + --foreground: <%- colors.dark["foreground"] %>; + --card: <%- colors.dark["card"] %>; + --card-foreground: <%- colors.dark["card-foreground"] %>; + --popover: <%- colors.dark["popover"] %>; + --popover-foreground: <%- colors.dark["popover-foreground"] %>; + --primary: <%- colors.dark["primary"] %>; + --primary-foreground: <%- colors.dark["primary-foreground"] %>; + --secondary: <%- colors.dark["secondary"] %>; + --secondary-foreground: <%- colors.dark["secondary-foreground"] %>; + --muted: <%- colors.dark["muted"] %>; + --muted-foreground: <%- colors.dark["muted-foreground"] %>; + --accent: <%- colors.dark["accent"] %>; + --accent-foreground: <%- colors.dark["accent-foreground"] %>; + --destructive: <%- colors.dark["destructive"] %>; + --destructive-foreground: <%- colors.dark["destructive-foreground"] %>; + --border: <%- colors.dark["border"] %>; + --input: <%- colors.dark["input"] %>; + --ring: <%- colors.dark["ring"] %>; + --chart-1: <%- colors.dark["chart-1"] %>; + --chart-2: <%- colors.dark["chart-2"] %>; + --chart-3: <%- colors.dark["chart-3"] %>; + --chart-4: <%- colors.dark["chart-4"] %>; + --chart-5: <%- colors.dark["chart-5"] %>; + } +} +`; diff --git a/apps/www/src/components/theme-wrapper.tsx b/apps/www/src/components/theme-wrapper.tsx new file mode 100644 index 0000000000..ae95f70212 --- /dev/null +++ b/apps/www/src/components/theme-wrapper.tsx @@ -0,0 +1,35 @@ +'use client'; + +import { cn } from '@udecode/cn'; + +import { useConfig } from '@/hooks/use-config'; + +interface ThemeWrapperProps extends React.ComponentProps<'div'> { + defaultTheme?: string; +} + +export function ThemeWrapper({ + children, + className, + defaultTheme, +}: ThemeWrapperProps) { + const [config] = useConfig(); + + return ( +
+ {children} +
+ ); +} diff --git a/apps/www/src/components/themes-selector.tsx b/apps/www/src/components/themes-selector.tsx new file mode 100644 index 0000000000..5af81e8fdd --- /dev/null +++ b/apps/www/src/components/themes-selector.tsx @@ -0,0 +1,122 @@ +'use client'; +import * as React from 'react'; + +import { cn } from '@udecode/cn'; +import { useTheme } from 'next-themes'; + +import { useMediaQuery } from '@/hooks/use-media-query'; +import { useThemesConfig } from '@/hooks/use-themes-config'; +import { type Theme, THEMES } from '@/lib/themes'; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/registry/default/plate-ui/tooltip'; + +import { Skeleton } from './ui/skeleton'; +import { ToggleGroup, ToggleGroupItem } from './ui/toggle-group'; + +export function ThemesSwitcher({ + className, + themes = THEMES, +}: React.ComponentProps<'div'> & { themes?: Theme[] }) { + const { theme: mode } = useTheme(); + const [mounted, setMounted] = React.useState(false); + const { setThemesConfig, themesConfig } = useThemesConfig(); + const activeTheme = themesConfig.activeTheme; + const isDesktop = useMediaQuery('(min-width: 1024px)'); + React.useEffect(() => { + setMounted(true); + }, []); + + if (!mounted) { + return ( +
+ {themes.map((theme) => ( +
+ +
+ ))} +
+ ); + } + + return ( + { + const theme = themes.find((theme) => theme.name === value); + + if (!theme) { + return; + } + + setThemesConfig({ ...themesConfig, activeTheme: theme }); + }} + type="single" + > + {themes.map((theme) => { + const isActive = theme.name === activeTheme.name; + const isDarkTheme = ['Midnight'].includes(theme.name); + const cssVars = + mounted && mode === 'dark' ? theme.cssVars.dark : theme.cssVars.light; + + return ( + + + +
+
+ + + + + {theme.name} +
+
+
+
+ + {theme.name} + +
+ ); + })} +
+ ); +} diff --git a/apps/www/src/components/themes-styles.tsx b/apps/www/src/components/themes-styles.tsx new file mode 100644 index 0000000000..1d829ff5bd --- /dev/null +++ b/apps/www/src/components/themes-styles.tsx @@ -0,0 +1,28 @@ +'use client'; + +export function ThemesStyle() { + const { themesConfig } = useThemesConfig(); + + if (!themesConfig.activeTheme) { + return null; + } + + return ( + + ); +} diff --git a/apps/www/src/components/toc.tsx b/apps/www/src/components/toc.tsx index f9ded90e75..72e5340ba2 100644 --- a/apps/www/src/components/toc.tsx +++ b/apps/www/src/components/toc.tsx @@ -6,8 +6,6 @@ import type { TableOfContents } from '@/lib/toc'; import { cn } from '@udecode/cn'; -import { useMounted } from '@/hooks/use-mounted'; - interface TocProps { toc: TableOfContents; } @@ -28,9 +26,8 @@ export function DashboardTableOfContents({ toc }: TocProps) { [toc] ); const activeHeading = useActiveItem(itemIds); - const mounted = useMounted(); - if (!toc?.items || !mounted) { + if (!toc?.items?.length) { return null; } diff --git a/apps/www/src/hooks/use-config.ts b/apps/www/src/hooks/use-config.ts index 750d9f37da..d90326ea87 100644 --- a/apps/www/src/hooks/use-config.ts +++ b/apps/www/src/hooks/use-config.ts @@ -1,5 +1,4 @@ import type { Style } from '@/registry/styles'; -import type { Theme } from '@/registry/themes'; import { useAtom } from 'jotai'; import { atomWithStorage } from 'jotai/utils'; @@ -7,7 +6,7 @@ import { atomWithStorage } from 'jotai/utils'; type Config = { radius: number; style: Style['name']; - theme: Theme['name']; + theme: BaseColor['name']; }; const configAtom = atomWithStorage('config', { diff --git a/apps/www/src/hooks/use-themes-config.ts b/apps/www/src/hooks/use-themes-config.ts new file mode 100644 index 0000000000..6b943b63b5 --- /dev/null +++ b/apps/www/src/hooks/use-themes-config.ts @@ -0,0 +1,16 @@ +import { useAtom } from 'jotai'; +import { atomWithStorage } from 'jotai/utils'; + +import { type Theme, THEMES } from '@/lib/themes'; +type ThemesConfig = { + activeTheme: Theme; +}; +const configAtom = atomWithStorage('themes:config', { + activeTheme: THEMES[0], +}); + +export function useThemesConfig() { + const [themesConfig, setThemesConfig] = useAtom(configAtom); + + return { setThemesConfig, themesConfig }; +} diff --git a/apps/www/src/lib/_blocks.ts b/apps/www/src/lib/_blocks.ts index 86e58f4760..5078061de4 100644 --- a/apps/www/src/lib/_blocks.ts +++ b/apps/www/src/lib/_blocks.ts @@ -27,7 +27,7 @@ const project = new Project({ export async function getAllBlockIds( style: Style['name'] = DEFAULT_BLOCKS_STYLE ) { - const blocks = _getAllBlocks(style); + const blocks = await _getAllBlocks(style); return blocks.map((block) => block.name); } @@ -76,15 +76,15 @@ export async function getBlock( ...entry, ...content, chunks, - type: 'components:block', + type: 'registry:block', }); } -function _getAllBlocks(style: Style['name'] = DEFAULT_BLOCKS_STYLE) { +async function _getAllBlocks(style: Style['name'] = DEFAULT_BLOCKS_STYLE) { const index = z.record(registryEntrySchema).parse(Index[style]); return Object.values(index).filter( - (block) => block.type === 'components:block' + (block) => block.type === ('registry:block' as any) ); } @@ -93,6 +93,13 @@ async function _getBlockCode( style: Style['name'] = DEFAULT_BLOCKS_STYLE ) { const entry = Index[style][name]; + + if (!entry) { + console.error(`Block ${name} not found in style ${style}`); + + return ''; + } + const block = registryEntrySchema.parse(entry); if (!block.source) { @@ -123,7 +130,6 @@ async function _getBlockContent(name: string, style: Style['name']) { }); // Extract meta. - const description = _extractVariable(sourceFile, 'description'); const iframeHeight = _extractVariable(sourceFile, 'iframeHeight'); const containerClassName = _extractVariable(sourceFile, 'containerClassName'); @@ -138,7 +144,6 @@ async function _getBlockContent(name: string, style: Style['name']) { className: containerClassName, height: iframeHeight, }, - description, }; } diff --git a/apps/www/src/lib/themes/dark.json b/apps/www/src/lib/highlighter-theme.json similarity index 100% rename from apps/www/src/lib/themes/dark.json rename to apps/www/src/lib/highlighter-theme.json diff --git a/apps/www/src/lib/rehype-component.ts b/apps/www/src/lib/rehype-component.ts index 1744a61a0f..ed68081db5 100644 --- a/apps/www/src/lib/rehype-component.ts +++ b/apps/www/src/lib/rehype-component.ts @@ -7,7 +7,7 @@ import { u } from 'unist-builder'; import { visit } from 'unist-util-visit'; import { Index } from '../__registry__'; -import { styles } from '../registry/styles'; +import { styles } from '../registry/registry-styles'; // NOTE: shadcn fork export function rehypeComponent() { diff --git a/apps/www/src/lib/themes.ts b/apps/www/src/lib/themes.ts new file mode 100644 index 0000000000..e10ea2bb45 --- /dev/null +++ b/apps/www/src/lib/themes.ts @@ -0,0 +1,508 @@ +const _THEMES = [ + { + id: 'default-shadcn', + colors: { + accent: '240 4.8% 95.9%', + 'accent-foreground': '240 5.9% 10%', + background: '0 0% 100%', + border: '240 5.9% 90%', + card: '0 0% 100%', + 'card-foreground': '240 10% 3.9%', + 'chart-1': '173 58% 39%', + 'chart-2': '12 76% 61%', + 'chart-3': '197 37% 24%', + 'chart-4': '43 74% 66%', + 'chart-5': '27 87% 67%', + destructive: '0 84.2% 60.2%', + 'destructive-foreground': '0 0% 98%', + foreground: '240 10% 3.9%', + input: '240 5.9% 90%', + muted: '240 4.8% 95.9%', + 'muted-foreground': '240 3.8% 46.1%', + popover: '0 0% 100%', + 'popover-foreground': '240 10% 3.9%', + primary: '240 5.9% 10%', + 'primary-foreground': '0 0% 98%', + ring: '240 10% 3.9%', + secondary: '240 4.8% 95.9%', + 'secondary-foreground': '240 5.9% 10%', + }, + colorsDark: { + accent: '240 3.7% 15.9%', + 'accent-foreground': '0 0% 98%', + background: '240 10% 3.9%', + border: '240 3.7% 15.9%', + card: '240 10% 3.9%', + 'card-foreground': '0 0% 98%', + 'chart-1': '220 70% 50%', + 'chart-2': '340 75% 55%', + 'chart-3': '30 80% 55%', + 'chart-4': '280 65% 60%', + 'chart-5': '160 60% 45%', + destructive: '0 62.8% 30.6%', + 'destructive-foreground': '0 0% 98%', + foreground: '0 0% 98%', + input: '240 3.7% 15.9%', + muted: '240 3.7% 15.9%', + 'muted-foreground': '240 5% 64.9%', + popover: '240 10% 3.9%', + 'popover-foreground': '0 0% 98%', + primary: '0 0% 98%', + 'primary-foreground': '240 5.9% 10%', + ring: '240 4.9% 83.9%', + secondary: '240 3.7% 15.9%', + 'secondary-foreground': '0 0% 98%', + }, + fontFamily: { + body: { + name: 'Inter', + type: 'sans-serif', + }, + heading: { + name: 'Inter', + type: 'sans-serif', + }, + }, + name: 'Default', + radius: 0.5, + }, + { + id: 'default-palette', + colors: { + accent: '240 4.8% 95.9%', + 'accent-foreground': '240 5.9% 10%', + background: '0 0% 100%', + border: '240 5.9% 90%', + card: '0 0% 100%', + 'card-foreground': '240 10% 3.9%', + 'chart-1': '12 76% 61%', + 'chart-2': '173 58% 39%', + 'chart-3': '197 37% 24%', + 'chart-4': '43 74% 66%', + 'chart-5': '27 87% 67%', + destructive: '0 84.2% 60.2%', + 'destructive-foreground': '0 0% 98%', + foreground: '240 10% 3.9%', + input: '240 5.9% 90%', + muted: '240 4.8% 95.9%', + 'muted-foreground': '240 3.8% 46.1%', + popover: '0 0% 100%', + 'popover-foreground': '240 10% 3.9%', + primary: '240 5.9% 10%', + 'primary-foreground': '0 0% 98%', + ring: '240 10% 3.9%', + secondary: '240 4.8% 95.9%', + 'secondary-foreground': '240 5.9% 10%', + }, + colorsDark: { + accent: '240 3.7% 15.9%', + 'accent-foreground': '0 0% 98%', + background: '240 10% 3.9%', + border: '240 3.7% 15.9%', + card: '240 10% 3.9%', + 'card-foreground': '0 0% 98%', + 'chart-1': '220 70% 50%', + 'chart-2': '160 60% 45%', + 'chart-3': '30 80% 55%', + 'chart-4': '280 65% 60%', + 'chart-5': '340 75% 55%', + destructive: '0 62.8% 30.6%', + 'destructive-foreground': '0 0% 98%', + foreground: '0 0% 98%', + input: '240 3.7% 15.9%', + muted: '240 3.7% 15.9%', + 'muted-foreground': '240 5% 64.9%', + popover: '240 10% 3.9%', + 'popover-foreground': '0 0% 98%', + primary: '0 0% 98%', + 'primary-foreground': '240 5.9% 10%', + ring: '240 4.9% 83.9%', + secondary: '240 3.7% 15.9%', + 'secondary-foreground': '0 0% 98%', + }, + fontFamily: { + body: { + name: 'Inter', + type: 'sans-serif', + }, + heading: { + name: 'Inter', + type: 'sans-serif', + }, + }, + name: 'Palette', + radius: 0.5, + }, + { + id: 'default-sapphire', + colors: { + accent: '210 40% 96.1%', + accentForeground: '222.2 47.4% 11.2%', + background: '0 0% 100%', + border: '214.3 31.8% 91.4%', + card: '0 0% 100%', + cardForeground: '222.2 84% 4.9%', + 'chart-1': '221.2 83.2% 53.3%', + 'chart-2': '212 95% 68%', + 'chart-3': '216 92% 60%', + 'chart-4': '210 98% 78%', + 'chart-5': '212 97% 87%', + destructive: '0 72% 51%', + destructiveForeground: '210 40% 98%', + foreground: '222.2 84% 4.9%', + input: '214.3 31.8% 91.4%', + muted: '210 40% 96.1%', + mutedForeground: '215.4 16.3% 44%', + popover: '0 0% 100%', + popoverForeground: '222.2 84% 4.9%', + primary: '221.2 83.2% 53.3%', + primaryForeground: '210 40% 98%', + ring: '221.2 83.2% 53.3%', + secondary: '210 40% 96.1%', + secondaryForeground: '222.2 47.4% 11.2%', + }, + colorsDark: { + accent: '240 3.7% 15.9%', + 'accent-foreground': '0 0% 98%', + background: '240 10% 3.9%', + border: '240 3.7% 15.9%', + card: '240 10% 3.9%', + 'card-foreground': '0 0% 98%', + 'chart-1': '221.2 83.2% 53.3%', + 'chart-2': '212 95% 68%', + 'chart-3': '216 92% 60%', + 'chart-4': '210 98% 78%', + 'chart-5': '212 97% 87%', + destructive: '0 72% 51%', + destructiveForeground: '210 40% 98%', + foreground: '0 0% 98%', + input: '240 3.7% 15.9%', + muted: '240 3.7% 15.9%', + 'muted-foreground': '240 5% 64.9%', + popover: '240 10% 3.9%', + 'popover-foreground': '0 0% 98%', + primary: '221.2 83.2% 53.3%', + primaryForeground: '210 40% 98%', + ring: '221.2 83.2% 53.3%', + secondary: '210 40% 96.1%', + secondaryForeground: '222.2 47.4% 11.2%', + }, + fontFamily: { + body: { + name: 'Inter', + type: 'sans-serif', + }, + heading: { + name: 'Inter', + type: 'sans-serif', + }, + }, + name: 'Sapphire', + radius: 0.5, + }, + { + id: 'default-ruby', + colors: { + accent: '240 4.8% 95.9%', + accentForeground: '240 5.9% 10%', + background: '0 0% 100%', + border: '240 5.9% 90%', + card: '0 0% 100%', + cardForeground: '240 10% 3.9%', + 'chart-1': '347 77% 50%', + 'chart-2': '352 83% 91%', + 'chart-3': '350 80% 72%', + 'chart-4': '351 83% 82%', + 'chart-5': '349 77% 62%', + destructive: '0 72% 51%', + destructiveForeground: '0 0% 98%', + foreground: '240 10% 3.9%', + input: '240 5.9% 90%', + muted: '240 4.8% 95.9%', + mutedForeground: '240 3.8% 45%', + popover: '0 0% 100%', + popoverForeground: '240 10% 3.9%', + primary: '346.8 77.2% 49.8%', + primaryForeground: '355.7 100% 99%', + ring: '346.8 77.2% 49.8%', + secondary: '240 4.8% 95.9%', + secondaryForeground: '240 5.9% 10%', + }, + colorsDark: { + accent: '240 3.7% 15.9%', + 'accent-foreground': '0 0% 98%', + background: '240 10% 3.9%', + border: '240 3.7% 15.9%', + card: '240 10% 3.9%', + 'card-foreground': '0 0% 98%', + 'chart-1': '347 77% 50%', + 'chart-2': '349 77% 62%', + 'chart-3': '350 80% 72%', + 'chart-4': '351 83% 82%', + 'chart-5': '352 83% 91%', + destructive: '0 72% 51%', + destructiveForeground: '0 0% 98%', + foreground: '0 0% 98%', + input: '240 3.7% 15.9%', + muted: '240 3.7% 15.9%', + 'muted-foreground': '240 5% 64.9%', + popover: '240 10% 3.9%', + 'popover-foreground': '0 0% 98%', + primary: '346.8 77.2% 49.8%', + primaryForeground: '355.7 100% 99%', + ring: '221.2 83.2% 53.3%', + secondary: '240 4.8% 95.9%', + secondaryForeground: '240 5.9% 10%', + }, + fontFamily: { + body: { + name: 'Inter', + type: 'sans-serif', + }, + heading: { + name: 'Inter', + type: 'sans-serif', + }, + }, + name: 'Ruby', + radius: 0.5, + }, + { + id: 'default-emerald', + colors: { + accent: '240 4.8% 95.9%', + accentForeground: '240 5.9% 10%', + background: '0 0% 100%', + border: '240 5.9% 90%', + card: '0 0% 100%', + cardForeground: '240 10% 3.9%', + 'chart-1': '139 65% 20%', + 'chart-2': '140 74% 44%', + 'chart-3': '142 88% 28%', + 'chart-4': '137 55% 15%', + 'chart-5': '141 40% 9%', + destructive: '0 72% 51%', + destructiveForeground: '0 0% 98%', + foreground: '240 10% 3.9%', + input: '240 5.9% 90%', + muted: '240 4.8% 95.9%', + mutedForeground: '240 3.8% 45%', + popover: '0 0% 100%', + popoverForeground: '240 10% 3.9%', + primary: '142 86% 28%', + primaryForeground: '356 29% 98%', + ring: '142 86% 28%', + secondary: '240 4.8% 95.9%', + secondaryForeground: '240 5.9% 10%', + }, + colorsDark: { + accent: '240 3.7% 15.9%', + 'accent-foreground': '0 0% 98%', + background: '240 10% 3.9%', + border: '240 3.7% 15.9%', + card: '240 10% 3.9%', + 'card-foreground': '0 0% 98%', + 'chart-1': '142 88% 28%', + 'chart-2': '139 65% 20%', + 'chart-3': '140 74% 24%', + 'chart-4': '137 55% 15%', + 'chart-5': '141 40% 9%', + destructive: '0 72% 51%', + destructiveForeground: '0 0% 98%', + foreground: '0 0% 98%', + input: '240 3.7% 15.9%', + muted: '240 3.7% 15.9%', + 'muted-foreground': '240 5% 64.9%', + popover: '240 10% 3.9%', + 'popover-foreground': '0 0% 98%', + primary: '142 86% 28%', + primaryForeground: '356 29% 98%', + ring: '142 86% 28%', + secondary: '240 4.8% 95.9%', + secondaryForeground: '240 5.9% 10%', + }, + fontFamily: { + body: { + name: 'Inter', + type: 'sans-serif', + }, + heading: { + name: 'Inter', + type: 'sans-serif', + }, + }, + name: 'Emerald', + radius: 0.5, + }, + { + id: 'default-daylight', + colors: { + accent: '36 64% 57%', + accentForeground: '36 72% 17%', + background: '36 39% 88%', + border: '36 45% 60%', + card: '36 46% 82%', + cardForeground: '36 45% 20%', + 'chart-1': '25 34% 28%', + 'chart-2': '26 36% 34%', + 'chart-3': '28 40% 40%', + 'chart-4': '31 41% 48%', + 'chart-5': '35 43% 53%', + destructive: '0 84% 37%', + destructiveForeground: '0 0% 98%', + foreground: '36 45% 15%', + input: '36 45% 60%', + muted: '36 33% 75%', + mutedForeground: '36 45% 25%', + popover: '0 0% 100%', + popoverForeground: '240 10% 3.9%', + primary: '36 45% 70%', + primaryForeground: '36 45% 11%', + ring: '36 45% 30%', + secondary: '40 35% 77%', + secondaryForeground: '36 45% 25%', + }, + colorsDark: { + accent: '36 64% 57%', + accentForeground: '36 72% 17%', + background: '36 39% 88%', + border: '36 45% 60%', + card: '36 46% 82%', + cardForeground: '36 45% 20%', + 'chart-1': '25 34% 28%', + 'chart-2': '26 36% 34%', + 'chart-3': '28 40% 40%', + 'chart-4': '31 41% 48%', + 'chart-5': '35 43% 53%', + destructive: '0 84% 37%', + destructiveForeground: '0 0% 98%', + foreground: '36 45% 15%', + input: '36 45% 60%', + muted: '36 33% 75%', + mutedForeground: '36 45% 25%', + popover: '0 0% 100%', + popoverForeground: '240 10% 3.9%', + primary: '36 45% 70%', + primaryForeground: '36 45% 11%', + ring: '36 45% 30%', + secondary: '40 35% 77%', + secondaryForeground: '36 45% 25%', + }, + fontFamily: { + body: { + name: 'Space Mono', + type: 'monospace', + }, + heading: { + name: 'DM Sans', + type: 'sans-serif', + }, + }, + name: 'Daylight', + }, + { + id: 'default-midnight', + colors: { + accent: '240 0% 13%', + accentForeground: '60 0% 100%', + background: '240 5% 6%', + border: '240 6% 20%', + card: '240 4% 10%', + cardForeground: '60 5% 90%', + 'chart-1': '359 2% 90%', + 'chart-2': '240 1% 74%', + 'chart-3': '240 1% 58%', + 'chart-4': '240 1% 42%', + 'chart-5': '240 2% 26%', + destructive: '0 60% 50%', + destructiveForeground: '0 0% 98%', + foreground: '60 5% 90%', + input: '240 6% 20%', + muted: '240 5% 25%', + mutedForeground: '60 5% 85%', + popover: '240 5% 15%', + popoverForeground: '60 5% 85%', + primary: '240 0% 90%', + primaryForeground: '60 0% 0%', + ring: '240 5% 90%', + secondary: '240 4% 15%', + secondaryForeground: '60 5% 85%', + }, + colorsDark: { + accent: '240 0% 13%', + accentForeground: '60 0% 100%', + background: '240 5% 6%', + border: '240 6% 20%', + card: '240 4% 10%', + cardForeground: '60 5% 90%', + 'chart-1': '359 2% 90%', + 'chart-2': '240 1% 74%', + 'chart-3': '240 1% 58%', + 'chart-4': '240 1% 42%', + 'chart-5': '240 2% 26%', + destructive: '0 60% 50%', + destructiveForeground: '0 0% 98%', + foreground: '60 5% 90%', + input: '240 6% 20%', + muted: '240 5% 25%', + mutedForeground: '60 5% 85%', + popover: '240 5% 15%', + popoverForeground: '60 5% 85%', + primary: '240 0% 90%', + primaryForeground: '60 0% 0%', + ring: '240 5% 90%', + secondary: '240 4% 15%', + secondaryForeground: '60 5% 85%', + }, + fontFamily: { + body: { + name: 'Manrope', + type: 'sans-serif', + }, + heading: { + name: 'Manrope', + type: 'sans-serif', + }, + }, + name: 'Midnight', + radius: 0.5, + }, +] as const; + +export function themeColorsToCssVariables( + colors: Record +): Record { + const cssVars = colors + ? Object.fromEntries( + Object.entries(colors).map(([name, value]) => { + if (value === undefined) return []; + + const cssName = themeColorNameToCssVariable(name); + + return [cssName, value]; + }) + ) + : {}; + + // for (const key of Array.from({ length: 5 }, (_, index) => index)) { + // cssVars[`--chart-${key + 1}`] = + // cssVars[`--chart-${key + 1}`] || + // `${cssVars["--primary"]} / ${100 - key * 20}%` + // } + + return cssVars; +} + +export function themeColorNameToCssVariable(name: string) { + return `--${name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`; +} + +export const THEMES = _THEMES.map((theme) => ({ + ...theme, + cssVars: { + dark: themeColorsToCssVariables(theme.colorsDark), + light: themeColorsToCssVariables(theme.colors), + }, +})); + +export type Theme = (typeof THEMES)[number]; diff --git a/apps/www/src/lib/themes/light.json b/apps/www/src/lib/themes/light.json deleted file mode 100644 index b146dd0206..0000000000 --- a/apps/www/src/lib/themes/light.json +++ /dev/null @@ -1,380 +0,0 @@ -{ - "name": "Lambda Studio — Whiteout", - "semanticHighlighting": true, - "colors": { - "editorLink.activeForeground": "#ca8a0488", - "foreground": "#0008", - "button.background": "#000", - "button.foreground": "#fff", - "button.hoverBackground": "#000b", - "list.highlightForeground": "#000", - "textLink.foreground": "#000", - "scrollbar.shadow": "#fff", - "textLink.activeForeground": "#0008", - "editor.lineHighlightBackground": "#8881", - "editor.lineHighlightBorder": "#8882", - "editorCursor.foreground": "#000", - "editor.findMatchBackground": "#0008", - "editor.findMatchHighlightBackground": "#0002", - "list.activeSelectionForeground": "#000", - "list.focusForeground": "#000", - "list.hoverForeground": "#000", - "list.inactiveSelectionForeground": "#000", - "list.inactiveSelectionBackground": "#fff", - "list.focusBackground": "#fff", - "list.focusAndSelectionOutline": "#fff", - "list.focusHighlightForeground": "#000", - "list.hoverBackground": "#fff", - "list.focusOutline": "#fff", - "list.activeSelectionBackground": "#fff", - "editorIndentGuide.background": "#0002", - "editor.background": "#fff", - "editor.foreground": "#000", - "editor.foldBackground": "#fff", - "editor.hoverHighlightBackground": "#fff", - "editor.selectionBackground": "#8888", - "editor.inactiveSelectionBackground": "#8882", - "gitDecoration.modifiedResourceForeground": "#000", - "gitDecoration.untrackedResourceForeground": "#a7cb7b", - "gitDecoration.conflictingResourceForeground": "#ca8a04", - "gitDecoration.deletedResourceForeground": "#c97b89", - "listFilterWidget.background": "#fff", - "input.background": "#0001", - "titleBar.activeForeground": "#000", - "editorWidget.background": "#fff", - "editorGutter.background": "#fff", - "debugToolBar.background": "#fff", - "commandCenter.background": "#fff", - "sideBarSectionHeader.background": "#fff", - "focusBorder": "#0008", - "titleBar.activeBackground": "#fff", - "titleBar.inactiveBackground": "#fff", - "breadcrumb.background": "#fff", - "activityBar.background": "#fff", - "activityBar.foreground": "#0008", - "panel.background": "#fff", - "sideBar.background": "#fff", - "sideBarTitle.foreground": "#0008", - "tab.hoverBackground": "#fff", - "terminal.background": "#fff", - "statusBar.background": "#fff", - "statusBar.foreground": "#0008", - "selection.background": "#0002", - "editorPane.background": "#fff", - "badge.background": "#fff", - "banner.background": "#fff", - "menu.background": "#fff", - "activityBarBadge.background": "#fff", - "activityBarBadge.foreground": "#0008", - "editorLineNumber.foreground": "#0002", - "editorLineNumber.activeForeground": "#0008", - "statusBarItem.errorBackground": "#f43f5e" - }, - "semanticTokenColors": { - "comment": { - "foreground": "#0004" - }, - "keyword": { - "foreground": "#0008" - }, - "string": { - "foreground": "#0008" - }, - "selfKeyword": { - "foreground": "#000", - "bold": true - }, - "method.declaration": { - "foreground": "#000", - "bold": true - }, - "method.definition": { - "foreground": "#000", - "bold": true - }, - "method": { - "foreground": "#000", - "bold": false - }, - "function.declaration": { - "foreground": "#000", - "bold": true - }, - "function.definition": { - "foreground": "#000", - "bold": true - }, - "function": { - "foreground": "#000", - "bold": false - }, - "property": { - "foreground": "#000" - }, - "enumMember": { - "foreground": "#0008", - "bold": false - }, - "enum": { - "foreground": "#000", - "bold": true - }, - "boolean": { - "foreground": "#0008" - }, - "number": { - "foreground": "#0008" - }, - "type": { - "foreground": "#000", - "bold": true - }, - "typeAlias": { - "foreground": "#000", - "bold": true - }, - "class": { - "foreground": "#000", - "bold": true - }, - "selfTypeKeyword": { - "foreground": "#000", - "bold": true - }, - "builtinType": { - "foreground": "#000", - "bold": true - }, - "interface": { - "foreground": "#0008", - "bold": false - }, - "typeParameter": { - "foreground": "#000", - "bold": true - }, - "lifetime": { - "foreground": "#0008", - "italic": false, - "bold": false - }, - "namespace": { - "foreground": "#000" - }, - "macro": { - "foreground": "#000", - "bold": false - }, - "decorator": { - "foreground": "#000", - "bold": false - }, - "builtinAttribute": { - "foreground": "#000", - "bold": false - }, - "generic.attribute": { - "foreground": "#000" - }, - "derive": { - "foreground": "#000" - }, - "operator": { - "foreground": "#0008" - }, - "variable": { - "foreground": "#000" - }, - "variable.readonly": { - "foreground": "#0008" - }, - "parameter": { - "foreground": "#000" - }, - "variable.mutable": { - "underline": true - }, - "parameter.mutable": { - "underline": true - }, - "selfKeyword.mutable": { - "underline": true - }, - "variable.constant": { - "foreground": "#0008" - }, - "struct": { - "foreground": "#000", - "bold": true - } - }, - "tokenColors": [ - { - "name": "Fallback Operator", - "scope": ["keyword.operator"], - "settings": { - "foreground": "#0008" - } - }, - { - "name": "Fallback keywords", - "scope": [ - "storage.type.ts", - "keyword", - "keyword.other", - "keyword.control", - "storage.type", - "storage.modifier" - ], - "settings": { - "foreground": "#0008" - } - }, - { - "name": "Fallback strings", - "scope": ["string"], - "settings": { - "foreground": "#0008" - } - }, - { - "name": "Fallback JSON Properties", - "scope": ["support.type.property-name.json"], - "settings": { - "foreground": "#000" - } - }, - { - "name": "Fallback string variables", - "scope": ["string variable", "string meta.interpolation"], - "settings": { - "foreground": "#000" - } - }, - { - "name": "Fallback comments", - "scope": ["comment"], - "settings": { - "foreground": "#0004" - } - }, - { - "name": "Fallback constants", - "scope": ["constant"], - "settings": { - "foreground": "#0008" - } - }, - { - "name": "Fallback self/this", - "scope": ["variable.language.this"], - "settings": { - "foreground": "#000" - } - }, - { - "name": "Fallback types", - "scope": [ - "entity.other.alias", - "source.php support.class", - "entity.name.type", - "meta.function-call support.class", - "keyword.other.type", - "entity.other.inherited-class" - ], - "settings": { - "foreground": "#000", - "fontStyle": "bold" - } - }, - { - "name": "Fallback method calls", - "scope": ["meta.method-call entity.name.function"], - "settings": { - "foreground": "#000", - "fontStyle": "" - } - }, - { - "name": "Fallback function calls", - "scope": [ - "meta.function-call entity.name.function", - "meta.function-call support.function", - "meta.function.call entity.name.function" - ], - "settings": { - "foreground": "#000", - "fontStyle": "" - } - }, - { - "name": "Fallback enums & constants", - "scope": ["constant.enum", "constant.other"], - "settings": { - "foreground": "#0008" - } - }, - { - "name": "Fallback Properties & func arguments", - "scope": [ - "variable.other.property", - "entity.name.goto-label", - "entity.name.variable.parameter" - ], - "settings": { - "foreground": "#000" - } - }, - { - "name": "Fallback functions & methods declarations", - "scope": [ - "entity.name.function", - "support.function", - "support.function.constructor", - "entity.name.function meta.function-call meta.method-call" - ], - "settings": { - "foreground": "#000", - "fontStyle": "bold" - } - }, - { - "name": "HTML Tags", - "scope": [ - "meta.tag entity.name.tag.html", - "entity.name.tag.template.html" - ], - "settings": { - "foreground": "#000" - } - }, - { - "name": "HTML Attributes", - "scope": ["entity.other.attribute-name.html"], - "settings": { - "foreground": "#0008" - } - }, - { - "name": "HTML Custom Tag", - "scope": ["meta.tag.other.unrecognized.html entity.name.tag.html"], - "settings": { - "foreground": "#000" - } - }, - { - "name": "HTML Keywords", - "scope": ["text.html keyword"], - "settings": { - "foreground": "#000" - } - }, - { - "name": "Punctuations", - "scope": ["punctuation", "meta.brace"], - "settings": { - "foreground": "#0008" - } - } - ] -} diff --git a/apps/www/src/lib/utils.ts b/apps/www/src/lib/utils.ts new file mode 100644 index 0000000000..9ad0df4269 --- /dev/null +++ b/apps/www/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/apps/www/src/registry/default/plate-ui/command.tsx b/apps/www/src/registry/default/plate-ui/command.tsx index 0720b702ee..9cee953610 100644 --- a/apps/www/src/registry/default/plate-ui/command.tsx +++ b/apps/www/src/registry/default/plate-ui/command.tsx @@ -66,7 +66,7 @@ export const CommandSeparator = withCn( export const CommandItem = withCn( CommandPrimitive.Item, - 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50' + 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50' ); export const CommandShortcut = withCn( diff --git a/apps/www/src/registry/default/plate-ui/input.tsx b/apps/www/src/registry/default/plate-ui/input.tsx index f8df2cede4..b8aac8a16e 100644 --- a/apps/www/src/registry/default/plate-ui/input.tsx +++ b/apps/www/src/registry/default/plate-ui/input.tsx @@ -2,7 +2,7 @@ import { withVariants } from '@udecode/cn'; import { cva } from 'class-variance-authority'; export const inputVariants = cva( - 'flex w-full rounded-md bg-transparent text-sm file:border-0 file:bg-background file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50', + 'flex w-full rounded-md bg-transparent text-sm file:border-0 file:bg-background file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50', { defaultVariants: { h: 'md', diff --git a/apps/www/src/registry/themes.ts b/apps/www/src/registry/registry-base-colors.ts similarity index 99% rename from apps/www/src/registry/themes.ts rename to apps/www/src/registry/registry-base-colors.ts index e423f73bb1..7cdccbc8bb 100644 --- a/apps/www/src/registry/themes.ts +++ b/apps/www/src/registry/registry-base-colors.ts @@ -1,4 +1,4 @@ -export const themes = [ +export const baseColors = [ { activeColor: { dark: '240 5.2% 33.9%', @@ -633,4 +633,4 @@ export const themes = [ }, ] as const; -export type Theme = (typeof themes)[number]; +export type BaseTheme = (typeof baseColors)[number]; diff --git a/apps/www/src/registry/colors.ts b/apps/www/src/registry/registry-colors.ts similarity index 100% rename from apps/www/src/registry/colors.ts rename to apps/www/src/registry/registry-colors.ts diff --git a/apps/www/src/registry/example.ts b/apps/www/src/registry/registry-examples.ts similarity index 79% rename from apps/www/src/registry/example.ts rename to apps/www/src/registry/registry-examples.ts index 3e347bd2af..1f5fa5a3d1 100644 --- a/apps/www/src/registry/example.ts +++ b/apps/www/src/registry/registry-examples.ts @@ -1,154 +1,154 @@ import type { Registry } from './schema'; -export const example: Registry = [ +export const examples: Registry = [ { files: ['example/editor-default.tsx'], name: 'editor-default', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editor-disabled.tsx'], name: 'editor-disabled', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editor-ghost.tsx'], name: 'editor-ghost', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editor-label.tsx'], name: 'editor-label', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editor-text.tsx'], name: 'editor-text', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editor-button.tsx'], name: 'editor-button', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editor-form.tsx'], name: 'editor-form', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/basic-editor-default-demo.tsx'], name: 'basic-editor-default-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/controlled-demo.tsx'], name: 'controlled-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/basic-editor-styling-demo.tsx'], name: 'basic-editor-styling-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/basic-editor-handler-demo.tsx'], name: 'basic-editor-handler-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/basic-editor-value-demo.tsx'], name: 'basic-editor-value-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/basic-plugins-components-demo.tsx'], name: 'basic-plugins-components-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/basic-plugins-default-demo.tsx'], name: 'basic-plugins-default-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/cloud-demo.tsx'], name: 'cloud-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/editable-voids-demo.tsx'], name: 'editable-voids-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/find-replace-demo.tsx'], name: 'find-replace-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/hundreds-blocks-demo.tsx'], name: 'hundreds-blocks-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/hundreds-editors-demo.tsx'], name: 'hundreds-editors-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/iframe-demo.tsx'], name: 'iframe-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/mode-toggle.tsx'], name: 'mode-toggle', - type: 'components:example', + type: 'registry:example', }, { files: ['example/multiple-editors-demo.tsx'], name: 'multiple-editors-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/version-history-demo.tsx'], name: 'version-history-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/playground-demo.tsx'], name: 'playground-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { files: ['example/preview-md-demo.tsx'], name: 'preview-md-demo', registryDependencies: [], - type: 'components:example', + type: 'registry:example', }, { external: true, diff --git a/apps/www/src/registry/registry-hooks.ts b/apps/www/src/registry/registry-hooks.ts new file mode 100644 index 0000000000..ba77fe8311 --- /dev/null +++ b/apps/www/src/registry/registry-hooks.ts @@ -0,0 +1,24 @@ +import type { Registry } from './schema'; + +export const hooks: Registry = [ + { + files: [ + { + path: 'hooks/use-mobile.tsx', + type: 'registry:hook', + }, + ], + name: 'use-mobile', + type: 'registry:hook', + }, + { + files: [ + { + path: 'hooks/use-toast.ts', + type: 'registry:hook', + }, + ], + name: 'use-toast', + type: 'registry:hook', + }, +]; diff --git a/apps/www/src/registry/registry-lib.ts b/apps/www/src/registry/registry-lib.ts new file mode 100644 index 0000000000..3eac18913d --- /dev/null +++ b/apps/www/src/registry/registry-lib.ts @@ -0,0 +1,15 @@ +import type { Registry } from './schema'; + +export const lib: Registry = [ + { + dependencies: ['clsx', 'tailwind-merge'], + files: [ + { + path: 'lib/utils.ts', + type: 'registry:lib', + }, + ], + name: 'utils', + type: 'registry:lib', + }, +]; diff --git a/apps/www/src/registry/styles.ts b/apps/www/src/registry/registry-styles.ts similarity index 100% rename from apps/www/src/registry/styles.ts rename to apps/www/src/registry/registry-styles.ts diff --git a/apps/www/src/registry/registry-themes.ts b/apps/www/src/registry/registry-themes.ts new file mode 100644 index 0000000000..5ebfa00d4a --- /dev/null +++ b/apps/www/src/registry/registry-themes.ts @@ -0,0 +1,178 @@ +import type { Registry } from './schema'; + +export const themes: Registry = [ + { + cssVars: { + dark: { + accent: '36 64% 57%', + 'accent-foreground': '36 72% 17%', + background: '36 39% 88%', + border: '36 45% 60%', + card: '36 46% 82%', + 'card-foreground': '36 45% 20%', + 'chart-1': '25 34% 28%', + 'chart-2': '26 36% 34%', + 'chart-3': '28 40% 40%', + 'chart-4': '31 41% 48%', + 'chart-5': '35 43% 53%', + destructive: '0 84% 37%', + 'destructive-foreground': '0 0% 98%', + foreground: '36 45% 15%', + input: '36 45% 60%', + muted: '36 33% 75%', + 'muted-foreground': '36 45% 25%', + popover: '0 0% 100%', + 'popover-foreground': '240 10% 3.9%', + primary: '36 45% 70%', + 'primary-foreground': '36 45% 11%', + ring: '36 45% 30%', + secondary: '40 35% 77%', + 'secondary-foreground': '36 45% 25%', + }, + light: { + accent: '36 64% 57%', + 'accent-foreground': '36 72% 17%', + background: '36 39% 88%', + border: '36 45% 60%', + card: '36 46% 82%', + 'card-foreground': '36 45% 20%', + 'chart-1': '25 34% 28%', + 'chart-2': '26 36% 34%', + 'chart-3': '28 40% 40%', + 'chart-4': '31 41% 48%', + 'chart-5': '35 43% 53%', + destructive: '0 84% 37%', + 'destructive-foreground': '0 0% 98%', + foreground: '36 45% 15%', + input: '36 45% 60%', + muted: '36 33% 75%', + 'muted-foreground': '36 45% 25%', + popover: '0 0% 100%', + 'popover-foreground': '240 10% 3.9%', + primary: '36 45% 70%', + 'primary-foreground': '36 45% 11%', + ring: '36 45% 30%', + secondary: '40 35% 77%', + 'secondary-foreground': '36 45% 25%', + }, + }, + name: 'theme-daylight', + type: 'registry:theme', + }, + { + cssVars: { + dark: { + accent: '240 0% 13%', + 'accent-foreground': '60 0% 100%', + background: '240 5% 6%', + border: '240 6% 20%', + card: '240 4% 10%', + 'card-foreground': '60 5% 90%', + 'chart-1': '359 2% 90%', + 'chart-2': '240 1% 74%', + 'chart-3': '240 1% 58%', + 'chart-4': '240 1% 42%', + 'chart-5': '240 2% 26%', + destructive: '0 60% 50%', + 'destructive-foreground': '0 0% 98%', + foreground: '60 5% 90%', + input: '240 6% 20%', + muted: '240 5% 25%', + 'muted-foreground': '60 5% 85%', + popover: '240 5% 15%', + 'popover-foreground': '60 5% 85%', + primary: '240 0% 90%', + 'primary-foreground': '60 0% 0%', + ring: '240 5% 90%', + secondary: '240 4% 15%', + 'secondary-foreground': '60 5% 85%', + }, + light: { + accent: '240 0% 13%', + 'accent-foreground': '60 0% 100%', + background: '240 5% 6%', + border: '240 6% 20%', + card: '240 4% 10%', + 'card-foreground': '60 5% 90%', + 'chart-1': '359 2% 90%', + 'chart-2': '240 1% 74%', + 'chart-3': '240 1% 58%', + 'chart-4': '240 1% 42%', + 'chart-5': '240 2% 26%', + destructive: '0 60% 50%', + 'destructive-foreground': '0 0% 98%', + foreground: '60 5% 90%', + input: '240 6% 20%', + muted: '240 5% 25%', + 'muted-foreground': '60 5% 85%', + popover: '240 5% 15%', + 'popover-foreground': '60 5% 85%', + primary: '240 0% 90%', + 'primary-foreground': '60 0% 0%', + ring: '240 5% 90%', + secondary: '240 4% 15%', + 'secondary-foreground': '60 5% 85%', + }, + }, + name: 'theme-midnight', + type: 'registry:theme', + }, + { + cssVars: { + dark: { + accent: '240 3.7% 15.9%', + 'accent-foreground': '0 0% 98%', + background: '240 10% 3.9%', + border: '240 3.7% 15.9%', + card: '240 10% 3.9%', + 'card-foreground': '0 0% 98%', + 'chart-1': '142 88% 28%', + 'chart-2': '139 65% 20%', + 'chart-3': '140 74% 24%', + 'chart-4': '137 55% 15%', + 'chart-5': '141 40% 9%', + destructive: '0 72% 51%', + 'destructive-foreground': '0 0% 98%', + foreground: '0 0% 98%', + input: '240 3.7% 15.9%', + muted: '240 3.7% 15.9%', + 'muted-foreground': '240 5% 64.9%', + popover: '240 10% 3.9%', + 'popover-foreground': '0 0% 98%', + primary: '142 86% 28%', + 'primary-foreground': '356 29% 98%', + ring: '142 86% 28%', + secondary: '240 4.8% 95.9%', + 'secondary-foreground': '240 5.9% 10%', + }, + light: { + accent: '240 4.8% 95.9%', + 'accent-foreground': '240 5.9% 10%', + background: '0 0% 100%', + border: '240 5.9% 90%', + card: '0 0% 100%', + 'card-foreground': '240 10% 3.9%', + 'chart-1': '139 65% 20%', + 'chart-2': '140 74% 44%', + 'chart-3': '142 88% 28%', + 'chart-4': '137 55% 15%', + 'chart-5': '141 40% 9%', + destructive: '0 72% 51%', + 'destructive-foreground': '0 0% 98%', + foreground: '240 10% 3.9%', + input: '240 5.9% 90%', + muted: '240 4.8% 95.9%', + 'muted-foreground': '240 3.8% 45%', + popover: '0 0% 100%', + 'popover-foreground': '240 10% 3.9%', + primary: '142 86% 28%', + 'primary-foreground': '356 29% 98%', + ring: '142 86% 28%', + secondary: '240 4.8% 95.9%', + 'secondary-foreground': '240 5.9% 10%', + }, + }, + name: 'theme-emerald', + type: 'registry:theme', + }, +]; diff --git a/apps/www/src/registry/ui.ts b/apps/www/src/registry/registry-ui.ts similarity index 84% rename from apps/www/src/registry/ui.ts rename to apps/www/src/registry/registry-ui.ts index e25bdecdf8..8c70727748 100644 --- a/apps/www/src/registry/ui.ts +++ b/apps/www/src/registry/registry-ui.ts @@ -6,7 +6,7 @@ export const ui: Registry = [ files: ['plate-ui/editor.tsx'], name: 'editor', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-cloud'], @@ -20,7 +20,7 @@ export const ui: Registry = [ ], name: 'cloud', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-code-block'], @@ -31,14 +31,14 @@ export const ui: Registry = [ ], name: 'code-block-element', registryDependencies: ['command'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-layout'], files: ['plate-ui/column-element.tsx', 'plate-ui/column-group-element.tsx'], name: 'column-element', registryDependencies: ['command', 'resizable'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [], @@ -58,7 +58,7 @@ export const ui: Registry = [ 'button', 'tooltip', ], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-comments'], @@ -74,7 +74,7 @@ export const ui: Registry = [ ], name: 'comments-popover', registryDependencies: ['popover', 'avatar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [ @@ -85,7 +85,7 @@ export const ui: Registry = [ files: ['plate-ui/draggable.tsx', 'plate-ui/with-draggables.tsx'], name: 'draggable', registryDependencies: ['tooltip'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-popover'], @@ -103,133 +103,133 @@ export const ui: Registry = [ name: 'emoji-dropdown-menu', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-emoji'], files: ['plate-ui/emoji-input-element.tsx'], name: 'emoji-input-element', registryDependencies: ['inline-combobox'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-alignment'], files: ['plate-ui/align-dropdown-menu.tsx'], name: 'align-dropdown-menu', registryDependencies: ['dropdown-menu', 'toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-avatar'], files: ['plate-ui/avatar.tsx'], name: 'avatar', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-block-quote'], files: ['plate-ui/blockquote-element.tsx'], name: 'blockquote-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-date'], files: ['plate-ui/date-element.tsx'], name: 'date-element', registryDependencies: ['calendar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { - dependencies: ['react-day-picker', 'date-fns'], + dependencies: ['react-day-picker@8.10.1', 'date-fns'], files: ['plate-ui/calendar.tsx'], name: 'calendar', registryDependencies: ['button'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-slot'], files: ['plate-ui/button.tsx'], name: 'button', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-caption'], files: ['plate-ui/caption.tsx'], name: 'caption', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-checkbox'], files: ['plate-ui/checkbox.tsx'], name: 'checkbox', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-basic-marks'], files: ['plate-ui/code-leaf.tsx'], name: 'code-leaf', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-code-block'], files: ['plate-ui/code-line-element.tsx'], name: 'code-line-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-code-block'], files: ['plate-ui/code-syntax-leaf.tsx'], name: 'code-syntax-leaf', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['cmdk'], files: ['plate-ui/command.tsx'], name: 'command', registryDependencies: ['dialog'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-comments'], files: ['plate-ui/comment-leaf.tsx'], name: 'comment-leaf', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [], files: ['plate-ui/comment-toolbar-button.tsx'], name: 'comment-toolbar-button', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [], files: ['plate-ui/cursor-overlay.tsx'], name: 'cursor-overlay', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-dialog'], files: ['plate-ui/dialog.tsx'], name: 'dialog', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-dropdown-menu'], files: ['plate-ui/dropdown-menu.tsx'], name: 'dropdown-menu', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { @@ -237,14 +237,14 @@ export const ui: Registry = [ files: ['plate-ui/excalidraw-element.tsx'], name: 'excalidraw-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [], files: ['plate-ui/fixed-toolbar.tsx'], name: 'fixed-toolbar', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-basic-marks'], @@ -257,14 +257,14 @@ export const ui: Registry = [ 'mode-dropdown-menu', 'turn-into-dropdown-menu', ], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-floating'], files: ['plate-ui/floating-toolbar.tsx'], name: 'floating-toolbar', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-basic-marks'], @@ -275,126 +275,126 @@ export const ui: Registry = [ 'more-dropdown-menu', 'turn-into-dropdown-menu', ], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-heading'], files: ['plate-ui/heading-element.tsx'], name: 'heading-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-highlight'], files: ['plate-ui/highlight-leaf.tsx'], name: 'highlight-leaf', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-horizontal-rule'], files: ['plate-ui/hr-element.tsx'], name: 'hr-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-media'], files: ['plate-ui/image-element.tsx'], name: 'image-element', registryDependencies: ['media-popover', 'caption', 'resizable'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-indent-list'], files: ['plate-ui/indent-list-toolbar-button.tsx'], name: 'indent-list-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-indent'], files: ['plate-ui/indent-toolbar-button.tsx'], name: 'indent-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@ariakit/react', '@udecode/plate-combobox'], files: ['plate-ui/inline-combobox.tsx'], name: 'inline-combobox', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [], files: ['plate-ui/input.tsx'], name: 'input', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-block-quote', '@udecode/plate-heading'], files: ['plate-ui/insert-dropdown-menu.tsx'], name: 'insert-dropdown-menu', registryDependencies: ['dropdown-menu', 'toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-kbd'], files: ['plate-ui/kbd-leaf.tsx'], name: 'kbd-leaf', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-line-height'], files: ['plate-ui/line-height-dropdown-menu.tsx'], name: 'line-height-dropdown-menu', registryDependencies: ['toolbar', 'dropdown-menu'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-link'], files: ['plate-ui/link-element.tsx'], name: 'link-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-link'], files: ['plate-ui/link-floating-toolbar.tsx'], name: 'link-floating-toolbar', registryDependencies: ['button', 'input', 'popover', 'separator'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-link'], files: ['plate-ui/link-toolbar-button.tsx'], name: 'link-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-list'], files: ['plate-ui/list-element.tsx'], name: 'list-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-list'], files: ['plate-ui/list-toolbar-button.tsx'], name: 'list-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-basic-marks'], files: ['plate-ui/mark-toolbar-button.tsx'], name: 'mark-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [ @@ -405,111 +405,111 @@ export const ui: Registry = [ files: ['plate-ui/media-embed-element.tsx'], name: 'media-embed-element', registryDependencies: ['media-popover', 'caption', 'resizable'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-media'], files: ['plate-ui/media-popover.tsx'], name: 'media-popover', registryDependencies: ['button', 'input', 'popover', 'separator'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-media'], files: ['plate-ui/media-toolbar-button.tsx'], name: 'media-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-mention'], files: ['plate-ui/mention-element.tsx'], name: 'mention-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-mention'], files: ['plate-ui/mention-input-element.tsx'], name: 'mention-input-element', registryDependencies: ['inline-combobox'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: [], files: ['plate-ui/mode-dropdown-menu.tsx'], name: 'mode-dropdown-menu', registryDependencies: ['dropdown-menu', 'toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-basic-marks'], files: ['plate-ui/more-dropdown-menu.tsx'], name: 'more-dropdown-menu', registryDependencies: ['dropdown-menu', 'toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-indent'], files: ['plate-ui/outdent-toolbar-button.tsx'], name: 'outdent-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { files: ['plate-ui/paragraph-element.tsx'], name: 'paragraph-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-heading'], files: ['plate-ui/placeholder.tsx'], name: 'placeholder', registryDependencies: ['paragraph-element'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-popover'], files: ['plate-ui/popover.tsx'], name: 'popover', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-find-replace'], files: ['plate-ui/search-highlight-leaf.tsx'], name: 'search-highlight-leaf', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-separator'], files: ['plate-ui/separator.tsx'], name: 'separator', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-heading', '@udecode/plate-indent-list'], files: ['plate-ui/slash-input-element.tsx'], name: 'slash-input-element', registryDependencies: ['inline-combobox'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-table'], files: ['plate-ui/table-cell-element.tsx'], name: 'table-cell-element', registryDependencies: ['resizable'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-table'], files: ['plate-ui/table-dropdown-menu.tsx'], name: 'table-dropdown-menu', registryDependencies: ['dropdown-menu', 'toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { @@ -517,62 +517,62 @@ export const ui: Registry = [ files: ['plate-ui/table-element.tsx'], name: 'table-element', registryDependencies: ['dropdown-menu'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-table'], files: ['plate-ui/table-row-element.tsx'], name: 'table-row-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-list'], files: ['plate-ui/todo-list-element.tsx'], name: 'todo-list-element', registryDependencies: ['checkbox'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-toggle'], files: ['plate-ui/toggle-element.tsx'], name: 'toggle-element', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-toggle'], files: ['plate-ui/toggle-toolbar-button.tsx'], name: 'toggle-toolbar-button', registryDependencies: ['toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-toolbar'], files: ['plate-ui/toolbar.tsx'], name: 'toolbar', registryDependencies: ['tooltip', 'separator'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@radix-ui/react-tooltip'], files: ['plate-ui/tooltip.tsx'], name: 'tooltip', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-block-quote', '@udecode/plate-heading'], files: ['plate-ui/turn-into-dropdown-menu.tsx'], name: 'turn-into-dropdown-menu', registryDependencies: ['dropdown-menu', 'toolbar'], - type: 'components:plate-ui', + type: 'registry:ui', }, { dependencies: ['@udecode/plate-resizable'], files: ['plate-ui/resizable.tsx'], name: 'resizable', registryDependencies: [], - type: 'components:plate-ui', + type: 'registry:ui', }, ]; diff --git a/apps/www/src/registry/registry.ts b/apps/www/src/registry/registry.ts index 1eb5189fca..d58d2f1535 100644 --- a/apps/www/src/registry/registry.ts +++ b/apps/www/src/registry/registry.ts @@ -1,6 +1,15 @@ import type { Registry } from './schema'; -import { example } from './example'; -import { ui } from './ui'; +import { examples } from './registry-examples'; +import { hooks } from './registry-hooks'; +import { lib } from './registry-lib'; +import { themes } from './registry-themes'; +import { ui } from './registry-ui'; -export const registry: Registry = [...ui, ...example]; +export const registry: Registry = [ + ...ui, + ...examples, + ...lib, + ...hooks, + ...themes, +]; diff --git a/apps/www/src/registry/schema.ts b/apps/www/src/registry/schema.ts index 99f00c70bd..0b49742fae 100644 --- a/apps/www/src/registry/schema.ts +++ b/apps/www/src/registry/schema.ts @@ -13,25 +13,58 @@ export const blockChunkSchema = z.object({ name: z.string(), }); +export const registryItemTypeSchema = z.enum([ + 'registry:style', + 'registry:lib', + 'registry:example', + 'registry:block', + 'registry:component', + 'registry:ui', + 'registry:hook', + 'registry:theme', + 'registry:page', +]); + +export const registryItemFileSchema = z.union([ + z.string(), + z.object({ + content: z.string().optional(), + path: z.string(), + target: z.string().optional(), + type: registryItemTypeSchema, + }), +]); + +export const registryItemTailwindSchema = z.object({ + config: z.object({ + content: z.array(z.string()).optional(), + plugins: z.array(z.string()).optional(), + theme: z.record(z.string(), z.any()).optional(), + }), +}); + +export const registryItemCssVarsSchema = z.object({ + dark: z.record(z.string(), z.string()).optional(), + light: z.record(z.string(), z.string()).optional(), +}); + export const registryEntrySchema = z.object({ category: z.string().optional(), chunks: z.array(blockChunkSchema).optional(), + cssVars: registryItemCssVarsSchema.optional(), dependencies: z.array(z.string()).optional(), description: z.string().optional(), devDependencies: z.array(z.string()).optional(), + docs: z.string().optional(), external: z.boolean().optional(), - files: z.array(z.string()), + files: z.array(registryItemFileSchema).optional(), items: z.array(z.string()).optional(), name: z.string(), registryDependencies: z.array(z.string()).optional(), source: z.string().optional(), subcategory: z.string().optional(), - type: z.enum([ - 'components:plate-ui', - 'components:component', - 'components:example', - 'components:block', - ]), + tailwind: registryItemTailwindSchema.optional(), + type: registryItemTypeSchema, }); export const registrySchema = z.array(registryEntrySchema); @@ -51,7 +84,7 @@ export const blockSchema = registryEntrySchema.extend({ .optional(), highlightedCode: z.string(), style: z.enum(['default', 'new-york']), - type: z.literal('components:block'), + type: z.literal('registry:block'), }); export type Block = z.infer; diff --git a/apps/www/tsconfig.json b/apps/www/tsconfig.json index 64100bcd42..a9eced40cb 100644 --- a/apps/www/tsconfig.json +++ b/apps/www/tsconfig.json @@ -38,5 +38,5 @@ ".next/types/**/*.ts", ".contentlayer/generated" ], - "exclude": ["node_modules", "./scripts/build-registry.mts"] + "exclude": ["node_modules", "./scripts/build-registry.mts", "__registry__"] } diff --git a/config/eslint/bases/unicorn.cjs b/config/eslint/bases/unicorn.cjs index 93838bb201..eec1ea3ffb 100644 --- a/config/eslint/bases/unicorn.cjs +++ b/config/eslint/bases/unicorn.cjs @@ -1,9 +1,18 @@ module.exports = { extends: ['plugin:unicorn/recommended'], + overrides: [ + { + files: ['packages/cli/**'], + rules: { + 'unicorn/no-process-exit': 'off', + 'unicorn/prefer-node-protocol': 'off', + 'unicorn/prefer-string-replace-all': 'off', + 'unicorn/prefer-top-level-await': 'off', + }, + }, + ], plugins: ['unicorn'], rules: { - 'unicorn/no-abusive-eslint-disable': 'off', - 'unicorn/prefer-module': 'off', 'unicorn/consistent-destructuring': 'off', 'unicorn/consistent-function-scoping': [ 'error', @@ -13,29 +22,21 @@ module.exports = { ], 'unicorn/expiring-todo-comments': 'off', 'unicorn/filename-case': 'off', + 'unicorn/no-abusive-eslint-disable': 'off', 'unicorn/no-array-callback-reference': 'off', 'unicorn/no-array-for-each': 'off', 'unicorn/no-array-reduce': 'off', 'unicorn/no-for-loop': 'off', 'unicorn/no-null': 'off', 'unicorn/no-thenable': 'off', + 'unicorn/prefer-module': 'off', 'unicorn/prefer-optional-catch-binding': 'off', 'unicorn/prefer-regexp-test': 'off', // Spread syntax causes non-deterministic type errors 'unicorn/prefer-spread': 'off', + 'unicorn/prefer-string-replace-all': 'off', // TypeScript doesn't like the for-of loop this rule fixes to 'unicorn/prevent-abbreviations': 'off', }, - overrides: [ - { - files: ['packages/cli/**'], - rules: { - 'unicorn/prefer-node-protocol': 'off', - 'unicorn/no-process-exit': 'off', - 'unicorn/prefer-top-level-await': 'off', - 'unicorn/prefer-string-replace-all': 'off', - }, - }, - ], }; diff --git a/docs/vendor.md b/docs/vendor.md index 7d7421bb1d..5e7141b8d6 100644 --- a/docs/vendor.md +++ b/docs/vendor.md @@ -20,7 +20,6 @@ - `next-contentlayer2`: see contentlayer2 - `ora`: cli - `react-day-picker@8.10.1`: shadcn -- `react-resizable-panels@0.0.55`: shadcn - `rehype@12.0.1`: shadcn - `rehype-autolink-headings@6.1.0`: shadcn - `rehype-pretty-code@0.6.0`: shadcn @@ -30,6 +29,7 @@ - `ts-morph`: shadcn - `tsup`: cli - `type-fest`: cli +- `vaul`: shadcn - `vitest`: nip - `zod`: cli diff --git a/packages/cli/test/fixtures/next/tailwind.config.js b/packages/cli/test/fixtures/next/tailwind.config.js index 598a355d0a..2061a1dc05 100644 --- a/packages/cli/test/fixtures/next/tailwind.config.js +++ b/packages/cli/test/fixtures/next/tailwind.config.js @@ -1,12 +1,13 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - darkMode: ['class'], content: [ './pages/**/*.{ts,tsx}', './components/**/*.{ts,tsx}', './app/**/*.{ts,tsx}', './src/**/*.{ts,tsx}', ], + darkMode: ['class'], + plugins: [require('tailwindcss-animate')], theme: { container: { center: true, @@ -16,45 +17,49 @@ module.exports = { }, }, extend: { + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)', + }, colors: { - border: 'hsl(var(--border))', - input: 'hsl(var(--input))', - ring: 'hsl(var(--ring))', - background: 'hsl(var(--background))', - foreground: 'hsl(var(--foreground))', - primary: { - DEFAULT: 'hsl(var(--primary))', - foreground: 'hsl(var(--primary-foreground))', + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', }, - secondary: { - DEFAULT: 'hsl(var(--secondary))', - foreground: 'hsl(var(--secondary-foreground))', + background: 'hsl(var(--background))', + border: 'hsl(var(--border))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', }, destructive: { DEFAULT: 'hsl(var(--destructive))', foreground: 'hsl(var(--destructive-foreground))', }, + foreground: 'hsl(var(--foreground))', + input: 'hsl(var(--input))', muted: { DEFAULT: 'hsl(var(--muted))', foreground: 'hsl(var(--muted-foreground))', }, - accent: { - DEFAULT: 'hsl(var(--accent))', - foreground: 'hsl(var(--accent-foreground))', - }, popover: { DEFAULT: 'hsl(var(--popover))', foreground: 'hsl(var(--popover-foreground))', }, - card: { - DEFAULT: 'hsl(var(--card))', - foreground: 'hsl(var(--card-foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', + }, + ring: 'hsl(var(--ring))', + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', }, - }, - borderRadius: { - lg: 'var(--radius)', - md: 'calc(var(--radius) - 2px)', - sm: 'calc(var(--radius) - 4px)', }, keyframes: { 'accordion-down': { @@ -66,11 +71,6 @@ module.exports = { to: { height: '0' }, }, }, - animation: { - 'accordion-down': 'accordion-down 0.2s ease-out', - 'accordion-up': 'accordion-up 0.2s ease-out', - }, }, }, - plugins: [require('tailwindcss-animate')], }; diff --git a/tailwind.config.cjs b/tailwind.config.cjs index 118b3be570..e56f29d15f 100644 --- a/tailwind.config.cjs +++ b/tailwind.config.cjs @@ -26,10 +26,10 @@ module.exports = { 'accordion-up': 'accordion-up 0.2s ease-out', }, borderRadius: { - lg: `var(--radius)`, - md: `calc(var(--radius) - 2px)`, + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', sm: 'calc(var(--radius) - 4px)', - xl: `calc(var(--radius) + 4px)`, + xl: 'calc(var(--radius) + 4px)', }, colors: { accent: { diff --git a/templates/plate-playground-template/src/components/plate-ui/input.tsx b/templates/plate-playground-template/src/components/plate-ui/input.tsx index 16cdc2d078..789f354e25 100644 --- a/templates/plate-playground-template/src/components/plate-ui/input.tsx +++ b/templates/plate-playground-template/src/components/plate-ui/input.tsx @@ -2,7 +2,7 @@ import { withVariants } from '@udecode/cn'; import { cva } from 'class-variance-authority'; export const inputVariants = cva( - 'flex w-full rounded-md bg-transparent text-sm file:border-0 file:bg-background file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50', + 'flex w-full rounded-md bg-transparent text-sm file:border-0 file:bg-background file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50', { variants: { variant: { diff --git a/yarn.lock b/yarn.lock index 4cd94075df..8fc32f25db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5877,7 +5877,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5894,7 +5894,7 @@ __metadata: "@udecode/plate-common": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5913,7 +5913,7 @@ __metadata: "@udecode/plate-common": "workspace:^" "@udecode/plate-heading": "npm:38.0.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5929,7 +5929,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5945,7 +5945,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5961,7 +5961,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5977,7 +5977,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -5994,7 +5994,7 @@ __metadata: "@udecode/plate-common": "workspace:^" react-textarea-autosize: "npm:^8.5.3" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6013,7 +6013,7 @@ __metadata: delay: "npm:5.0.0" p-defer: "npm:^4.0.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6030,7 +6030,7 @@ __metadata: "@udecode/plate-common": "workspace:^" prismjs: "npm:^1.29.0" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6046,7 +6046,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6063,7 +6063,7 @@ __metadata: "@udecode/plate-common": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6073,12 +6073,12 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-common@npm:38.0.4, @udecode/plate-common@workspace:^, @udecode/plate-common@workspace:packages/common": +"@udecode/plate-common@npm:38.0.6, @udecode/plate-common@workspace:^, @udecode/plate-common@workspace:packages/common": version: 0.0.0-use.local resolution: "@udecode/plate-common@workspace:packages/common" dependencies: - "@udecode/plate-core": "npm:38.0.4" - "@udecode/plate-utils": "npm:38.0.4" + "@udecode/plate-core": "npm:38.0.6" + "@udecode/plate-utils": "npm:38.0.6" "@udecode/react-hotkeys": "npm:37.0.0" "@udecode/react-utils": "npm:38.0.1" "@udecode/slate": "npm:38.0.4" @@ -6095,7 +6095,7 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-core@npm:38.0.4, @udecode/plate-core@workspace:^, @udecode/plate-core@workspace:packages/core": +"@udecode/plate-core@npm:38.0.6, @udecode/plate-core@workspace:^, @udecode/plate-core@workspace:packages/core": version: 0.0.0-use.local resolution: "@udecode/plate-core@workspace:packages/core" dependencies: @@ -6126,16 +6126,16 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-csv@npm:38.0.1, @udecode/plate-csv@workspace:^, @udecode/plate-csv@workspace:packages/csv": +"@udecode/plate-csv@npm:38.0.6, @udecode/plate-csv@workspace:^, @udecode/plate-csv@workspace:packages/csv": version: 0.0.0-use.local resolution: "@udecode/plate-csv@workspace:packages/csv" dependencies: "@types/papaparse": "npm:^5.3.14" "@udecode/plate-common": "workspace:^" - "@udecode/plate-table": "npm:38.0.1" + "@udecode/plate-table": "npm:38.0.6" papaparse: "npm:^5.4.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6151,7 +6151,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6167,7 +6167,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.94.0" @@ -6185,7 +6185,7 @@ __metadata: diff-match-patch-ts: "npm:^0.6.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6203,7 +6203,7 @@ __metadata: lodash: "npm:^4.17.21" raf: "npm:^3.4.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dnd: ">=14.0.0" react-dnd-html5-backend: ">=14.0.0" @@ -6215,7 +6215,7 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-docx@npm:38.0.1, @udecode/plate-docx@workspace:^, @udecode/plate-docx@workspace:packages/docx": +"@udecode/plate-docx@npm:38.0.6, @udecode/plate-docx@workspace:^, @udecode/plate-docx@workspace:packages/docx": version: 0.0.0-use.local resolution: "@udecode/plate-docx@workspace:packages/docx" dependencies: @@ -6223,11 +6223,11 @@ __metadata: "@udecode/plate-heading": "npm:38.0.1" "@udecode/plate-indent": "npm:38.0.1" "@udecode/plate-indent-list": "npm:38.0.1" - "@udecode/plate-media": "npm:38.0.1" - "@udecode/plate-table": "npm:38.0.1" + "@udecode/plate-media": "npm:38.0.6" + "@udecode/plate-table": "npm:38.0.6" validator: "npm:^13.12.0" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6245,7 +6245,7 @@ __metadata: "@udecode/plate-combobox": "npm:38.0.1" "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6262,7 +6262,7 @@ __metadata: "@excalidraw/excalidraw": "npm:0.16.4" "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6278,7 +6278,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6296,7 +6296,7 @@ __metadata: "@floating-ui/react": "npm:^0.26.23" "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6313,7 +6313,7 @@ __metadata: "@udecode/plate-common": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6329,7 +6329,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6345,7 +6345,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6361,7 +6361,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6379,7 +6379,7 @@ __metadata: "@udecode/plate-common": "workspace:^" html-entities: "npm:^2.5.2" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6398,7 +6398,7 @@ __metadata: "@udecode/plate-list": "npm:38.0.1" clsx: "npm:^2.1.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6414,7 +6414,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6431,7 +6431,7 @@ __metadata: "@udecode/plate-common": "workspace:^" juice: "npm:^8.1.0" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6447,7 +6447,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6463,7 +6463,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6479,7 +6479,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6489,7 +6489,7 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-link@npm:38.0.1, @udecode/plate-link@workspace:^, @udecode/plate-link@workspace:packages/link": +"@udecode/plate-link@npm:38.0.6, @udecode/plate-link@workspace:^, @udecode/plate-link@workspace:packages/link": version: 0.0.0-use.local resolution: "@udecode/plate-link@workspace:packages/link" dependencies: @@ -6497,7 +6497,7 @@ __metadata: "@udecode/plate-floating": "npm:38.0.1" "@udecode/plate-normalizers": "npm:38.0.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6515,7 +6515,7 @@ __metadata: "@udecode/plate-reset-node": "npm:38.0.1" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6534,7 +6534,7 @@ __metadata: remark-parse: "npm:^9.0.0" unified: "npm:^11.0.5" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6552,7 +6552,7 @@ __metadata: "@udecode/plate-common": "workspace:^" katex: "npm:0.16.11" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6562,14 +6562,14 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-media@npm:38.0.1, @udecode/plate-media@workspace:^, @udecode/plate-media@workspace:packages/media": +"@udecode/plate-media@npm:38.0.6, @udecode/plate-media@workspace:^, @udecode/plate-media@workspace:packages/media": version: 0.0.0-use.local resolution: "@udecode/plate-media@workspace:packages/media" dependencies: "@udecode/plate-common": "workspace:^" js-video-url-parser: "npm:^0.5.1" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6586,7 +6586,7 @@ __metadata: "@udecode/plate-combobox": "npm:38.0.1" "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6603,7 +6603,7 @@ __metadata: "@udecode/plate-common": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6620,7 +6620,7 @@ __metadata: "@udecode/plate-common": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6637,7 +6637,7 @@ __metadata: "@udecode/plate-common": "workspace:^" peerDependencies: "@playwright/test": ">=1.42.1" - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6653,7 +6653,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6669,7 +6669,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6685,7 +6685,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6702,7 +6702,7 @@ __metadata: "@udecode/plate-common": "workspace:^" copy-to-clipboard: "npm:^3.3.3" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6719,7 +6719,7 @@ __metadata: "@udecode/plate-combobox": "npm:38.0.1" "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6737,7 +6737,7 @@ __metadata: "@udecode/plate-diff": "npm:38.0.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6754,7 +6754,7 @@ __metadata: "@udecode/plate-common": "workspace:^" tabbable: "npm:^6.2.0" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6764,7 +6764,7 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-table@npm:38.0.1, @udecode/plate-table@workspace:^, @udecode/plate-table@workspace:packages/table": +"@udecode/plate-table@npm:38.0.6, @udecode/plate-table@workspace:^, @udecode/plate-table@workspace:packages/table": version: 0.0.0-use.local resolution: "@udecode/plate-table@workspace:packages/table" dependencies: @@ -6772,7 +6772,7 @@ __metadata: "@udecode/plate-resizable": "npm:38.0.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6799,7 +6799,7 @@ __metadata: "@udecode/plate-node-id": "npm:38.0.1" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6815,7 +6815,7 @@ __metadata: dependencies: "@udecode/plate-common": "workspace:^" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6856,11 +6856,11 @@ __metadata: languageName: unknown linkType: soft -"@udecode/plate-utils@npm:38.0.4, @udecode/plate-utils@workspace:^, @udecode/plate-utils@workspace:packages/plate-utils": +"@udecode/plate-utils@npm:38.0.6, @udecode/plate-utils@workspace:^, @udecode/plate-utils@workspace:packages/plate-utils": version: 0.0.0-use.local resolution: "@udecode/plate-utils@workspace:packages/plate-utils" dependencies: - "@udecode/plate-core": "npm:38.0.4" + "@udecode/plate-core": "npm:38.0.6" "@udecode/react-utils": "npm:38.0.1" "@udecode/slate": "npm:38.0.4" "@udecode/slate-react": "npm:38.0.4" @@ -6887,7 +6887,7 @@ __metadata: "@udecode/plate-common": "workspace:^" yjs: "npm:^13.6.19" peerDependencies: - "@udecode/plate-common": ">=38.0.4" + "@udecode/plate-common": ">=38.0.6" react: ">=16.8.0" react-dom: ">=16.8.0" slate: ">=0.103.0" @@ -6910,10 +6910,10 @@ __metadata: "@udecode/plate-code-block": "npm:38.0.1" "@udecode/plate-combobox": "npm:38.0.1" "@udecode/plate-comments": "npm:38.0.1" - "@udecode/plate-common": "npm:38.0.4" - "@udecode/plate-csv": "npm:38.0.1" + "@udecode/plate-common": "npm:38.0.6" + "@udecode/plate-csv": "npm:38.0.6" "@udecode/plate-diff": "npm:38.0.0" - "@udecode/plate-docx": "npm:38.0.1" + "@udecode/plate-docx": "npm:38.0.6" "@udecode/plate-find-replace": "npm:38.0.0" "@udecode/plate-floating": "npm:38.0.1" "@udecode/plate-font": "npm:38.0.1" @@ -6926,10 +6926,10 @@ __metadata: "@udecode/plate-kbd": "npm:38.0.1" "@udecode/plate-layout": "npm:38.0.1" "@udecode/plate-line-height": "npm:38.0.1" - "@udecode/plate-link": "npm:38.0.1" + "@udecode/plate-link": "npm:38.0.6" "@udecode/plate-list": "npm:38.0.1" "@udecode/plate-markdown": "npm:38.0.1" - "@udecode/plate-media": "npm:38.0.1" + "@udecode/plate-media": "npm:38.0.6" "@udecode/plate-mention": "npm:38.0.1" "@udecode/plate-node-id": "npm:38.0.1" "@udecode/plate-normalizers": "npm:38.0.1" @@ -6940,7 +6940,7 @@ __metadata: "@udecode/plate-slash-command": "npm:38.0.1" "@udecode/plate-suggestion": "npm:38.0.1" "@udecode/plate-tabbable": "npm:38.0.1" - "@udecode/plate-table": "npm:38.0.1" + "@udecode/plate-table": "npm:38.0.6" "@udecode/plate-toggle": "npm:38.0.1" "@udecode/plate-trailing-block": "npm:38.0.1" peerDependencies: @@ -17539,13 +17539,13 @@ __metadata: languageName: node linkType: hard -"react-resizable-panels@npm:^0.0.55": - version: 0.0.55 - resolution: "react-resizable-panels@npm:0.0.55" +"react-resizable-panels@npm:^2.0.22": + version: 2.1.3 + resolution: "react-resizable-panels@npm:2.1.3" peerDependencies: react: ^16.14.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/cc4950bcb4ab7173f678bb5ffd0e3f98f57a48e908c66180527ebecfabb97968da968d8f539a7d4a1281219dc91ea37861f1ec24df4c74fcf387a5c7b15659cd + checksum: 10c0/65257545a935f8bd664b234659bb72535f37ba3ff2a1f09e4063315a8a4651604a6dc3da73b80895d6f15f2c52f9ca5c3e0affa3e1db7aa77b8b430df221bc68 languageName: node linkType: hard @@ -20927,15 +20927,15 @@ __metadata: languageName: node linkType: hard -"vaul@npm:^0.9.2": - version: 0.9.2 - resolution: "vaul@npm:0.9.2" +"vaul@npm:0.9.0": + version: 0.9.0 + resolution: "vaul@npm:0.9.0" dependencies: "@radix-ui/react-dialog": "npm:^1.0.4" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 10c0/39401d88fc3c6139c245ad541264e0c41560e5499553b973d80df8003798e894e4822b67f531da65cc349b601b8c22f1252a5573f13f1d67de6de631524f0fbd + checksum: 10c0/3b4290f7bbc984c7ab3784e6b5a16f6cd2f380798d8c0d1a01818f215f473ecefc6a3f5ccf6724107282a9ceb1a7f8fce8f841ae3eb70cc63b23776bd42fd9e7 languageName: node linkType: hard @@ -21640,7 +21640,7 @@ __metadata: react-dom: "npm:^18.3.1" react-lite-youtube-embed: "npm:^2.4.0" react-markdown: "npm:9.0.1" - react-resizable-panels: "npm:^0.0.55" + react-resizable-panels: "npm:^2.0.22" react-syntax-highlighter: "npm:^15.5.0" react-tweet: "npm:^3.2.1" react-wrap-balancer: "npm:^1.1.1" @@ -21670,7 +21670,7 @@ __metadata: typescript: "npm:5.6.2" unist-builder: "npm:4.0.0" unist-util-visit: "npm:^5.0.0" - vaul: "npm:^0.9.2" + vaul: "npm:0.9.0" languageName: unknown linkType: soft From a8496b4701ba558f29241c6af5df25d7227bb16f Mon Sep 17 00:00:00 2001 From: zbeyens Date: Sat, 21 Sep 2024 22:53:38 +0200 Subject: [PATCH 2/8] shadcn --- apps/www/src/components/_block-display.tsx | 2 +- apps/www/src/components/component-preview.tsx | 2 +- apps/www/src/components/copy-code-button.tsx | 8 ++++---- apps/www/src/components/style-switcher.tsx | 2 +- apps/www/src/components/style-wrapper.tsx | 2 +- apps/www/src/components/theme-customizer.tsx | 1 + apps/www/src/components/themes-button.tsx | 4 ++-- apps/www/src/components/themes-styles.tsx | 2 ++ apps/www/src/components/themes-tab-content.tsx | 4 ++-- apps/www/src/components/typography.tsx | 2 +- apps/www/src/hooks/use-config.ts | 3 ++- apps/www/src/lib/_blocks.ts | 2 +- apps/www/src/registry/registry-base-colors.ts | 2 +- apps/www/src/registry/registry-examples.ts | 4 ++-- 14 files changed, 22 insertions(+), 18 deletions(-) diff --git a/apps/www/src/components/_block-display.tsx b/apps/www/src/components/_block-display.tsx index b6b865f390..f319447735 100644 --- a/apps/www/src/components/_block-display.tsx +++ b/apps/www/src/components/_block-display.tsx @@ -1,5 +1,5 @@ import { getBlock } from '@/lib/_blocks'; -import { styles } from '@/registry/styles'; +import { styles } from '@/registry/registry-styles'; import { BlockPreview } from './block-preview'; diff --git a/apps/www/src/components/component-preview.tsx b/apps/www/src/components/component-preview.tsx index 7c9fdac265..9dc1716301 100644 --- a/apps/www/src/components/component-preview.tsx +++ b/apps/www/src/components/component-preview.tsx @@ -6,7 +6,7 @@ import { cn } from '@udecode/cn'; import { Index } from '@/__registry__'; import { useConfig } from '@/hooks/use-config'; -import { styles } from '@/registry/styles'; +import { styles } from '@/registry/registry-styles'; import { CopyButton } from './copy-button'; import { Icons } from './icons'; diff --git a/apps/www/src/components/copy-code-button.tsx b/apps/www/src/components/copy-code-button.tsx index 36cda411ef..f982f6c3f8 100644 --- a/apps/www/src/components/copy-code-button.tsx +++ b/apps/www/src/components/copy-code-button.tsx @@ -14,7 +14,7 @@ import { DialogTitle, DialogTrigger, } from '@/registry/default/plate-ui/dialog'; -import { type Theme, themes } from '@/registry/themes'; +import { type BaseColor, baseColors } from '@/registry/registry-base-colors'; import { copyToClipboardWithMeta } from './copy-button'; @@ -23,7 +23,7 @@ export function CopyCodeButton({ ...props }: React.ComponentProps) { const [config] = useConfig(); - const activeTheme = themes.find((theme) => theme.name === config.theme); + const activeTheme = baseColors.find((theme) => theme.name === config.theme); const [hasCopied, setHasCopied] = React.useState(false); React.useEffect(() => { @@ -107,7 +107,7 @@ export function CopyCodeButton({ function CustomizerCode() { const [config] = useConfig(); - const activeTheme = themes.find((theme) => theme.name === config.theme); + const activeTheme = baseColors.find((theme) => theme.name === config.theme); return (
@@ -230,7 +230,7 @@ function CustomizerCode() { ); } -function getThemeCode(theme: Theme, radius: number) { +function getThemeCode(theme: BaseColor, radius: number) { if (!theme) { return ''; } diff --git a/apps/www/src/components/style-switcher.tsx b/apps/www/src/components/style-switcher.tsx index e47134f708..defef7be8e 100644 --- a/apps/www/src/components/style-switcher.tsx +++ b/apps/www/src/components/style-switcher.tsx @@ -7,7 +7,7 @@ import type { SelectTriggerProps } from '@radix-ui/react-select'; import { cn } from '@udecode/cn'; import { useConfig } from '@/hooks/use-config'; -import { type Style, styles } from '@/registry/styles'; +import { type Style, styles } from '@/registry/registry-styles'; import { Select, diff --git a/apps/www/src/components/style-wrapper.tsx b/apps/www/src/components/style-wrapper.tsx index 44b210d9ed..02c30e6b3b 100644 --- a/apps/www/src/components/style-wrapper.tsx +++ b/apps/www/src/components/style-wrapper.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; -import type { Style } from '@/registry/styles'; +import type { Style } from '@/registry/registry-styles'; import { useConfig } from '@/hooks/use-config'; diff --git a/apps/www/src/components/theme-customizer.tsx b/apps/www/src/components/theme-customizer.tsx index 228a203ba3..4fc3521e8e 100644 --- a/apps/www/src/components/theme-customizer.tsx +++ b/apps/www/src/components/theme-customizer.tsx @@ -34,6 +34,7 @@ import { TooltipContent, TooltipTrigger, } from '@/registry/default/plate-ui/tooltip'; +import { type BaseColor, baseColors } from '@/registry/registry-base-colors'; import { copyToClipboardWithMeta } from './copy-button'; import { ThemeWrapper } from './theme-wrapper'; diff --git a/apps/www/src/components/themes-button.tsx b/apps/www/src/components/themes-button.tsx index c3bdd801ab..159368371a 100644 --- a/apps/www/src/components/themes-button.tsx +++ b/apps/www/src/components/themes-button.tsx @@ -14,7 +14,7 @@ import { TooltipContent, TooltipTrigger, } from '@/registry/default/plate-ui/tooltip'; -import { themes } from '@/registry/themes'; +import { baseColors } from '@/registry/registry-base-colors'; import { settingsStore } from './context/settings-store'; import { Skeleton } from './ui/skeleton'; @@ -34,7 +34,7 @@ export function ThemesButton() { {mounted ? ( <> {['slate', 'rose', 'blue', 'green', 'orange'].map((color) => { - const theme = themes.find((th) => th.name === color); + const theme = baseColors.find((th) => th.name === color); const isActive = config.theme === color; if (!theme) { diff --git a/apps/www/src/components/themes-styles.tsx b/apps/www/src/components/themes-styles.tsx index 1d829ff5bd..62ebee4fb6 100644 --- a/apps/www/src/components/themes-styles.tsx +++ b/apps/www/src/components/themes-styles.tsx @@ -1,5 +1,7 @@ 'use client'; +import { useThemesConfig } from '@/hooks/use-themes-config'; + export function ThemesStyle() { const { themesConfig } = useThemesConfig(); diff --git a/apps/www/src/components/themes-tab-content.tsx b/apps/www/src/components/themes-tab-content.tsx index 6686e4424c..bb5bc18437 100644 --- a/apps/www/src/components/themes-tab-content.tsx +++ b/apps/www/src/components/themes-tab-content.tsx @@ -19,7 +19,7 @@ import { PopoverContent, PopoverTrigger, } from '@/registry/default/plate-ui/popover'; -import { themes } from '@/registry/themes'; +import { baseColors } from '@/registry/registry-base-colors'; import { CopyCodeButton } from './copy-code-button'; import { Label } from './ui/label'; @@ -109,7 +109,7 @@ export function ThemesTabContent() {
- {themes.map((theme) => { + {baseColors.map((theme) => { const isActive = config.theme === theme.name; return mounted ? ( diff --git a/apps/www/src/components/typography.tsx b/apps/www/src/components/typography.tsx index 7fe7e21614..d8f83a5cf1 100644 --- a/apps/www/src/components/typography.tsx +++ b/apps/www/src/components/typography.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import type { Event } from '@/lib/events'; -import type { Style } from '@/registry/styles'; +import type { Style } from '@/registry/registry-styles'; import type { NpmCommands } from '@/types/unist'; import { cn } from '@udecode/cn'; diff --git a/apps/www/src/hooks/use-config.ts b/apps/www/src/hooks/use-config.ts index d90326ea87..84430d8c82 100644 --- a/apps/www/src/hooks/use-config.ts +++ b/apps/www/src/hooks/use-config.ts @@ -1,4 +1,5 @@ -import type { Style } from '@/registry/styles'; +import type { BaseColor } from '@/registry/registry-base-colors'; +import type { Style } from '@/registry/registry-styles'; import { useAtom } from 'jotai'; import { atomWithStorage } from 'jotai/utils'; diff --git a/apps/www/src/lib/_blocks.ts b/apps/www/src/lib/_blocks.ts index 5078061de4..b6a0cc008f 100644 --- a/apps/www/src/lib/_blocks.ts +++ b/apps/www/src/lib/_blocks.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/require-await */ 'use server'; -import type { Style } from '@/registry/styles'; +import type { Style } from '@/registry/registry-styles'; import { promises as fs } from 'node:fs'; import { tmpdir } from 'node:os'; diff --git a/apps/www/src/registry/registry-base-colors.ts b/apps/www/src/registry/registry-base-colors.ts index 7cdccbc8bb..10ec7a1a6f 100644 --- a/apps/www/src/registry/registry-base-colors.ts +++ b/apps/www/src/registry/registry-base-colors.ts @@ -633,4 +633,4 @@ export const baseColors = [ }, ] as const; -export type BaseTheme = (typeof baseColors)[number]; +export type BaseColor = (typeof baseColors)[number]; diff --git a/apps/www/src/registry/registry-examples.ts b/apps/www/src/registry/registry-examples.ts index 1f5fa5a3d1..88ce47ad1e 100644 --- a/apps/www/src/registry/registry-examples.ts +++ b/apps/www/src/registry/registry-examples.ts @@ -154,12 +154,12 @@ export const examples: Registry = [ external: true, files: ['styles/globals.css'], name: 'globals', - type: 'components:component', + type: 'registry:style', }, { external: true, files: ['types/plate-types.ts'], name: 'plate-types', - type: 'components:component', + type: 'registry:lib', }, ]; From 37d5697c61c5f5da9194b3f9ccee7d156eb7cf08 Mon Sep 17 00:00:00 2001 From: zbeyens Date: Sat, 21 Sep 2024 23:58:45 +0200 Subject: [PATCH 3/8] fix: theme --- apps/www/src/app/_components/home-tabs.tsx | 5 +- apps/www/src/app/layout.tsx | 6 +- apps/www/src/components/body.tsx | 43 -- apps/www/src/components/customizer-tabs.tsx | 4 +- apps/www/src/components/theme-customizer.tsx | 505 +----------------- apps/www/src/components/themes-selector.tsx | 122 ----- apps/www/src/components/themes-styles.tsx | 30 -- .../www/src/components/themes-tab-content.tsx | 214 -------- 8 files changed, 34 insertions(+), 895 deletions(-) delete mode 100644 apps/www/src/components/body.tsx delete mode 100644 apps/www/src/components/themes-selector.tsx delete mode 100644 apps/www/src/components/themes-styles.tsx delete mode 100644 apps/www/src/components/themes-tab-content.tsx diff --git a/apps/www/src/app/_components/home-tabs.tsx b/apps/www/src/app/_components/home-tabs.tsx index fa604c3be5..48b2d640db 100644 --- a/apps/www/src/app/_components/home-tabs.tsx +++ b/apps/www/src/app/_components/home-tabs.tsx @@ -9,6 +9,7 @@ import { parseAsBoolean, useQueryState } from 'nuqs'; import { BlockPreview } from '@/components/block-preview'; import { settingsStore } from '@/components/context/settings-store'; +import { ThemeWrapper } from '@/components/theme-wrapper'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Button } from '@/registry/default/plate-ui/button'; @@ -68,7 +69,9 @@ export default function HomeTabs() { - + + + diff --git a/apps/www/src/app/layout.tsx b/apps/www/src/app/layout.tsx index 7c9c196590..c42665784a 100644 --- a/apps/www/src/app/layout.tsx +++ b/apps/www/src/app/layout.tsx @@ -4,7 +4,6 @@ import type { Metadata, Viewport } from 'next'; import { cn } from '@udecode/cn'; -import { Body } from '@/components/body'; import { Providers } from '@/components/context/providers'; import { SiteFooter } from '@/components/site-footer'; import { SiteHeader } from '@/components/site-header'; @@ -86,12 +85,11 @@ export default function RootLayout({ children }: RootLayoutProps) { return ( - @@ -106,7 +104,7 @@ export default function RootLayout({ children }: RootLayoutProps) { - + ); } diff --git a/apps/www/src/components/body.tsx b/apps/www/src/components/body.tsx deleted file mode 100644 index 3468b53cb5..0000000000 --- a/apps/www/src/components/body.tsx +++ /dev/null @@ -1,43 +0,0 @@ -'use client'; - -import { cn } from '@udecode/cn'; -import { usePathname } from 'next/navigation'; - -import { useConfig } from '@/hooks/use-config'; -import { useMounted } from '@/hooks/use-mounted'; - -interface ThemeBodyProps extends React.ComponentProps<'body'> { - defaultTheme?: string; -} - -export function Body({ - children, - className, - defaultTheme, - ...props -}: ThemeBodyProps) { - const [config] = useConfig(); - const pathname = usePathname(); - const mounted = useMounted(); - - const theme = - mounted && pathname === '/' - ? `theme-${config.theme ?? defaultTheme}` - : `theme-${defaultTheme}`; - - return ( - - {children} - - ); -} diff --git a/apps/www/src/components/customizer-tabs.tsx b/apps/www/src/components/customizer-tabs.tsx index eef07adaad..fdcf250d64 100644 --- a/apps/www/src/components/customizer-tabs.tsx +++ b/apps/www/src/components/customizer-tabs.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { settingsStore } from './context/settings-store'; import { PluginsTabContent } from './plugins-tab-content'; -import { ThemesTabContent } from './themes-tab-content'; +import { ThemeCustomizer } from './theme-customizer'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; export function CustomizerTabs() { @@ -33,7 +33,7 @@ export function CustomizerTabs() { className="h-[calc(85vh-90px)] overflow-y-auto overflow-x-hidden overscroll-contain pt-2 md:h-[calc(100vh-64px)]" value="themes" > - +
diff --git a/apps/www/src/components/theme-customizer.tsx b/apps/www/src/components/theme-customizer.tsx index 4fc3521e8e..7c7b07c40d 100644 --- a/apps/www/src/components/theme-customizer.tsx +++ b/apps/www/src/components/theme-customizer.tsx @@ -4,172 +4,39 @@ import * as React from 'react'; import { CheckIcon, - CopyIcon, InfoCircledIcon, MoonIcon, ResetIcon, SunIcon, } from '@radix-ui/react-icons'; import { cn } from '@udecode/cn'; -import template from 'lodash.template'; import { useTheme } from 'next-themes'; import { useConfig } from '@/hooks/use-config'; import { Button } from '@/registry/default/plate-ui/button'; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@/registry/default/plate-ui/dialog'; import { Popover, PopoverContent, PopoverTrigger, } from '@/registry/default/plate-ui/popover'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '@/registry/default/plate-ui/tooltip'; -import { type BaseColor, baseColors } from '@/registry/registry-base-colors'; +import { baseColors } from '@/registry/registry-base-colors'; -import { copyToClipboardWithMeta } from './copy-button'; -import { ThemeWrapper } from './theme-wrapper'; -import { Drawer, DrawerContent, DrawerTrigger } from './ui/drawer'; +import { CopyCodeButton } from './copy-code-button'; import { Label } from './ui/label'; import { Skeleton } from './ui/skeleton'; -import '@/styles/mdx.css'; - export function ThemeCustomizer() { - const [config, setConfig] = useConfig(); - const { resolvedTheme: mode } = useTheme(); const [mounted, setMounted] = React.useState(false); - - React.useEffect(() => { - setMounted(true); - }, []); - - return ( -
- - - - - - - - -
- - - - - - - - -
- {mounted ? ( - <> - {['zinc', 'rose', 'blue', 'green', 'orange'].map((color) => { - const baseColor = baseColors.find( - (baseColor) => baseColor.name === color - ); - const isActive = config.theme === color; - - if (!baseColor) { - return null; - } - - return ( - - - - - - {baseColor.label} - - - ); - })} - - ) : ( -
- - - - - -
- )} -
-
- -
- ); -} - -function Customizer() { - const [mounted, setMounted] = React.useState(false); - const { resolvedTheme: mode, setTheme: setMode } = useTheme(); const [config, setConfig] = useConfig(); + const { resolvedTheme: mode, setTheme: setMode } = useTheme(); React.useEffect(() => { setMounted(true); }, []); return ( - -
+ <> +
Customize @@ -178,21 +45,8 @@ function Customizer() { Pick a style and color for your components.
- + +
@@ -209,27 +63,21 @@ function Customizer() { alignOffset={-20} side="right" > -

- What is the difference between the New York and Default style? -

+

What is a style?

A style comes with its own set of components, animations, icons and more.

The Default style has - larger inputs, uses lucide-react for icons and + large inputs, uses lucide-react for icons and tailwindcss-animate for animations.

-

- The New York style ships - with smaller buttons and cards with shadows. It uses icons - from Radix Icons. -

+

Other styles will be added in the future.

-
+
- {/* */} + + Reset +
@@ -355,313 +209,6 @@ function Customizer() {
-
- ); -} - -function CopyCodeButton({ - className, - ...props -}: React.ComponentProps) { - const [config] = useConfig(); - const activeTheme = baseColors.find((theme) => theme.name === config.theme); - const [hasCopied, setHasCopied] = React.useState(false); - - React.useEffect(() => { - setTimeout(() => { - setHasCopied(false); - }, 2000); - }, [hasCopied]); - - return ( - <> - {activeTheme && ( - - )} - - - - - - - Theme - - Copy and paste the following code into your CSS file. - - - - - {activeTheme && ( - - )} - - - ); } - -function CustomizerCode() { - const [config] = useConfig(); - const activeTheme = baseColors.find((theme) => theme.name === config.theme); - - return ( - -
-
-          
-            @layer base {
-              :root {
-            
-                  --background:{' '}
-              {activeTheme?.cssVars.light.background};
-            
-            
-                  --foreground:{' '}
-              {activeTheme?.cssVars.light.foreground};
-            
-            {[
-              'card',
-              'popover',
-              'primary',
-              'secondary',
-              'muted',
-              'accent',
-              'destructive',
-            ].map((prefix) => (
-              <>
-                
-                      --{prefix}:{' '}
-                  {
-                    activeTheme?.cssVars.light[
-                      prefix as keyof typeof activeTheme.cssVars.light
-                    ]
-                  }
-                  ;
-                
-                
-                      --{prefix}-foreground:{' '}
-                  {
-                    activeTheme?.cssVars.light[
-                      `${prefix}-foreground` as keyof typeof activeTheme.cssVars.light
-                    ]
-                  }
-                  ;
-                
-              
-            ))}
-            
-                  --border:{' '}
-              {activeTheme?.cssVars.light.border};
-            
-            
-                  --input:{' '}
-              {activeTheme?.cssVars.light.input};
-            
-            
-                  --ring: {activeTheme?.cssVars.light.ring};
-            
-            
-                  --radius: {config.radius}rem;
-            
-            {['chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5'].map(
-              (prefix) => (
-                
-                      --{prefix}:{' '}
-                  {
-                    activeTheme?.cssVars.light[
-                      prefix as keyof typeof activeTheme.cssVars.light
-                    ]
-                  }
-                  ;
-                
-              )
-            )}
-              }
-             
-              .dark {
-            
-                  --background:{' '}
-              {activeTheme?.cssVars.dark.background};
-            
-            
-                  --foreground:{' '}
-              {activeTheme?.cssVars.dark.foreground};
-            
-            {[
-              'card',
-              'popover',
-              'primary',
-              'secondary',
-              'muted',
-              'accent',
-              'destructive',
-            ].map((prefix) => (
-              <>
-                
-                      --{prefix}:{' '}
-                  {
-                    activeTheme?.cssVars.dark[
-                      prefix as keyof typeof activeTheme.cssVars.dark
-                    ]
-                  }
-                  ;
-                
-                
-                      --{prefix}-foreground:{' '}
-                  {
-                    activeTheme?.cssVars.dark[
-                      `${prefix}-foreground` as keyof typeof activeTheme.cssVars.dark
-                    ]
-                  }
-                  ;
-                
-              
-            ))}
-            
-                  --border:{' '}
-              {activeTheme?.cssVars.dark.border};
-            
-            
-                  --input: {activeTheme?.cssVars.dark.input}
-              ;
-            
-            
-                  --ring: {activeTheme?.cssVars.dark.ring};
-            
-            {['chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5'].map(
-              (prefix) => (
-                
-                      --{prefix}:{' '}
-                  {
-                    activeTheme?.cssVars.dark[
-                      prefix as keyof typeof activeTheme.cssVars.dark
-                    ]
-                  }
-                  ;
-                
-              )
-            )}
-              }
-            }
-          
-        
-
-
- ); -} - -function getThemeCode(theme: BaseColor, radius: number) { - if (!theme) { - return ''; - } - - return template(BASE_STYLES_WITH_VARIABLES)({ - colors: theme.cssVars, - radius, - }); -} - -const BASE_STYLES_WITH_VARIABLES = ` -@layer base { - :root { - --background: <%- colors.light["background"] %>; - --foreground: <%- colors.light["foreground"] %>; - --card: <%- colors.light["card"] %>; - --card-foreground: <%- colors.light["card-foreground"] %>; - --popover: <%- colors.light["popover"] %>; - --popover-foreground: <%- colors.light["popover-foreground"] %>; - --primary: <%- colors.light["primary"] %>; - --primary-foreground: <%- colors.light["primary-foreground"] %>; - --secondary: <%- colors.light["secondary"] %>; - --secondary-foreground: <%- colors.light["secondary-foreground"] %>; - --muted: <%- colors.light["muted"] %>; - --muted-foreground: <%- colors.light["muted-foreground"] %>; - --accent: <%- colors.light["accent"] %>; - --accent-foreground: <%- colors.light["accent-foreground"] %>; - --destructive: <%- colors.light["destructive"] %>; - --destructive-foreground: <%- colors.light["destructive-foreground"] %>; - --border: <%- colors.light["border"] %>; - --input: <%- colors.light["input"] %>; - --ring: <%- colors.light["ring"] %>; - --radius: <%- radius %>rem; - --chart-1: <%- colors.light["chart-1"] %>; - --chart-2: <%- colors.light["chart-2"] %>; - --chart-3: <%- colors.light["chart-3"] %>; - --chart-4: <%- colors.light["chart-4"] %>; - --chart-5: <%- colors.light["chart-5"] %>; - } - - .dark { - --background: <%- colors.dark["background"] %>; - --foreground: <%- colors.dark["foreground"] %>; - --card: <%- colors.dark["card"] %>; - --card-foreground: <%- colors.dark["card-foreground"] %>; - --popover: <%- colors.dark["popover"] %>; - --popover-foreground: <%- colors.dark["popover-foreground"] %>; - --primary: <%- colors.dark["primary"] %>; - --primary-foreground: <%- colors.dark["primary-foreground"] %>; - --secondary: <%- colors.dark["secondary"] %>; - --secondary-foreground: <%- colors.dark["secondary-foreground"] %>; - --muted: <%- colors.dark["muted"] %>; - --muted-foreground: <%- colors.dark["muted-foreground"] %>; - --accent: <%- colors.dark["accent"] %>; - --accent-foreground: <%- colors.dark["accent-foreground"] %>; - --destructive: <%- colors.dark["destructive"] %>; - --destructive-foreground: <%- colors.dark["destructive-foreground"] %>; - --border: <%- colors.dark["border"] %>; - --input: <%- colors.dark["input"] %>; - --ring: <%- colors.dark["ring"] %>; - --chart-1: <%- colors.dark["chart-1"] %>; - --chart-2: <%- colors.dark["chart-2"] %>; - --chart-3: <%- colors.dark["chart-3"] %>; - --chart-4: <%- colors.dark["chart-4"] %>; - --chart-5: <%- colors.dark["chart-5"] %>; - } -} -`; diff --git a/apps/www/src/components/themes-selector.tsx b/apps/www/src/components/themes-selector.tsx deleted file mode 100644 index 5af81e8fdd..0000000000 --- a/apps/www/src/components/themes-selector.tsx +++ /dev/null @@ -1,122 +0,0 @@ -'use client'; -import * as React from 'react'; - -import { cn } from '@udecode/cn'; -import { useTheme } from 'next-themes'; - -import { useMediaQuery } from '@/hooks/use-media-query'; -import { useThemesConfig } from '@/hooks/use-themes-config'; -import { type Theme, THEMES } from '@/lib/themes'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '@/registry/default/plate-ui/tooltip'; - -import { Skeleton } from './ui/skeleton'; -import { ToggleGroup, ToggleGroupItem } from './ui/toggle-group'; - -export function ThemesSwitcher({ - className, - themes = THEMES, -}: React.ComponentProps<'div'> & { themes?: Theme[] }) { - const { theme: mode } = useTheme(); - const [mounted, setMounted] = React.useState(false); - const { setThemesConfig, themesConfig } = useThemesConfig(); - const activeTheme = themesConfig.activeTheme; - const isDesktop = useMediaQuery('(min-width: 1024px)'); - React.useEffect(() => { - setMounted(true); - }, []); - - if (!mounted) { - return ( -
- {themes.map((theme) => ( -
- -
- ))} -
- ); - } - - return ( - { - const theme = themes.find((theme) => theme.name === value); - - if (!theme) { - return; - } - - setThemesConfig({ ...themesConfig, activeTheme: theme }); - }} - type="single" - > - {themes.map((theme) => { - const isActive = theme.name === activeTheme.name; - const isDarkTheme = ['Midnight'].includes(theme.name); - const cssVars = - mounted && mode === 'dark' ? theme.cssVars.dark : theme.cssVars.light; - - return ( - - - -
-
- - - - - {theme.name} -
-
-
-
- - {theme.name} - -
- ); - })} -
- ); -} diff --git a/apps/www/src/components/themes-styles.tsx b/apps/www/src/components/themes-styles.tsx deleted file mode 100644 index 62ebee4fb6..0000000000 --- a/apps/www/src/components/themes-styles.tsx +++ /dev/null @@ -1,30 +0,0 @@ -'use client'; - -import { useThemesConfig } from '@/hooks/use-themes-config'; - -export function ThemesStyle() { - const { themesConfig } = useThemesConfig(); - - if (!themesConfig.activeTheme) { - return null; - } - - return ( - - ); -} diff --git a/apps/www/src/components/themes-tab-content.tsx b/apps/www/src/components/themes-tab-content.tsx deleted file mode 100644 index bb5bc18437..0000000000 --- a/apps/www/src/components/themes-tab-content.tsx +++ /dev/null @@ -1,214 +0,0 @@ -'use client'; - -import * as React from 'react'; - -import { - CheckIcon, - InfoCircledIcon, - MoonIcon, - ResetIcon, - SunIcon, -} from '@radix-ui/react-icons'; -import { cn } from '@udecode/cn'; -import { useTheme } from 'next-themes'; - -import { useConfig } from '@/hooks/use-config'; -import { Button } from '@/registry/default/plate-ui/button'; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from '@/registry/default/plate-ui/popover'; -import { baseColors } from '@/registry/registry-base-colors'; - -import { CopyCodeButton } from './copy-code-button'; -import { Label } from './ui/label'; -import { Skeleton } from './ui/skeleton'; - -export function ThemesTabContent() { - const [mounted, setMounted] = React.useState(false); - const [config, setConfig] = useConfig(); - const { resolvedTheme: mode, setTheme: setMode } = useTheme(); - - React.useEffect(() => { - setMounted(true); - }, []); - - return ( - <> -
-
-
- Customize -
-
- Pick a style and color for your components. -
-
- - -
-
-
-
- - - - - About styles - - -

What is a style?

-

- A style comes with its own set of components, animations, - icons and more. -

-

- The Default style has - large inputs, uses lucide-react for icons and - tailwindcss-animate for animations. -

-

Other styles will be added in the future.

-
-
-
-
- - - -
-
-
- -
- {baseColors.map((theme) => { - const isActive = config.theme === theme.name; - - return mounted ? ( - - ) : ( - - ); - })} -
-
-
- -
- {['0', '0.3', '0.5', '0.75', '1.0'].map((value) => { - return ( - - ); - })} -
-
-
- -
- {mounted ? ( - <> - - - - ) : ( - <> - - - - )} -
-
-
- - ); -} From 34039c82eb0732ffacb5063206ae333a6865b680 Mon Sep 17 00:00:00 2001 From: zbeyens Date: Sun, 22 Sep 2024 20:48:36 +0200 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=8E=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/public/r/colors/gray.json | 92 + apps/www/public/r/colors/index.json | 1999 +++++++++++++++++ apps/www/public/r/colors/neutral.json | 92 + apps/www/public/r/colors/slate.json | 92 + apps/www/public/r/colors/stone.json | 92 + apps/www/public/r/colors/zinc.json | 92 + apps/www/public/r/index.json | 1242 ++++++++++ .../r/styles/default/align-dropdown-menu.json | 19 + apps/www/public/r/styles/default/avatar.json | 16 + .../r/styles/default/blockquote-element.json | 16 + apps/www/public/r/styles/default/button.json | 16 + .../www/public/r/styles/default/calendar.json | 19 + apps/www/public/r/styles/default/caption.json | 16 + .../www/public/r/styles/default/checkbox.json | 16 + apps/www/public/r/styles/default/cloud.json | 46 + .../r/styles/default/code-block-element.json | 30 + .../public/r/styles/default/code-leaf.json | 16 + .../r/styles/default/code-line-element.json | 16 + .../r/styles/default/code-syntax-leaf.json | 16 + .../r/styles/default/color-dropdown-menu.json | 50 + .../r/styles/default/column-element.json | 25 + apps/www/public/r/styles/default/command.json | 18 + .../public/r/styles/default/comment-leaf.json | 16 + .../default/comment-toolbar-button.json | 14 + .../r/styles/default/comments-popover.json | 61 + .../r/styles/default/cursor-overlay.json | 14 + .../public/r/styles/default/date-element.json | 18 + apps/www/public/r/styles/default/dialog.json | 16 + .../public/r/styles/default/draggable.json | 26 + .../r/styles/default/dropdown-menu.json | 16 + apps/www/public/r/styles/default/editor.json | 14 + .../r/styles/default/emoji-dropdown-menu.json | 66 + .../r/styles/default/emoji-input-element.json | 18 + .../r/styles/default/excalidraw-element.json | 16 + .../styles/default/fixed-toolbar-buttons.json | 22 + .../r/styles/default/fixed-toolbar.json | 16 + .../default/floating-toolbar-buttons.json | 20 + .../r/styles/default/floating-toolbar.json | 18 + .../r/styles/default/heading-element.json | 16 + .../r/styles/default/highlight-leaf.json | 16 + .../public/r/styles/default/hr-element.json | 16 + .../r/styles/default/image-element.json | 20 + .../default/indent-list-toolbar-button.json | 18 + .../styles/default/indent-toolbar-button.json | 18 + apps/www/public/r/styles/default/index.json | 21 + .../r/styles/default/inline-combobox.json | 17 + apps/www/public/r/styles/default/input.json | 14 + .../styles/default/insert-dropdown-menu.json | 20 + .../www/public/r/styles/default/kbd-leaf.json | 16 + .../default/line-height-dropdown-menu.json | 19 + .../public/r/styles/default/link-element.json | 16 + .../styles/default/link-floating-toolbar.json | 21 + .../r/styles/default/link-toolbar-button.json | 18 + .../public/r/styles/default/list-element.json | 16 + .../r/styles/default/list-toolbar-button.json | 18 + .../r/styles/default/mark-toolbar-button.json | 18 + .../r/styles/default/media-embed-element.json | 22 + .../r/styles/default/media-popover.json | 21 + .../styles/default/media-toolbar-button.json | 18 + .../r/styles/default/mention-element.json | 16 + .../styles/default/mention-input-element.json | 18 + .../r/styles/default/mode-dropdown-menu.json | 17 + .../r/styles/default/more-dropdown-menu.json | 19 + .../default/outdent-toolbar-button.json | 18 + .../r/styles/default/paragraph-element.json | 13 + .../public/r/styles/default/placeholder.json | 18 + .../public/r/styles/default/plate-types.json | 13 + apps/www/public/r/styles/default/popover.json | 16 + .../public/r/styles/default/resizable.json | 16 + .../styles/default/search-highlight-leaf.json | 16 + .../public/r/styles/default/separator.json | 16 + .../r/styles/default/slash-input-element.json | 19 + .../r/styles/default/table-cell-element.json | 18 + .../r/styles/default/table-dropdown-menu.json | 19 + .../r/styles/default/table-element.json | 18 + .../r/styles/default/table-row-element.json | 16 + .../r/styles/default/theme-daylight.json | 58 + .../r/styles/default/theme-emerald.json | 58 + .../r/styles/default/theme-midnight.json | 58 + .../r/styles/default/todo-list-element.json | 18 + .../r/styles/default/toggle-element.json | 16 + .../styles/default/toggle-toolbar-button.json | 18 + apps/www/public/r/styles/default/toolbar.json | 19 + apps/www/public/r/styles/default/tooltip.json | 16 + .../default/turn-into-dropdown-menu.json | 20 + .../public/r/styles/default/use-debounce.json | 11 + apps/www/public/r/styles/default/utils.json | 15 + apps/www/public/r/styles/index.json | 6 + apps/www/public/r/themes.css | 768 +++++++ apps/www/public/r/themes/gray.json | 48 + apps/www/public/r/themes/neutral.json | 48 + apps/www/public/r/themes/slate.json | 48 + apps/www/public/r/themes/stone.json | 48 + apps/www/public/r/themes/zinc.json | 48 + apps/www/scripts/build-registry.mts | 16 +- apps/www/src/__registry__/.autogenerated | 1 - apps/www/src/__registry__/.gitkeep | 0 apps/www/src/__registry__/README.md | 1 - apps/www/src/__registry__/index.tsx | 1418 ++++++------ apps/www/src/app/_components/home-tabs.tsx | 5 +- .../src/app/_components/installation-tab.tsx | 6 - apps/www/src/app/announcement-button.tsx | 12 +- apps/www/src/app/page.tsx | 8 +- apps/www/src/components/block-copy-button.tsx | 53 +- apps/www/src/components/block-preview.tsx | 18 +- apps/www/src/components/context/providers.tsx | 10 +- apps/www/src/components/copy-code-button.tsx | 318 +-- apps/www/src/components/customizer-drawer.tsx | 4 +- apps/www/src/components/customizer-tabs.tsx | 13 +- .../playground-insert-dropdown-menu.tsx | 2 +- .../playground-turn-into-dropdown-menu.tsx | 2 +- .../src/components/plugins-tab-content.tsx | 2 +- apps/www/src/components/setting-checkbox.tsx | 41 +- apps/www/src/components/settings-toggle.tsx | 33 +- apps/www/src/components/theme-customizer.tsx | 109 +- apps/www/src/components/theme-switcher.tsx | 28 + apps/www/src/components/theme-wrapper.tsx | 7 +- apps/www/src/components/themes-button.tsx | 94 +- .../src/components/themes-selector-mini.tsx | 136 ++ apps/www/src/components/themes-selector.tsx | 128 ++ apps/www/src/components/themes-styles.tsx | 35 + apps/www/src/components/ui/toggle.tsx | 1 + apps/www/src/config/docs.ts | 1 - apps/www/src/hooks/use-themes-config.ts | 3 +- .../plate/demo/values/usePlaygroundValue.ts | 2 +- apps/www/src/lib/themes.ts | 725 +++--- .../registry/default/example/mode-toggle.tsx | 44 +- .../default/example/playground-demo.tsx | 131 +- .../default}/hooks/use-debounce.ts | 0 .../default/lib}/plate-types.ts | 0 .../src/{ => registry/default}/lib/utils.ts | 0 .../plate-ui/color-dropdown-menu-items.tsx | 29 +- .../default/plate-ui/comments-popover.tsx | 2 +- .../registry/default/plate-ui/draggable.tsx | 51 +- .../src/registry/default/plate-ui/editor.tsx | 2 +- .../default/plate-ui/emoji-input-element.tsx | 19 +- .../default/plate-ui/floating-toolbar.tsx | 2 +- .../default/plate-ui/inline-combobox.tsx | 2 +- .../src/registry/default/plate-ui/toolbar.tsx | 2 +- .../src/registry/default/plate-ui/tooltip.tsx | 41 +- apps/www/src/registry/registry-examples.ts | 8 +- apps/www/src/registry/registry-hooks.ts | 14 +- 142 files changed, 8287 insertions(+), 1685 deletions(-) create mode 100644 apps/www/public/r/colors/gray.json create mode 100644 apps/www/public/r/colors/index.json create mode 100644 apps/www/public/r/colors/neutral.json create mode 100644 apps/www/public/r/colors/slate.json create mode 100644 apps/www/public/r/colors/stone.json create mode 100644 apps/www/public/r/colors/zinc.json create mode 100644 apps/www/public/r/index.json create mode 100644 apps/www/public/r/styles/default/align-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/avatar.json create mode 100644 apps/www/public/r/styles/default/blockquote-element.json create mode 100644 apps/www/public/r/styles/default/button.json create mode 100644 apps/www/public/r/styles/default/calendar.json create mode 100644 apps/www/public/r/styles/default/caption.json create mode 100644 apps/www/public/r/styles/default/checkbox.json create mode 100644 apps/www/public/r/styles/default/cloud.json create mode 100644 apps/www/public/r/styles/default/code-block-element.json create mode 100644 apps/www/public/r/styles/default/code-leaf.json create mode 100644 apps/www/public/r/styles/default/code-line-element.json create mode 100644 apps/www/public/r/styles/default/code-syntax-leaf.json create mode 100644 apps/www/public/r/styles/default/color-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/column-element.json create mode 100644 apps/www/public/r/styles/default/command.json create mode 100644 apps/www/public/r/styles/default/comment-leaf.json create mode 100644 apps/www/public/r/styles/default/comment-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/comments-popover.json create mode 100644 apps/www/public/r/styles/default/cursor-overlay.json create mode 100644 apps/www/public/r/styles/default/date-element.json create mode 100644 apps/www/public/r/styles/default/dialog.json create mode 100644 apps/www/public/r/styles/default/draggable.json create mode 100644 apps/www/public/r/styles/default/dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/editor.json create mode 100644 apps/www/public/r/styles/default/emoji-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/emoji-input-element.json create mode 100644 apps/www/public/r/styles/default/excalidraw-element.json create mode 100644 apps/www/public/r/styles/default/fixed-toolbar-buttons.json create mode 100644 apps/www/public/r/styles/default/fixed-toolbar.json create mode 100644 apps/www/public/r/styles/default/floating-toolbar-buttons.json create mode 100644 apps/www/public/r/styles/default/floating-toolbar.json create mode 100644 apps/www/public/r/styles/default/heading-element.json create mode 100644 apps/www/public/r/styles/default/highlight-leaf.json create mode 100644 apps/www/public/r/styles/default/hr-element.json create mode 100644 apps/www/public/r/styles/default/image-element.json create mode 100644 apps/www/public/r/styles/default/indent-list-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/indent-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/index.json create mode 100644 apps/www/public/r/styles/default/inline-combobox.json create mode 100644 apps/www/public/r/styles/default/input.json create mode 100644 apps/www/public/r/styles/default/insert-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/kbd-leaf.json create mode 100644 apps/www/public/r/styles/default/line-height-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/link-element.json create mode 100644 apps/www/public/r/styles/default/link-floating-toolbar.json create mode 100644 apps/www/public/r/styles/default/link-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/list-element.json create mode 100644 apps/www/public/r/styles/default/list-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/mark-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/media-embed-element.json create mode 100644 apps/www/public/r/styles/default/media-popover.json create mode 100644 apps/www/public/r/styles/default/media-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/mention-element.json create mode 100644 apps/www/public/r/styles/default/mention-input-element.json create mode 100644 apps/www/public/r/styles/default/mode-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/more-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/outdent-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/paragraph-element.json create mode 100644 apps/www/public/r/styles/default/placeholder.json create mode 100644 apps/www/public/r/styles/default/plate-types.json create mode 100644 apps/www/public/r/styles/default/popover.json create mode 100644 apps/www/public/r/styles/default/resizable.json create mode 100644 apps/www/public/r/styles/default/search-highlight-leaf.json create mode 100644 apps/www/public/r/styles/default/separator.json create mode 100644 apps/www/public/r/styles/default/slash-input-element.json create mode 100644 apps/www/public/r/styles/default/table-cell-element.json create mode 100644 apps/www/public/r/styles/default/table-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/table-element.json create mode 100644 apps/www/public/r/styles/default/table-row-element.json create mode 100644 apps/www/public/r/styles/default/theme-daylight.json create mode 100644 apps/www/public/r/styles/default/theme-emerald.json create mode 100644 apps/www/public/r/styles/default/theme-midnight.json create mode 100644 apps/www/public/r/styles/default/todo-list-element.json create mode 100644 apps/www/public/r/styles/default/toggle-element.json create mode 100644 apps/www/public/r/styles/default/toggle-toolbar-button.json create mode 100644 apps/www/public/r/styles/default/toolbar.json create mode 100644 apps/www/public/r/styles/default/tooltip.json create mode 100644 apps/www/public/r/styles/default/turn-into-dropdown-menu.json create mode 100644 apps/www/public/r/styles/default/use-debounce.json create mode 100644 apps/www/public/r/styles/default/utils.json create mode 100644 apps/www/public/r/styles/index.json create mode 100644 apps/www/public/r/themes.css create mode 100644 apps/www/public/r/themes/gray.json create mode 100644 apps/www/public/r/themes/neutral.json create mode 100644 apps/www/public/r/themes/slate.json create mode 100644 apps/www/public/r/themes/stone.json create mode 100644 apps/www/public/r/themes/zinc.json delete mode 100644 apps/www/src/__registry__/.autogenerated delete mode 100644 apps/www/src/__registry__/.gitkeep delete mode 100644 apps/www/src/__registry__/README.md create mode 100644 apps/www/src/components/theme-switcher.tsx create mode 100644 apps/www/src/components/themes-selector-mini.tsx create mode 100644 apps/www/src/components/themes-selector.tsx create mode 100644 apps/www/src/components/themes-styles.tsx rename apps/www/src/{ => registry/default}/hooks/use-debounce.ts (100%) rename apps/www/src/{types => registry/default/lib}/plate-types.ts (100%) rename apps/www/src/{ => registry/default}/lib/utils.ts (100%) diff --git a/apps/www/public/r/colors/gray.json b/apps/www/public/r/colors/gray.json new file mode 100644 index 0000000000..852a65cb79 --- /dev/null +++ b/apps/www/public/r/colors/gray.json @@ -0,0 +1,92 @@ +{ + "inlineColors": { + "dark": { + "accent": "gray-800", + "accent-foreground": "gray-50", + "background": "gray-950", + "border": "gray-800", + "card": "gray-950", + "card-foreground": "gray-50", + "destructive": "red-900", + "destructive-foreground": "gray-50", + "foreground": "gray-50", + "input": "gray-800", + "muted": "gray-800", + "muted-foreground": "gray-400", + "popover": "gray-950", + "popover-foreground": "gray-50", + "primary": "gray-50", + "primary-foreground": "gray-900", + "ring": "gray-300", + "secondary": "gray-800", + "secondary-foreground": "gray-50" + }, + "light": { + "accent": "gray-100", + "accent-foreground": "gray-900", + "background": "white", + "border": "gray-200", + "card": "white", + "card-foreground": "gray-950", + "destructive": "red-500", + "destructive-foreground": "gray-50", + "foreground": "gray-950", + "input": "gray-200", + "muted": "gray-100", + "muted-foreground": "gray-500", + "popover": "white", + "popover-foreground": "gray-950", + "primary": "gray-900", + "primary-foreground": "gray-50", + "ring": "gray-950", + "secondary": "gray-100", + "secondary-foreground": "gray-900" + } + }, + "cssVars": { + "dark": { + "accent": "215 27.9% 16.9%", + "accent-foreground": "210 20% 98%", + "background": "224 71.4% 4.1%", + "border": "215 27.9% 16.9%", + "card": "224 71.4% 4.1%", + "card-foreground": "210 20% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "210 20% 98%", + "foreground": "210 20% 98%", + "input": "215 27.9% 16.9%", + "muted": "215 27.9% 16.9%", + "muted-foreground": "217.9 10.6% 64.9%", + "popover": "224 71.4% 4.1%", + "popover-foreground": "210 20% 98%", + "primary": "210 20% 98%", + "primary-foreground": "220.9 39.3% 11%", + "ring": "216 12.2% 83.9%", + "secondary": "215 27.9% 16.9%", + "secondary-foreground": "210 20% 98%" + }, + "light": { + "accent": "220 14.3% 95.9%", + "accent-foreground": "220.9 39.3% 11%", + "background": "0 0% 100%", + "border": "220 13% 91%", + "card": "0 0% 100%", + "card-foreground": "224 71.4% 4.1%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "210 20% 98%", + "foreground": "224 71.4% 4.1%", + "input": "220 13% 91%", + "muted": "220 14.3% 95.9%", + "muted-foreground": "220 8.9% 46.1%", + "popover": "0 0% 100%", + "popover-foreground": "224 71.4% 4.1%", + "primary": "220.9 39.3% 11%", + "primary-foreground": "210 20% 98%", + "ring": "224 71.4% 4.1%", + "secondary": "220 14.3% 95.9%", + "secondary-foreground": "220.9 39.3% 11%" + } + }, + "inlineColorsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n ", + "cssVarsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 224 71.4% 4.1%;\n --card: 0 0% 100%;\n --card-foreground: 224 71.4% 4.1%;\n --popover: 0 0% 100%;\n --popover-foreground: 224 71.4% 4.1%;\n --primary: 220.9 39.3% 11%;\n --primary-foreground: 210 20% 98%;\n --secondary: 220 14.3% 95.9%;\n --secondary-foreground: 220.9 39.3% 11%;\n --muted: 220 14.3% 95.9%;\n --muted-foreground: 220 8.9% 46.1%;\n --accent: 220 14.3% 95.9%;\n --accent-foreground: 220.9 39.3% 11%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 20% 98%;\n --border: 220 13% 91%;\n --input: 220 13% 91%;\n --ring: 224 71.4% 4.1%;\n --radius: 0.5rem;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n\n .dark {\n --background: 224 71.4% 4.1%;\n --foreground: 210 20% 98%;\n --card: 224 71.4% 4.1%;\n --card-foreground: 210 20% 98%;\n --popover: 224 71.4% 4.1%;\n --popover-foreground: 210 20% 98%;\n --primary: 210 20% 98%;\n --primary-foreground: 220.9 39.3% 11%;\n --secondary: 215 27.9% 16.9%;\n --secondary-foreground: 210 20% 98%;\n --muted: 215 27.9% 16.9%;\n --muted-foreground: 217.9 10.6% 64.9%;\n --accent: 215 27.9% 16.9%;\n --accent-foreground: 210 20% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 20% 98%;\n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n --ring: 216 12.2% 83.9%;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}" +} \ No newline at end of file diff --git a/apps/www/public/r/colors/index.json b/apps/www/public/r/colors/index.json new file mode 100644 index 0000000000..4c71741904 --- /dev/null +++ b/apps/www/public/r/colors/index.json @@ -0,0 +1,1999 @@ +{ + "amber": [ + { + "hex": "#fffbeb", + "hsl": "hsl(48,100%,96.1%)", + "rgb": "rgb(255,251,235)", + "scale": 50, + "rgbChannel": "255 251 235", + "hslChannel": "48 100% 96.1%" + }, + { + "hex": "#fef3c7", + "hsl": "hsl(48,96.5%,88.8%)", + "rgb": "rgb(254,243,199)", + "scale": 100, + "rgbChannel": "254 243 199", + "hslChannel": "48 96.5% 88.8%" + }, + { + "hex": "#fde68a", + "hsl": "hsl(48,96.6%,76.7%)", + "rgb": "rgb(253,230,138)", + "scale": 200, + "rgbChannel": "253 230 138", + "hslChannel": "48 96.6% 76.7%" + }, + { + "hex": "#fcd34d", + "hsl": "hsl(45.9,96.7%,64.5%)", + "rgb": "rgb(252,211,77)", + "scale": 300, + "rgbChannel": "252 211 77", + "hslChannel": "45.9 96.7% 64.5%" + }, + { + "hex": "#fbbf24", + "hsl": "hsl(43.3,96.4%,56.3%)", + "rgb": "rgb(251,191,36)", + "scale": 400, + "rgbChannel": "251 191 36", + "hslChannel": "43.3 96.4% 56.3%" + }, + { + "hex": "#f59e0b", + "hsl": "hsl(37.7,92.1%,50.2%)", + "rgb": "rgb(245,158,11)", + "scale": 500, + "rgbChannel": "245 158 11", + "hslChannel": "37.7 92.1% 50.2%" + }, + { + "hex": "#d97706", + "hsl": "hsl(32.1,94.6%,43.7%)", + "rgb": "rgb(217,119,6)", + "scale": 600, + "rgbChannel": "217 119 6", + "hslChannel": "32.1 94.6% 43.7%" + }, + { + "hex": "#b45309", + "hsl": "hsl(26,90.5%,37.1%)", + "rgb": "rgb(180,83,9)", + "scale": 700, + "rgbChannel": "180 83 9", + "hslChannel": "26 90.5% 37.1%" + }, + { + "hex": "#92400e", + "hsl": "hsl(22.7,82.5%,31.4%)", + "rgb": "rgb(146,64,14)", + "scale": 800, + "rgbChannel": "146 64 14", + "hslChannel": "22.7 82.5% 31.4%" + }, + { + "hex": "#78350f", + "hsl": "hsl(21.7,77.8%,26.5%)", + "rgb": "rgb(120,53,15)", + "scale": 900, + "rgbChannel": "120 53 15", + "hslChannel": "21.7 77.8% 26.5%" + }, + { + "hex": "#451a03", + "hsl": "hsl(20.9,91.7%,14.1%)", + "rgb": "rgb(69,26,3)", + "scale": 950, + "rgbChannel": "69 26 3", + "hslChannel": "20.9 91.7% 14.1%" + } + ], + "black": { + "hex": "#000000", + "hsl": "hsl(0,0%,0%)", + "rgb": "rgb(0,0,0)", + "rgbChannel": "0 0 0", + "hslChannel": "0 0% 0%" + }, + "blue": [ + { + "hex": "#eff6ff", + "hsl": "hsl(213.8,100%,96.9%)", + "rgb": "rgb(239,246,255)", + "scale": 50, + "rgbChannel": "239 246 255", + "hslChannel": "213.8 100% 96.9%" + }, + { + "hex": "#dbeafe", + "hsl": "hsl(214.3,94.6%,92.7%)", + "rgb": "rgb(219,234,254)", + "scale": 100, + "rgbChannel": "219 234 254", + "hslChannel": "214.3 94.6% 92.7%" + }, + { + "hex": "#bfdbfe", + "hsl": "hsl(213.3,96.9%,87.3%)", + "rgb": "rgb(191,219,254)", + "scale": 200, + "rgbChannel": "191 219 254", + "hslChannel": "213.3 96.9% 87.3%" + }, + { + "hex": "#93c5fd", + "hsl": "hsl(211.7,96.4%,78.4%)", + "rgb": "rgb(147,197,253)", + "scale": 300, + "rgbChannel": "147 197 253", + "hslChannel": "211.7 96.4% 78.4%" + }, + { + "hex": "#60a5fa", + "hsl": "hsl(213.1,93.9%,67.8%)", + "rgb": "rgb(96,165,250)", + "scale": 400, + "rgbChannel": "96 165 250", + "hslChannel": "213.1 93.9% 67.8%" + }, + { + "hex": "#3b82f6", + "hsl": "hsl(217.2,91.2%,59.8%)", + "rgb": "rgb(59,130,246)", + "scale": 500, + "rgbChannel": "59 130 246", + "hslChannel": "217.2 91.2% 59.8%" + }, + { + "hex": "#2563eb", + "hsl": "hsl(221.2,83.2%,53.3%)", + "rgb": "rgb(37,99,235)", + "scale": 600, + "rgbChannel": "37 99 235", + "hslChannel": "221.2 83.2% 53.3%" + }, + { + "hex": "#1d4ed8", + "hsl": "hsl(224.3,76.3%,48%)", + "rgb": "rgb(29,78,216)", + "scale": 700, + "rgbChannel": "29 78 216", + "hslChannel": "224.3 76.3% 48%" + }, + { + "hex": "#1e40af", + "hsl": "hsl(225.9,70.7%,40.2%)", + "rgb": "rgb(30,64,175)", + "scale": 800, + "rgbChannel": "30 64 175", + "hslChannel": "225.9 70.7% 40.2%" + }, + { + "hex": "#1e3a8a", + "hsl": "hsl(224.4,64.3%,32.9%)", + "rgb": "rgb(30,58,138)", + "scale": 900, + "rgbChannel": "30 58 138", + "hslChannel": "224.4 64.3% 32.9%" + }, + { + "hex": "#172554", + "hsl": "hsl(226.2,57%,21%)", + "rgb": "rgb(23,37,84)", + "scale": 950, + "rgbChannel": "23 37 84", + "hslChannel": "226.2 57% 21%" + } + ], + "current": "currentColor", + "cyan": [ + { + "hex": "#ecfeff", + "hsl": "hsl(183.2,100%,96.3%)", + "rgb": "rgb(236,254,255)", + "scale": 50, + "rgbChannel": "236 254 255", + "hslChannel": "183.2 100% 96.3%" + }, + { + "hex": "#cffafe", + "hsl": "hsl(185.1,95.9%,90.4%)", + "rgb": "rgb(207,250,254)", + "scale": 100, + "rgbChannel": "207 250 254", + "hslChannel": "185.1 95.9% 90.4%" + }, + { + "hex": "#a5f3fc", + "hsl": "hsl(186.2,93.5%,81.8%)", + "rgb": "rgb(165,243,252)", + "scale": 200, + "rgbChannel": "165 243 252", + "hslChannel": "186.2 93.5% 81.8%" + }, + { + "hex": "#67e8f9", + "hsl": "hsl(187,92.4%,69%)", + "rgb": "rgb(103,232,249)", + "scale": 300, + "rgbChannel": "103 232 249", + "hslChannel": "187 92.4% 69%" + }, + { + "hex": "#22d3ee", + "hsl": "hsl(187.9,85.7%,53.3%)", + "rgb": "rgb(34,211,238)", + "scale": 400, + "rgbChannel": "34 211 238", + "hslChannel": "187.9 85.7% 53.3%" + }, + { + "hex": "#06b6d4", + "hsl": "hsl(188.7,94.5%,42.7%)", + "rgb": "rgb(6,182,212)", + "scale": 500, + "rgbChannel": "6 182 212", + "hslChannel": "188.7 94.5% 42.7%" + }, + { + "hex": "#0891b2", + "hsl": "hsl(191.6,91.4%,36.5%)", + "rgb": "rgb(8,145,178)", + "scale": 600, + "rgbChannel": "8 145 178", + "hslChannel": "191.6 91.4% 36.5%" + }, + { + "hex": "#0e7490", + "hsl": "hsl(192.9,82.3%,31%)", + "rgb": "rgb(14,116,144)", + "scale": 700, + "rgbChannel": "14 116 144", + "hslChannel": "192.9 82.3% 31%" + }, + { + "hex": "#155e75", + "hsl": "hsl(194.4,69.6%,27.1%)", + "rgb": "rgb(21,94,117)", + "scale": 800, + "rgbChannel": "21 94 117", + "hslChannel": "194.4 69.6% 27.1%" + }, + { + "hex": "#164e63", + "hsl": "hsl(196.4,63.6%,23.7%)", + "rgb": "rgb(22,78,99)", + "scale": 900, + "rgbChannel": "22 78 99", + "hslChannel": "196.4 63.6% 23.7%" + }, + { + "hex": "#083344", + "hsl": "hsl(197,78.9%,14.9%)", + "rgb": "rgb(8,51,68)", + "scale": 950, + "rgbChannel": "8 51 68", + "hslChannel": "197 78.9% 14.9%" + } + ], + "emerald": [ + { + "hex": "#ecfdf5", + "hsl": "hsl(151.8,81%,95.9%)", + "rgb": "rgb(236,253,245)", + "scale": 50, + "rgbChannel": "236 253 245", + "hslChannel": "151.8 81% 95.9%" + }, + { + "hex": "#d1fae5", + "hsl": "hsl(149.3,80.4%,90%)", + "rgb": "rgb(209,250,229)", + "scale": 100, + "rgbChannel": "209 250 229", + "hslChannel": "149.3 80.4% 90%" + }, + { + "hex": "#a7f3d0", + "hsl": "hsl(152.4,76%,80.4%)", + "rgb": "rgb(167,243,208)", + "scale": 200, + "rgbChannel": "167 243 208", + "hslChannel": "152.4 76% 80.4%" + }, + { + "hex": "#6ee7b7", + "hsl": "hsl(156.2,71.6%,66.9%)", + "rgb": "rgb(110,231,183)", + "scale": 300, + "rgbChannel": "110 231 183", + "hslChannel": "156.2 71.6% 66.9%" + }, + { + "hex": "#34d399", + "hsl": "hsl(158.1,64.4%,51.6%)", + "rgb": "rgb(52,211,153)", + "scale": 400, + "rgbChannel": "52 211 153", + "hslChannel": "158.1 64.4% 51.6%" + }, + { + "hex": "#10b981", + "hsl": "hsl(160.1,84.1%,39.4%)", + "rgb": "rgb(16,185,129)", + "scale": 500, + "rgbChannel": "16 185 129", + "hslChannel": "160.1 84.1% 39.4%" + }, + { + "hex": "#059669", + "hsl": "hsl(161.4,93.5%,30.4%)", + "rgb": "rgb(5,150,105)", + "scale": 600, + "rgbChannel": "5 150 105", + "hslChannel": "161.4 93.5% 30.4%" + }, + { + "hex": "#047857", + "hsl": "hsl(162.9,93.5%,24.3%)", + "rgb": "rgb(4,120,87)", + "scale": 700, + "rgbChannel": "4 120 87", + "hslChannel": "162.9 93.5% 24.3%" + }, + { + "hex": "#065f46", + "hsl": "hsl(163.1,88.1%,19.8%)", + "rgb": "rgb(6,95,70)", + "scale": 800, + "rgbChannel": "6 95 70", + "hslChannel": "163.1 88.1% 19.8%" + }, + { + "hex": "#064e3b", + "hsl": "hsl(164.2,85.7%,16.5%)", + "rgb": "rgb(6,78,59)", + "scale": 900, + "rgbChannel": "6 78 59", + "hslChannel": "164.2 85.7% 16.5%" + }, + { + "hex": "#022c22", + "hsl": "hsl(165.7,91.3%,9%)", + "rgb": "rgb(2,44,34)", + "scale": 950, + "rgbChannel": "2 44 34", + "hslChannel": "165.7 91.3% 9%" + } + ], + "fuchsia": [ + { + "hex": "#fdf4ff", + "hsl": "hsl(289.1,100%,97.8%)", + "rgb": "rgb(253,244,255)", + "scale": 50, + "rgbChannel": "253 244 255", + "hslChannel": "289.1 100% 97.8%" + }, + { + "hex": "#fae8ff", + "hsl": "hsl(287,100%,95.5%)", + "rgb": "rgb(250,232,255)", + "scale": 100, + "rgbChannel": "250 232 255", + "hslChannel": "287 100% 95.5%" + }, + { + "hex": "#f5d0fe", + "hsl": "hsl(288.3,95.8%,90.6%)", + "rgb": "rgb(245,208,254)", + "scale": 200, + "rgbChannel": "245 208 254", + "hslChannel": "288.3 95.8% 90.6%" + }, + { + "hex": "#f0abfc", + "hsl": "hsl(291.1,93.1%,82.9%)", + "rgb": "rgb(240,171,252)", + "scale": 300, + "rgbChannel": "240 171 252", + "hslChannel": "291.1 93.1% 82.9%" + }, + { + "hex": "#e879f9", + "hsl": "hsl(292,91.4%,72.5%)", + "rgb": "rgb(232,121,249)", + "scale": 400, + "rgbChannel": "232 121 249", + "hslChannel": "292 91.4% 72.5%" + }, + { + "hex": "#d946ef", + "hsl": "hsl(292.2,84.1%,60.6%)", + "rgb": "rgb(217,70,239)", + "scale": 500, + "rgbChannel": "217 70 239", + "hslChannel": "292.2 84.1% 60.6%" + }, + { + "hex": "#c026d3", + "hsl": "hsl(293.4,69.5%,48.8%)", + "rgb": "rgb(192,38,211)", + "scale": 600, + "rgbChannel": "192 38 211", + "hslChannel": "293.4 69.5% 48.8%" + }, + { + "hex": "#a21caf", + "hsl": "hsl(294.7,72.4%,39.8%)", + "rgb": "rgb(162,28,175)", + "scale": 700, + "rgbChannel": "162 28 175", + "hslChannel": "294.7 72.4% 39.8%" + }, + { + "hex": "#86198f", + "hsl": "hsl(295.4,70.2%,32.9%)", + "rgb": "rgb(134,25,143)", + "scale": 800, + "rgbChannel": "134 25 143", + "hslChannel": "295.4 70.2% 32.9%" + }, + { + "hex": "#701a75", + "hsl": "hsl(296.7,63.6%,28%)", + "rgb": "rgb(112,26,117)", + "scale": 900, + "rgbChannel": "112 26 117", + "hslChannel": "296.7 63.6% 28%" + }, + { + "hex": "#4a044e", + "hsl": "hsl(296.8,90.2%,16.1%)", + "rgb": "rgb(74,4,78)", + "scale": 950, + "rgbChannel": "74 4 78", + "hslChannel": "296.8 90.2% 16.1%" + } + ], + "gray": [ + { + "hex": "#f9fafb", + "hsl": "hsl(210,20%,98%)", + "rgb": "rgb(249,250,251)", + "scale": 50, + "rgbChannel": "249 250 251", + "hslChannel": "210 20% 98%" + }, + { + "hex": "#f3f4f6", + "hsl": "hsl(220,14.3%,95.9%)", + "rgb": "rgb(243,244,246)", + "scale": 100, + "rgbChannel": "243 244 246", + "hslChannel": "220 14.3% 95.9%" + }, + { + "hex": "#e5e7eb", + "hsl": "hsl(220,13%,91%)", + "rgb": "rgb(229,231,235)", + "scale": 200, + "rgbChannel": "229 231 235", + "hslChannel": "220 13% 91%" + }, + { + "hex": "#d1d5db", + "hsl": "hsl(216,12.2%,83.9%)", + "rgb": "rgb(209,213,219)", + "scale": 300, + "rgbChannel": "209 213 219", + "hslChannel": "216 12.2% 83.9%" + }, + { + "hex": "#9ca3af", + "hsl": "hsl(217.9,10.6%,64.9%)", + "rgb": "rgb(156,163,175)", + "scale": 400, + "rgbChannel": "156 163 175", + "hslChannel": "217.9 10.6% 64.9%" + }, + { + "hex": "#6b7280", + "hsl": "hsl(220,8.9%,46.1%)", + "rgb": "rgb(107,114,128)", + "scale": 500, + "rgbChannel": "107 114 128", + "hslChannel": "220 8.9% 46.1%" + }, + { + "hex": "#4b5563", + "hsl": "hsl(215,13.8%,34.1%)", + "rgb": "rgb(75,85,99)", + "scale": 600, + "rgbChannel": "75 85 99", + "hslChannel": "215 13.8% 34.1%" + }, + { + "hex": "#374151", + "hsl": "hsl(216.9,19.1%,26.7%)", + "rgb": "rgb(55,65,81)", + "scale": 700, + "rgbChannel": "55 65 81", + "hslChannel": "216.9 19.1% 26.7%" + }, + { + "hex": "#1f2937", + "hsl": "hsl(215,27.9%,16.9%)", + "rgb": "rgb(31,41,55)", + "scale": 800, + "rgbChannel": "31 41 55", + "hslChannel": "215 27.9% 16.9%" + }, + { + "hex": "#111827", + "hsl": "hsl(220.9,39.3%,11%)", + "rgb": "rgb(17,24,39)", + "scale": 900, + "rgbChannel": "17 24 39", + "hslChannel": "220.9 39.3% 11%" + }, + { + "hex": "#030712", + "hsl": "hsl(224,71.4%,4.1%)", + "rgb": "rgb(3,7,18)", + "scale": 950, + "rgbChannel": "3 7 18", + "hslChannel": "224 71.4% 4.1%" + } + ], + "green": [ + { + "hex": "#f0fdf4", + "hsl": "hsl(138.5,76.5%,96.7%)", + "rgb": "rgb(240,253,244)", + "scale": 50, + "rgbChannel": "240 253 244", + "hslChannel": "138.5 76.5% 96.7%" + }, + { + "hex": "#dcfce7", + "hsl": "hsl(140.6,84.2%,92.5%)", + "rgb": "rgb(220,252,231)", + "scale": 100, + "rgbChannel": "220 252 231", + "hslChannel": "140.6 84.2% 92.5%" + }, + { + "hex": "#bbf7d0", + "hsl": "hsl(141,78.9%,85.1%)", + "rgb": "rgb(187,247,208)", + "scale": 200, + "rgbChannel": "187 247 208", + "hslChannel": "141 78.9% 85.1%" + }, + { + "hex": "#86efac", + "hsl": "hsl(141.7,76.6%,73.1%)", + "rgb": "rgb(134,239,172)", + "scale": 300, + "rgbChannel": "134 239 172", + "hslChannel": "141.7 76.6% 73.1%" + }, + { + "hex": "#4ade80", + "hsl": "hsl(141.9,69.2%,58%)", + "rgb": "rgb(74,222,128)", + "scale": 400, + "rgbChannel": "74 222 128", + "hslChannel": "141.9 69.2% 58%" + }, + { + "hex": "#22c55e", + "hsl": "hsl(142.1,70.6%,45.3%)", + "rgb": "rgb(34,197,94)", + "scale": 500, + "rgbChannel": "34 197 94", + "hslChannel": "142.1 70.6% 45.3%" + }, + { + "hex": "#16a34a", + "hsl": "hsl(142.1,76.2%,36.3%)", + "rgb": "rgb(22,163,74)", + "scale": 600, + "rgbChannel": "22 163 74", + "hslChannel": "142.1 76.2% 36.3%" + }, + { + "hex": "#15803d", + "hsl": "hsl(142.4,71.8%,29.2%)", + "rgb": "rgb(21,128,61)", + "scale": 700, + "rgbChannel": "21 128 61", + "hslChannel": "142.4 71.8% 29.2%" + }, + { + "hex": "#166534", + "hsl": "hsl(142.8,64.2%,24.1%)", + "rgb": "rgb(22,101,52)", + "scale": 800, + "rgbChannel": "22 101 52", + "hslChannel": "142.8 64.2% 24.1%" + }, + { + "hex": "#14532d", + "hsl": "hsl(143.8,61.2%,20.2%)", + "rgb": "rgb(20,83,45)", + "scale": 900, + "rgbChannel": "20 83 45", + "hslChannel": "143.8 61.2% 20.2%" + }, + { + "hex": "#052e16", + "hsl": "hsl(144.9,80.4%,10%)", + "rgb": "rgb(5,46,22)", + "scale": 950, + "rgbChannel": "5 46 22", + "hslChannel": "144.9 80.4% 10%" + } + ], + "indigo": [ + { + "hex": "#eef2ff", + "hsl": "hsl(225.9,100%,96.7%)", + "rgb": "rgb(238,242,255)", + "scale": 50, + "rgbChannel": "238 242 255", + "hslChannel": "225.9 100% 96.7%" + }, + { + "hex": "#e0e7ff", + "hsl": "hsl(226.5,100%,93.9%)", + "rgb": "rgb(224,231,255)", + "scale": 100, + "rgbChannel": "224 231 255", + "hslChannel": "226.5 100% 93.9%" + }, + { + "hex": "#c7d2fe", + "hsl": "hsl(228,96.5%,88.8%)", + "rgb": "rgb(199,210,254)", + "scale": 200, + "rgbChannel": "199 210 254", + "hslChannel": "228 96.5% 88.8%" + }, + { + "hex": "#a5b4fc", + "hsl": "hsl(229.7,93.5%,81.8%)", + "rgb": "rgb(165,180,252)", + "scale": 300, + "rgbChannel": "165 180 252", + "hslChannel": "229.7 93.5% 81.8%" + }, + { + "hex": "#818cf8", + "hsl": "hsl(234.5,89.5%,73.9%)", + "rgb": "rgb(129,140,248)", + "scale": 400, + "rgbChannel": "129 140 248", + "hslChannel": "234.5 89.5% 73.9%" + }, + { + "hex": "#6366f1", + "hsl": "hsl(238.7,83.5%,66.7%)", + "rgb": "rgb(99,102,241)", + "scale": 500, + "rgbChannel": "99 102 241", + "hslChannel": "238.7 83.5% 66.7%" + }, + { + "hex": "#4f46e5", + "hsl": "hsl(243.4,75.4%,58.6%)", + "rgb": "rgb(79,70,229)", + "scale": 600, + "rgbChannel": "79 70 229", + "hslChannel": "243.4 75.4% 58.6%" + }, + { + "hex": "#4338ca", + "hsl": "hsl(244.5,57.9%,50.6%)", + "rgb": "rgb(67,56,202)", + "scale": 700, + "rgbChannel": "67 56 202", + "hslChannel": "244.5 57.9% 50.6%" + }, + { + "hex": "#3730a3", + "hsl": "hsl(243.7,54.5%,41.4%)", + "rgb": "rgb(55,48,163)", + "scale": 800, + "rgbChannel": "55 48 163", + "hslChannel": "243.7 54.5% 41.4%" + }, + { + "hex": "#312e81", + "hsl": "hsl(242.2,47.4%,34.3%)", + "rgb": "rgb(49,46,129)", + "scale": 900, + "rgbChannel": "49 46 129", + "hslChannel": "242.2 47.4% 34.3%" + }, + { + "hex": "#1e1b4b", + "hsl": "hsl(243.8,47.1%,20%)", + "rgb": "rgb(30,27,75)", + "scale": 950, + "rgbChannel": "30 27 75", + "hslChannel": "243.8 47.1% 20%" + } + ], + "inherit": "inherit", + "lime": [ + { + "hex": "#f7fee7", + "hsl": "hsl(78.3,92%,95.1%)", + "rgb": "rgb(247,254,231)", + "scale": 50, + "rgbChannel": "247 254 231", + "hslChannel": "78.3 92% 95.1%" + }, + { + "hex": "#ecfccb", + "hsl": "hsl(79.6,89.1%,89.2%)", + "rgb": "rgb(236,252,203)", + "scale": 100, + "rgbChannel": "236 252 203", + "hslChannel": "79.6 89.1% 89.2%" + }, + { + "hex": "#d9f99d", + "hsl": "hsl(80.9,88.5%,79.6%)", + "rgb": "rgb(217,249,157)", + "scale": 200, + "rgbChannel": "217 249 157", + "hslChannel": "80.9 88.5% 79.6%" + }, + { + "hex": "#bef264", + "hsl": "hsl(82,84.5%,67.1%)", + "rgb": "rgb(190,242,100)", + "scale": 300, + "rgbChannel": "190 242 100", + "hslChannel": "82 84.5% 67.1%" + }, + { + "hex": "#a3e635", + "hsl": "hsl(82.7,78%,55.5%)", + "rgb": "rgb(163,230,53)", + "scale": 400, + "rgbChannel": "163 230 53", + "hslChannel": "82.7 78% 55.5%" + }, + { + "hex": "#84cc16", + "hsl": "hsl(83.7,80.5%,44.3%)", + "rgb": "rgb(132,204,22)", + "scale": 500, + "rgbChannel": "132 204 22", + "hslChannel": "83.7 80.5% 44.3%" + }, + { + "hex": "#65a30d", + "hsl": "hsl(84.8,85.2%,34.5%)", + "rgb": "rgb(101,163,13)", + "scale": 600, + "rgbChannel": "101 163 13", + "hslChannel": "84.8 85.2% 34.5%" + }, + { + "hex": "#4d7c0f", + "hsl": "hsl(85.9,78.4%,27.3%)", + "rgb": "rgb(77,124,15)", + "scale": 700, + "rgbChannel": "77 124 15", + "hslChannel": "85.9 78.4% 27.3%" + }, + { + "hex": "#3f6212", + "hsl": "hsl(86.3,69%,22.7%)", + "rgb": "rgb(63,98,18)", + "scale": 800, + "rgbChannel": "63 98 18", + "hslChannel": "86.3 69% 22.7%" + }, + { + "hex": "#365314", + "hsl": "hsl(87.6,61.2%,20.2%)", + "rgb": "rgb(54,83,20)", + "scale": 900, + "rgbChannel": "54 83 20", + "hslChannel": "87.6 61.2% 20.2%" + }, + { + "hex": "#1a2e05", + "hsl": "hsl(89.3,80.4%,10%)", + "rgb": "rgb(26,46,5)", + "scale": 950, + "rgbChannel": "26 46 5", + "hslChannel": "89.3 80.4% 10%" + } + ], + "neutral": [ + { + "hex": "#fafafa", + "hsl": "hsl(0,0%,98%)", + "rgb": "rgb(250,250,250)", + "scale": 50, + "rgbChannel": "250 250 250", + "hslChannel": "0 0% 98%" + }, + { + "hex": "#f5f5f5", + "hsl": "hsl(0,0%,96.1%)", + "rgb": "rgb(245,245,245)", + "scale": 100, + "rgbChannel": "245 245 245", + "hslChannel": "0 0% 96.1%" + }, + { + "hex": "#e5e5e5", + "hsl": "hsl(0,0%,89.8%)", + "rgb": "rgb(229,229,229)", + "scale": 200, + "rgbChannel": "229 229 229", + "hslChannel": "0 0% 89.8%" + }, + { + "hex": "#d4d4d4", + "hsl": "hsl(0,0%,83.1%)", + "rgb": "rgb(212,212,212)", + "scale": 300, + "rgbChannel": "212 212 212", + "hslChannel": "0 0% 83.1%" + }, + { + "hex": "#a3a3a3", + "hsl": "hsl(0,0%,63.9%)", + "rgb": "rgb(163,163,163)", + "scale": 400, + "rgbChannel": "163 163 163", + "hslChannel": "0 0% 63.9%" + }, + { + "hex": "#737373", + "hsl": "hsl(0,0%,45.1%)", + "rgb": "rgb(115,115,115)", + "scale": 500, + "rgbChannel": "115 115 115", + "hslChannel": "0 0% 45.1%" + }, + { + "hex": "#525252", + "hsl": "hsl(0,0%,32.2%)", + "rgb": "rgb(82,82,82)", + "scale": 600, + "rgbChannel": "82 82 82", + "hslChannel": "0 0% 32.2%" + }, + { + "hex": "#404040", + "hsl": "hsl(0,0%,25.1%)", + "rgb": "rgb(64,64,64)", + "scale": 700, + "rgbChannel": "64 64 64", + "hslChannel": "0 0% 25.1%" + }, + { + "hex": "#262626", + "hsl": "hsl(0,0%,14.9%)", + "rgb": "rgb(38,38,38)", + "scale": 800, + "rgbChannel": "38 38 38", + "hslChannel": "0 0% 14.9%" + }, + { + "hex": "#171717", + "hsl": "hsl(0,0%,9%)", + "rgb": "rgb(23,23,23)", + "scale": 900, + "rgbChannel": "23 23 23", + "hslChannel": "0 0% 9%" + }, + { + "hex": "#0a0a0a", + "hsl": "hsl(0,0%,3.9%)", + "rgb": "rgb(10,10,10)", + "scale": 950, + "rgbChannel": "10 10 10", + "hslChannel": "0 0% 3.9%" + } + ], + "orange": [ + { + "hex": "#fff7ed", + "hsl": "hsl(33.3,100%,96.5%)", + "rgb": "rgb(255,247,237)", + "scale": 50, + "rgbChannel": "255 247 237", + "hslChannel": "33.3 100% 96.5%" + }, + { + "hex": "#ffedd5", + "hsl": "hsl(34.3,100%,91.8%)", + "rgb": "rgb(255,237,213)", + "scale": 100, + "rgbChannel": "255 237 213", + "hslChannel": "34.3 100% 91.8%" + }, + { + "hex": "#fed7aa", + "hsl": "hsl(32.1,97.7%,83.1%)", + "rgb": "rgb(254,215,170)", + "scale": 200, + "rgbChannel": "254 215 170", + "hslChannel": "32.1 97.7% 83.1%" + }, + { + "hex": "#fdba74", + "hsl": "hsl(30.7,97.2%,72.4%)", + "rgb": "rgb(253,186,116)", + "scale": 300, + "rgbChannel": "253 186 116", + "hslChannel": "30.7 97.2% 72.4%" + }, + { + "hex": "#fb923c", + "hsl": "hsl(27,96%,61%)", + "rgb": "rgb(251,146,60)", + "scale": 400, + "rgbChannel": "251 146 60", + "hslChannel": "27 96% 61%" + }, + { + "hex": "#f97316", + "hsl": "hsl(24.6,95%,53.1%)", + "rgb": "rgb(249,115,22)", + "scale": 500, + "rgbChannel": "249 115 22", + "hslChannel": "24.6 95% 53.1%" + }, + { + "hex": "#ea580c", + "hsl": "hsl(20.5,90.2%,48.2%)", + "rgb": "rgb(234,88,12)", + "scale": 600, + "rgbChannel": "234 88 12", + "hslChannel": "20.5 90.2% 48.2%" + }, + { + "hex": "#c2410c", + "hsl": "hsl(17.5,88.3%,40.4%)", + "rgb": "rgb(194,65,12)", + "scale": 700, + "rgbChannel": "194 65 12", + "hslChannel": "17.5 88.3% 40.4%" + }, + { + "hex": "#9a3412", + "hsl": "hsl(15,79.1%,33.7%)", + "rgb": "rgb(154,52,18)", + "scale": 800, + "rgbChannel": "154 52 18", + "hslChannel": "15 79.1% 33.7%" + }, + { + "hex": "#7c2d12", + "hsl": "hsl(15.3,74.6%,27.8%)", + "rgb": "rgb(124,45,18)", + "scale": 900, + "rgbChannel": "124 45 18", + "hslChannel": "15.3 74.6% 27.8%" + }, + { + "hex": "#431407", + "hsl": "hsl(13,81.1%,14.5%)", + "rgb": "rgb(67,20,7)", + "scale": 950, + "rgbChannel": "67 20 7", + "hslChannel": "13 81.1% 14.5%" + } + ], + "pink": [ + { + "hex": "#fdf2f8", + "hsl": "hsl(327.3,73.3%,97.1%)", + "rgb": "rgb(253,242,248)", + "scale": 50, + "rgbChannel": "253 242 248", + "hslChannel": "327.3 73.3% 97.1%" + }, + { + "hex": "#fce7f3", + "hsl": "hsl(325.7,77.8%,94.7%)", + "rgb": "rgb(252,231,243)", + "scale": 100, + "rgbChannel": "252 231 243", + "hslChannel": "325.7 77.8% 94.7%" + }, + { + "hex": "#fbcfe8", + "hsl": "hsl(325.9,84.6%,89.8%)", + "rgb": "rgb(251,207,232)", + "scale": 200, + "rgbChannel": "251 207 232", + "hslChannel": "325.9 84.6% 89.8%" + }, + { + "hex": "#f9a8d4", + "hsl": "hsl(327.4,87.1%,81.8%)", + "rgb": "rgb(249,168,212)", + "scale": 300, + "rgbChannel": "249 168 212", + "hslChannel": "327.4 87.1% 81.8%" + }, + { + "hex": "#f472b6", + "hsl": "hsl(328.6,85.5%,70.2%)", + "rgb": "rgb(244,114,182)", + "scale": 400, + "rgbChannel": "244 114 182", + "hslChannel": "328.6 85.5% 70.2%" + }, + { + "hex": "#ec4899", + "hsl": "hsl(330.4,81.2%,60.4%)", + "rgb": "rgb(236,72,153)", + "scale": 500, + "rgbChannel": "236 72 153", + "hslChannel": "330.4 81.2% 60.4%" + }, + { + "hex": "#db2777", + "hsl": "hsl(333.3,71.4%,50.6%)", + "rgb": "rgb(219,39,119)", + "scale": 600, + "rgbChannel": "219 39 119", + "hslChannel": "333.3 71.4% 50.6%" + }, + { + "hex": "#be185d", + "hsl": "hsl(335.1,77.6%,42%)", + "rgb": "rgb(190,24,93)", + "scale": 700, + "rgbChannel": "190 24 93", + "hslChannel": "335.1 77.6% 42%" + }, + { + "hex": "#9d174d", + "hsl": "hsl(335.8,74.4%,35.3%)", + "rgb": "rgb(157,23,77)", + "scale": 800, + "rgbChannel": "157 23 77", + "hslChannel": "335.8 74.4% 35.3%" + }, + { + "hex": "#831843", + "hsl": "hsl(335.9,69%,30.4%)", + "rgb": "rgb(131,24,67)", + "scale": 900, + "rgbChannel": "131 24 67", + "hslChannel": "335.9 69% 30.4%" + }, + { + "hex": "#500724", + "hsl": "hsl(336.2,83.9%,17.1%)", + "rgb": "rgb(80,7,36)", + "scale": 950, + "rgbChannel": "80 7 36", + "hslChannel": "336.2 83.9% 17.1%" + } + ], + "purple": [ + { + "hex": "#faf5ff", + "hsl": "hsl(270,100%,98%)", + "rgb": "rgb(250,245,255)", + "scale": 50, + "rgbChannel": "250 245 255", + "hslChannel": "270 100% 98%" + }, + { + "hex": "#f3e8ff", + "hsl": "hsl(268.7,100%,95.5%)", + "rgb": "rgb(243,232,255)", + "scale": 100, + "rgbChannel": "243 232 255", + "hslChannel": "268.7 100% 95.5%" + }, + { + "hex": "#e9d5ff", + "hsl": "hsl(268.6,100%,91.8%)", + "rgb": "rgb(233,213,255)", + "scale": 200, + "rgbChannel": "233 213 255", + "hslChannel": "268.6 100% 91.8%" + }, + { + "hex": "#d8b4fe", + "hsl": "hsl(269.2,97.4%,85.1%)", + "rgb": "rgb(216,180,254)", + "scale": 300, + "rgbChannel": "216 180 254", + "hslChannel": "269.2 97.4% 85.1%" + }, + { + "hex": "#c084fc", + "hsl": "hsl(270,95.2%,75.3%)", + "rgb": "rgb(192,132,252)", + "scale": 400, + "rgbChannel": "192 132 252", + "hslChannel": "270 95.2% 75.3%" + }, + { + "hex": "#a855f7", + "hsl": "hsl(270.7,91%,65.1%)", + "rgb": "rgb(168,85,247)", + "scale": 500, + "rgbChannel": "168 85 247", + "hslChannel": "270.7 91% 65.1%" + }, + { + "hex": "#9333ea", + "hsl": "hsl(271.5,81.3%,55.9%)", + "rgb": "rgb(147,51,234)", + "scale": 600, + "rgbChannel": "147 51 234", + "hslChannel": "271.5 81.3% 55.9%" + }, + { + "hex": "#7e22ce", + "hsl": "hsl(272.1,71.7%,47.1%)", + "rgb": "rgb(126,34,206)", + "scale": 700, + "rgbChannel": "126 34 206", + "hslChannel": "272.1 71.7% 47.1%" + }, + { + "hex": "#6b21a8", + "hsl": "hsl(272.9,67.2%,39.4%)", + "rgb": "rgb(107,33,168)", + "scale": 800, + "rgbChannel": "107 33 168", + "hslChannel": "272.9 67.2% 39.4%" + }, + { + "hex": "#581c87", + "hsl": "hsl(273.6,65.6%,32%)", + "rgb": "rgb(88,28,135)", + "scale": 900, + "rgbChannel": "88 28 135", + "hslChannel": "273.6 65.6% 32%" + }, + { + "hex": "#3b0764", + "hsl": "hsl(273.5,86.9%,21%)", + "rgb": "rgb(59,7,100)", + "scale": 950, + "rgbChannel": "59 7 100", + "hslChannel": "273.5 86.9% 21%" + } + ], + "red": [ + { + "hex": "#fef2f2", + "hsl": "hsl(0,85.7%,97.3%)", + "rgb": "rgb(254,242,242)", + "scale": 50, + "rgbChannel": "254 242 242", + "hslChannel": "0 85.7% 97.3%" + }, + { + "hex": "#fee2e2", + "hsl": "hsl(0,93.3%,94.1%)", + "rgb": "rgb(254,226,226)", + "scale": 100, + "rgbChannel": "254 226 226", + "hslChannel": "0 93.3% 94.1%" + }, + { + "hex": "#fecaca", + "hsl": "hsl(0,96.3%,89.4%)", + "rgb": "rgb(254,202,202)", + "scale": 200, + "rgbChannel": "254 202 202", + "hslChannel": "0 96.3% 89.4%" + }, + { + "hex": "#fca5a5", + "hsl": "hsl(0,93.5%,81.8%)", + "rgb": "rgb(252,165,165)", + "scale": 300, + "rgbChannel": "252 165 165", + "hslChannel": "0 93.5% 81.8%" + }, + { + "hex": "#f87171", + "hsl": "hsl(0,90.6%,70.8%)", + "rgb": "rgb(248,113,113)", + "scale": 400, + "rgbChannel": "248 113 113", + "hslChannel": "0 90.6% 70.8%" + }, + { + "hex": "#ef4444", + "hsl": "hsl(0,84.2%,60.2%)", + "rgb": "rgb(239,68,68)", + "scale": 500, + "rgbChannel": "239 68 68", + "hslChannel": "0 84.2% 60.2%" + }, + { + "hex": "#dc2626", + "hsl": "hsl(0,72.2%,50.6%)", + "rgb": "rgb(220,38,38)", + "scale": 600, + "rgbChannel": "220 38 38", + "hslChannel": "0 72.2% 50.6%" + }, + { + "hex": "#b91c1c", + "hsl": "hsl(0,73.7%,41.8%)", + "rgb": "rgb(185,28,28)", + "scale": 700, + "rgbChannel": "185 28 28", + "hslChannel": "0 73.7% 41.8%" + }, + { + "hex": "#991b1b", + "hsl": "hsl(0,70%,35.3%)", + "rgb": "rgb(153,27,27)", + "scale": 800, + "rgbChannel": "153 27 27", + "hslChannel": "0 70% 35.3%" + }, + { + "hex": "#7f1d1d", + "hsl": "hsl(0,62.8%,30.6%)", + "rgb": "rgb(127,29,29)", + "scale": 900, + "rgbChannel": "127 29 29", + "hslChannel": "0 62.8% 30.6%" + }, + { + "hex": "#450a0a", + "hsl": "hsl(0,74.7%,15.5%)", + "rgb": "rgb(69,10,10)", + "scale": 950, + "rgbChannel": "69 10 10", + "hslChannel": "0 74.7% 15.5%" + } + ], + "rose": [ + { + "hex": "#fff1f2", + "hsl": "hsl(355.7,100%,97.3%)", + "rgb": "rgb(255,241,242)", + "scale": 50, + "rgbChannel": "255 241 242", + "hslChannel": "355.7 100% 97.3%" + }, + { + "hex": "#ffe4e6", + "hsl": "hsl(355.6,100%,94.7%)", + "rgb": "rgb(255,228,230)", + "scale": 100, + "rgbChannel": "255 228 230", + "hslChannel": "355.6 100% 94.7%" + }, + { + "hex": "#fecdd3", + "hsl": "hsl(352.7,96.1%,90%)", + "rgb": "rgb(254,205,211)", + "scale": 200, + "rgbChannel": "254 205 211", + "hslChannel": "352.7 96.1% 90%" + }, + { + "hex": "#fda4af", + "hsl": "hsl(352.6,95.7%,81.8%)", + "rgb": "rgb(253,164,175)", + "scale": 300, + "rgbChannel": "253 164 175", + "hslChannel": "352.6 95.7% 81.8%" + }, + { + "hex": "#fb7185", + "hsl": "hsl(351.3,94.5%,71.4%)", + "rgb": "rgb(251,113,133)", + "scale": 400, + "rgbChannel": "251 113 133", + "hslChannel": "351.3 94.5% 71.4%" + }, + { + "hex": "#f43f5e", + "hsl": "hsl(349.7,89.2%,60.2%)", + "rgb": "rgb(244,63,94)", + "scale": 500, + "rgbChannel": "244 63 94", + "hslChannel": "349.7 89.2% 60.2%" + }, + { + "hex": "#e11d48", + "hsl": "hsl(346.8,77.2%,49.8%)", + "rgb": "rgb(225,29,72)", + "scale": 600, + "rgbChannel": "225 29 72", + "hslChannel": "346.8 77.2% 49.8%" + }, + { + "hex": "#be123c", + "hsl": "hsl(345.3,82.7%,40.8%)", + "rgb": "rgb(190,18,60)", + "scale": 700, + "rgbChannel": "190 18 60", + "hslChannel": "345.3 82.7% 40.8%" + }, + { + "hex": "#9f1239", + "hsl": "hsl(343.4,79.7%,34.7%)", + "rgb": "rgb(159,18,57)", + "scale": 800, + "rgbChannel": "159 18 57", + "hslChannel": "343.4 79.7% 34.7%" + }, + { + "hex": "#881337", + "hsl": "hsl(341.5,75.5%,30.4%)", + "rgb": "rgb(136,19,55)", + "scale": 900, + "rgbChannel": "136 19 55", + "hslChannel": "341.5 75.5% 30.4%" + }, + { + "hex": "#4c0519", + "hsl": "hsl(343.1,87.7%,15.9%)", + "rgb": "rgb(76,5,25)", + "scale": 950, + "rgbChannel": "76 5 25", + "hslChannel": "343.1 87.7% 15.9%" + } + ], + "sky": [ + { + "hex": "#f0f9ff", + "hsl": "hsl(204,100%,97.1%)", + "rgb": "rgb(240,249,255)", + "scale": 50, + "rgbChannel": "240 249 255", + "hslChannel": "204 100% 97.1%" + }, + { + "hex": "#e0f2fe", + "hsl": "hsl(204,93.8%,93.7%)", + "rgb": "rgb(224,242,254)", + "scale": 100, + "rgbChannel": "224 242 254", + "hslChannel": "204 93.8% 93.7%" + }, + { + "hex": "#bae6fd", + "hsl": "hsl(200.6,94.4%,86.1%)", + "rgb": "rgb(186,230,253)", + "scale": 200, + "rgbChannel": "186 230 253", + "hslChannel": "200.6 94.4% 86.1%" + }, + { + "hex": "#7dd3fc", + "hsl": "hsl(199.4,95.5%,73.9%)", + "rgb": "rgb(125,211,252)", + "scale": 300, + "rgbChannel": "125 211 252", + "hslChannel": "199.4 95.5% 73.9%" + }, + { + "hex": "#38bdf8", + "hsl": "hsl(198.4,93.2%,59.6%)", + "rgb": "rgb(56,189,248)", + "scale": 400, + "rgbChannel": "56 189 248", + "hslChannel": "198.4 93.2% 59.6%" + }, + { + "hex": "#0ea5e9", + "hsl": "hsl(198.6,88.7%,48.4%)", + "rgb": "rgb(14,165,233)", + "scale": 500, + "rgbChannel": "14 165 233", + "hslChannel": "198.6 88.7% 48.4%" + }, + { + "hex": "#0284c7", + "hsl": "hsl(200.4,98%,39.4%)", + "rgb": "rgb(2,132,199)", + "scale": 600, + "rgbChannel": "2 132 199", + "hslChannel": "200.4 98% 39.4%" + }, + { + "hex": "#0369a1", + "hsl": "hsl(201.3,96.3%,32.2%)", + "rgb": "rgb(3,105,161)", + "scale": 700, + "rgbChannel": "3 105 161", + "hslChannel": "201.3 96.3% 32.2%" + }, + { + "hex": "#075985", + "hsl": "hsl(201,90%,27.5%)", + "rgb": "rgb(7,89,133)", + "scale": 800, + "rgbChannel": "7 89 133", + "hslChannel": "201 90% 27.5%" + }, + { + "hex": "#0c4a6e", + "hsl": "hsl(202,80.3%,23.9%)", + "rgb": "rgb(12,74,110)", + "scale": 900, + "rgbChannel": "12 74 110", + "hslChannel": "202 80.3% 23.9%" + }, + { + "hex": "#082f49", + "hsl": "hsl(204,80.2%,15.9%)", + "rgb": "rgb(8,47,73)", + "scale": 950, + "rgbChannel": "8 47 73", + "hslChannel": "204 80.2% 15.9%" + } + ], + "slate": [ + { + "hex": "#f8fafc", + "hsl": "hsl(210,40%,98%)", + "rgb": "rgb(248,250,252)", + "scale": 50, + "rgbChannel": "248 250 252", + "hslChannel": "210 40% 98%" + }, + { + "hex": "#f1f5f9", + "hsl": "hsl(210,40%,96.1%)", + "rgb": "rgb(241,245,249)", + "scale": 100, + "rgbChannel": "241 245 249", + "hslChannel": "210 40% 96.1%" + }, + { + "hex": "#e2e8f0", + "hsl": "hsl(214.3,31.8%,91.4%)", + "rgb": "rgb(226,232,240)", + "scale": 200, + "rgbChannel": "226 232 240", + "hslChannel": "214.3 31.8% 91.4%" + }, + { + "hex": "#cbd5e1", + "hsl": "hsl(212.7,26.8%,83.9%)", + "rgb": "rgb(203,213,225)", + "scale": 300, + "rgbChannel": "203 213 225", + "hslChannel": "212.7 26.8% 83.9%" + }, + { + "hex": "#94a3b8", + "hsl": "hsl(215,20.2%,65.1%)", + "rgb": "rgb(148,163,184)", + "scale": 400, + "rgbChannel": "148 163 184", + "hslChannel": "215 20.2% 65.1%" + }, + { + "hex": "#64748b", + "hsl": "hsl(215.4,16.3%,46.9%)", + "rgb": "rgb(100,116,139)", + "scale": 500, + "rgbChannel": "100 116 139", + "hslChannel": "215.4 16.3% 46.9%" + }, + { + "hex": "#475569", + "hsl": "hsl(215.3,19.3%,34.5%)", + "rgb": "rgb(71,85,105)", + "scale": 600, + "rgbChannel": "71 85 105", + "hslChannel": "215.3 19.3% 34.5%" + }, + { + "hex": "#334155", + "hsl": "hsl(215.3,25%,26.7%)", + "rgb": "rgb(51,65,85)", + "scale": 700, + "rgbChannel": "51 65 85", + "hslChannel": "215.3 25% 26.7%" + }, + { + "hex": "#1e293b", + "hsl": "hsl(217.2,32.6%,17.5%)", + "rgb": "rgb(30,41,59)", + "scale": 800, + "rgbChannel": "30 41 59", + "hslChannel": "217.2 32.6% 17.5%" + }, + { + "hex": "#0f172a", + "hsl": "hsl(222.2,47.4%,11.2%)", + "rgb": "rgb(15,23,42)", + "scale": 900, + "rgbChannel": "15 23 42", + "hslChannel": "222.2 47.4% 11.2%" + }, + { + "hex": "#020617", + "hsl": "hsl(222.2,84%,4.9%)", + "rgb": "rgb(2,6,23)", + "scale": 950, + "rgbChannel": "2 6 23", + "hslChannel": "222.2 84% 4.9%" + } + ], + "stone": [ + { + "hex": "#fafaf9", + "hsl": "hsl(60,9.1%,97.8%)", + "rgb": "rgb(250,250,249)", + "scale": 50, + "rgbChannel": "250 250 249", + "hslChannel": "60 9.1% 97.8%" + }, + { + "hex": "#f5f5f4", + "hsl": "hsl(60,4.8%,95.9%)", + "rgb": "rgb(245,245,244)", + "scale": 100, + "rgbChannel": "245 245 244", + "hslChannel": "60 4.8% 95.9%" + }, + { + "hex": "#e7e5e4", + "hsl": "hsl(20,5.9%,90%)", + "rgb": "rgb(231,229,228)", + "scale": 200, + "rgbChannel": "231 229 228", + "hslChannel": "20 5.9% 90%" + }, + { + "hex": "#d6d3d1", + "hsl": "hsl(24,5.7%,82.9%)", + "rgb": "rgb(214,211,209)", + "scale": 300, + "rgbChannel": "214 211 209", + "hslChannel": "24 5.7% 82.9%" + }, + { + "hex": "#a8a29e", + "hsl": "hsl(24,5.4%,63.9%)", + "rgb": "rgb(168,162,158)", + "scale": 400, + "rgbChannel": "168 162 158", + "hslChannel": "24 5.4% 63.9%" + }, + { + "hex": "#78716c", + "hsl": "hsl(25,5.3%,44.7%)", + "rgb": "rgb(120,113,108)", + "scale": 500, + "rgbChannel": "120 113 108", + "hslChannel": "25 5.3% 44.7%" + }, + { + "hex": "#57534e", + "hsl": "hsl(33.3,5.5%,32.4%)", + "rgb": "rgb(87,83,78)", + "scale": 600, + "rgbChannel": "87 83 78", + "hslChannel": "33.3 5.5% 32.4%" + }, + { + "hex": "#44403c", + "hsl": "hsl(30,6.3%,25.1%)", + "rgb": "rgb(68,64,60)", + "scale": 700, + "rgbChannel": "68 64 60", + "hslChannel": "30 6.3% 25.1%" + }, + { + "hex": "#292524", + "hsl": "hsl(12,6.5%,15.1%)", + "rgb": "rgb(41,37,36)", + "scale": 800, + "rgbChannel": "41 37 36", + "hslChannel": "12 6.5% 15.1%" + }, + { + "hex": "#1c1917", + "hsl": "hsl(24,9.8%,10%)", + "rgb": "rgb(28,25,23)", + "scale": 900, + "rgbChannel": "28 25 23", + "hslChannel": "24 9.8% 10%" + }, + { + "hex": "#0c0a09", + "hsl": "hsl(20,14.3%,4.1%)", + "rgb": "rgb(12,10,9)", + "scale": 950, + "rgbChannel": "12 10 9", + "hslChannel": "20 14.3% 4.1%" + } + ], + "teal": [ + { + "hex": "#f0fdfa", + "hsl": "hsl(166.2,76.5%,96.7%)", + "rgb": "rgb(240,253,250)", + "scale": 50, + "rgbChannel": "240 253 250", + "hslChannel": "166.2 76.5% 96.7%" + }, + { + "hex": "#ccfbf1", + "hsl": "hsl(167.2,85.5%,89.2%)", + "rgb": "rgb(204,251,241)", + "scale": 100, + "rgbChannel": "204 251 241", + "hslChannel": "167.2 85.5% 89.2%" + }, + { + "hex": "#99f6e4", + "hsl": "hsl(168.4,83.8%,78.2%)", + "rgb": "rgb(153,246,228)", + "scale": 200, + "rgbChannel": "153 246 228", + "hslChannel": "168.4 83.8% 78.2%" + }, + { + "hex": "#5eead4", + "hsl": "hsl(170.6,76.9%,64.3%)", + "rgb": "rgb(94,234,212)", + "scale": 300, + "rgbChannel": "94 234 212", + "hslChannel": "170.6 76.9% 64.3%" + }, + { + "hex": "#2dd4bf", + "hsl": "hsl(172.5,66%,50.4%)", + "rgb": "rgb(45,212,191)", + "scale": 400, + "rgbChannel": "45 212 191", + "hslChannel": "172.5 66% 50.4%" + }, + { + "hex": "#14b8a6", + "hsl": "hsl(173.4,80.4%,40%)", + "rgb": "rgb(20,184,166)", + "scale": 500, + "rgbChannel": "20 184 166", + "hslChannel": "173.4 80.4% 40%" + }, + { + "hex": "#0d9488", + "hsl": "hsl(174.7,83.9%,31.6%)", + "rgb": "rgb(13,148,136)", + "scale": 600, + "rgbChannel": "13 148 136", + "hslChannel": "174.7 83.9% 31.6%" + }, + { + "hex": "#0f766e", + "hsl": "hsl(175.3,77.4%,26.1%)", + "rgb": "rgb(15,118,110)", + "scale": 700, + "rgbChannel": "15 118 110", + "hslChannel": "175.3 77.4% 26.1%" + }, + { + "hex": "#115e59", + "hsl": "hsl(176.1,69.4%,21.8%)", + "rgb": "rgb(17,94,89)", + "scale": 800, + "rgbChannel": "17 94 89", + "hslChannel": "176.1 69.4% 21.8%" + }, + { + "hex": "#134e4a", + "hsl": "hsl(175.9,60.8%,19%)", + "rgb": "rgb(19,78,74)", + "scale": 900, + "rgbChannel": "19 78 74", + "hslChannel": "175.9 60.8% 19%" + }, + { + "hex": "#042f2e", + "hsl": "hsl(178.6,84.3%,10%)", + "rgb": "rgb(4,47,46)", + "scale": 950, + "rgbChannel": "4 47 46", + "hslChannel": "178.6 84.3% 10%" + } + ], + "transparent": "transparent", + "violet": [ + { + "hex": "#f5f3ff", + "hsl": "hsl(250,100%,97.6%)", + "rgb": "rgb(245,243,255)", + "scale": 50, + "rgbChannel": "245 243 255", + "hslChannel": "250 100% 97.6%" + }, + { + "hex": "#ede9fe", + "hsl": "hsl(251.4,91.3%,95.5%)", + "rgb": "rgb(237,233,254)", + "scale": 100, + "rgbChannel": "237 233 254", + "hslChannel": "251.4 91.3% 95.5%" + }, + { + "hex": "#ddd6fe", + "hsl": "hsl(250.5,95.2%,91.8%)", + "rgb": "rgb(221,214,254)", + "scale": 200, + "rgbChannel": "221 214 254", + "hslChannel": "250.5 95.2% 91.8%" + }, + { + "hex": "#c4b5fd", + "hsl": "hsl(252.5,94.7%,85.1%)", + "rgb": "rgb(196,181,253)", + "scale": 300, + "rgbChannel": "196 181 253", + "hslChannel": "252.5 94.7% 85.1%" + }, + { + "hex": "#a78bfa", + "hsl": "hsl(255.1,91.7%,76.3%)", + "rgb": "rgb(167,139,250)", + "scale": 400, + "rgbChannel": "167 139 250", + "hslChannel": "255.1 91.7% 76.3%" + }, + { + "hex": "#8b5cf6", + "hsl": "hsl(258.3,89.5%,66.3%)", + "rgb": "rgb(139,92,246)", + "scale": 500, + "rgbChannel": "139 92 246", + "hslChannel": "258.3 89.5% 66.3%" + }, + { + "hex": "#7c3aed", + "hsl": "hsl(262.1,83.3%,57.8%)", + "rgb": "rgb(124,58,237)", + "scale": 600, + "rgbChannel": "124 58 237", + "hslChannel": "262.1 83.3% 57.8%" + }, + { + "hex": "#6d28d9", + "hsl": "hsl(263.4,70%,50.4%)", + "rgb": "rgb(109,40,217)", + "scale": 700, + "rgbChannel": "109 40 217", + "hslChannel": "263.4 70% 50.4%" + }, + { + "hex": "#5b21b6", + "hsl": "hsl(263.4,69.3%,42.2%)", + "rgb": "rgb(91,33,182)", + "scale": 800, + "rgbChannel": "91 33 182", + "hslChannel": "263.4 69.3% 42.2%" + }, + { + "hex": "#4c1d95", + "hsl": "hsl(263.5,67.4%,34.9%)", + "rgb": "rgb(76,29,149)", + "scale": 900, + "rgbChannel": "76 29 149", + "hslChannel": "263.5 67.4% 34.9%" + }, + { + "hex": "#1e1b4b", + "hsl": "hsl(261.2,72.6%,22.9%)", + "rgb": "rgb(46,16,101)", + "scale": 950, + "rgbChannel": "46 16 101", + "hslChannel": "261.2 72.6% 22.9%" + } + ], + "white": { + "hex": "#ffffff", + "hsl": "hsl(0,0%,100%)", + "rgb": "rgb(255,255,255)", + "rgbChannel": "255 255 255", + "hslChannel": "0 0% 100%" + }, + "yellow": [ + { + "hex": "#fefce8", + "hsl": "hsl(54.5,91.7%,95.3%)", + "rgb": "rgb(254,252,232)", + "scale": 50, + "rgbChannel": "254 252 232", + "hslChannel": "54.5 91.7% 95.3%" + }, + { + "hex": "#fef9c3", + "hsl": "hsl(54.9,96.7%,88%)", + "rgb": "rgb(254,249,195)", + "scale": 100, + "rgbChannel": "254 249 195", + "hslChannel": "54.9 96.7% 88%" + }, + { + "hex": "#fef08a", + "hsl": "hsl(52.8,98.3%,76.9%)", + "rgb": "rgb(254,240,138)", + "scale": 200, + "rgbChannel": "254 240 138", + "hslChannel": "52.8 98.3% 76.9%" + }, + { + "hex": "#fde047", + "hsl": "hsl(50.4,97.8%,63.5%)", + "rgb": "rgb(253,224,71)", + "scale": 300, + "rgbChannel": "253 224 71", + "hslChannel": "50.4 97.8% 63.5%" + }, + { + "hex": "#facc15", + "hsl": "hsl(47.9,95.8%,53.1%)", + "rgb": "rgb(250,204,21)", + "scale": 400, + "rgbChannel": "250 204 21", + "hslChannel": "47.9 95.8% 53.1%" + }, + { + "hex": "#eab308", + "hsl": "hsl(45.4,93.4%,47.5%)", + "rgb": "rgb(234,179,8)", + "scale": 500, + "rgbChannel": "234 179 8", + "hslChannel": "45.4 93.4% 47.5%" + }, + { + "hex": "#ca8a04", + "hsl": "hsl(40.6,96.1%,40.4%)", + "rgb": "rgb(202,138,4)", + "scale": 600, + "rgbChannel": "202 138 4", + "hslChannel": "40.6 96.1% 40.4%" + }, + { + "hex": "#a16207", + "hsl": "hsl(35.5,91.7%,32.9%)", + "rgb": "rgb(161,98,7)", + "scale": 700, + "rgbChannel": "161 98 7", + "hslChannel": "35.5 91.7% 32.9%" + }, + { + "hex": "#854d0e", + "hsl": "hsl(31.8,81%,28.8%)", + "rgb": "rgb(133,77,14)", + "scale": 800, + "rgbChannel": "133 77 14", + "hslChannel": "31.8 81% 28.8%" + }, + { + "hex": "#713f12", + "hsl": "hsl(28.4,72.5%,25.7%)", + "rgb": "rgb(113,63,18)", + "scale": 900, + "rgbChannel": "113 63 18", + "hslChannel": "28.4 72.5% 25.7%" + }, + { + "hex": "#422006", + "hsl": "hsl(26,83.3%,14.1%)", + "rgb": "rgb(66,32,6)", + "scale": 950, + "rgbChannel": "66 32 6", + "hslChannel": "26 83.3% 14.1%" + } + ], + "zinc": [ + { + "hex": "#fafafa", + "hsl": "hsl(0,0%,98%)", + "rgb": "rgb(250,250,250)", + "scale": 50, + "rgbChannel": "250 250 250", + "hslChannel": "0 0% 98%" + }, + { + "hex": "#f4f4f5", + "hsl": "hsl(240,4.8%,95.9%)", + "rgb": "rgb(244,244,245)", + "scale": 100, + "rgbChannel": "244 244 245", + "hslChannel": "240 4.8% 95.9%" + }, + { + "hex": "#e4e4e7", + "hsl": "hsl(240,5.9%,90%)", + "rgb": "rgb(228,228,231)", + "scale": 200, + "rgbChannel": "228 228 231", + "hslChannel": "240 5.9% 90%" + }, + { + "hex": "#d4d4d8", + "hsl": "hsl(240,4.9%,83.9%)", + "rgb": "rgb(212,212,216)", + "scale": 300, + "rgbChannel": "212 212 216", + "hslChannel": "240 4.9% 83.9%" + }, + { + "hex": "#a1a1aa", + "hsl": "hsl(240,5%,64.9%)", + "rgb": "rgb(161,161,170)", + "scale": 400, + "rgbChannel": "161 161 170", + "hslChannel": "240 5% 64.9%" + }, + { + "hex": "#71717a", + "hsl": "hsl(240,3.8%,46.1%)", + "rgb": "rgb(113,113,122)", + "scale": 500, + "rgbChannel": "113 113 122", + "hslChannel": "240 3.8% 46.1%" + }, + { + "hex": "#52525b", + "hsl": "hsl(240,5.2%,33.9%)", + "rgb": "rgb(82,82,91)", + "scale": 600, + "rgbChannel": "82 82 91", + "hslChannel": "240 5.2% 33.9%" + }, + { + "hex": "#3f3f46", + "hsl": "hsl(240,5.3%,26.1%)", + "rgb": "rgb(63,63,70)", + "scale": 700, + "rgbChannel": "63 63 70", + "hslChannel": "240 5.3% 26.1%" + }, + { + "hex": "#27272a", + "hsl": "hsl(240,3.7%,15.9%)", + "rgb": "rgb(39,39,42)", + "scale": 800, + "rgbChannel": "39 39 42", + "hslChannel": "240 3.7% 15.9%" + }, + { + "hex": "#18181b", + "hsl": "hsl(240,5.9%,10%)", + "rgb": "rgb(24,24,27)", + "scale": 900, + "rgbChannel": "24 24 27", + "hslChannel": "240 5.9% 10%" + }, + { + "hex": "#09090b", + "hsl": "hsl(240,10%,3.9%)", + "rgb": "rgb(9,9,11)", + "scale": 950, + "rgbChannel": "9 9 11", + "hslChannel": "240 10% 3.9%" + } + ] +} \ No newline at end of file diff --git a/apps/www/public/r/colors/neutral.json b/apps/www/public/r/colors/neutral.json new file mode 100644 index 0000000000..d5188ec25d --- /dev/null +++ b/apps/www/public/r/colors/neutral.json @@ -0,0 +1,92 @@ +{ + "inlineColors": { + "dark": { + "accent": "neutral-800", + "accent-foreground": "neutral-50", + "background": "neutral-950", + "border": "neutral-800", + "card": "neutral-950", + "card-foreground": "neutral-50", + "destructive": "red-900", + "destructive-foreground": "neutral-50", + "foreground": "neutral-50", + "input": "neutral-800", + "muted": "neutral-800", + "muted-foreground": "neutral-400", + "popover": "neutral-950", + "popover-foreground": "neutral-50", + "primary": "neutral-50", + "primary-foreground": "neutral-900", + "ring": "neutral-300", + "secondary": "neutral-800", + "secondary-foreground": "neutral-50" + }, + "light": { + "accent": "neutral-100", + "accent-foreground": "neutral-900", + "background": "white", + "border": "neutral-200", + "card": "white", + "card-foreground": "neutral-950", + "destructive": "red-500", + "destructive-foreground": "neutral-50", + "foreground": "neutral-950", + "input": "neutral-200", + "muted": "neutral-100", + "muted-foreground": "neutral-500", + "popover": "white", + "popover-foreground": "neutral-950", + "primary": "neutral-900", + "primary-foreground": "neutral-50", + "ring": "neutral-950", + "secondary": "neutral-100", + "secondary-foreground": "neutral-900" + } + }, + "cssVars": { + "dark": { + "accent": "0 0% 14.9%", + "accent-foreground": "0 0% 98%", + "background": "0 0% 3.9%", + "border": "0 0% 14.9%", + "card": "0 0% 3.9%", + "card-foreground": "0 0% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 98%", + "input": "0 0% 14.9%", + "muted": "0 0% 14.9%", + "muted-foreground": "0 0% 63.9%", + "popover": "0 0% 3.9%", + "popover-foreground": "0 0% 98%", + "primary": "0 0% 98%", + "primary-foreground": "0 0% 9%", + "ring": "0 0% 83.1%", + "secondary": "0 0% 14.9%", + "secondary-foreground": "0 0% 98%" + }, + "light": { + "accent": "0 0% 96.1%", + "accent-foreground": "0 0% 9%", + "background": "0 0% 100%", + "border": "0 0% 89.8%", + "card": "0 0% 100%", + "card-foreground": "0 0% 3.9%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 3.9%", + "input": "0 0% 89.8%", + "muted": "0 0% 96.1%", + "muted-foreground": "0 0% 45.1%", + "popover": "0 0% 100%", + "popover-foreground": "0 0% 3.9%", + "primary": "0 0% 9%", + "primary-foreground": "0 0% 98%", + "ring": "0 0% 3.9%", + "secondary": "0 0% 96.1%", + "secondary-foreground": "0 0% 9%" + } + }, + "inlineColorsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n ", + "cssVarsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 0 0% 3.9%;\n --card: 0 0% 100%;\n --card-foreground: 0 0% 3.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 0 0% 3.9%;\n --primary: 0 0% 9%;\n --primary-foreground: 0 0% 98%;\n --secondary: 0 0% 96.1%;\n --secondary-foreground: 0 0% 9%;\n --muted: 0 0% 96.1%;\n --muted-foreground: 0 0% 45.1%;\n --accent: 0 0% 96.1%;\n --accent-foreground: 0 0% 9%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 0 0% 98%;\n --border: 0 0% 89.8%;\n --input: 0 0% 89.8%;\n --ring: 0 0% 3.9%;\n --radius: 0.5rem;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n\n .dark {\n --background: 0 0% 3.9%;\n --foreground: 0 0% 98%;\n --card: 0 0% 3.9%;\n --card-foreground: 0 0% 98%;\n --popover: 0 0% 3.9%;\n --popover-foreground: 0 0% 98%;\n --primary: 0 0% 98%;\n --primary-foreground: 0 0% 9%;\n --secondary: 0 0% 14.9%;\n --secondary-foreground: 0 0% 98%;\n --muted: 0 0% 14.9%;\n --muted-foreground: 0 0% 63.9%;\n --accent: 0 0% 14.9%;\n --accent-foreground: 0 0% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 0% 98%;\n --border: 0 0% 14.9%;\n --input: 0 0% 14.9%;\n --ring: 0 0% 83.1%;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}" +} \ No newline at end of file diff --git a/apps/www/public/r/colors/slate.json b/apps/www/public/r/colors/slate.json new file mode 100644 index 0000000000..56b7d98725 --- /dev/null +++ b/apps/www/public/r/colors/slate.json @@ -0,0 +1,92 @@ +{ + "inlineColors": { + "dark": { + "accent": "slate-800", + "accent-foreground": "slate-50", + "background": "slate-950", + "border": "slate-800", + "card": "slate-950", + "card-foreground": "slate-50", + "destructive": "red-900", + "destructive-foreground": "slate-50", + "foreground": "slate-50", + "input": "slate-800", + "muted": "slate-800", + "muted-foreground": "slate-400", + "popover": "slate-950", + "popover-foreground": "slate-50", + "primary": "slate-50", + "primary-foreground": "slate-900", + "ring": "slate-300", + "secondary": "slate-800", + "secondary-foreground": "slate-50" + }, + "light": { + "accent": "slate-100", + "accent-foreground": "slate-900", + "background": "white", + "border": "slate-200", + "card": "white", + "card-foreground": "slate-950", + "destructive": "red-500", + "destructive-foreground": "slate-50", + "foreground": "slate-950", + "input": "slate-200", + "muted": "slate-100", + "muted-foreground": "slate-500", + "popover": "white", + "popover-foreground": "slate-950", + "primary": "slate-900", + "primary-foreground": "slate-50", + "ring": "slate-950", + "secondary": "slate-100", + "secondary-foreground": "slate-900" + } + }, + "cssVars": { + "dark": { + "accent": "217.2 32.6% 17.5%", + "accent-foreground": "210 40% 98%", + "background": "222.2 84% 4.9%", + "border": "217.2 32.6% 17.5%", + "card": "222.2 84% 4.9%", + "card-foreground": "210 40% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "210 40% 98%", + "foreground": "210 40% 98%", + "input": "217.2 32.6% 17.5%", + "muted": "217.2 32.6% 17.5%", + "muted-foreground": "215 20.2% 65.1%", + "popover": "222.2 84% 4.9%", + "popover-foreground": "210 40% 98%", + "primary": "210 40% 98%", + "primary-foreground": "222.2 47.4% 11.2%", + "ring": "212.7 26.8% 83.9%", + "secondary": "217.2 32.6% 17.5%", + "secondary-foreground": "210 40% 98%" + }, + "light": { + "accent": "210 40% 96.1%", + "accent-foreground": "222.2 47.4% 11.2%", + "background": "0 0% 100%", + "border": "214.3 31.8% 91.4%", + "card": "0 0% 100%", + "card-foreground": "222.2 84% 4.9%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "210 40% 98%", + "foreground": "222.2 84% 4.9%", + "input": "214.3 31.8% 91.4%", + "muted": "210 40% 96.1%", + "muted-foreground": "215.4 16.3% 46.9%", + "popover": "0 0% 100%", + "popover-foreground": "222.2 84% 4.9%", + "primary": "222.2 47.4% 11.2%", + "primary-foreground": "210 40% 98%", + "ring": "222.2 84% 4.9%", + "secondary": "210 40% 96.1%", + "secondary-foreground": "222.2 47.4% 11.2%" + } + }, + "inlineColorsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n ", + "cssVarsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --accent: 210 40% 96.1%;\n --accent-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n --radius: 0.5rem;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n\n .dark {\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --accent: 217.2 32.6% 17.5%;\n --accent-foreground: 210 40% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}" +} \ No newline at end of file diff --git a/apps/www/public/r/colors/stone.json b/apps/www/public/r/colors/stone.json new file mode 100644 index 0000000000..89cd6dff50 --- /dev/null +++ b/apps/www/public/r/colors/stone.json @@ -0,0 +1,92 @@ +{ + "inlineColors": { + "dark": { + "accent": "stone-800", + "accent-foreground": "stone-50", + "background": "stone-950", + "border": "stone-800", + "card": "stone-950", + "card-foreground": "stone-50", + "destructive": "red-900", + "destructive-foreground": "stone-50", + "foreground": "stone-50", + "input": "stone-800", + "muted": "stone-800", + "muted-foreground": "stone-400", + "popover": "stone-950", + "popover-foreground": "stone-50", + "primary": "stone-50", + "primary-foreground": "stone-900", + "ring": "stone-300", + "secondary": "stone-800", + "secondary-foreground": "stone-50" + }, + "light": { + "accent": "stone-100", + "accent-foreground": "stone-900", + "background": "white", + "border": "stone-200", + "card": "white", + "card-foreground": "stone-950", + "destructive": "red-500", + "destructive-foreground": "stone-50", + "foreground": "stone-950", + "input": "stone-200", + "muted": "stone-100", + "muted-foreground": "stone-500", + "popover": "white", + "popover-foreground": "stone-950", + "primary": "stone-900", + "primary-foreground": "stone-50", + "ring": "stone-950", + "secondary": "stone-100", + "secondary-foreground": "stone-900" + } + }, + "cssVars": { + "dark": { + "accent": "12 6.5% 15.1%", + "accent-foreground": "60 9.1% 97.8%", + "background": "20 14.3% 4.1%", + "border": "12 6.5% 15.1%", + "card": "20 14.3% 4.1%", + "card-foreground": "60 9.1% 97.8%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "60 9.1% 97.8%", + "foreground": "60 9.1% 97.8%", + "input": "12 6.5% 15.1%", + "muted": "12 6.5% 15.1%", + "muted-foreground": "24 5.4% 63.9%", + "popover": "20 14.3% 4.1%", + "popover-foreground": "60 9.1% 97.8%", + "primary": "60 9.1% 97.8%", + "primary-foreground": "24 9.8% 10%", + "ring": "24 5.7% 82.9%", + "secondary": "12 6.5% 15.1%", + "secondary-foreground": "60 9.1% 97.8%" + }, + "light": { + "accent": "60 4.8% 95.9%", + "accent-foreground": "24 9.8% 10%", + "background": "0 0% 100%", + "border": "20 5.9% 90%", + "card": "0 0% 100%", + "card-foreground": "20 14.3% 4.1%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "60 9.1% 97.8%", + "foreground": "20 14.3% 4.1%", + "input": "20 5.9% 90%", + "muted": "60 4.8% 95.9%", + "muted-foreground": "25 5.3% 44.7%", + "popover": "0 0% 100%", + "popover-foreground": "20 14.3% 4.1%", + "primary": "24 9.8% 10%", + "primary-foreground": "60 9.1% 97.8%", + "ring": "20 14.3% 4.1%", + "secondary": "60 4.8% 95.9%", + "secondary-foreground": "24 9.8% 10%" + } + }, + "inlineColorsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n ", + "cssVarsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 20 14.3% 4.1%;\n --card: 0 0% 100%;\n --card-foreground: 20 14.3% 4.1%;\n --popover: 0 0% 100%;\n --popover-foreground: 20 14.3% 4.1%;\n --primary: 24 9.8% 10%;\n --primary-foreground: 60 9.1% 97.8%;\n --secondary: 60 4.8% 95.9%;\n --secondary-foreground: 24 9.8% 10%;\n --muted: 60 4.8% 95.9%;\n --muted-foreground: 25 5.3% 44.7%;\n --accent: 60 4.8% 95.9%;\n --accent-foreground: 24 9.8% 10%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 60 9.1% 97.8%;\n --border: 20 5.9% 90%;\n --input: 20 5.9% 90%;\n --ring: 20 14.3% 4.1%;\n --radius: 0.5rem;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n\n .dark {\n --background: 20 14.3% 4.1%;\n --foreground: 60 9.1% 97.8%;\n --card: 20 14.3% 4.1%;\n --card-foreground: 60 9.1% 97.8%;\n --popover: 20 14.3% 4.1%;\n --popover-foreground: 60 9.1% 97.8%;\n --primary: 60 9.1% 97.8%;\n --primary-foreground: 24 9.8% 10%;\n --secondary: 12 6.5% 15.1%;\n --secondary-foreground: 60 9.1% 97.8%;\n --muted: 12 6.5% 15.1%;\n --muted-foreground: 24 5.4% 63.9%;\n --accent: 12 6.5% 15.1%;\n --accent-foreground: 60 9.1% 97.8%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 60 9.1% 97.8%;\n --border: 12 6.5% 15.1%;\n --input: 12 6.5% 15.1%;\n --ring: 24 5.7% 82.9%;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}" +} \ No newline at end of file diff --git a/apps/www/public/r/colors/zinc.json b/apps/www/public/r/colors/zinc.json new file mode 100644 index 0000000000..940841648e --- /dev/null +++ b/apps/www/public/r/colors/zinc.json @@ -0,0 +1,92 @@ +{ + "inlineColors": { + "dark": { + "accent": "zinc-800", + "accent-foreground": "zinc-50", + "background": "zinc-950", + "border": "zinc-800", + "card": "zinc-950", + "card-foreground": "zinc-50", + "destructive": "red-900", + "destructive-foreground": "zinc-50", + "foreground": "zinc-50", + "input": "zinc-800", + "muted": "zinc-800", + "muted-foreground": "zinc-400", + "popover": "zinc-950", + "popover-foreground": "zinc-50", + "primary": "zinc-50", + "primary-foreground": "zinc-900", + "ring": "zinc-300", + "secondary": "zinc-800", + "secondary-foreground": "zinc-50" + }, + "light": { + "accent": "zinc-100", + "accent-foreground": "zinc-900", + "background": "white", + "border": "zinc-200", + "card": "white", + "card-foreground": "zinc-950", + "destructive": "red-500", + "destructive-foreground": "zinc-50", + "foreground": "zinc-950", + "input": "zinc-200", + "muted": "zinc-100", + "muted-foreground": "zinc-500", + "popover": "white", + "popover-foreground": "zinc-950", + "primary": "zinc-900", + "primary-foreground": "zinc-50", + "ring": "zinc-950", + "secondary": "zinc-100", + "secondary-foreground": "zinc-900" + } + }, + "cssVars": { + "dark": { + "accent": "240 3.7% 15.9%", + "accent-foreground": "0 0% 98%", + "background": "240 10% 3.9%", + "border": "240 3.7% 15.9%", + "card": "240 10% 3.9%", + "card-foreground": "0 0% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 98%", + "input": "240 3.7% 15.9%", + "muted": "240 3.7% 15.9%", + "muted-foreground": "240 5% 64.9%", + "popover": "240 10% 3.9%", + "popover-foreground": "0 0% 98%", + "primary": "0 0% 98%", + "primary-foreground": "240 5.9% 10%", + "ring": "240 4.9% 83.9%", + "secondary": "240 3.7% 15.9%", + "secondary-foreground": "0 0% 98%" + }, + "light": { + "accent": "240 4.8% 95.9%", + "accent-foreground": "240 5.9% 10%", + "background": "0 0% 100%", + "border": "240 5.9% 90%", + "card": "0 0% 100%", + "card-foreground": "240 10% 3.9%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "0 0% 98%", + "foreground": "240 10% 3.9%", + "input": "240 5.9% 90%", + "muted": "240 4.8% 95.9%", + "muted-foreground": "240 3.8% 46.1%", + "popover": "0 0% 100%", + "popover-foreground": "240 10% 3.9%", + "primary": "240 5.9% 10%", + "primary-foreground": "0 0% 98%", + "ring": "240 10% 3.9%", + "secondary": "240 4.8% 95.9%", + "secondary-foreground": "240 5.9% 10%" + } + }, + "inlineColorsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n ", + "cssVarsTemplate": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 240 10% 3.9%;\n --card: 0 0% 100%;\n --card-foreground: 240 10% 3.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 240 10% 3.9%;\n --primary: 240 5.9% 10%;\n --primary-foreground: 0 0% 98%;\n --secondary: 240 4.8% 95.9%;\n --secondary-foreground: 240 5.9% 10%;\n --muted: 240 4.8% 95.9%;\n --muted-foreground: 240 3.8% 46.1%;\n --accent: 240 4.8% 95.9%;\n --accent-foreground: 240 5.9% 10%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 0 0% 98%;\n --border: 240 5.9% 90%;\n --input: 240 5.9% 90%;\n --ring: 240 10% 3.9%;\n --radius: 0.5rem;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n\n .dark {\n --background: 240 10% 3.9%;\n --foreground: 0 0% 98%;\n --card: 240 10% 3.9%;\n --card-foreground: 0 0% 98%;\n --popover: 240 10% 3.9%;\n --popover-foreground: 0 0% 98%;\n --primary: 0 0% 98%;\n --primary-foreground: 240 5.9% 10%;\n --secondary: 240 3.7% 15.9%;\n --secondary-foreground: 0 0% 98%;\n --muted: 240 3.7% 15.9%;\n --muted-foreground: 240 5% 64.9%;\n --accent: 240 3.7% 15.9%;\n --accent-foreground: 0 0% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 0% 98%;\n --border: 240 3.7% 15.9%;\n --input: 240 3.7% 15.9%;\n --ring: 240 4.9% 83.9%;\n --chart-1: ;\n --chart-2: ;\n --chart-3: ;\n --chart-4: ;\n --chart-5: ;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}" +} \ No newline at end of file diff --git a/apps/www/public/r/index.json b/apps/www/public/r/index.json new file mode 100644 index 0000000000..05a1d3220d --- /dev/null +++ b/apps/www/public/r/index.json @@ -0,0 +1,1242 @@ +[ + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/editor.tsx", + "type": "registry:ui" + } + ], + "name": "editor", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-cloud" + ], + "files": [ + { + "path": "plate-ui/cloud.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/cloud-attachment-element.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/cloud-image-element.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/cloud-resize-controls.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/cloud-status-bar.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/cloud-toolbar-buttons.tsx", + "type": "registry:ui" + } + ], + "name": "cloud", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-code-block" + ], + "files": [ + { + "path": "plate-ui/code-block-element.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/code-block-element.css", + "type": "registry:ui" + }, + { + "path": "plate-ui/code-block-combobox.tsx", + "type": "registry:ui" + } + ], + "name": "code-block-element", + "registryDependencies": [ + "command" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-layout" + ], + "files": [ + { + "path": "plate-ui/column-element.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/column-group-element.tsx", + "type": "registry:ui" + } + ], + "name": "column-element", + "registryDependencies": [ + "command", + "resizable" + ], + "type": "registry:ui" + }, + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/color-dropdown-menu.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/color-constants.ts", + "type": "registry:ui" + }, + { + "path": "plate-ui/color-dropdown-menu-items.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/color-input.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/color-picker.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/colors-custom.tsx", + "type": "registry:ui" + } + ], + "name": "color-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar", + "separator", + "button", + "tooltip" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-comments" + ], + "files": [ + { + "path": "plate-ui/comments-popover.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-avatar.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-create-form.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-item.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-more-dropdown.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-reply-items.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-resolve-button.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/comment-value.tsx", + "type": "registry:ui" + } + ], + "name": "comments-popover", + "registryDependencies": [ + "popover", + "avatar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-dnd", + "react-dnd", + "react-dnd-html5-backend" + ], + "files": [ + { + "path": "plate-ui/draggable.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/with-draggables.tsx", + "type": "registry:ui" + } + ], + "name": "draggable", + "registryDependencies": [ + "tooltip" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-popover" + ], + "files": [ + { + "path": "plate-ui/emoji-dropdown-menu.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-toolbar-dropdown.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-icons.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-picker.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-picker-content.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-picker-navigation.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-picker-preview.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-picker-search-and-clear.tsx", + "type": "registry:ui" + }, + { + "path": "plate-ui/emoji-picker-search-bar.tsx", + "type": "registry:ui" + } + ], + "name": "emoji-dropdown-menu", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-emoji" + ], + "files": [ + { + "path": "plate-ui/emoji-input-element.tsx", + "type": "registry:ui" + } + ], + "name": "emoji-input-element", + "registryDependencies": [ + "inline-combobox" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-alignment" + ], + "files": [ + { + "path": "plate-ui/align-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "align-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-avatar" + ], + "files": [ + { + "path": "plate-ui/avatar.tsx", + "type": "registry:ui" + } + ], + "name": "avatar", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-block-quote" + ], + "files": [ + { + "path": "plate-ui/blockquote-element.tsx", + "type": "registry:ui" + } + ], + "name": "blockquote-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-date" + ], + "files": [ + { + "path": "plate-ui/date-element.tsx", + "type": "registry:ui" + } + ], + "name": "date-element", + "registryDependencies": [ + "calendar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "react-day-picker@8.10.1", + "date-fns" + ], + "files": [ + { + "path": "plate-ui/calendar.tsx", + "type": "registry:ui" + } + ], + "name": "calendar", + "registryDependencies": [ + "button" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-slot" + ], + "files": [ + { + "path": "plate-ui/button.tsx", + "type": "registry:ui" + } + ], + "name": "button", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-caption" + ], + "files": [ + { + "path": "plate-ui/caption.tsx", + "type": "registry:ui" + } + ], + "name": "caption", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-checkbox" + ], + "files": [ + { + "path": "plate-ui/checkbox.tsx", + "type": "registry:ui" + } + ], + "name": "checkbox", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "path": "plate-ui/code-leaf.tsx", + "type": "registry:ui" + } + ], + "name": "code-leaf", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-code-block" + ], + "files": [ + { + "path": "plate-ui/code-line-element.tsx", + "type": "registry:ui" + } + ], + "name": "code-line-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-code-block" + ], + "files": [ + { + "path": "plate-ui/code-syntax-leaf.tsx", + "type": "registry:ui" + } + ], + "name": "code-syntax-leaf", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "cmdk" + ], + "files": [ + { + "path": "plate-ui/command.tsx", + "type": "registry:ui" + } + ], + "name": "command", + "registryDependencies": [ + "dialog" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-comments" + ], + "files": [ + { + "path": "plate-ui/comment-leaf.tsx", + "type": "registry:ui" + } + ], + "name": "comment-leaf", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/comment-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "comment-toolbar-button", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/cursor-overlay.tsx", + "type": "registry:ui" + } + ], + "name": "cursor-overlay", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-dialog" + ], + "files": [ + { + "path": "plate-ui/dialog.tsx", + "type": "registry:ui" + } + ], + "name": "dialog", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-dropdown-menu" + ], + "files": [ + { + "path": "plate-ui/dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "dropdown-menu", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-excalidraw" + ], + "files": [ + { + "path": "plate-ui/excalidraw-element.tsx", + "type": "registry:ui" + } + ], + "name": "excalidraw-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/fixed-toolbar.tsx", + "type": "registry:ui" + } + ], + "name": "fixed-toolbar", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "path": "plate-ui/fixed-toolbar-buttons.tsx", + "type": "registry:ui" + } + ], + "name": "fixed-toolbar-buttons", + "registryDependencies": [ + "toolbar", + "insert-dropdown-menu", + "mark-toolbar-button", + "mode-dropdown-menu", + "turn-into-dropdown-menu" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-floating" + ], + "files": [ + { + "path": "plate-ui/floating-toolbar.tsx", + "type": "registry:ui" + } + ], + "name": "floating-toolbar", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "path": "plate-ui/floating-toolbar-buttons.tsx", + "type": "registry:ui" + } + ], + "name": "floating-toolbar-buttons", + "registryDependencies": [ + "mark-toolbar-button", + "more-dropdown-menu", + "turn-into-dropdown-menu" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-heading" + ], + "files": [ + { + "path": "plate-ui/heading-element.tsx", + "type": "registry:ui" + } + ], + "name": "heading-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-highlight" + ], + "files": [ + { + "path": "plate-ui/highlight-leaf.tsx", + "type": "registry:ui" + } + ], + "name": "highlight-leaf", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-horizontal-rule" + ], + "files": [ + { + "path": "plate-ui/hr-element.tsx", + "type": "registry:ui" + } + ], + "name": "hr-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-media" + ], + "files": [ + { + "path": "plate-ui/image-element.tsx", + "type": "registry:ui" + } + ], + "name": "image-element", + "registryDependencies": [ + "media-popover", + "caption", + "resizable" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-indent-list" + ], + "files": [ + { + "path": "plate-ui/indent-list-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "indent-list-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-indent" + ], + "files": [ + { + "path": "plate-ui/indent-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "indent-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@ariakit/react", + "@udecode/plate-combobox" + ], + "files": [ + { + "path": "plate-ui/inline-combobox.tsx", + "type": "registry:ui" + } + ], + "name": "inline-combobox", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/input.tsx", + "type": "registry:ui" + } + ], + "name": "input", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-block-quote", + "@udecode/plate-heading" + ], + "files": [ + { + "path": "plate-ui/insert-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "insert-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-kbd" + ], + "files": [ + { + "path": "plate-ui/kbd-leaf.tsx", + "type": "registry:ui" + } + ], + "name": "kbd-leaf", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-line-height" + ], + "files": [ + { + "path": "plate-ui/line-height-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "line-height-dropdown-menu", + "registryDependencies": [ + "toolbar", + "dropdown-menu" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-link" + ], + "files": [ + { + "path": "plate-ui/link-element.tsx", + "type": "registry:ui" + } + ], + "name": "link-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-link" + ], + "files": [ + { + "path": "plate-ui/link-floating-toolbar.tsx", + "type": "registry:ui" + } + ], + "name": "link-floating-toolbar", + "registryDependencies": [ + "button", + "input", + "popover", + "separator" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-link" + ], + "files": [ + { + "path": "plate-ui/link-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "link-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-list" + ], + "files": [ + { + "path": "plate-ui/list-element.tsx", + "type": "registry:ui" + } + ], + "name": "list-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-list" + ], + "files": [ + { + "path": "plate-ui/list-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "list-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "path": "plate-ui/mark-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "mark-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-media", + "react-tweet", + "react-lite-youtube-embed" + ], + "files": [ + { + "path": "plate-ui/media-embed-element.tsx", + "type": "registry:ui" + } + ], + "name": "media-embed-element", + "registryDependencies": [ + "media-popover", + "caption", + "resizable" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-media" + ], + "files": [ + { + "path": "plate-ui/media-popover.tsx", + "type": "registry:ui" + } + ], + "name": "media-popover", + "registryDependencies": [ + "button", + "input", + "popover", + "separator" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-media" + ], + "files": [ + { + "path": "plate-ui/media-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "media-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-mention" + ], + "files": [ + { + "path": "plate-ui/mention-element.tsx", + "type": "registry:ui" + } + ], + "name": "mention-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-mention" + ], + "files": [ + { + "path": "plate-ui/mention-input-element.tsx", + "type": "registry:ui" + } + ], + "name": "mention-input-element", + "registryDependencies": [ + "inline-combobox" + ], + "type": "registry:ui" + }, + { + "dependencies": [], + "files": [ + { + "path": "plate-ui/mode-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "mode-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "path": "plate-ui/more-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "more-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-indent" + ], + "files": [ + { + "path": "plate-ui/outdent-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "outdent-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "files": [ + { + "path": "plate-ui/paragraph-element.tsx", + "type": "registry:ui" + } + ], + "name": "paragraph-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-heading" + ], + "files": [ + { + "path": "plate-ui/placeholder.tsx", + "type": "registry:ui" + } + ], + "name": "placeholder", + "registryDependencies": [ + "paragraph-element" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-popover" + ], + "files": [ + { + "path": "plate-ui/popover.tsx", + "type": "registry:ui" + } + ], + "name": "popover", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-find-replace" + ], + "files": [ + { + "path": "plate-ui/search-highlight-leaf.tsx", + "type": "registry:ui" + } + ], + "name": "search-highlight-leaf", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-separator" + ], + "files": [ + { + "path": "plate-ui/separator.tsx", + "type": "registry:ui" + } + ], + "name": "separator", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-heading", + "@udecode/plate-indent-list" + ], + "files": [ + { + "path": "plate-ui/slash-input-element.tsx", + "type": "registry:ui" + } + ], + "name": "slash-input-element", + "registryDependencies": [ + "inline-combobox" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "path": "plate-ui/table-cell-element.tsx", + "type": "registry:ui" + } + ], + "name": "table-cell-element", + "registryDependencies": [ + "resizable" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "path": "plate-ui/table-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "table-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "path": "plate-ui/table-element.tsx", + "type": "registry:ui" + } + ], + "name": "table-element", + "registryDependencies": [ + "dropdown-menu" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "path": "plate-ui/table-row-element.tsx", + "type": "registry:ui" + } + ], + "name": "table-row-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-list" + ], + "files": [ + { + "path": "plate-ui/todo-list-element.tsx", + "type": "registry:ui" + } + ], + "name": "todo-list-element", + "registryDependencies": [ + "checkbox" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-toggle" + ], + "files": [ + { + "path": "plate-ui/toggle-element.tsx", + "type": "registry:ui" + } + ], + "name": "toggle-element", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-toggle" + ], + "files": [ + { + "path": "plate-ui/toggle-toolbar-button.tsx", + "type": "registry:ui" + } + ], + "name": "toggle-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-toolbar" + ], + "files": [ + { + "path": "plate-ui/toolbar.tsx", + "type": "registry:ui" + } + ], + "name": "toolbar", + "registryDependencies": [ + "tooltip", + "separator" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@radix-ui/react-tooltip" + ], + "files": [ + { + "path": "plate-ui/tooltip.tsx", + "type": "registry:ui" + } + ], + "name": "tooltip", + "registryDependencies": [], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-block-quote", + "@udecode/plate-heading" + ], + "files": [ + { + "path": "plate-ui/turn-into-dropdown-menu.tsx", + "type": "registry:ui" + } + ], + "name": "turn-into-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" + }, + { + "dependencies": [ + "@udecode/plate-resizable" + ], + "files": [ + { + "path": "plate-ui/resizable.tsx", + "type": "registry:ui" + } + ], + "name": "resizable", + "registryDependencies": [], + "type": "registry:ui" + } +] \ No newline at end of file diff --git a/apps/www/public/r/styles/default/align-dropdown-menu.json b/apps/www/public/r/styles/default/align-dropdown-menu.json new file mode 100644 index 0000000000..c7021beead --- /dev/null +++ b/apps/www/public/r/styles/default/align-dropdown-menu.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "@udecode/plate-alignment" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport {\n useAlignDropdownMenu,\n useAlignDropdownMenuState,\n} from '@udecode/plate-alignment/react';\n\nimport { Icons, iconVariants } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nconst items = [\n {\n icon: Icons.alignLeft,\n value: 'left',\n },\n {\n icon: Icons.alignCenter,\n value: 'center',\n },\n {\n icon: Icons.alignRight,\n value: 'right',\n },\n {\n icon: Icons.alignJustify,\n value: 'justify',\n },\n];\n\nexport function AlignDropdownMenu({ children, ...props }: DropdownMenuProps) {\n const state = useAlignDropdownMenuState();\n const { radioGroupProps } = useAlignDropdownMenu(state);\n\n const openState = useOpenState();\n const IconValue =\n items.find((item) => item.value === radioGroupProps.value)?.icon ??\n Icons.alignLeft;\n\n return (\n \n \n \n \n \n \n\n \n \n {items.map(({ icon: Icon, value: itemValue }) => (\n \n \n \n ))}\n \n \n \n );\n}\n", + "path": "plate-ui/align-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "align-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/avatar.json b/apps/www/public/r/styles/default/avatar.json new file mode 100644 index 0000000000..70bcfc351e --- /dev/null +++ b/apps/www/public/r/styles/default/avatar.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-avatar" + ], + "files": [ + { + "content": "'use client';\n\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { withCn } from '@udecode/cn';\n\nexport const Avatar = withCn(\n AvatarPrimitive.Root,\n 'relative flex size-10 shrink-0 overflow-hidden rounded-full'\n);\n\nexport const AvatarImage = withCn(\n AvatarPrimitive.Image,\n 'aspect-square size-full'\n);\n\nexport const AvatarFallback = withCn(\n AvatarPrimitive.Fallback,\n 'flex size-full items-center justify-center rounded-full bg-muted'\n);\n", + "path": "plate-ui/avatar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "avatar", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/blockquote-element.json b/apps/www/public/r/styles/default/blockquote-element.json new file mode 100644 index 0000000000..5b55d29b44 --- /dev/null +++ b/apps/www/public/r/styles/default/blockquote-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-block-quote" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\n\nexport const BlockquoteElement = withRef(\n ({ children, className, ...props }, ref) => {\n return (\n \n
{children}
\n \n );\n }\n);\n", + "path": "plate-ui/blockquote-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "blockquote-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/button.json b/apps/www/public/r/styles/default/button.json new file mode 100644 index 0000000000..7beeda0cdc --- /dev/null +++ b/apps/www/public/r/styles/default/button.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-slot" + ], + "files": [ + { + "content": "import * as React from 'react';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn, withRef } from '@udecode/cn';\nimport { type VariantProps, cva } from 'class-variance-authority';\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n defaultVariants: {\n size: 'default',\n variant: 'default',\n },\n variants: {\n isMenu: {\n true: 'h-auto w-full cursor-pointer justify-start',\n },\n size: {\n default: 'h-10 px-4 py-2',\n icon: 'size-10',\n lg: 'h-11 rounded-md px-8',\n none: '',\n sm: 'h-9 rounded-md px-3',\n sms: 'size-9 rounded-md px-0',\n xs: 'h-8 rounded-md px-3',\n },\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n inlineLink: 'text-base text-primary underline underline-offset-4',\n link: 'text-primary underline-offset-4 hover:underline',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n },\n },\n }\n);\n\nexport const Button = withRef<\n 'button',\n {\n asChild?: boolean;\n } & VariantProps\n>(({ asChild = false, className, isMenu, size, variant, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n \n );\n});\n", + "path": "plate-ui/button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "button", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/calendar.json b/apps/www/public/r/styles/default/calendar.json new file mode 100644 index 0000000000..1b6e34ceec --- /dev/null +++ b/apps/www/public/r/styles/default/calendar.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "react-day-picker@8.10.1", + "date-fns" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\nimport { DayPicker } from 'react-day-picker';\n\nimport { cn } from '@udecode/cn';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { buttonVariants } from './button';\n\nexport type CalendarProps = React.ComponentProps;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n ,\n IconRight: () => ,\n }}\n showOutsideDays={showOutsideDays}\n {...props}\n />\n );\n}\n\nCalendar.displayName = 'Calendar';\n\nexport { Calendar };\n", + "path": "plate-ui/calendar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "calendar", + "registryDependencies": [ + "button" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/caption.json b/apps/www/public/r/styles/default/caption.json new file mode 100644 index 0000000000..0b54b6daeb --- /dev/null +++ b/apps/www/public/r/styles/default/caption.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-caption" + ], + "files": [ + { + "content": "import {\n cn,\n createPrimitiveComponent,\n withCn,\n withVariants,\n} from '@udecode/cn';\nimport {\n Caption as CaptionPrimitive,\n CaptionTextarea as CaptionTextareaPrimitive,\n useCaptionButton,\n useCaptionButtonState,\n} from '@udecode/plate-caption/react';\nimport { cva } from 'class-variance-authority';\n\nimport { Button } from './button';\n\nconst captionVariants = cva('max-w-full', {\n defaultVariants: {\n align: 'center',\n },\n variants: {\n align: {\n center: 'mx-auto',\n left: 'mr-auto',\n right: 'ml-auto',\n },\n },\n});\n\nexport const Caption = withVariants(CaptionPrimitive, captionVariants, [\n 'align',\n]);\n\nexport const CaptionTextarea = withCn(\n CaptionTextareaPrimitive,\n cn(\n 'mt-2 w-full resize-none border-none bg-inherit p-0 font-[inherit] text-inherit',\n 'focus:outline-none focus:[&::placeholder]:opacity-0',\n 'text-center print:placeholder:text-transparent'\n )\n);\n\nexport const CaptionButton = createPrimitiveComponent(Button)({\n propsHook: useCaptionButton,\n stateHook: useCaptionButtonState,\n});\n", + "path": "plate-ui/caption.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "caption", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/checkbox.json b/apps/www/public/r/styles/default/checkbox.json new file mode 100644 index 0000000000..fa82dd5000 --- /dev/null +++ b/apps/www/public/r/styles/default/checkbox.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-checkbox" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { cn, withRef } from '@udecode/cn';\n\nimport { Icons } from '@/components/icons';\n\nexport const Checkbox = withRef(\n ({ className, ...props }, ref) => (\n \n \n \n \n \n )\n);\n", + "path": "plate-ui/checkbox.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "checkbox", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/cloud.json b/apps/www/public/r/styles/default/cloud.json new file mode 100644 index 0000000000..e0bdc07c42 --- /dev/null +++ b/apps/www/public/r/styles/default/cloud.json @@ -0,0 +1,46 @@ +{ + "dependencies": [ + "@udecode/plate-cloud" + ], + "files": [ + { + "content": "export * from './cloud-attachment-element';\n\nexport * from './cloud-image-element';\n\nexport * from './cloud-resize-controls';\n\nexport * from './cloud-status-bar';\n\nexport * from './cloud-toolbar-buttons';\n", + "path": "plate-ui/cloud.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n type TCloudAttachmentElement,\n useCloudAttachmentElementState,\n} from '@udecode/plate-cloud';\nimport {\n type PlateElementProps,\n PlateElement,\n} from '@udecode/plate-common/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { StatusBar } from './cloud-status-bar';\n\nexport interface CloudAttachmentElementProps\n extends PlateElementProps {}\n\nexport function CloudAttachmentElement({\n className,\n ...props\n}: CloudAttachmentElementProps) {\n const { children, element } = props;\n\n const { focused, selected, upload } = useCloudAttachmentElementState({\n element,\n });\n\n return (\n \n
\n \n
\n
\n
{element.filename}
\n \n
\n {element.bytes} bytes\n
\n
\n
\n \n {upload.status === 'success' && (\n \n \n \n )}\n
\n {children}\n \n );\n}\n", + "path": "plate-ui/cloud-attachment-element.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n type TCloudImageElement,\n useCloudImageElementState,\n} from '@udecode/plate-cloud';\nimport {\n type PlateElementProps,\n PlateElement,\n} from '@udecode/plate-common/react';\n\nimport { ResizeControls } from './cloud-resize-controls';\nimport { StatusBar } from './cloud-status-bar';\n\nexport interface CloudImageElementProps\n extends PlateElementProps {}\n\nexport function CloudImageElement({\n className,\n ...props\n}: CloudImageElementProps) {\n const { children, element } = props;\n\n const { focused, selected, setSize, size, src, srcSet, upload } =\n useCloudImageElementState({ element });\n\n return (\n \n on the inside is display: 'block'.\n */\n verticalAlign: 'top',\n }}\n contentEditable={false}\n >\n {src === '' ? (\n \n ) : (\n \n )}\n
\n \n
\n {selected && focused && (\n \n )}\n \n {children}\n \n );\n}\n", + "path": "plate-ui/cloud-image-element.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React, {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useRef,\n useState,\n} from 'react';\n\nimport { resizeInWidth } from '@portive/client';\nimport {\n type TCloudImageElement,\n CloudImagePlugin,\n} from '@udecode/plate-cloud';\nimport { setNodes } from '@udecode/plate-common';\nimport { findNodePath, useEditorRef } from '@udecode/plate-common/react';\n\ntype ImageSize = { height: number; width: number };\n\ntype SetImageSize = Dispatch>;\n\n/** The resize label that shows the width/height of the image */\nfunction ResizeLabel({ size }: { size: { height: number; width: number } }) {\n const isBelow = size.width < 100 || size.height < 100;\n const bottom = isBelow ? -24 : 4;\n\n return (\n \n {size.width} × {size.height}\n
\n );\n}\n\n/** The little divets on the resize handle bar. */\nconst barStyle = {\n background: 'rgba(255,255,255,0.75)',\n height: 16,\n position: 'absolute',\n top: 8,\n width: 1,\n} as const;\n\n/** The handle used to drag resize an image */\nfunction ResizeHandles({\n onMouseDown,\n}: {\n onMouseDown: React.MouseEventHandler;\n}) {\n return (\n <>\n {/* Invisible Handle */}\n \n {/* Visible Handle */}\n \n
\n
\n
\n
\n
\n \n );\n}\n\nexport function ResizeControls({\n element,\n setSize,\n size,\n}: {\n element: TCloudImageElement;\n setSize: SetImageSize;\n size: ImageSize;\n}) {\n const editor = useEditorRef();\n const [isResizing, setIsResizing] = useState(false);\n\n const { maxResizeWidth, minResizeWidth } =\n editor.getOptions(CloudImagePlugin);\n\n const currentSizeRef = useRef<{ height: number; width: number }>();\n\n const onMouseDown = useCallback(\n (mouseDownEvent: React.MouseEvent) => {\n setIsResizing(true);\n const startX = mouseDownEvent.clientX;\n const startWidth = size.width;\n const minWidth = minResizeWidth;\n const maxWidth = Math.min(element.maxWidth, maxResizeWidth);\n\n /**\n * Handle resize dragging through an event handler on mouseMove on the\n * document.\n */\n function onDocumentMouseMove(mouseMoveEvent: MouseEvent) {\n mouseMoveEvent.preventDefault();\n mouseMoveEvent.stopPropagation();\n /** Calculate the proposed width based on drag position */\n const proposedWidth = startWidth + mouseMoveEvent.clientX - startX;\n\n /** Constrain the proposed with between min, max and original width */\n const nextWidth = Math.min(maxWidth, Math.max(minWidth, proposedWidth));\n\n const currentSize = resizeInWidth(\n { height: element.maxHeight, width: element.maxWidth },\n nextWidth\n );\n\n currentSizeRef.current = currentSize;\n setSize(currentSize);\n }\n\n const originalCursor = document.body.style.cursor;\n\n /** When the user releases the mouse, remove all the event handlers */\n function onDocumentMouseUp() {\n setIsResizing(false);\n document.removeEventListener('mousemove', onDocumentMouseMove);\n document.removeEventListener('mouseup', onDocumentMouseUp);\n document.body.style.cursor = originalCursor;\n\n const at = findNodePath(editor, element);\n\n if (!currentSizeRef.current) return;\n\n setNodes(editor, currentSizeRef.current, { at });\n }\n\n /** Attach document event listeners */\n document.addEventListener('mousemove', onDocumentMouseMove);\n document.addEventListener('mouseup', onDocumentMouseUp);\n\n /**\n * While dragging, we want the cursor to be `ew-resize` (left-right arrow)\n * even if the cursor happens to not be exactly on the handle at the\n * moment due to a delay in the cursor moving to a location and the image\n * resizing to it.\n *\n * Also, image has max width/height and the cursor can fall outside of it.\n */\n document.body.style.cursor = 'ew-resize';\n },\n [size.width, minResizeWidth, element, maxResizeWidth, setSize, editor]\n );\n\n if (element.width < minResizeWidth) return null;\n\n return (\n <>\n {isResizing ? : null}\n \n \n );\n}\n", + "path": "plate-ui/cloud-resize-controls.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React, { type HTMLAttributes, useEffect, useRef, useState } from 'react';\n\nimport type { Upload, UploadProgress } from '@udecode/plate-cloud';\n\nimport { cn } from '@udecode/cn';\n\nexport function ProgressBar({\n className,\n upload,\n ...props\n}: {\n upload: UploadProgress;\n} & HTMLAttributes) {\n const [width, setWidth] = useState(null);\n const ref = useRef(null);\n\n useEffect(() => {\n if (ref.current) setWidth(ref.current.offsetWidth);\n }, []);\n\n /**\n * This formula looks a little funny because we want the `0` value of the\n * progress bar to have a width that is still the height of the progress bar.\n *\n * This is for a few reasons:\n *\n * 1. We want the zero point to start with the progress bar being a circle\n * 2. If we want rounded edges, if the width is shorter than the height, we get\n * an oval instead of a circle\n * 3. The halfway point looks visually wrong because of the circle progress bar\n * when it is technically at the halfway point.\n */\n const progressWidth =\n width == null\n ? 0\n : (upload.sentBytes / upload.totalBytes) * (width - 16) + 16;\n\n return (\n \n \n
\n );\n}\n\nexport function FailBar({\n className,\n ...props\n}: HTMLAttributes) {\n return (\n \n );\n}\n\nexport function StatusBar(props: {\n upload: Upload;\n children?: React.ReactNode;\n}) {\n const { children, upload } = props;\n\n switch (upload.status) {\n case 'progress': {\n return ;\n }\n case 'error': {\n return Upload Failed;\n }\n case 'not-found': {\n return Uploading...;\n }\n case 'success': {\n return children || null;\n }\n default: {\n throw new Error(`Should be unreachable`);\n }\n }\n}\n", + "path": "plate-ui/cloud-status-bar.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { CloudPlugin } from '@udecode/plate-cloud';\nimport { useEditorPlugin } from '@udecode/plate-common/react';\n\nconst buttonStyle: React.CSSProperties = {\n background: '#f0f0f0',\n border: 'none',\n cursor: 'pointer',\n marginRight: 4,\n padding: 8,\n};\n\nexport function CloudToolbarButtons() {\n const { api, editor } = useEditorPlugin(CloudPlugin);\n\n const getSaveValue = () => {\n console.info('editor.children', editor.children);\n console.info('editor.cloud.getSaveValue()', api.cloud.getSaveValue());\n };\n\n const finishUploads = async () => {\n await api.cloud.finishUploads();\n };\n\n return (\n <>\n \n \n \n Note: After clicking a button, output will be shown in console.\n \n \n );\n}\n", + "path": "plate-ui/cloud-toolbar-buttons.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "cloud", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/code-block-element.json b/apps/www/public/r/styles/default/code-block-element.json new file mode 100644 index 0000000000..8690146cfd --- /dev/null +++ b/apps/www/public/r/styles/default/code-block-element.json @@ -0,0 +1,30 @@ +{ + "dependencies": [ + "@udecode/plate-code-block" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { useCodeBlockElementState } from '@udecode/plate-code-block/react';\nimport { PlateElement } from '@udecode/plate-common/react';\n\nimport { CodeBlockCombobox } from './code-block-combobox';\n\nimport './code-block-element.css';\n\nexport const CodeBlockElement = withRef(\n ({ children, className, ...props }, ref) => {\n const { element } = props;\n const state = useCodeBlockElementState({ element });\n\n return (\n \n
\n          {children}\n        
\n\n {state.syntax && (\n \n \n
\n )}\n \n );\n }\n);\n", + "path": "plate-ui/code-block-element.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": ".slate-code_block code[class*='language-'],\n.slate-code_block pre[class*='language-'] {\n background: hsl(230, 1%, 98%);\n color: hsl(230, 8%, 24%);\n font-family: 'Fira Code', 'Fira Mono', Menlo, Consolas, 'DejaVu Sans Mono',\n monospace;\n direction: ltr;\n text-align: left;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n line-height: 1.5;\n -moz-tab-size: 2;\n -o-tab-size: 2;\n tab-size: 2;\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n}\n\n/* Selection */\n.slate-code_block code[class*='language-']::-moz-selection,\n.slate-code_block code[class*='language-'] *::-moz-selection,\n.slate-code_block pre[class*='language-'] *::-moz-selection {\n background: hsl(230, 1%, 90%);\n color: inherit;\n}\n\n.slate-code_block code[class*='language-']::selection,\n.slate-code_block code[class*='language-'] *::selection,\n.slate-code_block pre[class*='language-'] *::selection {\n background: hsl(230, 1%, 90%);\n color: inherit;\n}\n\n/* Code blocks */\n.slate-code_block pre[class*='language-'] {\n padding: 1em;\n margin: 0.5em 0;\n overflow: auto;\n border-radius: 0.3em;\n}\n\n/* Inline code */\n.slate-code_block :not(pre) > code[class*='language-'] {\n padding: 0.2em 0.3em;\n border-radius: 0.3em;\n white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.cdata {\n color: hsl(230, 4%, 64%);\n}\n\n.token.doctype,\n.token.punctuation,\n.token.entity {\n color: hsl(230, 8%, 24%);\n}\n\n.token.attr-name,\n.token.class-name,\n.token.boolean,\n.token.constant,\n.token.number,\n.token.atrule {\n color: hsl(35, 99%, 36%);\n}\n\n.token.keyword {\n color: hsl(301, 63%, 40%);\n}\n\n.token.property,\n.token.tag,\n.token.symbol,\n.token.deleted,\n.token.important {\n color: hsl(5, 74%, 59%);\n}\n\n.token.selector,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted,\n.token.regex,\n.token.attr-value,\n.token.attr-value > .token.punctuation {\n color: hsl(119, 34%, 47%);\n}\n\n.token.variable,\n.token.operator,\n.token.function {\n color: hsl(221, 87%, 60%);\n}\n\n.token.url {\n color: hsl(198, 99%, 37%);\n}\n\n/* HTML overrides */\n.token.attr-value > .token.punctuation.attr-equals,\n.token.special-attr > .token.attr-value > .token.value.css {\n color: hsl(230, 8%, 24%);\n}\n\n/* CSS overrides */\n.language-css .token.selector {\n color: hsl(5, 74%, 59%);\n}\n\n.language-css .token.property {\n color: hsl(230, 8%, 24%);\n}\n\n.language-css .token.function,\n.language-css .token.url > .token.function {\n color: hsl(198, 99%, 37%);\n}\n\n.language-css .token.url > .token.string.url {\n color: hsl(119, 34%, 47%);\n}\n\n.language-css .token.important,\n.language-css .token.atrule .token.rule {\n color: hsl(301, 63%, 40%);\n}\n\n/* JS overrides */\n.language-javascript .token.operator {\n color: hsl(301, 63%, 40%);\n}\n\n.language-javascript\n .token.template-string\n > .token.interpolation\n > .token.interpolation-punctuation.punctuation {\n color: hsl(344, 84%, 43%);\n}\n\n/* JSON overrides */\n.language-json .token.operator {\n color: hsl(230, 8%, 24%);\n}\n\n.language-json .token.null.keyword {\n color: hsl(35, 99%, 36%);\n}\n\n/* MD overrides */\n.language-markdown .token.url,\n.language-markdown .token.url > .token.operator,\n.language-markdown .token.url-reference.url > .token.string {\n color: hsl(230, 8%, 24%);\n}\n\n.language-markdown .token.url > .token.content {\n color: hsl(221, 87%, 60%);\n}\n\n.language-markdown .token.url > .token.url,\n.language-markdown .token.url-reference.url {\n color: hsl(198, 99%, 37%);\n}\n\n.language-markdown .token.blockquote.punctuation,\n.language-markdown .token.hr.punctuation {\n color: hsl(230, 4%, 64%);\n font-style: italic;\n}\n\n.language-markdown .token.code-snippet {\n color: hsl(119, 34%, 47%);\n}\n\n.language-markdown .token.bold .token.content {\n color: hsl(35, 99%, 36%);\n}\n\n.language-markdown .token.italic .token.content {\n color: hsl(301, 63%, 40%);\n}\n\n.language-markdown .token.strike .token.content,\n.language-markdown .token.strike .token.punctuation,\n.language-markdown .token.list.punctuation,\n.language-markdown .token.title.important > .token.punctuation {\n color: hsl(5, 74%, 59%);\n}\n\n/* General */\n.token.bold {\n font-weight: bold;\n}\n\n.token.comment,\n.token.italic {\n font-style: italic;\n}\n\n.token.entity {\n cursor: help;\n}\n\n.token.namespace {\n opacity: 0.8;\n}\n\n/* Plugin overrides */\n/* Selectors should have higher specificity than those in the plugins' default stylesheets */\n\n/* Show Invisibles plugin overrides */\n.token.token.tab:not(:empty):before,\n.token.token.cr:before,\n.token.token.lf:before,\n.token.token.space:before {\n color: hsla(230, 8%, 24%, 0.2);\n}\n\n/* Toolbar plugin overrides */\n/* Space out all buttons and move them away from the right edge of the code block */\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item {\n margin-right: 0.4em;\n}\n\n/* Styling the buttons */\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > button,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > a,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > span {\n background: hsl(230, 1%, 90%);\n color: hsl(230, 6%, 44%);\n padding: 0.1em 0.4em;\n border-radius: 0.3em;\n}\n\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover,\ndiv.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus {\n background: hsl(230, 1%, 78%); /* custom: darken(--syntax-bg, 20%) */\n color: hsl(230, 8%, 24%);\n}\n\n/* Line Highlight plugin overrides */\n/* The highlighted line itself */\n.line-highlight.line-highlight {\n background: hsla(230, 8%, 24%, 0.05);\n}\n\n/* Default line numbers in Line Highlight plugin */\n.line-highlight.line-highlight:before,\n.line-highlight.line-highlight[data-end]:after {\n background: hsl(230, 1%, 90%);\n color: hsl(230, 8%, 24%);\n padding: 0.1em 0.6em;\n border-radius: 0.3em;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); /* same as Toolbar plugin default */\n}\n\n/* Hovering over a linkable line number (in the gutter area) */\n/* Requires Line Numbers plugin as well */\npre[id].linkable-line-numbers.linkable-line-numbers\n span.line-numbers-rows\n > span:hover:before {\n background-color: hsla(230, 8%, 24%, 0.05);\n}\n\n/* Line Numbers and Command Line plugins overrides */\n/* Line separating gutter from coding area */\n.line-numbers.line-numbers .line-numbers-rows,\n.command-line .command-line-prompt {\n border-right-color: hsla(230, 8%, 24%, 0.2);\n}\n\n/* Stuff in the gutter */\n.line-numbers .line-numbers-rows > span:before,\n.command-line .command-line-prompt > span:before {\n color: hsl(230, 1%, 62%);\n}\n\n/* Match Braces plugin overrides */\n/* Note: Outline colour is inherited from the braces */\n.rainbow-braces .token.token.punctuation.brace-level-1,\n.rainbow-braces .token.token.punctuation.brace-level-5,\n.rainbow-braces .token.token.punctuation.brace-level-9 {\n color: hsl(5, 74%, 59%);\n}\n\n.rainbow-braces .token.token.punctuation.brace-level-2,\n.rainbow-braces .token.token.punctuation.brace-level-6,\n.rainbow-braces .token.token.punctuation.brace-level-10 {\n color: hsl(119, 34%, 47%);\n}\n\n.rainbow-braces .token.token.punctuation.brace-level-3,\n.rainbow-braces .token.token.punctuation.brace-level-7,\n.rainbow-braces .token.token.punctuation.brace-level-11 {\n color: hsl(221, 87%, 60%);\n}\n\n.rainbow-braces .token.token.punctuation.brace-level-4,\n.rainbow-braces .token.token.punctuation.brace-level-8,\n.rainbow-braces .token.token.punctuation.brace-level-12 {\n color: hsl(301, 63%, 40%);\n}\n\n/* Diff Highlight plugin overrides */\n/* Taken from https://github.com/atom/github/blob/master/styles/variables.less */\npre.diff-highlight > code .token.token.deleted:not(.prefix),\npre > code.diff-highlight .token.token.deleted:not(.prefix) {\n background-color: hsla(353, 100%, 66%, 0.15);\n}\n\npre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection,\npre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection,\npre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection,\npre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection {\n background-color: hsla(353, 95%, 66%, 0.25);\n}\n\npre.diff-highlight > code .token.token.deleted:not(.prefix)::selection,\npre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection,\npre > code.diff-highlight .token.token.deleted:not(.prefix)::selection,\npre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection {\n background-color: hsla(353, 95%, 66%, 0.25);\n}\n\npre.diff-highlight > code .token.token.inserted:not(.prefix),\npre > code.diff-highlight .token.token.inserted:not(.prefix) {\n background-color: hsla(137, 100%, 55%, 0.15);\n}\n\npre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection,\npre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection,\npre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection,\npre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection {\n background-color: hsla(135, 73%, 55%, 0.25);\n}\n\npre.diff-highlight > code .token.token.inserted:not(.prefix)::selection,\npre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection,\npre > code.diff-highlight .token.token.inserted:not(.prefix)::selection,\npre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection {\n background-color: hsla(135, 73%, 55%, 0.25);\n}\n\n/* Previewers plugin overrides */\n/* Based on https://github.com/atom-community/atom-ide-datatip/blob/master/styles/atom-ide-datatips.less and https://github.com/atom/atom/blob/master/packages/one-light-ui */\n/* Border around popup */\n.prism-previewer.prism-previewer:before,\n.prism-previewer-gradient.prism-previewer-gradient div {\n border-color: hsl(0, 0, 95%);\n}\n\n/* Angle and time should remain as circles and are hence not included */\n.prism-previewer-color.prism-previewer-color:before,\n.prism-previewer-gradient.prism-previewer-gradient div,\n.prism-previewer-easing.prism-previewer-easing:before {\n border-radius: 0.3em;\n}\n\n/* Triangles pointing to the code */\n.prism-previewer.prism-previewer:after {\n border-top-color: hsl(0, 0, 95%);\n}\n\n.prism-previewer-flipped.prism-previewer-flipped.after {\n border-bottom-color: hsl(0, 0, 95%);\n}\n\n/* Background colour within the popup */\n.prism-previewer-angle.prism-previewer-angle:before,\n.prism-previewer-time.prism-previewer-time:before,\n.prism-previewer-easing.prism-previewer-easing {\n background: hsl(0, 0%, 100%);\n}\n\n/* For angle, this is the positive area (eg. 90deg will display one quadrant in this colour) */\n/* For time, this is the alternate colour */\n.prism-previewer-angle.prism-previewer-angle circle,\n.prism-previewer-time.prism-previewer-time circle {\n stroke: hsl(230, 8%, 24%);\n stroke-opacity: 1;\n}\n\n/* Stroke colours of the handle, direction point, and vector itself */\n.prism-previewer-easing.prism-previewer-easing circle,\n.prism-previewer-easing.prism-previewer-easing path,\n.prism-previewer-easing.prism-previewer-easing line {\n stroke: hsl(230, 8%, 24%);\n}\n\n/* Fill colour of the handle */\n.prism-previewer-easing.prism-previewer-easing circle {\n fill: transparent;\n}\n", + "path": "plate-ui/code-block-element.css", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\n/* eslint-disable unicorn/prefer-export-from */\n\nimport React, { useState } from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n useCodeBlockCombobox,\n useCodeBlockComboboxState,\n} from '@udecode/plate-code-block/react';\n// Prism must be imported before all language files\nimport Prism from 'prismjs';\n\nimport { Icons } from '@/components/icons';\n\nimport { Button } from './button';\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from './command';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\n\nimport 'prismjs/components/prism-antlr4.js';\nimport 'prismjs/components/prism-bash.js';\nimport 'prismjs/components/prism-c.js';\nimport 'prismjs/components/prism-cmake.js';\nimport 'prismjs/components/prism-coffeescript.js';\nimport 'prismjs/components/prism-cpp.js';\nimport 'prismjs/components/prism-csharp.js';\nimport 'prismjs/components/prism-css.js';\nimport 'prismjs/components/prism-dart.js';\n// import 'prismjs/components/prism-django.js';\nimport 'prismjs/components/prism-docker.js';\n// import 'prismjs/components/prism-ejs.js';\nimport 'prismjs/components/prism-erlang.js';\nimport 'prismjs/components/prism-git.js';\nimport 'prismjs/components/prism-go.js';\nimport 'prismjs/components/prism-graphql.js';\nimport 'prismjs/components/prism-groovy.js';\nimport 'prismjs/components/prism-java.js';\nimport 'prismjs/components/prism-javascript.js';\nimport 'prismjs/components/prism-json.js';\nimport 'prismjs/components/prism-jsx.js';\nimport 'prismjs/components/prism-kotlin.js';\nimport 'prismjs/components/prism-latex.js';\nimport 'prismjs/components/prism-less.js';\nimport 'prismjs/components/prism-lua.js';\nimport 'prismjs/components/prism-makefile.js';\nimport 'prismjs/components/prism-markdown.js';\nimport 'prismjs/components/prism-matlab.js';\nimport 'prismjs/components/prism-mermaid.js';\nimport 'prismjs/components/prism-objectivec.js';\nimport 'prismjs/components/prism-perl.js';\n// import 'prismjs/components/prism-php.js';\nimport 'prismjs/components/prism-powershell.js';\nimport 'prismjs/components/prism-properties.js';\nimport 'prismjs/components/prism-protobuf.js';\nimport 'prismjs/components/prism-python.js';\nimport 'prismjs/components/prism-r.js';\nimport 'prismjs/components/prism-ruby.js';\nimport 'prismjs/components/prism-sass.js';\nimport 'prismjs/components/prism-scala.js';\nimport 'prismjs/components/prism-scheme.js';\nimport 'prismjs/components/prism-scss.js';\nimport 'prismjs/components/prism-sql.js';\nimport 'prismjs/components/prism-swift.js';\nimport 'prismjs/components/prism-tsx.js';\nimport 'prismjs/components/prism-typescript.js';\nimport 'prismjs/components/prism-wasm.js';\nimport 'prismjs/components/prism-yaml.js';\n\nexport { Prism };\n\nconst languages: { label: string; value: string }[] = [\n { label: 'Plain Text', value: 'text' },\n { label: 'Bash', value: 'bash' },\n { label: 'CSS', value: 'css' },\n { label: 'Git', value: 'git' },\n { label: 'GraphQL', value: 'graphql' },\n { label: 'HTML', value: 'html' },\n { label: 'JavaScript', value: 'javascript' },\n { label: 'JSON', value: 'json' },\n { label: 'JSX', value: 'jsx' },\n { label: 'Markdown', value: 'markdown' },\n { label: 'SQL', value: 'sql' },\n { label: 'SVG', value: 'svg' },\n { label: 'TSX', value: 'tsx' },\n { label: 'TypeScript', value: 'typescript' },\n { label: 'WebAssembly', value: 'wasm' },\n { label: 'ANTLR4', value: 'antlr4' },\n { label: 'C', value: 'c' },\n { label: 'CMake', value: 'cmake' },\n { label: 'CoffeeScript', value: 'coffeescript' },\n { label: 'C#', value: 'csharp' },\n { label: 'Dart', value: 'dart' },\n { label: 'Django', value: 'django' },\n { label: 'Docker', value: 'docker' },\n { label: 'EJS', value: 'ejs' },\n { label: 'Erlang', value: 'erlang' },\n { label: 'Go', value: 'go' },\n { label: 'Groovy', value: 'groovy' },\n { label: 'Java', value: 'java' },\n { label: 'Kotlin', value: 'kotlin' },\n { label: 'LaTeX', value: 'latex' },\n { label: 'Less', value: 'less' },\n { label: 'Lua', value: 'lua' },\n { label: 'Makefile', value: 'makefile' },\n { label: 'Markup', value: 'markup' },\n { label: 'MATLAB', value: 'matlab' },\n { label: 'Mermaid', value: 'mermaid' },\n { label: 'Objective-C', value: 'objectivec' },\n { label: 'Perl', value: 'perl' },\n { label: 'PHP', value: 'php' },\n { label: 'PowerShell', value: 'powershell' },\n { label: '.properties', value: 'properties' },\n { label: 'Protocol Buffers', value: 'protobuf' },\n { label: 'Python', value: 'python' },\n { label: 'R', value: 'r' },\n { label: 'Ruby', value: 'ruby' },\n { label: 'Sass (Sass)', value: 'sass' },\n // FIXME: Error with current scala grammar\n { label: 'Scala', value: 'scala' },\n { label: 'Scheme', value: 'scheme' },\n { label: 'Sass (Scss)', value: 'scss' },\n { label: 'Shell', value: 'shell' },\n { label: 'Swift', value: 'swift' },\n { label: 'XML', value: 'xml' },\n { label: 'YAML', value: 'yaml' },\n];\n\nexport function CodeBlockCombobox() {\n const state = useCodeBlockComboboxState();\n const { commandItemProps } = useCodeBlockCombobox(state);\n\n const [open, setOpen] = useState(false);\n const [value, setValue] = useState('');\n\n if (state.readOnly) return null;\n\n const items = languages.filter(\n (language) =>\n !value ||\n language.label.toLowerCase().includes(value.toLowerCase()) ||\n language.value.toLowerCase().includes(value.toLowerCase())\n );\n\n return (\n \n \n \n {state.value\n ? languages.find((language) => language.value === state.value)\n ?.label\n : 'Plain Text'}\n \n \n \n \n \n setValue(value)}\n placeholder=\"Search language...\"\n />\n No language found.\n\n \n {items.map((language) => (\n {\n commandItemProps.onSelect(_value);\n setOpen(false);\n }}\n >\n \n {language.label}\n \n ))}\n \n \n \n \n );\n}\n", + "path": "plate-ui/code-block-combobox.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "code-block-element", + "registryDependencies": [ + "command" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/code-leaf.json b/apps/www/public/r/styles/default/code-leaf.json new file mode 100644 index 0000000000..8bad418f95 --- /dev/null +++ b/apps/www/public/r/styles/default/code-leaf.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateLeaf } from '@udecode/plate-common/react';\n\nexport const CodeLeaf = withRef(\n ({ children, className, ...props }, ref) => {\n return (\n \n {children}\n \n );\n }\n);\n", + "path": "plate-ui/code-leaf.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "code-leaf", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/code-line-element.json b/apps/www/public/r/styles/default/code-line-element.json new file mode 100644 index 0000000000..eed0120cb4 --- /dev/null +++ b/apps/www/public/r/styles/default/code-line-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-code-block" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\n\nexport const CodeLineElement = withRef((props, ref) => (\n \n));\n", + "path": "plate-ui/code-line-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "code-line-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/code-syntax-leaf.json b/apps/www/public/r/styles/default/code-syntax-leaf.json new file mode 100644 index 0000000000..aee34edf07 --- /dev/null +++ b/apps/www/public/r/styles/default/code-syntax-leaf.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-code-block" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { useCodeSyntaxLeaf } from '@udecode/plate-code-block/react';\nimport { PlateLeaf } from '@udecode/plate-common/react';\n\nexport const CodeSyntaxLeaf = withRef(\n ({ children, ...props }, ref) => {\n const { leaf } = props;\n\n const { tokenProps } = useCodeSyntaxLeaf({ leaf });\n\n return (\n \n {children}\n \n );\n }\n);\n", + "path": "plate-ui/code-syntax-leaf.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "code-syntax-leaf", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/color-dropdown-menu.json b/apps/www/public/r/styles/default/color-dropdown-menu.json new file mode 100644 index 0000000000..efc5a7ad01 --- /dev/null +++ b/apps/www/public/r/styles/default/color-dropdown-menu.json @@ -0,0 +1,50 @@ +{ + "dependencies": [], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport {\n useColorDropdownMenu,\n useColorDropdownMenuState,\n} from '@udecode/plate-font/react';\n\nimport { DEFAULT_COLORS, DEFAULT_CUSTOM_COLORS } from './color-constants';\nimport { ColorPicker } from './color-picker';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nexport type TColor = {\n isBrightColor: boolean;\n name: string;\n value: string;\n};\n\ntype ColorDropdownMenuProps = {\n nodeType: string;\n tooltip?: string;\n} & DropdownMenuProps;\n\nexport function ColorDropdownMenu({\n children,\n nodeType,\n tooltip,\n}: ColorDropdownMenuProps) {\n const state = useColorDropdownMenuState({\n closeOnSelect: true,\n colors: DEFAULT_COLORS,\n customColors: DEFAULT_CUSTOM_COLORS,\n nodeType,\n });\n\n const { buttonProps, menuProps } = useColorDropdownMenu(state);\n\n return (\n \n \n \n {children}\n \n \n\n \n \n \n \n );\n}\n", + "path": "plate-ui/color-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "export const DEFAULT_COLORS = [\n {\n isBrightColor: false,\n name: 'black',\n value: '#000000',\n },\n {\n isBrightColor: false,\n name: 'dark grey 4',\n value: '#434343',\n },\n {\n isBrightColor: false,\n name: 'dark grey 3',\n value: '#666666',\n },\n {\n isBrightColor: false,\n name: 'dark grey 2',\n value: '#999999',\n },\n {\n isBrightColor: false,\n name: 'dark grey 1',\n value: '#B7B7B7',\n },\n {\n isBrightColor: false,\n name: 'grey',\n value: '#CCCCCC',\n },\n {\n isBrightColor: false,\n name: 'light grey 1',\n value: '#D9D9D9',\n },\n {\n isBrightColor: true,\n name: 'light grey 2',\n value: '#EFEFEF',\n },\n {\n isBrightColor: true,\n name: 'light grey 3',\n value: '#F3F3F3',\n },\n {\n isBrightColor: true,\n name: 'white',\n value: '#FFFFFF',\n },\n {\n isBrightColor: false,\n name: 'red berry',\n value: '#980100',\n },\n {\n isBrightColor: false,\n name: 'red',\n value: '#FE0000',\n },\n {\n isBrightColor: false,\n name: 'orange',\n value: '#FE9900',\n },\n {\n isBrightColor: true,\n name: 'yellow',\n value: '#FEFF00',\n },\n {\n isBrightColor: false,\n name: 'green',\n value: '#00FF00',\n },\n {\n isBrightColor: false,\n name: 'cyan',\n value: '#00FFFF',\n },\n {\n isBrightColor: false,\n name: 'cornflower blue',\n value: '#4B85E8',\n },\n {\n isBrightColor: false,\n name: 'blue',\n value: '#1300FF',\n },\n {\n isBrightColor: false,\n name: 'purple',\n value: '#9900FF',\n },\n {\n isBrightColor: false,\n name: 'magenta',\n value: '#FF00FF',\n },\n\n {\n isBrightColor: false,\n name: 'light red berry 3',\n value: '#E6B8AF',\n },\n {\n isBrightColor: false,\n name: 'light red 3',\n value: '#F4CCCC',\n },\n {\n isBrightColor: true,\n name: 'light orange 3',\n value: '#FCE4CD',\n },\n {\n isBrightColor: true,\n name: 'light yellow 3',\n value: '#FFF2CC',\n },\n {\n isBrightColor: true,\n name: 'light green 3',\n value: '#D9EAD3',\n },\n {\n isBrightColor: false,\n name: 'light cyan 3',\n value: '#D0DFE3',\n },\n {\n isBrightColor: false,\n name: 'light cornflower blue 3',\n value: '#C9DAF8',\n },\n {\n isBrightColor: true,\n name: 'light blue 3',\n value: '#CFE1F3',\n },\n {\n isBrightColor: true,\n name: 'light purple 3',\n value: '#D9D2E9',\n },\n {\n isBrightColor: true,\n name: 'light magenta 3',\n value: '#EAD1DB',\n },\n\n {\n isBrightColor: false,\n name: 'light red berry 2',\n value: '#DC7E6B',\n },\n {\n isBrightColor: false,\n name: 'light red 2',\n value: '#EA9999',\n },\n {\n isBrightColor: false,\n name: 'light orange 2',\n value: '#F9CB9C',\n },\n {\n isBrightColor: true,\n name: 'light yellow 2',\n value: '#FFE598',\n },\n {\n isBrightColor: false,\n name: 'light green 2',\n value: '#B7D6A8',\n },\n {\n isBrightColor: false,\n name: 'light cyan 2',\n value: '#A1C4C9',\n },\n {\n isBrightColor: false,\n name: 'light cornflower blue 2',\n value: '#A4C2F4',\n },\n {\n isBrightColor: false,\n name: 'light blue 2',\n value: '#9FC5E8',\n },\n {\n isBrightColor: false,\n name: 'light purple 2',\n value: '#B5A7D5',\n },\n {\n isBrightColor: false,\n name: 'light magenta 2',\n value: '#D5A6BD',\n },\n\n {\n isBrightColor: false,\n name: 'light red berry 1',\n value: '#CC4125',\n },\n {\n isBrightColor: false,\n name: 'light red 1',\n value: '#E06666',\n },\n {\n isBrightColor: false,\n name: 'light orange 1',\n value: '#F6B26B',\n },\n {\n isBrightColor: false,\n name: 'light yellow 1',\n value: '#FFD966',\n },\n {\n isBrightColor: false,\n name: 'light green 1',\n value: '#93C47D',\n },\n {\n isBrightColor: false,\n name: 'light cyan 1',\n value: '#76A5AE',\n },\n {\n isBrightColor: false,\n name: 'light cornflower blue 1',\n value: '#6C9EEB',\n },\n {\n isBrightColor: false,\n name: 'light blue 1',\n value: '#6FA8DC',\n },\n {\n isBrightColor: false,\n name: 'light purple 1',\n value: '#8D7CC3',\n },\n {\n isBrightColor: false,\n name: 'light magenta 1',\n value: '#C27BA0',\n },\n\n {\n isBrightColor: false,\n name: 'dark red berry 1',\n value: '#A61B00',\n },\n {\n isBrightColor: false,\n name: 'dark red 1',\n value: '#CC0000',\n },\n {\n isBrightColor: false,\n name: 'dark orange 1',\n value: '#E59138',\n },\n {\n isBrightColor: false,\n name: 'dark yellow 1',\n value: '#F1C231',\n },\n {\n isBrightColor: false,\n name: 'dark green 1',\n value: '#6AA74F',\n },\n {\n isBrightColor: false,\n name: 'dark cyan 1',\n value: '#45818E',\n },\n {\n isBrightColor: false,\n name: 'dark cornflower blue 1',\n value: '#3B78D8',\n },\n {\n isBrightColor: false,\n name: 'dark blue 1',\n value: '#3E84C6',\n },\n {\n isBrightColor: false,\n name: 'dark purple 1',\n value: '#664EA6',\n },\n {\n isBrightColor: false,\n name: 'dark magenta 1',\n value: '#A64D78',\n },\n\n {\n isBrightColor: false,\n name: 'dark red berry 2',\n value: '#84200D',\n },\n {\n isBrightColor: false,\n name: 'dark red 2',\n value: '#990001',\n },\n {\n isBrightColor: false,\n name: 'dark orange 2',\n value: '#B45F05',\n },\n {\n isBrightColor: false,\n name: 'dark yellow 2',\n value: '#BF9002',\n },\n {\n isBrightColor: false,\n name: 'dark green 2',\n value: '#38761D',\n },\n {\n isBrightColor: false,\n name: 'dark cyan 2',\n value: '#124F5C',\n },\n {\n isBrightColor: false,\n name: 'dark cornflower blue 2',\n value: '#1155CB',\n },\n {\n isBrightColor: false,\n name: 'dark blue 2',\n value: '#0C5394',\n },\n {\n isBrightColor: false,\n name: 'dark purple 2',\n value: '#351C75',\n },\n {\n isBrightColor: false,\n name: 'dark magenta 2',\n value: '#741B47',\n },\n\n {\n isBrightColor: false,\n name: 'dark red berry 3',\n value: '#5B0F00',\n },\n {\n isBrightColor: false,\n name: 'dark red 3',\n value: '#660000',\n },\n {\n isBrightColor: false,\n name: 'dark orange 3',\n value: '#783F04',\n },\n {\n isBrightColor: false,\n name: 'dark yellow 3',\n value: '#7E6000',\n },\n {\n isBrightColor: false,\n name: 'dark green 3',\n value: '#274E12',\n },\n {\n isBrightColor: false,\n name: 'dark cyan 3',\n value: '#0D343D',\n },\n {\n isBrightColor: false,\n name: 'dark cornflower blue 3',\n value: '#1B4487',\n },\n {\n isBrightColor: false,\n name: 'dark blue 3',\n value: '#083763',\n },\n {\n isBrightColor: false,\n name: 'dark purple 3',\n value: '#1F124D',\n },\n {\n isBrightColor: false,\n name: 'dark magenta 3',\n value: '#4C1130',\n },\n];\n\nexport const DEFAULT_CUSTOM_COLORS = [\n {\n isBrightColor: false,\n name: 'dark orange 3',\n value: '#783F04',\n },\n {\n isBrightColor: false,\n name: 'dark grey 3',\n value: '#666666',\n },\n {\n isBrightColor: false,\n name: 'dark grey 2',\n value: '#999999',\n },\n {\n isBrightColor: false,\n name: 'light cornflower blue 1',\n value: '#6C9EEB',\n },\n {\n isBrightColor: false,\n name: 'dark magenta 3',\n value: '#4C1130',\n },\n];\n", + "path": "plate-ui/color-constants.ts", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport type { DropdownMenuItemProps } from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '@udecode/cn';\n\nimport { Icons } from '@/components/icons';\n\nimport type { TColor } from './color-dropdown-menu';\n\nimport { buttonVariants } from './button';\nimport { DropdownMenuItem } from './dropdown-menu';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\n\ntype ColorDropdownMenuItemProps = {\n isBrightColor: boolean;\n isSelected: boolean;\n updateColor: (color: string) => void;\n value: string;\n name?: string;\n} & DropdownMenuItemProps;\n\nexport function ColorDropdownMenuItem({\n className,\n isBrightColor,\n isSelected,\n name,\n updateColor,\n value,\n ...props\n}: ColorDropdownMenuItemProps) {\n const content = (\n {\n e.preventDefault();\n updateColor(value);\n }}\n {...props}\n >\n {isSelected ? : null}\n \n );\n\n return name ? (\n \n {content}\n {name}\n \n ) : (\n content\n );\n}\n\ntype ColorDropdownMenuItemsProps = {\n colors: TColor[];\n updateColor: (color: string) => void;\n color?: string;\n} & React.HTMLAttributes;\n\nexport function ColorDropdownMenuItems({\n className,\n color,\n colors,\n updateColor,\n ...props\n}: ColorDropdownMenuItemsProps) {\n return (\n \n {colors.map(({ isBrightColor, name, value }) => (\n \n ))}\n \n );\n}\n", + "path": "plate-ui/color-dropdown-menu-items.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { useComposedRef } from '@udecode/plate-common/react';\nimport { useColorInput } from '@udecode/plate-font/react';\n\nexport const ColorInput = withRef<'input'>(\n ({ children, className, value = '#000000', ...props }, ref) => {\n const { childProps, inputRef } = useColorInput();\n\n return (\n
\n {React.Children.map(children, (child) => {\n if (!child) return child;\n\n return React.cloneElement(child as React.ReactElement, childProps);\n })}\n\n \n
\n );\n }\n);\n", + "path": "plate-ui/color-input.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\n\nimport type { TColor } from './color-dropdown-menu';\n\nimport { buttonVariants } from './button';\nimport { ColorDropdownMenuItems } from './color-dropdown-menu-items';\nimport { ColorsCustom } from './colors-custom';\nimport { DropdownMenuItem } from './dropdown-menu';\nimport { Separator } from './separator';\n\nexport const ColorPickerContent = withRef<\n 'div',\n {\n clearColor: () => void;\n colors: TColor[];\n customColors: TColor[];\n updateColor: (color: string) => void;\n updateCustomColor: (color: string) => void;\n color?: string;\n }\n>(\n (\n {\n className,\n clearColor,\n color,\n colors,\n customColors,\n updateColor,\n updateCustomColor,\n ...props\n },\n ref\n ) => {\n return (\n \n \n\n \n\n \n {color && (\n \n Clear\n \n )}\n \n );\n }\n);\n\nexport const ColorPicker = React.memo(\n ColorPickerContent,\n (prev, next) =>\n prev.color === next.color &&\n prev.colors === next.colors &&\n prev.customColors === next.customColors\n);\n", + "path": "plate-ui/color-picker.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport {\n useColorsCustom,\n useColorsCustomState,\n} from '@udecode/plate-font/react';\n\nimport type { TColor } from './color-dropdown-menu';\n\nimport { buttonVariants } from './button';\nimport { ColorDropdownMenuItems } from './color-dropdown-menu-items';\nimport { ColorInput } from './color-input';\nimport { DropdownMenuItem } from './dropdown-menu';\n\ntype ColorsCustomProps = {\n colors: TColor[];\n customColors: TColor[];\n updateColor: (color: string) => void;\n updateCustomColor: (color: string) => void;\n color?: string;\n};\n\nexport function ColorsCustom({\n color,\n colors,\n customColors,\n updateColor,\n updateCustomColor,\n}: ColorsCustomProps) {\n const state = useColorsCustomState({\n color,\n colors,\n customColors,\n updateCustomColor,\n });\n const { inputProps, menuItemProps } = useColorsCustom(state);\n\n return (\n
\n \n \n CUSTOM\n \n \n\n \n
\n );\n}\n", + "path": "plate-ui/colors-custom.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "color-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar", + "separator", + "button", + "tooltip" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/column-element.json b/apps/www/public/r/styles/default/column-element.json new file mode 100644 index 0000000000..30c842633f --- /dev/null +++ b/apps/www/public/r/styles/default/column-element.json @@ -0,0 +1,25 @@ +{ + "dependencies": [ + "@udecode/plate-layout" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { TColumnElement } from '@udecode/plate-layout';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement, useElement, withHOC } from '@udecode/plate-common/react';\nimport { ResizableProvider } from '@udecode/plate-resizable';\nimport { useReadOnly } from 'slate-react';\n\nexport const ColumnElement = withHOC(\n ResizableProvider,\n withRef(({ children, className, ...props }, ref) => {\n const readOnly = useReadOnly();\n const { width } = useElement();\n\n return (\n \n {children}\n
\n );\n })\n);\n", + "path": "plate-ui/column-element.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import React from 'react';\n\nimport type { TColumnElement } from '@udecode/plate-layout';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n PlateElement,\n useElement,\n useRemoveNodeButton,\n} from '@udecode/plate-common/react';\nimport {\n ColumnItemPlugin,\n useColumnState,\n useDebouncePopoverOpen,\n} from '@udecode/plate-layout/react';\nimport { useReadOnly } from 'slate-react';\n\nimport { Icons } from '@/components/icons';\n\nimport { Button } from './button';\nimport { Popover, PopoverAnchor, PopoverContent } from './popover';\nimport { Separator } from './separator';\n\nexport const ColumnGroupElement = withRef(\n ({ children, className, ...props }, ref) => {\n return (\n \n \n
{children}
\n
\n
\n );\n }\n);\n\nexport function ColumnFloatingToolbar({ children }: React.PropsWithChildren) {\n const readOnly = useReadOnly();\n\n const {\n setDoubleColumn,\n setDoubleSideDoubleColumn,\n setLeftSideDoubleColumn,\n setRightSideDoubleColumn,\n setThreeColumn,\n } = useColumnState();\n\n const element = useElement(ColumnItemPlugin.key);\n\n const { props: buttonProps } = useRemoveNodeButton({ element });\n\n const isOpen = useDebouncePopoverOpen();\n\n if (readOnly) return <>{children};\n\n return (\n \n {children}\n e.preventDefault()}\n align=\"center\"\n side=\"top\"\n sideOffset={10}\n >\n
\n \n \n \n \n \n \n \n\n \n \n
\n \n
\n );\n}\n", + "path": "plate-ui/column-group-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "column-element", + "registryDependencies": [ + "command", + "resizable" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/command.json b/apps/www/public/r/styles/default/command.json new file mode 100644 index 0000000000..27e905e3d3 --- /dev/null +++ b/apps/www/public/r/styles/default/command.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "cmdk" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DialogProps } from '@radix-ui/react-dialog';\n\nimport { cn, createPrimitiveElement, withCn, withRef } from '@udecode/cn';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { Icons } from '@/components/icons';\n\nimport { Dialog, DialogContent } from './dialog';\n\nexport const Command = withCn(\n CommandPrimitive,\n 'flex size-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground'\n);\n\nexport function CommandDialog({ children, ...props }: DialogProps) {\n return (\n \n \n \n {children}\n \n \n \n );\n}\n\nexport const CommandInput = withRef(\n ({ className, ...props }, ref) => (\n
\n \n \n
\n )\n);\n\nexport const CommandList = withCn(\n CommandPrimitive.List,\n 'max-h-[500px] overflow-y-auto overflow-x-hidden'\n);\n\nexport const CommandEmpty = withCn(\n CommandPrimitive.Empty,\n 'py-6 text-center text-sm'\n);\n\nexport const CommandGroup = withCn(\n CommandPrimitive.Group,\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground'\n);\n\nexport const CommandSeparator = withCn(\n CommandPrimitive.Separator,\n '-mx-1 h-px bg-border'\n);\n\nexport const CommandItem = withCn(\n CommandPrimitive.Item,\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50'\n);\n\nexport const CommandShortcut = withCn(\n createPrimitiveElement('span'),\n 'ml-auto text-xs tracking-widest text-muted-foreground'\n);\n", + "path": "plate-ui/command.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "command", + "registryDependencies": [ + "dialog" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/comment-leaf.json b/apps/www/public/r/styles/default/comment-leaf.json new file mode 100644 index 0000000000..744474f69c --- /dev/null +++ b/apps/www/public/r/styles/default/comment-leaf.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-comments" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport type { TCommentText } from '@udecode/plate-comments';\n\nimport { cn } from '@udecode/cn';\nimport {\n useCommentLeaf,\n useCommentLeafState,\n} from '@udecode/plate-comments/react';\nimport { type PlateLeafProps, PlateLeaf } from '@udecode/plate-common/react';\n\nexport function CommentLeaf({\n className,\n ...props\n}: PlateLeafProps) {\n const { children, leaf, nodeProps } = props;\n\n const state = useCommentLeafState({ leaf });\n const { props: rootProps } = useCommentLeaf(state);\n\n if (!state.commentCount) return <>{children};\n\n let aboveChildren = <>{children};\n\n if (!state.isActive) {\n for (let i = 1; i < state.commentCount; i++) {\n aboveChildren = {aboveChildren};\n }\n }\n\n return (\n \n {aboveChildren}\n \n );\n}\n", + "path": "plate-ui/comment-leaf.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "comment-leaf", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/comment-toolbar-button.json b/apps/www/public/r/styles/default/comment-toolbar-button.json new file mode 100644 index 0000000000..eac032483c --- /dev/null +++ b/apps/www/public/r/styles/default/comment-toolbar-button.json @@ -0,0 +1,14 @@ +{ + "dependencies": [], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { useCommentAddButton } from '@udecode/plate-comments/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport function CommentToolbarButton() {\n const { hidden, props } = useCommentAddButton();\n\n if (hidden) return null;\n\n return (\n \n \n \n );\n}\n", + "path": "plate-ui/comment-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "comment-toolbar-button", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/comments-popover.json b/apps/www/public/r/styles/default/comments-popover.json new file mode 100644 index 0000000000..1886c715e0 --- /dev/null +++ b/apps/www/public/r/styles/default/comments-popover.json @@ -0,0 +1,61 @@ +{ + "dependencies": [ + "@udecode/plate-comments" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n CommentProvider,\n CommentsPositioner,\n SCOPE_ACTIVE_COMMENT,\n useFloatingCommentsContentState,\n useFloatingCommentsState,\n} from '@udecode/plate-comments/react';\nimport { PortalBody } from '@udecode/plate-common/react';\n\nimport { CommentCreateForm } from './comment-create-form';\nimport { CommentItem } from './comment-item';\nimport { CommentReplyItems } from './comment-reply-items';\nimport { popoverVariants } from './popover';\n\nexport type FloatingCommentsContentProps = {\n disableForm?: boolean;\n};\n\nexport function CommentsPopoverContent(props: FloatingCommentsContentProps) {\n const { disableForm } = props;\n\n const { activeCommentId, hasNoComment, myUserId, ref } =\n useFloatingCommentsContentState();\n\n return (\n \n
\n {!hasNoComment && (\n <>\n \n\n \n \n )}\n\n {!!myUserId && !disableForm && }\n
\n \n );\n}\n\nexport function CommentsPopover() {\n const { activeCommentId, loaded } = useFloatingCommentsState();\n\n if (!loaded || !activeCommentId) return null;\n\n return (\n \n \n \n \n \n );\n}\n", + "path": "plate-ui/comments-popover.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { CommentsPlugin } from '@udecode/plate-comments/react';\nimport { useEditorPlugin } from '@udecode/plate-common/react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from './avatar';\n\nexport function CommentAvatar({ userId }: { userId: string | null }) {\n const { useOption } = useEditorPlugin(CommentsPlugin);\n const user = useOption('userById', userId);\n\n if (!user) return null;\n\n return (\n \n \n {user.name?.[0]}\n \n );\n}\n", + "path": "plate-ui/comment-avatar.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n CommentNewSubmitButton,\n CommentNewTextarea,\n CommentsPlugin,\n} from '@udecode/plate-comments/react';\nimport { useEditorPlugin } from '@udecode/plate-common/react';\n\nimport { buttonVariants } from './button';\nimport { CommentAvatar } from './comment-avatar';\nimport { inputVariants } from './input';\n\nexport function CommentCreateForm() {\n const { useOption } = useEditorPlugin(CommentsPlugin);\n\n const myUserId = useOption('myUserId');\n\n return (\n
\n \n\n
\n \n\n \n Comment\n \n
\n
\n );\n}\n", + "path": "plate-ui/comment-create-form.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport {\n CommentProvider,\n CommentsPlugin,\n useCommentItemContentState,\n} from '@udecode/plate-comments/react';\nimport { useEditorPlugin } from '@udecode/plate-common/react';\nimport { formatDistance } from 'date-fns';\n\nimport { CommentAvatar } from './comment-avatar';\nimport { CommentMoreDropdown } from './comment-more-dropdown';\nimport { CommentResolveButton } from './comment-resolve-button';\nimport { CommentValue } from './comment-value';\n\ntype PlateCommentProps = {\n commentId: string;\n};\n\nfunction CommentItemContent() {\n const {\n comment,\n commentText,\n editingValue,\n isMyComment,\n isReplyComment,\n user,\n } = useCommentItemContentState();\n\n return (\n
\n
\n \n\n

{user?.name}

\n\n
\n {formatDistance(comment.createdAt, Date.now())} ago\n
\n\n {isMyComment && (\n
\n {isReplyComment ? null : }\n\n \n
\n )}\n
\n\n
\n {editingValue ? (\n \n ) : (\n
{commentText}
\n )}\n
\n
\n );\n}\n\nexport function CommentItem({ commentId }: PlateCommentProps) {\n const { useOption } = useEditorPlugin(CommentsPlugin);\n const comment = useOption('commentById', commentId);\n\n if (!comment) return null;\n\n return (\n \n \n \n );\n}\n", + "path": "plate-ui/comment-item.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n useCommentDeleteButton,\n useCommentDeleteButtonState,\n useCommentEditButton,\n useCommentEditButtonState,\n} from '@udecode/plate-comments/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { Button } from './button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from './dropdown-menu';\n\nexport function CommentMoreDropdown() {\n const editButtonState = useCommentEditButtonState();\n const { props: editProps } = useCommentEditButton(editButtonState);\n const deleteButtonState = useCommentDeleteButtonState();\n const { props: deleteProps } = useCommentDeleteButton(deleteButtonState);\n\n return (\n \n \n \n \n \n Edit comment\n Delete comment\n \n \n );\n}\n", + "path": "plate-ui/comment-more-dropdown.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport {\n SCOPE_ACTIVE_COMMENT,\n useCommentReplies,\n} from '@udecode/plate-comments/react';\n\nimport { CommentItem } from './comment-item';\n\nexport function CommentReplyItems() {\n const commentReplies = useCommentReplies(SCOPE_ACTIVE_COMMENT);\n\n return (\n <>\n {Object.keys(commentReplies).map((id) => (\n \n ))}\n \n );\n}\n", + "path": "plate-ui/comment-reply-items.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n CommentResolveButton as CommentResolveButtonPrimitive,\n useComment,\n} from '@udecode/plate-comments/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { buttonVariants } from './button';\n\nexport function CommentResolveButton() {\n const comment = useComment()!;\n\n return (\n \n {comment.isResolved ? (\n \n ) : (\n \n )}\n \n );\n}\n", + "path": "plate-ui/comment-resolve-button.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n CommentEditActions,\n CommentEditTextarea,\n} from '@udecode/plate-comments/react';\n\nimport { buttonVariants } from './button';\nimport { inputVariants } from './input';\n\nexport function CommentValue() {\n return (\n
\n \n\n
\n \n Cancel\n \n\n \n Save\n \n
\n
\n );\n}\n", + "path": "plate-ui/comment-value.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "comments-popover", + "registryDependencies": [ + "popover", + "avatar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/cursor-overlay.json b/apps/www/public/r/styles/default/cursor-overlay.json new file mode 100644 index 0000000000..353b337305 --- /dev/null +++ b/apps/www/public/r/styles/default/cursor-overlay.json @@ -0,0 +1,14 @@ +{ + "dependencies": [], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport {\n createPlatePlugin,\n findEventRange,\n useEditorRef,\n} from '@udecode/plate-common/react';\nimport {\n type CursorData,\n type CursorOverlayProps,\n type CursorProps,\n type CursorState,\n CursorOverlay as CursorOverlayPrimitive,\n} from '@udecode/plate-cursor';\nimport { DndPlugin } from '@udecode/plate-dnd';\n\nexport function Cursor({\n caretPosition,\n classNames,\n data,\n disableCaret,\n disableSelection,\n selectionRects,\n}: CursorProps) {\n const { style, selectionStyle = style } = data ?? ({} as CursorData);\n\n return (\n <>\n {!disableSelection &&\n selectionRects.map((position, i) => (\n \n ))}\n {!disableCaret && caretPosition && (\n \n )}\n \n );\n}\n\nexport function CursorOverlay({ cursors, ...props }: CursorOverlayProps) {\n const editor = useEditorRef();\n const dynamicCursors = editor.useOption(DragOverCursorPlugin, 'cursors');\n\n const allCursors = { ...cursors, ...dynamicCursors };\n\n return (\n \n );\n}\n\nconst DragOverCursorPlugin = createPlatePlugin({\n key: 'dragOverCursor',\n options: { cursors: {} as Record> },\n handlers: {\n onDragEnd: ({ editor, plugin }) => {\n editor.setOption(plugin, 'cursors', {});\n },\n onDragLeave: ({ editor, plugin }) => {\n editor.setOption(plugin, 'cursors', {});\n },\n onDragOver: ({ editor, event, plugin }) => {\n if (editor.getOptions(DndPlugin).isDragging) return;\n\n const range = findEventRange(editor, event);\n\n if (!range) return;\n\n editor.setOption(plugin, 'cursors', {\n drag: {\n key: 'drag',\n data: {\n style: {\n backgroundColor: 'hsl(222.2 47.4% 11.2%)',\n width: 3,\n },\n },\n selection: range,\n },\n });\n },\n onDrop: ({ editor, plugin }) => {\n editor.setOption(plugin, 'cursors', {});\n },\n },\n});\n", + "path": "plate-ui/cursor-overlay.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "cursor-overlay", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/date-element.json b/apps/www/public/r/styles/default/date-element.json new file mode 100644 index 0000000000..c032708515 --- /dev/null +++ b/apps/www/public/r/styles/default/date-element.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-date" + ], + "files": [ + { + "content": "'use client';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { setNodes } from '@udecode/plate-common';\nimport { PlateElement, findNodePath } from '@udecode/plate-common/react';\n\nimport { Calendar } from './calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\n\nexport const DateElement = withRef(\n ({ children, className, ...props }, ref) => {\n const { editor, element } = props;\n\n return (\n \n \n \n \n {element.date ? (\n (() => {\n const today = new Date();\n const elementDate = new Date(element.date as string);\n const isToday =\n elementDate.getDate() === today.getDate() &&\n elementDate.getMonth() === today.getMonth() &&\n elementDate.getFullYear() === today.getFullYear();\n\n const isYesterday =\n new Date(\n today.setDate(today.getDate() - 1)\n ).toDateString() === elementDate.toDateString();\n const isTomorrow =\n new Date(\n today.setDate(today.getDate() + 2)\n ).toDateString() === elementDate.toDateString();\n\n if (isToday) return 'Today';\n if (isYesterday) return 'Yesterday';\n if (isTomorrow) return 'Tomorrow';\n\n return elementDate.toLocaleDateString(undefined, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n });\n })()\n ) : (\n Pick a date\n )}\n \n \n \n {\n if (!date) return;\n\n setNodes(\n editor,\n { date: date.toDateString() },\n { at: findNodePath(editor, element) }\n );\n }}\n mode=\"single\"\n initialFocus\n />\n \n \n {children}\n \n );\n }\n);\n", + "path": "plate-ui/date-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "date-element", + "registryDependencies": [ + "calendar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/dialog.json b/apps/www/public/r/styles/default/dialog.json new file mode 100644 index 0000000000..5cdad6293d --- /dev/null +++ b/apps/www/public/r/styles/default/dialog.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-dialog" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { cn, createPrimitiveElement, withCn, withRef } from '@udecode/cn';\n\nimport { Icons } from '@/components/icons';\n\nexport const Dialog = DialogPrimitive.Root;\n\nexport const DialogTrigger = DialogPrimitive.Trigger;\n\nexport const DialogPortal = DialogPrimitive.Portal;\n\nexport const DialogClose = DialogPrimitive.Close;\n\nexport const DialogOverlay = withCn(\n DialogPrimitive.Overlay,\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0'\n);\n\nexport const DialogContent = withRef(\n ({ children, className, ...props }, ref) => (\n \n \n \n {children}\n \n \n Close\n \n \n \n )\n);\n\nexport const DialogHeader = withCn(\n createPrimitiveElement('div'),\n 'flex flex-col space-y-1.5 text-center sm:text-left'\n);\n\nexport const DialogFooter = withCn(\n createPrimitiveElement('div'),\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2'\n);\n\nexport const DialogTitle = withCn(\n DialogPrimitive.Title,\n 'text-lg font-semibold leading-none tracking-tight'\n);\n\nexport const DialogDescription = withCn(\n DialogPrimitive.Description,\n 'text-sm text-muted-foreground'\n);\n", + "path": "plate-ui/dialog.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "dialog", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/draggable.json b/apps/www/public/r/styles/default/draggable.json new file mode 100644 index 0000000000..2cad99ce70 --- /dev/null +++ b/apps/www/public/r/styles/default/draggable.json @@ -0,0 +1,26 @@ +{ + "dependencies": [ + "@udecode/plate-dnd", + "react-dnd", + "react-dnd-html5-backend" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport type { ClassNames, TEditor } from '@udecode/plate-common';\nimport type { DropTargetMonitor } from 'react-dnd';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n type PlateElementProps,\n useEditorRef,\n} from '@udecode/plate-common/react';\nimport {\n type DragItemNode,\n useDraggable,\n useDraggableState,\n} from '@udecode/plate-dnd';\nimport { BlockSelectionPlugin } from '@udecode/plate-selection/react';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipPortal,\n TooltipTrigger,\n} from './tooltip';\n\nexport interface DraggableProps\n extends PlateElementProps,\n ClassNames<{\n /** Block. */\n block: string;\n\n /** Block and gutter. */\n blockAndGutter: string;\n\n /** Block toolbar in the gutter. */\n blockToolbar: string;\n\n /**\n * Block toolbar wrapper in the gutter left. It has the height of a line\n * of the block.\n */\n blockToolbarWrapper: string;\n\n blockWrapper: string;\n\n /** Button to dnd the block, in the block toolbar. */\n dragHandle: string;\n\n /** Icon of the drag button, in the drag icon. */\n dragIcon: string;\n\n /** Show a dropline above or below the block when dragging a block. */\n dropLine: string;\n\n /** Gutter at the left side of the editor. It has the height of the block */\n gutterLeft: string;\n }> {\n /**\n * Intercepts the drop handling. If `false` is returned, the default drop\n * behavior is called after. If `true` is returned, the default behavior is\n * not called.\n */\n onDropHandler?: (\n editor: TEditor,\n props: {\n id: string;\n dragItem: DragItemNode;\n monitor: DropTargetMonitor;\n nodeRef: any;\n }\n ) => boolean;\n}\n\nconst DragHandle = () => {\n const editor = useEditorRef();\n\n return (\n \n \n {\n event.stopPropagation();\n event.preventDefault();\n\n // if (element.id) {\n // editor.getApi(BlockSelectionPlugin).blockSelection.addSelectedRow(element.id as string);\n // api.blockContextMenu.show(editor.id, event as any);\n // }\n }}\n onMouseDown={() => {\n editor\n .getApi(BlockSelectionPlugin)\n .blockSelection.resetSelectedIds();\n }}\n />\n \n \n Drag to move\n \n \n );\n};\n\nexport const Draggable = withRef<'div', DraggableProps>(\n ({ className, classNames = {}, onDropHandler, ...props }, ref) => {\n const { children, element } = props;\n\n const state = useDraggableState({ element, onDropHandler });\n const { dropLine, isDragging, isHovered } = state;\n const {\n droplineProps,\n groupProps,\n gutterLeftProps,\n previewRef,\n handleRef,\n } = useDraggable(state);\n\n return (\n \n \n
\n \n \n {isHovered && }\n
\n \n \n \n\n
\n {children}\n\n {!!dropLine && (\n \n )}\n
\n \n );\n }\n);\n", + "path": "plate-ui/draggable.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import type { FC } from 'react';\n\nimport { BlockquotePlugin } from '@udecode/plate-block-quote/react';\nimport { CodeBlockPlugin } from '@udecode/plate-code-block/react';\nimport {\n ParagraphPlugin,\n createNodesWithHOC,\n} from '@udecode/plate-common/react';\nimport {\n type WithDraggableOptions,\n withDraggable as withDraggablePrimitive,\n} from '@udecode/plate-dnd';\nimport { ExcalidrawPlugin } from '@udecode/plate-excalidraw/react';\nimport { HEADING_KEYS } from '@udecode/plate-heading';\nimport { ColumnPlugin } from '@udecode/plate-layout/react';\nimport {\n BulletedListPlugin,\n NumberedListPlugin,\n} from '@udecode/plate-list/react';\nimport {\n ImagePlugin,\n MediaEmbedPlugin,\n PlaceholderPlugin,\n} from '@udecode/plate-media/react';\nimport { TablePlugin } from '@udecode/plate-table/react';\nimport { TogglePlugin } from '@udecode/plate-toggle/react';\n\nimport { type DraggableProps, Draggable } from './draggable';\n\nexport const withDraggable = (\n Component: FC,\n options?: WithDraggableOptions<\n Partial>\n >\n) =>\n withDraggablePrimitive(Draggable, Component, options as any);\n\nexport const withDraggablesPrimitive = createNodesWithHOC(withDraggable);\n\nexport const withDraggables = (components: any) => {\n return withDraggablesPrimitive(components, [\n {\n keys: [\n ParagraphPlugin.key,\n BulletedListPlugin.key,\n NumberedListPlugin.key,\n ],\n level: 0,\n },\n {\n key: HEADING_KEYS.h1,\n draggableProps: {\n classNames: {\n blockToolbarWrapper: 'h-[1.3em]',\n gutterLeft: 'px-0 pb-1 text-[1.875em]',\n },\n },\n },\n {\n key: HEADING_KEYS.h2,\n draggableProps: {\n classNames: {\n blockToolbarWrapper: 'h-[1.3em]',\n gutterLeft: 'px-0 pb-1 text-[1.5em]',\n },\n },\n },\n {\n key: HEADING_KEYS.h3,\n draggableProps: {\n classNames: {\n blockToolbarWrapper: 'h-[1.3em]',\n gutterLeft: 'pt-[2px] px-0 pb-1 text-[1.25em]',\n },\n },\n },\n {\n keys: [HEADING_KEYS.h4, HEADING_KEYS.h5],\n draggableProps: {\n classNames: {\n blockToolbarWrapper: 'h-[1.3em]',\n gutterLeft: 'pt-[3px] px-0 pb-0 text-[1.1em]',\n },\n },\n },\n {\n keys: [ParagraphPlugin.key],\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-[3px] px-0 pb-0',\n },\n },\n },\n {\n keys: [HEADING_KEYS.h6, BulletedListPlugin.key, NumberedListPlugin.key],\n draggableProps: {\n classNames: {\n gutterLeft: 'px-0 pb-0',\n },\n },\n },\n {\n key: BlockquotePlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'px-0 pb-0',\n },\n },\n },\n {\n key: CodeBlockPlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-6 px-0 pb-0',\n },\n },\n },\n {\n key: ImagePlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-0 px-0 pb-0',\n },\n },\n },\n {\n key: MediaEmbedPlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-0 px-0 pb-0',\n },\n },\n },\n {\n key: ExcalidrawPlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-0 px-0 pb-0',\n },\n },\n },\n {\n key: TogglePlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-0 px-0 pb-0',\n },\n },\n },\n {\n key: ColumnPlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-0 px-0 pb-0',\n },\n },\n },\n {\n key: PlaceholderPlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-3 px-0 pb-0',\n },\n },\n },\n {\n key: TablePlugin.key,\n draggableProps: {\n classNames: {\n gutterLeft: 'pt-3 px-0 pb-0',\n },\n },\n },\n ]);\n};\n", + "path": "plate-ui/with-draggables.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "draggable", + "registryDependencies": [ + "tooltip" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/dropdown-menu.json b/apps/www/public/r/styles/default/dropdown-menu.json new file mode 100644 index 0000000000..a402ada7cd --- /dev/null +++ b/apps/www/public/r/styles/default/dropdown-menu.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-dropdown-menu" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\nimport { useCallback, useState } from 'react';\n\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport {\n cn,\n createPrimitiveElement,\n withCn,\n withProps,\n withRef,\n withVariants,\n} from '@udecode/cn';\nimport { cva } from 'class-variance-authority';\n\nimport { Icons } from '@/components/icons';\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\n\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nexport const DropdownMenuSubTrigger = withRef<\n typeof DropdownMenuPrimitive.SubTrigger,\n {\n inset?: boolean;\n }\n>(({ children, className, inset, ...props }, ref) => (\n \n {children}\n \n \n));\n\nexport const DropdownMenuSubContent = withCn(\n DropdownMenuPrimitive.SubContent,\n 'z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2'\n);\n\nconst DropdownMenuContentVariants = withProps(DropdownMenuPrimitive.Content, {\n className: cn(\n 'z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2'\n ),\n sideOffset: 4,\n});\n\nexport const DropdownMenuContent = withRef<\n typeof DropdownMenuPrimitive.Content\n>(({ ...props }, ref) => (\n \n \n \n));\n\nconst menuItemVariants = cva(\n cn(\n 'relative flex h-9 cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors',\n 'focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50'\n ),\n {\n variants: {\n inset: {\n true: 'pl-8',\n },\n },\n }\n);\n\nexport const DropdownMenuItem = withVariants(\n DropdownMenuPrimitive.Item,\n menuItemVariants,\n ['inset']\n);\n\nexport const DropdownMenuCheckboxItem = withRef<\n typeof DropdownMenuPrimitive.CheckboxItem\n>(({ children, className, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n));\n\nexport const DropdownMenuRadioItem = withRef<\n typeof DropdownMenuPrimitive.RadioItem,\n {\n hideIcon?: boolean;\n }\n>(({ children, className, hideIcon, ...props }, ref) => (\n \n {!hideIcon && (\n \n \n \n \n \n )}\n {children}\n \n));\n\nconst dropdownMenuLabelVariants = cva(\n cn('select-none px-2 py-1.5 text-sm font-semibold'),\n {\n variants: {\n inset: {\n true: 'pl-8',\n },\n },\n }\n);\n\nexport const DropdownMenuLabel = withVariants(\n DropdownMenuPrimitive.Label,\n dropdownMenuLabelVariants,\n ['inset']\n);\n\nexport const DropdownMenuSeparator = withCn(\n DropdownMenuPrimitive.Separator,\n '-mx-1 my-1 h-px bg-muted'\n);\n\nexport const DropdownMenuShortcut = withCn(\n createPrimitiveElement('span'),\n 'ml-auto text-xs tracking-widest opacity-60'\n);\n\nexport const useOpenState = () => {\n const [open, setOpen] = useState(false);\n\n const onOpenChange = useCallback(\n (_value = !open) => {\n setOpen(_value);\n },\n [open]\n );\n\n return {\n open,\n onOpenChange,\n };\n};\n", + "path": "plate-ui/dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "dropdown-menu", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/editor.json b/apps/www/public/r/styles/default/editor.json new file mode 100644 index 0000000000..fe33ac37e5 --- /dev/null +++ b/apps/www/public/r/styles/default/editor.json @@ -0,0 +1,14 @@ +{ + "dependencies": [], + "files": [ + { + "content": "import React from 'react';\n\nimport type { PlateContentProps } from '@udecode/plate-common/react';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@udecode/cn';\nimport { PlateContent } from '@udecode/plate-common/react';\nimport { cva } from 'class-variance-authority';\n\nconst editorVariants = cva(\n cn(\n 'relative overflow-x-auto whitespace-pre-wrap break-words text-foreground',\n 'min-h-[80px] w-full rounded-md bg-background px-6 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none',\n '[&_[data-slate-placeholder]]:text-muted-foreground [&_[data-slate-placeholder]]:!opacity-100',\n '[&_[data-slate-placeholder]]:top-[auto_!important]',\n '[&_strong]:font-bold'\n ),\n {\n defaultVariants: {\n focusRing: true,\n size: 'sm',\n variant: 'outline',\n },\n variants: {\n disabled: {\n true: 'cursor-not-allowed opacity-50',\n },\n focusRing: {\n false: '',\n true: 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n },\n focused: {\n true: 'ring-2 ring-ring ring-offset-2',\n },\n size: {\n md: 'text-base',\n sm: 'text-sm',\n },\n variant: {\n ghost: '',\n outline: 'border border-input',\n },\n },\n }\n);\n\nexport type EditorProps = PlateContentProps &\n VariantProps;\n\nconst Editor = React.forwardRef(\n (\n {\n className,\n disabled,\n focusRing,\n focused,\n readOnly,\n size,\n variant,\n ...props\n },\n ref\n ) => {\n return (\n
\n \n
\n );\n }\n);\nEditor.displayName = 'Editor';\n\nexport { Editor };\n", + "path": "plate-ui/editor.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "editor", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/emoji-dropdown-menu.json b/apps/www/public/r/styles/default/emoji-dropdown-menu.json new file mode 100644 index 0000000000..e67936adb2 --- /dev/null +++ b/apps/www/public/r/styles/default/emoji-dropdown-menu.json @@ -0,0 +1,66 @@ +{ + "dependencies": [ + "@radix-ui/react-popover" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport {\n type EmojiDropdownMenuOptions,\n useEmojiDropdownMenuState,\n} from '@udecode/plate-emoji/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { emojiCategoryIcons, emojiSearchIcons } from './emoji-icons';\nimport { EmojiPicker } from './emoji-picker';\nimport { EmojiToolbarDropdown } from './emoji-toolbar-dropdown';\nimport { ToolbarButton } from './toolbar';\n\ntype EmojiDropdownMenuProps = {\n options?: EmojiDropdownMenuOptions;\n} & React.ComponentPropsWithoutRef;\n\nexport function EmojiDropdownMenu({\n options,\n ...props\n}: EmojiDropdownMenuProps) {\n const { emojiPickerState, isOpen, setIsOpen } =\n useEmojiDropdownMenuState(options);\n\n return (\n \n \n \n }\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n >\n \n \n );\n}\n", + "path": "plate-ui/emoji-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import React, { type ReactNode } from 'react';\n\nimport * as Popover from '@radix-ui/react-popover';\n\ntype EmojiToolbarDropdownProps = {\n children: ReactNode;\n control: ReactNode;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n};\n\nexport function EmojiToolbarDropdown({\n children,\n control,\n isOpen,\n setIsOpen,\n}: EmojiToolbarDropdownProps) {\n return (\n \n {control}\n\n \n {children}\n \n \n );\n}\n", + "path": "plate-ui/emoji-toolbar-dropdown.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import type React from 'react';\n\nimport type { EmojiCategoryList } from '@udecode/plate-emoji';\n\nimport {\n AppleIcon,\n ClockIcon,\n CompassIcon,\n DeleteIcon,\n FlagIcon,\n LeafIcon,\n LightbulbIcon,\n MusicIcon,\n SearchIcon,\n SmileIcon,\n StarIcon,\n} from 'lucide-react';\n\nexport const emojiCategoryIcons: Record<\n EmojiCategoryList,\n { outline: React.ReactElement; solid: React.ReactElement }\n> = {\n activity: {\n outline: (\n \n \n \n \n \n \n ),\n // Needed to add another solid variant - outline will be used for now\n solid: (\n \n \n \n \n \n \n ),\n },\n\n custom: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n flags: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n foods: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n frequent: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n nature: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n objects: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n people: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n places: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n\n symbols: {\n outline: ,\n // Needed to add another solid variant - outline will be used for now\n solid: ,\n },\n};\n\nexport const emojiSearchIcons = {\n delete: ,\n\n loupe: ,\n};\n", + "path": "plate-ui/emoji-icons.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import React from 'react';\n\nimport type { UseEmojiPickerType } from '@udecode/plate-emoji/react';\n\nimport { cn } from '@udecode/cn';\nimport { EmojiSettings } from '@udecode/plate-emoji';\n\nimport { EmojiPickerContent } from './emoji-picker-content';\nimport { EmojiPickerNavigation } from './emoji-picker-navigation';\nimport { EmojiPickerPreview } from './emoji-picker-preview';\nimport { EmojiPickerSearchAndClear } from './emoji-picker-search-and-clear';\nimport { EmojiPickerSearchBar } from './emoji-picker-search-bar';\n\nexport function EmojiPicker({\n clearSearch,\n emoji,\n emojiLibrary,\n focusedCategory,\n hasFound,\n i18n,\n icons,\n isSearching,\n refs,\n searchResult,\n searchValue,\n setSearch,\n settings = EmojiSettings,\n visibleCategories,\n handleCategoryClick,\n onMouseOver,\n onSelectEmoji,\n}: UseEmojiPickerType) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n", + "path": "plate-ui/emoji-picker.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import { memo, useCallback } from 'react';\n\nimport type { UseEmojiPickerType } from '@udecode/plate-emoji/react';\n\nimport { cn } from '@udecode/cn';\nimport { type Emoji, type GridRow, EmojiSettings } from '@udecode/plate-emoji';\n\nexport type EmojiPickerContentProps = Pick<\n UseEmojiPickerType,\n | 'emojiLibrary'\n | 'i18n'\n | 'isSearching'\n | 'onMouseOver'\n | 'onSelectEmoji'\n | 'refs'\n | 'searchResult'\n | 'settings'\n | 'visibleCategories'\n>;\n\nexport type EmojiButtonProps = {\n emoji: Emoji;\n index: number;\n onMouseOver: (emoji?: Emoji) => void;\n onSelect: (emoji: Emoji) => void;\n};\n\nexport type RowOfButtonsProps = {\n row: GridRow;\n} & Pick;\n\nconst Button = memo(\n ({ emoji, index, onMouseOver, onSelect }: EmojiButtonProps) => {\n return (\n onSelect(emoji)}\n onMouseEnter={() => onMouseOver(emoji)}\n onMouseLeave={() => onMouseOver()}\n aria-label={emoji.skins[0].native}\n data-index={index}\n tabIndex={-1}\n type=\"button\"\n >\n \n \n {emoji.skins[0].native}\n \n \n );\n }\n);\nButton.displayName = 'Button';\n\nconst RowOfButtons = memo(\n ({ emojiLibrary, row, onMouseOver, onSelectEmoji }: RowOfButtonsProps) => (\n
\n {row.elements.map((emojiId, index) => (\n \n ))}\n
\n )\n);\nRowOfButtons.displayName = 'RowOfButtons';\n\nexport function EmojiPickerContent({\n emojiLibrary,\n i18n,\n isSearching = false,\n refs,\n searchResult,\n settings = EmojiSettings,\n visibleCategories,\n onMouseOver,\n onSelectEmoji,\n}: EmojiPickerContentProps) {\n const getRowWidth = settings.perLine.value * settings.buttonSize.value;\n\n const isCategoryVisible = useCallback(\n (categoryId: any) => {\n return visibleCategories.has(categoryId)\n ? visibleCategories.get(categoryId)\n : false;\n },\n [visibleCategories]\n );\n\n const EmojiList = useCallback(() => {\n return emojiLibrary\n .getGrid()\n .sections()\n .map(({ id: categoryId }) => {\n const section = emojiLibrary.getGrid().section(categoryId);\n const { buttonSize } = settings;\n\n return (\n \n
\n {i18n.categories[categoryId]}\n
\n \n {isCategoryVisible(categoryId) &&\n section\n .getRows()\n .map((row: GridRow) => (\n \n ))}\n \n \n );\n });\n }, [\n emojiLibrary,\n getRowWidth,\n i18n.categories,\n isCategoryVisible,\n onSelectEmoji,\n onMouseOver,\n settings,\n ]);\n\n const SearchList = useCallback(() => {\n return (\n
\n
\n {i18n.searchResult}\n
\n
\n {searchResult.map((emoji: Emoji, index: number) => (\n \n ))}\n
\n
\n );\n }, [\n emojiLibrary,\n getRowWidth,\n i18n.searchResult,\n searchResult,\n onSelectEmoji,\n onMouseOver,\n ]);\n\n return (\n \n
\n {isSearching ? SearchList() : EmojiList()}\n
\n \n );\n}\n", + "path": "plate-ui/emoji-picker-content.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import React from 'react';\n\nimport type { EmojiCategoryList } from '@udecode/plate-emoji';\nimport type {\n IEmojiFloatingLibrary,\n UseEmojiPickerType,\n} from '@udecode/plate-emoji/react';\n\nimport { cn } from '@udecode/cn';\n\nimport { Button } from './button';\n\nexport type EmojiPickerNavigationProps = {\n onClick: (id: EmojiCategoryList) => void;\n} & Pick<\n UseEmojiPickerType,\n 'emojiLibrary' | 'focusedCategory' | 'i18n' | 'icons'\n>;\n\nconst getBarProperty = (\n emojiLibrary: IEmojiFloatingLibrary,\n focusedCategory?: EmojiCategoryList\n) => {\n let width = 0;\n let position = 0;\n\n if (focusedCategory) {\n width = 100 / emojiLibrary.getGrid().size;\n position = focusedCategory\n ? emojiLibrary.indexOf(focusedCategory) * 100\n : 0;\n }\n\n return { position, width };\n};\n\nexport function EmojiPickerNavigation({\n emojiLibrary,\n focusedCategory,\n i18n,\n icons,\n onClick,\n}: EmojiPickerNavigationProps) {\n const { position, width } = getBarProperty(emojiLibrary, focusedCategory);\n\n return (\n \n
\n {emojiLibrary\n .getGrid()\n .sections()\n .map(({ id }) => (\n onClick(id)}\n title={i18n.categories[id]}\n aria-label={i18n.categories[id]}\n type=\"button\"\n >\n {icons.categories[id].outline}\n \n ))}\n \n
\n \n );\n}\n", + "path": "plate-ui/emoji-picker-navigation.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import type { UseEmojiPickerType } from '@udecode/plate-emoji/react';\n\nexport type EmojiPickerPreviewProps = Pick<\n UseEmojiPickerType,\n 'emoji' | 'hasFound' | 'i18n' | 'isSearching'\n>;\n\nexport type EmojiPreviewProps = Pick;\n\nexport type NoEmojiPreviewProps = Pick;\n\nexport type PickAnEmojiPreviewProps = NoEmojiPreviewProps;\n\nfunction EmojiPreview({ emoji }: EmojiPreviewProps) {\n return (\n
\n
\n {emoji?.skins[0].native}\n
\n
\n
{emoji?.name}
\n
{`:${emoji?.id}:`}
\n
\n
\n );\n}\n\nfunction NoEmoji({ i18n }: NoEmojiPreviewProps) {\n return (\n
\n
😢
\n
\n
\n {i18n.searchNoResultsTitle}\n
\n
{i18n.searchNoResultsSubtitle}
\n
\n
\n );\n}\n\nfunction PickAnEmoji({ i18n }: PickAnEmojiPreviewProps) {\n return (\n
\n
☝️
\n
\n
{i18n.pick}
\n
\n
\n );\n}\n\nexport function EmojiPickerPreview({\n emoji,\n hasFound = true,\n i18n,\n isSearching = false,\n ...props\n}: EmojiPickerPreviewProps) {\n const showPickEmoji = !emoji && !(isSearching && !hasFound);\n const showNoEmoji = isSearching && !hasFound;\n const showPreview = emoji;\n\n return (\n <>\n {showPreview && }\n {showPickEmoji && }\n {showNoEmoji && }\n \n );\n}\n", + "path": "plate-ui/emoji-picker-preview.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import type { UseEmojiPickerType } from '@udecode/plate-emoji/react';\n\nimport { cn } from '@udecode/cn';\nimport { DeleteIcon, SearchIcon } from 'lucide-react';\n\nimport { Button } from './button';\n\nexport type EmojiPickerSearchAndClearProps = Pick<\n UseEmojiPickerType,\n 'clearSearch' | 'i18n' | 'searchValue'\n>;\n\nexport function EmojiPickerSearchAndClear({\n clearSearch,\n i18n,\n searchValue,\n}: EmojiPickerSearchAndClearProps) {\n return (\n
\n \n \n
\n {searchValue && (\n \n \n \n )}\n \n );\n}\n", + "path": "plate-ui/emoji-picker-search-and-clear.tsx", + "target": "", + "type": "registry:ui" + }, + { + "content": "import type { ReactNode } from 'react';\n\nimport type { UseEmojiPickerType } from '@udecode/plate-emoji/react';\n\nexport type EmojiPickerSearchBarProps = {\n children: ReactNode;\n} & Pick;\n\nexport function EmojiPickerSearchBar({\n children,\n i18n,\n searchValue,\n setSearch,\n}: EmojiPickerSearchBarProps) {\n return (\n
\n
\n setSearch(event.target.value)}\n placeholder={i18n.search}\n aria-label=\"Search\"\n autoComplete=\"off\"\n type=\"text\"\n />\n {children}\n
\n
\n );\n}\n", + "path": "plate-ui/emoji-picker-search-bar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "emoji-dropdown-menu", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/emoji-input-element.json b/apps/www/public/r/styles/default/emoji-input-element.json new file mode 100644 index 0000000000..ceef1bb623 --- /dev/null +++ b/apps/www/public/r/styles/default/emoji-input-element.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-emoji" + ], + "files": [ + { + "content": "import React, { useMemo, useState } from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { EmojiInlineIndexSearch, insertEmoji } from '@udecode/plate-emoji';\n\nimport { useDebounce } from '@/hooks/use-debounce';\n\nimport {\n InlineCombobox,\n InlineComboboxContent,\n InlineComboboxEmpty,\n InlineComboboxInput,\n InlineComboboxItem,\n} from './inline-combobox';\n\nexport const EmojiInputElement = withRef(\n ({ className, ...props }, ref) => {\n const { children, editor, element } = props;\n const [value, setValue] = useState('');\n const debouncedValue = useDebounce(value, 100);\n const isPending = value !== debouncedValue;\n\n const filteredEmojis = useMemo(() => {\n if (debouncedValue.trim().length === 0) return [];\n\n return EmojiInlineIndexSearch.getInstance()\n .search(debouncedValue.replace(/:$/, ''))\n .get();\n }, [debouncedValue]);\n\n return (\n \n \n \n\n \n {!isPending && (\n No matching emoji found\n )}\n\n {filteredEmojis.map((emoji) => (\n insertEmoji(editor, emoji)}\n >\n {emoji.skins[0].native} {emoji.name}\n \n ))}\n \n \n\n {children}\n \n );\n }\n);\n", + "path": "plate-ui/emoji-input-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "emoji-input-element", + "registryDependencies": [ + "inline-combobox" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/excalidraw-element.json b/apps/www/public/r/styles/default/excalidraw-element.json new file mode 100644 index 0000000000..216544d224 --- /dev/null +++ b/apps/www/public/r/styles/default/excalidraw-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-excalidraw" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { useExcalidrawElement } from '@udecode/plate-excalidraw/react';\n\nexport const ExcalidrawElement = withRef(\n ({ nodeProps, ...props }, ref) => {\n const { children, element } = props;\n\n const { Excalidraw, excalidrawProps } = useExcalidrawElement({\n element,\n });\n\n return (\n \n
\n
\n {Excalidraw && (\n \n )}\n
\n
\n {children}\n
\n );\n }\n);\n", + "path": "plate-ui/excalidraw-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "excalidraw-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/fixed-toolbar-buttons.json b/apps/www/public/r/styles/default/fixed-toolbar-buttons.json new file mode 100644 index 0000000000..c124afefcf --- /dev/null +++ b/apps/www/public/r/styles/default/fixed-toolbar-buttons.json @@ -0,0 +1,22 @@ +{ + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport {\n BoldPlugin,\n CodePlugin,\n ItalicPlugin,\n StrikethroughPlugin,\n UnderlinePlugin,\n} from '@udecode/plate-basic-marks/react';\nimport { useEditorReadOnly } from '@udecode/plate-common/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { InsertDropdownMenu } from './insert-dropdown-menu';\nimport { MarkToolbarButton } from './mark-toolbar-button';\nimport { ModeDropdownMenu } from './mode-dropdown-menu';\nimport { ToolbarGroup } from './toolbar';\nimport { TurnIntoDropdownMenu } from './turn-into-dropdown-menu';\n\nexport function FixedToolbarButtons() {\n const readOnly = useEditorReadOnly();\n\n return (\n
\n \n {!readOnly && (\n <>\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n )}\n\n
\n\n \n \n \n
\n
\n );\n}\n", + "path": "plate-ui/fixed-toolbar-buttons.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "fixed-toolbar-buttons", + "registryDependencies": [ + "toolbar", + "insert-dropdown-menu", + "mark-toolbar-button", + "mode-dropdown-menu", + "turn-into-dropdown-menu" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/fixed-toolbar.json b/apps/www/public/r/styles/default/fixed-toolbar.json new file mode 100644 index 0000000000..4b3a2201a1 --- /dev/null +++ b/apps/www/public/r/styles/default/fixed-toolbar.json @@ -0,0 +1,16 @@ +{ + "dependencies": [], + "files": [ + { + "content": "import { withCn } from '@udecode/cn';\n\nimport { Toolbar } from './toolbar';\n\nexport const FixedToolbar = withCn(\n Toolbar,\n 'supports-backdrop-blur:bg-background/60 sticky left-0 top-0 z-50 w-full justify-between overflow-x-auto rounded-t-lg border-b border-b-border bg-background/95 backdrop-blur'\n);\n", + "path": "plate-ui/fixed-toolbar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "fixed-toolbar", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/floating-toolbar-buttons.json b/apps/www/public/r/styles/default/floating-toolbar-buttons.json new file mode 100644 index 0000000000..a82d31fcd1 --- /dev/null +++ b/apps/www/public/r/styles/default/floating-toolbar-buttons.json @@ -0,0 +1,20 @@ +{ + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport {\n BoldPlugin,\n CodePlugin,\n ItalicPlugin,\n StrikethroughPlugin,\n UnderlinePlugin,\n} from '@udecode/plate-basic-marks/react';\nimport { useEditorReadOnly } from '@udecode/plate-common/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { MarkToolbarButton } from './mark-toolbar-button';\nimport { TurnIntoDropdownMenu } from './turn-into-dropdown-menu';\n\nexport function FloatingToolbarButtons() {\n const readOnly = useEditorReadOnly();\n\n return (\n <>\n {!readOnly && (\n <>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n}\n", + "path": "plate-ui/floating-toolbar-buttons.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "floating-toolbar-buttons", + "registryDependencies": [ + "mark-toolbar-button", + "more-dropdown-menu", + "turn-into-dropdown-menu" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/floating-toolbar.json b/apps/www/public/r/styles/default/floating-toolbar.json new file mode 100644 index 0000000000..af61bbd306 --- /dev/null +++ b/apps/www/public/r/styles/default/floating-toolbar.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-floating" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n PortalBody,\n useComposedRef,\n useEditorId,\n useEventEditorSelectors,\n} from '@udecode/plate-common/react';\nimport {\n type FloatingToolbarState,\n flip,\n offset,\n useFloatingToolbar,\n useFloatingToolbarState,\n} from '@udecode/plate-floating';\n\nimport { Toolbar } from './toolbar';\n\nexport const FloatingToolbar = withRef<\n typeof Toolbar,\n {\n state?: FloatingToolbarState;\n }\n>(({ children, state, ...props }, componentRef) => {\n const editorId = useEditorId();\n const focusedEditorId = useEventEditorSelectors.focus();\n\n const floatingToolbarState = useFloatingToolbarState({\n editorId,\n focusedEditorId,\n ...state,\n floatingOptions: {\n middleware: [\n offset(12),\n flip({\n fallbackPlacements: [\n 'top-start',\n 'top-end',\n 'bottom-start',\n 'bottom-end',\n ],\n padding: 12,\n }),\n ],\n placement: 'top',\n ...state?.floatingOptions,\n },\n });\n\n const {\n hidden,\n props: rootProps,\n ref: floatingRef,\n } = useFloatingToolbar(floatingToolbarState);\n\n const ref = useComposedRef(componentRef, floatingRef);\n\n if (hidden) return null;\n\n return (\n \n \n {children}\n \n \n );\n});\n", + "path": "plate-ui/floating-toolbar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "floating-toolbar", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/heading-element.json b/apps/www/public/r/styles/default/heading-element.json new file mode 100644 index 0000000000..d303d0196e --- /dev/null +++ b/apps/www/public/r/styles/default/heading-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-heading" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef, withVariants } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { cva } from 'class-variance-authority';\n\nconst headingVariants = cva('', {\n variants: {\n isFirstBlock: {\n false: '',\n true: 'mt-0',\n },\n variant: {\n h1: 'mb-1 mt-[2em] font-heading text-4xl font-bold',\n h2: 'mb-px mt-[1.4em] font-heading text-2xl font-semibold tracking-tight',\n h3: 'mb-px mt-[1em] font-heading text-xl font-semibold tracking-tight',\n h4: 'mt-[0.75em] font-heading text-lg font-semibold tracking-tight',\n h5: 'mt-[0.75em] text-lg font-semibold tracking-tight',\n h6: 'mt-[0.75em] text-base font-semibold tracking-tight',\n },\n },\n});\n\nconst HeadingElementVariants = withVariants(PlateElement, headingVariants, [\n 'isFirstBlock',\n 'variant',\n]);\n\nexport const HeadingElement = withRef(\n ({ children, isFirstBlock, variant = 'h1', ...props }, ref) => {\n const { editor, element } = props;\n\n const Element = variant!;\n\n return (\n \n {children}\n \n );\n }\n);\n", + "path": "plate-ui/heading-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "heading-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/highlight-leaf.json b/apps/www/public/r/styles/default/highlight-leaf.json new file mode 100644 index 0000000000..69e88f4af4 --- /dev/null +++ b/apps/www/public/r/styles/default/highlight-leaf.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-highlight" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateLeaf } from '@udecode/plate-common/react';\n\nexport const HighlightLeaf = withRef(\n ({ children, className, ...props }, ref) => (\n \n {children}\n \n )\n);\n", + "path": "plate-ui/highlight-leaf.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "highlight-leaf", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/hr-element.json b/apps/www/public/r/styles/default/hr-element.json new file mode 100644 index 0000000000..2f40010324 --- /dev/null +++ b/apps/www/public/r/styles/default/hr-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-horizontal-rule" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { useFocused, useSelected } from 'slate-react';\n\nexport const HrElement = withRef(\n ({ className, nodeProps, ...props }, ref) => {\n const { children } = props;\n\n const selected = useSelected();\n const focused = useFocused();\n\n return (\n \n
\n \n
\n {children}\n
\n );\n }\n);\n", + "path": "plate-ui/hr-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "hr-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/image-element.json b/apps/www/public/r/styles/default/image-element.json new file mode 100644 index 0000000000..305022c002 --- /dev/null +++ b/apps/www/public/r/styles/default/image-element.json @@ -0,0 +1,20 @@ +{ + "dependencies": [ + "@udecode/plate-media" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement, withHOC } from '@udecode/plate-common/react';\nimport { Image, ImagePlugin, useMediaState } from '@udecode/plate-media/react';\nimport { ResizableProvider, useResizableStore } from '@udecode/plate-resizable';\n\nimport { Caption, CaptionTextarea } from './caption';\nimport { MediaPopover } from './media-popover';\nimport {\n Resizable,\n ResizeHandle,\n mediaResizeHandleVariants,\n} from './resizable';\n\nexport const ImageElement = withHOC(\n ResizableProvider,\n withRef(\n ({ children, className, nodeProps, ...props }, ref) => {\n const { align = 'center', focused, readOnly, selected } = useMediaState();\n\n const width = useResizableStore().get.width();\n\n return (\n \n \n
\n \n \n \n \n \n\n \n \n \n
\n\n {children}\n \n
\n );\n }\n )\n);\n", + "path": "plate-ui/image-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "image-element", + "registryDependencies": [ + "media-popover", + "caption", + "resizable" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/indent-list-toolbar-button.json b/apps/www/public/r/styles/default/indent-list-toolbar-button.json new file mode 100644 index 0000000000..23b6684f0b --- /dev/null +++ b/apps/www/public/r/styles/default/indent-list-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-indent-list" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { ListStyleType } from '@udecode/plate-indent-list';\nimport {\n useIndentListToolbarButton,\n useIndentListToolbarButtonState,\n} from '@udecode/plate-indent-list/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const IndentListToolbarButton = withRef<\n typeof ToolbarButton,\n {\n nodeType?: ListStyleType;\n }\n>(({ nodeType = ListStyleType.Disc }, ref) => {\n const state = useIndentListToolbarButtonState({ nodeType });\n const { props } = useIndentListToolbarButton(state);\n\n return (\n \n {nodeType === ListStyleType.Disc ? : }\n \n );\n});\n", + "path": "plate-ui/indent-list-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "indent-list-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/indent-toolbar-button.json b/apps/www/public/r/styles/default/indent-toolbar-button.json new file mode 100644 index 0000000000..c2ad89f8f7 --- /dev/null +++ b/apps/www/public/r/styles/default/indent-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-indent" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { useIndentButton } from '@udecode/plate-indent/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const IndentToolbarButton = withRef(\n (rest, ref) => {\n const { props } = useIndentButton();\n\n return (\n \n \n \n );\n }\n);\n", + "path": "plate-ui/indent-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "indent-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/index.json b/apps/www/public/r/styles/default/index.json new file mode 100644 index 0000000000..d13e4c8203 --- /dev/null +++ b/apps/www/public/r/styles/default/index.json @@ -0,0 +1,21 @@ +{ + "name": "default", + "type": "registry:style", + "dependencies": [ + "tailwindcss-animate", + "class-variance-authority", + "lucide-react" + ], + "registryDependencies": [ + "utils" + ], + "tailwind": { + "config": { + "plugins": [ + "require(\"tailwindcss-animate\")" + ] + } + }, + "cssVars": {}, + "files": [] +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/inline-combobox.json b/apps/www/public/r/styles/default/inline-combobox.json new file mode 100644 index 0000000000..bc19d2a5cd --- /dev/null +++ b/apps/www/public/r/styles/default/inline-combobox.json @@ -0,0 +1,17 @@ +{ + "dependencies": [ + "@ariakit/react", + "@udecode/plate-combobox" + ], + "files": [ + { + "content": "import React, {\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n createContext,\n forwardRef,\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport type { PointRef } from 'slate';\n\nimport {\n type ComboboxItemProps,\n Combobox,\n ComboboxItem,\n ComboboxPopover,\n ComboboxProvider,\n Portal,\n useComboboxContext,\n useComboboxStore,\n} from '@ariakit/react';\nimport { cn } from '@udecode/cn';\nimport { filterWords } from '@udecode/plate-combobox';\nimport {\n type UseComboboxInputResult,\n useComboboxInput,\n useHTMLInputCursorState,\n} from '@udecode/plate-combobox/react';\nimport {\n type TElement,\n createPointRef,\n getPointBefore,\n insertText,\n moveSelection,\n} from '@udecode/plate-common';\nimport {\n findNodePath,\n useComposedRef,\n useEditorRef,\n} from '@udecode/plate-common/react';\nimport { cva } from 'class-variance-authority';\n\ntype FilterFn = (\n item: { value: string; keywords?: string[] },\n search: string\n) => boolean;\n\ninterface InlineComboboxContextValue {\n filter: FilterFn | false;\n inputProps: UseComboboxInputResult['props'];\n inputRef: RefObject;\n removeInput: UseComboboxInputResult['removeInput'];\n setHasEmpty: (hasEmpty: boolean) => void;\n showTrigger: boolean;\n trigger: string;\n}\n\nconst InlineComboboxContext = createContext(\n null as any\n);\n\nexport const defaultFilter: FilterFn = ({ keywords = [], value }, search) =>\n [value, ...keywords].some((keyword) => filterWords(keyword, search));\n\ninterface InlineComboboxProps {\n children: ReactNode;\n element: TElement;\n trigger: string;\n filter?: FilterFn | false;\n hideWhenNoValue?: boolean;\n setValue?: (value: string) => void;\n showTrigger?: boolean;\n value?: string;\n}\n\nconst InlineCombobox = ({\n children,\n element,\n filter = defaultFilter,\n hideWhenNoValue = false,\n setValue: setValueProp,\n showTrigger = true,\n trigger,\n value: valueProp,\n}: InlineComboboxProps) => {\n const editor = useEditorRef();\n const inputRef = React.useRef(null);\n const cursorState = useHTMLInputCursorState(inputRef);\n\n const [valueState, setValueState] = useState('');\n const hasValueProp = valueProp !== undefined;\n const value = hasValueProp ? valueProp : valueState;\n\n const setValue = useCallback(\n (newValue: string) => {\n setValueProp?.(newValue);\n\n if (!hasValueProp) {\n setValueState(newValue);\n }\n },\n [setValueProp, hasValueProp]\n );\n\n /**\n * Track the point just before the input element so we know where to\n * insertText if the combobox closes due to a selection change.\n */\n const [insertPoint, setInsertPoint] = useState(null);\n\n useEffect(() => {\n const path = findNodePath(editor, element);\n\n if (!path) return;\n\n const point = getPointBefore(editor, path);\n\n if (!point) return;\n\n const pointRef = createPointRef(editor, point);\n setInsertPoint(pointRef);\n\n return () => {\n pointRef.unref();\n };\n }, [editor, element]);\n\n const { props: inputProps, removeInput } = useComboboxInput({\n cancelInputOnBlur: false,\n cursorState,\n ref: inputRef,\n onCancelInput: (cause) => {\n if (cause !== 'backspace') {\n insertText(editor, trigger + value, {\n at: insertPoint?.current ?? undefined,\n });\n }\n if (cause === 'arrowLeft' || cause === 'arrowRight') {\n moveSelection(editor, {\n distance: 1,\n reverse: cause === 'arrowLeft',\n });\n }\n },\n });\n\n const [hasEmpty, setHasEmpty] = useState(false);\n\n const contextValue: InlineComboboxContextValue = useMemo(\n () => ({\n filter,\n inputProps,\n inputRef,\n removeInput,\n setHasEmpty,\n showTrigger,\n trigger,\n }),\n [\n trigger,\n showTrigger,\n filter,\n inputRef,\n inputProps,\n removeInput,\n setHasEmpty,\n ]\n );\n\n const store = useComboboxStore({\n // open: ,\n setValue: (newValue) => startTransition(() => setValue(newValue)),\n });\n\n const items = store.useState('items');\n\n /**\n * If there is no active ID and the list of items changes, select the first\n * item.\n */\n useEffect(() => {\n if (!store.getState().activeId) {\n store.setActiveId(store.first());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, store]);\n\n return (\n \n 0 || hasEmpty) &&\n (!hideWhenNoValue || value.length > 0)\n }\n store={store}\n >\n \n {children}\n \n \n \n );\n};\n\nconst InlineComboboxInput = forwardRef<\n HTMLInputElement,\n HTMLAttributes\n>(({ className, ...props }, propRef) => {\n const {\n inputProps,\n inputRef: contextRef,\n showTrigger,\n trigger,\n } = useContext(InlineComboboxContext);\n\n const store = useComboboxContext()!;\n const value = store.useState('value');\n\n const ref = useComposedRef(propRef, contextRef);\n\n /**\n * To create an auto-resizing input, we render a visually hidden span\n * containing the input value and position the input element on top of it.\n * This works well for all cases except when input exceeds the width of the\n * container.\n */\n\n return (\n <>\n {showTrigger && trigger}\n\n \n \n {value || '\\u200B'}\n \n\n \n \n \n );\n});\n\nInlineComboboxInput.displayName = 'InlineComboboxInput';\n\nconst InlineComboboxContent: typeof ComboboxPopover = ({\n className,\n ...props\n}) => {\n // Portal prevents CSS from leaking into popover\n return (\n \n \n \n );\n};\n\nconst comboboxItemVariants = cva(\n 'relative flex h-9 select-none items-center rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n {\n defaultVariants: {\n interactive: true,\n },\n variants: {\n interactive: {\n false: '',\n true: 'cursor-pointer transition-colors hover:bg-accent hover:text-accent-foreground data-[active-item=true]:bg-accent data-[active-item=true]:text-accent-foreground',\n },\n },\n }\n);\n\nexport type InlineComboboxItemProps = {\n keywords?: string[];\n} & ComboboxItemProps &\n Required>;\n\nconst InlineComboboxItem = ({\n className,\n keywords,\n onClick,\n ...props\n}: InlineComboboxItemProps) => {\n const { value } = props;\n\n const { filter, removeInput } = useContext(InlineComboboxContext);\n\n const store = useComboboxContext()!;\n\n // Optimization: Do not subscribe to value if filter is false\n const search = filter && store.useState('value');\n\n const visible = useMemo(\n () => !filter || filter({ keywords, value }, search as string),\n [filter, value, keywords, search]\n );\n\n if (!visible) return null;\n\n return (\n {\n removeInput(true);\n onClick?.(event);\n }}\n {...props}\n />\n );\n};\n\nconst InlineComboboxEmpty = ({\n children,\n className,\n}: HTMLAttributes) => {\n const { setHasEmpty } = useContext(InlineComboboxContext);\n const store = useComboboxContext()!;\n const items = store.useState('items');\n\n useEffect(() => {\n setHasEmpty(true);\n\n return () => {\n setHasEmpty(false);\n };\n }, [setHasEmpty]);\n\n if (items.length > 0) return null;\n\n return (\n \n {children}\n \n );\n};\n\nexport {\n InlineCombobox,\n InlineComboboxContent,\n InlineComboboxEmpty,\n InlineComboboxInput,\n InlineComboboxItem,\n};\n", + "path": "plate-ui/inline-combobox.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "inline-combobox", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/input.json b/apps/www/public/r/styles/default/input.json new file mode 100644 index 0000000000..6f913b7f35 --- /dev/null +++ b/apps/www/public/r/styles/default/input.json @@ -0,0 +1,14 @@ +{ + "dependencies": [], + "files": [ + { + "content": "import { withVariants } from '@udecode/cn';\nimport { cva } from 'class-variance-authority';\n\nexport const inputVariants = cva(\n 'flex w-full rounded-md bg-transparent text-sm file:border-0 file:bg-background file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n {\n defaultVariants: {\n h: 'md',\n variant: 'default',\n },\n variants: {\n h: {\n md: 'h-10 px-3 py-2',\n sm: 'h-9 px-3 py-2',\n },\n variant: {\n default:\n 'border border-input ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n ghost: 'border-none focus-visible:ring-transparent',\n },\n },\n }\n);\n\nexport const Input = withVariants('input', inputVariants, ['variant', 'h']);\n", + "path": "plate-ui/input.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "input", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/insert-dropdown-menu.json b/apps/www/public/r/styles/default/insert-dropdown-menu.json new file mode 100644 index 0000000000..e4574215c1 --- /dev/null +++ b/apps/www/public/r/styles/default/insert-dropdown-menu.json @@ -0,0 +1,20 @@ +{ + "dependencies": [ + "@udecode/plate-block-quote", + "@udecode/plate-heading" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { BlockquotePlugin } from '@udecode/plate-block-quote/react';\nimport { insertEmptyElement } from '@udecode/plate-common';\nimport {\n ParagraphPlugin,\n focusEditor,\n useEditorRef,\n} from '@udecode/plate-common/react';\nimport { HEADING_KEYS } from '@udecode/plate-heading';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nconst items = [\n {\n items: [\n {\n description: 'Paragraph',\n icon: Icons.paragraph,\n label: 'Paragraph',\n value: ParagraphPlugin.key,\n },\n {\n description: 'Heading 1',\n icon: Icons.h1,\n label: 'Heading 1',\n value: HEADING_KEYS.h1,\n },\n {\n description: 'Heading 2',\n icon: Icons.h2,\n label: 'Heading 2',\n value: HEADING_KEYS.h2,\n },\n {\n description: 'Heading 3',\n icon: Icons.h3,\n label: 'Heading 3',\n value: HEADING_KEYS.h3,\n },\n {\n description: 'Quote (⌘+⇧+.)',\n icon: Icons.blockquote,\n label: 'Quote',\n value: BlockquotePlugin.key,\n },\n // {\n // value: TablePlugin.key,\n // label: 'Table',\n // description: 'Table',\n // icon: Icons.table,\n // },\n // {\n // value: 'ul',\n // label: 'Bulleted list',\n // description: 'Bulleted list',\n // icon: Icons.ul,\n // },\n // {\n // value: 'ol',\n // label: 'Numbered list',\n // description: 'Numbered list',\n // icon: Icons.ol,\n // },\n // {\n // value: HorizontalRulePlugin.key,\n // label: 'Divider',\n // description: 'Divider (---)',\n // icon: Icons.hr,\n // },\n ],\n label: 'Basic blocks',\n },\n // {\n // label: 'Media',\n // items: [\n // {\n // value: CodeBlockPlugin.key,\n // label: 'Code',\n // description: 'Code (```)',\n // icon: Icons.codeblock,\n // },\n // {\n // value: ImagePlugin.key,\n // label: 'Image',\n // description: 'Image',\n // icon: Icons.image,\n // },\n // {\n // value: MediaEmbedPlugin.key,\n // label: 'Embed',\n // description: 'Embed',\n // icon: Icons.embed,\n // },\n // {\n // value: ExcalidrawPlugin.key,\n // label: 'Excalidraw',\n // description: 'Excalidraw',\n // icon: Icons.excalidraw,\n // },\n // ],\n // },\n // {\n // label: 'Inline',\n // items: [\n // {\n // value: LinkPlugin.key,\n // label: 'Link',\n // description: 'Link',\n // icon: Icons.link,\n // },\n // ],\n // },\n];\n\nexport function InsertDropdownMenu(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const openState = useOpenState();\n\n return (\n \n \n \n \n \n \n\n \n {items.map(({ items: nestedItems, label }, index) => (\n \n {index !== 0 && }\n\n {label}\n {nestedItems.map(\n ({ icon: Icon, label: itemLabel, value: type }) => (\n {\n switch (type) {\n // case CodeBlockPlugin.key: {\n // insertEmptyCodeBlock(editor);\n //\n // break;\n // }\n // case ImagePlugin.key: {\n // await insertMedia(editor, { type: ImagePlugin.key });\n //\n // break;\n // }\n // case MediaEmbedPlugin.key: {\n // await insertMedia(editor, {\n // type: MediaEmbedPlugin.key,\n // });\n //\n // break;\n // }\n // case 'ul':\n // case 'ol': {\n // insertEmptyElement(editor, ParagraphPlugin.key, {\n // select: true,\n // nextBlock: true,\n // });\n //\n // if (settingsStore.get.checkedId(IndentListPlugin.key)) {\n // toggleIndentList(editor, {\n // listStyleType: type === 'ul' ? 'disc' : 'decimal',\n // });\n // } else if (settingsStore.get.checkedId('list')) {\n // toggleList(editor, { type });\n // }\n //\n // break;\n // }\n // case TablePlugin.key: {\n // insertTable(editor);\n //\n // break;\n // }\n // case LinkPlugin.key: {\n // triggerFloatingLink(editor, { focused: true });\n //\n // break;\n // }\n default: {\n insertEmptyElement(editor, type, {\n nextBlock: true,\n select: true,\n });\n }\n }\n\n focusEditor(editor);\n }}\n >\n \n {itemLabel}\n \n )\n )}\n \n ))}\n \n \n );\n}\n", + "path": "plate-ui/insert-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "insert-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/kbd-leaf.json b/apps/www/public/r/styles/default/kbd-leaf.json new file mode 100644 index 0000000000..c0591669d6 --- /dev/null +++ b/apps/www/public/r/styles/default/kbd-leaf.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-kbd" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateLeaf } from '@udecode/plate-common/react';\n\nexport const KbdLeaf = withRef(\n ({ children, className, ...props }, ref) => (\n \n {children}\n \n )\n);\n", + "path": "plate-ui/kbd-leaf.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "kbd-leaf", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/line-height-dropdown-menu.json b/apps/www/public/r/styles/default/line-height-dropdown-menu.json new file mode 100644 index 0000000000..c5206046b0 --- /dev/null +++ b/apps/www/public/r/styles/default/line-height-dropdown-menu.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "@udecode/plate-line-height" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport {\n useLineHeightDropdownMenu,\n useLineHeightDropdownMenuState,\n} from '@udecode/plate-line-height/react';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nexport function LineHeightDropdownMenu({ ...props }: DropdownMenuProps) {\n const openState = useOpenState();\n const state = useLineHeightDropdownMenuState();\n const { radioGroupProps } = useLineHeightDropdownMenu(state);\n\n return (\n \n \n \n \n \n \n\n \n \n {state.values.map((_value) => (\n \n {_value}\n \n ))}\n \n \n \n );\n}\n", + "path": "plate-ui/line-height-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "line-height-dropdown-menu", + "registryDependencies": [ + "toolbar", + "dropdown-menu" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/link-element.json b/apps/www/public/r/styles/default/link-element.json new file mode 100644 index 0000000000..2403a9bbb3 --- /dev/null +++ b/apps/www/public/r/styles/default/link-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-link" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { TLinkElement } from '@udecode/plate-link';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement, useElement } from '@udecode/plate-common/react';\nimport { useLink } from '@udecode/plate-link/react';\n\nexport const LinkElement = withRef(\n ({ children, className, ...props }, ref) => {\n const element = useElement();\n const { props: linkProps } = useLink({ element });\n\n return (\n \n {children}\n \n );\n }\n);\n", + "path": "plate-ui/link-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "link-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/link-floating-toolbar.json b/apps/www/public/r/styles/default/link-floating-toolbar.json new file mode 100644 index 0000000000..8b9ff6eb19 --- /dev/null +++ b/apps/www/public/r/styles/default/link-floating-toolbar.json @@ -0,0 +1,21 @@ +{ + "dependencies": [ + "@udecode/plate-link" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport { useFormInputProps } from '@udecode/plate-common/react';\nimport {\n type UseVirtualFloatingOptions,\n flip,\n offset,\n} from '@udecode/plate-floating';\nimport {\n type LinkFloatingToolbarState,\n FloatingLinkUrlInput,\n LinkOpenButton,\n useFloatingLinkEdit,\n useFloatingLinkEditState,\n useFloatingLinkInsert,\n useFloatingLinkInsertState,\n} from '@udecode/plate-link/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { buttonVariants } from './button';\nimport { inputVariants } from './input';\nimport { popoverVariants } from './popover';\nimport { Separator } from './separator';\n\nconst floatingOptions: UseVirtualFloatingOptions = {\n middleware: [\n offset(12),\n flip({\n fallbackPlacements: ['bottom-end', 'top-start', 'top-end'],\n padding: 12,\n }),\n ],\n placement: 'bottom-start',\n};\n\nexport interface LinkFloatingToolbarProps {\n state?: LinkFloatingToolbarState;\n}\n\nexport function LinkFloatingToolbar({ state }: LinkFloatingToolbarProps) {\n const insertState = useFloatingLinkInsertState({\n ...state,\n floatingOptions: {\n ...floatingOptions,\n ...state?.floatingOptions,\n },\n });\n const {\n hidden,\n props: insertProps,\n ref: insertRef,\n textInputProps,\n } = useFloatingLinkInsert(insertState);\n\n const editState = useFloatingLinkEditState({\n ...state,\n floatingOptions: {\n ...floatingOptions,\n ...state?.floatingOptions,\n },\n });\n const {\n editButtonProps,\n props: editProps,\n ref: editRef,\n unlinkButtonProps,\n } = useFloatingLinkEdit(editState);\n const inputProps = useFormInputProps({\n preventDefaultOnEnterKeydown: true,\n });\n\n if (hidden) return null;\n\n const input = (\n
\n
\n
\n \n
\n\n \n
\n \n
\n
\n \n
\n \n
\n
\n );\n\n const editContent = editState.isEditing ? (\n input\n ) : (\n
\n \n Edit link\n \n\n \n\n \n \n \n\n \n\n \n \n \n
\n );\n\n return (\n <>\n \n {input}\n \n\n \n {editContent}\n \n \n );\n}\n", + "path": "plate-ui/link-floating-toolbar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "link-floating-toolbar", + "registryDependencies": [ + "button", + "input", + "popover", + "separator" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/link-toolbar-button.json b/apps/www/public/r/styles/default/link-toolbar-button.json new file mode 100644 index 0000000000..8b5c675a42 --- /dev/null +++ b/apps/www/public/r/styles/default/link-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-link" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport {\n useLinkToolbarButton,\n useLinkToolbarButtonState,\n} from '@udecode/plate-link/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const LinkToolbarButton = withRef((rest, ref) => {\n const state = useLinkToolbarButtonState();\n const { props } = useLinkToolbarButton(state);\n\n return (\n \n \n \n );\n});\n", + "path": "plate-ui/link-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "link-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/list-element.json b/apps/www/public/r/styles/default/list-element.json new file mode 100644 index 0000000000..8e7e5db116 --- /dev/null +++ b/apps/www/public/r/styles/default/list-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-list" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef, withVariants } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { cva } from 'class-variance-authority';\n\nconst listVariants = cva('m-0 ps-6', {\n variants: {\n variant: {\n ol: 'list-decimal',\n ul: 'list-disc [&_ul]:list-[circle] [&_ul_ul]:list-[square]',\n },\n },\n});\n\nconst ListElementVariants = withVariants(PlateElement, listVariants, [\n 'variant',\n]);\n\nexport const ListElement = withRef(\n ({ children, variant = 'ul', ...props }, ref) => {\n const Component = variant!;\n\n return (\n \n {children}\n \n );\n }\n);\n", + "path": "plate-ui/list-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "list-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/list-toolbar-button.json b/apps/www/public/r/styles/default/list-toolbar-button.json new file mode 100644 index 0000000000..c7adf0008d --- /dev/null +++ b/apps/www/public/r/styles/default/list-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-list" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport {\n BulletedListPlugin,\n useListToolbarButton,\n useListToolbarButtonState,\n} from '@udecode/plate-list/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const ListToolbarButton = withRef<\n typeof ToolbarButton,\n {\n nodeType?: string;\n }\n>(({ nodeType = BulletedListPlugin.key, ...rest }, ref) => {\n const state = useListToolbarButtonState({ nodeType });\n const { props } = useListToolbarButton(state);\n\n return (\n \n {nodeType === BulletedListPlugin.key ? : }\n \n );\n});\n", + "path": "plate-ui/list-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "list-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/mark-toolbar-button.json b/apps/www/public/r/styles/default/mark-toolbar-button.json new file mode 100644 index 0000000000..c5e554328d --- /dev/null +++ b/apps/www/public/r/styles/default/mark-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport {\n useMarkToolbarButton,\n useMarkToolbarButtonState,\n} from '@udecode/plate-common/react';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const MarkToolbarButton = withRef<\n typeof ToolbarButton,\n {\n nodeType: string;\n clear?: string[] | string;\n }\n>(({ clear, nodeType, ...rest }, ref) => {\n const state = useMarkToolbarButtonState({ clear, nodeType });\n const { props } = useMarkToolbarButton(state);\n\n return ;\n});\n", + "path": "plate-ui/mark-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "mark-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/media-embed-element.json b/apps/www/public/r/styles/default/media-embed-element.json new file mode 100644 index 0000000000..230ee02b18 --- /dev/null +++ b/apps/www/public/r/styles/default/media-embed-element.json @@ -0,0 +1,22 @@ +{ + "dependencies": [ + "@udecode/plate-media", + "react-tweet", + "react-lite-youtube-embed" + ], + "files": [ + { + "content": "import React from 'react';\nimport LiteYouTubeEmbed from 'react-lite-youtube-embed';\nimport { Tweet } from 'react-tweet';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement, withHOC } from '@udecode/plate-common/react';\nimport { parseTwitterUrl, parseVideoUrl } from '@udecode/plate-media';\nimport { MediaEmbedPlugin, useMediaState } from '@udecode/plate-media/react';\nimport { ResizableProvider, useResizableStore } from '@udecode/plate-resizable';\n\nimport { Caption, CaptionTextarea } from './caption';\nimport { MediaPopover } from './media-popover';\nimport {\n Resizable,\n ResizeHandle,\n mediaResizeHandleVariants,\n} from './resizable';\n\nexport const MediaEmbedElement = withHOC(\n ResizableProvider,\n withRef(({ children, className, ...props }, ref) => {\n const {\n align = 'center',\n embed,\n focused,\n isTweet,\n isVideo,\n isYoutube,\n readOnly,\n selected,\n } = useMediaState({\n urlParsers: [parseTwitterUrl, parseVideoUrl],\n });\n const width = useResizableStore().get.width();\n const provider = embed?.provider;\n\n return (\n \n \n
\n \n \n\n {isVideo ? (\n isYoutube ? (\n _iframe]:absolute [&_>_iframe]:left-0 [&_>_iframe]:top-0 [&_>_iframe]:size-full',\n '[&_>_.lty-playbtn]:z-[1] [&_>_.lty-playbtn]:h-[46px] [&_>_.lty-playbtn]:w-[70px] [&_>_.lty-playbtn]:rounded-[14%] [&_>_.lty-playbtn]:bg-[#212121] [&_>_.lty-playbtn]:opacity-80 [&_>_.lty-playbtn]:[transition:all_0.2s_cubic-bezier(0,_0,_0.2,_1)]',\n '[&:hover_>_.lty-playbtn]:bg-[red] [&:hover_>_.lty-playbtn]:opacity-100',\n '[&_>_.lty-playbtn]:before:border-y-[11px] [&_>_.lty-playbtn]:before:border-l-[19px] [&_>_.lty-playbtn]:before:border-r-0 [&_>_.lty-playbtn]:before:border-[transparent_transparent_transparent_#fff] [&_>_.lty-playbtn]:before:content-[\"\"]',\n '[&_>_.lty-playbtn]:absolute [&_>_.lty-playbtn]:left-1/2 [&_>_.lty-playbtn]:top-1/2 [&_>_.lty-playbtn]:[transform:translate3d(-50%,-50%,0)]',\n '[&_>_.lty-playbtn]:before:absolute [&_>_.lty-playbtn]:before:left-1/2 [&_>_.lty-playbtn]:before:top-1/2 [&_>_.lty-playbtn]:before:[transform:translate3d(-50%,-50%,0)]',\n '[&.lyt-activated]:cursor-[unset]',\n '[&.lyt-activated]:before:pointer-events-none [&.lyt-activated]:before:opacity-0',\n '[&.lyt-activated_>_.lty-playbtn]:pointer-events-none [&.lyt-activated_>_.lty-playbtn]:!opacity-0'\n )}\n />\n ) : (\n \n \n \n )\n ) : null}\n\n {isTweet && (\n \n \n \n )}\n\n \n \n\n \n \n \n
\n\n {children}\n \n
\n );\n })\n);\n", + "path": "plate-ui/media-embed-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "media-embed-element", + "registryDependencies": [ + "media-popover", + "caption", + "resizable" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/media-popover.json b/apps/www/public/r/styles/default/media-popover.json new file mode 100644 index 0000000000..41bfb7c992 --- /dev/null +++ b/apps/www/public/r/styles/default/media-popover.json @@ -0,0 +1,21 @@ +{ + "dependencies": [ + "@udecode/plate-media" + ], + "files": [ + { + "content": "import React, { useEffect } from 'react';\n\nimport {\n type WithRequiredKey,\n isSelectionExpanded,\n} from '@udecode/plate-common';\nimport {\n useEditorSelector,\n useElement,\n useRemoveNodeButton,\n} from '@udecode/plate-common/react';\nimport {\n FloatingMedia as FloatingMediaPrimitive,\n floatingMediaActions,\n useFloatingMediaSelectors,\n} from '@udecode/plate-media/react';\nimport { useReadOnly, useSelected } from 'slate-react';\n\nimport { Icons } from '@/components/icons';\n\nimport { Button, buttonVariants } from './button';\nimport { CaptionButton } from './caption';\nimport { inputVariants } from './input';\nimport { Popover, PopoverAnchor, PopoverContent } from './popover';\nimport { Separator } from './separator';\n\nexport interface MediaPopoverProps {\n children: React.ReactNode;\n plugin: WithRequiredKey;\n}\n\nexport function MediaPopover({ children, plugin }: MediaPopoverProps) {\n const readOnly = useReadOnly();\n const selected = useSelected();\n\n const selectionCollapsed = useEditorSelector(\n (editor) => !isSelectionExpanded(editor),\n []\n );\n const isOpen = !readOnly && selected && selectionCollapsed;\n const isEditing = useFloatingMediaSelectors().isEditing();\n\n useEffect(() => {\n if (!isOpen && isEditing) {\n floatingMediaActions.isEditing(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const element = useElement();\n const { props: buttonProps } = useRemoveNodeButton({ element });\n\n if (readOnly) return <>{children};\n\n return (\n \n {children}\n\n e.preventDefault()}\n >\n {isEditing ? (\n
\n
\n
\n \n
\n\n \n
\n
\n ) : (\n
\n \n Edit link\n \n\n Caption\n\n \n\n \n
\n )}\n \n
\n );\n}\n", + "path": "plate-ui/media-popover.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "media-popover", + "registryDependencies": [ + "button", + "input", + "popover", + "separator" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/media-toolbar-button.json b/apps/www/public/r/styles/default/media-toolbar-button.json new file mode 100644 index 0000000000..32f49e291d --- /dev/null +++ b/apps/www/public/r/styles/default/media-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-media" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport {\n type ImagePlugin,\n type MediaEmbedPlugin,\n useMediaToolbarButton,\n} from '@udecode/plate-media/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const MediaToolbarButton = withRef<\n typeof ToolbarButton,\n {\n nodeType?: typeof ImagePlugin.key | typeof MediaEmbedPlugin.key;\n }\n>(({ nodeType, ...rest }, ref) => {\n const { props } = useMediaToolbarButton({ nodeType });\n\n return (\n \n \n \n );\n});\n", + "path": "plate-ui/media-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "media-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/mention-element.json b/apps/www/public/r/styles/default/mention-element.json new file mode 100644 index 0000000000..654419f28d --- /dev/null +++ b/apps/www/public/r/styles/default/mention-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-mention" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { TMentionElement } from '@udecode/plate-mention';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { getHandler } from '@udecode/plate-common';\nimport { PlateElement, useElement } from '@udecode/plate-common/react';\nimport { useFocused, useSelected } from 'slate-react';\n\nexport const MentionElement = withRef<\n typeof PlateElement,\n {\n prefix?: string;\n renderLabel?: (mentionable: TMentionElement) => string;\n onClick?: (mentionNode: any) => void;\n }\n>(({ children, className, prefix, renderLabel, onClick, ...props }, ref) => {\n const element = useElement();\n const selected = useSelected();\n const focused = useFocused();\n\n return (\n \n {prefix}\n {renderLabel ? renderLabel(element) : element.value}\n {children}\n \n );\n});\n", + "path": "plate-ui/mention-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "mention-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/mention-input-element.json b/apps/www/public/r/styles/default/mention-input-element.json new file mode 100644 index 0000000000..0c7ed62d07 --- /dev/null +++ b/apps/www/public/r/styles/default/mention-input-element.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-mention" + ], + "files": [ + { + "content": "import React, { useState } from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { getMentionOnSelectItem } from '@udecode/plate-mention';\n\nimport {\n InlineCombobox,\n InlineComboboxContent,\n InlineComboboxEmpty,\n InlineComboboxInput,\n InlineComboboxItem,\n} from './inline-combobox';\n\nconst onSelectItem = getMentionOnSelectItem();\n\nexport const MentionInputElement = withRef(\n ({ className, ...props }, ref) => {\n const { children, editor, element } = props;\n const [search, setSearch] = useState('');\n\n return (\n \n \n \n \n \n\n \n No results found\n\n {MENTIONABLES.map((item) => (\n onSelectItem(editor, item, search)}\n >\n {item.text}\n \n ))}\n \n \n\n {children}\n \n );\n }\n);\n\nexport const MENTIONABLES = [\n { key: '0', text: 'Aayla Secura' },\n { key: '1', text: 'Adi Gallia' },\n {\n key: '2',\n text: 'Admiral Dodd Rancit',\n },\n {\n key: '3',\n text: 'Admiral Firmus Piett',\n },\n {\n key: '4',\n text: 'Admiral Gial Ackbar',\n },\n { key: '5', text: 'Admiral Ozzel' },\n { key: '6', text: 'Admiral Raddus' },\n {\n key: '7',\n text: 'Admiral Terrinald Screed',\n },\n { key: '8', text: 'Admiral Trench' },\n {\n key: '9',\n text: 'Admiral U.O. Statura',\n },\n { key: '10', text: 'Agen Kolar' },\n { key: '11', text: 'Agent Kallus' },\n {\n key: '12',\n text: 'Aiolin and Morit Astarte',\n },\n { key: '13', text: 'Aks Moe' },\n { key: '14', text: 'Almec' },\n { key: '15', text: 'Alton Kastle' },\n { key: '16', text: 'Amee' },\n { key: '17', text: 'AP-5' },\n { key: '18', text: 'Armitage Hux' },\n { key: '19', text: 'Artoo' },\n { key: '20', text: 'Arvel Crynyd' },\n { key: '21', text: 'Asajj Ventress' },\n { key: '22', text: 'Aurra Sing' },\n { key: '23', text: 'AZI-3' },\n { key: '24', text: 'Bala-Tik' },\n { key: '25', text: 'Barada' },\n { key: '26', text: 'Bargwill Tomder' },\n { key: '27', text: 'Baron Papanoida' },\n { key: '28', text: 'Barriss Offee' },\n { key: '29', text: 'Baze Malbus' },\n { key: '30', text: 'Bazine Netal' },\n { key: '31', text: 'BB-8' },\n { key: '32', text: 'BB-9E' },\n { key: '33', text: 'Ben Quadinaros' },\n { key: '34', text: 'Berch Teller' },\n { key: '35', text: 'Beru Lars' },\n { key: '36', text: 'Bib Fortuna' },\n {\n key: '37',\n text: 'Biggs Darklighter',\n },\n { key: '38', text: 'Black Krrsantan' },\n { key: '39', text: 'Bo-Katan Kryze' },\n { key: '40', text: 'Boba Fett' },\n { key: '41', text: 'Bobbajo' },\n { key: '42', text: 'Bodhi Rook' },\n { key: '43', text: 'Borvo the Hutt' },\n { key: '44', text: 'Boss Nass' },\n { key: '45', text: 'Bossk' },\n {\n key: '46',\n text: 'Breha Antilles-Organa',\n },\n { key: '47', text: 'Bren Derlin' },\n { key: '48', text: 'Brendol Hux' },\n { key: '49', text: 'BT-1' },\n];\n", + "path": "plate-ui/mention-input-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "mention-input-element", + "registryDependencies": [ + "inline-combobox" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/mode-dropdown-menu.json b/apps/www/public/r/styles/default/mode-dropdown-menu.json new file mode 100644 index 0000000000..4f581a36ec --- /dev/null +++ b/apps/www/public/r/styles/default/mode-dropdown-menu.json @@ -0,0 +1,17 @@ +{ + "dependencies": [], + "files": [ + { + "content": "import React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport {\n focusEditor,\n useEditorReadOnly,\n useEditorRef,\n usePlateStore,\n} from '@udecode/plate-common/react';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nexport function ModeDropdownMenu(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const setReadOnly = usePlateStore().set.readOnly();\n const readOnly = useEditorReadOnly();\n const openState = useOpenState();\n\n let value = 'editing';\n\n if (readOnly) value = 'viewing';\n\n const item: any = {\n editing: (\n <>\n \n Editing\n \n ),\n viewing: (\n <>\n \n Viewing\n \n ),\n };\n\n return (\n \n \n \n {item[value]}\n
\n \n\n \n {\n if (newValue !== 'viewing') {\n setReadOnly(false);\n }\n if (newValue === 'viewing') {\n setReadOnly(true);\n\n return;\n }\n if (newValue === 'editing') {\n focusEditor(editor);\n\n return;\n }\n }}\n >\n \n {item.editing}\n \n\n \n {item.viewing}\n \n \n \n \n );\n}\n", + "path": "plate-ui/mode-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "mode-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/more-dropdown-menu.json b/apps/www/public/r/styles/default/more-dropdown-menu.json new file mode 100644 index 0000000000..2d094658c8 --- /dev/null +++ b/apps/www/public/r/styles/default/more-dropdown-menu.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "@udecode/plate-basic-marks" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport {\n SubscriptPlugin,\n SuperscriptPlugin,\n} from '@udecode/plate-basic-marks/react';\nimport { focusEditor, useEditorRef } from '@udecode/plate-common/react';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nexport function MoreDropdownMenu(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const openState = useOpenState();\n\n return (\n \n \n \n \n \n \n\n \n {\n editor.tf.toggle.mark({\n key: SuperscriptPlugin.key,\n clear: [SubscriptPlugin.key, SuperscriptPlugin.key],\n });\n focusEditor(editor);\n }}\n >\n \n Superscript\n {/* (⌘+,) */}\n \n {\n editor.tf.toggle.mark({\n key: SubscriptPlugin.key,\n clear: [SuperscriptPlugin.key, SubscriptPlugin.key],\n });\n focusEditor(editor);\n }}\n >\n \n Subscript\n {/* (⌘+.) */}\n \n \n \n );\n}\n", + "path": "plate-ui/more-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "more-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/outdent-toolbar-button.json b/apps/www/public/r/styles/default/outdent-toolbar-button.json new file mode 100644 index 0000000000..1613701961 --- /dev/null +++ b/apps/www/public/r/styles/default/outdent-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-indent" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { useOutdentButton } from '@udecode/plate-indent/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const OutdentToolbarButton = withRef(\n (rest, ref) => {\n const { props } = useOutdentButton();\n\n return (\n \n \n \n );\n }\n);\n", + "path": "plate-ui/outdent-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "outdent-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/paragraph-element.json b/apps/www/public/r/styles/default/paragraph-element.json new file mode 100644 index 0000000000..30c24b2058 --- /dev/null +++ b/apps/www/public/r/styles/default/paragraph-element.json @@ -0,0 +1,13 @@ +{ + "files": [ + { + "content": "import { withCn } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\n\nexport const ParagraphElement = withCn(PlateElement, 'm-0 px-0 py-1');\n", + "path": "plate-ui/paragraph-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "paragraph-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/placeholder.json b/apps/www/public/r/styles/default/placeholder.json new file mode 100644 index 0000000000..7c6f98d460 --- /dev/null +++ b/apps/www/public/r/styles/default/placeholder.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-heading" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn } from '@udecode/cn';\nimport { ParagraphPlugin } from '@udecode/plate-common/react';\nimport {\n type PlaceholderProps,\n createNodeHOC,\n createNodesHOC,\n usePlaceholderState,\n} from '@udecode/plate-common/react';\nimport { HEADING_KEYS } from '@udecode/plate-heading';\n\nexport const Placeholder = (props: PlaceholderProps) => {\n const { children, nodeProps, placeholder } = props;\n\n const { enabled } = usePlaceholderState(props);\n\n return React.Children.map(children, (child) => {\n return React.cloneElement(child, {\n className: child.props.className,\n nodeProps: {\n ...nodeProps,\n className: cn(\n enabled &&\n 'before:absolute before:cursor-text before:opacity-30 before:content-[attr(placeholder)]'\n ),\n placeholder,\n },\n });\n });\n};\n\nexport const withPlaceholder = createNodeHOC(Placeholder);\n\nexport const withPlaceholdersPrimitive = createNodesHOC(Placeholder);\n\nexport const withPlaceholders = (components: any) =>\n withPlaceholdersPrimitive(components, [\n {\n key: ParagraphPlugin.key,\n hideOnBlur: true,\n placeholder: 'Type a paragraph',\n query: {\n maxLevel: 1,\n },\n },\n {\n key: HEADING_KEYS.h1,\n hideOnBlur: false,\n placeholder: 'Untitled',\n },\n ]);\n", + "path": "plate-ui/placeholder.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "placeholder", + "registryDependencies": [ + "paragraph-element" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/plate-types.json b/apps/www/public/r/styles/default/plate-types.json new file mode 100644 index 0000000000..728d50626b --- /dev/null +++ b/apps/www/public/r/styles/default/plate-types.json @@ -0,0 +1,13 @@ +{ + "external": true, + "files": [ + { + "content": "import type React from 'react';\n\nimport type { usePlaygroundEditor } from '@/registry/default/example/playground-demo';\nimport type { BlockquotePlugin } from '@udecode/plate-block-quote/react';\nimport type {\n CodeBlockPlugin,\n CodeLinePlugin,\n} from '@udecode/plate-code-block/react';\nimport type { TCommentText } from '@udecode/plate-comments';\nimport type { ElementOf, TElement, TText } from '@udecode/plate-common';\nimport type { TExcalidrawElement } from '@udecode/plate-excalidraw';\nimport type { ExcalidrawPlugin } from '@udecode/plate-excalidraw/react';\nimport type { HEADING_KEYS } from '@udecode/plate-heading';\nimport type { HorizontalRulePlugin } from '@udecode/plate-horizontal-rule/react';\nimport type { TLinkElement } from '@udecode/plate-link';\nimport type { LinkPlugin } from '@udecode/plate-link/react';\nimport type { TTodoListItemElement } from '@udecode/plate-list';\nimport type {\n BulletedListPlugin,\n ListItemPlugin,\n NumberedListPlugin,\n TodoListPlugin,\n} from '@udecode/plate-list/react';\nimport type { TImageElement, TMediaEmbedElement } from '@udecode/plate-media';\nimport type { ImagePlugin, MediaEmbedPlugin } from '@udecode/plate-media/react';\nimport type {\n TMentionElement,\n TMentionInputElement,\n} from '@udecode/plate-mention';\nimport type {\n MentionInputPlugin,\n MentionPlugin,\n} from '@udecode/plate-mention/react';\nimport type { TTableElement } from '@udecode/plate-table';\nimport type {\n TableCellPlugin,\n TablePlugin,\n TableRowPlugin,\n} from '@udecode/plate-table/react';\nimport type { TToggleElement } from '@udecode/plate-toggle';\nimport type { TogglePlugin } from '@udecode/plate-toggle/react';\n\nimport {\n type ParagraphPlugin,\n useEditorRef,\n} from '@udecode/plate-common/react';\n\n/** Text */\n\nexport type EmptyText = {\n text: '';\n};\n\nexport type PlainText = {\n text: string;\n};\n\nexport interface RichText extends TText, TCommentText {\n backgroundColor?: React.CSSProperties['backgroundColor'];\n bold?: boolean;\n code?: boolean;\n color?: React.CSSProperties['color'];\n fontFamily?: React.CSSProperties['fontFamily'];\n fontSize?: React.CSSProperties['fontSize'];\n fontWeight?: React.CSSProperties['fontWeight'];\n italic?: boolean;\n kbd?: boolean;\n strikethrough?: boolean;\n subscript?: boolean;\n underline?: boolean;\n}\n\n/** Inline Elements */\n\nexport interface MyLinkElement extends TLinkElement {\n children: RichText[];\n type: typeof LinkPlugin.key;\n}\n\nexport interface MyMentionInputElement extends TMentionInputElement {\n children: [PlainText];\n type: typeof MentionInputPlugin.key;\n}\n\nexport interface MyMentionElement extends TMentionElement {\n children: [EmptyText];\n type: typeof MentionPlugin.key;\n}\n\nexport type MyInlineElement =\n | MyLinkElement\n | MyMentionElement\n | MyMentionInputElement;\n\nexport type MyInlineDescendant = MyInlineElement | RichText;\n\nexport type MyInlineChildren = MyInlineDescendant[];\n\n/** Block props */\n\nexport interface MyIndentProps {\n indent?: number;\n}\n\nexport interface MyIndentListProps extends MyIndentProps {\n listRestart?: number;\n listStart?: number;\n listStyleType?: string;\n}\n\nexport interface MyLineHeightProps {\n lineHeight?: React.CSSProperties['lineHeight'];\n}\n\nexport interface MyAlignProps {\n align?: React.CSSProperties['textAlign'];\n}\n\nexport interface MyBlockElement\n extends TElement,\n MyIndentListProps,\n MyLineHeightProps {\n id?: string;\n}\n\n/** Blocks */\n\nexport interface MyParagraphElement extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof ParagraphPlugin.key;\n}\n\nexport interface MyH1Element extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof HEADING_KEYS.h1;\n}\n\nexport interface MyH2Element extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof HEADING_KEYS.h2;\n}\n\nexport interface MyH3Element extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof HEADING_KEYS.h3;\n}\n\nexport interface MyH4Element extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof HEADING_KEYS.h4;\n}\n\nexport interface MyH5Element extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof HEADING_KEYS.h5;\n}\n\nexport interface MyH6Element extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof HEADING_KEYS.h6;\n}\n\nexport interface MyBlockquoteElement extends MyBlockElement {\n children: MyInlineChildren;\n type: typeof BlockquotePlugin.key;\n}\n\nexport interface MyCodeBlockElement extends MyBlockElement {\n children: MyCodeLineElement[];\n type: typeof CodeBlockPlugin.key;\n}\n\nexport interface MyCodeLineElement extends TElement {\n children: PlainText[];\n type: typeof CodeLinePlugin.key;\n}\n\nexport interface MyTableElement extends TTableElement, MyBlockElement {\n children: MyTableRowElement[];\n type: typeof TablePlugin.key;\n}\n\nexport interface MyTableRowElement extends TElement {\n children: MyTableCellElement[];\n type: typeof TableRowPlugin.key;\n}\n\nexport interface MyTableCellElement extends TElement {\n children: MyNestableBlock[];\n type: typeof TableCellPlugin.key;\n}\n\nexport interface MyBulletedListElement extends TElement, MyBlockElement {\n children: MyListItemElement[];\n type: typeof BulletedListPlugin.key;\n}\n\nexport interface MyNumberedListElement extends TElement, MyBlockElement {\n children: MyListItemElement[];\n type: typeof NumberedListPlugin.key;\n}\n\nexport interface MyListItemElement extends TElement, MyBlockElement {\n children: MyInlineChildren;\n type: typeof ListItemPlugin.key;\n}\n\nexport interface MyTodoListElement\n extends TTodoListItemElement,\n MyBlockElement {\n children: MyInlineChildren;\n type: typeof TodoListPlugin.key;\n}\n\nexport interface MyToggleElement extends TToggleElement, MyBlockElement {\n children: MyInlineChildren;\n type: typeof TogglePlugin.key;\n}\n\nexport interface MyImageElement extends TImageElement, MyBlockElement {\n children: [EmptyText];\n type: typeof ImagePlugin.key;\n}\n\nexport interface MyMediaEmbedElement\n extends TMediaEmbedElement,\n MyBlockElement {\n children: [EmptyText];\n type: typeof MediaEmbedPlugin.key;\n}\n\nexport interface MyHrElement extends MyBlockElement {\n children: [EmptyText];\n type: typeof HorizontalRulePlugin.key;\n}\n\nexport interface MyExcalidrawElement\n extends TExcalidrawElement,\n MyBlockElement {\n children: [EmptyText];\n type: typeof ExcalidrawPlugin.key;\n}\n\nexport type MyNestableBlock = MyParagraphElement;\n\nexport type MyElement = ElementOf;\n\nexport type MyBlock = Exclude;\n\nexport type MyRootBlock =\n | MyBlockquoteElement\n | MyBulletedListElement\n | MyCodeBlockElement\n | MyExcalidrawElement\n | MyH1Element\n | MyH2Element\n | MyH3Element\n | MyH4Element\n | MyH5Element\n | MyH6Element\n | MyHrElement\n | MyImageElement\n | MyMediaEmbedElement\n | MyNumberedListElement\n | MyParagraphElement\n | MyTableElement\n | MyTodoListElement\n | MyToggleElement;\n\n/** Editor types */\n\nexport type MyValue = MyRootBlock[];\n\nexport type MyEditor = ReturnType;\n\nexport const useMyEditorRef = () => useEditorRef();\n", + "path": "lib/plate-types.ts", + "target": "", + "type": "registry:lib" + } + ], + "name": "plate-types", + "type": "registry:lib" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/popover.json b/apps/www/public/r/styles/default/popover.json new file mode 100644 index 0000000000..05f59cbf2f --- /dev/null +++ b/apps/www/public/r/styles/default/popover.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-popover" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn, withRef } from '@udecode/cn';\nimport { cva } from 'class-variance-authority';\n\nexport const Popover = PopoverPrimitive.Root;\n\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\n\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const popoverVariants = cva(\n 'w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 print:hidden'\n);\n\nexport const PopoverContent = withRef(\n ({ align = 'center', className, sideOffset = 4, style, ...props }, ref) => (\n \n \n \n )\n);\n", + "path": "plate-ui/popover.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "popover", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/resizable.json b/apps/www/public/r/styles/default/resizable.json new file mode 100644 index 0000000000..bef4ba55a8 --- /dev/null +++ b/apps/www/public/r/styles/default/resizable.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-resizable" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef, withVariants } from '@udecode/cn';\nimport {\n Resizable as ResizablePrimitive,\n ResizeHandle as ResizeHandlePrimitive,\n} from '@udecode/plate-resizable';\nimport { cva } from 'class-variance-authority';\n\nexport const mediaResizeHandleVariants = cva(\n cn(\n 'top-0 flex w-6 select-none flex-col justify-center',\n \"after:flex after:h-16 after:w-[3px] after:rounded-[6px] after:bg-ring after:opacity-0 after:content-['_'] group-hover:after:opacity-100\"\n ),\n {\n variants: {\n direction: {\n left: '-left-3 -ml-3 pl-3',\n right: '-right-3 -mr-3 items-end pr-3',\n },\n },\n }\n);\n\nconst resizeHandleVariants = cva(cn('absolute z-40'), {\n variants: {\n direction: {\n bottom: 'w-full cursor-row-resize',\n left: 'h-full cursor-col-resize',\n right: 'h-full cursor-col-resize',\n top: 'w-full cursor-row-resize',\n },\n },\n});\n\nconst ResizeHandleVariants = withVariants(\n ResizeHandlePrimitive,\n resizeHandleVariants,\n ['direction']\n);\n\nexport const ResizeHandle = withRef(\n (props, ref) => (\n \n )\n);\n\nconst resizableVariants = cva('', {\n variants: {\n align: {\n center: 'mx-auto',\n left: 'mr-auto',\n right: 'ml-auto',\n },\n },\n});\n\nexport const Resizable = withVariants(ResizablePrimitive, resizableVariants, [\n 'align',\n]);\n", + "path": "plate-ui/resizable.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "resizable", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/search-highlight-leaf.json b/apps/www/public/r/styles/default/search-highlight-leaf.json new file mode 100644 index 0000000000..27c4a5f165 --- /dev/null +++ b/apps/www/public/r/styles/default/search-highlight-leaf.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-find-replace" + ], + "files": [ + { + "content": "import { withCn } from '@udecode/cn';\nimport { PlateLeaf } from '@udecode/plate-common/react';\n\nexport const SearchHighlightLeaf = withCn(PlateLeaf, 'bg-yellow-100');\n", + "path": "plate-ui/search-highlight-leaf.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "search-highlight-leaf", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/separator.json b/apps/www/public/r/styles/default/separator.json new file mode 100644 index 0000000000..cc5ff32e73 --- /dev/null +++ b/apps/www/public/r/styles/default/separator.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-separator" + ], + "files": [ + { + "content": "'use client';\n\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { withProps, withVariants } from '@udecode/cn';\nimport { cva } from 'class-variance-authority';\n\nconst separatorVariants = cva('shrink-0 bg-border', {\n defaultVariants: {\n orientation: 'horizontal',\n },\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n});\n\nexport const Separator = withVariants(\n withProps(SeparatorPrimitive.Root, {\n decorative: true,\n orientation: 'horizontal',\n }),\n separatorVariants\n);\n", + "path": "plate-ui/separator.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "separator", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/slash-input-element.json b/apps/www/public/r/styles/default/slash-input-element.json new file mode 100644 index 0000000000..f026267f31 --- /dev/null +++ b/apps/www/public/r/styles/default/slash-input-element.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "@udecode/plate-heading", + "@udecode/plate-indent-list" + ], + "files": [ + { + "content": "import React, { type ComponentType, type SVGProps } from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { type PlateEditor, PlateElement } from '@udecode/plate-common/react';\nimport { DatePlugin } from '@udecode/plate-date/react';\nimport { HEADING_KEYS } from '@udecode/plate-heading';\nimport { ListStyleType, toggleIndentList } from '@udecode/plate-indent-list';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n InlineCombobox,\n InlineComboboxContent,\n InlineComboboxEmpty,\n InlineComboboxInput,\n InlineComboboxItem,\n} from './inline-combobox';\n\ninterface SlashCommandRule {\n icon: ComponentType>;\n onSelect: (editor: PlateEditor) => void;\n value: string;\n keywords?: string[];\n}\n\nconst rules: SlashCommandRule[] = [\n {\n icon: Icons.h1,\n value: 'Heading 1',\n onSelect: (editor) => {\n editor.tf.toggle.block({ type: HEADING_KEYS.h1 });\n },\n },\n {\n icon: Icons.h2,\n value: 'Heading 2',\n onSelect: (editor) => {\n editor.tf.toggle.block({ type: HEADING_KEYS.h2 });\n },\n },\n {\n icon: Icons.h3,\n value: 'Heading 3',\n onSelect: (editor) => {\n editor.tf.toggle.block({ type: HEADING_KEYS.h3 });\n },\n },\n {\n icon: Icons.ul,\n keywords: ['ul', 'unordered list'],\n value: 'Bulleted list',\n onSelect: (editor) => {\n toggleIndentList(editor, {\n listStyleType: ListStyleType.Disc,\n });\n },\n },\n {\n icon: Icons.ol,\n keywords: ['ol', 'ordered list'],\n value: 'Numbered list',\n onSelect: (editor) => {\n toggleIndentList(editor, {\n listStyleType: ListStyleType.Decimal,\n });\n },\n },\n {\n icon: Icons.add,\n keywords: ['inline', 'date'],\n value: 'Date',\n onSelect: (editor) => {\n editor.getTransforms(DatePlugin).insert.date();\n },\n },\n];\n\nexport const SlashInputElement = withRef(\n ({ className, ...props }, ref) => {\n const { children, editor, element } = props;\n\n return (\n \n \n \n\n \n \n No matching commands found\n \n\n {rules.map(({ icon: Icon, keywords, value, onSelect }) => (\n onSelect(editor)}\n keywords={keywords}\n >\n \n {value}\n \n ))}\n \n \n\n {children}\n \n );\n }\n);\n", + "path": "plate-ui/slash-input-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "slash-input-element", + "registryDependencies": [ + "inline-combobox" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/table-cell-element.json b/apps/www/public/r/styles/default/table-cell-element.json new file mode 100644 index 0000000000..a17957cf64 --- /dev/null +++ b/apps/www/public/r/styles/default/table-cell-element.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withProps, withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport {\n useTableCellElement,\n useTableCellElementResizable,\n useTableCellElementResizableState,\n useTableCellElementState,\n} from '@udecode/plate-table/react';\n\nimport { ResizeHandle } from './resizable';\n\nexport const TableCellElement = withRef<\n typeof PlateElement,\n {\n hideBorder?: boolean;\n isHeader?: boolean;\n }\n>(({ children, className, hideBorder, isHeader, style, ...props }, ref) => {\n const { element } = props;\n\n const {\n borders,\n colIndex,\n colSpan,\n hovered,\n hoveredLeft,\n isSelectingCell,\n readOnly,\n rowIndex,\n rowSize,\n selected,\n } = useTableCellElementState();\n const { props: cellProps } = useTableCellElement({ element: props.element });\n const resizableState = useTableCellElementResizableState({\n colIndex,\n colSpan,\n rowIndex,\n });\n\n const { bottomProps, hiddenLeft, leftProps, rightProps } =\n useTableCellElementResizable(resizableState);\n\n const Cell = isHeader ? 'th' : 'td';\n\n return (\n _*]:m-0',\n 'before:size-full',\n selected && 'before:z-10 before:bg-muted',\n \"before:absolute before:box-border before:select-none before:content-['']\",\n borders &&\n cn(\n borders.bottom?.size &&\n `before:border-b before:border-b-border`,\n borders.right?.size && `before:border-r before:border-r-border`,\n borders.left?.size && `before:border-l before:border-l-border`,\n borders.top?.size && `before:border-t before:border-t-border`\n )\n ),\n className\n )}\n {...cellProps}\n {...props}\n style={\n {\n '--cellBackground': element.background,\n ...style,\n } as React.CSSProperties\n }\n >\n \n \n {children}\n \n\n {!isSelectingCell && (\n \n {!readOnly && (\n <>\n \n \n {!hiddenLeft && (\n \n )}\n\n {hovered && (\n \n )}\n {hoveredLeft && (\n \n )}\n \n )}\n \n )}\n \n \n );\n});\n\nTableCellElement.displayName = 'TableCellElement';\n\nexport const TableCellHeaderElement = withProps(TableCellElement, {\n isHeader: true,\n});\n", + "path": "plate-ui/table-cell-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "table-cell-element", + "registryDependencies": [ + "resizable" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/table-dropdown-menu.json b/apps/www/public/r/styles/default/table-dropdown-menu.json new file mode 100644 index 0000000000..eab4f072f7 --- /dev/null +++ b/apps/www/public/r/styles/default/table-dropdown-menu.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { someNode } from '@udecode/plate-common';\nimport {\n focusEditor,\n useEditorPlugin,\n useEditorSelector,\n} from '@udecode/plate-common/react';\nimport { deleteTable, insertTableRow } from '@udecode/plate-table';\nimport {\n TablePlugin,\n deleteColumn,\n deleteRow,\n insertTable,\n} from '@udecode/plate-table/react';\n\nimport { Icons, iconVariants } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nexport function TableDropdownMenu(props: DropdownMenuProps) {\n const tableSelected = useEditorSelector(\n (editor) => someNode(editor, { match: { type: TablePlugin.key } }),\n []\n );\n\n const { editor, tf } = useEditorPlugin(TablePlugin);\n\n const openState = useOpenState();\n\n return (\n \n \n \n \n \n \n\n \n \n \n \n Table\n \n \n {\n insertTable(editor);\n focusEditor(editor);\n }}\n >\n \n Insert table\n \n {\n deleteTable(editor);\n focusEditor(editor);\n }}\n >\n \n Delete table\n \n \n \n\n \n \n \n Column\n \n \n {\n tf.insert.tableColumn();\n focusEditor(editor);\n }}\n >\n \n Insert column after\n \n {\n deleteColumn(editor);\n focusEditor(editor);\n }}\n >\n \n Delete column\n \n \n \n\n \n \n \n Row\n \n \n {\n insertTableRow(editor);\n focusEditor(editor);\n }}\n >\n \n Insert row after\n \n {\n deleteRow(editor);\n focusEditor(editor);\n }}\n >\n \n Delete row\n \n \n \n \n \n );\n}\n", + "path": "plate-ui/table-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "table-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/table-element.json b/apps/www/public/r/styles/default/table-element.json new file mode 100644 index 0000000000..abba3ca04d --- /dev/null +++ b/apps/www/public/r/styles/default/table-element.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport type { TTableElement } from '@udecode/plate-table';\n\nimport { PopoverAnchor } from '@radix-ui/react-popover';\nimport { cn, withRef } from '@udecode/cn';\nimport { isSelectionExpanded } from '@udecode/plate-common';\nimport {\n PlateElement,\n useEditorRef,\n useEditorSelector,\n useElement,\n useRemoveNodeButton,\n withHOC,\n} from '@udecode/plate-common/react';\nimport {\n TableProvider,\n mergeTableCells,\n unmergeTableCells,\n useTableBordersDropdownMenuContentState,\n useTableElement,\n useTableElementState,\n useTableMergeState,\n} from '@udecode/plate-table/react';\nimport { useReadOnly, useSelected } from 'slate-react';\n\nimport { Icons, iconVariants } from '@/components/icons';\n\nimport { Button } from './button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n} from './dropdown-menu';\nimport { Popover, PopoverContent, popoverVariants } from './popover';\nimport { Separator } from './separator';\n\nexport const TableBordersDropdownMenuContent = withRef<\n typeof DropdownMenuPrimitive.Content\n>((props, ref) => {\n const {\n getOnSelectTableBorder,\n hasBottomBorder,\n hasLeftBorder,\n hasNoBorders,\n hasOuterBorders,\n hasRightBorder,\n hasTopBorder,\n } = useTableBordersDropdownMenuContentState();\n\n return (\n \n \n \n
Bottom Border
\n \n \n \n
Top Border
\n \n \n \n
Left Border
\n \n \n \n
Right Border
\n \n\n \n\n \n \n
No Border
\n \n \n \n
Outside Borders
\n \n \n );\n});\n\nexport const TableFloatingToolbar = withRef(\n ({ children, ...props }, ref) => {\n const element = useElement();\n const { props: buttonProps } = useRemoveNodeButton({ element });\n\n const selectionCollapsed = useEditorSelector(\n (editor) => !isSelectionExpanded(editor),\n []\n );\n\n const readOnly = useReadOnly();\n const selected = useSelected();\n const editor = useEditorRef();\n\n const collapsed = !readOnly && selected && selectionCollapsed;\n const open = !readOnly && selected;\n\n const { canMerge, canUnmerge } = useTableMergeState();\n\n const mergeContent = canMerge && (\n mergeTableCells(editor)}\n contentEditable={false}\n isMenu\n >\n \n Merge\n \n );\n\n const unmergeButton = canUnmerge && (\n unmergeTableCells(editor)}\n contentEditable={false}\n isMenu\n >\n \n Unmerge\n \n );\n\n const bordersContent = collapsed && (\n <>\n \n \n \n \n\n \n \n \n \n\n \n \n );\n\n return (\n \n {children}\n {(canMerge || canUnmerge || collapsed) && (\n e.preventDefault()}\n {...props}\n >\n {unmergeButton}\n {mergeContent}\n {bordersContent}\n \n )}\n \n );\n }\n);\n\nexport const TableElement = withHOC(\n TableProvider,\n withRef(({ children, className, ...props }, ref) => {\n const { colSizes, isSelectingCell, marginLeft, minColumnWidth } =\n useTableElementState();\n const { colGroupProps, props: tableProps } = useTableElement();\n\n return (\n \n
\n \n \n \n {colSizes.map((width, index) => (\n \n ))}\n \n\n {children}\n
\n \n
\n
\n );\n })\n);\n", + "path": "plate-ui/table-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "table-element", + "registryDependencies": [ + "dropdown-menu" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/table-row-element.json b/apps/www/public/r/styles/default/table-row-element.json new file mode 100644 index 0000000000..d0b11642cd --- /dev/null +++ b/apps/www/public/r/styles/default/table-row-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-table" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\n\nexport const TableRowElement = withRef<\n typeof PlateElement,\n {\n hideBorder?: boolean;\n }\n>(({ children, hideBorder, ...props }, ref) => {\n return (\n \n {children}\n \n );\n});\n", + "path": "plate-ui/table-row-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "table-row-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/theme-daylight.json b/apps/www/public/r/styles/default/theme-daylight.json new file mode 100644 index 0000000000..4caa9ed2af --- /dev/null +++ b/apps/www/public/r/styles/default/theme-daylight.json @@ -0,0 +1,58 @@ +{ + "cssVars": { + "dark": { + "accent": "36 64% 57%", + "accent-foreground": "36 72% 17%", + "background": "36 39% 88%", + "border": "36 45% 60%", + "card": "36 46% 82%", + "card-foreground": "36 45% 20%", + "chart-1": "25 34% 28%", + "chart-2": "26 36% 34%", + "chart-3": "28 40% 40%", + "chart-4": "31 41% 48%", + "chart-5": "35 43% 53%", + "destructive": "0 84% 37%", + "destructive-foreground": "0 0% 98%", + "foreground": "36 45% 15%", + "input": "36 45% 60%", + "muted": "36 33% 75%", + "muted-foreground": "36 45% 25%", + "popover": "0 0% 100%", + "popover-foreground": "240 10% 3.9%", + "primary": "36 45% 70%", + "primary-foreground": "36 45% 11%", + "ring": "36 45% 30%", + "secondary": "40 35% 77%", + "secondary-foreground": "36 45% 25%" + }, + "light": { + "accent": "36 64% 57%", + "accent-foreground": "36 72% 17%", + "background": "36 39% 88%", + "border": "36 45% 60%", + "card": "36 46% 82%", + "card-foreground": "36 45% 20%", + "chart-1": "25 34% 28%", + "chart-2": "26 36% 34%", + "chart-3": "28 40% 40%", + "chart-4": "31 41% 48%", + "chart-5": "35 43% 53%", + "destructive": "0 84% 37%", + "destructive-foreground": "0 0% 98%", + "foreground": "36 45% 15%", + "input": "36 45% 60%", + "muted": "36 33% 75%", + "muted-foreground": "36 45% 25%", + "popover": "0 0% 100%", + "popover-foreground": "240 10% 3.9%", + "primary": "36 45% 70%", + "primary-foreground": "36 45% 11%", + "ring": "36 45% 30%", + "secondary": "40 35% 77%", + "secondary-foreground": "36 45% 25%" + } + }, + "name": "theme-daylight", + "type": "registry:theme" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/theme-emerald.json b/apps/www/public/r/styles/default/theme-emerald.json new file mode 100644 index 0000000000..40bdec100d --- /dev/null +++ b/apps/www/public/r/styles/default/theme-emerald.json @@ -0,0 +1,58 @@ +{ + "cssVars": { + "dark": { + "accent": "240 3.7% 15.9%", + "accent-foreground": "0 0% 98%", + "background": "240 10% 3.9%", + "border": "240 3.7% 15.9%", + "card": "240 10% 3.9%", + "card-foreground": "0 0% 98%", + "chart-1": "142 88% 28%", + "chart-2": "139 65% 20%", + "chart-3": "140 74% 24%", + "chart-4": "137 55% 15%", + "chart-5": "141 40% 9%", + "destructive": "0 72% 51%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 98%", + "input": "240 3.7% 15.9%", + "muted": "240 3.7% 15.9%", + "muted-foreground": "240 5% 64.9%", + "popover": "240 10% 3.9%", + "popover-foreground": "0 0% 98%", + "primary": "142 86% 28%", + "primary-foreground": "356 29% 98%", + "ring": "142 86% 28%", + "secondary": "240 4.8% 95.9%", + "secondary-foreground": "240 5.9% 10%" + }, + "light": { + "accent": "240 4.8% 95.9%", + "accent-foreground": "240 5.9% 10%", + "background": "0 0% 100%", + "border": "240 5.9% 90%", + "card": "0 0% 100%", + "card-foreground": "240 10% 3.9%", + "chart-1": "139 65% 20%", + "chart-2": "140 74% 44%", + "chart-3": "142 88% 28%", + "chart-4": "137 55% 15%", + "chart-5": "141 40% 9%", + "destructive": "0 72% 51%", + "destructive-foreground": "0 0% 98%", + "foreground": "240 10% 3.9%", + "input": "240 5.9% 90%", + "muted": "240 4.8% 95.9%", + "muted-foreground": "240 3.8% 45%", + "popover": "0 0% 100%", + "popover-foreground": "240 10% 3.9%", + "primary": "142 86% 28%", + "primary-foreground": "356 29% 98%", + "ring": "142 86% 28%", + "secondary": "240 4.8% 95.9%", + "secondary-foreground": "240 5.9% 10%" + } + }, + "name": "theme-emerald", + "type": "registry:theme" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/theme-midnight.json b/apps/www/public/r/styles/default/theme-midnight.json new file mode 100644 index 0000000000..995298a3f4 --- /dev/null +++ b/apps/www/public/r/styles/default/theme-midnight.json @@ -0,0 +1,58 @@ +{ + "cssVars": { + "dark": { + "accent": "240 0% 13%", + "accent-foreground": "60 0% 100%", + "background": "240 5% 6%", + "border": "240 6% 20%", + "card": "240 4% 10%", + "card-foreground": "60 5% 90%", + "chart-1": "359 2% 90%", + "chart-2": "240 1% 74%", + "chart-3": "240 1% 58%", + "chart-4": "240 1% 42%", + "chart-5": "240 2% 26%", + "destructive": "0 60% 50%", + "destructive-foreground": "0 0% 98%", + "foreground": "60 5% 90%", + "input": "240 6% 20%", + "muted": "240 5% 25%", + "muted-foreground": "60 5% 85%", + "popover": "240 5% 15%", + "popover-foreground": "60 5% 85%", + "primary": "240 0% 90%", + "primary-foreground": "60 0% 0%", + "ring": "240 5% 90%", + "secondary": "240 4% 15%", + "secondary-foreground": "60 5% 85%" + }, + "light": { + "accent": "240 0% 13%", + "accent-foreground": "60 0% 100%", + "background": "240 5% 6%", + "border": "240 6% 20%", + "card": "240 4% 10%", + "card-foreground": "60 5% 90%", + "chart-1": "359 2% 90%", + "chart-2": "240 1% 74%", + "chart-3": "240 1% 58%", + "chart-4": "240 1% 42%", + "chart-5": "240 2% 26%", + "destructive": "0 60% 50%", + "destructive-foreground": "0 0% 98%", + "foreground": "60 5% 90%", + "input": "240 6% 20%", + "muted": "240 5% 25%", + "muted-foreground": "60 5% 85%", + "popover": "240 5% 15%", + "popover-foreground": "60 5% 85%", + "primary": "240 0% 90%", + "primary-foreground": "60 0% 0%", + "ring": "240 5% 90%", + "secondary": "240 4% 15%", + "secondary-foreground": "60 5% 85%" + } + }, + "name": "theme-midnight", + "type": "registry:theme" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/todo-list-element.json b/apps/www/public/r/styles/default/todo-list-element.json new file mode 100644 index 0000000000..3bd6e5a247 --- /dev/null +++ b/apps/www/public/r/styles/default/todo-list-element.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-list" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport {\n useTodoListElement,\n useTodoListElementState,\n} from '@udecode/plate-list/react';\n\nimport { Checkbox } from './checkbox';\n\nexport const TodoListElement = withRef(\n ({ children, className, ...props }, ref) => {\n const { element } = props;\n const state = useTodoListElementState({ element });\n const { checkboxProps } = useTodoListElement(state);\n\n return (\n \n \n \n \n \n {children}\n \n \n );\n }\n);\n", + "path": "plate-ui/todo-list-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "todo-list-element", + "registryDependencies": [ + "checkbox" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/toggle-element.json b/apps/www/public/r/styles/default/toggle-element.json new file mode 100644 index 0000000000..6c583fcdef --- /dev/null +++ b/apps/www/public/r/styles/default/toggle-element.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@udecode/plate-toggle" + ], + "files": [ + { + "content": "import { withRef } from '@udecode/cn';\nimport { PlateElement, useElement } from '@udecode/plate-common/react';\nimport {\n useToggleButton,\n useToggleButtonState,\n} from '@udecode/plate-toggle/react';\n\nimport { Icons } from '@/components/icons';\n\nexport const ToggleElement = withRef(\n ({ children, ...props }, ref) => {\n const element = useElement();\n const state = useToggleButtonState(element.id as string);\n const { buttonProps, open } = useToggleButton(state);\n\n return (\n \n
\n \n {open ? : }\n \n {children}\n
\n
\n );\n }\n);\n", + "path": "plate-ui/toggle-element.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "toggle-element", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/toggle-toolbar-button.json b/apps/www/public/r/styles/default/toggle-toolbar-button.json new file mode 100644 index 0000000000..511152b3e7 --- /dev/null +++ b/apps/www/public/r/styles/default/toggle-toolbar-button.json @@ -0,0 +1,18 @@ +{ + "dependencies": [ + "@udecode/plate-toggle" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport {\n useToggleToolbarButton,\n useToggleToolbarButtonState,\n} from '@udecode/plate-toggle/react';\n\nimport { Icons } from '@/components/icons';\n\nimport { ToolbarButton } from './toolbar';\n\nexport const ToggleToolbarButton = withRef(\n (rest, ref) => {\n const state = useToggleToolbarButtonState();\n const { props } = useToggleToolbarButton(state);\n\n return (\n \n \n \n );\n }\n);\n", + "path": "plate-ui/toggle-toolbar-button.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "toggle-toolbar-button", + "registryDependencies": [ + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/toolbar.json b/apps/www/public/r/styles/default/toolbar.json new file mode 100644 index 0000000000..9197df6d92 --- /dev/null +++ b/apps/www/public/r/styles/default/toolbar.json @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "@radix-ui/react-toolbar" + ], + "files": [ + { + "content": "'use client';\n\nimport * as React from 'react';\n\nimport * as ToolbarPrimitive from '@radix-ui/react-toolbar';\nimport { cn, withCn, withRef, withVariants } from '@udecode/cn';\nimport { type VariantProps, cva } from 'class-variance-authority';\n\nimport { Icons } from '@/components/icons';\n\nimport { Separator } from './separator';\nimport { withTooltip } from './tooltip';\n\nexport const Toolbar = withCn(\n ToolbarPrimitive.Root,\n 'relative flex select-none items-center gap-1 bg-background'\n);\n\nexport const ToolbarToggleGroup = withCn(\n ToolbarPrimitive.ToolbarToggleGroup,\n 'flex items-center'\n);\n\nexport const ToolbarLink = withCn(\n ToolbarPrimitive.Link,\n 'font-medium underline underline-offset-4'\n);\n\nexport const ToolbarSeparator = withCn(\n ToolbarPrimitive.Separator,\n 'my-1 w-px shrink-0 bg-border'\n);\n\nconst toolbarButtonVariants = cva(\n cn(\n 'inline-flex items-center justify-center rounded-md text-sm font-medium text-foreground ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n '[&_svg:not([data-icon])]:size-5'\n ),\n {\n defaultVariants: {\n size: 'sm',\n variant: 'default',\n },\n variants: {\n size: {\n default: 'h-10 px-3',\n lg: 'h-11 px-5',\n sm: 'h-9 px-2',\n },\n variant: {\n default:\n 'bg-transparent hover:bg-muted hover:text-muted-foreground aria-checked:bg-accent aria-checked:text-accent-foreground',\n outline:\n 'border border-input bg-transparent hover:bg-accent hover:text-accent-foreground',\n },\n },\n }\n);\n\nconst ToolbarButton = withTooltip(\n // eslint-disable-next-line react/display-name\n React.forwardRef<\n React.ElementRef,\n {\n isDropdown?: boolean;\n pressed?: boolean;\n } & Omit<\n React.ComponentPropsWithoutRef,\n 'asChild' | 'value'\n > &\n VariantProps\n >(\n (\n { children, className, isDropdown, pressed, size, variant, ...props },\n ref\n ) => {\n return typeof pressed === 'boolean' ? (\n \n \n {isDropdown ? (\n <>\n
{children}
\n
\n \n
\n \n ) : (\n children\n )}\n \n \n ) : (\n \n {children}\n \n );\n }\n )\n);\nToolbarButton.displayName = 'ToolbarButton';\n\nexport { ToolbarButton };\n\nexport const ToolbarToggleItem = withVariants(\n ToolbarPrimitive.ToggleItem,\n toolbarButtonVariants,\n ['variant', 'size']\n);\n\nexport const ToolbarGroup = withRef<\n 'div',\n {\n noSeparator?: boolean;\n }\n>(({ children, className, noSeparator }, ref) => {\n const childArr = React.Children.map(children, (c) => c);\n\n if (!childArr || childArr.length === 0) return null;\n\n return (\n
\n {!noSeparator && (\n
\n \n
\n )}\n\n
{children}
\n
\n );\n});\n", + "path": "plate-ui/toolbar.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "toolbar", + "registryDependencies": [ + "tooltip", + "separator" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/tooltip.json b/apps/www/public/r/styles/default/tooltip.json new file mode 100644 index 0000000000..949704ca00 --- /dev/null +++ b/apps/www/public/r/styles/default/tooltip.json @@ -0,0 +1,16 @@ +{ + "dependencies": [ + "@radix-ui/react-tooltip" + ], + "files": [ + { + "content": "'use client';\n\nimport React from 'react';\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { withCn, withProps } from '@udecode/cn';\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\nexport const Tooltip = TooltipPrimitive.Root;\n\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipPortal = TooltipPrimitive.Portal;\n\nexport const TooltipContent = withCn(\n withProps(TooltipPrimitive.Content, {\n sideOffset: 4,\n }),\n 'z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md'\n);\n\nexport function withTooltip<\n T extends React.ComponentType | keyof HTMLElementTagNameMap,\n>(Component: T) {\n return React.forwardRef<\n React.ElementRef,\n {\n tooltipContentProps?: Omit<\n React.ComponentPropsWithoutRef,\n 'children'\n >;\n tooltipProps?: Omit<\n React.ComponentPropsWithoutRef,\n 'children'\n >;\n tooltip?: React.ReactNode;\n } & React.ComponentPropsWithoutRef\n >(function ExtendComponent(\n { tooltip, tooltipContentProps, tooltipProps, ...props },\n ref\n ) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n const component = ;\n\n if (tooltip && mounted) {\n return (\n \n {component}\n\n \n {tooltip}\n \n \n );\n }\n\n return component;\n });\n}\n", + "path": "plate-ui/tooltip.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "tooltip", + "registryDependencies": [], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/turn-into-dropdown-menu.json b/apps/www/public/r/styles/default/turn-into-dropdown-menu.json new file mode 100644 index 0000000000..0ccbce78a8 --- /dev/null +++ b/apps/www/public/r/styles/default/turn-into-dropdown-menu.json @@ -0,0 +1,20 @@ +{ + "dependencies": [ + "@udecode/plate-block-quote", + "@udecode/plate-heading" + ], + "files": [ + { + "content": "import React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { BlockquotePlugin } from '@udecode/plate-block-quote/react';\nimport {\n collapseSelection,\n getNodeEntries,\n isBlock,\n} from '@udecode/plate-common';\nimport {\n ParagraphPlugin,\n focusEditor,\n useEditorRef,\n useEditorSelector,\n} from '@udecode/plate-common/react';\nimport { HEADING_KEYS } from '@udecode/plate-heading';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger,\n useOpenState,\n} from './dropdown-menu';\nimport { ToolbarButton } from './toolbar';\n\nconst items = [\n {\n description: 'Paragraph',\n icon: Icons.paragraph,\n label: 'Paragraph',\n value: ParagraphPlugin.key,\n },\n {\n description: 'Heading 1',\n icon: Icons.h1,\n label: 'Heading 1',\n value: HEADING_KEYS.h1,\n },\n {\n description: 'Heading 2',\n icon: Icons.h2,\n label: 'Heading 2',\n value: HEADING_KEYS.h2,\n },\n {\n description: 'Heading 3',\n icon: Icons.h3,\n label: 'Heading 3',\n value: HEADING_KEYS.h3,\n },\n {\n description: 'Quote (⌘+⇧+.)',\n icon: Icons.blockquote,\n label: 'Quote',\n value: BlockquotePlugin.key,\n },\n // {\n // value: 'ul',\n // label: 'Bulleted list',\n // description: 'Bulleted list',\n // icon: Icons.ul,\n // },\n // {\n // value: 'ol',\n // label: 'Numbered list',\n // description: 'Numbered list',\n // icon: Icons.ol,\n // },\n];\n\nconst defaultItem = items.find((item) => item.value === ParagraphPlugin.key)!;\n\nexport function TurnIntoDropdownMenu(props: DropdownMenuProps) {\n const value: string = useEditorSelector((editor) => {\n let initialNodeType: string = ParagraphPlugin.key;\n let allNodesMatchInitialNodeType = false;\n const codeBlockEntries = getNodeEntries(editor, {\n match: (n) => isBlock(editor, n),\n mode: 'highest',\n });\n const nodes = Array.from(codeBlockEntries);\n\n if (nodes.length > 0) {\n initialNodeType = nodes[0][0].type as string;\n allNodesMatchInitialNodeType = nodes.every(([node]) => {\n const type: string = (node?.type as string) || ParagraphPlugin.key;\n\n return type === initialNodeType;\n });\n }\n\n return allNodesMatchInitialNodeType ? initialNodeType : ParagraphPlugin.key;\n }, []);\n\n const editor = useEditorRef();\n const openState = useOpenState();\n\n const selectedItem =\n items.find((item) => item.value === value) ?? defaultItem;\n const { icon: SelectedItemIcon, label: selectedItemLabel } = selectedItem;\n\n return (\n \n \n \n \n {selectedItemLabel}\n \n \n\n \n Turn into\n\n {\n // if (type === 'ul' || type === 'ol') {\n // if (settingsStore.get.checkedId(IndentListPlugin.key)) {\n // toggleIndentList(editor, {\n // listStyleType: type === 'ul' ? 'disc' : 'decimal',\n // });\n // } else if (settingsStore.get.checkedId('list')) {\n // toggleList(editor, { type });\n // }\n // } else {\n // unwrapList(editor);\n editor.tf.toggle.block({ type });\n // }\n\n collapseSelection(editor);\n focusEditor(editor);\n }}\n >\n {items.map(({ icon: Icon, label, value: itemValue }) => (\n \n \n {label}\n \n ))}\n \n \n \n );\n}\n", + "path": "plate-ui/turn-into-dropdown-menu.tsx", + "target": "", + "type": "registry:ui" + } + ], + "name": "turn-into-dropdown-menu", + "registryDependencies": [ + "dropdown-menu", + "toolbar" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/use-debounce.json b/apps/www/public/r/styles/default/use-debounce.json new file mode 100644 index 0000000000..9fb7aafb2b --- /dev/null +++ b/apps/www/public/r/styles/default/use-debounce.json @@ -0,0 +1,11 @@ +{ + "files": [ + { + "content": "import * as React from 'react';\n\nexport const useDebounce = (value: T, delay = 500) => {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler: NodeJS.Timeout = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n", + "path": "hooks/use-debounce.ts", + "type": "registry:hook" + } + ], + "name": "use-debounce", + "type": "registry:hook" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/default/utils.json b/apps/www/public/r/styles/default/utils.json new file mode 100644 index 0000000000..9f9205a62a --- /dev/null +++ b/apps/www/public/r/styles/default/utils.json @@ -0,0 +1,15 @@ +{ + "dependencies": [ + "clsx", + "tailwind-merge" + ], + "files": [ + { + "content": "import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n", + "path": "lib/utils.ts", + "type": "registry:lib" + } + ], + "name": "utils", + "type": "registry:lib" +} \ No newline at end of file diff --git a/apps/www/public/r/styles/index.json b/apps/www/public/r/styles/index.json new file mode 100644 index 0000000000..ffaacc0086 --- /dev/null +++ b/apps/www/public/r/styles/index.json @@ -0,0 +1,6 @@ +[ + { + "label": "Default", + "name": "default" + } +] \ No newline at end of file diff --git a/apps/www/public/r/themes.css b/apps/www/public/r/themes.css new file mode 100644 index 0000000000..41f074cc5c --- /dev/null +++ b/apps/www/public/r/themes.css @@ -0,0 +1,768 @@ + +.theme-zinc { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 0 0% 98%; + + --ring: 240 5.9% 10%; + + --radius: 0.5rem; +} + +.dark .theme-zinc { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + + --border: 240 3.7% 25%; + --input: 240 3.7% 25%; + + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + + --ring: 240 4.9% 83.9%; +} + +.theme-slate { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 210 40% 98%; + + --ring: 215 20.2% 65.1%; + + --radius: 0.5rem; +} + +.dark .theme-slate { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --ring: 217.2 32.6% 17.5%; +} + +.theme-stone { + --background: 0 0% 100%; + --foreground: 20 14.3% 4.1%; + + --muted: 60 4.8% 95.9%; + --muted-foreground: 25 5.3% 44.7%; + + --popover: 0 0% 100%; + --popover-foreground: 20 14.3% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 20 14.3% 4.1%; + + --border: 20 5.9% 90%; + --input: 20 5.9% 90%; + + --primary: 24 9.8% 10%; + --primary-foreground: 60 9.1% 97.8%; + + --secondary: 60 4.8% 95.9%; + --secondary-foreground: 24 9.8% 10%; + + --accent: 60 4.8% 95.9%; + --accent-foreground: 24 9.8% 10%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 60 9.1% 97.8%; + + --ring: 20 14.3% 4.1%; + + --radius: 0.95rem; +} + +.dark .theme-stone { + --background: 20 14.3% 4.1%; + --foreground: 60 9.1% 97.8%; + + --muted: 12 6.5% 15.1%; + --muted-foreground: 24 5.4% 63.9%; + + --popover: 20 14.3% 4.1%; + --popover-foreground: 60 9.1% 97.8%; + + --card: 20 14.3% 4.1%; + --card-foreground: 60 9.1% 97.8%; + + --border: 12 6.5% 15.1%; + --input: 12 6.5% 15.1%; + + --primary: 60 9.1% 97.8%; + --primary-foreground: 24 9.8% 10%; + + --secondary: 12 6.5% 15.1%; + --secondary-foreground: 60 9.1% 97.8%; + + --accent: 12 6.5% 15.1%; + --accent-foreground: 60 9.1% 97.8%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 60 9.1% 97.8%; + + --ring: 24 5.7% 82.9%; +} + +.theme-gray { + --background: 0 0% 100%; + --foreground: 224 71.4% 4.1%; + + --muted: 220 14.3% 95.9%; + --muted-foreground: 220 8.9% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 224 71.4% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 224 71.4% 4.1%; + + --border: 220 13% 91%; + --input: 220 13% 91%; + + --primary: 220.9 39.3% 11%; + --primary-foreground: 210 20% 98%; + + --secondary: 220 14.3% 95.9%; + --secondary-foreground: 220.9 39.3% 11%; + + --accent: 220 14.3% 95.9%; + --accent-foreground: 220.9 39.3% 11%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 210 20% 98%; + + --ring: 224 71.4% 4.1%; + + --radius: 0.35rem; +} + +.dark .theme-gray { + --background: 224 71.4% 4.1%; + --foreground: 210 20% 98%; + + --muted: 215 27.9% 16.9%; + --muted-foreground: 217.9 10.6% 64.9%; + + --popover: 224 71.4% 4.1%; + --popover-foreground: 210 20% 98%; + + --card: 224 71.4% 4.1%; + --card-foreground: 210 20% 98%; + + --border: 215 27.9% 16.9%; + --input: 215 27.9% 16.9%; + + --primary: 210 20% 98%; + --primary-foreground: 220.9 39.3% 11%; + + --secondary: 215 27.9% 16.9%; + --secondary-foreground: 210 20% 98%; + + --accent: 215 27.9% 16.9%; + --accent-foreground: 210 20% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 20% 98%; + + --ring: 216 12.2% 83.9%; +} + +.theme-neutral { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 0 0% 98%; + + --ring: 0 0% 3.9%; + + --radius: ; +} + +.dark .theme-neutral { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + + --ring: 0 0% 83.1%; +} + +.theme-red { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + + --primary: 0 72.2% 50.6%; + --primary-foreground: 0 85.7% 97.3%; + + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 0 0% 98%; + + --ring: 0 72.2% 50.6%; + + --radius: 0.4rem; +} + +.dark .theme-red { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + + --primary: 0 72.2% 50.6%; + --primary-foreground: 0 85.7% 97.3%; + + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + + --ring: 0 72.2% 50.6%; +} + +.theme-rose { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + + --primary: 346.8 77.2% 49.8%; + --primary-foreground: 355.7 100% 97.3%; + + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 0 0% 98%; + + --ring: 346.8 77.2% 49.8%; + + --radius: 0.5rem; +} + +.dark .theme-rose { + --background: 20 14.3% 4.1%; + --foreground: 0 0% 95%; + + --muted: 0 0% 15%; + --muted-foreground: 240 5% 64.9%; + + --popover: 0 0% 9%; + --popover-foreground: 0 0% 95%; + + --card: 24 9.8% 10%; + --card-foreground: 0 0% 95%; + + --border: 240 3.7% 25%; + --input: 240 3.7% 25%; + + --primary: 346.8 77.2% 49.8%; + --primary-foreground: 355.7 100% 97.3%; + + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 12 6.5% 15.1%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; + + --ring: 346.8 77.2% 49.8%; +} + +.theme-orange { + --background: 0 0% 100%; + --foreground: 20 14.3% 4.1%; + + --muted: 60 4.8% 95.9%; + --muted-foreground: 25 5.3% 44.7%; + + --popover: 0 0% 100%; + --popover-foreground: 20 14.3% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 20 14.3% 4.1%; + + --border: 20 5.9% 90%; + --input: 20 5.9% 90%; + + --primary: 24.6 95% 53.1%; + --primary-foreground: 60 9.1% 97.8%; + + --secondary: 60 4.8% 95.9%; + --secondary-foreground: 24 9.8% 10%; + + --accent: 60 4.8% 95.9%; + --accent-foreground: 24 9.8% 10%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 60 9.1% 97.8%; + + --ring: 24.6 95% 53.1%; + + --radius: 0.95rem; +} + +.dark .theme-orange { + --background: 20 14.3% 4.1%; + --foreground: 60 9.1% 97.8%; + + --muted: 12 6.5% 15.1%; + --muted-foreground: 24 5.4% 63.9%; + + --popover: 20 14.3% 4.1%; + --popover-foreground: 60 9.1% 97.8%; + + --card: 20 14.3% 4.1%; + --card-foreground: 60 9.1% 97.8%; + + --border: 12 6.5% 15.1%; + --input: 12 6.5% 15.1%; + + --primary: 20.5 90.2% 48.2%; + --primary-foreground: 60 9.1% 97.8%; + + --secondary: 12 6.5% 15.1%; + --secondary-foreground: 60 9.1% 97.8%; + + --accent: 12 6.5% 15.1%; + --accent-foreground: 60 9.1% 97.8%; + + --destructive: 0 72.2% 50.6%; + --destructive-foreground: 60 9.1% 97.8%; + + --ring: 20.5 90.2% 48.2%; +} + +.theme-green { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + + --primary: 142.1 76.2% 36.3%; + --primary-foreground: 355.7 100% 97.3%; + + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 0 0% 98%; + + --ring: 142.1 76.2% 36.3%; + + --radius: ; +} + +.dark .theme-green { + --background: 20 14.3% 4.1%; + --foreground: 0 0% 95%; + + --muted: 0 0% 15%; + --muted-foreground: 240 5% 64.9%; + + --popover: 0 0% 9%; + --popover-foreground: 0 0% 95%; + + --card: 24 9.8% 10%; + --card-foreground: 0 0% 95%; + + --border: 240 3.7% 25%; + --input: 240 3.7% 25%; + + --primary: 142.1 70.6% 45.3%; + --primary-foreground: 144.9 80.4% 10%; + + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 12 6.5% 15.1%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; + + --ring: 142.4 71.8% 29.2%; +} + +.theme-blue { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --primary: 221.2 83.2% 53.3%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 210 40% 98%; + + --ring: 221.2 83.2% 53.3%; + + --radius: ; +} + +.dark .theme-blue { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + + --primary: 217.2 91.2% 59.8%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --ring: 224.3 76.3% 48%; +} + +.theme-yellow { + --background: 0 0% 100%; + --foreground: 20 14.3% 4.1%; + + --muted: 60 4.8% 95.9%; + --muted-foreground: 25 5.3% 44.7%; + + --popover: 0 0% 100%; + --popover-foreground: 20 14.3% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 20 14.3% 4.1%; + + --border: 20 5.9% 90%; + --input: 20 5.9% 90%; + + --primary: 47.9 95.8% 53.1%; + --primary-foreground: 26 83.3% 14.1%; + + --secondary: 60 4.8% 95.9%; + --secondary-foreground: 24 9.8% 10%; + + --accent: 60 4.8% 95.9%; + --accent-foreground: 24 9.8% 10%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 60 9.1% 97.8%; + + --ring: 20 14.3% 4.1%; + + --radius: 0.95rem; +} + +.dark .theme-yellow { + --background: 20 14.3% 4.1%; + --foreground: 60 9.1% 97.8%; + + --muted: 12 6.5% 15.1%; + --muted-foreground: 24 5.4% 63.9%; + + --popover: 20 14.3% 4.1%; + --popover-foreground: 60 9.1% 97.8%; + + --card: 20 14.3% 4.1%; + --card-foreground: 60 9.1% 97.8%; + + --border: 12 6.5% 15.1%; + --input: 12 6.5% 15.1%; + + --primary: 47.9 95.8% 53.1%; + --primary-foreground: 26 83.3% 14.1%; + + --secondary: 12 6.5% 15.1%; + --secondary-foreground: 60 9.1% 97.8%; + + --accent: 12 6.5% 15.1%; + --accent-foreground: 60 9.1% 97.8%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 60 9.1% 97.8%; + + --ring: 35.5 91.7% 32.9%; +} + +.theme-violet { + --background: 0 0% 100%; + --foreground: 224 71.4% 4.1%; + + --muted: 220 14.3% 95.9%; + --muted-foreground: 220 8.9% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 224 71.4% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 224 71.4% 4.1%; + + --border: 220 13% 91%; + --input: 220 13% 91%; + + --primary: 262.1 83.3% 57.8%; + --primary-foreground: 210 20% 98%; + + --secondary: 220 14.3% 95.9%; + --secondary-foreground: 220.9 39.3% 11%; + + --accent: 220 14.3% 95.9%; + --accent-foreground: 220.9 39.3% 11%; + + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 210 20% 98%; + + --ring: 262.1 83.3% 57.8%; + + --radius: ; +} + +.dark .theme-violet { + --background: 224 71.4% 4.1%; + --foreground: 210 20% 98%; + + --muted: 215 27.9% 16.9%; + --muted-foreground: 217.9 10.6% 64.9%; + + --popover: 224 71.4% 4.1%; + --popover-foreground: 210 20% 98%; + + --card: 224 71.4% 4.1%; + --card-foreground: 210 20% 98%; + + --border: 215 27.9% 16.9%; + --input: 215 27.9% 16.9%; + + --primary: 263.4 70% 50.4%; + --primary-foreground: 210 20% 98%; + + --secondary: 215 27.9% 16.9%; + --secondary-foreground: 210 20% 98%; + + --accent: 215 27.9% 16.9%; + --accent-foreground: 210 20% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 20% 98%; + + --ring: 263.4 70% 50.4%; +} \ No newline at end of file diff --git a/apps/www/public/r/themes/gray.json b/apps/www/public/r/themes/gray.json new file mode 100644 index 0000000000..d189d77175 --- /dev/null +++ b/apps/www/public/r/themes/gray.json @@ -0,0 +1,48 @@ +{ + "name": "gray", + "label": "Gray", + "cssVars": { + "dark": { + "accent": "215 27.9% 16.9%", + "accent-foreground": "210 20% 98%", + "background": "224 71.4% 4.1%", + "border": "215 27.9% 16.9%", + "card": "224 71.4% 4.1%", + "card-foreground": "210 20% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "210 20% 98%", + "foreground": "210 20% 98%", + "input": "215 27.9% 16.9%", + "muted": "215 27.9% 16.9%", + "muted-foreground": "217.9 10.6% 64.9%", + "popover": "224 71.4% 4.1%", + "popover-foreground": "210 20% 98%", + "primary": "210 20% 98%", + "primary-foreground": "220.9 39.3% 11%", + "ring": "216 12.2% 83.9%", + "secondary": "215 27.9% 16.9%", + "secondary-foreground": "210 20% 98%" + }, + "light": { + "accent": "220 14.3% 95.9%", + "accent-foreground": "220.9 39.3% 11%", + "background": "0 0% 100%", + "border": "220 13% 91%", + "card": "0 0% 100%", + "card-foreground": "224 71.4% 4.1%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "210 20% 98%", + "foreground": "224 71.4% 4.1%", + "input": "220 13% 91%", + "muted": "220 14.3% 95.9%", + "muted-foreground": "220 8.9% 46.1%", + "popover": "0 0% 100%", + "popover-foreground": "224 71.4% 4.1%", + "primary": "220.9 39.3% 11%", + "primary-foreground": "210 20% 98%", + "ring": "224 71.4% 4.1%", + "secondary": "220 14.3% 95.9%", + "secondary-foreground": "220.9 39.3% 11%" + } + } +} \ No newline at end of file diff --git a/apps/www/public/r/themes/neutral.json b/apps/www/public/r/themes/neutral.json new file mode 100644 index 0000000000..9f19b2c228 --- /dev/null +++ b/apps/www/public/r/themes/neutral.json @@ -0,0 +1,48 @@ +{ + "name": "neutral", + "label": "Neutral", + "cssVars": { + "dark": { + "accent": "0 0% 14.9%", + "accent-foreground": "0 0% 98%", + "background": "0 0% 3.9%", + "border": "0 0% 14.9%", + "card": "0 0% 3.9%", + "card-foreground": "0 0% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 98%", + "input": "0 0% 14.9%", + "muted": "0 0% 14.9%", + "muted-foreground": "0 0% 63.9%", + "popover": "0 0% 3.9%", + "popover-foreground": "0 0% 98%", + "primary": "0 0% 98%", + "primary-foreground": "0 0% 9%", + "ring": "0 0% 83.1%", + "secondary": "0 0% 14.9%", + "secondary-foreground": "0 0% 98%" + }, + "light": { + "accent": "0 0% 96.1%", + "accent-foreground": "0 0% 9%", + "background": "0 0% 100%", + "border": "0 0% 89.8%", + "card": "0 0% 100%", + "card-foreground": "0 0% 3.9%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 3.9%", + "input": "0 0% 89.8%", + "muted": "0 0% 96.1%", + "muted-foreground": "0 0% 45.1%", + "popover": "0 0% 100%", + "popover-foreground": "0 0% 3.9%", + "primary": "0 0% 9%", + "primary-foreground": "0 0% 98%", + "ring": "0 0% 3.9%", + "secondary": "0 0% 96.1%", + "secondary-foreground": "0 0% 9%" + } + } +} \ No newline at end of file diff --git a/apps/www/public/r/themes/slate.json b/apps/www/public/r/themes/slate.json new file mode 100644 index 0000000000..8e699614d6 --- /dev/null +++ b/apps/www/public/r/themes/slate.json @@ -0,0 +1,48 @@ +{ + "name": "slate", + "label": "Slate", + "cssVars": { + "dark": { + "accent": "217.2 32.6% 17.5%", + "accent-foreground": "210 40% 98%", + "background": "222.2 84% 4.9%", + "border": "217.2 32.6% 17.5%", + "card": "222.2 84% 4.9%", + "card-foreground": "210 40% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "210 40% 98%", + "foreground": "210 40% 98%", + "input": "217.2 32.6% 17.5%", + "muted": "217.2 32.6% 17.5%", + "muted-foreground": "215 20.2% 65.1%", + "popover": "222.2 84% 4.9%", + "popover-foreground": "210 40% 98%", + "primary": "210 40% 98%", + "primary-foreground": "222.2 47.4% 11.2%", + "ring": "212.7 26.8% 83.9%", + "secondary": "217.2 32.6% 17.5%", + "secondary-foreground": "210 40% 98%" + }, + "light": { + "accent": "210 40% 96.1%", + "accent-foreground": "222.2 47.4% 11.2%", + "background": "0 0% 100%", + "border": "214.3 31.8% 91.4%", + "card": "0 0% 100%", + "card-foreground": "222.2 84% 4.9%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "210 40% 98%", + "foreground": "222.2 84% 4.9%", + "input": "214.3 31.8% 91.4%", + "muted": "210 40% 96.1%", + "muted-foreground": "215.4 16.3% 46.9%", + "popover": "0 0% 100%", + "popover-foreground": "222.2 84% 4.9%", + "primary": "222.2 47.4% 11.2%", + "primary-foreground": "210 40% 98%", + "ring": "222.2 84% 4.9%", + "secondary": "210 40% 96.1%", + "secondary-foreground": "222.2 47.4% 11.2%" + } + } +} \ No newline at end of file diff --git a/apps/www/public/r/themes/stone.json b/apps/www/public/r/themes/stone.json new file mode 100644 index 0000000000..2df3646b33 --- /dev/null +++ b/apps/www/public/r/themes/stone.json @@ -0,0 +1,48 @@ +{ + "name": "stone", + "label": "Stone", + "cssVars": { + "dark": { + "accent": "12 6.5% 15.1%", + "accent-foreground": "60 9.1% 97.8%", + "background": "20 14.3% 4.1%", + "border": "12 6.5% 15.1%", + "card": "20 14.3% 4.1%", + "card-foreground": "60 9.1% 97.8%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "60 9.1% 97.8%", + "foreground": "60 9.1% 97.8%", + "input": "12 6.5% 15.1%", + "muted": "12 6.5% 15.1%", + "muted-foreground": "24 5.4% 63.9%", + "popover": "20 14.3% 4.1%", + "popover-foreground": "60 9.1% 97.8%", + "primary": "60 9.1% 97.8%", + "primary-foreground": "24 9.8% 10%", + "ring": "24 5.7% 82.9%", + "secondary": "12 6.5% 15.1%", + "secondary-foreground": "60 9.1% 97.8%" + }, + "light": { + "accent": "60 4.8% 95.9%", + "accent-foreground": "24 9.8% 10%", + "background": "0 0% 100%", + "border": "20 5.9% 90%", + "card": "0 0% 100%", + "card-foreground": "20 14.3% 4.1%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "60 9.1% 97.8%", + "foreground": "20 14.3% 4.1%", + "input": "20 5.9% 90%", + "muted": "60 4.8% 95.9%", + "muted-foreground": "25 5.3% 44.7%", + "popover": "0 0% 100%", + "popover-foreground": "20 14.3% 4.1%", + "primary": "24 9.8% 10%", + "primary-foreground": "60 9.1% 97.8%", + "ring": "20 14.3% 4.1%", + "secondary": "60 4.8% 95.9%", + "secondary-foreground": "24 9.8% 10%" + } + } +} \ No newline at end of file diff --git a/apps/www/public/r/themes/zinc.json b/apps/www/public/r/themes/zinc.json new file mode 100644 index 0000000000..4d691a7f97 --- /dev/null +++ b/apps/www/public/r/themes/zinc.json @@ -0,0 +1,48 @@ +{ + "name": "zinc", + "label": "Zinc", + "cssVars": { + "dark": { + "accent": "240 3.7% 15.9%", + "accent-foreground": "0 0% 98%", + "background": "240 10% 3.9%", + "border": "240 3.7% 15.9%", + "card": "240 10% 3.9%", + "card-foreground": "0 0% 98%", + "destructive": "0 62.8% 30.6%", + "destructive-foreground": "0 0% 98%", + "foreground": "0 0% 98%", + "input": "240 3.7% 15.9%", + "muted": "240 3.7% 15.9%", + "muted-foreground": "240 5% 64.9%", + "popover": "240 10% 3.9%", + "popover-foreground": "0 0% 98%", + "primary": "0 0% 98%", + "primary-foreground": "240 5.9% 10%", + "ring": "240 4.9% 83.9%", + "secondary": "240 3.7% 15.9%", + "secondary-foreground": "0 0% 98%" + }, + "light": { + "accent": "240 4.8% 95.9%", + "accent-foreground": "240 5.9% 10%", + "background": "0 0% 100%", + "border": "240 5.9% 90%", + "card": "0 0% 100%", + "card-foreground": "240 10% 3.9%", + "destructive": "0 84.2% 60.2%", + "destructive-foreground": "0 0% 98%", + "foreground": "240 10% 3.9%", + "input": "240 5.9% 90%", + "muted": "240 4.8% 95.9%", + "muted-foreground": "240 3.8% 46.1%", + "popover": "0 0% 100%", + "popover-foreground": "240 10% 3.9%", + "primary": "240 5.9% 10%", + "primary-foreground": "0 0% 98%", + "ring": "240 10% 3.9%", + "secondary": "240 4.8% 95.9%", + "secondary-foreground": "240 5.9% 10%" + } + } +} \ No newline at end of file diff --git a/apps/www/scripts/build-registry.mts b/apps/www/scripts/build-registry.mts index 3babbba869..6febe8205d 100644 --- a/apps/www/scripts/build-registry.mts +++ b/apps/www/scripts/build-registry.mts @@ -210,7 +210,7 @@ export const Index: Record = { const targetFile = file.replace(item.name, `${chunkName}`) const targetFilePath = path.join( cwd(), - `registry/${style.name}/${type}/${chunkName}.tsx` + `src/registry/${style.name}/${type}/${chunkName}.tsx` ) // Write component file. @@ -230,7 +230,7 @@ export const Index: Record = { ) // // Write the source file for blocks only. - sourceFilename = `__registry__/${style.name}/${type}/${item.name}.tsx` + sourceFilename = `src/__registry__/${style.name}/${type}/${item.name}.tsx` if (item.files) { const files = item.files.map((file) => @@ -239,7 +239,7 @@ export const Index: Record = { : file ) if (files?.length) { - sourceFilename = `__registry__/${style.name}/${files[0].path}` + sourceFilename = `src/__registry__/${style.name}/${files[0].path}` } } @@ -326,9 +326,13 @@ export const Index: Record = { "utf8" ) + // Write style index. - rimraf.sync(path.join(process.cwd(), "__registry__/index.tsx")) - await fs.writeFile(path.join(process.cwd(), "__registry__/index.tsx"), index) + if (!existsSync(path.join(process.cwd(), "src/__registry__"))) { + await fs.mkdir(path.join(process.cwd(), "src/__registry__"), { recursive: true }) + } + rimraf.sync(path.join(process.cwd(), "src/__registry__/index.tsx")) + await fs.writeFile(path.join(process.cwd(), "src/__registry__/index.tsx"), index) } // ---------------------------------------------------------------------------- @@ -363,7 +367,7 @@ async function buildStyles(registry: Registry) { : _file const content = await fs.readFile( - path.join(process.cwd(), "registry", style.name, file.path), + path.join(process.cwd(), "src/registry", style.name, file.path), "utf8" ) diff --git a/apps/www/src/__registry__/.autogenerated b/apps/www/src/__registry__/.autogenerated deleted file mode 100644 index 7a0c795cb0..0000000000 --- a/apps/www/src/__registry__/.autogenerated +++ /dev/null @@ -1 +0,0 @@ -// The content of this directory is autogenerated by the registry server. \ No newline at end of file diff --git a/apps/www/src/__registry__/.gitkeep b/apps/www/src/__registry__/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/apps/www/src/__registry__/README.md b/apps/www/src/__registry__/README.md deleted file mode 100644 index 66e50b7cbf..0000000000 --- a/apps/www/src/__registry__/README.md +++ /dev/null @@ -1 +0,0 @@ -> Files inside this directory is autogenerated by `./scripts/build-registry.ts`. **Do not edit them manually.** diff --git a/apps/www/src/__registry__/index.tsx b/apps/www/src/__registry__/index.tsx index d0581e3578..27b2f3e487 100644 --- a/apps/www/src/__registry__/index.tsx +++ b/apps/www/src/__registry__/index.tsx @@ -1,1104 +1,1120 @@ // @ts-nocheck // This file is autogenerated by scripts/build-registry.ts // Do not edit this file directly. -import * as React from 'react' +import * as React from "react" + export const Index: Record = { - 'default': { - 'editor': { - name: 'editor', - type: 'components:plate-ui', + "default": { + "editor": { + name: "editor", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/editor.tsx'], + files: ["registry/default/plate-ui/editor.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/editor.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/editor')), + chunks: [] }, - 'cloud': { - name: 'cloud', - type: 'components:plate-ui', + "cloud": { + name: "cloud", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/cloud.tsx','registry/default/plate-ui/cloud-attachment-element.tsx','registry/default/plate-ui/cloud-image-element.tsx','registry/default/plate-ui/cloud-resize-controls.tsx','registry/default/plate-ui/cloud-status-bar.tsx','registry/default/plate-ui/cloud-toolbar-buttons.tsx'], + files: ["registry/default/plate-ui/cloud.tsx","registry/default/plate-ui/cloud-attachment-element.tsx","registry/default/plate-ui/cloud-image-element.tsx","registry/default/plate-ui/cloud-resize-controls.tsx","registry/default/plate-ui/cloud-status-bar.tsx","registry/default/plate-ui/cloud-toolbar-buttons.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/cloud.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/cloud')), + chunks: [] }, - 'cloud-attachment-element': { - name: 'cloud-attachment-element', - type: 'components:plate-ui', - registryDependencies: [], - files: ['registry/default/plate-ui/cloud-attachment-element.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/cloud-attachment-element')), - }, - 'cloud-image-element': { - name: 'cloud-image-element', - type: 'components:plate-ui', - registryDependencies: [], - files: ['registry/default/plate-ui/cloud-image-element.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/cloud-image-element')), - }, - 'cloud-resize-controls': { - name: 'cloud-resize-controls', - type: 'components:plate-ui', - registryDependencies: [], - files: ['registry/default/plate-ui/cloud-resize-controls.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/cloud-resize-controls')), - }, - 'cloud-status-bar': { - name: 'cloud-status-bar', - type: 'components:plate-ui', - registryDependencies: [], - files: ['registry/default/plate-ui/cloud-status-bar.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/cloud-status-bar')), - }, - 'cloud-toolbar-buttons': { - name: 'cloud-toolbar-buttons', - type: 'components:plate-ui', - registryDependencies: [], - files: ['registry/default/plate-ui/cloud-toolbar-buttons.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/cloud-toolbar-buttons')), - }, - 'code-block-element': { - name: 'code-block-element', - type: 'components:plate-ui', + "code-block-element": { + name: "code-block-element", + type: "registry:ui", registryDependencies: ["command"], - files: ['registry/default/plate-ui/code-block-element.tsx','registry/default/plate-ui/code-block-element.css','registry/default/plate-ui/code-block-combobox.tsx'], + files: ["registry/default/plate-ui/code-block-element.tsx","registry/default/plate-ui/code-block-element.css","registry/default/plate-ui/code-block-combobox.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/code-block-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/code-block-element')), - }, - 'code-block-combobox': { - name: 'code-block-combobox', - type: 'components:plate-ui', - registryDependencies: ["command"], - files: ['registry/default/plate-ui/code-block-combobox.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/code-block-combobox')), + chunks: [] }, - 'column-element': { - name: 'column-element', - type: 'components:plate-ui', + "column-element": { + name: "column-element", + type: "registry:ui", registryDependencies: ["command","resizable"], - files: ['registry/default/plate-ui/column-element.tsx','registry/default/plate-ui/column-group-element.tsx'], + files: ["registry/default/plate-ui/column-element.tsx","registry/default/plate-ui/column-group-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/column-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/column-element')), + chunks: [] }, - 'column-group-element': { - name: 'column-group-element', - type: 'components:plate-ui', - registryDependencies: ["command","resizable"], - files: ['registry/default/plate-ui/column-group-element.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/column-group-element')), - }, - 'color-dropdown-menu': { - name: 'color-dropdown-menu', - type: 'components:plate-ui', + "color-dropdown-menu": { + name: "color-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar","separator","button","tooltip"], - files: ['registry/default/plate-ui/color-dropdown-menu.tsx','registry/default/plate-ui/color-constants.ts','registry/default/plate-ui/color-dropdown-menu-items.tsx','registry/default/plate-ui/color-input.tsx','registry/default/plate-ui/color-picker.tsx','registry/default/plate-ui/colors-custom.tsx'], + files: ["registry/default/plate-ui/color-dropdown-menu.tsx","registry/default/plate-ui/color-constants.ts","registry/default/plate-ui/color-dropdown-menu-items.tsx","registry/default/plate-ui/color-input.tsx","registry/default/plate-ui/color-picker.tsx","registry/default/plate-ui/colors-custom.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/color-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/color-dropdown-menu')), - }, - 'color-constants': { - name: 'color-constants', - type: 'components:plate-ui', - registryDependencies: ["dropdown-menu","toolbar","separator","button","tooltip"], - files: ['registry/default/plate-ui/color-constants.ts'], - component: React.lazy(() => import('@/registry/default/plate-ui/color-constants')), + chunks: [] }, - 'color-dropdown-menu-items': { - name: 'color-dropdown-menu-items', - type: 'components:plate-ui', - registryDependencies: ["dropdown-menu","toolbar","separator","button","tooltip"], - files: ['registry/default/plate-ui/color-dropdown-menu-items.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/color-dropdown-menu-items')), - }, - 'color-input': { - name: 'color-input', - type: 'components:plate-ui', - registryDependencies: ["dropdown-menu","toolbar","separator","button","tooltip"], - files: ['registry/default/plate-ui/color-input.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/color-input')), - }, - 'color-picker': { - name: 'color-picker', - type: 'components:plate-ui', - registryDependencies: ["dropdown-menu","toolbar","separator","button","tooltip"], - files: ['registry/default/plate-ui/color-picker.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/color-picker')), - }, - 'colors-custom': { - name: 'colors-custom', - type: 'components:plate-ui', - registryDependencies: ["dropdown-menu","toolbar","separator","button","tooltip"], - files: ['registry/default/plate-ui/colors-custom.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/colors-custom')), - }, - 'comments-popover': { - name: 'comments-popover', - type: 'components:plate-ui', + "comments-popover": { + name: "comments-popover", + type: "registry:ui", registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comments-popover.tsx','registry/default/plate-ui/comment-avatar.tsx','registry/default/plate-ui/comment-create-form.tsx','registry/default/plate-ui/comment-item.tsx','registry/default/plate-ui/comment-more-dropdown.tsx','registry/default/plate-ui/comment-reply-items.tsx','registry/default/plate-ui/comment-resolve-button.tsx','registry/default/plate-ui/comment-value.tsx'], + files: ["registry/default/plate-ui/comments-popover.tsx","registry/default/plate-ui/comment-avatar.tsx","registry/default/plate-ui/comment-create-form.tsx","registry/default/plate-ui/comment-item.tsx","registry/default/plate-ui/comment-more-dropdown.tsx","registry/default/plate-ui/comment-reply-items.tsx","registry/default/plate-ui/comment-resolve-button.tsx","registry/default/plate-ui/comment-value.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/comments-popover.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/comments-popover')), - }, - 'comment-avatar': { - name: 'comment-avatar', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-avatar.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-avatar')), - }, - 'comment-create-form': { - name: 'comment-create-form', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-create-form.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-create-form')), - }, - 'comment-item': { - name: 'comment-item', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-item.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-item')), - }, - 'comment-more-dropdown': { - name: 'comment-more-dropdown', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-more-dropdown.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-more-dropdown')), - }, - 'comment-reply-items': { - name: 'comment-reply-items', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-reply-items.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-reply-items')), - }, - 'comment-resolve-button': { - name: 'comment-resolve-button', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-resolve-button.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-resolve-button')), - }, - 'comment-value': { - name: 'comment-value', - type: 'components:plate-ui', - registryDependencies: ["popover","avatar"], - files: ['registry/default/plate-ui/comment-value.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/comment-value')), + chunks: [] }, - 'draggable': { - name: 'draggable', - type: 'components:plate-ui', + "draggable": { + name: "draggable", + type: "registry:ui", registryDependencies: ["tooltip"], - files: ['registry/default/plate-ui/draggable.tsx','registry/default/plate-ui/with-draggables.tsx'], + files: ["registry/default/plate-ui/draggable.tsx","registry/default/plate-ui/with-draggables.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/draggable.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/draggable')), - }, - 'with-draggables': { - name: 'with-draggables', - type: 'components:plate-ui', - registryDependencies: ["tooltip"], - files: ['registry/default/plate-ui/with-draggables.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/with-draggables')), + chunks: [] }, - 'emoji-dropdown-menu': { - name: 'emoji-dropdown-menu', - type: 'components:plate-ui', + "emoji-dropdown-menu": { + name: "emoji-dropdown-menu", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-dropdown-menu.tsx','registry/default/plate-ui/emoji-toolbar-dropdown.tsx','registry/default/plate-ui/emoji-icons.tsx','registry/default/plate-ui/emoji-picker.tsx','registry/default/plate-ui/emoji-picker-content.tsx','registry/default/plate-ui/emoji-picker-navigation.tsx','registry/default/plate-ui/emoji-picker-preview.tsx','registry/default/plate-ui/emoji-picker-search-and-clear.tsx','registry/default/plate-ui/emoji-picker-search-bar.tsx'], + files: ["registry/default/plate-ui/emoji-dropdown-menu.tsx","registry/default/plate-ui/emoji-toolbar-dropdown.tsx","registry/default/plate-ui/emoji-icons.tsx","registry/default/plate-ui/emoji-picker.tsx","registry/default/plate-ui/emoji-picker-content.tsx","registry/default/plate-ui/emoji-picker-navigation.tsx","registry/default/plate-ui/emoji-picker-preview.tsx","registry/default/plate-ui/emoji-picker-search-and-clear.tsx","registry/default/plate-ui/emoji-picker-search-bar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/emoji-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-dropdown-menu')), - }, - 'emoji-toolbar-dropdown': { - name: 'emoji-toolbar-dropdown', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-toolbar-dropdown.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-toolbar-dropdown')), - }, - 'emoji-icons': { - name: 'emoji-icons', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-icons.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-icons')), - }, - 'emoji-picker': { - name: 'emoji-picker', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-picker.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-picker')), + chunks: [] }, - 'emoji-picker-content': { - name: 'emoji-picker-content', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-picker-content.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-picker-content')), - }, - 'emoji-picker-navigation': { - name: 'emoji-picker-navigation', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-picker-navigation.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-picker-navigation')), - }, - 'emoji-picker-preview': { - name: 'emoji-picker-preview', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-picker-preview.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-picker-preview')), - }, - 'emoji-picker-search-and-clear': { - name: 'emoji-picker-search-and-clear', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-picker-search-and-clear.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-picker-search-and-clear')), - }, - 'emoji-picker-search-bar': { - name: 'emoji-picker-search-bar', - type: 'components:plate-ui', - registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/emoji-picker-search-bar.tsx'], - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-picker-search-bar')), - }, - 'emoji-input-element': { - name: 'emoji-input-element', - type: 'components:plate-ui', + "emoji-input-element": { + name: "emoji-input-element", + type: "registry:ui", registryDependencies: ["inline-combobox"], - files: ['registry/default/plate-ui/emoji-input-element.tsx'], + files: ["registry/default/plate-ui/emoji-input-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/emoji-input-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/emoji-input-element')), + chunks: [] }, - 'align-dropdown-menu': { - name: 'align-dropdown-menu', - type: 'components:plate-ui', + "align-dropdown-menu": { + name: "align-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar"], - files: ['registry/default/plate-ui/align-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/align-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/align-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/align-dropdown-menu')), + chunks: [] }, - 'avatar': { - name: 'avatar', - type: 'components:plate-ui', + "avatar": { + name: "avatar", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/avatar.tsx'], + files: ["registry/default/plate-ui/avatar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/avatar.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/avatar')), + chunks: [] }, - 'blockquote-element': { - name: 'blockquote-element', - type: 'components:plate-ui', + "blockquote-element": { + name: "blockquote-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/blockquote-element.tsx'], + files: ["registry/default/plate-ui/blockquote-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/blockquote-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/blockquote-element')), + chunks: [] }, - 'date-element': { - name: 'date-element', - type: 'components:plate-ui', + "date-element": { + name: "date-element", + type: "registry:ui", registryDependencies: ["calendar"], - files: ['registry/default/plate-ui/date-element.tsx'], + files: ["registry/default/plate-ui/date-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/date-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/date-element')), + chunks: [] }, - 'calendar': { - name: 'calendar', - type: 'components:plate-ui', + "calendar": { + name: "calendar", + type: "registry:ui", registryDependencies: ["button"], - files: ['registry/default/plate-ui/calendar.tsx'], + files: ["registry/default/plate-ui/calendar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/calendar.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/calendar')), + chunks: [] }, - 'button': { - name: 'button', - type: 'components:plate-ui', + "button": { + name: "button", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/button.tsx'], + files: ["registry/default/plate-ui/button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/button')), + chunks: [] }, - 'caption': { - name: 'caption', - type: 'components:plate-ui', + "caption": { + name: "caption", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/caption.tsx'], + files: ["registry/default/plate-ui/caption.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/caption.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/caption')), + chunks: [] }, - 'checkbox': { - name: 'checkbox', - type: 'components:plate-ui', + "checkbox": { + name: "checkbox", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/checkbox.tsx'], + files: ["registry/default/plate-ui/checkbox.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/checkbox.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/checkbox')), + chunks: [] }, - 'code-leaf': { - name: 'code-leaf', - type: 'components:plate-ui', + "code-leaf": { + name: "code-leaf", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/code-leaf.tsx'], + files: ["registry/default/plate-ui/code-leaf.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/code-leaf.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/code-leaf')), + chunks: [] }, - 'code-line-element': { - name: 'code-line-element', - type: 'components:plate-ui', + "code-line-element": { + name: "code-line-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/code-line-element.tsx'], + files: ["registry/default/plate-ui/code-line-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/code-line-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/code-line-element')), + chunks: [] }, - 'code-syntax-leaf': { - name: 'code-syntax-leaf', - type: 'components:plate-ui', + "code-syntax-leaf": { + name: "code-syntax-leaf", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/code-syntax-leaf.tsx'], + files: ["registry/default/plate-ui/code-syntax-leaf.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/code-syntax-leaf.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/code-syntax-leaf')), + chunks: [] }, - 'command': { - name: 'command', - type: 'components:plate-ui', + "command": { + name: "command", + type: "registry:ui", registryDependencies: ["dialog"], - files: ['registry/default/plate-ui/command.tsx'], + files: ["registry/default/plate-ui/command.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/command.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/command')), + chunks: [] }, - 'comment-leaf': { - name: 'comment-leaf', - type: 'components:plate-ui', + "comment-leaf": { + name: "comment-leaf", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/comment-leaf.tsx'], + files: ["registry/default/plate-ui/comment-leaf.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/comment-leaf.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/comment-leaf')), + chunks: [] }, - 'comment-toolbar-button': { - name: 'comment-toolbar-button', - type: 'components:plate-ui', + "comment-toolbar-button": { + name: "comment-toolbar-button", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/comment-toolbar-button.tsx'], + files: ["registry/default/plate-ui/comment-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/comment-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/comment-toolbar-button')), + chunks: [] }, - 'cursor-overlay': { - name: 'cursor-overlay', - type: 'components:plate-ui', + "cursor-overlay": { + name: "cursor-overlay", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/cursor-overlay.tsx'], + files: ["registry/default/plate-ui/cursor-overlay.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/cursor-overlay.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/cursor-overlay')), + chunks: [] }, - 'dialog': { - name: 'dialog', - type: 'components:plate-ui', + "dialog": { + name: "dialog", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/dialog.tsx'], + files: ["registry/default/plate-ui/dialog.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/dialog.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/dialog')), + chunks: [] }, - 'dropdown-menu': { - name: 'dropdown-menu', - type: 'components:plate-ui', + "dropdown-menu": { + name: "dropdown-menu", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/dropdown-menu.tsx'], + files: ["registry/default/plate-ui/dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/dropdown-menu')), + chunks: [] }, - 'excalidraw-element': { - name: 'excalidraw-element', - type: 'components:plate-ui', + "excalidraw-element": { + name: "excalidraw-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/excalidraw-element.tsx'], + files: ["registry/default/plate-ui/excalidraw-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/excalidraw-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/excalidraw-element')), + chunks: [] }, - 'fixed-toolbar': { - name: 'fixed-toolbar', - type: 'components:plate-ui', + "fixed-toolbar": { + name: "fixed-toolbar", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/fixed-toolbar.tsx'], + files: ["registry/default/plate-ui/fixed-toolbar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/fixed-toolbar.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/fixed-toolbar')), + chunks: [] }, - 'fixed-toolbar-buttons': { - name: 'fixed-toolbar-buttons', - type: 'components:plate-ui', + "fixed-toolbar-buttons": { + name: "fixed-toolbar-buttons", + type: "registry:ui", registryDependencies: ["toolbar","insert-dropdown-menu","mark-toolbar-button","mode-dropdown-menu","turn-into-dropdown-menu"], - files: ['registry/default/plate-ui/fixed-toolbar-buttons.tsx'], + files: ["registry/default/plate-ui/fixed-toolbar-buttons.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/fixed-toolbar-buttons.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/fixed-toolbar-buttons')), + chunks: [] }, - 'floating-toolbar': { - name: 'floating-toolbar', - type: 'components:plate-ui', + "floating-toolbar": { + name: "floating-toolbar", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/floating-toolbar.tsx'], + files: ["registry/default/plate-ui/floating-toolbar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/floating-toolbar.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/floating-toolbar')), + chunks: [] }, - 'floating-toolbar-buttons': { - name: 'floating-toolbar-buttons', - type: 'components:plate-ui', + "floating-toolbar-buttons": { + name: "floating-toolbar-buttons", + type: "registry:ui", registryDependencies: ["mark-toolbar-button","more-dropdown-menu","turn-into-dropdown-menu"], - files: ['registry/default/plate-ui/floating-toolbar-buttons.tsx'], + files: ["registry/default/plate-ui/floating-toolbar-buttons.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/floating-toolbar-buttons.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/floating-toolbar-buttons')), + chunks: [] }, - 'heading-element': { - name: 'heading-element', - type: 'components:plate-ui', + "heading-element": { + name: "heading-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/heading-element.tsx'], + files: ["registry/default/plate-ui/heading-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/heading-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/heading-element')), + chunks: [] }, - 'highlight-leaf': { - name: 'highlight-leaf', - type: 'components:plate-ui', + "highlight-leaf": { + name: "highlight-leaf", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/highlight-leaf.tsx'], + files: ["registry/default/plate-ui/highlight-leaf.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/highlight-leaf.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/highlight-leaf')), + chunks: [] }, - 'hr-element': { - name: 'hr-element', - type: 'components:plate-ui', + "hr-element": { + name: "hr-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/hr-element.tsx'], + files: ["registry/default/plate-ui/hr-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/hr-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/hr-element')), + chunks: [] }, - 'image-element': { - name: 'image-element', - type: 'components:plate-ui', + "image-element": { + name: "image-element", + type: "registry:ui", registryDependencies: ["media-popover","caption","resizable"], - files: ['registry/default/plate-ui/image-element.tsx'], + files: ["registry/default/plate-ui/image-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/image-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/image-element')), + chunks: [] }, - 'indent-list-toolbar-button': { - name: 'indent-list-toolbar-button', - type: 'components:plate-ui', + "indent-list-toolbar-button": { + name: "indent-list-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/indent-list-toolbar-button.tsx'], + files: ["registry/default/plate-ui/indent-list-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/indent-list-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/indent-list-toolbar-button')), + chunks: [] }, - 'indent-toolbar-button': { - name: 'indent-toolbar-button', - type: 'components:plate-ui', + "indent-toolbar-button": { + name: "indent-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/indent-toolbar-button.tsx'], + files: ["registry/default/plate-ui/indent-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/indent-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/indent-toolbar-button')), + chunks: [] }, - 'inline-combobox': { - name: 'inline-combobox', - type: 'components:plate-ui', + "inline-combobox": { + name: "inline-combobox", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/inline-combobox.tsx'], + files: ["registry/default/plate-ui/inline-combobox.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/inline-combobox.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/inline-combobox')), + chunks: [] }, - 'input': { - name: 'input', - type: 'components:plate-ui', + "input": { + name: "input", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/input.tsx'], + files: ["registry/default/plate-ui/input.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/input.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/input')), + chunks: [] }, - 'insert-dropdown-menu': { - name: 'insert-dropdown-menu', - type: 'components:plate-ui', + "insert-dropdown-menu": { + name: "insert-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar"], - files: ['registry/default/plate-ui/insert-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/insert-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/insert-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/insert-dropdown-menu')), + chunks: [] }, - 'kbd-leaf': { - name: 'kbd-leaf', - type: 'components:plate-ui', + "kbd-leaf": { + name: "kbd-leaf", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/kbd-leaf.tsx'], + files: ["registry/default/plate-ui/kbd-leaf.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/kbd-leaf.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/kbd-leaf')), + chunks: [] }, - 'line-height-dropdown-menu': { - name: 'line-height-dropdown-menu', - type: 'components:plate-ui', + "line-height-dropdown-menu": { + name: "line-height-dropdown-menu", + type: "registry:ui", registryDependencies: ["toolbar","dropdown-menu"], - files: ['registry/default/plate-ui/line-height-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/line-height-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/line-height-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/line-height-dropdown-menu')), + chunks: [] }, - 'link-element': { - name: 'link-element', - type: 'components:plate-ui', + "link-element": { + name: "link-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/link-element.tsx'], + files: ["registry/default/plate-ui/link-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/link-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/link-element')), + chunks: [] }, - 'link-floating-toolbar': { - name: 'link-floating-toolbar', - type: 'components:plate-ui', + "link-floating-toolbar": { + name: "link-floating-toolbar", + type: "registry:ui", registryDependencies: ["button","input","popover","separator"], - files: ['registry/default/plate-ui/link-floating-toolbar.tsx'], + files: ["registry/default/plate-ui/link-floating-toolbar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/link-floating-toolbar.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/link-floating-toolbar')), + chunks: [] }, - 'link-toolbar-button': { - name: 'link-toolbar-button', - type: 'components:plate-ui', + "link-toolbar-button": { + name: "link-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/link-toolbar-button.tsx'], + files: ["registry/default/plate-ui/link-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/link-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/link-toolbar-button')), + chunks: [] }, - 'list-element': { - name: 'list-element', - type: 'components:plate-ui', + "list-element": { + name: "list-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/list-element.tsx'], + files: ["registry/default/plate-ui/list-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/list-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/list-element')), + chunks: [] }, - 'list-toolbar-button': { - name: 'list-toolbar-button', - type: 'components:plate-ui', + "list-toolbar-button": { + name: "list-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/list-toolbar-button.tsx'], + files: ["registry/default/plate-ui/list-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/list-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/list-toolbar-button')), + chunks: [] }, - 'mark-toolbar-button': { - name: 'mark-toolbar-button', - type: 'components:plate-ui', + "mark-toolbar-button": { + name: "mark-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/mark-toolbar-button.tsx'], + files: ["registry/default/plate-ui/mark-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/mark-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/mark-toolbar-button')), + chunks: [] }, - 'media-embed-element': { - name: 'media-embed-element', - type: 'components:plate-ui', + "media-embed-element": { + name: "media-embed-element", + type: "registry:ui", registryDependencies: ["media-popover","caption","resizable"], - files: ['registry/default/plate-ui/media-embed-element.tsx'], + files: ["registry/default/plate-ui/media-embed-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/media-embed-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/media-embed-element')), + chunks: [] }, - 'media-popover': { - name: 'media-popover', - type: 'components:plate-ui', + "media-popover": { + name: "media-popover", + type: "registry:ui", registryDependencies: ["button","input","popover","separator"], - files: ['registry/default/plate-ui/media-popover.tsx'], + files: ["registry/default/plate-ui/media-popover.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/media-popover.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/media-popover')), + chunks: [] }, - 'media-toolbar-button': { - name: 'media-toolbar-button', - type: 'components:plate-ui', + "media-toolbar-button": { + name: "media-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/media-toolbar-button.tsx'], + files: ["registry/default/plate-ui/media-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/media-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/media-toolbar-button')), + chunks: [] }, - 'mention-element': { - name: 'mention-element', - type: 'components:plate-ui', + "mention-element": { + name: "mention-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/mention-element.tsx'], + files: ["registry/default/plate-ui/mention-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/mention-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/mention-element')), + chunks: [] }, - 'mention-input-element': { - name: 'mention-input-element', - type: 'components:plate-ui', + "mention-input-element": { + name: "mention-input-element", + type: "registry:ui", registryDependencies: ["inline-combobox"], - files: ['registry/default/plate-ui/mention-input-element.tsx'], + files: ["registry/default/plate-ui/mention-input-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/mention-input-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/mention-input-element')), + chunks: [] }, - 'mode-dropdown-menu': { - name: 'mode-dropdown-menu', - type: 'components:plate-ui', + "mode-dropdown-menu": { + name: "mode-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar"], - files: ['registry/default/plate-ui/mode-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/mode-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/mode-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/mode-dropdown-menu')), + chunks: [] }, - 'more-dropdown-menu': { - name: 'more-dropdown-menu', - type: 'components:plate-ui', + "more-dropdown-menu": { + name: "more-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar"], - files: ['registry/default/plate-ui/more-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/more-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/more-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/more-dropdown-menu')), + chunks: [] }, - 'outdent-toolbar-button': { - name: 'outdent-toolbar-button', - type: 'components:plate-ui', + "outdent-toolbar-button": { + name: "outdent-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/outdent-toolbar-button.tsx'], + files: ["registry/default/plate-ui/outdent-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/outdent-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/outdent-toolbar-button')), + chunks: [] }, - 'paragraph-element': { - name: 'paragraph-element', - type: 'components:plate-ui', + "paragraph-element": { + name: "paragraph-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/paragraph-element.tsx'], + files: ["registry/default/plate-ui/paragraph-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/paragraph-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/paragraph-element')), + chunks: [] }, - 'placeholder': { - name: 'placeholder', - type: 'components:plate-ui', + "placeholder": { + name: "placeholder", + type: "registry:ui", registryDependencies: ["paragraph-element"], - files: ['registry/default/plate-ui/placeholder.tsx'], + files: ["registry/default/plate-ui/placeholder.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/placeholder.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/placeholder')), + chunks: [] }, - 'popover': { - name: 'popover', - type: 'components:plate-ui', + "popover": { + name: "popover", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/popover.tsx'], + files: ["registry/default/plate-ui/popover.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/popover.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/popover')), + chunks: [] }, - 'search-highlight-leaf': { - name: 'search-highlight-leaf', - type: 'components:plate-ui', + "search-highlight-leaf": { + name: "search-highlight-leaf", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/search-highlight-leaf.tsx'], + files: ["registry/default/plate-ui/search-highlight-leaf.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/search-highlight-leaf.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/search-highlight-leaf')), + chunks: [] }, - 'separator': { - name: 'separator', - type: 'components:plate-ui', + "separator": { + name: "separator", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/separator.tsx'], + files: ["registry/default/plate-ui/separator.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/separator.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/separator')), + chunks: [] }, - 'slash-input-element': { - name: 'slash-input-element', - type: 'components:plate-ui', + "slash-input-element": { + name: "slash-input-element", + type: "registry:ui", registryDependencies: ["inline-combobox"], - files: ['registry/default/plate-ui/slash-input-element.tsx'], + files: ["registry/default/plate-ui/slash-input-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/slash-input-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/slash-input-element')), + chunks: [] }, - 'table-cell-element': { - name: 'table-cell-element', - type: 'components:plate-ui', + "table-cell-element": { + name: "table-cell-element", + type: "registry:ui", registryDependencies: ["resizable"], - files: ['registry/default/plate-ui/table-cell-element.tsx'], + files: ["registry/default/plate-ui/table-cell-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/table-cell-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/table-cell-element')), + chunks: [] }, - 'table-dropdown-menu': { - name: 'table-dropdown-menu', - type: 'components:plate-ui', + "table-dropdown-menu": { + name: "table-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar"], - files: ['registry/default/plate-ui/table-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/table-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/table-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/table-dropdown-menu')), + chunks: [] }, - 'table-element': { - name: 'table-element', - type: 'components:plate-ui', + "table-element": { + name: "table-element", + type: "registry:ui", registryDependencies: ["dropdown-menu"], - files: ['registry/default/plate-ui/table-element.tsx'], + files: ["registry/default/plate-ui/table-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/table-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/table-element')), + chunks: [] }, - 'table-row-element': { - name: 'table-row-element', - type: 'components:plate-ui', + "table-row-element": { + name: "table-row-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/table-row-element.tsx'], + files: ["registry/default/plate-ui/table-row-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/table-row-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/table-row-element')), + chunks: [] }, - 'todo-list-element': { - name: 'todo-list-element', - type: 'components:plate-ui', + "todo-list-element": { + name: "todo-list-element", + type: "registry:ui", registryDependencies: ["checkbox"], - files: ['registry/default/plate-ui/todo-list-element.tsx'], + files: ["registry/default/plate-ui/todo-list-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/todo-list-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/todo-list-element')), + chunks: [] }, - 'toggle-element': { - name: 'toggle-element', - type: 'components:plate-ui', + "toggle-element": { + name: "toggle-element", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/toggle-element.tsx'], + files: ["registry/default/plate-ui/toggle-element.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/toggle-element.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/toggle-element')), + chunks: [] }, - 'toggle-toolbar-button': { - name: 'toggle-toolbar-button', - type: 'components:plate-ui', + "toggle-toolbar-button": { + name: "toggle-toolbar-button", + type: "registry:ui", registryDependencies: ["toolbar"], - files: ['registry/default/plate-ui/toggle-toolbar-button.tsx'], + files: ["registry/default/plate-ui/toggle-toolbar-button.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/toggle-toolbar-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/toggle-toolbar-button')), + chunks: [] }, - 'toolbar': { - name: 'toolbar', - type: 'components:plate-ui', + "toolbar": { + name: "toolbar", + type: "registry:ui", registryDependencies: ["tooltip","separator"], - files: ['registry/default/plate-ui/toolbar.tsx'], + files: ["registry/default/plate-ui/toolbar.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/toolbar.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/toolbar')), + chunks: [] }, - 'tooltip': { - name: 'tooltip', - type: 'components:plate-ui', + "tooltip": { + name: "tooltip", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/tooltip.tsx'], + files: ["registry/default/plate-ui/tooltip.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/tooltip.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/tooltip')), + chunks: [] }, - 'turn-into-dropdown-menu': { - name: 'turn-into-dropdown-menu', - type: 'components:plate-ui', + "turn-into-dropdown-menu": { + name: "turn-into-dropdown-menu", + type: "registry:ui", registryDependencies: ["dropdown-menu","toolbar"], - files: ['registry/default/plate-ui/turn-into-dropdown-menu.tsx'], + files: ["registry/default/plate-ui/turn-into-dropdown-menu.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/turn-into-dropdown-menu.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/turn-into-dropdown-menu')), + chunks: [] }, - 'resizable': { - name: 'resizable', - type: 'components:plate-ui', + "resizable": { + name: "resizable", + type: "registry:ui", registryDependencies: [], - files: ['registry/default/plate-ui/resizable.tsx'], + files: ["registry/default/plate-ui/resizable.tsx"], + component: React.lazy(() => import("@/registry/default/plate-ui/resizable.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/plate-ui/resizable')), + chunks: [] }, - 'editor-default': { - name: 'editor-default', - type: 'components:example', + "editor-default": { + name: "editor-default", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-default.tsx'], + files: ["registry/default/example/editor-default.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-default.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-default')), + chunks: [] }, - 'editor-disabled': { - name: 'editor-disabled', - type: 'components:example', + "editor-disabled": { + name: "editor-disabled", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-disabled.tsx'], + files: ["registry/default/example/editor-disabled.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-disabled.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-disabled')), + chunks: [] }, - 'editor-ghost': { - name: 'editor-ghost', - type: 'components:example', + "editor-ghost": { + name: "editor-ghost", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-ghost.tsx'], + files: ["registry/default/example/editor-ghost.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-ghost.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-ghost')), + chunks: [] }, - 'editor-label': { - name: 'editor-label', - type: 'components:example', + "editor-label": { + name: "editor-label", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-label.tsx'], + files: ["registry/default/example/editor-label.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-label.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-label')), + chunks: [] }, - 'editor-text': { - name: 'editor-text', - type: 'components:example', + "editor-text": { + name: "editor-text", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-text.tsx'], + files: ["registry/default/example/editor-text.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-text.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-text')), + chunks: [] }, - 'editor-button': { - name: 'editor-button', - type: 'components:example', + "editor-button": { + name: "editor-button", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-button.tsx'], + files: ["registry/default/example/editor-button.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-button.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-button')), + chunks: [] }, - 'editor-form': { - name: 'editor-form', - type: 'components:example', + "editor-form": { + name: "editor-form", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editor-form.tsx'], + files: ["registry/default/example/editor-form.tsx"], + component: React.lazy(() => import("@/registry/default/example/editor-form.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editor-form')), + chunks: [] }, - 'basic-editor-default-demo': { - name: 'basic-editor-default-demo', - type: 'components:example', + "basic-editor-default-demo": { + name: "basic-editor-default-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/basic-editor-default-demo.tsx'], + files: ["registry/default/example/basic-editor-default-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/basic-editor-default-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/basic-editor-default-demo')), + chunks: [] }, - 'controlled-demo': { - name: 'controlled-demo', - type: 'components:example', + "controlled-demo": { + name: "controlled-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/controlled-demo.tsx'], + files: ["registry/default/example/controlled-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/controlled-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/controlled-demo')), + chunks: [] }, - 'basic-editor-styling-demo': { - name: 'basic-editor-styling-demo', - type: 'components:example', + "basic-editor-styling-demo": { + name: "basic-editor-styling-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/basic-editor-styling-demo.tsx'], + files: ["registry/default/example/basic-editor-styling-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/basic-editor-styling-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/basic-editor-styling-demo')), + chunks: [] }, - 'basic-editor-handler-demo': { - name: 'basic-editor-handler-demo', - type: 'components:example', + "basic-editor-handler-demo": { + name: "basic-editor-handler-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/basic-editor-handler-demo.tsx'], + files: ["registry/default/example/basic-editor-handler-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/basic-editor-handler-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/basic-editor-handler-demo')), + chunks: [] }, - 'basic-editor-value-demo': { - name: 'basic-editor-value-demo', - type: 'components:example', + "basic-editor-value-demo": { + name: "basic-editor-value-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/basic-editor-value-demo.tsx'], + files: ["registry/default/example/basic-editor-value-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/basic-editor-value-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/basic-editor-value-demo')), + chunks: [] }, - 'basic-plugins-components-demo': { - name: 'basic-plugins-components-demo', - type: 'components:example', + "basic-plugins-components-demo": { + name: "basic-plugins-components-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/basic-plugins-components-demo.tsx'], + files: ["registry/default/example/basic-plugins-components-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/basic-plugins-components-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/basic-plugins-components-demo')), + chunks: [] }, - 'basic-plugins-default-demo': { - name: 'basic-plugins-default-demo', - type: 'components:example', + "basic-plugins-default-demo": { + name: "basic-plugins-default-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/basic-plugins-default-demo.tsx'], + files: ["registry/default/example/basic-plugins-default-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/basic-plugins-default-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/basic-plugins-default-demo')), + chunks: [] }, - 'cloud-demo': { - name: 'cloud-demo', - type: 'components:example', + "cloud-demo": { + name: "cloud-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/cloud-demo.tsx'], + files: ["registry/default/example/cloud-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/cloud-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/cloud-demo')), + chunks: [] }, - 'editable-voids-demo': { - name: 'editable-voids-demo', - type: 'components:example', + "editable-voids-demo": { + name: "editable-voids-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/editable-voids-demo.tsx'], + files: ["registry/default/example/editable-voids-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/editable-voids-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/editable-voids-demo')), + chunks: [] }, - 'find-replace-demo': { - name: 'find-replace-demo', - type: 'components:example', + "find-replace-demo": { + name: "find-replace-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/find-replace-demo.tsx'], + files: ["registry/default/example/find-replace-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/find-replace-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/find-replace-demo')), + chunks: [] }, - 'hundreds-blocks-demo': { - name: 'hundreds-blocks-demo', - type: 'components:example', + "hundreds-blocks-demo": { + name: "hundreds-blocks-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/hundreds-blocks-demo.tsx'], + files: ["registry/default/example/hundreds-blocks-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/hundreds-blocks-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/hundreds-blocks-demo')), + chunks: [] }, - 'hundreds-editors-demo': { - name: 'hundreds-editors-demo', - type: 'components:example', + "hundreds-editors-demo": { + name: "hundreds-editors-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/hundreds-editors-demo.tsx'], + files: ["registry/default/example/hundreds-editors-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/hundreds-editors-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/hundreds-editors-demo')), + chunks: [] }, - 'iframe-demo': { - name: 'iframe-demo', - type: 'components:example', + "iframe-demo": { + name: "iframe-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/iframe-demo.tsx'], + files: ["registry/default/example/iframe-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/iframe-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/iframe-demo')), + chunks: [] }, - 'mode-toggle': { - name: 'mode-toggle', - type: 'components:example', - registryDependencies: [], - files: ['registry/default/example/mode-toggle.tsx'], + "mode-toggle": { + name: "mode-toggle", + type: "registry:example", + registryDependencies: undefined, + files: ["registry/default/example/mode-toggle.tsx"], + component: React.lazy(() => import("@/registry/default/example/mode-toggle.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/mode-toggle')), + chunks: [] }, - 'multiple-editors-demo': { - name: 'multiple-editors-demo', - type: 'components:example', + "multiple-editors-demo": { + name: "multiple-editors-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/multiple-editors-demo.tsx'], + files: ["registry/default/example/multiple-editors-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/multiple-editors-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/multiple-editors-demo')), + chunks: [] }, - 'version-history-demo': { - name: 'version-history-demo', - type: 'components:example', + "version-history-demo": { + name: "version-history-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/version-history-demo.tsx'], + files: ["registry/default/example/version-history-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/version-history-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/version-history-demo')), + chunks: [] }, - 'playground-demo': { - name: 'playground-demo', - type: 'components:example', + "playground-demo": { + name: "playground-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/playground-demo.tsx'], + files: ["registry/default/example/playground-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/playground-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/playground-demo')), + chunks: [] }, - 'preview-md-demo': { - name: 'preview-md-demo', - type: 'components:example', + "preview-md-demo": { + name: "preview-md-demo", + type: "registry:example", registryDependencies: [], - files: ['registry/default/example/preview-md-demo.tsx'], + files: ["registry/default/example/preview-md-demo.tsx"], + component: React.lazy(() => import("@/registry/default/example/preview-md-demo.tsx")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/registry/default/example/preview-md-demo')), + chunks: [] }, - 'globals': { - name: 'globals', - type: 'components:component', - registryDependencies: [], - files: ['styles/globals.css'], + "plate-types": { + name: "plate-types", + type: "registry:lib", + registryDependencies: undefined, + files: ["registry/default/lib/plate-types.ts"], + component: React.lazy(() => import("@/registry/default/lib/plate-types.ts")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/styles/globals.css')), + chunks: [] }, - 'plate-types': { - name: 'plate-types', - type: 'components:component', - registryDependencies: [], - files: ['types/plate-types.ts'], + "utils": { + name: "utils", + type: "registry:lib", + registryDependencies: undefined, + files: ["registry/default/lib/utils.ts"], + component: React.lazy(() => import("@/registry/default/lib/utils.ts")), + source: "", + category: "undefined", + subcategory: "undefined", + chunks: [] + }, + "use-debounce": { + name: "use-debounce", + type: "registry:hook", + registryDependencies: undefined, + files: ["registry/default/hooks/use-debounce.ts"], + component: React.lazy(() => import("@/registry/default/hooks/use-debounce.ts")), + source: "", category: "undefined", subcategory: "undefined", - component: React.lazy(() => import('@/types/plate-types.ts')), + chunks: [] }, }, } diff --git a/apps/www/src/app/_components/home-tabs.tsx b/apps/www/src/app/_components/home-tabs.tsx index 48b2d640db..fa604c3be5 100644 --- a/apps/www/src/app/_components/home-tabs.tsx +++ b/apps/www/src/app/_components/home-tabs.tsx @@ -9,7 +9,6 @@ import { parseAsBoolean, useQueryState } from 'nuqs'; import { BlockPreview } from '@/components/block-preview'; import { settingsStore } from '@/components/context/settings-store'; -import { ThemeWrapper } from '@/components/theme-wrapper'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Button } from '@/registry/default/plate-ui/button'; @@ -69,9 +68,7 @@ export default function HomeTabs() { - - - + diff --git a/apps/www/src/app/_components/installation-tab.tsx b/apps/www/src/app/_components/installation-tab.tsx index 1232bf02f7..1a0b9c692c 100644 --- a/apps/www/src/app/_components/installation-tab.tsx +++ b/apps/www/src/app/_components/installation-tab.tsx @@ -368,9 +368,6 @@ export default function InstallationTab() { const jsxCode: string[] = []; - if (isManual) { - addLine(``, true); - } if (hasDnd) { addLine(``, true); } @@ -412,9 +409,6 @@ export default function InstallationTab() { if (hasDnd) { addLine(``, false, true); } - if (isManual) { - addLine(``, false, true); - } const plateCode = [ `export function PlateEditor() {`, diff --git a/apps/www/src/app/announcement-button.tsx b/apps/www/src/app/announcement-button.tsx index ebe21b91a0..0de0181cf7 100644 --- a/apps/www/src/app/announcement-button.tsx +++ b/apps/www/src/app/announcement-button.tsx @@ -11,15 +11,19 @@ import { Separator } from '@/registry/default/plate-ui/separator'; export function AnnouncementButton() { return ( ); diff --git a/apps/www/src/app/page.tsx b/apps/www/src/app/page.tsx index 8a5db45d3b..33fe062f9f 100644 --- a/apps/www/src/app/page.tsx +++ b/apps/www/src/app/page.tsx @@ -30,16 +30,14 @@ export default function IndexPage() {
- Build your rich-text editor. -
- -
+ Build your rich-text editor +
Plugin system & primitive component library.
CLI for styled components. Customizable. Open Source.
-
+
diff --git a/apps/www/src/components/block-copy-button.tsx b/apps/www/src/components/block-copy-button.tsx index dac8a8918c..7f7617a581 100644 --- a/apps/www/src/components/block-copy-button.tsx +++ b/apps/www/src/components/block-copy-button.tsx @@ -11,6 +11,7 @@ import { Button } from '@/registry/default/plate-ui/button'; import { Tooltip, TooltipContent, + TooltipProvider, TooltipTrigger, } from '@/registry/default/plate-ui/tooltip'; @@ -34,29 +35,33 @@ export function BlockCopyButton({ }, [hasCopied]); return ( - - - - - Copy code - + + + + + + + Copy code + + + ); } diff --git a/apps/www/src/components/block-preview.tsx b/apps/www/src/components/block-preview.tsx index a96301ef26..cb50066238 100644 --- a/apps/www/src/components/block-preview.tsx +++ b/apps/www/src/components/block-preview.tsx @@ -12,6 +12,7 @@ import { useLiftMode } from '@/hooks/use-lift-mode'; import PlaygroundDemo from '@/registry/default/example/playground-demo'; import { BlockToolbar } from './block-toolbar'; +import { ThemeWrapper } from './theme-wrapper'; import { ResizableHandle, ResizablePanel, @@ -59,7 +60,14 @@ export function BlockPreview({ setFullScreen={setFullScreen} /> - {fullScreen && } + {fullScreen && ( + + + + )} {!fullScreen && ( <> @@ -71,7 +79,9 @@ export function BlockPreview({ )} >
- + + +
@@ -90,7 +100,9 @@ export function BlockPreview({ minSize={30} >
- + + +
{/* {isLoading ? ( */} diff --git a/apps/www/src/components/context/providers.tsx b/apps/www/src/components/context/providers.tsx index e00cdd8f57..05fc73edf6 100644 --- a/apps/www/src/components/context/providers.tsx +++ b/apps/www/src/components/context/providers.tsx @@ -2,8 +2,6 @@ import { Provider as JotaiProvider } from 'jotai'; -import { TooltipProvider } from '@/registry/default/plate-ui/tooltip'; - import { ThemeProvider } from './theme-provider'; export function Providers({ children }: { children: React.ReactNode }) { @@ -15,13 +13,7 @@ export function Providers({ children }: { children: React.ReactNode }) { disableTransitionOnChange enableSystem > - - {children} - + {children} ); diff --git a/apps/www/src/components/copy-code-button.tsx b/apps/www/src/components/copy-code-button.tsx index f982f6c3f8..9587600dfc 100644 --- a/apps/www/src/components/copy-code-button.tsx +++ b/apps/www/src/components/copy-code-button.tsx @@ -2,28 +2,23 @@ import * as React from 'react'; import { CheckIcon, CopyIcon } from '@radix-ui/react-icons'; import { cn } from '@udecode/cn'; -import template from 'lodash.template'; +import { ClipboardIcon } from 'lucide-react'; import { useConfig } from '@/hooks/use-config'; +import { useThemesConfig } from '@/hooks/use-themes-config'; +import { type Theme, themeColorsToCssVariables } from '@/lib/themes'; import { Button } from '@/registry/default/plate-ui/button'; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@/registry/default/plate-ui/dialog'; -import { type BaseColor, baseColors } from '@/registry/registry-base-colors'; import { copyToClipboardWithMeta } from './copy-button'; export function CopyCodeButton({ className, + compact, ...props -}: React.ComponentProps) { +}: React.ComponentProps & { compact?: boolean }) { const [config] = useConfig(); - const activeTheme = baseColors.find((theme) => theme.name === config.theme); + const { themesConfig } = useThemesConfig(); + const activeTheme = themesConfig.activeTheme; const [hasCopied, setHasCopied] = React.useState(false); React.useEffect(() => { @@ -32,260 +27,81 @@ export function CopyCodeButton({ }, 2000); }, [hasCopied]); - return ( - <> - {activeTheme && ( - - )} - - - - - - - Theme - - Copy and paste the following code into your CSS file. - - -
- - {activeTheme && ( - - )} -
-
-
- - ); -} + const themeCode = React.useMemo(() => { + return getThemeCode(activeTheme, config.radius); + }, [activeTheme, config.radius]); -function CustomizerCode() { - const [config] = useConfig(); - const activeTheme = baseColors.find((theme) => theme.name === config.theme); + if (compact) { + return ( + + ); + } return ( -
- {/* eslint-disable-next-line react/no-unknown-property */} -
-
-          
-            @layer base {
-              :root {
-            
-                  --background:{' '}
-              {activeTheme?.cssVars.light.background};
-            
-            
-                  --foreground:{' '}
-              {activeTheme?.cssVars.light.foreground};
-            
-            {[
-              'card',
-              'popover',
-              'primary',
-              'secondary',
-              'muted',
-              'accent',
-              'destructive',
-            ].map((prefix) => (
-              <>
-                
-                      --{prefix}:{' '}
-                  {
-                    activeTheme?.cssVars.light[
-                      prefix as keyof typeof activeTheme.cssVars.light
-                    ]
-                  }
-                  ;
-                
-                
-                      --{prefix}-foreground:{' '}
-                  {
-                    activeTheme?.cssVars.light[
-                      `${prefix}-foreground` as keyof typeof activeTheme.cssVars.light
-                    ]
-                  }
-                  ;
-                
-              
-            ))}
-            
-                  --border:{' '}
-              {activeTheme?.cssVars.light.border};
-            
-            
-                  --input:{' '}
-              {activeTheme?.cssVars.light.input};
-            
-            
-                  --ring: {activeTheme?.cssVars.light.ring};
-            
-            
-                  --radius: {config.radius}rem;
-            
-              }
-             
-              .dark {
-            
-                  --background:{' '}
-              {activeTheme?.cssVars.dark.background};
-            
-            
-                  --foreground:{' '}
-              {activeTheme?.cssVars.dark.foreground};
-            
-            {[
-              'card',
-              'popover',
-              'primary',
-              'secondary',
-              'muted',
-              'accent',
-              'destructive',
-            ].map((prefix) => (
-              <>
-                
-                      --{prefix}:{' '}
-                  {
-                    activeTheme?.cssVars.dark[
-                      prefix as keyof typeof activeTheme.cssVars.dark
-                    ]
-                  }
-                  ;
-                
-                
-                      --{prefix}-foreground:{' '}
-                  {
-                    activeTheme?.cssVars.dark[
-                      `${prefix}-foreground` as keyof typeof activeTheme.cssVars.dark
-                    ]
-                  }
-                  ;
-                
-              
-            ))}
-            
-                  --border:{' '}
-              {activeTheme?.cssVars.dark.border};
-            
-            
-                  --input: {activeTheme?.cssVars.dark.input}
-              ;
-            
-            
-                  --ring: {activeTheme?.cssVars.dark.ring};
-            
-              }
-            }
-          
-        
-
-
+ ); } -function getThemeCode(theme: BaseColor, radius: number) { +export function getThemeCode(theme: Theme, radius: number): string { if (!theme) { return ''; } - return template(BASE_STYLES_WITH_VARIABLES)({ - colors: theme.cssVars, - radius, - }); -} + const lightVars = themeColorsToCssVariables(theme.colors); + const darkVars = themeColorsToCssVariables(theme.colorsDark); -const BASE_STYLES_WITH_VARIABLES = ` + return `\ @layer base { :root { - --background: <%- colors.light["background"] %>; - --foreground: <%- colors.light["foreground"] %>; - --card: <%- colors.light["card"] %>; - --card-foreground: <%- colors.light["card-foreground"] %>; - --popover: <%- colors.light["popover"] %>; - --popover-foreground: <%- colors.light["popover-foreground"] %>; - --primary: <%- colors.light["primary"] %>; - --primary-foreground: <%- colors.light["primary-foreground"] %>; - --secondary: <%- colors.light["secondary"] %>; - --secondary-foreground: <%- colors.light["secondary-foreground"] %>; - --muted: <%- colors.light["muted"] %>; - --muted-foreground: <%- colors.light["muted-foreground"] %>; - --accent: <%- colors.light["accent"] %>; - --accent-foreground: <%- colors.light["accent-foreground"] %>; - --destructive: <%- colors.light["destructive"] %>; - --destructive-foreground: <%- colors.light["destructive-foreground"] %>; - --border: <%- colors.light["border"] %>; - --input: <%- colors.light["input"] %>; - --ring: <%- colors.light["ring"] %>; - --radius: <%- radius %>rem; +${Object.entries(lightVars) + .map(([key, value]) => ` ${key}: ${value};`) + .join('\n')} + --radius: ${radius}rem; } - + .dark { - --background: <%- colors.dark["background"] %>; - --foreground: <%- colors.dark["foreground"] %>; - --card: <%- colors.dark["card"] %>; - --card-foreground: <%- colors.dark["card-foreground"] %>; - --popover: <%- colors.dark["popover"] %>; - --popover-foreground: <%- colors.dark["popover-foreground"] %>; - --primary: <%- colors.dark["primary"] %>; - --primary-foreground: <%- colors.dark["primary-foreground"] %>; - --secondary: <%- colors.dark["secondary"] %>; - --secondary-foreground: <%- colors.dark["secondary-foreground"] %>; - --muted: <%- colors.dark["muted"] %>; - --muted-foreground: <%- colors.dark["muted-foreground"] %>; - --accent: <%- colors.dark["accent"] %>; - --accent-foreground: <%- colors.dark["accent-foreground"] %>; - --destructive: <%- colors.dark["destructive"] %>; - --destructive-foreground: <%- colors.dark["destructive-foreground"] %>; - --border: <%- colors.dark["border"] %>; - --input: <%- colors.dark["input"] %>; - --ring: <%- colors.dark["ring"] %>; +${Object.entries(darkVars) + .map(([key, value]) => ` ${key}: ${value};`) + .join('\n')} } } `; +} diff --git a/apps/www/src/components/customizer-drawer.tsx b/apps/www/src/components/customizer-drawer.tsx index af6b544d88..23c4277c8b 100644 --- a/apps/www/src/components/customizer-drawer.tsx +++ b/apps/www/src/components/customizer-drawer.tsx @@ -51,7 +51,7 @@ export default function CustomizerDrawer() { }} shouldScaleBackground={false} > - + @@ -66,7 +66,7 @@ export default function CustomizerDrawer() { modal={false} > diff --git a/apps/www/src/components/customizer-tabs.tsx b/apps/www/src/components/customizer-tabs.tsx index fdcf250d64..38cc1f42fe 100644 --- a/apps/www/src/components/customizer-tabs.tsx +++ b/apps/www/src/components/customizer-tabs.tsx @@ -9,8 +9,9 @@ export function CustomizerTabs() { const customizerTab = settingsStore.use.customizerTab(); return ( -
+
{ settingsStore.set.customizerTab(value); @@ -23,16 +24,10 @@ export function CustomizerTabs() {
- + - + diff --git a/apps/www/src/components/plate-ui/playground-insert-dropdown-menu.tsx b/apps/www/src/components/plate-ui/playground-insert-dropdown-menu.tsx index 3538310145..1725abe31d 100644 --- a/apps/www/src/components/plate-ui/playground-insert-dropdown-menu.tsx +++ b/apps/www/src/components/plate-ui/playground-insert-dropdown-menu.tsx @@ -24,6 +24,7 @@ import { TablePlugin, insertTable } from '@udecode/plate-table/react'; import { CheckPlugin } from '@/components/context/check-plugin'; import { settingsStore } from '@/components/context/settings-store'; import { Icons } from '@/components/icons'; +import { useMyEditorRef } from '@/registry/default/lib/plate-types'; import { DropdownMenu, DropdownMenuContent, @@ -34,7 +35,6 @@ import { useOpenState, } from '@/registry/default/plate-ui/dropdown-menu'; import { ToolbarButton } from '@/registry/default/plate-ui/toolbar'; -import { useMyEditorRef } from '@/types/plate-types'; const items = [ { diff --git a/apps/www/src/components/plate-ui/playground-turn-into-dropdown-menu.tsx b/apps/www/src/components/plate-ui/playground-turn-into-dropdown-menu.tsx index f6c720cd92..80e9e47806 100644 --- a/apps/www/src/components/plate-ui/playground-turn-into-dropdown-menu.tsx +++ b/apps/www/src/components/plate-ui/playground-turn-into-dropdown-menu.tsx @@ -23,6 +23,7 @@ import { ListPlugin } from '@udecode/plate-list/react'; import { CheckPlugin } from '@/components/context/check-plugin'; import { settingsStore } from '@/components/context/settings-store'; import { Icons } from '@/components/icons'; +import { useMyEditorRef } from '@/registry/default/lib/plate-types'; import { DropdownMenu, DropdownMenuContent, @@ -33,7 +34,6 @@ import { useOpenState, } from '@/registry/default/plate-ui/dropdown-menu'; import { ToolbarButton } from '@/registry/default/plate-ui/toolbar'; -import { useMyEditorRef } from '@/types/plate-types'; const items = [ { diff --git a/apps/www/src/components/plugins-tab-content.tsx b/apps/www/src/components/plugins-tab-content.tsx index eb19f2dffe..0584cded4c 100644 --- a/apps/www/src/components/plugins-tab-content.tsx +++ b/apps/www/src/components/plugins-tab-content.tsx @@ -6,7 +6,7 @@ import React, { useEffect, useMemo, useState } from 'react'; import { ArrowUpRight, Eye, EyeOff } from 'lucide-react'; import { customizerList } from '@/config/customizer-list'; -import { useDebounce } from '@/hooks/use-debounce'; +import { useDebounce } from '@/registry/default/hooks/use-debounce'; import { Button } from '@/registry/default/plate-ui/button'; import { Checkbox } from '@/registry/default/plate-ui/checkbox'; diff --git a/apps/www/src/components/setting-checkbox.tsx b/apps/www/src/components/setting-checkbox.tsx index 4335080d45..9a02a309d9 100644 --- a/apps/www/src/components/setting-checkbox.tsx +++ b/apps/www/src/components/setting-checkbox.tsx @@ -15,6 +15,7 @@ import { import { Tooltip, TooltipContent, + TooltipProvider, TooltipTrigger, } from '@/registry/default/plate-ui/tooltip'; @@ -50,26 +51,28 @@ export function SettingCheckbox({
- - -
- { - settingsStore.set.setCheckedIdNext(id, _checked); - }} - /> - -
-
+ + + +
+ { + settingsStore.set.setCheckedIdNext(id, _checked); + }} + /> + +
+
- - {description} - -
+ + {description} + +
+
{badges?.map((badge) => ( diff --git a/apps/www/src/components/settings-toggle.tsx b/apps/www/src/components/settings-toggle.tsx index 1c976fb763..5201c098fe 100644 --- a/apps/www/src/components/settings-toggle.tsx +++ b/apps/www/src/components/settings-toggle.tsx @@ -5,6 +5,7 @@ import React from 'react'; import { Tooltip, TooltipContent, + TooltipProvider, TooltipTrigger, } from '@/registry/default/plate-ui/tooltip'; @@ -16,19 +17,25 @@ export function SettingsToggle() { const showSettings = settingsStore.use.showSettings(); return ( - - - settingsStore.set.showSettings(pressed)} - pressed={showSettings} - > - - - + + + + + settingsStore.set.showSettings(pressed) + } + pressed={showSettings} + > + + + - {showSettings ? 'Hide' : 'Show'} settings - + + {showSettings ? 'Hide' : 'Show'} settings + + + ); } diff --git a/apps/www/src/components/theme-customizer.tsx b/apps/www/src/components/theme-customizer.tsx index 7c7b07c40d..f440f25c71 100644 --- a/apps/www/src/components/theme-customizer.tsx +++ b/apps/www/src/components/theme-customizer.tsx @@ -3,7 +3,6 @@ import * as React from 'react'; import { - CheckIcon, InfoCircledIcon, MoonIcon, ResetIcon, @@ -13,31 +12,37 @@ import { cn } from '@udecode/cn'; import { useTheme } from 'next-themes'; import { useConfig } from '@/hooks/use-config'; +import { useMounted } from '@/hooks/use-mounted'; +import { useThemesConfig } from '@/hooks/use-themes-config'; +import { THEMES } from '@/lib/themes'; import { Button } from '@/registry/default/plate-ui/button'; import { Popover, PopoverContent, PopoverTrigger, } from '@/registry/default/plate-ui/popover'; -import { baseColors } from '@/registry/registry-base-colors'; +import { Separator } from '@/registry/default/plate-ui/separator'; -import { CopyCodeButton } from './copy-code-button'; +import { CopyCodeButton, getThemeCode } from './copy-code-button'; +import { ThemesSwitcher } from './themes-selector-mini'; import { Label } from './ui/label'; import { Skeleton } from './ui/skeleton'; export function ThemeCustomizer() { - const [mounted, setMounted] = React.useState(false); + const mounted = useMounted(); const [config, setConfig] = useConfig(); + const { setThemesConfig, themesConfig } = useThemesConfig(); + const activeTheme = themesConfig.activeTheme ?? THEMES['default-shadcn']; const { resolvedTheme: mode, setTheme: setMode } = useTheme(); - React.useEffect(() => { - setMounted(true); - }, []); + const themeCode = React.useMemo(() => { + return getThemeCode(activeTheme, config.radius); + }, [activeTheme, config.radius]); return ( - <> +
-
+
Customize
@@ -45,11 +50,9 @@ export function ThemeCustomizer() { Pick a style and color for your components.
- -
-
-
+
+
@@ -95,10 +98,13 @@ export function ThemeCustomizer() { className="ml-auto rounded-[0.5rem]" onClick={() => { setConfig({ - ...config, radius: 0.5, + style: 'default', theme: 'slate', }); + setThemesConfig({ + activeTheme: THEMES['default-shadcn'], + }); }} > @@ -106,51 +112,11 @@ export function ThemeCustomizer() {
-
- -
- {baseColors.map((theme) => { - const isActive = config.theme === theme.name; - - return mounted ? ( - - ) : ( - - ); - })} -
+
+ +
-
+
{['0', '0.3', '0.5', '0.75', '1.0'].map((value) => { @@ -176,7 +142,7 @@ export function ThemeCustomizer() { })}
-
+
{mounted ? ( @@ -208,7 +174,30 @@ export function ThemeCustomizer() { )}
+ + + +
+
+
+
+                
+                  {`/* ${themesConfig.activeTheme.name} */`}
+                  {themeCode.split('\n').map((line, index) => (
+                    
+                      {line}
+                    
+                  ))}
+                
+              
+
+
+ +
- +
); } diff --git a/apps/www/src/components/theme-switcher.tsx b/apps/www/src/components/theme-switcher.tsx new file mode 100644 index 0000000000..0be4166d87 --- /dev/null +++ b/apps/www/src/components/theme-switcher.tsx @@ -0,0 +1,28 @@ +'use client'; + +import * as React from 'react'; + +import { useSelectedLayoutSegment } from 'next/navigation'; + +import { useConfig } from '@/hooks/use-config'; + +export function ThemeSwitcher() { + const [config] = useConfig(); + const segment = useSelectedLayoutSegment(); + + React.useEffect(() => { + document.body.classList.forEach((className) => { + if (/^theme.*/.exec(className)) { + document.body.classList.remove(className); + } + }); + + const theme = segment === 'themes' ? config.theme : null; + + if (theme) { + return document.body.classList.add(`theme-${theme}`); + } + }, [segment, config]); + + return null; +} diff --git a/apps/www/src/components/theme-wrapper.tsx b/apps/www/src/components/theme-wrapper.tsx index ae95f70212..d375ddeb26 100644 --- a/apps/www/src/components/theme-wrapper.tsx +++ b/apps/www/src/components/theme-wrapper.tsx @@ -4,6 +4,8 @@ import { cn } from '@udecode/cn'; import { useConfig } from '@/hooks/use-config'; +import { ThemesStyle } from './themes-styles'; + interface ThemeWrapperProps extends React.ComponentProps<'div'> { defaultTheme?: string; } @@ -19,7 +21,8 @@ export function ThemeWrapper({
+ + {children}
); diff --git a/apps/www/src/components/themes-button.tsx b/apps/www/src/components/themes-button.tsx index 159368371a..bb0ce47512 100644 --- a/apps/www/src/components/themes-button.tsx +++ b/apps/www/src/components/themes-button.tsx @@ -2,107 +2,27 @@ import * as React from 'react'; -import { CheckIcon } from '@radix-ui/react-icons'; -import { cn } from '@udecode/cn'; import { Paintbrush } from 'lucide-react'; -import { useTheme } from 'next-themes'; -import { useConfig } from '@/hooks/use-config'; +import { THEME_LIST } from '@/lib/themes'; import { Button } from '@/registry/default/plate-ui/button'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '@/registry/default/plate-ui/tooltip'; -import { baseColors } from '@/registry/registry-base-colors'; import { settingsStore } from './context/settings-store'; -import { Skeleton } from './ui/skeleton'; +import { ThemesSwitcher } from './themes-selector-mini'; export function ThemesButton() { - const [config, setConfig] = useConfig(); - const { resolvedTheme: mode } = useTheme(); - const [mounted, setMounted] = React.useState(false); - - React.useEffect(() => { - setMounted(true); - }, []); - return (
- {mounted ? ( - <> - {['slate', 'rose', 'blue', 'green', 'orange'].map((color) => { - const theme = baseColors.find((th) => th.name === color); - const isActive = config.theme === color; - - if (!theme) { - return null; - } - - return ( - - - - - - {theme.label} - - - ); - })} - - ) : ( -
- - - - - -
- )} +
- - - setTheme('light')}> - - Light - - setTheme('dark')}> - - Dark - - setTheme('system')}> - - System - - - + ); } diff --git a/apps/www/src/registry/default/example/playground-demo.tsx b/apps/www/src/registry/default/example/playground-demo.tsx index 1438d9aea1..90e9a82f0e 100644 --- a/apps/www/src/registry/default/example/playground-demo.tsx +++ b/apps/www/src/registry/default/example/playground-demo.tsx @@ -320,9 +320,11 @@ export const usePlaygroundEditor = (id: any = '', scrollSelector?: string) => { export default function PlaygroundDemo({ id, + className, scrollSelector, }: { id?: ValueId; + className?: string; scrollSelector?: string; }) { const containerRef = useRef(null); @@ -333,80 +335,79 @@ export default function PlaygroundDemo({ return ( -
- - - - - - - - + + + + + + + + +
-
- + placeholder="" + focusRing={false} + /> - - - - - - - - - - - -
+ + + + + + + - - + +
- -
+ + + + +
+
); diff --git a/apps/www/src/hooks/use-debounce.ts b/apps/www/src/registry/default/hooks/use-debounce.ts similarity index 100% rename from apps/www/src/hooks/use-debounce.ts rename to apps/www/src/registry/default/hooks/use-debounce.ts diff --git a/apps/www/src/types/plate-types.ts b/apps/www/src/registry/default/lib/plate-types.ts similarity index 100% rename from apps/www/src/types/plate-types.ts rename to apps/www/src/registry/default/lib/plate-types.ts diff --git a/apps/www/src/lib/utils.ts b/apps/www/src/registry/default/lib/utils.ts similarity index 100% rename from apps/www/src/lib/utils.ts rename to apps/www/src/registry/default/lib/utils.ts diff --git a/apps/www/src/registry/default/plate-ui/color-dropdown-menu-items.tsx b/apps/www/src/registry/default/plate-ui/color-dropdown-menu-items.tsx index 61828bf4ca..9f044136d1 100644 --- a/apps/www/src/registry/default/plate-ui/color-dropdown-menu-items.tsx +++ b/apps/www/src/registry/default/plate-ui/color-dropdown-menu-items.tsx @@ -12,7 +12,12 @@ import type { TColor } from './color-dropdown-menu'; import { buttonVariants } from './button'; import { DropdownMenuItem } from './dropdown-menu'; -import { Tooltip, TooltipContent, TooltipTrigger } from './tooltip'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from './tooltip'; type ColorDropdownMenuItemProps = { isBrightColor: boolean; @@ -81,16 +86,18 @@ export function ColorDropdownMenuItems({ className={cn('grid grid-cols-[repeat(10,1fr)] gap-1', className)} {...props} > - {colors.map(({ isBrightColor, name, value }) => ( - - ))} + + {colors.map(({ isBrightColor, name, value }) => ( + + ))} +
); } diff --git a/apps/www/src/registry/default/plate-ui/comments-popover.tsx b/apps/www/src/registry/default/plate-ui/comments-popover.tsx index 12324873e3..298e19a9d6 100644 --- a/apps/www/src/registry/default/plate-ui/comments-popover.tsx +++ b/apps/www/src/registry/default/plate-ui/comments-popover.tsx @@ -55,7 +55,7 @@ export function CommentsPopover() { return ( - + diff --git a/apps/www/src/registry/default/plate-ui/draggable.tsx b/apps/www/src/registry/default/plate-ui/draggable.tsx index ff6164b35e..e5bd1f2296 100644 --- a/apps/www/src/registry/default/plate-ui/draggable.tsx +++ b/apps/www/src/registry/default/plate-ui/draggable.tsx @@ -23,6 +23,7 @@ import { Tooltip, TooltipContent, TooltipPortal, + TooltipProvider, TooltipTrigger, } from './tooltip'; @@ -78,30 +79,32 @@ const DragHandle = () => { const editor = useEditorRef(); return ( - - - { - event.stopPropagation(); - event.preventDefault(); - - // if (element.id) { - // editor.getApi(BlockSelectionPlugin).blockSelection.addSelectedRow(element.id as string); - // api.blockContextMenu.show(editor.id, event as any); - // } - }} - onMouseDown={() => { - editor - .getApi(BlockSelectionPlugin) - .blockSelection.resetSelectedIds(); - }} - /> - - - Drag to move - - + + + + { + event.stopPropagation(); + event.preventDefault(); + + // if (element.id) { + // editor.getApi(BlockSelectionPlugin).blockSelection.addSelectedRow(element.id as string); + // api.blockContextMenu.show(editor.id, event as any); + // } + }} + onMouseDown={() => { + editor + .getApi(BlockSelectionPlugin) + .blockSelection.resetSelectedIds(); + }} + /> + + + Drag to move + + + ); }; diff --git a/apps/www/src/registry/default/plate-ui/editor.tsx b/apps/www/src/registry/default/plate-ui/editor.tsx index 5646fd120b..832b4ec464 100644 --- a/apps/www/src/registry/default/plate-ui/editor.tsx +++ b/apps/www/src/registry/default/plate-ui/editor.tsx @@ -9,7 +9,7 @@ import { cva } from 'class-variance-authority'; const editorVariants = cva( cn( - 'relative overflow-x-auto whitespace-pre-wrap break-words', + 'relative overflow-x-auto whitespace-pre-wrap break-words text-foreground', 'min-h-[80px] w-full rounded-md bg-background px-6 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none', '[&_[data-slate-placeholder]]:text-muted-foreground [&_[data-slate-placeholder]]:!opacity-100', '[&_[data-slate-placeholder]]:top-[auto_!important]', diff --git a/apps/www/src/registry/default/plate-ui/emoji-input-element.tsx b/apps/www/src/registry/default/plate-ui/emoji-input-element.tsx index c00bc8b276..e170a8f48a 100644 --- a/apps/www/src/registry/default/plate-ui/emoji-input-element.tsx +++ b/apps/www/src/registry/default/plate-ui/emoji-input-element.tsx @@ -4,6 +4,8 @@ import { withRef } from '@udecode/cn'; import { PlateElement } from '@udecode/plate-common/react'; import { EmojiInlineIndexSearch, insertEmoji } from '@udecode/plate-emoji'; +import { useDebounce } from '@/registry/default/hooks/use-debounce'; + import { InlineCombobox, InlineComboboxContent, @@ -66,20 +68,3 @@ export const EmojiInputElement = withRef( ); } ); - -const useDebounce = (value: any, delay = 500) => { - const [debouncedValue, setDebouncedValue] = React.useState(value); - - React.useEffect(() => { - const handler: NodeJS.Timeout = setTimeout(() => { - setDebouncedValue(value); - }, delay); - - // Cancel the timeout if value changes (also on delay change or unmount) - return () => { - clearTimeout(handler); - }; - }, [value, delay]); - - return debouncedValue; -}; diff --git a/apps/www/src/registry/default/plate-ui/floating-toolbar.tsx b/apps/www/src/registry/default/plate-ui/floating-toolbar.tsx index 6e2ad7201d..a9fda8e243 100644 --- a/apps/www/src/registry/default/plate-ui/floating-toolbar.tsx +++ b/apps/www/src/registry/default/plate-ui/floating-toolbar.tsx @@ -65,7 +65,7 @@ export const FloatingToolbar = withRef< ; tooltip?: React.ReactNode; - } & React.ComponentPropsWithoutRef + } & React.ComponentPropsWithoutRef & + TooltipPrimitive.TooltipProviderProps >(function ExtendComponent( - { tooltip, tooltipContentProps, tooltipProps, ...props }, + { + delayDuration = 0, + disableHoverableContent = true, + skipDelayDuration = 0, + tooltip, + tooltipContentProps, + tooltipProps, + ...props + }, ref ) { const [mounted, setMounted] = React.useState(false); @@ -50,13 +63,21 @@ export function withTooltip< if (tooltip && mounted) { return ( - - {component} + + + {component} - - {tooltip} - - + + + {tooltip} + + + + ); } diff --git a/apps/www/src/registry/registry-examples.ts b/apps/www/src/registry/registry-examples.ts index 88ce47ad1e..cab7b60df8 100644 --- a/apps/www/src/registry/registry-examples.ts +++ b/apps/www/src/registry/registry-examples.ts @@ -152,13 +152,7 @@ export const examples: Registry = [ }, { external: true, - files: ['styles/globals.css'], - name: 'globals', - type: 'registry:style', - }, - { - external: true, - files: ['types/plate-types.ts'], + files: ['lib/plate-types.ts'], name: 'plate-types', type: 'registry:lib', }, diff --git a/apps/www/src/registry/registry-hooks.ts b/apps/www/src/registry/registry-hooks.ts index ba77fe8311..e3ddb1c49e 100644 --- a/apps/www/src/registry/registry-hooks.ts +++ b/apps/www/src/registry/registry-hooks.ts @@ -4,21 +4,11 @@ export const hooks: Registry = [ { files: [ { - path: 'hooks/use-mobile.tsx', + path: 'hooks/use-debounce.ts', type: 'registry:hook', }, ], - name: 'use-mobile', - type: 'registry:hook', - }, - { - files: [ - { - path: 'hooks/use-toast.ts', - type: 'registry:hook', - }, - ], - name: 'use-toast', + name: 'use-debounce', type: 'registry:hook', }, ]; From 4dc8b8962685ae94451f00001dc566e0d6f1a1dd Mon Sep 17 00:00:00 2001 From: zbeyens Date: Sun, 22 Sep 2024 20:49:27 +0200 Subject: [PATCH 5/8] fix --- apps/www/public/r/styles/default/color-dropdown-menu.json | 2 +- apps/www/public/r/styles/default/draggable.json | 2 +- apps/www/public/r/styles/default/emoji-input-element.json | 2 +- apps/www/public/r/styles/default/floating-toolbar.json | 2 +- apps/www/public/r/styles/default/tooltip.json | 2 +- apps/www/src/registry/default/plate-ui/tooltip.tsx | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/www/public/r/styles/default/color-dropdown-menu.json b/apps/www/public/r/styles/default/color-dropdown-menu.json index efc5a7ad01..c86e1eff83 100644 --- a/apps/www/public/r/styles/default/color-dropdown-menu.json +++ b/apps/www/public/r/styles/default/color-dropdown-menu.json @@ -14,7 +14,7 @@ "type": "registry:ui" }, { - "content": "'use client';\n\nimport React from 'react';\n\nimport type { DropdownMenuItemProps } from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '@udecode/cn';\n\nimport { Icons } from '@/components/icons';\n\nimport type { TColor } from './color-dropdown-menu';\n\nimport { buttonVariants } from './button';\nimport { DropdownMenuItem } from './dropdown-menu';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\n\ntype ColorDropdownMenuItemProps = {\n isBrightColor: boolean;\n isSelected: boolean;\n updateColor: (color: string) => void;\n value: string;\n name?: string;\n} & DropdownMenuItemProps;\n\nexport function ColorDropdownMenuItem({\n className,\n isBrightColor,\n isSelected,\n name,\n updateColor,\n value,\n ...props\n}: ColorDropdownMenuItemProps) {\n const content = (\n {\n e.preventDefault();\n updateColor(value);\n }}\n {...props}\n >\n {isSelected ? : null}\n \n );\n\n return name ? (\n \n {content}\n {name}\n \n ) : (\n content\n );\n}\n\ntype ColorDropdownMenuItemsProps = {\n colors: TColor[];\n updateColor: (color: string) => void;\n color?: string;\n} & React.HTMLAttributes;\n\nexport function ColorDropdownMenuItems({\n className,\n color,\n colors,\n updateColor,\n ...props\n}: ColorDropdownMenuItemsProps) {\n return (\n \n {colors.map(({ isBrightColor, name, value }) => (\n \n ))}\n
\n );\n}\n", + "content": "'use client';\n\nimport React from 'react';\n\nimport type { DropdownMenuItemProps } from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '@udecode/cn';\n\nimport { Icons } from '@/components/icons';\n\nimport type { TColor } from './color-dropdown-menu';\n\nimport { buttonVariants } from './button';\nimport { DropdownMenuItem } from './dropdown-menu';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './tooltip';\n\ntype ColorDropdownMenuItemProps = {\n isBrightColor: boolean;\n isSelected: boolean;\n updateColor: (color: string) => void;\n value: string;\n name?: string;\n} & DropdownMenuItemProps;\n\nexport function ColorDropdownMenuItem({\n className,\n isBrightColor,\n isSelected,\n name,\n updateColor,\n value,\n ...props\n}: ColorDropdownMenuItemProps) {\n const content = (\n {\n e.preventDefault();\n updateColor(value);\n }}\n {...props}\n >\n {isSelected ? : null}\n \n );\n\n return name ? (\n \n {content}\n {name}\n \n ) : (\n content\n );\n}\n\ntype ColorDropdownMenuItemsProps = {\n colors: TColor[];\n updateColor: (color: string) => void;\n color?: string;\n} & React.HTMLAttributes;\n\nexport function ColorDropdownMenuItems({\n className,\n color,\n colors,\n updateColor,\n ...props\n}: ColorDropdownMenuItemsProps) {\n return (\n \n \n {colors.map(({ isBrightColor, name, value }) => (\n \n ))}\n \n
\n );\n}\n", "path": "plate-ui/color-dropdown-menu-items.tsx", "target": "", "type": "registry:ui" diff --git a/apps/www/public/r/styles/default/draggable.json b/apps/www/public/r/styles/default/draggable.json index 2cad99ce70..823fd6f73e 100644 --- a/apps/www/public/r/styles/default/draggable.json +++ b/apps/www/public/r/styles/default/draggable.json @@ -6,7 +6,7 @@ ], "files": [ { - "content": "'use client';\n\nimport React from 'react';\n\nimport type { ClassNames, TEditor } from '@udecode/plate-common';\nimport type { DropTargetMonitor } from 'react-dnd';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n type PlateElementProps,\n useEditorRef,\n} from '@udecode/plate-common/react';\nimport {\n type DragItemNode,\n useDraggable,\n useDraggableState,\n} from '@udecode/plate-dnd';\nimport { BlockSelectionPlugin } from '@udecode/plate-selection/react';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipPortal,\n TooltipTrigger,\n} from './tooltip';\n\nexport interface DraggableProps\n extends PlateElementProps,\n ClassNames<{\n /** Block. */\n block: string;\n\n /** Block and gutter. */\n blockAndGutter: string;\n\n /** Block toolbar in the gutter. */\n blockToolbar: string;\n\n /**\n * Block toolbar wrapper in the gutter left. It has the height of a line\n * of the block.\n */\n blockToolbarWrapper: string;\n\n blockWrapper: string;\n\n /** Button to dnd the block, in the block toolbar. */\n dragHandle: string;\n\n /** Icon of the drag button, in the drag icon. */\n dragIcon: string;\n\n /** Show a dropline above or below the block when dragging a block. */\n dropLine: string;\n\n /** Gutter at the left side of the editor. It has the height of the block */\n gutterLeft: string;\n }> {\n /**\n * Intercepts the drop handling. If `false` is returned, the default drop\n * behavior is called after. If `true` is returned, the default behavior is\n * not called.\n */\n onDropHandler?: (\n editor: TEditor,\n props: {\n id: string;\n dragItem: DragItemNode;\n monitor: DropTargetMonitor;\n nodeRef: any;\n }\n ) => boolean;\n}\n\nconst DragHandle = () => {\n const editor = useEditorRef();\n\n return (\n \n \n {\n event.stopPropagation();\n event.preventDefault();\n\n // if (element.id) {\n // editor.getApi(BlockSelectionPlugin).blockSelection.addSelectedRow(element.id as string);\n // api.blockContextMenu.show(editor.id, event as any);\n // }\n }}\n onMouseDown={() => {\n editor\n .getApi(BlockSelectionPlugin)\n .blockSelection.resetSelectedIds();\n }}\n />\n \n \n Drag to move\n \n \n );\n};\n\nexport const Draggable = withRef<'div', DraggableProps>(\n ({ className, classNames = {}, onDropHandler, ...props }, ref) => {\n const { children, element } = props;\n\n const state = useDraggableState({ element, onDropHandler });\n const { dropLine, isDragging, isHovered } = state;\n const {\n droplineProps,\n groupProps,\n gutterLeftProps,\n previewRef,\n handleRef,\n } = useDraggable(state);\n\n return (\n \n \n
\n \n \n {isHovered && }\n
\n
\n
\n
\n\n
\n {children}\n\n {!!dropLine && (\n \n )}\n
\n
\n );\n }\n);\n", + "content": "'use client';\n\nimport React from 'react';\n\nimport type { ClassNames, TEditor } from '@udecode/plate-common';\nimport type { DropTargetMonitor } from 'react-dnd';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n type PlateElementProps,\n useEditorRef,\n} from '@udecode/plate-common/react';\nimport {\n type DragItemNode,\n useDraggable,\n useDraggableState,\n} from '@udecode/plate-dnd';\nimport { BlockSelectionPlugin } from '@udecode/plate-selection/react';\n\nimport { Icons } from '@/components/icons';\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n} from './tooltip';\n\nexport interface DraggableProps\n extends PlateElementProps,\n ClassNames<{\n /** Block. */\n block: string;\n\n /** Block and gutter. */\n blockAndGutter: string;\n\n /** Block toolbar in the gutter. */\n blockToolbar: string;\n\n /**\n * Block toolbar wrapper in the gutter left. It has the height of a line\n * of the block.\n */\n blockToolbarWrapper: string;\n\n blockWrapper: string;\n\n /** Button to dnd the block, in the block toolbar. */\n dragHandle: string;\n\n /** Icon of the drag button, in the drag icon. */\n dragIcon: string;\n\n /** Show a dropline above or below the block when dragging a block. */\n dropLine: string;\n\n /** Gutter at the left side of the editor. It has the height of the block */\n gutterLeft: string;\n }> {\n /**\n * Intercepts the drop handling. If `false` is returned, the default drop\n * behavior is called after. If `true` is returned, the default behavior is\n * not called.\n */\n onDropHandler?: (\n editor: TEditor,\n props: {\n id: string;\n dragItem: DragItemNode;\n monitor: DropTargetMonitor;\n nodeRef: any;\n }\n ) => boolean;\n}\n\nconst DragHandle = () => {\n const editor = useEditorRef();\n\n return (\n \n \n \n {\n event.stopPropagation();\n event.preventDefault();\n\n // if (element.id) {\n // editor.getApi(BlockSelectionPlugin).blockSelection.addSelectedRow(element.id as string);\n // api.blockContextMenu.show(editor.id, event as any);\n // }\n }}\n onMouseDown={() => {\n editor\n .getApi(BlockSelectionPlugin)\n .blockSelection.resetSelectedIds();\n }}\n />\n \n \n Drag to move\n \n \n \n );\n};\n\nexport const Draggable = withRef<'div', DraggableProps>(\n ({ className, classNames = {}, onDropHandler, ...props }, ref) => {\n const { children, element } = props;\n\n const state = useDraggableState({ element, onDropHandler });\n const { dropLine, isDragging, isHovered } = state;\n const {\n droplineProps,\n groupProps,\n gutterLeftProps,\n previewRef,\n handleRef,\n } = useDraggable(state);\n\n return (\n \n \n
\n \n \n {isHovered && }\n
\n
\n
\n
\n\n
\n {children}\n\n {!!dropLine && (\n \n )}\n
\n
\n );\n }\n);\n", "path": "plate-ui/draggable.tsx", "target": "", "type": "registry:ui" diff --git a/apps/www/public/r/styles/default/emoji-input-element.json b/apps/www/public/r/styles/default/emoji-input-element.json index ceef1bb623..4cd8ed33ec 100644 --- a/apps/www/public/r/styles/default/emoji-input-element.json +++ b/apps/www/public/r/styles/default/emoji-input-element.json @@ -4,7 +4,7 @@ ], "files": [ { - "content": "import React, { useMemo, useState } from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { EmojiInlineIndexSearch, insertEmoji } from '@udecode/plate-emoji';\n\nimport { useDebounce } from '@/hooks/use-debounce';\n\nimport {\n InlineCombobox,\n InlineComboboxContent,\n InlineComboboxEmpty,\n InlineComboboxInput,\n InlineComboboxItem,\n} from './inline-combobox';\n\nexport const EmojiInputElement = withRef(\n ({ className, ...props }, ref) => {\n const { children, editor, element } = props;\n const [value, setValue] = useState('');\n const debouncedValue = useDebounce(value, 100);\n const isPending = value !== debouncedValue;\n\n const filteredEmojis = useMemo(() => {\n if (debouncedValue.trim().length === 0) return [];\n\n return EmojiInlineIndexSearch.getInstance()\n .search(debouncedValue.replace(/:$/, ''))\n .get();\n }, [debouncedValue]);\n\n return (\n \n \n \n\n \n {!isPending && (\n No matching emoji found\n )}\n\n {filteredEmojis.map((emoji) => (\n insertEmoji(editor, emoji)}\n >\n {emoji.skins[0].native} {emoji.name}\n \n ))}\n \n \n\n {children}\n \n );\n }\n);\n", + "content": "import React, { useMemo, useState } from 'react';\n\nimport { withRef } from '@udecode/cn';\nimport { PlateElement } from '@udecode/plate-common/react';\nimport { EmojiInlineIndexSearch, insertEmoji } from '@udecode/plate-emoji';\n\nimport { useDebounce } from '@/registry/default/hooks/use-debounce';\n\nimport {\n InlineCombobox,\n InlineComboboxContent,\n InlineComboboxEmpty,\n InlineComboboxInput,\n InlineComboboxItem,\n} from './inline-combobox';\n\nexport const EmojiInputElement = withRef(\n ({ className, ...props }, ref) => {\n const { children, editor, element } = props;\n const [value, setValue] = useState('');\n const debouncedValue = useDebounce(value, 100);\n const isPending = value !== debouncedValue;\n\n const filteredEmojis = useMemo(() => {\n if (debouncedValue.trim().length === 0) return [];\n\n return EmojiInlineIndexSearch.getInstance()\n .search(debouncedValue.replace(/:$/, ''))\n .get();\n }, [debouncedValue]);\n\n return (\n \n \n \n\n \n {!isPending && (\n No matching emoji found\n )}\n\n {filteredEmojis.map((emoji) => (\n insertEmoji(editor, emoji)}\n >\n {emoji.skins[0].native} {emoji.name}\n \n ))}\n \n \n\n {children}\n \n );\n }\n);\n", "path": "plate-ui/emoji-input-element.tsx", "target": "", "type": "registry:ui" diff --git a/apps/www/public/r/styles/default/floating-toolbar.json b/apps/www/public/r/styles/default/floating-toolbar.json index af61bbd306..9de2dc03c0 100644 --- a/apps/www/public/r/styles/default/floating-toolbar.json +++ b/apps/www/public/r/styles/default/floating-toolbar.json @@ -4,7 +4,7 @@ ], "files": [ { - "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n PortalBody,\n useComposedRef,\n useEditorId,\n useEventEditorSelectors,\n} from '@udecode/plate-common/react';\nimport {\n type FloatingToolbarState,\n flip,\n offset,\n useFloatingToolbar,\n useFloatingToolbarState,\n} from '@udecode/plate-floating';\n\nimport { Toolbar } from './toolbar';\n\nexport const FloatingToolbar = withRef<\n typeof Toolbar,\n {\n state?: FloatingToolbarState;\n }\n>(({ children, state, ...props }, componentRef) => {\n const editorId = useEditorId();\n const focusedEditorId = useEventEditorSelectors.focus();\n\n const floatingToolbarState = useFloatingToolbarState({\n editorId,\n focusedEditorId,\n ...state,\n floatingOptions: {\n middleware: [\n offset(12),\n flip({\n fallbackPlacements: [\n 'top-start',\n 'top-end',\n 'bottom-start',\n 'bottom-end',\n ],\n padding: 12,\n }),\n ],\n placement: 'top',\n ...state?.floatingOptions,\n },\n });\n\n const {\n hidden,\n props: rootProps,\n ref: floatingRef,\n } = useFloatingToolbar(floatingToolbarState);\n\n const ref = useComposedRef(componentRef, floatingRef);\n\n if (hidden) return null;\n\n return (\n \n \n {children}\n \n \n );\n});\n", + "content": "'use client';\n\nimport React from 'react';\n\nimport { cn, withRef } from '@udecode/cn';\nimport {\n PortalBody,\n useComposedRef,\n useEditorId,\n useEventEditorSelectors,\n} from '@udecode/plate-common/react';\nimport {\n type FloatingToolbarState,\n flip,\n offset,\n useFloatingToolbar,\n useFloatingToolbarState,\n} from '@udecode/plate-floating';\n\nimport { Toolbar } from './toolbar';\n\nexport const FloatingToolbar = withRef<\n typeof Toolbar,\n {\n state?: FloatingToolbarState;\n }\n>(({ children, state, ...props }, componentRef) => {\n const editorId = useEditorId();\n const focusedEditorId = useEventEditorSelectors.focus();\n\n const floatingToolbarState = useFloatingToolbarState({\n editorId,\n focusedEditorId,\n ...state,\n floatingOptions: {\n middleware: [\n offset(12),\n flip({\n fallbackPlacements: [\n 'top-start',\n 'top-end',\n 'bottom-start',\n 'bottom-end',\n ],\n padding: 12,\n }),\n ],\n placement: 'top',\n ...state?.floatingOptions,\n },\n });\n\n const {\n hidden,\n props: rootProps,\n ref: floatingRef,\n } = useFloatingToolbar(floatingToolbarState);\n\n const ref = useComposedRef(componentRef, floatingRef);\n\n if (hidden) return null;\n\n return (\n \n \n {children}\n \n \n );\n});\n", "path": "plate-ui/floating-toolbar.tsx", "target": "", "type": "registry:ui" diff --git a/apps/www/public/r/styles/default/tooltip.json b/apps/www/public/r/styles/default/tooltip.json index 949704ca00..357e4999fd 100644 --- a/apps/www/public/r/styles/default/tooltip.json +++ b/apps/www/public/r/styles/default/tooltip.json @@ -4,7 +4,7 @@ ], "files": [ { - "content": "'use client';\n\nimport React from 'react';\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { withCn, withProps } from '@udecode/cn';\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\nexport const Tooltip = TooltipPrimitive.Root;\n\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipPortal = TooltipPrimitive.Portal;\n\nexport const TooltipContent = withCn(\n withProps(TooltipPrimitive.Content, {\n sideOffset: 4,\n }),\n 'z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md'\n);\n\nexport function withTooltip<\n T extends React.ComponentType | keyof HTMLElementTagNameMap,\n>(Component: T) {\n return React.forwardRef<\n React.ElementRef,\n {\n tooltipContentProps?: Omit<\n React.ComponentPropsWithoutRef,\n 'children'\n >;\n tooltipProps?: Omit<\n React.ComponentPropsWithoutRef,\n 'children'\n >;\n tooltip?: React.ReactNode;\n } & React.ComponentPropsWithoutRef\n >(function ExtendComponent(\n { tooltip, tooltipContentProps, tooltipProps, ...props },\n ref\n ) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n const component = ;\n\n if (tooltip && mounted) {\n return (\n \n {component}\n\n \n {tooltip}\n \n \n );\n }\n\n return component;\n });\n}\n", + "content": "'use client';\n\nimport React from 'react';\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { withCn, withProps } from '@udecode/cn';\n\nexport const TooltipProvider = withProps(TooltipPrimitive.Provider, {\n delayDuration: 0,\n disableHoverableContent: true,\n skipDelayDuration: 0,\n});\n\nexport const Tooltip = TooltipPrimitive.Root;\n\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipPortal = TooltipPrimitive.Portal;\n\nexport const TooltipContent = withCn(\n withProps(TooltipPrimitive.Content, {\n sideOffset: 4,\n }),\n 'z-50 overflow-hidden rounded-md bg-black px-3 py-1.5 text-sm font-semibold text-white shadow-md'\n);\n\nexport function withTooltip<\n T extends React.ComponentType | keyof HTMLElementTagNameMap,\n>(Component: T) {\n return React.forwardRef<\n React.ElementRef,\n {\n tooltipContentProps?: Omit<\n React.ComponentPropsWithoutRef,\n 'children'\n >;\n tooltipProps?: Omit<\n React.ComponentPropsWithoutRef,\n 'children'\n >;\n tooltip?: React.ReactNode;\n } & React.ComponentPropsWithoutRef &\n Omit\n >(function ExtendComponent(\n {\n delayDuration = 0,\n disableHoverableContent = true,\n skipDelayDuration = 0,\n tooltip,\n tooltipContentProps,\n tooltipProps,\n ...props\n },\n ref\n ) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n const component = ;\n\n if (tooltip && mounted) {\n return (\n \n \n {component}\n\n \n \n {tooltip}\n \n \n \n \n );\n }\n\n return component;\n });\n}\n", "path": "plate-ui/tooltip.tsx", "target": "", "type": "registry:ui" diff --git a/apps/www/src/registry/default/plate-ui/tooltip.tsx b/apps/www/src/registry/default/plate-ui/tooltip.tsx index 130f88ece5..ca6e82ab74 100644 --- a/apps/www/src/registry/default/plate-ui/tooltip.tsx +++ b/apps/www/src/registry/default/plate-ui/tooltip.tsx @@ -40,7 +40,7 @@ export function withTooltip< >; tooltip?: React.ReactNode; } & React.ComponentPropsWithoutRef & - TooltipPrimitive.TooltipProviderProps + Omit >(function ExtendComponent( { delayDuration = 0, From 76426b6b904e050c00401a3c33a6f6526aa93285 Mon Sep 17 00:00:00 2001 From: zbeyens Date: Mon, 23 Sep 2024 11:59:34 +0200 Subject: [PATCH 6/8] fix --- apps/www/src/components/main-nav.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/www/src/components/main-nav.tsx b/apps/www/src/components/main-nav.tsx index f9bcc55d3f..d5090c251f 100644 --- a/apps/www/src/components/main-nav.tsx +++ b/apps/www/src/components/main-nav.tsx @@ -30,7 +30,9 @@ export function MainNav() { @@ -40,7 +42,7 @@ export function MainNav() { className={cn( 'transition-colors hover:text-foreground/80', pathname?.startsWith('/docs/components') - ? 'text-foreground' + ? 'font-medium text-foreground' : 'text-foreground/60' )} href="/docs/components" From 2fadcdc01f27c1e6d7dfc245d4649b62416140e2 Mon Sep 17 00:00:00 2001 From: zbeyens Date: Tue, 24 Sep 2024 03:31:57 +0200 Subject: [PATCH 7/8] feat: registry --- apps/www/content/docs/components/cli.mdx | 68 +- templates/plate-template/components.json | 12 +- templates/plate-template/package.json | 1 + templates/plate-template/pnpm-lock.yaml | 5128 ++++++++++------- templates/plate-template/src/lib/utils.ts | 6 + .../plate-template/src/styles/globals.css | 28 +- templates/plate-template/tailwind.config.js | 151 +- 7 files changed, 3115 insertions(+), 2279 deletions(-) create mode 100644 templates/plate-template/src/lib/utils.ts diff --git a/apps/www/content/docs/components/cli.mdx b/apps/www/content/docs/components/cli.mdx index 6f012ba52b..525c2f2ff2 100644 --- a/apps/www/content/docs/components/cli.mdx +++ b/apps/www/content/docs/components/cli.mdx @@ -3,6 +3,12 @@ title: CLI description: Use the CLI to add components to your project. --- + + +**Note:** We are now using the `shadcn` CLI. + + + ## init Use the `init` command to initialize configuration and dependencies for a new project. @@ -13,41 +19,65 @@ The `init` command installs dependencies, adds the `cn` util, configures `tailwi npx @udecode/plate-ui@latest init ``` -You will be asked a few questions to configure `plate-components.json`: +You will be asked a few questions to configure `components.json`: ```txt showLineNumbers Which style would you like to use? › Default Which color would you like to use as base color? › Slate -Where is your global CSS file? › src/style/globals.css -Do you want to use CSS variables for colors? › no / yes -Are you using a custom tailwind prefix eg. tw-? (Leave blank if not) ... -Where is your tailwind.config.js located? › tailwind.config.js -Configure the import alias for components: › @/components -Configure the import alias for ui: › @/components/plate-ui -Are you using React Server Components? › no / yes +Do you want to use CSS variables for colors? › yes +``` + +To have the same look than Plate UI, you should: + +- Pick "Default" for the style. Plate does not have the "New York" style. +- Pick "Slate" for the base color. +- Pick "Yes" for using CSS variables. + +You should get something like this: + +```txt +npx shadcn@latest init +Need to install the following packages: +shadcn@2.0.7 +Ok to proceed? (y) y + +✔ Preflight checks. +✔ Verifying framework. Found Next.js. +✔ Validating Tailwind CSS. +✔ Validating import alias. +✔ Which style would you like to use? › Default +✔ Which color would you like to use as the base color? › Slate +✔ Would you like to use CSS variables for theming? … no / yes +✔ Writing components.json. +✔ Checking registry. +✔ Updating tailwind.config.js +✔ Updating src/styles/globals.css +✔ Installing dependencies. +✔ Created 1 file: + - src/lib/utils.ts + +Success! Project initialization completed. +You may now add components. ``` ### Options ```txt -Usage: @udecode/plate-ui init [options] +Usage: shadcn init [options] [components...] initialize your project and install dependencies +Arguments: + components the components to add or a url to the component. + Options: - -y, --yes skip confirmation prompt. (default: false) - -c, --cwd the working directory. defaults to the current directory. + -d, --defaults use default values i.e new-york, zinc and css variables. (default: false) + -f, --force force overwrite of existing components.json. (default: false) + -y, --yes skip confirmation prompt. (default: false) + -c, --cwd the working directory. defaults to the current directory. -h, --help display help for command ``` -### Add icons - -Add the icons you'll use in `components/icons.tsx`: - - - -We use icons from Lucide. You can use any icon library you want. - ## add Use the `add` command to add components and dependencies to your project. diff --git a/templates/plate-template/components.json b/templates/plate-template/components.json index e6266e13d8..132ed0edbc 100644 --- a/templates/plate-template/components.json +++ b/templates/plate-template/components.json @@ -1,14 +1,20 @@ { - "$schema": "https://platejs.org/schema.json", + "$schema": "https://ui.shadcn.com/schema.json", "style": "default", "rsc": true, + "tsx": true, "tailwind": { "config": "tailwind.config.js", "css": "src/styles/globals.css", "baseColor": "slate", - "cssVariables": true + "cssVariables": true, + "prefix": "" }, "aliases": { - "components": "@/components" + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" } } diff --git a/templates/plate-template/package.json b/templates/plate-template/package.json index f0c12d6450..0c6c2e44ef 100644 --- a/templates/plate-template/package.json +++ b/templates/plate-template/package.json @@ -17,6 +17,7 @@ "@udecode/cn": "^38.0.1", "@udecode/plate-common": "^38.0.0", "class-variance-authority": "0.7.0", + "clsx": "^2.1.1", "eslint-plugin-prettier": "^5.2.1", "lucide-react": "0.441.0", "next": "^14.2.9", diff --git a/templates/plate-template/pnpm-lock.yaml b/templates/plate-template/pnpm-lock.yaml index 2bf86d3ed9..a1b6477fa4 100644 --- a/templates/plate-template/pnpm-lock.yaml +++ b/templates/plate-template/pnpm-lock.yaml @@ -1,371 +1,258 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@radix-ui/react-slot': - specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-tooltip': - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@udecode/cn': - specifier: ^38.0.1 - version: 38.0.1(@types/react@18.3.7)(class-variance-authority@0.7.0)(react-dom@18.3.1)(react@18.3.1)(tailwind-merge@2.5.2) - '@udecode/plate-common': - specifier: ^38.0.0 - version: 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0) - class-variance-authority: - specifier: 0.7.0 - version: 0.7.0 - eslint-plugin-prettier: - specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.3.3) - lucide-react: - specifier: 0.441.0 - version: 0.441.0(react@18.3.1) - next: - specifier: ^14.2.9 - version: 14.2.12(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1) - next-themes: - specifier: ^0.3.0 - version: 0.3.0(react-dom@18.3.1)(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dnd: - specifier: ^16.0.1 - version: 16.0.1(@types/node@22.5.5)(@types/react@18.3.7)(react@18.3.1) - react-dnd-html5-backend: - specifier: ^16.0.1 - version: 16.0.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - slate: - specifier: 0.103.0 - version: 0.103.0 - slate-history: - specifier: 0.109.0 - version: 0.109.0(slate@0.103.0) - slate-hyperscript: - specifier: 0.100.0 - version: 0.100.0(slate@0.103.0) - slate-react: - specifier: 0.110.1 - version: 0.110.1(react-dom@18.3.1)(react@18.3.1)(slate@0.103.0) - tailwind-merge: - specifier: 2.5.2 - version: 2.5.2 - tailwindcss-animate: - specifier: 1.0.7 - version: 1.0.7(tailwindcss@3.4.12) - -devDependencies: - '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.3.1 - version: 4.3.1(prettier@3.3.3) - '@types/node': - specifier: ^22.5.4 - version: 22.5.5 - '@types/react': - specifier: ^18.3.5 - version: 18.3.7 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 - '@typescript-eslint/parser': - specifier: ^8.5.0 - version: 8.6.0(eslint@8.57.1)(typescript@5.6.2) - autoprefixer: - specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.47) - encoding: - specifier: ^0.1.13 - version: 0.1.13 - eslint: - specifier: ^8.56.0 - version: 8.57.1 - eslint-config-next: - specifier: 14.2.12 - version: 14.2.12(eslint@8.57.1)(typescript@5.6.2) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.1) - eslint-plugin-react: - specifier: ^7.35.2 - version: 7.36.1(eslint@8.57.1) - eslint-plugin-tailwindcss: - specifier: ^3.17.4 - version: 3.17.4(tailwindcss@3.4.12) - eslint-plugin-unused-imports: - specifier: ^4.1.3 - version: 4.1.4(eslint@8.57.1) - postcss: - specifier: ^8.4.45 - version: 8.4.47 - prettier: - specifier: ^3.3.3 - version: 3.3.3 - tailwindcss: - specifier: ^3.4.10 - version: 3.4.12 - typescript: - specifier: 5.6.2 - version: 5.6.2 +importers: + + .: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-tooltip': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/cn': + specifier: ^38.0.1 + version: 38.0.1(@types/react@18.3.7)(class-variance-authority@0.7.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwind-merge@2.5.2) + '@udecode/plate-common': + specifier: ^38.0.0 + version: 38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + class-variance-authority: + specifier: 0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) + lucide-react: + specifier: 0.441.0 + version: 0.441.0(react@18.3.1) + next: + specifier: ^14.2.9 + version: 14.2.12(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: + specifier: ^0.3.0 + version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dnd: + specifier: ^16.0.1 + version: 16.0.1(@types/node@22.5.5)(@types/react@18.3.7)(react@18.3.1) + react-dnd-html5-backend: + specifier: ^16.0.1 + version: 16.0.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + slate: + specifier: 0.103.0 + version: 0.103.0 + slate-history: + specifier: 0.109.0 + version: 0.109.0(slate@0.103.0) + slate-hyperscript: + specifier: 0.100.0 + version: 0.100.0(slate@0.103.0) + slate-react: + specifier: 0.110.1 + version: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) + tailwind-merge: + specifier: 2.5.2 + version: 2.5.2 + tailwindcss-animate: + specifier: 1.0.7 + version: 1.0.7(tailwindcss@3.4.12) + devDependencies: + '@ianvs/prettier-plugin-sort-imports': + specifier: ^4.3.1 + version: 4.3.1(prettier@3.3.3) + '@types/node': + specifier: ^22.5.4 + version: 22.5.5 + '@types/react': + specifier: ^18.3.5 + version: 18.3.7 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@typescript-eslint/parser': + specifier: ^8.5.0 + version: 8.6.0(eslint@8.57.1)(typescript@5.6.2) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.47) + encoding: + specifier: ^0.1.13 + version: 0.1.13 + eslint: + specifier: ^8.56.0 + version: 8.57.1 + eslint-config-next: + specifier: 14.2.12 + version: 14.2.12(eslint@8.57.1)(typescript@5.6.2) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.1) + eslint-plugin-react: + specifier: ^7.35.2 + version: 7.36.1(eslint@8.57.1) + eslint-plugin-tailwindcss: + specifier: ^3.17.4 + version: 3.17.4(tailwindcss@3.4.12) + eslint-plugin-unused-imports: + specifier: ^4.1.3 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1) + postcss: + specifier: ^8.4.45 + version: 8.4.47 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + tailwindcss: + specifier: ^3.4.10 + version: 3.4.12 + typescript: + specifier: 5.6.2 + version: 5.6.2 packages: - /@alloc/quick-lru@5.2.0: + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - /@babel/code-frame@7.24.7: + '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.0 - /@babel/compat-data@7.25.4: + '@babel/compat-data@7.25.4': resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.25.2: + '@babel/core@7.25.2': resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - convert-source-map: 2.0.0 - debug: 4.3.7 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - /@babel/generator@7.25.6: + '@babel/generator@7.25.6': resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.25.6 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - /@babel/helper-compilation-targets@7.25.2: + '@babel/helper-compilation-targets@7.25.2': resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 - lru-cache: 5.1.1 - semver: 6.3.1 - /@babel/helper-module-imports@7.24.7: + '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - transitivePeerDependencies: - - supports-color - /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + '@babel/helper-module-transforms@7.25.2': resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 - transitivePeerDependencies: - - supports-color - /@babel/helper-simple-access@7.24.7: + '@babel/helper-simple-access@7.24.7': resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - transitivePeerDependencies: - - supports-color - /@babel/helper-string-parser@7.24.8: + '@babel/helper-string-parser@7.24.8': resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.7: + '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.24.8: + '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.25.6: + '@babel/helpers@7.25.6': resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - /@babel/highlight@7.24.7: + '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 - /@babel/parser@7.25.6: + '@babel/parser@7.25.6': resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.25.6 - /@babel/runtime@7.25.6: + '@babel/runtime@7.25.6': resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - /@babel/template@7.25.0: + '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 - /@babel/traverse@7.25.6: + '@babel/traverse@7.25.6': resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - debug: 4.3.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/types@7.25.6: + '@babel/types@7.25.6': resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.1): + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.11.1: + '@eslint-community/regexpp@4.11.1': resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@2.1.4: + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.7 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - /@eslint/js@8.57.1: + '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@floating-ui/core@1.6.8: + '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} - dependencies: - '@floating-ui/utils': 0.2.8 - dev: false - /@floating-ui/dom@1.6.11: + '@floating-ui/dom@1.6.11': resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} - dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 - dev: false - /@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1): + '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} peerDependencies: - react: '*' - react-dom: '*' - dependencies: - '@floating-ui/dom': 1.6.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false + react: '>=16.8.0' + react-dom: '>=16.8.0' - /@floating-ui/utils@0.2.8: + '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - dev: false - /@humanwhocodes/config-array@0.13.0: + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.3: + '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - /@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.3): + '@ianvs/prettier-plugin-sort-imports@4.3.1': resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} peerDependencies: '@vue/compiler-sfc': 2.7.x || 3.x @@ -373,577 +260,2581 @@ packages: peerDependenciesMeta: '@vue/compiler-sfc': optional: true - dependencies: - '@babel/core': 7.25.2 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - prettier: 3.3.3 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - dev: true - /@isaacs/cliui@8.0.2: + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - /@jridgewell/gen-mapping@0.3.5: + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.2: + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.2.1: + '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec@1.5.0: + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@jridgewell/trace-mapping@0.3.25: + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - /@juggle/resize-observer@3.4.0: + '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - dev: false - /@next/env@14.2.12: + '@next/env@14.2.12': resolution: {integrity: sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==} - dev: false - /@next/eslint-plugin-next@14.2.12: + '@next/eslint-plugin-next@14.2.12': resolution: {integrity: sha512-cPrKbXtK8NTThOOFNxRGGTw+5s02Ek8z8ri/hZqeKs6uP8LOTGqFyBy6hpCXt7TvLzzriWiiwRyD4h0XYmPEEg==} - dependencies: - glob: 10.3.10 - dev: true - /@next/swc-darwin-arm64@14.2.12: + '@next/swc-darwin-arm64@14.2.12': resolution: {integrity: sha512-crHJ9UoinXeFbHYNok6VZqjKnd8rTd7K3Z2zpyzF1ch7vVNKmhjv/V7EHxep3ILoN8JB9AdRn/EtVVyG9AkCXw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64@14.2.12: + '@next/swc-darwin-x64@14.2.12': resolution: {integrity: sha512-JbEaGbWq18BuNBO+lCtKfxl563Uw9oy2TodnN2ioX00u7V1uzrsSUcg3Ep9ce+P0Z9es+JmsvL2/rLphz+Frcw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-gnu@14.2.12: + '@next/swc-linux-arm64-gnu@14.2.12': resolution: {integrity: sha512-qBy7OiXOqZrdp88QEl2H4fWalMGnSCrr1agT/AVDndlyw2YJQA89f3ttR/AkEIP9EkBXXeGl6cC72/EZT5r6rw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl@14.2.12: + '@next/swc-linux-arm64-musl@14.2.12': resolution: {integrity: sha512-EfD9L7o9biaQxjwP1uWXnk3vYZi64NVcKUN83hpVkKocB7ogJfyH2r7o1pPnMtir6gHZiGCeHKagJ0yrNSLNHw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu@14.2.12: + '@next/swc-linux-x64-gnu@14.2.12': resolution: {integrity: sha512-iQ+n2pxklJew9IpE47hE/VgjmljlHqtcD5UhZVeHICTPbLyrgPehaKf2wLRNjYH75udroBNCgrSSVSVpAbNoYw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl@14.2.12: + '@next/swc-linux-x64-musl@14.2.12': resolution: {integrity: sha512-rFkUkNwcQ0ODn7cxvcVdpHlcOpYxMeyMfkJuzaT74xjAa5v4fxP4xDk5OoYmPi8QNLDs3UgZPMSBmpBuv9zKWA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@14.2.12: + '@next/swc-win32-arm64-msvc@14.2.12': resolution: {integrity: sha512-PQFYUvwtHs/u0K85SG4sAdDXYIPXpETf9mcEjWc0R4JmjgMKSDwIU/qfZdavtP6MPNiMjuKGXHCtyhR/M5zo8g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc@14.2.12: + '@next/swc-win32-ia32-msvc@14.2.12': resolution: {integrity: sha512-FAj2hMlcbeCV546eU2tEv41dcJb4NeqFlSXU/xL/0ehXywHnNpaYajOUvn3P8wru5WyQe6cTZ8fvckj/2XN4Vw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc@14.2.12: + '@next/swc-win32-x64-msvc@14.2.12': resolution: {integrity: sha512-yu8QvV53sBzoIVRHsxCHqeuS8jYq6Lrmdh0briivuh+Brsp6xjg80MAozUsBTAV9KNmY08KlX0KYTWz1lbPzEg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - /@nolyfill/is-core-module@1.0.39: + '@nolyfill/is-core-module@1.0.39': resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - dev: true - /@pkgjs/parseargs@0.11.0: + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - requiresBuild: true - optional: true - /@pkgr/core@0.1.1: + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: false - /@radix-ui/primitive@1.1.0: + '@radix-ui/primitive@1.1.0': resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} - dev: false - /@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-arrow@1.1.0': resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-compose-refs@1.1.0': resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-context@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-context@1.1.0': resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-dismissable-layer@1.1.0': resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-id@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-popper@1.2.0': resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-portal@1.1.1': resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-presence@1.1.0': resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-primitive@2.0.0': resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-slot@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-slot@1.1.0': resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): + '@radix-ui/react-tooltip@1.1.2': resolution: {integrity: sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: '*' - react-dom: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-use-controllable-state@1.1.0': resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-use-escape-keydown@1.1.0': resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-use-layout-effect@1.1.0': resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.3.7 - react: 18.3.1 - dev: false - /@radix-ui/react-use-rect@1.1.0(@types/react@18.3.7)(react@18.3.1): + '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@radix-ui/rect': 1.1.0 + + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.1.0': + resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + + '@react-dnd/asap@5.0.2': + resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} + + '@react-dnd/invariant@4.0.2': + resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} + + '@react-dnd/shallowequal@4.0.2': + resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.5': + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react@18.3.7': + resolution: {integrity: sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==} + + '@typescript-eslint/eslint-plugin@8.6.0': + resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.6.0': + resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.6.0': + resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.6.0': + resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.6.0': + resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.6.0': + resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.6.0': + resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.6.0': + resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@udecode/cn@38.0.1': + resolution: {integrity: sha512-9w0yzIGX/2KAZyYDXJCPJJIUdAGnneH8nYlpFAFjFgNrNhBqgCp1H9T0Cl8LKeDHkjKfP+Xe59ttuCd8ieqeTg==} + peerDependencies: + class-variance-authority: '>=0.7.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + tailwind-merge: '>=2.2.0' + + '@udecode/plate-common@38.0.4': + resolution: {integrity: sha512-xmo4jrHZT2mTvYLsHAs4JHfBwMUwMQIURX8rF33gAVmUcP+piswaDhIfsr5OXxwc82pWCwGxv4343VHz2NLdbA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.108.0' + + '@udecode/plate-core@38.0.4': + resolution: {integrity: sha512-AzQO42bZyRtZuD5pnJ2aoiN9sN+Pn5sLB48t34d7rc22il/9urUgocmaxAlJRqJmgbdCfk8cVFzFMm5wM46RVQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.108.0' + + '@udecode/plate-utils@38.0.4': + resolution: {integrity: sha512-G4VzdHbAv8Jm+1J3p9VNRu38Tl2TnCZbQT7omtLAl/XLQCxk69LX0kHKe/Vmh2nhSFuCtu2JRIYIYY18SyKTzQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-hyperscript: '>=0.66.0' + slate-react: '>=0.110.0' + + '@udecode/react-hotkeys@37.0.0': + resolution: {integrity: sha512-3ZV5LiaTnKyhXwN6U0NE2cofNsNN2IPMkNCDntbSIIRLYmI+o6LRkDwAucSNh/BIdNXfvxscsR04RYyIwjGbJw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@udecode/react-utils@38.0.1': + resolution: {integrity: sha512-flUBUNmTgaSi3N2qK4+Dv962d4VKiVYn0S6eQ1lAwofSZ70I2PtOGdFiCilSkCD9tq4T4I2ez0YVTgJB0UW2iw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@udecode/slate-react@38.0.4': + resolution: {integrity: sha512-JjwrQSEvniNVKIO5vkfbR6r7DYmURH/hUFEpDpBMvciO7YDlS6ONsP3dV7cngWKpDFLsJhrr8JgVNH0uDMACTQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.103.0' + slate-history: '>=0.93.0' + slate-react: '>=0.108.0' + + '@udecode/slate-utils@38.0.4': + resolution: {integrity: sha512-7Dwu1fLEoqs9OJ9ZsPbx1G4STHZ91SDc+wCEOgAclMUrr9b1HBErJ9E6Svqp63hicXcUd2du2qSdSVTlyw7mGg==} + peerDependencies: + slate: '>=0.103.0' + slate-history: '>=0.93.0' + + '@udecode/slate@38.0.4': + resolution: {integrity: sha512-PlnavxtTd4xIqC/HdNl/nebMUogBjXgq1WyiH1mCXBNzMRuTpss7ByhXOr/SO67h6CKpaeGc1kf3dqZsHQWHZw==} + peerDependencies: + slate: '>=0.103.0' + slate-history: '>=0.93.0' + + '@udecode/utils@37.0.0': + resolution: {integrity: sha512-30ixi2pznIXyIqpFocX+X5Sj38js+wZ0RLY14eZv1C1zwWo5BxSuJfzpGQTvGcLPJnij019tEpmGH61QdDxtrQ==} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + compute-scroll-into-view@3.1.0: + resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + direction@1.0.4: + resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} + hasBin: true + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dnd-core@16.0.1: + resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.25: + resolution: {integrity: sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@14.2.12: + resolution: {integrity: sha512-fzUIlF6Ng1cUFFd013wn9H3YhKe3vV/cZBC0Ec9S64q/wGoTq0HlASA7WgiOwDAISSbzkLprInLiIMu6U8bqEw==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.11.0: + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.0: + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.36.1: + resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-tailwindcss@3.17.4: + resolution: {integrity: sha512-gJAEHmCq2XFfUP/+vwEfEJ9igrPeZFg+skeMtsxquSQdxba9XRk5bn0Bp9jxG1VV9/wwPKi1g3ZjItu6MIjhNg==} + engines: {node: '>=18.12.0'} + peerDependencies: + tailwindcss: ^3.4.0 + + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hotkey@0.2.0: + resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + jotai-optics@0.4.0: + resolution: {integrity: sha512-osbEt9AgS55hC4YTZDew2urXKZkaiLmLqkTS/wfW5/l0ib8bmmQ7kBXSFaosV6jDDWSp00IipITcJARFHdp42g==} + peerDependencies: + jotai: '>=2.0.0' + optics-ts: '>=2.0.0' + + jotai-x@1.2.4: + resolution: {integrity: sha512-FyLrAR/ZDtmaWgif4cNRuJvMam/RSFv+B11/p4T427ws/T+8WhZzwmULwNogG6ZbZq+v1XpH6f9aN1lYqY5dLg==} + peerDependencies: + '@types/react': '>=17.0.0' + jotai: '>=2.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + jotai@2.8.4: + resolution: {integrity: sha512-f6jwjhBJcDtpeauT2xH01gnqadKEySwwt1qNBLvAXcnojkmb76EdqRt05Ym8IamfHGAQz2qMKAwftnyjeSoHAA==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.mapvalues@4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.441.0: + resolution: {integrity: sha512-0vfExYtvSDhkC2lqg0zYVW1Uu9GsI4knuV9GP9by5z0Xhc4Zi5RejTxfz9LsjRmCyWVzHCJvxGKZWcRyvQCWVg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next-themes@0.3.0: + resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + + next@14.2.12: + resolution: {integrity: sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optics-ts@2.4.1: + resolution: {integrity: sha512-HaYzMHvC80r7U/LqAd4hQyopDezC60PO2qF5GuIwALut2cl5rK1VWHsqTp0oqoJJWjiv6uXKqsO+Q2OO0C3MmQ==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-compare@2.6.0: + resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dnd-html5-backend@16.0.1: + resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} + + react-dnd@16.0.1: + resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} + peerDependencies: + '@types/hoist-non-react-statics': '>= 3.3.1' + '@types/node': '>= 12' + '@types/react': '>= 16' + react: '>= 16.14' + peerDependenciesMeta: + '@types/hoist-non-react-statics': + optional: true + '@types/node': + optional: true + '@types/react': + optional: true + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-tracked@1.7.14: + resolution: {integrity: sha512-6UMlgQeRAGA+uyYzuQGm7kZB6ZQYFhc7sntgP7Oxwwd6M0Ud/POyb4K3QWT1eXvoifSa80nrAWnXWFGpOvbwkw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '*' + react-native: '*' + scheduler: '>=0.19.0' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redux@4.2.1: + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slate-history@0.109.0: + resolution: {integrity: sha512-DHavPwrTTAEAV66eAocB3iQHEj65N6IVtbRK98ZuqGT0S44T3zXlhzY+5SZ7EPxRcoOYVt1dioRxXYM/+PmCiQ==} + peerDependencies: + slate: '>=0.65.3' + + slate-hyperscript@0.100.0: + resolution: {integrity: sha512-fb2KdAYg6RkrQGlqaIi4wdqz3oa0S4zKNBJlbnJbNOwa23+9FLD6oPVx9zUGqCSIpy+HIpOeqXrg0Kzwh/Ii4A==} + peerDependencies: + slate: '>=0.65.3' + + slate-react@0.110.1: + resolution: {integrity: sha512-bx6J0PkY9A50O4w78k4NPqNOXGo49fmSbCRgr8OBDWKKo4BeSt9y3vGXCkQ/Mm4lQ8riyRKr3TrJXzqMY7lRZg==} + peerDependencies: + react: '>=18.2.0' + react-dom: '>=18.2.0' + slate: '>=0.99.0' + + slate@0.103.0: + resolution: {integrity: sha512-eCUOVqUpADYMZ59O37QQvUdnFG+8rin0OGQAXNHvHbQeVJ67Bu0spQbcy621vtf8GQUXTEQBlk6OP9atwwob4w==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.1: + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@2.5.2: + resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.12: + resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-context-selector@1.4.4: + resolution: {integrity: sha512-pS790zwGxxe59GoBha3QYOwk8AFGp4DN6DOtH+eoqVmgBBRXVx4IlPDhJmmMiNQAgUaLlP+58aqRC3A4rdaSjg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '*' + react-native: '*' + scheduler: '>=0.19.0' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + use-deep-compare@1.3.0: + resolution: {integrity: sha512-94iG+dEdEP/Sl3WWde+w9StIunlV8Dgj+vkt5wTwMoFQLaijiEZSXXy8KtcStpmEDtIptRJiNeD4ACTtVvnIKA==} + peerDependencies: + react: '>=16.8.0' + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zustand-x@3.0.4: + resolution: {integrity: sha512-dVD8WUEpR/0mMdLah9j8i+r6PMAq9Ii2u+BX/9Bn4MHRt8sSnRQ90YMUlTVonZYAHGb2UHZwPpE2gMb8GtYDDw==} + peerDependencies: + zustand: '>=4.3.9' + + zustand@4.5.5: + resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + + '@babel/compat-data@7.25.4': {} + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helpers@7.25.6': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.6.11 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/utils@0.2.8': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.3)': + dependencies: + '@babel/core': 7.25.2 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + prettier: 3.3.3 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@juggle/resize-observer@3.4.0': {} + + '@next/env@14.2.12': {} + + '@next/eslint-plugin-next@14.2.12': + dependencies: + glob: 10.3.10 + + '@next/swc-darwin-arm64@14.2.12': + optional: true + + '@next/swc-darwin-x64@14.2.12': + optional: true + + '@next/swc-linux-arm64-gnu@14.2.12': + optional: true + + '@next/swc-linux-arm64-musl@14.2.12': + optional: true + + '@next/swc-linux-x64-gnu@14.2.12': + optional: true + + '@next/swc-linux-x64-musl@14.2.12': + optional: true + + '@next/swc-win32-arm64-msvc@14.2.12': + optional: true + + '@next/swc-win32-ia32-msvc@14.2.12': + optional: true + + '@next/swc-win32-x64-msvc@14.2.12': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@radix-ui/primitive@1.1.0': {} + + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@radix-ui/react-context@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-id@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/rect': 1.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-slot@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + optionalDependencies: '@types/react': 18.3.7 + + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 - dev: false + optionalDependencies: + '@types/react': 18.3.7 - /@radix-ui/react-use-size@1.1.0(@types/react@18.3.7)(react@18.3.1): - resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} - peerDependencies: - '@types/react': '*' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + optionalDependencies: '@types/react': 18.3.7 + + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.0 react: 18.3.1 - dev: false + optionalDependencies: + '@types/react': 18.3.7 - /@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: '*' - react-dom: '*' - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + react: 18.3.1 + optionalDependencies: '@types/react': 18.3.7 - '@types/react-dom': 18.3.0 + + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: false + optionalDependencies: + '@types/react': 18.3.7 + '@types/react-dom': 18.3.0 - /@radix-ui/rect@1.1.0: - resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - dev: false + '@radix-ui/rect@1.1.0': {} - /@react-dnd/asap@5.0.2: - resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} - dev: false + '@react-dnd/asap@5.0.2': {} - /@react-dnd/invariant@4.0.2: - resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} - dev: false + '@react-dnd/invariant@4.0.2': {} - /@react-dnd/shallowequal@4.0.2: - resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} - dev: false + '@react-dnd/shallowequal@4.0.2': {} - /@rtsao/scc@1.1.0: - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - dev: true + '@rtsao/scc@1.1.0': {} - /@rushstack/eslint-patch@1.10.4: - resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - dev: true + '@rushstack/eslint-patch@1.10.4': {} - /@swc/counter@0.1.3: - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - dev: false + '@swc/counter@0.1.3': {} - /@swc/helpers@0.5.5: - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 tslib: 2.7.0 - dev: false - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/node@22.5.5: - resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + '@types/node@22.5.5': dependencies: undici-types: 6.19.8 - /@types/prop-types@15.7.13: - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + '@types/prop-types@15.7.13': {} - /@types/react-dom@18.3.0: - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/react-dom@18.3.0': dependencies: '@types/react': 18.3.7 - /@types/react@18.3.7: - resolution: {integrity: sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==} + '@types/react@18.3.7': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 - /@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.11.1 '@typescript-eslint/parser': 8.6.0(eslint@8.57.1)(typescript@5.6.2) @@ -956,20 +2847,12 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@typescript-eslint/scope-manager': 8.6.0 '@typescript-eslint/types': 8.6.0 @@ -977,51 +2860,31 @@ packages: '@typescript-eslint/visitor-keys': 8.6.0 debug: 4.3.7 eslint: 8.57.1 + optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@8.6.0: - resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.6.0': dependencies: '@typescript-eslint/types': 8.6.0 '@typescript-eslint/visitor-keys': 8.6.0 - dev: true - /@typescript-eslint/type-utils@8.6.0(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@8.6.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) '@typescript-eslint/utils': 8.6.0(eslint@8.57.1)(typescript@5.6.2) debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: - eslint - supports-color - dev: true - /@typescript-eslint/types@8.6.0: - resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + '@typescript-eslint/types@8.6.0': {} - /@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2): - resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 8.6.0 '@typescript-eslint/visitor-keys': 8.6.0 @@ -1031,16 +2894,12 @@ packages: minimatch: 9.0.5 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@8.6.0(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.6.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 8.6.0 @@ -1050,85 +2909,57 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@8.6.0: - resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.6.0': dependencies: '@typescript-eslint/types': 8.6.0 eslint-visitor-keys: 3.4.3 - dev: true - /@udecode/cn@38.0.1(@types/react@18.3.7)(class-variance-authority@0.7.0)(react-dom@18.3.1)(react@18.3.1)(tailwind-merge@2.5.2): - resolution: {integrity: sha512-9w0yzIGX/2KAZyYDXJCPJJIUdAGnneH8nYlpFAFjFgNrNhBqgCp1H9T0Cl8LKeDHkjKfP+Xe59ttuCd8ieqeTg==} - peerDependencies: - class-variance-authority: '>=0.7.0' - react: '*' - react-dom: '*' - tailwind-merge: '>=2.2.0' + '@udecode/cn@38.0.1(@types/react@18.3.7)(class-variance-authority@0.7.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwind-merge@2.5.2)': dependencies: - '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) + '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) class-variance-authority: 0.7.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tailwind-merge: 2.5.2 transitivePeerDependencies: - '@types/react' - dev: false - /@udecode/plate-common@38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0): - resolution: {integrity: sha512-xmo4jrHZT2mTvYLsHAs4JHfBwMUwMQIURX8rF33gAVmUcP+piswaDhIfsr5OXxwc82pWCwGxv4343VHz2NLdbA==} - peerDependencies: - react: '*' - react-dom: '*' - slate: '>=0.103.0' - slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.108.0' + '@udecode/plate-common@38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)': dependencies: - '@udecode/plate-core': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0) - '@udecode/plate-utils': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0) - '@udecode/react-hotkeys': 37.0.0(react-dom@18.3.1)(react@18.3.1) - '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@udecode/slate': 38.0.4(slate-history@0.109.0)(slate@0.103.0) - '@udecode/slate-react': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-react@0.110.1)(slate@0.103.0) - '@udecode/slate-utils': 38.0.4(slate-history@0.109.0)(slate@0.103.0) + '@udecode/plate-core': 38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + '@udecode/plate-utils': 38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + '@udecode/react-hotkeys': 37.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/slate': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) + '@udecode/slate-react': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.109.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + '@udecode/slate-utils': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 37.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) slate: 0.103.0 slate-history: 0.109.0(slate@0.103.0) slate-hyperscript: 0.100.0(slate@0.103.0) - slate-react: 0.110.1(react-dom@18.3.1)(react@18.3.1)(slate@0.103.0) + slate-react: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) transitivePeerDependencies: - '@types/react' - immer - react-native - scheduler - dev: false - /@udecode/plate-core@38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0): - resolution: {integrity: sha512-AzQO42bZyRtZuD5pnJ2aoiN9sN+Pn5sLB48t34d7rc22il/9urUgocmaxAlJRqJmgbdCfk8cVFzFMm5wM46RVQ==} - peerDependencies: - react: '*' - react-dom: '*' - slate: '>=0.103.0' - slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.108.0' + '@udecode/plate-core@38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)': dependencies: - '@udecode/react-hotkeys': 37.0.0(react-dom@18.3.1)(react@18.3.1) - '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@udecode/slate': 38.0.4(slate-history@0.109.0)(slate@0.103.0) - '@udecode/slate-react': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-react@0.110.1)(slate@0.103.0) - '@udecode/slate-utils': 38.0.4(slate-history@0.109.0)(slate@0.103.0) + '@udecode/react-hotkeys': 37.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/slate': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) + '@udecode/slate-react': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.109.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + '@udecode/slate-utils': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 37.0.0 clsx: 2.1.1 is-hotkey: 0.2.0 jotai: 2.8.4(@types/react@18.3.7)(react@18.3.1) - jotai-optics: 0.4.0(jotai@2.8.4)(optics-ts@2.4.1) - jotai-x: 1.2.4(@types/react@18.3.7)(jotai@2.8.4)(react@18.3.1) + jotai-optics: 0.4.0(jotai@2.8.4(@types/react@18.3.7)(react@18.3.1))(optics-ts@2.4.1) + jotai-x: 1.2.4(@types/react@18.3.7)(jotai@2.8.4(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) lodash: 4.17.21 nanoid: 3.3.7 optics-ts: 2.4.1 @@ -1137,32 +2968,23 @@ packages: slate: 0.103.0 slate-history: 0.109.0(slate@0.103.0) slate-hyperscript: 0.100.0(slate@0.103.0) - slate-react: 0.110.1(react-dom@18.3.1)(react@18.3.1)(slate@0.103.0) + slate-react: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) use-deep-compare: 1.3.0(react@18.3.1) - zustand: 4.5.5(@types/react@18.3.7)(react@18.3.1) - zustand-x: 3.0.4(react-dom@18.3.1)(react@18.3.1)(zustand@4.5.5) + zustand: 4.5.5(@types/react@18.3.7)(immer@10.1.1)(react@18.3.1) + zustand-x: 3.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(zustand@4.5.5(@types/react@18.3.7)(immer@10.1.1)(react@18.3.1)) transitivePeerDependencies: - '@types/react' - immer - react-native - scheduler - dev: false - /@udecode/plate-utils@38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0): - resolution: {integrity: sha512-G4VzdHbAv8Jm+1J3p9VNRu38Tl2TnCZbQT7omtLAl/XLQCxk69LX0kHKe/Vmh2nhSFuCtu2JRIYIYY18SyKTzQ==} - peerDependencies: - react: '*' - react-dom: '*' - slate: '>=0.103.0' - slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.110.0' + '@udecode/plate-utils@38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)': dependencies: - '@udecode/plate-core': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-hyperscript@0.100.0)(slate-react@0.110.1)(slate@0.103.0) - '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@udecode/slate': 38.0.4(slate-history@0.109.0)(slate@0.103.0) - '@udecode/slate-react': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-react@0.110.1)(slate@0.103.0) - '@udecode/slate-utils': 38.0.4(slate-history@0.109.0)(slate@0.103.0) + '@udecode/plate-core': 38.0.4(@types/react@18.3.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.109.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/slate': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) + '@udecode/slate-react': 38.0.4(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.109.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) + '@udecode/slate-utils': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 37.0.0 clsx: 2.1.1 lodash: 4.17.21 @@ -1171,29 +2993,19 @@ packages: slate: 0.103.0 slate-history: 0.109.0(slate@0.103.0) slate-hyperscript: 0.100.0(slate@0.103.0) - slate-react: 0.110.1(react-dom@18.3.1)(react@18.3.1)(slate@0.103.0) + slate-react: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) transitivePeerDependencies: - '@types/react' - immer - react-native - scheduler - dev: false - /@udecode/react-hotkeys@37.0.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-3ZV5LiaTnKyhXwN6U0NE2cofNsNN2IPMkNCDntbSIIRLYmI+o6LRkDwAucSNh/BIdNXfvxscsR04RYyIwjGbJw==} - peerDependencies: - react: '*' - react-dom: '*' + '@udecode/react-hotkeys@37.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: false - /@udecode/react-utils@38.0.1(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-flUBUNmTgaSi3N2qK4+Dv962d4VKiVYn0S6eQ1lAwofSZ70I2PtOGdFiCilSkCD9tq4T4I2ez0YVTgJB0UW2iw==} - peerDependencies: - react: '*' - react-dom: '*' + '@udecode/react-utils@38.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) '@udecode/utils': 37.0.0 @@ -1202,137 +3014,86 @@ packages: react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - dev: false - /@udecode/slate-react@38.0.4(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1)(slate-history@0.109.0)(slate-react@0.110.1)(slate@0.103.0): - resolution: {integrity: sha512-JjwrQSEvniNVKIO5vkfbR6r7DYmURH/hUFEpDpBMvciO7YDlS6ONsP3dV7cngWKpDFLsJhrr8JgVNH0uDMACTQ==} - peerDependencies: - react: '*' - react-dom: '*' - slate: '>=0.103.0' - slate-history: '>=0.93.0' - slate-react: '>=0.108.0' + '@udecode/slate-react@38.0.4(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.109.0(slate@0.103.0))(slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)': dependencies: - '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1)(react@18.3.1) - '@udecode/slate': 38.0.4(slate-history@0.109.0)(slate@0.103.0) + '@udecode/react-utils': 38.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@udecode/slate': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 37.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) slate: 0.103.0 slate-history: 0.109.0(slate@0.103.0) - slate-react: 0.110.1(react-dom@18.3.1)(react@18.3.1)(slate@0.103.0) + slate-react: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) transitivePeerDependencies: - '@types/react' - dev: false - /@udecode/slate-utils@38.0.4(slate-history@0.109.0)(slate@0.103.0): - resolution: {integrity: sha512-7Dwu1fLEoqs9OJ9ZsPbx1G4STHZ91SDc+wCEOgAclMUrr9b1HBErJ9E6Svqp63hicXcUd2du2qSdSVTlyw7mGg==} - peerDependencies: - slate: '>=0.103.0' - slate-history: '>=0.93.0' + '@udecode/slate-utils@38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0)': dependencies: - '@udecode/slate': 38.0.4(slate-history@0.109.0)(slate@0.103.0) + '@udecode/slate': 38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 37.0.0 lodash: 4.17.21 slate: 0.103.0 slate-history: 0.109.0(slate@0.103.0) - dev: false - /@udecode/slate@38.0.4(slate-history@0.109.0)(slate@0.103.0): - resolution: {integrity: sha512-PlnavxtTd4xIqC/HdNl/nebMUogBjXgq1WyiH1mCXBNzMRuTpss7ByhXOr/SO67h6CKpaeGc1kf3dqZsHQWHZw==} - peerDependencies: - slate: '>=0.103.0' - slate-history: '>=0.93.0' + '@udecode/slate@38.0.4(slate-history@0.109.0(slate@0.103.0))(slate@0.103.0)': dependencies: '@udecode/utils': 37.0.0 slate: 0.103.0 slate-history: 0.109.0(slate@0.103.0) - dev: false - /@udecode/utils@37.0.0: - resolution: {integrity: sha512-30ixi2pznIXyIqpFocX+X5Sj38js+wZ0RLY14eZv1C1zwWo5BxSuJfzpGQTvGcLPJnij019tEpmGH61QdDxtrQ==} - dev: false + '@udecode/utils@37.0.0': {} - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.0': {} - /acorn-jsx@5.3.2(acorn@8.12.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 - /acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true + acorn@8.12.1: {} - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + ansi-regex@6.1.0: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + ansi-styles@6.2.1: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + arg@5.0.2: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argparse@2.0.1: {} - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + aria-query@5.1.3: dependencies: deep-equal: 2.2.3 - dev: true - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1340,11 +3101,8 @@ packages: es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 - dev: true - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1352,11 +3110,8 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1364,42 +3119,30 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -1409,18 +3152,10 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: true - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + ast-types-flow@0.0.8: {} - /autoprefixer@10.4.20(postcss@8.4.47): - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001660 @@ -1429,106 +3164,69 @@ packages: picocolors: 1.1.0 postcss: 8.4.47 postcss-value-parser: 4.2.0 - dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /axe-core@4.10.0: - resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} - engines: {node: '>=4'} - dev: true + axe-core@4.10.0: {} - /axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - dev: true + axobject-query@4.1.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} + binary-extensions@2.3.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - /browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.3: dependencies: caniuse-lite: 1.0.30001660 electron-to-chromium: 1.5.25 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: false - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + callsites@3.1.0: {} - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + camelcase-css@2.0.1: {} - /caniuse-lite@1.0.30001660: - resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + caniuse-lite@1.0.30001660: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -1540,129 +3238,75 @@ packages: optionalDependencies: fsevents: 2.3.3 - /class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + class-variance-authority@0.7.0: dependencies: clsx: 2.0.0 - dev: false - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false + client-only@0.0.1: {} - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - dev: false + clsx@2.0.0: {} - /clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - dev: false + clsx@2.1.1: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + commander@4.1.1: {} - /compute-scroll-into-view@3.1.0: - resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} - dev: false + compute-scroll-into-view@3.1.0: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-map@0.0.1: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-source-map@2.0.0: {} - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true + cssesc@3.0.0: {} - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.1.3: {} - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + damerau-levenshtein@1.0.8: {} - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: ms: 2.1.3 - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -1682,95 +3326,61 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deep-is@0.1.4: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: false + dequal@2.0.3: {} - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + didyoumean@1.2.2: {} - /direction@1.0.4: - resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} - hasBin: true - dev: false + direction@1.0.4: {} - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dlv@1.1.3: {} - /dnd-core@16.0.1: - resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} + dnd-core@16.0.1: dependencies: '@react-dnd/asap': 5.0.2 '@react-dnd/invariant': 4.0.2 redux: 4.2.1 - dev: false - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + eastasianwidth@0.2.0: {} - /electron-to-chromium@1.5.25: - resolution: {integrity: sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==} + electron-to-chromium@1.5.25: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emoji-regex@9.2.2: {} - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - dev: true - /enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -1818,22 +3428,14 @@ packages: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + es-get-iterator@1.1.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -1844,11 +3446,8 @@ packages: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - dev: true - /es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} - engines: {node: '>= 0.4'} + es-iterator-helpers@1.0.19: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1864,168 +3463,98 @@ packages: internal-slot: 1.0.7 iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + escalade@3.2.0: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@1.0.5: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + escape-string-regexp@4.0.0: {} - /eslint-config-next@14.2.12(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-fzUIlF6Ng1cUFFd013wn9H3YhKe3vV/cZBC0Ec9S64q/wGoTq0HlASA7WgiOwDAISSbzkLprInLiIMu6U8bqEw==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true + eslint-config-next@14.2.12(eslint@8.57.1)(typescript@5.6.2): dependencies: '@next/eslint-plugin-next': 14.2.12 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': 8.6.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.1): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: eslint: 8.57.1 - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-module-utils@2.11.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 8.6.0(eslint@8.57.1)(typescript@5.6.2) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.6.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 8.6.0(eslint@8.57.1)(typescript@5.6.2) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2034,7 +3563,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -2044,17 +3573,14 @@ packages: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.6.0(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): - resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 @@ -2073,43 +3599,21 @@ packages: object.fromentries: 2.0.8 safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - dev: true - /eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.3.3): - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): dependencies: eslint: 8.57.1 - eslint-config-prettier: 9.1.0(eslint@8.57.1) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 - dev: false + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.1) - /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: eslint: 8.57.1 - dev: true - /eslint-plugin-react@7.36.1(eslint@8.57.1): - resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-react@7.36.1(eslint@8.57.1): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -2130,46 +3634,27 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - dev: true - /eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.12): - resolution: {integrity: sha512-gJAEHmCq2XFfUP/+vwEfEJ9igrPeZFg+skeMtsxquSQdxba9XRk5bn0Bp9jxG1VV9/wwPKi1g3ZjItu6MIjhNg==} - engines: {node: '>=18.12.0'} - peerDependencies: - tailwindcss: ^3.4.0 + eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.12): dependencies: fast-glob: 3.3.2 postcss: 8.4.47 tailwindcss: 3.4.12 - dev: true - /eslint-plugin-unused-imports@4.1.4(eslint@8.57.1): - resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^9.0.0 || ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1): dependencies: eslint: 8.57.1 - dev: true + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@3.4.3: {} - /eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@eslint-community/regexpp': 4.11.1 @@ -2212,44 +3697,29 @@ packages: transitivePeerDependencies: - supports-color - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.12.1 acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + esutils@2.0.3: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-deep-equal@3.1.3: {} - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: false + fast-diff@1.3.0: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -2257,148 +3727,99 @@ packages: merge2: 1.4.1 micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-levenshtein@2.0.6: {} - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.17.1: dependencies: reusify: 1.0.4 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.1: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true + fraction.js@4.3.7: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + gensync@1.0.0-beta.2: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - /get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.10: dependencies: foreground-child: 3.3.0 jackspeak: 2.3.6 minimatch: 9.0.5 minipass: 7.1.2 path-scurry: 1.11.1 - dev: true - /glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true + glob@10.4.5: dependencies: foreground-child: 3.3.0 jackspeak: 3.4.3 @@ -2407,9 +3828,7 @@ packages: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2418,596 +3837,342 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.0.1 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphemer@1.4.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 - dev: false - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + ignore@5.3.2: {} - /immer@10.1.1: - resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} - dev: false + immer@10.1.1: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + imurmurhash@0.1.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - dev: true - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + is-bun-module@1.2.1: dependencies: semver: 7.6.3 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} + is-core-module@2.15.1: dependencies: hasown: 2.0.2 - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + is-extglob@2.1.1: {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - /is-hotkey@0.2.0: - resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} - dev: false + is-hotkey@0.2.0: {} - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + is-path-inside@3.0.3: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: false + is-plain-object@5.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - dev: true - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 - dev: true - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@2.0.0: {} - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true + jiti@1.21.6: {} - /jotai-optics@0.4.0(jotai@2.8.4)(optics-ts@2.4.1): - resolution: {integrity: sha512-osbEt9AgS55hC4YTZDew2urXKZkaiLmLqkTS/wfW5/l0ib8bmmQ7kBXSFaosV6jDDWSp00IipITcJARFHdp42g==} - peerDependencies: - jotai: '>=2.0.0' - optics-ts: '>=2.0.0' + jotai-optics@0.4.0(jotai@2.8.4(@types/react@18.3.7)(react@18.3.1))(optics-ts@2.4.1): dependencies: jotai: 2.8.4(@types/react@18.3.7)(react@18.3.1) optics-ts: 2.4.1 - dev: false - /jotai-x@1.2.4(@types/react@18.3.7)(jotai@2.8.4)(react@18.3.1): - resolution: {integrity: sha512-FyLrAR/ZDtmaWgif4cNRuJvMam/RSFv+B11/p4T427ws/T+8WhZzwmULwNogG6ZbZq+v1XpH6f9aN1lYqY5dLg==} - peerDependencies: - '@types/react': '>=17.0.0' - jotai: '>=2.0.0' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true + jotai-x@1.2.4(@types/react@18.3.7)(jotai@2.8.4(@types/react@18.3.7)(react@18.3.1))(react@18.3.1): dependencies: - '@types/react': 18.3.7 jotai: 2.8.4(@types/react@18.3.7)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.7 react: 18.3.1 - dev: false - /jotai@2.8.4(@types/react@18.3.7)(react@18.3.1): - resolution: {integrity: sha512-f6jwjhBJcDtpeauT2xH01gnqadKEySwwt1qNBLvAXcnojkmb76EdqRt05Ym8IamfHGAQz2qMKAwftnyjeSoHAA==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=17.0.0' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - dependencies: + jotai@2.8.4(@types/react@18.3.7)(react@18.3.1): + optionalDependencies: '@types/react': 18.3.7 react: 18.3.1 - dev: false - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + jsesc@2.5.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-buffer@3.0.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@0.4.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + json5@2.2.3: {} - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.2.0 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - /language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - dev: true + language-subtag-registry@0.3.23: {} - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + language-tags@1.0.9: dependencies: language-subtag-registry: 0.3.23 - dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + lilconfig@2.1.0: {} - /lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} + lilconfig@3.1.2: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@1.2.4: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - /lodash.mapvalues@4.6.0: - resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} - dev: false + lodash.mapvalues@4.6.0: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.merge@4.6.2: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false + lodash@4.17.21: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@10.4.3: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - /lucide-react@0.441.0(react@18.3.1): - resolution: {integrity: sha512-0vfExYtvSDhkC2lqg0zYVW1Uu9GsI4knuV9GP9by5z0Xhc4Zi5RejTxfz9LsjRmCyWVzHCJvxGKZWcRyvQCWVg==} - peerDependencies: - react: '*' + lucide-react@0.441.0(react@18.3.1): dependencies: react: 18.3.1 - dev: false - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + merge2@1.4.1: {} - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + natural-compare@1.4.0: {} - /next-themes@0.3.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} - peerDependencies: - react: '*' - react-dom: '*' + next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: false - /next@14.2.12(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: '*' - react-dom: '*' - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - sass: - optional: true + next@14.2.12(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.12 '@swc/helpers': 0.5.5 @@ -3031,105 +4196,65 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false - /node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.18: {} - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + object-assign@4.1.1: {} - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + object-hash@3.0.0: {} - /object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.2: {} - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} + object-is@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + object.groupby@1.0.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + object.values@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /optics-ts@2.4.1: - resolution: {integrity: sha512-HaYzMHvC80r7U/LqAd4hQyopDezC60PO2qF5GuIwALut2cl5rK1VWHsqTp0oqoJJWjiv6uXKqsO+Q2OO0C3MmQ==} - dev: false + optics-ts@2.4.1: {} - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -3138,268 +4263,156 @@ packages: type-check: 0.4.0 word-wrap: 1.2.5 - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - /package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.0: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-parse@1.0.7: {} - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 - /picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + picomatch@2.3.1: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + pify@2.3.0: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + pirates@4.0.6: {} - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss-import@15.1.0(postcss@8.4.47): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + postcss-import@15.1.0(postcss@8.4.47): dependencies: postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - /postcss-js@4.0.1(postcss@8.4.47): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 postcss: 8.4.47 - /postcss-load-config@4.0.2(postcss@8.4.47): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.2 - postcss: 8.4.47 yaml: 2.5.1 + optionalDependencies: + postcss: 8.4.47 - /postcss-nested@6.2.0(postcss@8.4.47): - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + postcss-nested@6.2.0(postcss@8.4.47): dependencies: postcss: 8.4.47 postcss-selector-parser: 6.1.2 - /postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss-value-parser@4.2.0: {} - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.31: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 source-map-js: 1.2.1 - dev: false - /postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 source-map-js: 1.2.1 - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + prelude-ls@1.2.1: {} - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + prettier-linter-helpers@1.0.0: dependencies: fast-diff: 1.3.0 - dev: false - /prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true + prettier@3.3.3: {} - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - /proxy-compare@2.6.0: - resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} - dev: false + proxy-compare@2.6.0: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + punycode@2.3.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + queue-microtask@1.2.3: {} - /react-dnd-html5-backend@16.0.1: - resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} + react-dnd-html5-backend@16.0.1: dependencies: dnd-core: 16.0.1 - dev: false - /react-dnd@16.0.1(@types/node@22.5.5)(@types/react@18.3.7)(react@18.3.1): - resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} - peerDependencies: - '@types/hoist-non-react-statics': '>= 3.3.1' - '@types/node': '>= 12' - '@types/react': '>= 16' - react: '*' - peerDependenciesMeta: - '@types/hoist-non-react-statics': - optional: true - '@types/node': - optional: true - '@types/react': - optional: true + react-dnd@16.0.1(@types/node@22.5.5)(@types/react@18.3.7)(react@18.3.1): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 - '@types/node': 22.5.5 - '@types/react': 18.3.7 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 react: 18.3.1 - dev: false + optionalDependencies: + '@types/node': 22.5.5 + '@types/react': 18.3.7 - /react-dom@18.3.1(react@18.3.1): - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: '*' + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 - dev: false - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@16.13.1: {} - /react-tracked@1.7.14(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-6UMlgQeRAGA+uyYzuQGm7kZB6ZQYFhc7sntgP7Oxwwd6M0Ud/POyb4K3QWT1eXvoifSa80nrAWnXWFGpOvbwkw==} - peerDependencies: - react: '*' - react-dom: '*' - react-native: '*' - scheduler: '>=0.19.0' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - scheduler: - optional: true + react-tracked@1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2): dependencies: proxy-compare: 2.6.0 react: 18.3.1 + scheduler: 0.23.2 + use-context-selector: 1.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) + optionalDependencies: react-dom: 18.3.1(react@18.3.1) - use-context-selector: 1.4.4(react-dom@18.3.1)(react@18.3.1) - dev: false - /react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + react@18.3.1: dependencies: loose-envify: 1.4.0 - dev: false - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cache@1.0.0: dependencies: pify: 2.3.0 - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - /redux@4.2.1: - resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} + redux@4.2.1: dependencies: '@babel/runtime': 7.25.6 - dev: false - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -3408,111 +4421,70 @@ packages: get-intrinsic: 1.2.4 globalthis: 1.0.4 which-builtin-type: 1.1.4 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false + regenerator-runtime@0.14.1: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolve-from@4.0.0: {} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - dev: false - /scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.0 - dev: false - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + semver@6.3.1: {} - /semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - dev: true + semver@7.6.3: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -3520,66 +4492,40 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shebang-regex@3.0.0: {} - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.2 - dev: true - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + signal-exit@4.1.0: {} - /slate-history@0.109.0(slate@0.103.0): - resolution: {integrity: sha512-DHavPwrTTAEAV66eAocB3iQHEj65N6IVtbRK98ZuqGT0S44T3zXlhzY+5SZ7EPxRcoOYVt1dioRxXYM/+PmCiQ==} - peerDependencies: - slate: '>=0.65.3' + slate-history@0.109.0(slate@0.103.0): dependencies: is-plain-object: 5.0.0 slate: 0.103.0 - dev: false - /slate-hyperscript@0.100.0(slate@0.103.0): - resolution: {integrity: sha512-fb2KdAYg6RkrQGlqaIi4wdqz3oa0S4zKNBJlbnJbNOwa23+9FLD6oPVx9zUGqCSIpy+HIpOeqXrg0Kzwh/Ii4A==} - peerDependencies: - slate: '>=0.65.3' + slate-hyperscript@0.100.0(slate@0.103.0): dependencies: is-plain-object: 5.0.0 slate: 0.103.0 - dev: false - /slate-react@0.110.1(react-dom@18.3.1)(react@18.3.1)(slate@0.103.0): - resolution: {integrity: sha512-bx6J0PkY9A50O4w78k4NPqNOXGo49fmSbCRgr8OBDWKKo4BeSt9y3vGXCkQ/Mm4lQ8riyRKr3TrJXzqMY7lRZg==} - peerDependencies: - react: '*' - react-dom: '*' - slate: '>=0.99.0' + slate-react@0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0): dependencies: '@juggle/resize-observer': 3.4.0 direction: 1.0.4 @@ -3591,58 +4537,39 @@ packages: scroll-into-view-if-needed: 3.1.0 slate: 0.103.0 tiny-invariant: 1.3.1 - dev: false - /slate@0.103.0: - resolution: {integrity: sha512-eCUOVqUpADYMZ59O37QQvUdnFG+8rin0OGQAXNHvHbQeVJ67Bu0spQbcy621vtf8GQUXTEQBlk6OP9atwwob4w==} + slate@0.103.0: dependencies: immer: 10.1.1 is-plain-object: 5.0.0 tiny-warning: 1.0.3 - dev: false - /source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + source-map-js@1.2.1: {} - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + stop-iteration-iterator@1.0.0: dependencies: internal-slot: 1.0.7 - dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false + streamsearch@1.1.0: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.includes@2.0.0: - resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + string.prototype.includes@2.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -3656,85 +4583,51 @@ packages: regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 side-channel: 1.0.6 - dev: true - /string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + strip-json-comments@3.1.1: {} - /styled-jsx@5.1.1(@babel/core@7.25.2)(react@18.3.1): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '*' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true + styled-jsx@5.1.1(@babel/core@7.25.2)(react@18.3.1): dependencies: - '@babel/core': 7.25.2 client-only: 0.0.1 react: 18.3.1 - dev: false + optionalDependencies: + '@babel/core': 7.25.2 - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 @@ -3744,46 +4637,28 @@ packages: pirates: 4.0.6 ts-interface-checker: 0.1.13 - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + supports-preserve-symlinks-flag@1.0.0: {} - /synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 tslib: 2.7.0 - dev: false - /tailwind-merge@2.5.2: - resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==} - dev: false + tailwind-merge@2.5.2: {} - /tailwindcss-animate@1.0.7(tailwindcss@3.4.12): - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + tailwindcss-animate@1.0.7(tailwindcss@3.4.12): dependencies: tailwindcss: 3.4.12 - dev: false - /tailwindcss@3.4.12: - resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@3.4.12: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -3810,101 +4685,64 @@ packages: transitivePeerDependencies: - ts-node - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} - dev: false + tiny-invariant@1.3.1: {} - /tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - dev: false + tiny-warning@1.0.3: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - /ts-api-utils@1.3.0(typescript@5.6.2): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: typescript: 5.6.2 - dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-interface-checker@0.1.13: {} - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - dev: false + tslib@2.7.0: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + type-fest@0.20.2: {} - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -3912,11 +4750,8 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -3924,93 +4759,55 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: true - /typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.6.2: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.19.8: {} - /update-browserslist-db@1.1.0(browserslist@4.23.3): - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: browserslist: 4.23.3 escalade: 3.2.0 picocolors: 1.1.0 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - /use-context-selector@1.4.4(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-pS790zwGxxe59GoBha3QYOwk8AFGp4DN6DOtH+eoqVmgBBRXVx4IlPDhJmmMiNQAgUaLlP+58aqRC3A4rdaSjg==} - peerDependencies: - react: '*' - react-dom: '*' - react-native: '*' - scheduler: '>=0.19.0' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - scheduler: - optional: true + use-context-selector@1.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2): dependencies: react: 18.3.1 + scheduler: 0.23.2 + optionalDependencies: react-dom: 18.3.1(react@18.3.1) - dev: false - /use-deep-compare@1.3.0(react@18.3.1): - resolution: {integrity: sha512-94iG+dEdEP/Sl3WWde+w9StIunlV8Dgj+vkt5wTwMoFQLaijiEZSXXy8KtcStpmEDtIptRJiNeD4ACTtVvnIKA==} - peerDependencies: - react: '*' + use-deep-compare@1.3.0(react@18.3.1): dependencies: dequal: 2.0.3 react: 18.3.1 - dev: false - /use-sync-external-store@1.2.2(react@18.3.1): - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} - peerDependencies: - react: '*' + use-sync-external-store@1.2.2(react@18.3.1): dependencies: react: 18.3.1 - dev: false - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util-deprecate@1.0.2: {} - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -4024,103 +4821,64 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.3 - dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + word-wrap@1.2.5: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@3.1.1: {} - /yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} - hasBin: true + yaml@2.5.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + yocto-queue@0.1.0: {} - /zustand-x@3.0.4(react-dom@18.3.1)(react@18.3.1)(zustand@4.5.5): - resolution: {integrity: sha512-dVD8WUEpR/0mMdLah9j8i+r6PMAq9Ii2u+BX/9Bn4MHRt8sSnRQ90YMUlTVonZYAHGb2UHZwPpE2gMb8GtYDDw==} - peerDependencies: - zustand: '>=4.3.9' + zustand-x@3.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(zustand@4.5.5(@types/react@18.3.7)(immer@10.1.1)(react@18.3.1)): dependencies: immer: 10.1.1 lodash.mapvalues: 4.6.0 - react-tracked: 1.7.14(react-dom@18.3.1)(react@18.3.1) - zustand: 4.5.5(@types/react@18.3.7)(react@18.3.1) + react-tracked: 1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) + zustand: 4.5.5(@types/react@18.3.7)(immer@10.1.1)(react@18.3.1) transitivePeerDependencies: - react - react-dom - react-native - scheduler - dev: false - /zustand@4.5.5(@types/react@18.3.7)(react@18.3.1): - resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} - engines: {node: '>=12.7.0'} - peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true + zustand@4.5.5(@types/react@18.3.7)(immer@10.1.1)(react@18.3.1): dependencies: + use-sync-external-store: 1.2.2(react@18.3.1) + optionalDependencies: '@types/react': 18.3.7 + immer: 10.1.1 react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) - dev: false diff --git a/templates/plate-template/src/lib/utils.ts b/templates/plate-template/src/lib/utils.ts new file mode 100644 index 0000000000..bd0c391ddd --- /dev/null +++ b/templates/plate-template/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/templates/plate-template/src/styles/globals.css b/templates/plate-template/src/styles/globals.css index e74b0ab4e2..5f110a9c87 100644 --- a/templates/plate-template/src/styles/globals.css +++ b/templates/plate-template/src/styles/globals.css @@ -28,12 +28,22 @@ --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 72.22% 50.59%; + --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; - --ring: 215 20.2% 65.1%; + --ring: 222.2 84% 4.9%; --radius: 0.5rem; + + --chart-1: 12 76% 61%; + + --chart-2: 173 58% 39%; + + --chart-3: 197 37% 24%; + + --chart-4: 43 74% 66%; + + --chart-5: 27 87% 67%; } .dark { @@ -62,9 +72,19 @@ --accent-foreground: 210 40% 98%; --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 85.7% 97.3%; + --destructive-foreground: 210 40% 98%; + + --ring: 212.7 26.8% 83.9%; + + --chart-1: 220 70% 50%; + + --chart-2: 160 60% 45%; + + --chart-3: 30 80% 55%; + + --chart-4: 280 65% 60%; - --ring: 217.2 32.6% 17.5%; + --chart-5: 340 75% 55%; } } diff --git a/templates/plate-template/tailwind.config.js b/templates/plate-template/tailwind.config.js index 1957c3c307..a16f078dae 100644 --- a/templates/plate-template/tailwind.config.js +++ b/templates/plate-template/tailwind.config.js @@ -5,74 +5,89 @@ module.exports = { darkMode: ['class'], content: ['src/**/*.{ts,tsx}'], theme: { - container: { - center: true, - padding: '2rem', - screens: { - '2xl': '1400px', - }, - }, - extend: { - colors: { - border: 'hsl(var(--border))', - input: 'hsl(var(--input))', - ring: 'hsl(var(--ring))', - background: 'hsl(var(--background))', - foreground: 'hsl(var(--foreground))', - primary: { - DEFAULT: 'hsl(var(--primary))', - foreground: 'hsl(var(--primary-foreground))', - }, - secondary: { - DEFAULT: 'hsl(var(--secondary))', - foreground: 'hsl(var(--secondary-foreground))', - }, - destructive: { - DEFAULT: 'hsl(var(--destructive))', - foreground: 'hsl(var(--destructive-foreground))', - }, - muted: { - DEFAULT: 'hsl(var(--muted))', - foreground: 'hsl(var(--muted-foreground))', - }, - accent: { - DEFAULT: 'hsl(var(--accent))', - foreground: 'hsl(var(--accent-foreground))', - }, - popover: { - DEFAULT: 'hsl(var(--popover))', - foreground: 'hsl(var(--popover-foreground))', - }, - card: { - DEFAULT: 'hsl(var(--card))', - foreground: 'hsl(var(--card-foreground))', - }, - }, - borderRadius: { - xl: `calc(var(--radius) + 4px)`, - lg: 'var(--radius)', - md: 'calc(var(--radius) - 2px)', - sm: 'calc(var(--radius) - 4px)', - }, - fontFamily: { - sans: ['var(--font-sans)', ...fontFamily.sans], - heading: ['var(--font-heading)', ...fontFamily.sans], - }, - keyframes: { - 'accordion-down': { - from: { height: '0' }, - to: { height: 'var(--radix-accordion-content-height)' }, - }, - 'accordion-up': { - from: { height: 'var(--radix-accordion-content-height)' }, - to: { height: '0' }, - }, - }, - animation: { - 'accordion-down': 'accordion-down 0.2s ease-out', - 'accordion-up': 'accordion-up 0.2s ease-out', - }, - }, + container: { + center: 'true', + padding: '2rem', + screens: { + '2xl': '1400px' + } + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + } + }, + borderRadius: { + xl: '`calc(var(--radius) + 4px)`', + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + fontFamily: { + sans: ['var(--font-sans)', ...fontFamily.sans], + heading: ['var(--font-heading)', ...fontFamily.sans] + }, + keyframes: { + 'accordion-down': { + from: { + height: '0' + }, + to: { + height: 'var(--radix-accordion-content-height)' + } + }, + 'accordion-up': { + from: { + height: 'var(--radix-accordion-content-height)' + }, + to: { + height: '0' + } + } + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out' + } + } }, plugins: [require('tailwindcss-animate')], }; From 156a10cade53e19a837ae783c83b833fc81a8c81 Mon Sep 17 00:00:00 2001 From: zbeyens Date: Tue, 24 Sep 2024 03:49:44 +0200 Subject: [PATCH 8/8] feat --- apps/www/content/docs/components/cli.mdx | 8 ++++++-- apps/www/content/docs/components/components-json.mdx | 10 +++++++--- apps/www/content/docs/components/installation/next.mdx | 2 +- apps/www/content/docs/components/installation/vite.mdx | 6 +++--- apps/www/content/docs/components/theming.mdx | 8 ++++++-- apps/www/public/r/styles/default/index.json | 7 +++---- apps/www/scripts/build-registry.mts | 4 +++- 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/apps/www/content/docs/components/cli.mdx b/apps/www/content/docs/components/cli.mdx index 525c2f2ff2..c6e09b0a10 100644 --- a/apps/www/content/docs/components/cli.mdx +++ b/apps/www/content/docs/components/cli.mdx @@ -3,7 +3,11 @@ title: CLI description: Use the CLI to add components to your project. --- - + +WIP – We're migrating to npx shadcn. + + +{/* **Note:** We are now using the `shadcn` CLI. @@ -172,4 +176,4 @@ Options: -y, --yes skip confirmation prompt. (default: false) -c, --cwd the working directory. defaults to the current directory. -h, --help display help for command -``` +``` */} diff --git a/apps/www/content/docs/components/components-json.mdx b/apps/www/content/docs/components/components-json.mdx index 3ce44a6090..21f4ebc63a 100644 --- a/apps/www/content/docs/components/components-json.mdx +++ b/apps/www/content/docs/components/components-json.mdx @@ -1,9 +1,13 @@ --- -title: plate-components.json +title: components.json description: Configuration for your project. --- -The `plate-components.json` file holds configuration for your project. + +WIP – We're migrating to shadcn's components.json. + + +{/* The `plate-components.json` file holds configuration for your project. We use it to understand how your project is set up and how to generate components customized for your project. @@ -163,4 +167,4 @@ The CLI will use this value to determine where to place your UI components. Use "plate-ui": "@/components/plate-ui" } } -``` \ No newline at end of file +``` */} \ No newline at end of file diff --git a/apps/www/content/docs/components/installation/next.mdx b/apps/www/content/docs/components/installation/next.mdx index 0a8c30f5c9..6e21c01a7e 100644 --- a/apps/www/content/docs/components/installation/next.mdx +++ b/apps/www/content/docs/components/installation/next.mdx @@ -16,7 +16,7 @@ A Lucide. You can use any You can now start adding components to your project. ```bash -npx shadcn@latest add button +npx @udecode/plate-ui@latest add button ``` The command above will add the `Button` component to your project. You can then import it like this: diff --git a/apps/www/content/docs/components/theming.mdx b/apps/www/content/docs/components/theming.mdx index 55a1e9505f..6ff536c956 100644 --- a/apps/www/content/docs/components/theming.mdx +++ b/apps/www/content/docs/components/theming.mdx @@ -3,7 +3,11 @@ title: Theming description: Using CSS Variables or Tailwind CSS for theming. --- -You can choose between using CSS variables or Tailwind CSS utility classes for theming. + +WIP – We're migrating to npx shadcn. + + +{/* You can choose between using CSS variables or Tailwind CSS utility classes for theming. ## Utility classes @@ -185,4 +189,4 @@ You can now use the `warning` utility class in your components. We recommend using HSL colors for theming but you can also use other color formats if you prefer. -See the Tailwind CSS documentation for more information on using `rgb`, `rgba` or `hsl` colors. +See the Tailwind CSS documentation for more information on using `rgb`, `rgba` or `hsl` colors. */} diff --git a/apps/www/public/r/styles/default/index.json b/apps/www/public/r/styles/default/index.json index d13e4c8203..80a0be635e 100644 --- a/apps/www/public/r/styles/default/index.json +++ b/apps/www/public/r/styles/default/index.json @@ -4,11 +4,10 @@ "dependencies": [ "tailwindcss-animate", "class-variance-authority", - "lucide-react" - ], - "registryDependencies": [ - "utils" + "lucide-react", + "@udecode/cn" ], + "registryDependencies": [], "tailwind": { "config": { "plugins": [ diff --git a/apps/www/scripts/build-registry.mts b/apps/www/scripts/build-registry.mts index 6febe8205d..25e60a44fe 100644 --- a/apps/www/scripts/build-registry.mts +++ b/apps/www/scripts/build-registry.mts @@ -434,6 +434,7 @@ async function buildStylesIndex() { "tailwindcss-animate", "class-variance-authority", "lucide-react", + "@udecode/cn" ] // TODO: Remove this when we migrate to lucide-react. @@ -445,7 +446,8 @@ async function buildStylesIndex() { name: style.name, type: "registry:style", dependencies, - registryDependencies: ["utils"], + // registryDependencies: ["utils"], + registryDependencies: [], tailwind: { config: { plugins: [`require("tailwindcss-animate")`],