From a743b0a6b924941b53a263aadae4b8d76bb3ca15 Mon Sep 17 00:00:00 2001 From: lyhue1991 Date: Sun, 2 Aug 2026 21:44:54 +0800 Subject: [PATCH] feat: add file browser context menu, rename, delete, and drag-to-move Reference JupyterLab's filebrowser. Single-file/folder operations on the existing recursive tree (multi-select left for later). Frontend (components/): - FileContextMenu: right-click menu (rename, move to trash, new file/folder, download, copy path); clamps to viewport, closes on outside click/ESC/scroll - InlineFileNameInput: inline editor; selects name-without-extension, commits on Enter/blur, cancels on Escape - FileExplorer: context menu wiring, inline rename, delete-to-trash dialog, HTML5 drag-to-move (folder-only drop targets, rejects self/descendant), new file/folder via phantom input row, expandedPaths remap on rename/move, error/notice toasts Backend (app/api/files/[...path]/route.ts): - DELETE -> move to trash via 'trash' npm package - PATCH {to} -> rename/move: basename validation, realpath root checks on source and target parent, isAncestorOrSelf guard, 409 on collision, EXDEV fallback to cpSync+rmSync - POST ?type=create -> new empty file (wx flag) / folder (mkdir), 409 on collision - All handlers gated by isApiRequestAllowed + realpath allow-list (blocks symlink escape, consistent with existing upload path) Shared (lib/file-ops.ts): - FileOpError, validateSingleFileName, isAncestorOrSelf, authorizeExistingPath - lib/file-ops.test.mjs: 8 unit tests (node:test + jiti) i18n: 15 new files.* keys in en.ts and zh-CN.ts Dep: add trash@^10.1.1 --- app/api/files/[...path]/route.ts | 161 +++++ components/FileContextMenu.tsx | 137 +++++ components/FileExplorer.tsx | 665 +++++++++++++++++++-- components/InlineFileNameInput.tsx | 97 +++ lib/file-ops.test.mjs | 108 ++++ lib/file-ops.ts | 84 +++ lib/i18n/messages/en.ts | 15 + lib/i18n/messages/zh-CN.ts | 15 + package-lock.json | 910 ++++++++++++++++++++++++++--- package.json | 1 + 10 files changed, 2076 insertions(+), 117 deletions(-) create mode 100644 components/FileContextMenu.tsx create mode 100644 components/InlineFileNameInput.tsx create mode 100644 lib/file-ops.test.mjs create mode 100644 lib/file-ops.ts diff --git a/app/api/files/[...path]/route.ts b/app/api/files/[...path]/route.ts index 7251e8928..40da030ad 100644 --- a/app/api/files/[...path]/route.ts +++ b/app/api/files/[...path]/route.ts @@ -27,6 +27,13 @@ import { validateUploadFileNames, } from "@/lib/file-upload"; import { parseFormDataWithinLimit, RequestBodyTooLargeError } from "@/lib/bounded-form-data"; +import trash from "trash"; +import { + FileOpError, + authorizeExistingPath, + isAncestorOrSelf, + validateSingleFileName, +} from "@/lib/file-ops"; const IGNORED_NAMES = new Set([ "node_modules", ".git", ".next", "dist", "build", "__pycache__", @@ -150,6 +157,38 @@ export async function POST( return NextResponse.json(inspectUploadTargets(directory, fileNames)); } + if (type === "create") { + const body = await request.json().catch(() => null) as { name?: unknown; isDir?: unknown } | null; + const name = typeof body?.name === "string" ? body.name : null; + if (!name) { + return NextResponse.json({ error: "name is required" }, { status: 400 }); + } + const nameError = validateSingleFileName(name); + if (nameError) { + return NextResponse.json({ error: nameError }, { status: 400 }); + } + const target = path.join(directory, name); + if (fs.existsSync(target)) { + return NextResponse.json( + { error: "A file or folder with that name already exists", exists: true }, + { status: 409 }, + ); + } + try { + if (Boolean(body?.isDir)) { + fs.mkdirSync(target); + } else { + fs.writeFileSync(target, "", { flag: "wx" }); + } + } catch (error) { + return NextResponse.json( + { error: error instanceof Error ? error.message : String(error) }, + { status: 500 }, + ); + } + return NextResponse.json({ ok: true, path: target }); + } + if (type !== "upload") { return NextResponse.json({ error: "Invalid upload request type" }, { status: 400 }); } @@ -241,6 +280,128 @@ export async function POST( } } +function fileOpErrorResponse(error: unknown): NextResponse { + if (error instanceof FileOpError) { + return NextResponse.json({ error: error.message, ...(error.extra ?? {}) }, { status: error.status }); + } + return NextResponse.json( + { error: error instanceof Error ? error.message : String(error) }, + { status: 500 }, + ); +} + +// Move a file or folder to the system trash. The path is resolved through +// symlinks (authorizeExistingPath) so a symlink inside an allowed root cannot +// redirect the deletion outside it. +export async function DELETE( + request: NextRequest, + { params }: { params: Promise<{ path: string[] }> }, +) { + if (!isApiRequestAllowed(request)) { + return NextResponse.json({ error: "Untrusted API request" }, { status: 403 }); + } + + try { + const { path: segments } = await params; + const filePath = filePathFromSegments(segments); + + let realPath: string; + try { + realPath = await authorizeExistingPath(filePath); + } catch (error) { + return fileOpErrorResponse(error); + } + + try { + await trash(realPath); + } catch (error) { + return NextResponse.json( + { error: error instanceof Error ? error.message : String(error) }, + { status: 500 }, + ); + } + + return NextResponse.json({ ok: true }); + } catch (error) { + return fileOpErrorResponse(error); + } +} + +// Rename or move a file/folder. Body: { to: string } where `to` is the new +// absolute path. Rename and move are the same operation (a path change). v1 +// rejects overwrite (409) and never copies - plain drag is always a move. +export async function PATCH( + request: NextRequest, + { params }: { params: Promise<{ path: string[] }> }, +) { + if (!isApiRequestAllowed(request)) { + return NextResponse.json({ error: "Untrusted API request" }, { status: 403 }); + } + + try { + const { path: segments } = await params; + const source = filePathFromSegments(segments); + + const body = await request.json().catch(() => null) as { to?: unknown } | null; + const to = typeof body?.to === "string" ? body.to : null; + if (!to) { + return NextResponse.json({ error: "Missing \"to\" path" }, { status: 400 }); + } + if (to.includes("\0")) { + return NextResponse.json({ error: "Invalid target path" }, { status: 400 }); + } + const nameError = validateSingleFileName(path.basename(to)); + if (nameError) { + return NextResponse.json({ error: nameError }, { status: 400 }); + } + if (to === source) { + return NextResponse.json({ error: "Target is the same as the source" }, { status: 400 }); + } + + let realSource: string; + let realTargetParent: string; + try { + realSource = await authorizeExistingPath(source); + realTargetParent = await authorizeExistingPath(path.dirname(to)); + } catch (error) { + return fileOpErrorResponse(error); + } + + const realTarget = path.join(realTargetParent, path.basename(to)); + + // Block moving a folder into itself or one of its descendants. + if (isAncestorOrSelf(realSource, realTarget)) { + return NextResponse.json( + { error: "Cannot move a folder into itself" }, + { status: 400 }, + ); + } + + if (fs.existsSync(realTarget)) { + return NextResponse.json( + { error: "A file or folder with that name already exists", exists: true }, + { status: 409 }, + ); + } + + try { + fs.renameSync(realSource, realTarget); + } catch (error) { + // Cross-device rename (e.g. tmpfs -> disk). Fall back to copy + remove. + if ((error as NodeJS.ErrnoException).code === "EXDEV") { + fs.cpSync(realSource, realTarget, { recursive: true }); + fs.rmSync(realSource, { recursive: true, force: true }); + } else { + throw error; + } + } + + return NextResponse.json({ ok: true, from: realSource, to: realTarget }); + } catch (error) { + return fileOpErrorResponse(error); + } +} + function createFileBodyStream(filePath: string, range?: { start: number; end: number }): ReadableStream { const fileStream = fs.createReadStream(filePath, range); let closed = false; diff --git a/components/FileContextMenu.tsx b/components/FileContextMenu.tsx new file mode 100644 index 000000000..fdc9cc5d8 --- /dev/null +++ b/components/FileContextMenu.tsx @@ -0,0 +1,137 @@ +"use client"; + +import { Fragment, useEffect, useLayoutEffect, useRef, useState } from "react"; + +export interface ContextMenuItem { + key: string; + label: string; + onClick: () => void; + danger?: boolean; + disabled?: boolean; + /** Render a separator below this item. */ + separatorAfter?: boolean; +} + +interface Props { + x: number; + y: number; + items: ContextMenuItem[]; + onClose: () => void; +} + +/** + * A lightweight, portal-free context menu positioned at the cursor. Closes on + * outside click, Escape, scroll, or window blur. Clamps itself inside the + * viewport so it never overflows the right/bottom edge. + */ +export function FileContextMenu({ x, y, items, onClose }: Props) { + const menuRef = useRef(null); + const [position, setPosition] = useState({ x, y }); + + // Clamp into the viewport once measured. + useLayoutEffect(() => { + const el = menuRef.current; + if (!el) return; + const rect = el.getBoundingClientRect(); + const margin = 4; + let nextX = x; + let nextY = y; + if (x + rect.width > window.innerWidth - margin) { + nextX = Math.max(margin, window.innerWidth - rect.width - margin); + } + if (y + rect.height > window.innerHeight - margin) { + nextY = Math.max(margin, window.innerHeight - rect.height - margin); + } + setPosition({ x: nextX, y: nextY }); + }, [x, y]); + + useEffect(() => { + const handlePointerDown = (event: MouseEvent) => { + if (menuRef.current && !menuRef.current.contains(event.target as Node)) { + onClose(); + } + }; + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") onClose(); + }; + // Close on scroll so the menu never detaches from its anchor point. + const handleScroll = () => onClose(); + document.addEventListener("mousedown", handlePointerDown); + document.addEventListener("keydown", handleKeyDown); + window.addEventListener("scroll", handleScroll, true); + window.addEventListener("resize", onClose); + window.addEventListener("blur", onClose); + return () => { + document.removeEventListener("mousedown", handlePointerDown); + document.removeEventListener("keydown", handleKeyDown); + window.removeEventListener("scroll", handleScroll, true); + window.removeEventListener("resize", onClose); + window.removeEventListener("blur", onClose); + }; + }, [onClose]); + + return ( +
+ {items.map((item) => ( + + + {item.separatorAfter && ( +
+ )} + + ))} +
+ ); +} diff --git a/components/FileExplorer.tsx b/components/FileExplorer.tsx index 6803f21c5..3142fb626 100644 --- a/components/FileExplorer.tsx +++ b/components/FileExplorer.tsx @@ -1,7 +1,9 @@ "use client"; -import { forwardRef, useState, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from "react"; +import { forwardRef, Fragment, useState, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from "react"; import { getFileIcon, FolderIcon } from "./FileIcons"; +import { InlineFileNameInput } from "./InlineFileNameInput"; +import { FileContextMenu, type ContextMenuItem } from "./FileContextMenu"; import { encodeFilePathForApi, getFileDirectory, @@ -105,6 +107,57 @@ async function fetchGitStatus(cwd: string): Promise { return res.json() as Promise; } +interface FileOpErrorResponse { + error?: string; + exists?: boolean; +} + +/** Rename or move a file/folder to a new absolute path. Rejects overwrite. */ +async function renameOrMovePath(from: string, to: string): Promise { + const res = await fetch(`/api/files/${encodeFilePathForApi(from)}`, { + method: "PATCH", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ to }), + }); + if (!res.ok) { + const data = await res.json().catch(() => ({})) as FileOpErrorResponse; + const error = new Error(data.error ?? `HTTP ${res.status}`); + (error as Error & { exists?: boolean }).exists = data.exists; + throw error; + } +} + +/** Move a file/folder to the system trash. */ +async function deletePath(targetPath: string): Promise { + const res = await fetch(`/api/files/${encodeFilePathForApi(targetPath)}`, { + method: "DELETE", + }); + if (!res.ok) { + const data = await res.json().catch(() => ({})) as FileOpErrorResponse; + throw new Error(data.error ?? `HTTP ${res.status}`); + } +} + +/** Create an empty file or folder inside a directory. */ +async function createPath(parentDir: string, name: string, isDir: boolean): Promise { + const res = await fetch(`/api/files/${encodeFilePathForApi(parentDir)}?type=create`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ name, isDir }), + }); + if (!res.ok) { + const data = await res.json().catch(() => ({})) as FileOpErrorResponse; + const error = new Error(data.error ?? `HTTP ${res.status}`); + (error as Error & { exists?: boolean }).exists = data.exists; + throw error; + } +} + +/** True when {@link name} is a non-empty single path component. */ +function isValidFileName(name: string): boolean { + return Boolean(name) && name !== "." && name !== ".." && !name.includes("/") && !name.includes("\\") && !name.includes("\0"); +} + const GIT_STATUS_KEYS: Record = { modified: "files.modified", added: "files.added", @@ -209,6 +262,186 @@ function DismissButton({ onClick, title }: { onClick: () => void; title: string ); } +interface EditingState { + kind: "rename" | "newfile" | "newdir"; + parentPath: string; + /** Set for rename: the entry being renamed. */ + fullPath?: string; +} + +/** A phantom top-of-list row that creates a new file or folder on commit. */ +function CreatingRow({ + depth, + isDir, + onCommit, + onCancel, +}: { + depth: number; + isDir: boolean; + onCommit: (name: string) => void; + onCancel: () => void; +}) { + return ( +
+ {isDir ? ( + + + + ) : ( + + )} + + {isDir ? : getFileIcon("new.txt", 14)} + + +
+ ); +} + +function DeleteConfirmDialog({ + name, + isDir, + busy, + error, + onCancel, + onConfirm, + t, +}: { + name: string; + isDir: boolean; + busy: boolean; + error: string | null; + onCancel: () => void; + onConfirm: () => void; + t: Translate; +}) { + return ( +
{ + if (!busy && event.target === event.currentTarget) onCancel(); + }} + > +
+
+ +
+
+ {t("files.moveToTrash")} +
+
+ {isDir + ? t("files.deleteFolderWarning", { name }) + : t("files.deleteFileWarning", { name })} +
+ {error && ( +
+ {error} +
+ )} +
+
+
+ + +
+
+
+ ); +} + function TreeNode({ node, depth, @@ -222,6 +455,14 @@ function TreeNode({ gitStatusByPath, changedDirectoryPaths, t, + onContextMenu, + editing, + onRenameCommit, + onCreateCommit, + onCancelEdit, + onDragStartNode, + onDropOnNode, + getDraggedPath, }: { node: FileNode; depth: number; @@ -235,6 +476,14 @@ function TreeNode({ gitStatusByPath: Map; changedDirectoryPaths: Set; t: Translate; + onContextMenu: (node: FileNode, event: React.MouseEvent) => void; + editing: EditingState | null; + onRenameCommit: (node: FileNode, name: string) => void; + onCreateCommit: (parentPath: string, name: string, isDir: boolean) => void; + onCancelEdit: () => void; + onDragStartNode: (node: FileNode, event: React.DragEvent) => void; + onDropOnNode: (node: FileNode, event: React.DragEvent) => void; + getDraggedPath: () => string | null; }) { const open = expandedPaths.has(node.fullPath); const highlighted = highlightedPaths.has(node.fullPath); @@ -247,6 +496,24 @@ function TreeNode({ const [loaded, setLoaded] = useState(node.loaded ?? false); const [loading, setLoading] = useState(false); const [hovered, setHovered] = useState(false); + const [dropTarget, setDropTarget] = useState(false); + + const isRenaming = editing?.kind === "rename" && editing.fullPath === node.fullPath; + const creatingHere = + editing && (editing.kind === "newfile" || editing.kind === "newdir") && editing.parentPath === node.fullPath + ? editing + : null; + + // Only folders accept drops, and never onto the dragged item itself or one + // of its descendants (would move a folder into itself). + const canAcceptDrop = useCallback(() => { + if (!node.isDir) return false; + const source = getDraggedPath(); + if (!source) return false; + const src = normalizeFilePathSlashes(source).replace(/\/$/, ""); + if (normalizedPath === src || normalizedPath.startsWith(`${src}/`)) return false; + return true; + }, [node.isDir, normalizedPath, getDraggedPath]); const loadChildren = useCallback(async (force = false) => { if (loaded && !force) return; @@ -286,6 +553,31 @@ function TreeNode({ onClick={handleClick} onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} + onContextMenu={(event) => { + event.preventDefault(); + event.stopPropagation(); + onContextMenu(node, event); + }} + draggable={!isRenaming} + onDragStart={(event) => onDragStartNode(node, event)} + onDragOver={(event) => { + if (!canAcceptDrop()) return; + event.preventDefault(); + event.dataTransfer.dropEffect = "move"; + setDropTarget(true); + }} + onDragLeave={(event) => { + if (!event.currentTarget.contains(event.relatedTarget as Node)) { + setDropTarget(false); + } + }} + onDrop={(event) => { + if (!canAcceptDrop()) return; + event.preventDefault(); + event.stopPropagation(); + setDropTarget(false); + onDropOnNode(node, event); + }} style={{ position: "relative", display: "flex", @@ -294,10 +586,13 @@ function TreeNode({ paddingLeft: 8 + depth * 14, paddingRight: 8, height: 24, - cursor: "pointer", - background: hovered ? "var(--bg-hover)" : "transparent", + cursor: isRenaming ? "default" : "pointer", + background: dropTarget + ? "var(--bg-selected)" + : hovered ? "var(--bg-hover)" : "transparent", borderRadius: 4, userSelect: "none", + outline: dropTarget ? "1px solid var(--accent)" : "none", }} > {node.isDir && ( @@ -313,19 +608,28 @@ function TreeNode({ {node.isDir ? : getFileIcon(node.name, 14)} - - {node.name} - + {isRenaming ? ( + onRenameCommit(node, name)} + onCancel={onCancelEdit} + /> + ) : ( + + {node.name} + + )} {highlighted && ( )} - {onAtMention && hovered && ( + {onAtMention && hovered && !isRenaming && ( )} - {hovered && !node.isDir && ( + {hovered && !node.isDir && !isRenaming && ( {node.isDir && open && (
+ {creatingHere && ( + onCreateCommit(node.fullPath, name, creatingHere.kind === "newdir")} + onCancel={onCancelEdit} + /> + )} {children.map((child) => ( ))} - {children.length === 0 && loaded && ( + {children.length === 0 && loaded && !creatingHere && (
empty
@@ -543,6 +863,17 @@ export const FileExplorer = forwardRef(function FileE const refreshToken = `${refreshKey ?? 0}:${treeRefreshKey}`; const uploadBusy = uploadPhase !== "idle"; + // Right-click context menu, inline rename/new-file editing, delete dialog, + // and transient file-operation feedback. + const [contextMenu, setContextMenu] = useState<{ x: number; y: number; node: FileNode | null } | null>(null); + const [editing, setEditing] = useState(null); + const [deleting, setDeleting] = useState<{ node: FileNode; busy: boolean; error: string | null } | null>(null); + const [fileOpError, setFileOpError] = useState(null); + const [fileOpNotice, setFileOpNotice] = useState(null); + // The path being dragged. dataTransfer is unreadable during dragover, so the + // source path is carried in a ref instead (same-page DnD only). + const draggedPathRef = useRef(null); + const gitStatusByPath = useMemo(() => new Map( gitFiles.map((status) => [normalizeFilePathSlashes(status.filePath), status]), ), [gitFiles]); @@ -571,6 +902,162 @@ export const FileExplorer = forwardRef(function FileE }); }, []); + const bumpRefresh = useCallback(() => setTreeRefreshKey((key) => key + 1), []); + + // After a folder is renamed/moved, repoint any expanded entries that lived + // under its old path so the subtree stays open under the new path. + const remapExpandedPaths = useCallback((oldPrefix: string, newPrefix: string) => { + setExpandedPaths((prev) => { + const next = new Set(); + for (const p of prev) { + if (p === oldPrefix) next.add(newPrefix); + else if (p.startsWith(`${oldPrefix}/`)) next.add(newPrefix + p.slice(oldPrefix.length)); + else next.add(p); + } + return next; + }); + }, []); + + const removeExpandedUnder = useCallback((deletedPrefix: string) => { + setExpandedPaths((prev) => { + const next = new Set(); + for (const p of prev) { + if (p === deletedPrefix || p.startsWith(`${deletedPrefix}/`)) continue; + next.add(p); + } + return next; + }); + }, []); + + const cancelEditing = useCallback(() => setEditing(null), []); + + const startRename = useCallback((node: FileNode) => { + setEditing({ kind: "rename", parentPath: getFileDirectory(node.fullPath), fullPath: node.fullPath }); + }, []); + + const startCreate = useCallback((parentPath: string, isDir: boolean) => { + // Expand the target folder so the new-item row is visible inside it. + if (parentPath !== cwd) handleToggleExpanded(parentPath, true); + setEditing({ kind: isDir ? "newdir" : "newfile", parentPath }); + }, [cwd, handleToggleExpanded]); + + const startDelete = useCallback((node: FileNode) => { + setDeleting({ node, busy: false, error: null }); + }, []); + + const reportError = useCallback((err: unknown, existsKey: string, fallbackKey: string) => { + const e = err as Error & { exists?: boolean }; + setFileOpError(e.exists ? t(existsKey) : (e.message || t(fallbackKey))); + }, [t]); + + const commitRename = useCallback(async (node: FileNode, name: string) => { + setEditing(null); + const trimmed = name.trim(); + if (!trimmed || trimmed === node.name) return; + if (!isValidFileName(trimmed)) { + setFileOpError(t("files.invalidName")); + return; + } + const newPath = joinFilePath(getFileDirectory(node.fullPath), trimmed); + try { + await renameOrMovePath(node.fullPath, newPath); + if (node.isDir) remapExpandedPaths(node.fullPath, newPath); + bumpRefresh(); + } catch (err) { + reportError(err, "files.nameExists", "files.renameError"); + } + }, [t, remapExpandedPaths, bumpRefresh, reportError]); + + const commitCreate = useCallback(async (parentPath: string, name: string, isDir: boolean) => { + const trimmed = name.trim(); + if (!trimmed) { + setEditing(null); + return; + } + if (!isValidFileName(trimmed)) { + setFileOpError(t("files.invalidName")); + setEditing(null); + return; + } + try { + await createPath(parentPath, trimmed, isDir); + setEditing(null); + setHighlightedPaths(new Set([joinFilePath(parentPath, trimmed)])); + bumpRefresh(); + } catch (err) { + reportError(err, "files.nameExists", "files.createError"); + setEditing(null); + } + }, [t, bumpRefresh, reportError]); + + const confirmDelete = useCallback(async () => { + if (!deleting) return; + const target = deleting.node; + setDeleting((prev) => prev ? { ...prev, busy: true, error: null } : prev); + try { + await deletePath(target.fullPath); + removeExpandedUnder(target.fullPath); + setDeleting(null); + bumpRefresh(); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + setDeleting((prev) => prev ? { ...prev, busy: false, error: message } : prev); + } + }, [deleting, removeExpandedUnder, bumpRefresh]); + + const cancelDelete = useCallback(() => { + if (deleting?.busy) return; + setDeleting(null); + }, [deleting]); + + const copyPath = useCallback(async (node: FileNode) => { + const rel = getRelativeFilePath(node.fullPath, cwd); + try { + await navigator.clipboard.writeText(rel); + setFileOpNotice(t("files.pathCopied")); + } catch { + setFileOpError(t("files.copyFailed")); + } + }, [cwd, t]); + + const handleDragStartNode = useCallback((node: FileNode, event: React.DragEvent) => { + draggedPathRef.current = node.fullPath; + event.dataTransfer.setData("application/x-pi-file-path", node.fullPath); + event.dataTransfer.effectAllowed = "move"; + }, []); + + const handleDropOnNode = useCallback(async (folder: FileNode) => { + const source = draggedPathRef.current; + draggedPathRef.current = null; + if (!source) return; + const newPath = joinFilePath(folder.fullPath, getFileName(source)); + if (newPath === source) return; // dropped into its current folder + try { + await renameOrMovePath(source, newPath); + remapExpandedPaths(source, newPath); + bumpRefresh(); + } catch (err) { + reportError(err, "files.nameExists", "files.moveError"); + } + }, [remapExpandedPaths, bumpRefresh, reportError]); + + const getDraggedPath = useCallback(() => draggedPathRef.current, []); + + const handleContextMenu = useCallback((node: FileNode, event: React.MouseEvent) => { + setContextMenu({ x: event.clientX, y: event.clientY, node }); + }, []); + + const handleBlankContextMenu = useCallback((event: React.MouseEvent) => { + event.preventDefault(); + setContextMenu({ x: event.clientX, y: event.clientY, node: null }); + }, []); + + useEffect(() => { + if (!fileOpNotice) return; + const id = setTimeout(() => setFileOpNotice(null), 1500); + return () => clearTimeout(id); + }, [fileOpNotice]); + const applyUploadResult = useCallback((data: UploadResponse) => { const uploaded = data.uploaded ?? []; const skipped = data.skipped ?? []; @@ -681,6 +1168,11 @@ export const FileExplorer = forwardRef(function FileE setUploadSummary(null); setPendingConflict(null); setUploadError(null); + setContextMenu(null); + setEditing(null); + setDeleting(null); + setFileOpError(null); + setFileOpNotice(null); } setLoading(cwdChanged); @@ -726,6 +1218,45 @@ export const FileExplorer = forwardRef(function FileE ); }, [cwd, onAtMentions, uploadSummary]); + const buildContextMenuItems = useCallback( + (node: FileNode | null): ContextMenuItem[] => { + const items: ContextMenuItem[] = []; + if (node) { + items.push({ key: "rename", label: t("files.rename"), onClick: () => startRename(node) }); + items.push({ + key: "delete", + label: t("files.moveToTrash"), + onClick: () => startDelete(node), + danger: true, + separatorAfter: true, + }); + if (node.isDir) { + items.push({ key: "newfile", label: t("files.newFile"), onClick: () => startCreate(node.fullPath, false) }); + items.push({ key: "newfolder", label: t("files.newFolder"), onClick: () => startCreate(node.fullPath, true), separatorAfter: true }); + } + if (!node.isDir) { + items.push({ + key: "download", + label: t("files.download"), + onClick: () => window.open(`/api/files/${encodeFilePathForApi(node.fullPath)}?type=download`, "_blank"), + }); + } + items.push({ key: "copyPath", label: t("files.copyPath"), onClick: () => void copyPath(node) }); + } else { + items.push({ key: "newfile", label: t("files.newFile"), onClick: () => startCreate(cwd, false) }); + items.push({ key: "newfolder", label: t("files.newFolder"), onClick: () => startCreate(cwd, true) }); + } + return items; + }, + [t, startRename, startDelete, startCreate, copyPath, cwd], + ); + + // Root-level phantom row: only when creating at cwd (the root list itself). + const rootCreating = + editing && (editing.kind === "newfile" || editing.kind === "newdir") && editing.parentPath === cwd + ? editing + : null; + return (
@@ -847,6 +1378,20 @@ export const FileExplorer = forwardRef(function FileE
)} + {(fileOpError || fileOpNotice) && ( +
+ {fileOpError && ( +
+ {fileOpError} + setFileOpError(null)} title={t("files.dismissError")} /> +
+ )} + {fileOpNotice && ( +
{fileOpNotice}
+ )} +
+ )} + {!changesCollapsed && gitFiles.length > 0 && (
(function FileE )} {(changesCollapsed || gitFiles.length === 0) && ( -
+
{ + event.preventDefault(); + event.stopPropagation(); + handleBlankContextMenu(event); + }} + > {loading ? (
Loading files...
) : error ? (
{error}
) : ( - roots.map((node) => ( - - )) + <> + {rootCreating && ( + void commitCreate(cwd, name, rootCreating.kind === "newdir")} + onCancel={cancelEditing} + /> + )} + {roots.map((node) => ( + void handleDropOnNode(folder)} + getDraggedPath={getDraggedPath} + /> + ))} + )} {!loading && !error && roots.length === 0 && (
@@ -901,6 +1471,27 @@ export const FileExplorer = forwardRef(function FileE )}
)} + + {contextMenu && ( + setContextMenu(null)} + /> + )} + + {deleting && ( + void confirmDelete()} + t={t} + /> + )}
); }); diff --git a/components/InlineFileNameInput.tsx b/components/InlineFileNameInput.tsx new file mode 100644 index 000000000..ce7b6ced5 --- /dev/null +++ b/components/InlineFileNameInput.tsx @@ -0,0 +1,97 @@ +"use client"; + +import { useEffect, useRef, useState } from "react"; + +interface Props { + /** Initial value seeded into the input. */ + initialValue: string; + /** + * When true (rename), select the name without its extension - mirrors + * JupyterLab's `lastIndexOf('.')` selection trick. When false (new + * file/folder), select the whole name so typing replaces the placeholder. + */ + selectNameWithoutExtension?: boolean; + /** Called with the current value on Enter or blur. */ + onCommit: (name: string) => void; + /** Called on Escape. */ + onCancel: () => void; + /** Render with an error outline (e.g. a server-side validation failure). */ + invalid?: boolean; +} + +/** + * An inline filename editor used for rename and new-file/new-folder flows. + * Commits on Enter or blur, cancels on Escape. A ref guards against the + * blur that follows Enter firing a second commit. + */ +export function InlineFileNameInput({ + initialValue, + selectNameWithoutExtension = true, + onCommit, + onCancel, + invalid = false, +}: Props) { + const [value, setValue] = useState(initialValue); + const inputRef = useRef(null); + const settledRef = useRef(false); + + useEffect(() => { + const input = inputRef.current; + if (!input) return; + input.focus(); + if (selectNameWithoutExtension) { + const dot = initialValue.lastIndexOf("."); + // Dotfiles (".gitignore") or no extension: select everything. + if (dot <= 0) { + input.select(); + } else { + input.setSelectionRange(0, dot); + } + } else { + input.select(); + } + }, [initialValue, selectNameWithoutExtension]); + + const settle = (fn: () => void) => { + if (settledRef.current) return; + settledRef.current = true; + fn(); + }; + + return ( + setValue(event.target.value)} + onClick={(event) => event.stopPropagation()} + onBlur={() => settle(() => onCommit(value))} + onKeyDown={(event) => { + if (event.key === "Enter") { + event.preventDefault(); + event.stopPropagation(); + settle(() => onCommit(value)); + } else if (event.key === "Escape") { + event.preventDefault(); + event.stopPropagation(); + settle(() => onCancel()); + } + }} + style={{ + flex: 1, + minWidth: 0, + height: 20, + fontSize: 12, + color: "var(--text)", + background: invalid ? "color-mix(in srgb, #ef4444 12%, var(--bg))" : "var(--bg)", + border: `1px solid ${invalid ? "#ef4444" : "var(--accent)"}`, + borderRadius: 4, + padding: "0 4px", + outline: "none", + fontFamily: "var(--font-mono)", + }} + /> + ); +} diff --git a/lib/file-ops.test.mjs b/lib/file-ops.test.mjs new file mode 100644 index 000000000..f5cb5166d --- /dev/null +++ b/lib/file-ops.test.mjs @@ -0,0 +1,108 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; + +async function loadSubject() { + try { + const { createJiti } = await import("jiti"); + return createJiti(import.meta.url).import("./file-ops.ts"); + } catch { + return import("./file-ops.ts"); + } +} + +test("validateSingleFileName accepts ordinary names", async () => { + const { validateSingleFileName } = await loadSubject(); + for (const name of ["foo.txt", "folder", ".hidden", "no_ext", "a b", "中文.md"]) { + assert.equal(validateSingleFileName(name), null, `expected ${name} to be valid`); + } +}); + +test("validateSingleFileName rejects traversal and path separators", async () => { + const { validateSingleFileName } = await loadSubject(); + for (const name of ["", ".", "..", "a/b", "a\\b", "a\0b", "trailing/", "a/b/c"]) { + assert.ok(validateSingleFileName(name), `expected ${JSON.stringify(name)} to be rejected`); + } +}); + +test("isAncestorOrSelf detects self, descendants, and rejects prefixes", async () => { + const { isAncestorOrSelf } = await loadSubject(); + assert.equal(isAncestorOrSelf("/a/b", "/a/b"), true); + assert.equal(isAncestorOrSelf("/a", "/a/b"), true); + assert.equal(isAncestorOrSelf("/a", "/a/b/c"), true); + assert.equal(isAncestorOrSelf("/a/", "/a/b"), true); + // A sibling that shares a name prefix is NOT a descendant. + assert.equal(isAncestorOrSelf("/a/b", "/a/bc"), false); + assert.equal(isAncestorOrSelf("/a/b", "/a/c"), false); + assert.equal(isAncestorOrSelf("/a", "/x"), false); + assert.equal(isAncestorOrSelf("/a/b/c", "/a/b"), false); +}); + +test("isAncestorOrSelf handles windows separators", async () => { + const { isAncestorOrSelf } = await loadSubject(); + assert.equal(isAncestorOrSelf("C:\\a", "C:\\a\\b"), true); + assert.equal(isAncestorOrSelf("C:\\a\\b", "C:\\a\\b"), true); + assert.equal(isAncestorOrSelf("C:\\a", "D:\\a\\b"), false); +}); + +test("authorizeExistingPath returns the real path for an allowed entry", async (t) => { + const { authorizeExistingPath } = await loadSubject(); + const base = fs.mkdtempSync(path.join(os.tmpdir(), "pi-web-file-ops-")); + t.after(() => fs.rmSync(base, { recursive: true, force: true })); + const file = path.join(base, "file.txt"); + fs.writeFileSync(file, "hi"); + const roots = new Set([base]); + + const real = await authorizeExistingPath(file, roots); + assert.equal(real, fs.realpathSync(file)); +}); + +test("authorizeExistingPath rejects a symlink that escapes the allowed root", async (t) => { + const { authorizeExistingPath, FileOpError } = await loadSubject(); + const base = fs.mkdtempSync(path.join(os.tmpdir(), "pi-web-file-ops-")); + t.after(() => fs.rmSync(base, { recursive: true, force: true })); + const allowed = path.join(base, "allowed"); + const outside = path.join(base, "outside"); + fs.mkdirSync(allowed); + fs.mkdirSync(outside); + fs.writeFileSync(path.join(outside, "secret.txt"), "secret"); + const link = path.join(allowed, "link"); + fs.symlinkSync(outside, link, process.platform === "win32" ? "junction" : "dir"); + const roots = new Set([allowed]); + + // The link target resolves outside the allowed root, so writes/deletes via + // the link must be refused even though the link itself lives inside it. + await assert.rejects( + authorizeExistingPath(path.join(link, "secret.txt"), roots), + (error) => error instanceof FileOpError && error.status === 403, + ); +}); + +test("authorizeExistingPath throws 404 for a missing path", async (t) => { + const { authorizeExistingPath, FileOpError } = await loadSubject(); + const base = fs.mkdtempSync(path.join(os.tmpdir(), "pi-web-file-ops-")); + t.after(() => fs.rmSync(base, { recursive: true, force: true })); + const roots = new Set([base]); + + await assert.rejects( + authorizeExistingPath(path.join(base, "missing.txt"), roots), + (error) => error instanceof FileOpError && error.status === 404, + ); +}); + +test("authorizeExistingPath allows a symlink that points back inside the root", async (t) => { + const { authorizeExistingPath } = await loadSubject(); + const base = fs.mkdtempSync(path.join(os.tmpdir(), "pi-web-file-ops-")); + t.after(() => fs.rmSync(base, { recursive: true, force: true })); + const target = path.join(base, "real.txt"); + fs.writeFileSync(target, "hi"); + const link = path.join(base, "link.txt"); + fs.symlinkSync(target, link); + const roots = new Set([base]); + + const real = await authorizeExistingPath(link, roots); + assert.equal(real, fs.realpathSync(link)); + assert.equal(real, fs.realpathSync(target)); +}); diff --git a/lib/file-ops.ts b/lib/file-ops.ts new file mode 100644 index 000000000..a19b56a93 --- /dev/null +++ b/lib/file-ops.ts @@ -0,0 +1,84 @@ +import fs from "fs"; +import path from "path"; +import { getAllowedFileRoots } from "./file-access"; +import { isExistingPathWithinRoots } from "./path-security"; + +/** + * Error thrown by file-operation helpers. Carries an HTTP status and optional + * JSON-serializable extras so route handlers can map it directly to a response. + */ +export class FileOpError extends Error { + readonly status: number; + readonly extra?: Record; + + constructor(message: string, status: number, extra?: Record) { + super(message); + this.name = "FileOpError"; + this.status = status; + this.extra = extra; + } +} + +/** + * Validate a single path component (a file or folder name). Mirrors the rules + * in {@link validateUploadFileNames} but for one name and without the + * duplicate check. Returns an error message string, or null when the name is + * acceptable. Rejects empty, ".", "..", NUL bytes, path separators, and names + * whose basename differs (guards against traversal like "a/b" or trailing + * slashes). + */ +export function validateSingleFileName(name: string): string | null { + if (!name || name === "." || name === ".." || name.includes("\0")) { + return "Invalid file name"; + } + if (name.includes("/") || name.includes("\\") || path.basename(name) !== name) { + return "File names must not contain a path"; + } + return null; +} + +/** + * True when {@link maybeAncestor} is {@link target} itself or a parent + * directory of it. Both paths should be normalized absolute paths. Used to + * block moving a folder into itself or one of its descendants. Handles both + * POSIX and Windows separators. + */ +export function isAncestorOrSelf(maybeAncestor: string, target: string): boolean { + const ancestor = maybeAncestor.replace(/[\\/]+$/, ""); + const descendant = target.replace(/[\\/]+$/, ""); + if (!ancestor || !descendant) return false; + if (ancestor === descendant) return true; + const sep = ancestor.includes("\\") && !ancestor.includes("/") ? "\\" : "/"; + return descendant.startsWith(ancestor + sep); +} + +/** + * Authorize an existing path for a mutating operation. Resolves symbolic links + * (via {@link isExistingPathWithinRoots}, which realpaths both the target and + * the allowed roots) and confirms the real path is still inside an allowed + * root, then returns the real path for the caller to operate on. Operating on + * the real path matches the existing upload behavior and prevents a symlink + * inside an allowed root from redirecting a write outside it. + * + * Throws {@link FileOpError} with status 404 (missing) or 403 (forbidden). + * + * @param roots Optional pre-resolved allowed roots. Production callers omit it + * (the real roots are read from disk); tests inject a temp-dir set. + */ +export async function authorizeExistingPath( + fsPath: string, + roots?: Set, +): Promise { + let realPath: string; + try { + realPath = fs.realpathSync(fsPath); + } catch { + throw new FileOpError("Not found", 404); + } + + const resolvedRoots = roots ?? await getAllowedFileRoots(); + if (!isExistingPathWithinRoots(fsPath, resolvedRoots)) { + throw new FileOpError("Access denied", 403); + } + return realPath; +} diff --git a/lib/i18n/messages/en.ts b/lib/i18n/messages/en.ts index 156cb961c..917fe352a 100644 --- a/lib/i18n/messages/en.ts +++ b/lib/i18n/messages/en.ts @@ -152,6 +152,21 @@ export const enLocale: LocalePlugin = { "files.cancel": "Cancel", "files.checking": "Checking files", "files.uploading": "Uploading, {progress}%", + "files.rename": "Rename", + "files.moveToTrash": "Move to Trash", + "files.deleteFileWarning": "Move \"{name}\" to the trash? It cannot be undone.", + "files.deleteFolderWarning": "Move folder \"{name}\" and all its contents to the trash? It cannot be undone.", + "files.deleting": "Moving to trash...", + "files.newFile": "New File", + "files.newFolder": "New Folder", + "files.copyPath": "Copy Path", + "files.pathCopied": "Path copied to clipboard", + "files.nameExists": "A file or folder with that name already exists", + "files.invalidName": "Invalid file name", + "files.renameError": "Failed to rename", + "files.createError": "Failed to create", + "files.moveError": "Failed to move", + "files.copyFailed": "Failed to copy path to clipboard", "chat.loadingSession": "Loading session...", "chat.runningTool": "Running tool...", "chat.runningNamedTool": "Running {name}...", diff --git a/lib/i18n/messages/zh-CN.ts b/lib/i18n/messages/zh-CN.ts index 7854f8142..14d4731ef 100644 --- a/lib/i18n/messages/zh-CN.ts +++ b/lib/i18n/messages/zh-CN.ts @@ -152,6 +152,21 @@ export const zhCNLocale: LocalePlugin = { "files.cancel": "取消", "files.checking": "正在检查文件", "files.uploading": "正在上传,{progress}%", + "files.rename": "重命名", + "files.moveToTrash": "移到回收站", + "files.deleteFileWarning": "要将「{name}」移到回收站吗?此操作无法撤销。", + "files.deleteFolderWarning": "要将文件夹「{name}」及其所有内容移到回收站吗?此操作无法撤销。", + "files.deleting": "正在移到回收站…", + "files.newFile": "新建文件", + "files.newFolder": "新建文件夹", + "files.copyPath": "复制路径", + "files.pathCopied": "路径已复制到剪贴板", + "files.nameExists": "已存在同名文件或文件夹", + "files.invalidName": "文件名无效", + "files.renameError": "重命名失败", + "files.createError": "新建失败", + "files.moveError": "移动失败", + "files.copyFailed": "复制路径到剪贴板失败", "chat.loadingSession": "正在加载会话...", "chat.runningTool": "正在运行工具...", "chat.runningNamedTool": "正在运行 {name}...", diff --git a/package-lock.json b/package-lock.json index 99ca9d023..2d3a08769 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "proper-lockfile": "4.1.2", "react": "^19.2.4", "react-dom": "^19.2.4", + "trash": "^10.1.1", "undici": "8.5.0" }, "bin": { @@ -70,6 +71,7 @@ "integrity": "sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ant-design/fast-color": "^3.0.0" } @@ -100,6 +102,7 @@ "integrity": "sha512-5fTHQ158jJJ5dC/ECeyIdZUzKxE/mpEMRZxthyG1sw/AKRHKgJBg00Yi6ACVXgycdje7KahRNvNET/uBccwCnA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ant-design/cssinjs": "^2.1.2", "@babel/runtime": "^7.23.2", @@ -116,6 +119,7 @@ "integrity": "sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8.x" } @@ -126,6 +130,7 @@ "integrity": "sha512-zlJtE7AMbG12TeYVPhtBXwNpFInNy8mjLzcIm+0BPw16/b8ODG87YJ1G37VIF5VFscdgfsf6EweAFPTobu/3iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ant-design/colors": "^8.0.1", "@ant-design/icons-svg": "^4.4.2", @@ -145,7 +150,8 @@ "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@ant-design/react-slick": { "version": "2.0.0", @@ -153,6 +159,7 @@ "integrity": "sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "clsx": "^2.1.1", @@ -661,7 +668,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -909,6 +915,7 @@ "integrity": "sha512-4USBWz++DUSLTuIYpbYkSgy1F9ZmNG9S/lXvlUN6qMK0P0RlW+6eQmDUB4DgZ7HVvtXl4pvi4z5J2fv6Z3+9hg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@base-ui/utils": "0.2.3", @@ -942,6 +949,7 @@ "integrity": "sha512-/CguQ2PDaOzeVOkllQR8nocJ0FFIDqsWIcURsVmm53QGo8NhFNpePjNlyPIB41luxfOqnG7PU0xicMEw3ls7XQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@floating-ui/utils": "^0.2.10", @@ -979,6 +987,7 @@ "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.0" }, @@ -1009,6 +1018,7 @@ "integrity": "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" @@ -1024,6 +1034,7 @@ "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" @@ -1039,6 +1050,7 @@ "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.0" }, @@ -1867,7 +1879,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -2912,7 +2923,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -2977,7 +2987,8 @@ "resolved": "https://registry.npmjs.org/@emoji-mart/data/-/data-1.2.1.tgz", "integrity": "sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@emoji-mart/react": { "version": "1.1.1", @@ -2985,6 +2996,7 @@ "integrity": "sha512-NMlFNeWgv1//uPsvLxvGQoIerPuVdXwK/EUek8OOkJ6wVOWPUizRBJU0hDqWZCOROVpfBgCemaC3m6jDOXi03g==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "emoji-mart": "^5.2", "react": "^16.8 || ^17 || ^18" @@ -3441,6 +3453,7 @@ "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@floating-ui/utils": "^0.2.11" } @@ -3451,6 +3464,7 @@ "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" @@ -3462,6 +3476,7 @@ "integrity": "sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", @@ -3478,6 +3493,7 @@ "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@floating-ui/dom": "^1.7.6" }, @@ -3491,13 +3507,15 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@giscus/react": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@giscus/react/-/react-3.1.0.tgz", "integrity": "sha512-0TCO2TvL43+oOdyVVGHDItwxD1UMKP2ZYpT6gXmhFOqfAJtZxTzJ9hkn34iAF/b6YzyJ4Um89QIt9z/ajmAEeg==", "dev": true, + "peer": true, "dependencies": { "giscus": "^1.6.0" }, @@ -4122,7 +4140,8 @@ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/@lit/reactive-element": { "version": "2.1.2", @@ -4130,6 +4149,7 @@ "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@lit-labs/ssr-dom-shim": "^1.5.0" } @@ -4139,7 +4159,8 @@ "resolved": "https://registry.npmjs.org/@lobehub/emojilib/-/emojilib-1.0.0.tgz", "integrity": "sha512-s9KnjaPjsEefaNv150G3aifvB+J3P4eEKG+epY9zDPS2BeB6+V2jELWqAZll+nkogMaVovjEE813z3V751QwGw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@lobehub/fluent-emoji": { "version": "4.1.0", @@ -4147,6 +4168,7 @@ "integrity": "sha512-R1MB2lfUkDvB7XAQdRzY75c1dx/tB7gEvBPaEEMarzKfCJWmXm7rheS6caVzmgwAlq5sfmTbxPL+un99sp//Yw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@lobehub/emojilib": "^1.0.0", "antd-style": "^4.1.0", @@ -4165,7 +4187,8 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@lobehub/icons": { "version": "5.6.0", @@ -4173,7 +4196,6 @@ "integrity": "sha512-wxDk6kqOJ5ctoyHbi0zNDZkpgCW3uxtWM8iA4ZZVqcKvL8xQxeWBO+0IzOtDcSij68xhKJkjcBEVTg+IFk4VHg==", "dev": true, "license": "MIT", - "peer": true, "workspaces": [ "packages/*" ], @@ -4206,6 +4228,7 @@ "integrity": "sha512-BYUs66/djw2DaFMlfy71v6uShJvJix5O4dv0geQjgeBwXo/3hFIagKEEJHkFTxrAdoTCxAmT2XwRhQSW3mgbag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ant-design/cssinjs": "^2.1.2", "@base-ui/react": "1.0.0", @@ -4291,6 +4314,7 @@ "integrity": "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA==", "dev": true, "license": "ISC", + "peer": true, "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -4301,6 +4325,7 @@ "integrity": "sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -4318,6 +4343,7 @@ "https://github.com/sponsors/ctavan" ], "license": "MIT", + "peer": true, "bin": { "uuid": "dist-node/bin/uuid" } @@ -4328,6 +4354,7 @@ "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -4366,6 +4393,7 @@ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">= 12" } @@ -4376,6 +4404,7 @@ "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -4579,7 +4608,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -4593,7 +4621,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -4603,7 +4630,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -4628,7 +4654,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -4648,6 +4673,7 @@ "integrity": "sha512-lLi+3sLCm3QDd5/aLO9pw+WbF6UzhrkWm2oTZ5WZJTGemOyUNRJ4DDhcEKmVusu4C4bXx9Nssh6fF+wQcapb5w==", "dev": true, "license": "apache-2.0", + "peer": true, "dependencies": { "@pierre/theme": "0.0.28", "@shikijs/transformers": "^3.0.0", @@ -4667,6 +4693,7 @@ "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", @@ -4680,6 +4707,7 @@ "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", @@ -4692,6 +4720,7 @@ "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" @@ -4703,6 +4732,7 @@ "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "3.23.0" } @@ -4713,6 +4743,7 @@ "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "3.23.0" } @@ -4723,6 +4754,7 @@ "integrity": "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/types": "3.23.0" @@ -4734,6 +4766,7 @@ "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" @@ -4745,6 +4778,7 @@ "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", @@ -4762,6 +4796,7 @@ "integrity": "sha512-1j/H/fECBuc9dEvntdWI+l435HZapw+RCJTlqCA6BboQ5TjlnE005j/ROWutXIs8aq5OAc82JI2Kwk4A1WWBgw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "vscode": "^1.0.0" } @@ -4772,6 +4807,7 @@ "integrity": "sha512-E0eMV8nXexrs7Vro7PdS8v/JfvvYCMh8HN6CXJ9l8fk9atZaY05fVUcyiAh5KjEJu7IxdFy4URfHGpM7+iOl1A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "object-assign": "^4.1.1" } @@ -4838,7 +4874,8 @@ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", @@ -4846,6 +4883,7 @@ "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, @@ -4870,6 +4908,7 @@ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-slot": "1.2.3" }, @@ -4894,6 +4933,7 @@ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -4913,6 +4953,7 @@ "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4929,6 +4970,7 @@ "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4945,6 +4987,7 @@ "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", @@ -4973,6 +5016,7 @@ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-slot": "1.2.3" }, @@ -4997,6 +5041,7 @@ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -5016,6 +5061,7 @@ "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, @@ -5035,6 +5081,7 @@ "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", @@ -5068,6 +5115,7 @@ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-slot": "1.2.3" }, @@ -5092,6 +5140,7 @@ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -5111,6 +5160,7 @@ "integrity": "sha512-4kY9IVa6+9nJPsYmngK5Uk2kUmZnv7ChhHAFeQ5oaj8jrR1bIi3xww8nH71pz1/Ve4d/cXO3YxT8eikt1B0a8w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-primitive": "2.1.4", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -5136,6 +5186,7 @@ "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -5161,6 +5212,7 @@ "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-slot": "1.2.4" }, @@ -5185,6 +5237,7 @@ "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -5204,6 +5257,7 @@ "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", @@ -5239,6 +5293,7 @@ "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -5264,6 +5319,7 @@ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-slot": "1.2.3" }, @@ -5288,6 +5344,7 @@ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -5307,6 +5364,7 @@ "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -5323,6 +5381,7 @@ "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -5343,6 +5402,7 @@ "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, @@ -5362,6 +5422,7 @@ "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, @@ -5381,6 +5442,7 @@ "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -5397,6 +5459,7 @@ "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/rect": "1.1.1" }, @@ -5416,6 +5479,7 @@ "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, @@ -5435,6 +5499,7 @@ "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, @@ -5459,6 +5524,7 @@ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-slot": "1.2.3" }, @@ -5483,6 +5549,7 @@ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -5501,7 +5568,8 @@ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@rc-component/async-validator": { "version": "5.1.0", @@ -5509,6 +5577,7 @@ "integrity": "sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.24.4" }, @@ -5522,6 +5591,7 @@ "integrity": "sha512-Ip9356xwZUR2nbW5PRVGif4B/bDve4pLa/N+PGbvBaTnjbvmN4PFMBGQSmlDlzKP1ovxaYMvwF/dI9lXNLT4iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/select": "~1.6.0", "@rc-component/tree": "~1.2.0", @@ -5539,6 +5609,7 @@ "integrity": "sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0", "clsx": "^2.1.1" @@ -5554,6 +5625,7 @@ "integrity": "sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/motion": "^1.1.4", @@ -5571,6 +5643,7 @@ "integrity": "sha512-OHaCHLHszCegdXmIq2ZRIZBN/EtpT6Wm8SG/gpzLATHbVKc/avvuKi+zlOuk05FTWvgaMmpxAko44uRJ3M+2pg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ant-design/fast-color": "^3.0.1", "@rc-component/util": "^1.3.0", @@ -5587,6 +5660,7 @@ "integrity": "sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0" }, @@ -5601,6 +5675,7 @@ "integrity": "sha512-Ay6PM7phkTkquplG8fWfUGFZ2GTLx9diTl4f0d8Eqxd7W1u1KjE9AQooFQHOHnhZf0Ya3z51+5EKCWHmt/dNEw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.1.3", "@rc-component/portal": "^2.1.0", @@ -5618,6 +5693,7 @@ "integrity": "sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.1.4", "@rc-component/portal": "^2.1.3", @@ -5635,6 +5711,7 @@ "integrity": "sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/trigger": "^3.0.0", "@rc-component/util": "^1.2.1", @@ -5651,6 +5728,7 @@ "integrity": "sha512-8O7TB55Fi2mWIGvSnwZjk8jFqVNYyKDAswglwGShcbndxqzKz4cHwNtNaLjZlAeRge9wcB0LL8IWsC/Bl18raQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/async-validator": "^5.1.0", "@rc-component/util": "^1.6.2", @@ -5670,6 +5748,7 @@ "integrity": "sha512-khF7w7xkBH5B1bsBcI1FSUZdkyd1aqpl2eYyILCqCzzQH3XdfehGUaZTnptyaJJfs09/R5hv9jXWyazOMFIClQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.0.0", "@rc-component/portal": "^2.1.2", @@ -5687,6 +5766,7 @@ "integrity": "sha512-Q61IMR47piUBudgixJ30CciKIy9b1H95qe7GgEKOmSJVJXvFRWJllJfQry9tif+MX2cWFXWJf/RXz4kaCeq/Fg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.4.0", "clsx": "^2.1.1" @@ -5702,6 +5782,7 @@ "integrity": "sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/mini-decimal": "^1.0.1", "@rc-component/util": "^1.4.0", @@ -5718,6 +5799,7 @@ "integrity": "sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/input": "~1.1.0", "@rc-component/menu": "~1.2.0", @@ -5737,6 +5819,7 @@ "integrity": "sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.1.4", "@rc-component/overflow": "^1.0.0", @@ -5755,6 +5838,7 @@ "integrity": "sha512-bk/FJ09fLf+NLODMAFll6CfYrHPBioTedhW6lxDBuuWucJEqFUd4l/D/5JgIi3dina6sYahB8iuPAZTNz2pMxw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.0" }, @@ -5768,6 +5852,7 @@ "integrity": "sha512-itfd+GztzJYAb04Z4RkEub1TbJAfZc2Iuy8p44U44xD1F5+fNYFKI3897ijlbIyfvXkTmMm+KGcjkQQGMHywEQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.2.0", "clsx": "^2.1.1" @@ -5783,6 +5868,7 @@ "integrity": "sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.2.0" }, @@ -5800,6 +5886,7 @@ "integrity": "sha512-OX3J+zVU7rvoJCikjrfW7qOUp7zlDeFBK2eA3SFbGSkDqo63Sl4Ss8A04kFP+fxHSxMDIS9jYVEZtU1FNCFuBA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.1.4", "@rc-component/util": "^1.2.1", @@ -5819,6 +5906,7 @@ "integrity": "sha512-syfmgAABaHCnCDzPwHZ/2tuvIcpOO3jefYZMmfkN+pmo8HKTzsfhS57vxo4ksPdN0By+uWVJhJWNFozNBxi2eA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.1", "@rc-component/resize-observer": "^1.0.1", @@ -5836,6 +5924,7 @@ "integrity": "sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0", "clsx": "^2.1.1" @@ -5851,6 +5940,7 @@ "integrity": "sha512-9FBYYsvH3HMLICaPDA/1Th5FLaDkFa7qAtangIdlhKb3ZALaR745e9PsOhheJb6asS4QXc12ffiAcjdkZ4C5/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/overflow": "^1.0.0", "@rc-component/resize-observer": "^1.0.0", @@ -5890,6 +5980,7 @@ "integrity": "sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.2.1", "clsx": "^2.1.1" @@ -5908,6 +5999,7 @@ "integrity": "sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.2.1", "clsx": "^2.1.1" @@ -5923,6 +6015,7 @@ "integrity": "sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.24.7" }, @@ -5940,6 +6033,7 @@ "integrity": "sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0", "clsx": "^2.1.1" @@ -5958,6 +6052,7 @@ "integrity": "sha512-t/Bb0W8uvL4PYKAB3YcChC+DlHh0Wt5kM7q/J+0qpVEUMLe7Hk5zuvc9km0hMnTFPSx5Z7Wu/fzCLN6erVLE8Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.2.0" }, @@ -5972,6 +6067,7 @@ "integrity": "sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.1", "@rc-component/motion": "^1.1.4", @@ -5989,6 +6085,7 @@ "integrity": "sha512-SyVCWnqxCQZZcQvQJ/CxSjx2bGma6ds/HtnpkIfZVnt6RoEgbqUmHgD6vrzNarNXwbLXerwVzWwq8F3d1sst7g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/overflow": "^1.0.0", "@rc-component/trigger": "^3.0.0", @@ -6010,6 +6107,7 @@ "integrity": "sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0", "clsx": "^2.1.1" @@ -6028,6 +6126,7 @@ "integrity": "sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.2.1", "clsx": "^2.1.1" @@ -6046,6 +6145,7 @@ "integrity": "sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0", "clsx": "^2.1.1" @@ -6061,6 +6161,7 @@ "integrity": "sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/context": "^2.0.1", "@rc-component/resize-observer": "^1.0.0", @@ -6082,6 +6183,7 @@ "integrity": "sha512-J48cs2iBi7Ho3nptBxxIqizEliUC+ExE23faspUQKGQ550vaBlv3aGF8Epv/UB1vFWeoJDTW/dNzgIU0Qj5i/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/dropdown": "~1.0.0", "@rc-component/menu": "~1.2.0", @@ -6104,6 +6206,7 @@ "integrity": "sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/input": "~1.1.0", "@rc-component/resize-observer": "^1.0.0", @@ -6121,6 +6224,7 @@ "integrity": "sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/trigger": "^3.7.1", "@rc-component/util": "^1.3.0", @@ -6137,6 +6241,7 @@ "integrity": "sha512-K04K9r32kUC+auBSQfr+Fss4SpSIS9JGe56oq/ALAX0p+i2ylYOI1MgR83yBY7v96eO6ZFXcM/igCQmubps0Ow==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/portal": "^2.2.0", "@rc-component/trigger": "^3.0.0", @@ -6157,6 +6262,7 @@ "integrity": "sha512-5Gli43+m4R7NhpYYz3Z61I6LOw9yI6CNChxgVtvrO6xB1qML7iE6QMLVMB3+FTjo2yF6uFdAHtqWPECz/zbX5w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.0.0", "@rc-component/util": "^1.8.1", @@ -6177,6 +6283,7 @@ "integrity": "sha512-iYsPq3nuLYvGqdvFAW+l+I9ASRIOVbMXyA8FGZg2lGym/GwkaWeJGzI4eJ7c9IOEhRj0oyfIN4S92Fl3J05mjQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/select": "~1.6.0", "@rc-component/tree": "~1.2.0", @@ -6194,6 +6301,7 @@ "integrity": "sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/motion": "^1.1.4", "@rc-component/portal": "^2.2.0", @@ -6215,6 +6323,7 @@ "integrity": "sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rc-component/util": "^1.3.0", "clsx": "^2.1.1" @@ -6252,6 +6361,7 @@ "integrity": "sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", "@rc-component/resize-observer": "^1.0.1", @@ -6279,6 +6389,7 @@ "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/primitive": "4.0.2", "@shikijs/types": "4.0.2", @@ -6296,6 +6407,7 @@ "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", @@ -6311,6 +6423,7 @@ "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2" @@ -6325,6 +6438,7 @@ "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "4.0.2" }, @@ -6338,6 +6452,7 @@ "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", @@ -6353,6 +6468,7 @@ "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "4.0.2" }, @@ -6366,6 +6482,7 @@ "integrity": "sha512-1+L0gf9v+SdDXs08vjaLb3mBFa8U7u37cwcBQIv/HCocLwX69Tt6LpUCjtB+UUTvQxI7BnjZKhN/wMjhHBcJGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/types": "4.0.2" @@ -6380,6 +6497,7 @@ "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" @@ -6393,7 +6511,32 @@ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true + }, + "node_modules/@sindresorhus/df": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sindresorhus/df/-/df-3.1.1.tgz", + "integrity": "sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==", + "license": "MIT", + "dependencies": { + "execa": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/@smithy/core": { "version": "3.31.1", @@ -6519,6 +6662,7 @@ "resolved": "https://registry.npmjs.org/@splinetool/runtime/-/runtime-0.9.526.tgz", "integrity": "sha512-qznHbXA5aKwDbCgESAothCNm1IeEZcmNWG145p5aXj4w5uoqR1TZ9qkTHTKLTsUbHeitCwdhzmRqan1kxboLgQ==", "dev": true, + "peer": true, "dependencies": { "on-change": "^4.0.0", "semver-compare": "^1.0.0" @@ -6530,10 +6674,20 @@ "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": ">= 16.3.0" } }, + "node_modules/@stroncium/procfs": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@stroncium/procfs/-/procfs-1.2.1.tgz", + "integrity": "sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + } + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -7222,7 +7376,8 @@ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -7260,7 +7415,8 @@ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/ms": { "version": "2.1.0", @@ -7308,7 +7464,6 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -7319,7 +7474,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -7399,7 +7553,6 @@ "integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.57.1", "@typescript-eslint/types": "8.57.1", @@ -7890,7 +8043,8 @@ "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@use-gesture/react": { "version": "10.3.1", @@ -7898,6 +8052,7 @@ "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@use-gesture/core": "10.3.1" }, @@ -7921,7 +8076,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7954,6 +8108,7 @@ "integrity": "sha512-S0lvzhbdlhK36RFBkGv+RbOM/dbbweym+BIHM/bwwuWVSVN5TuVErHPMWo4w0t1NDYg5KPp2iEf7Y7E5LASYiw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.21.0", "@types/js-cookie": "^3.0.6", @@ -8257,6 +8412,7 @@ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -8274,6 +8430,7 @@ "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "astring": "bin/astring" } @@ -8294,6 +8451,7 @@ "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -8442,7 +8600,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -8471,7 +8628,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -8649,7 +8805,20 @@ "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-3.2.0.tgz", "integrity": "sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw==", "dev": true, - "license": "(BSD-3-Clause AND Apache-2.0)" + "license": "(BSD-3-Clause AND Apache-2.0)", + "peer": true + }, + "node_modules/chunkify": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/chunkify/-/chunkify-5.0.0.tgz", + "integrity": "sha512-G8dj/3/Gm+1yL4oWSdwIxihZWFlgC4V2zYtIApacI0iPIRKBHlBGOGAiDUBZgrj4H8MBA8g8fPFwnJrWF3wl7Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/class-variance-authority": { "version": "0.7.1", @@ -8657,6 +8826,7 @@ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "clsx": "^2.1.1" }, @@ -8669,7 +8839,8 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/client-only": { "version": "0.0.1", @@ -8693,6 +8864,7 @@ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8723,7 +8895,8 @@ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -8751,7 +8924,8 @@ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -8822,7 +8996,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -8846,7 +9019,6 @@ "integrity": "sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10" } @@ -9291,7 +9463,6 @@ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -9507,6 +9678,7 @@ "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=14.16" } @@ -9602,7 +9774,9 @@ "version": "8.0.3", "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=0.3.1" } @@ -9693,6 +9867,15 @@ "dev": true, "license": "MIT" }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", @@ -9925,6 +10108,7 @@ "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", @@ -9942,6 +10126,7 @@ "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", @@ -9982,7 +10167,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10123,7 +10307,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -10503,6 +10686,7 @@ "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0" }, @@ -10517,6 +10701,7 @@ "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", @@ -10545,6 +10730,7 @@ "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" @@ -10560,6 +10746,7 @@ "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", @@ -10576,6 +10763,7 @@ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">= 12" } @@ -10586,6 +10774,7 @@ "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" @@ -10601,6 +10790,7 @@ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -10615,6 +10805,26 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/execa/-/execa-2.1.0.tgz", + "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -10627,6 +10837,7 @@ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -10640,6 +10851,7 @@ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -10699,7 +10911,6 @@ "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -10761,6 +10972,7 @@ "integrity": "sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.3" }, @@ -10772,7 +10984,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -10787,6 +10998,7 @@ "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=14.16" }, @@ -10861,6 +11073,7 @@ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -10892,6 +11105,7 @@ "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", @@ -11054,9 +11268,24 @@ "node": ">= 0.4" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", @@ -11091,6 +11320,7 @@ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -11101,6 +11331,7 @@ "integrity": "sha512-Zrsi8r4t1LVW950keaWcsURuZUQwUaMKjvJgTCY125vkW6OiEBkatE7ScJDbpqKHdZwb///7FVC21SE3iFK3PQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "lit": "^3.2.1" } @@ -11148,6 +11379,75 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/globby/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globby/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/google-auth-library": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.9.1.tgz", @@ -11469,6 +11769,7 @@ "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -11498,6 +11799,7 @@ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -11722,6 +12024,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -11740,6 +12043,7 @@ "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -11817,7 +12121,8 @@ "integrity": "sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==", "deprecated": "The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019.", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/is-alphabetical": { "version": "2.0.1", @@ -12021,12 +12326,28 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -12038,7 +12359,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12084,7 +12404,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -12104,6 +12423,24 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -12141,7 +12478,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -12164,6 +12500,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -12183,6 +12531,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "isobject": "^3.0.1" }, @@ -12238,6 +12587,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -12335,6 +12696,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -12346,7 +12722,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/isobject": { @@ -12355,6 +12730,7 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -12392,7 +12768,8 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.8.tgz", "integrity": "sha512-yeJd4aNAdYZQjaon2bpD/Gb0B/omw7HQOsynXXcOiWVCacbBcPlgn8S/d1X6blFSaHao7ozqtW7NZW19xpCtIw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/js-tokens": { "version": "4.0.0", @@ -12476,6 +12853,7 @@ "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "string-convert": "^0.2.0" } @@ -12609,6 +12987,7 @@ "integrity": "sha512-BcjnfUX8jpmwZUz2L7AfBtF9vn4ggTH33hmeufDULbP3YgNZ/C+ss/oO3stbrqRQyaOmRwy70y7BGTGO81S3rA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/react-portal": "^1.1.4", "@radix-ui/react-tooltip": "^1.1.8", @@ -12925,6 +13304,7 @@ "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@lit/reactive-element": "^2.1.0", "lit-element": "^4.2.0", @@ -12937,6 +13317,7 @@ "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@lit-labs/ssr-dom-shim": "^1.5.0", "@lit/reactive-element": "^2.1.0", @@ -12949,6 +13330,7 @@ "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -12974,7 +13356,8 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-es": { "version": "4.18.1", @@ -13052,7 +13435,8 @@ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lucide-react": { "version": "0.562.0", @@ -13060,6 +13444,7 @@ "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", "dev": true, "license": "ISC", + "peer": true, "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -13115,6 +13500,7 @@ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16" }, @@ -13343,6 +13729,7 @@ "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", @@ -13424,6 +13811,7 @@ "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-find-and-replace": "^3.0.0" @@ -13506,12 +13894,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, "node_modules/merge-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/merge-value/-/merge-value-1.0.0.tgz", "integrity": "sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "get-value": "^2.0.6", "is-extendable": "^1.0.0", @@ -13526,7 +13921,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -13605,7 +13999,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -13667,6 +14060,7 @@ "integrity": "sha512-OkzoYVTL1ChbvQ8Cc1ayTIz7paFQz8iS9oIYmewncweUSwmWR+hkJF9spJ1lxB90XldJl26A1F4IkPOKS3bDXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "devlop": "^1.1.0", "micromark-extension-cjk-friendly-util": "3.0.1", @@ -13693,6 +14087,7 @@ "integrity": "sha512-GcbXqTTHOsiZHyF753oIddP/J2eH8j9zpyQPhkof6B2JNxfEJabnQqxbCgzJNuNes0Y2jTNJ3LiYPSXr6eJA8w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "get-east-asian-width": "^1.4.0", "micromark-util-character": "^2.1.1", @@ -13871,6 +14266,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -13888,6 +14284,7 @@ "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -13911,6 +14308,7 @@ "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "micromark-util-types": "^2.0.0" }, @@ -13925,6 +14323,7 @@ "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", @@ -13946,6 +14345,7 @@ "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -14023,6 +14423,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -14262,6 +14663,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", @@ -14412,7 +14814,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -14422,6 +14823,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", @@ -14454,6 +14864,7 @@ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -14481,6 +14892,7 @@ "integrity": "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "framer-motion": "^12.38.0", "tslib": "^2.4.0" @@ -14508,6 +14920,7 @@ "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "motion-utils": "^12.36.0" } @@ -14517,7 +14930,43 @@ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true + }, + "node_modules/mount-point": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mount-point/-/mount-point-3.0.0.tgz", + "integrity": "sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/df": "^1.0.1", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mount-point/node_modules/@sindresorhus/df": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sindresorhus/df/-/df-1.0.1.tgz", + "integrity": "sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/move-file": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/move-file/-/move-file-4.1.0.tgz", + "integrity": "sha512-YE06K9XLIvMlqSfoZTl32qvbZLPgL70Za41wS8pEhsSOhy71xz2fn8J07nuz/LEEtPSuUzLUFGAJSx499eKDSw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ms": { "version": "2.1.3", @@ -14711,12 +15160,25 @@ "dev": true, "license": "MIT" }, + "node_modules/npm-run-path": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/numeral": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "*" } @@ -14850,6 +15312,7 @@ "integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -14857,12 +15320,37 @@ "url": "https://github.com/sindresorhus/on-change?sponsor=1" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/oniguruma-parser": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/oniguruma-to-es": { "version": "4.3.6", @@ -14870,6 +15358,7 @@ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", @@ -14922,6 +15411,15 @@ "node": ">= 0.8.0" } }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -14940,6 +15438,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -14972,6 +15479,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "7.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-map/-/p-map-7.0.6.tgz", + "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", @@ -15095,7 +15614,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15135,7 +15653,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -15144,6 +15661,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pkg-types": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", @@ -15226,6 +15773,18 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/powershell-utils": { + "version": "0.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/powershell-utils/-/powershell-utils-0.2.0.tgz", + "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15319,6 +15878,16 @@ "node": ">=12.0.0" } }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -15335,6 +15904,7 @@ "integrity": "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "decode-uri-component": "^0.4.1", "filter-obj": "^5.1.0", @@ -15351,7 +15921,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -15374,6 +15943,7 @@ "integrity": "sha512-SwoOByE39/3oIokDs/BnkqI+ltwirZbP8HZdq1/3SkPSBi7xDdvWHTp7cpNI9ullozkR6mwTWQi6/E/9huQVrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -15391,6 +15961,7 @@ "integrity": "sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/portal": "^1.0.0-8", @@ -15409,6 +15980,7 @@ "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.0", "classnames": "^2.3.2", @@ -15428,6 +16000,7 @@ "integrity": "sha512-JBZ+xcb6kkex8XnBd4VHw1ZxjV6kmcwUumSHaIFdka2qzMCo7Klcy4sI6G0XtUpG/vtpislQCc+S9Bc+NLHYMg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1" @@ -15443,6 +16016,7 @@ "integrity": "sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.2", "@rc-component/portal": "^1.0.2", @@ -15462,6 +16036,7 @@ "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.0", "classnames": "^2.3.2", @@ -15481,6 +16056,7 @@ "integrity": "sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -15497,6 +16073,7 @@ "integrity": "sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/mini-decimal": "^1.0.1", @@ -15515,6 +16092,7 @@ "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/trigger": "^2.0.0", @@ -15534,6 +16112,7 @@ "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.0", "classnames": "^2.3.2", @@ -15553,6 +16132,7 @@ "integrity": "sha512-ORENF39PeXTzM+gQEshuk460Z8N4+6DkjpxlpE7Q3gYy1iBpLrx0FOJz3h62ryrJZ/3zCAUIkT1Pb/8hHWpb3A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.2", "@rc-component/portal": "^1.1.0", @@ -15575,6 +16155,7 @@ "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -15591,6 +16172,7 @@ "integrity": "sha512-Lm/v9h0LymeUYJf0x39OveU52InkdRXqnn2aYXfWmo8WdOonIKB2kfau+GF0fWq6jPgtdO9yMqveGcK6aIhJmg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -15608,6 +16190,7 @@ "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.20.7", "classnames": "^2.2.1", @@ -15625,6 +16208,7 @@ "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "react-is": "^18.2.0" @@ -15639,7 +16223,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/re-resizable": { "version": "6.11.2", @@ -15647,6 +16232,7 @@ "integrity": "sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -15657,7 +16243,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -15668,6 +16253,7 @@ "integrity": "sha512-Zto7u9l6Wd5LPPtjeFJ+7uwoT4bs01OSgkN2kxD18lWl8IiZ0GY3nWCbKPx4qIU7Au1vENsMJm19rfVWHHayaQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": "^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -15679,6 +16265,7 @@ "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" @@ -15689,7 +16276,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -15703,6 +16289,7 @@ "integrity": "sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "clsx": "^2.1.1", "prop-types": "^15.8.1" @@ -15718,6 +16305,7 @@ "integrity": "sha512-iBYHA1rbopIvtzokEX4QubO6qk5IF/x3BtKGu74rF2JkQDXnwC4uO/lHKpaw4PJIV6iIAYOlwLv2FpiGyqHNog==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "attr-accept": "^2.2.2", "file-selector": "^0.5.0", @@ -15736,6 +16324,7 @@ "integrity": "sha512-BrYwPOdXi5mqkk5lw+Uvt0ThHx32rCt3BkukS4X23A2AIWDPSGX6iaWTc0y9TU/mHDA/6qOSGel+B2ERkOvD1w==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } @@ -15745,7 +16334,8 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-hotkeys-hook": { "version": "5.2.4", @@ -15753,6 +16343,7 @@ "integrity": "sha512-BgKg+A1+TawkYluh5Bo4cTmcgMN5L29uhJbDUQdHwPX+qgXRjIPYU5kIDHyxnAwCkCBiu9V5OpB2mpyeluVF2A==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" @@ -15799,6 +16390,7 @@ "integrity": "sha512-MSZAfwFfdbEvwkKWP5EI5chuLYnNUxNS7vyS0i1Jp+wtd8J4Ga2ddzhaE68aMol2Z4vCnRM/oGOo1a3V75UPlw==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" @@ -15818,6 +16410,7 @@ "integrity": "sha512-s/sIT3pGZnQ+57egijkTp9mizjIWrJz68Pq6yd+F/wniFY3IriML18dUXnQe/HP9uMiJ+9MAp44hljG99fZu6Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "re-resizable": "^6.11.2", "react-draggable": "^4.5.0", @@ -15833,7 +16426,8 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true, - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/react-syntax-highlighter": { "version": "16.1.1", @@ -15862,6 +16456,7 @@ "integrity": "sha512-UmReVZ0TxlKzxSbYiAj+LeGRW8s8LraAFTXRAxzMYnNRgGPsxCudwZKVkjvGmjtx7SW/hZamt69NUmGf4xrkXA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8", "npm": ">=5" @@ -15907,6 +16502,7 @@ "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", @@ -15923,6 +16519,7 @@ "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", @@ -15944,6 +16541,7 @@ "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", @@ -15961,6 +16559,7 @@ "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", @@ -16018,6 +16617,7 @@ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "regex-utilities": "^2.3.0" } @@ -16028,6 +16628,7 @@ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "regex-utilities": "^2.3.0" } @@ -16037,7 +16638,8 @@ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", @@ -16066,6 +16668,7 @@ "integrity": "sha512-6di6kEu9WUHKLKrkKG2xX6AOuaCMGghg0Wq7MEuM/jBYUPVIq6PJpMe00dxMfU+/YSBtDXhffpDimgDi+BObIQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@primer/octicons": "^19.20.0", "hast-util-from-html": "^2.0.3", @@ -16118,6 +16721,7 @@ "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -16149,6 +16753,7 @@ "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-newline-to-break": "^2.0.0", @@ -16165,6 +16770,7 @@ "integrity": "sha512-6WwkoQyZf/4j5k53zdFYrR8Ca+UVn992jXdLUSBDZR4eBpFhKyVxmA4gUHra/5fesjGIxrDhHesNr/sVoiiysA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "micromark-extension-cjk-friendly": "2.0.1" }, @@ -16206,6 +16812,7 @@ "integrity": "sha512-ByefQKFN184LeiGRCabfl7zUJsdlMYWEhiLX1gpmQ11yFg6xSuOTW7LVCv0oc1x+YvUMJW23NU36sJX2RWGgvg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-find-and-replace": "^3.0.0", @@ -16242,6 +16849,7 @@ "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -16307,21 +16915,24 @@ "resolved": "https://registry.npmjs.org/remend/-/remend-1.3.0.tgz", "integrity": "sha512-iIhggPkhW3hFImKtB10w0dz4EZbs28mV/dmbcYVonWEJ6UGHHpP+bFZnTh6GNWJONg5m+U56JrL+8IxZRdgWjw==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/reselect": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/resolve": { "version": "1.22.11", @@ -16377,7 +16988,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -16408,7 +17018,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -16529,6 +17138,7 @@ "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" }, @@ -16542,6 +17152,7 @@ "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "compute-scroll-into-view": "^3.0.2" } @@ -16561,7 +17172,8 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -16618,6 +17230,7 @@ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -16634,6 +17247,7 @@ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16707,7 +17321,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -16720,7 +17333,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -16732,6 +17344,7 @@ "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/engine-javascript": "4.0.2", @@ -16752,6 +17365,7 @@ "integrity": "sha512-4pz6JGSDmVTTkPJ/ueixHkFAXY4ySCc+unvCaDZV7hqq/sdJZirRxgIXSuNSKgiFlGTgRR97sdu2R8K55sPsrw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/core": "^3.0.0" }, @@ -16781,6 +17395,7 @@ "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", @@ -16794,6 +17409,7 @@ "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" @@ -16881,6 +17497,18 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -16907,6 +17535,7 @@ "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -16920,6 +17549,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "extend-shallow": "^3.0.0" }, @@ -16933,6 +17563,7 @@ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -16991,7 +17622,8 @@ "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/string.prototype.includes": { "version": "2.0.1", @@ -17131,6 +17763,15 @@ "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -17226,6 +17867,7 @@ "integrity": "sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.6.0" @@ -17239,7 +17881,8 @@ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tailwindcss": { "version": "4.2.2", @@ -17268,6 +17911,7 @@ "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.22" } @@ -17323,7 +17967,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -17335,7 +17978,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -17350,6 +17992,7 @@ "integrity": "sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "vfile": "^6.0.0" }, @@ -17358,6 +18001,29 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/trash": { + "version": "10.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/trash/-/trash-10.1.1.tgz", + "integrity": "sha512-L/mu8sfblMwaS+exj1MxpmihlIRwVQyB6ieKuTTmBJG0lXWBPfx3pMGQG8i3NT/S8vvNZrflDUOp+j0o7Cnxzw==", + "license": "MIT", + "dependencies": { + "@stroncium/procfs": "^1.2.1", + "chunkify": "^5.0.0", + "globby": "^14.1.0", + "is-path-inside": "^4.0.0", + "move-file": "^4.1.0", + "p-map": "^7.0.3", + "powershell-utils": "^0.2.0", + "wsl-utils": "^0.4.0", + "xdg-trashdir": "^3.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -17415,6 +18081,7 @@ "integrity": "sha512-yF35FCoEOFBzOclSkMNEUbFQZuv89KEQ+5Xz03HrMSGUGB1+r+El+JiGOFwsP4p9RFNzwlrydYoTLvPOuICl9w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -17541,7 +18208,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17622,13 +18288,24 @@ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "license": "MIT" }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -17692,6 +18369,7 @@ "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -17842,6 +18520,7 @@ "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -17862,10 +18541,23 @@ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17878,7 +18570,8 @@ "resolved": "https://registry.npmjs.org/v8n/-/v8n-1.5.1.tgz", "integrity": "sha512-LdabyT4OffkyXFCe9UT+uMkxNBs5rcTVuZClvxQr08D5TUgo1OFKkoT65qYRCsiKBl/usHjpXvP4hHMzzDRj3A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/vfile": { "version": "6.0.3", @@ -17931,6 +18624,7 @@ "integrity": "sha512-6f79msqg3jzNFdqJiS0FSzhRN1EHlDhR7EvW7emp6z5qQ22VdsReiDHflkpMEMhoAyUuYr69nwT0aagiM7NrUg==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0", @@ -17980,7 +18674,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -18091,12 +18784,17 @@ "node": ">=0.10.0" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/ws": { "version": "8.21.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -18113,6 +18811,58 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/wsl-utils/-/wsl-utils-0.4.0.tgz", + "integrity": "sha512-9YmF+2sFEd+T7TkwlmE337F0IVzfDvDknhtpBQxxXzEOfgPphGlFYpyx0cTuCIFj8/p+sqwBYAeGxOMNSzPPDA==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xdg-trashdir": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/xdg-trashdir/-/xdg-trashdir-3.1.0.tgz", + "integrity": "sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/df": "^3.1.1", + "mount-point": "^3.0.0", + "user-home": "^2.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/xmlbuilder": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", @@ -18163,7 +18913,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -18196,6 +18945,7 @@ "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.7.0" }, diff --git a/package.json b/package.json index 03966a46f..33de34185 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "proper-lockfile": "4.1.2", "react": "^19.2.4", "react-dom": "^19.2.4", + "trash": "^10.1.1", "undici": "8.5.0" }, "devDependencies": {