From 5ef7bdc42e0834c8d7d19a0f508f05adab96d574 Mon Sep 17 00:00:00 2001 From: Toddyclipsgg Date: Sun, 9 Feb 2025 18:27:29 -0300 Subject: [PATCH 1/4] Delete wrangler.toml --- wrangler.toml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 wrangler.toml diff --git a/wrangler.toml b/wrangler.toml deleted file mode 100644 index 93c41604ee..0000000000 --- a/wrangler.toml +++ /dev/null @@ -1,6 +0,0 @@ -#:schema node_modules/wrangler/config-schema.json -name = "bolt" -compatibility_flags = ["nodejs_compat"] -compatibility_date = "2024-07-01" -pages_build_output_dir = "./build/client" -send_metrics = false From 6412e58b35b8d7f489c824220debf467e2325493 Mon Sep 17 00:00:00 2001 From: Toddyclipsgg Date: Sun, 9 Feb 2025 18:28:14 -0300 Subject: [PATCH 2/4] Delete .tool-versions --- .tool-versions | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .tool-versions diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index 427253d38b..0000000000 --- a/.tool-versions +++ /dev/null @@ -1,2 +0,0 @@ -nodejs 20.15.1 -pnpm 9.4.0 From 382bf2c9a3b7bb73cb57b5b5e9c9e4b769391482 Mon Sep 17 00:00:00 2001 From: Toddyclipsgg Date: Sun, 16 Feb 2025 23:10:15 -0300 Subject: [PATCH 3/4] feat: Add Diff View and File History Tracking - Implemented a new Diff view in the Workbench to track file changes - Added file history tracking with version control and change tracking - Created a FileModifiedDropdown to browse and manage modified files - Enhanced ActionRunner to support file history persistence - Updated Workbench and BaseChat components to support new diff view functionality - Added support for inline and side-by-side diff view modes --- .github/actions/setup-and-build/action.yaml | 4 + README.md | 7 +- app/components/chat/BaseChat.tsx | 76 +- app/components/ui/Slider.tsx | 22 +- app/components/workbench/DiffView.tsx | 510 +++++++++++++ app/components/workbench/Workbench.client.tsx | 233 +++++- app/lib/runtime/action-runner.ts | 35 +- app/lib/stores/workbench.ts | 24 +- app/styles/diff-view.css | 72 ++ app/types/actions.ts | 14 + app/utils/getLanguageFromExtension.ts | 24 + package.json | 2 + pnpm-lock.yaml | 703 ++++++++++-------- vite.config.ts | 1 + 14 files changed, 1354 insertions(+), 373 deletions(-) create mode 100644 app/components/workbench/DiffView.tsx create mode 100644 app/styles/diff-view.css create mode 100644 app/utils/getLanguageFromExtension.ts diff --git a/.github/actions/setup-and-build/action.yaml b/.github/actions/setup-and-build/action.yaml index b27bc6fb8e..b4f27b7364 100644 --- a/.github/actions/setup-and-build/action.yaml +++ b/.github/actions/setup-and-build/action.yaml @@ -30,3 +30,7 @@ runs: run: | pnpm install pnpm run build + + - name: Create history directory + shell: bash + run: mkdir -p .history diff --git a/README.md b/README.md index 0a4e77e0e7..3071fcee02 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,10 @@ Welcome to bolt.diy, the official open source version of Bolt.new (previously known as oTToDev and bolt.new ANY LLM), which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK! See the instructions below for running this locally and extending it to include more models. ---- - +----- Check the [bolt.diy Docs](https://stackblitz-labs.github.io/bolt.diy/) for more offical installation instructions and more informations. ---- - +----- Also [this pinned post in our community](https://thinktank.ottomator.ai/t/videos-tutorial-helpful-content/3243) has a bunch of incredible resources for running and deploying bolt.diy yourself! We have also launched an experimental agent called the "bolt.diy Expert" that can answer common questions about bolt.diy. Find it here on the [oTTomator Live Agent Studio](https://studio.ottomator.ai/). @@ -81,6 +79,7 @@ project, please check the [project management guide](./PROJECT.md) to get starte - ✅ Add Starter Template Options (@thecodacus) - ✅ Perplexity Integration (@meetpateltech) - ✅ AWS Bedrock Integration (@kunjabijukchhe) +- ✅ Add a "Diff View" to see the changes (@toddyclipsgg) - ⬜ **HIGH PRIORITY** - Prevent bolt from rewriting files as often (file locking and diffs) - ⬜ **HIGH PRIORITY** - Better prompting for smaller LLMs (code window sometimes doesn't start) - ⬜ **HIGH PRIORITY** - Run agents in the backend as opposed to a single model call diff --git a/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx index 025fa1976f..c39569950c 100644 --- a/app/components/chat/BaseChat.tsx +++ b/app/components/chat/BaseChat.tsx @@ -34,6 +34,7 @@ import ChatAlert from './ChatAlert'; import type { ModelInfo } from '~/lib/modules/llm/types'; import ProgressCompilation from './ProgressCompilation'; import type { ProgressAnnotation } from '~/types/context'; +import type { ActionRunner } from '~/lib/runtime/action-runner'; const TEXTAREA_MIN_HEIGHT = 76; @@ -67,6 +68,7 @@ interface BaseChatProps { actionAlert?: ActionAlert; clearAlert?: () => void; data?: JSONValue[] | undefined; + actionRunner?: ActionRunner; } export const BaseChat = React.forwardRef( @@ -101,6 +103,7 @@ export const BaseChat = React.forwardRef( actionAlert, clearAlert, data, + actionRunner, }, ref, ) => { @@ -303,7 +306,7 @@ export const BaseChat = React.forwardRef( data-chat-visible={showChat} > {() => } -
+
{!chatStarted && (
@@ -317,40 +320,39 @@ export const BaseChat = React.forwardRef( )}
{() => { return chatStarted ? ( -
- -
+ ) : null; }}
- {actionAlert && ( - clearAlert?.()} - postMessage={(message) => { - sendMessage?.({} as any, message); - clearAlert?.(); - }} - /> - )} +
+ {actionAlert && ( + clearAlert?.()} + postMessage={(message) => { + sendMessage?.({} as any, message); + clearAlert?.(); + }} + /> + )} +
{progressAnnotations && }
(
- {!chatStarted && ( -
+
+ {!chatStarted && (
-
- {ImportButtons(importChat)} - -
+ {ImportButtons(importChat)} +
- - {ExamplePrompts((event, messageInput) => { + )} + {!chatStarted && + ExamplePrompts((event, messageInput) => { if (isStreaming) { handleStop?.(); return; @@ -601,11 +602,18 @@ export const BaseChat = React.forwardRef( handleSendMessage?.(event, messageInput); })} - -
- )} + {!chatStarted && } +
- {() => } + + {() => ( + + )} +
); diff --git a/app/components/ui/Slider.tsx b/app/components/ui/Slider.tsx index f332a6af2d..d5e9b00096 100644 --- a/app/components/ui/Slider.tsx +++ b/app/components/ui/Slider.tsx @@ -9,10 +9,11 @@ interface SliderOption { text: string; } -export interface SliderOptions { - left: SliderOption; - right: SliderOption; -} +export type SliderOptions = { + left: { value: T; text: string }; + middle?: { value: T; text: string }; + right: { value: T; text: string }; +}; interface SliderProps { selected: T; @@ -21,14 +22,23 @@ interface SliderProps { } export const Slider = genericMemo(({ selected, options, setSelected }: SliderProps) => { - const isLeftSelected = selected === options.left.value; + const hasMiddle = !!options.middle; + const isLeftSelected = hasMiddle ? selected === options.left.value : selected === options.left.value; + const isMiddleSelected = hasMiddle && options.middle ? selected === options.middle.value : false; return (
setSelected?.(options.left.value)}> {options.left.text} - setSelected?.(options.right.value)}> + + {options.middle && ( + setSelected?.(options.middle!.value)}> + {options.middle.text} + + )} + + setSelected?.(options.right.value)}> {options.right.text}
diff --git a/app/components/workbench/DiffView.tsx b/app/components/workbench/DiffView.tsx new file mode 100644 index 0000000000..a3091d2d89 --- /dev/null +++ b/app/components/workbench/DiffView.tsx @@ -0,0 +1,510 @@ +import { memo, useMemo, useState, useEffect, useCallback } from 'react'; +import { useStore } from '@nanostores/react'; +import { workbenchStore } from '~/lib/stores/workbench'; +import type { FileMap } from '~/lib/stores/files'; +import type { EditorDocument } from '~/components/editor/codemirror/CodeMirrorEditor'; +import { diffLines, type Change } from 'diff'; +import { getHighlighter } from 'shiki'; +import '~/styles/diff-view.css'; +import { diffFiles, extractRelativePath } from '~/utils/diff'; +import { ActionRunner } from '~/lib/runtime/action-runner'; +import type { FileHistory } from '~/types/actions'; +import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension'; + +interface CodeComparisonProps { + beforeCode: string; + afterCode: string; + language: string; + filename: string; + lightTheme: string; + darkTheme: string; +} + +interface DiffBlock { + lineNumber: number; + content: string; + type: 'added' | 'removed' | 'unchanged'; + correspondingLine?: number; +} + +interface FullscreenButtonProps { + onClick: () => void; + isFullscreen: boolean; +} + +const FullscreenButton = memo(({ onClick, isFullscreen }: FullscreenButtonProps) => ( + +)); + +const FullscreenOverlay = memo(({ isFullscreen, children }: { isFullscreen: boolean; children: React.ReactNode }) => { + if (!isFullscreen) return <>{children}; + + return ( +
+
+ {children} +
+
+ ); +}); + +const MAX_FILE_SIZE = 1024 * 1024; // 1MB +const BINARY_REGEX = /[\x00-\x08\x0E-\x1F]/; + +const isBinaryFile = (content: string) => { + return content.length > MAX_FILE_SIZE || BINARY_REGEX.test(content); +}; + +const processChanges = (beforeCode: string, afterCode: string) => { + try { + if (isBinaryFile(beforeCode) || isBinaryFile(afterCode)) { + return { + beforeLines: [], + afterLines: [], + hasChanges: false, + lineChanges: { before: new Set(), after: new Set() }, + unifiedBlocks: [], + isBinary: true + }; + } + + // Normalizar quebras de linha para evitar falsos positivos + const normalizedBefore = beforeCode.replace(/\r\n/g, '\n').trim(); + const normalizedAfter = afterCode.replace(/\r\n/g, '\n').trim(); + + // Se os conteúdos são idênticos após normalização, não há mudanças + if (normalizedBefore === normalizedAfter) { + return { + beforeLines: normalizedBefore.split('\n'), + afterLines: normalizedAfter.split('\n'), + hasChanges: false, + lineChanges: { before: new Set(), after: new Set() }, + unifiedBlocks: [] + }; + } + + // Processar as diferenças com configurações mais precisas + const changes = diffLines(normalizedBefore, normalizedAfter, { + newlineIsToken: true, + ignoreWhitespace: false, + ignoreCase: false + }); + + // Mapear as mudanças com mais precisão + const beforeLines = normalizedBefore.split('\n'); + const afterLines = normalizedAfter.split('\n'); + const lineChanges = { + before: new Set(), + after: new Set() + }; + + let beforeLineNumber = 0; + let afterLineNumber = 0; + + const unifiedBlocks = changes.map(change => { + const lines = change.value.split('\n').filter(line => line.length > 0); + + if (change.added) { + lines.forEach((_, i) => lineChanges.after.add(afterLineNumber + i)); + const block = lines.map((line, i) => ({ + lineNumber: afterLineNumber + i, + content: line, + type: 'added' as const + })); + afterLineNumber += lines.length; + return block; + } + + if (change.removed) { + lines.forEach((_, i) => lineChanges.before.add(beforeLineNumber + i)); + const block = lines.map((line, i) => ({ + lineNumber: beforeLineNumber + i, + content: line, + type: 'removed' as const + })); + beforeLineNumber += lines.length; + return block; + } + + const block = lines.map((line, i) => ({ + lineNumber: afterLineNumber + i, + content: line, + type: 'unchanged' as const, + correspondingLine: beforeLineNumber + i + })); + beforeLineNumber += lines.length; + afterLineNumber += lines.length; + return block; + }).flat(); + + return { + beforeLines, + afterLines, + hasChanges: lineChanges.before.size > 0 || lineChanges.after.size > 0, + lineChanges, + unifiedBlocks, + isBinary: false + }; + } catch (error) { + console.error('Error processing changes:', error); + return { + beforeLines: [], + afterLines: [], + hasChanges: false, + lineChanges: { before: new Set(), after: new Set() }, + unifiedBlocks: [], + error: true, + isBinary: false + }; + } +}; + +const lineNumberStyles = "w-12 shrink-0 pl-2 py-0.5 text-left font-mono text-bolt-elements-textTertiary border-r border-bolt-elements-borderColor bg-bolt-elements-background-depth-1"; +const lineContentStyles = "px-4 py-0.5 font-mono whitespace-pre flex-1 group-hover:bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary"; + +const renderContentWarning = (type: 'binary' | 'error') => ( +
+
+
+

+ {type === 'binary' ? 'Binary file detected' : 'Error processing file'} +

+

+ {type === 'binary' + ? 'Diff view is not available for binary files' + : 'Could not generate diff preview'} +

+
+
+); + +const NoChangesView = memo(({ beforeCode, language, highlighter }: { + beforeCode: string; + language: string; + highlighter: any; +}) => ( +
+
+
+

Files are identical

+

Both versions match exactly

+
+
+
+ Current Content +
+
+ {beforeCode.split('\n').map((line, index) => ( +
+
{index + 1}
+
+ + ]*>/g, '') + .replace(/<\/?code[^>]*>/g, '') + : line + }} /> +
+
+ ))} +
+
+
+)); + +const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language, lightTheme, darkTheme }: CodeComparisonProps) => { + const [isFullscreen, setIsFullscreen] = useState(false); + const [highlighter, setHighlighter] = useState(null); + + const toggleFullscreen = useCallback(() => { + setIsFullscreen(prev => !prev); + }, []); + + const { unifiedBlocks, hasChanges, isBinary, error } = useMemo(() => processChanges(beforeCode, afterCode), [beforeCode, afterCode]); + + useEffect(() => { + getHighlighter({ + themes: ['github-dark'], + langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx'] + }).then(setHighlighter); + }, []); + + if (isBinary || error) return renderContentWarning(isBinary ? 'binary' : 'error'); + + const renderDiffBlock = (block: DiffBlock, index?: number) => { + const key = index !== undefined ? `${block.lineNumber}-${index}` : block.lineNumber; + const bgColor = { + added: 'bg-green-500/20 border-l-4 border-green-500', + removed: 'bg-red-500/20 border-l-4 border-red-500', + unchanged: '' + }[block.type]; + + const highlightedCode = highlighter ? + highlighter.codeToHtml(block.content, { lang: language, theme: 'github-dark' }) : + block.content; + + return ( +
+
+ {block.lineNumber + 1} +
+
+ + {block.type === 'added' && '+'} + {block.type === 'removed' && '-'} + {block.type === 'unchanged' && ' '} + + ]*>/g, '').replace(/<\/?code[^>]*>/g, '') + }} + /> +
+
+ ); + }; + + return ( + +
+
+
+ {filename} + + {hasChanges ? ( + Modified + ) : ( + No Changes + )} + + +
+
+ {hasChanges ? ( +
+ {unifiedBlocks.map((block, index) => renderDiffBlock(block, index))} +
+ ) : ( + + )} +
+
+ + ); +}); + +const SideBySideComparison = memo(({ + beforeCode, + afterCode, + language, + filename, + lightTheme, + darkTheme, +}: CodeComparisonProps) => { + const [isFullscreen, setIsFullscreen] = useState(false); + const [highlighter, setHighlighter] = useState(null); + + const toggleFullscreen = useCallback(() => { + setIsFullscreen(prev => !prev); + }, []); + + const { beforeLines, afterLines, hasChanges, lineChanges, isBinary, error } = useMemo(() => processChanges(beforeCode, afterCode), [beforeCode, afterCode]); + + useEffect(() => { + getHighlighter({ + themes: ['github-dark'], + langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx'] + }).then(setHighlighter); + }, []); + + if (isBinary || error) return renderContentWarning(isBinary ? 'binary' : 'error'); + + const renderCode = (code: string) => { + if (!highlighter) return code; + const highlightedCode = highlighter.codeToHtml(code, { + lang: language, + theme: 'github-dark' + }); + return highlightedCode.replace(/<\/?pre[^>]*>/g, '').replace(/<\/?code[^>]*>/g, ''); + }; + + return ( + +
+
+
+ {filename} + + {hasChanges ? ( + Modified + ) : ( + No Changes + )} + + +
+
+ {hasChanges ? ( +
+
+
+ {beforeLines.map((line, index) => ( +
+
{index + 1}
+
+ + {lineChanges.before.has(index) ? '-' : ' '} + + +
+
+ ))} +
+
+
+ {afterLines.map((line, index) => ( +
+
{index + 1}
+
+ + {lineChanges.after.has(index) ? '+' : ' '} + + +
+
+ ))} +
+
+ ) : ( + + )} +
+
+ + ); +}); + +interface DiffViewProps { + fileHistory: Record; + setFileHistory: React.Dispatch>>; + diffViewMode: 'inline' | 'side'; + actionRunner: ActionRunner; +} + +export const DiffView = memo(({ fileHistory, setFileHistory, diffViewMode, actionRunner }: DiffViewProps) => { + const files = useStore(workbenchStore.files) as FileMap; + const selectedFile = useStore(workbenchStore.selectedFile); + const currentDocument = useStore(workbenchStore.currentDocument) as EditorDocument; + const unsavedFiles = useStore(workbenchStore.unsavedFiles); + + useEffect(() => { + if (selectedFile && currentDocument) { + const file = files[selectedFile]; + if (!file || !('content' in file)) return; + + const existingHistory = fileHistory[selectedFile]; + const currentContent = currentDocument.value; + + const relativePath = extractRelativePath(selectedFile); + const unifiedDiff = diffFiles( + relativePath, + existingHistory?.originalContent || file.content, + currentContent + ); + + if (unifiedDiff) { + const newChanges = diffLines( + existingHistory?.originalContent || file.content, + currentContent + ); + + const newHistory: FileHistory = { + originalContent: existingHistory?.originalContent || file.content, + lastModified: Date.now(), + changes: [ + ...(existingHistory?.changes || []), + ...newChanges + ].slice(-100), // Limitar histórico de mudanças + versions: [ + ...(existingHistory?.versions || []), + { + timestamp: Date.now(), + content: currentContent + } + ].slice(-10), // Manter apenas as 10 últimas versões + changeSource: 'auto-save' + }; + + setFileHistory(prev => ({ ...prev, [selectedFile]: newHistory })); + } + } + }, [selectedFile, currentDocument?.value, files, setFileHistory, unsavedFiles]); + + if (!selectedFile || !currentDocument) { + return ( +
+ Select a file to view differences +
+ ); + } + + const file = files[selectedFile]; + const originalContent = file && 'content' in file ? file.content : ''; + const currentContent = currentDocument.value; + + const history = fileHistory[selectedFile]; + const effectiveOriginalContent = history?.originalContent || originalContent; + const language = getLanguageFromExtension(selectedFile.split('.').pop() || ''); + + try { + return ( +
+ {diffViewMode === 'inline' ? ( + + ) : ( + + )} +
+ ); + } catch (error) { + console.error('DiffView render error:', error); + return ( +
+
+
+

Failed to render diff view

+
+
+ ); + } +}); diff --git a/app/components/workbench/Workbench.client.tsx b/app/components/workbench/Workbench.client.tsx index 5fdcda7595..04ab5597f6 100644 --- a/app/components/workbench/Workbench.client.tsx +++ b/app/components/workbench/Workbench.client.tsx @@ -1,8 +1,15 @@ import { useStore } from '@nanostores/react'; import { motion, type HTMLMotionProps, type Variants } from 'framer-motion'; import { computed } from 'nanostores'; -import { memo, useCallback, useEffect, useState } from 'react'; +import { memo, useCallback, useEffect, useState, useMemo } from 'react'; import { toast } from 'react-toastify'; +import { Popover, Transition } from '@headlessui/react'; +import { type Change } from 'diff'; +import { formatDistanceToNow as formatDistance } from 'date-fns'; +import { ActionRunner } from '~/lib/runtime/action-runner'; +import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension'; +import type { FileHistory } from '~/types/actions'; +import { DiffView } from './DiffView'; import { type OnChangeCallback as OnEditorChange, type OnScrollCallback as OnEditorScroll, @@ -18,10 +25,16 @@ import { EditorPanel } from './EditorPanel'; import { Preview } from './Preview'; import useViewport from '~/lib/hooks'; import { PushToGitHubDialog } from '~/components/@settings/tabs/connections/components/PushToGitHubDialog'; +import Cookies from 'js-cookie'; interface WorkspaceProps { chatStarted?: boolean; isStreaming?: boolean; + actionRunner: ActionRunner; + metadata?: { + gitUrl?: string; + }; + updateChatMestaData?: (metadata: any) => void; } const viewTransition = { ease: cubicEasingFn }; @@ -31,6 +44,10 @@ const sliderOptions: SliderOptions = { value: 'code', text: 'Code', }, + middle: { + value: 'diff', + text: 'Diff', + }, right: { value: 'preview', text: 'Preview', @@ -54,11 +71,171 @@ const workbenchVariants = { }, } satisfies Variants; -export const Workbench = memo(({ chatStarted, isStreaming }: WorkspaceProps) => { +const FileModifiedDropdown = memo(({ + fileHistory, + onSelectFile, + diffViewMode, + toggleDiffViewMode, +}: { + fileHistory: Record, + onSelectFile: (filePath: string) => void, + diffViewMode: 'inline' | 'side', + toggleDiffViewMode: () => void, +}) => { + const modifiedFiles = Object.entries(fileHistory); + const hasChanges = modifiedFiles.length > 0; + const [searchQuery, setSearchQuery] = useState(''); + + const filteredFiles = useMemo(() => { + return modifiedFiles.filter(([filePath]) => + filePath.toLowerCase().includes(searchQuery.toLowerCase()) + ); + }, [modifiedFiles, searchQuery]); + + return ( +
+ + {({ open }: { open: boolean }) => ( + <> + + File Changes + {hasChanges && ( + + {modifiedFiles.length} + + )} + + + +
+
+ setSearchQuery(e.target.value)} + className="w-full pl-8 pr-3 py-1.5 text-sm rounded-lg bg-bolt-elements-background-depth-1 border border-bolt-elements-borderColor focus:outline-none focus:ring-2 focus:ring-blue-500/50" + /> +
+
+
+
+ +
+ {filteredFiles.length > 0 ? ( + filteredFiles.map(([filePath, history]) => { + const extension = filePath.split('.').pop() || ''; + const language = getLanguageFromExtension(extension); + + return ( + + ); + }) + ) : ( +
+
+
+
+

+ {searchQuery ? 'No matching files' : 'No modified files'} +

+

+ {searchQuery ? 'Try another search' : 'Changes will appear here as you edit'} +

+
+ )} +
+
+ + {hasChanges && ( +
+ +
+ )} + + + + )} + + +
+ ); +}); + +export const Workbench = memo(({ + chatStarted, + isStreaming, + actionRunner, + metadata, + updateChatMestaData +}: WorkspaceProps) => { renderLogger.trace('Workbench'); const [isSyncing, setIsSyncing] = useState(false); const [isPushDialogOpen, setIsPushDialogOpen] = useState(false); + const [diffViewMode, setDiffViewMode] = useState<'inline' | 'side'>('inline'); + const [fileHistory, setFileHistory] = useState>({}); + + const modifiedFiles = Array.from(useStore(workbenchStore.unsavedFiles).keys()); const hasPreview = useStore(computed(workbenchStore.previews, (previews) => previews.length > 0)); const showWorkbench = useStore(workbenchStore.showWorkbench); @@ -121,6 +298,15 @@ export const Workbench = memo(({ chatStarted, isStreaming }: WorkspaceProps) => } }, []); + const handleSelectFile = useCallback((filePath: string) => { + workbenchStore.setSelectedFile(filePath); + workbenchStore.currentView.set('diff'); + }, []); + + const toggleDiffViewMode = useCallback(() => { + setDiffViewMode(prev => prev === 'inline' ? 'side' : 'inline'); + }, []); + return ( chatStarted && (
)} + {selectedView === 'diff' && ( + + )}
/> + + + @@ -215,14 +420,24 @@ export const Workbench = memo(({ chatStarted, isStreaming }: WorkspaceProps) => setIsPushDialogOpen(false)} - onPush={async (repoName, username, token, isPrivate) => { + onPush={async (repoName, username, token) => { try { - const repoUrl = await workbenchStore.pushToGitHub(repoName, undefined, username, token, isPrivate); + const commitMessage = prompt('Please enter a commit message:', 'Initial commit') || 'Initial commit'; + await workbenchStore.pushToGitHub(repoName, commitMessage, username, token); + const repoUrl = `https://github.com/${username}/${repoName}`; + + if (updateChatMestaData && !metadata?.gitUrl) { + updateChatMestaData({ + ...(metadata || {}), + gitUrl: repoUrl, + }); + } + return repoUrl; } catch (error) { console.error('Error pushing to GitHub:', error); toast.error('Failed to push to GitHub'); - throw error; // Rethrow to let PushToGitHubDialog handle the error state + throw error; } }} /> diff --git a/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts index 250dff7912..d61502867f 100644 --- a/app/lib/runtime/action-runner.ts +++ b/app/lib/runtime/action-runner.ts @@ -1,7 +1,7 @@ import type { WebContainer } from '@webcontainer/api'; -import { path } from '~/utils/path'; +import { path as nodePath } from '~/utils/path'; import { atom, map, type MapStore } from 'nanostores'; -import type { ActionAlert, BoltAction } from '~/types/actions'; +import type { ActionAlert, BoltAction, FileHistory } from '~/types/actions'; import { createScopedLogger } from '~/utils/logger'; import { unreachable } from '~/utils/unreachable'; import type { ActionCallbackData } from './message-parser'; @@ -276,9 +276,9 @@ export class ActionRunner { } const webcontainer = await this.#webcontainer; - const relativePath = path.relative(webcontainer.workdir, action.filePath); + const relativePath = nodePath.relative(webcontainer.workdir, action.filePath); - let folder = path.dirname(relativePath); + let folder = nodePath.dirname(relativePath); // remove trailing slashes folder = folder.replace(/\/+$/g, ''); @@ -304,4 +304,31 @@ export class ActionRunner { this.actions.setKey(id, { ...actions[id], ...newState }); } + + async getFileHistory(filePath: string): Promise { + try { + const webcontainer = await this.#webcontainer; + const historyPath = this.#getHistoryPath(filePath); + const content = await webcontainer.fs.readFile(historyPath, 'utf-8'); + return JSON.parse(content); + } catch (error) { + return null; + } + } + + async saveFileHistory(filePath: string, history: FileHistory) { + const webcontainer = await this.#webcontainer; + const historyPath = this.#getHistoryPath(filePath); + + await this.#runFileAction({ + type: 'file', + filePath: historyPath, + content: JSON.stringify(history), + changeSource: 'auto-save' + } as any); + } + + #getHistoryPath(filePath: string) { + return nodePath.join('.history', filePath); + } } diff --git a/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts index e410e768e7..84d38efa51 100644 --- a/app/lib/stores/workbench.ts +++ b/app/lib/stores/workbench.ts @@ -10,18 +10,16 @@ import { FilesStore, type FileMap } from './files'; import { PreviewsStore } from './previews'; import { TerminalStore } from './terminal'; import JSZip from 'jszip'; -import fileSaver from 'file-saver'; +import pkg from 'file-saver'; +const { saveAs } = pkg; import { Octokit, type RestEndpointMethodTypes } from '@octokit/rest'; -import { path } from '~/utils/path'; +import * as nodePath from 'node:path'; import { extractRelativePath } from '~/utils/diff'; import { description } from '~/lib/persistence'; import Cookies from 'js-cookie'; import { createSampler } from '~/utils/sampler'; import type { ActionAlert } from '~/types/actions'; -// Destructure saveAs from the CommonJS module -const { saveAs } = fileSaver; - export interface ArtifactState { id: string; title: string; @@ -34,7 +32,7 @@ export type ArtifactUpdateState = Pick; type Artifacts = MapStore>; -export type WorkbenchViewType = 'code' | 'preview'; +export type WorkbenchViewType = 'code' | 'diff' | 'preview'; export class WorkbenchStore { #previewsStore = new PreviewsStore(webcontainer); @@ -332,7 +330,7 @@ export class WorkbenchStore { if (data.action.type === 'file') { const wc = await webcontainer; - const fullPath = path.join(wc.workdir, data.action.filePath); + const fullPath = nodePath.join(wc.workdir, data.action.filePath); if (this.selectedFile.value !== fullPath) { this.setSelectedFile(fullPath); @@ -437,13 +435,7 @@ export class WorkbenchStore { return syncedFiles; } - async pushToGitHub( - repoName: string, - commitMessage?: string, - githubUsername?: string, - ghToken?: string, - isPrivate: boolean = false, - ) { + async pushToGitHub(repoName: string, commitMessage?: string, githubUsername?: string, ghToken?: string) { try { // Use cookies if username and token are not provided const githubToken = ghToken || Cookies.get('githubToken'); @@ -467,7 +459,7 @@ export class WorkbenchStore { // Repository doesn't exist, so create a new one const { data: newRepo } = await octokit.repos.createForAuthenticatedUser({ name: repoName, - private: isPrivate, + private: false, auto_init: true, }); repo = newRepo; @@ -545,7 +537,7 @@ export class WorkbenchStore { sha: newCommit.sha, }); - return repo.html_url; // Return the URL instead of showing alert + alert(`Repository created and code pushed: ${repo.html_url}`); } catch (error) { console.error('Error pushing to GitHub:', error); throw error; // Rethrow the error for further handling diff --git a/app/styles/diff-view.css b/app/styles/diff-view.css new file mode 100644 index 0000000000..e99e8be7a3 --- /dev/null +++ b/app/styles/diff-view.css @@ -0,0 +1,72 @@ +.diff-panel-content { + scrollbar-width: thin; + scrollbar-color: rgba(155, 155, 155, 0.5) transparent; +} + +.diff-panel-content::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +.diff-panel-content::-webkit-scrollbar-track { + background: transparent; +} + +.diff-panel-content::-webkit-scrollbar-thumb { + background-color: rgba(155, 155, 155, 0.5); + border-radius: 4px; + border: 2px solid transparent; +} + +.diff-panel-content::-webkit-scrollbar-thumb:hover { + background-color: rgba(155, 155, 155, 0.7); +} + +/* Hide scrollbar for the left panel when not hovered */ +.diff-panel:not(:hover) .diff-panel-content::-webkit-scrollbar { + display: none; +} + +.diff-panel:not(:hover) .diff-panel-content { + scrollbar-width: none; +} + +/* Estilos para as linhas de diff */ +.diff-block-added { + @apply bg-green-500/20 border-l-4 border-green-500; +} + +.diff-block-removed { + @apply bg-red-500/20 border-l-4 border-red-500; +} + +/* Melhorar contraste para mudanças */ +.diff-panel-content .group:hover .diff-block-added { + @apply bg-green-500/30; +} + +.diff-panel-content .group:hover .diff-block-removed { + @apply bg-red-500/30; +} + +/* Estilos unificados para ambas as visualizações */ +.diff-line { + @apply flex group min-w-fit transition-colors duration-150; +} + +.diff-line-number { + @apply w-12 shrink-0 pl-2 py-0.5 text-left font-mono text-bolt-elements-textTertiary border-r border-bolt-elements-borderColor bg-bolt-elements-background-depth-1; +} + +.diff-line-content { + @apply px-4 py-0.5 font-mono whitespace-pre flex-1 group-hover:bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary; +} + +/* Cores específicas para adições/remoções */ +.diff-added { + @apply bg-green-500/20 border-l-4 border-green-500; +} + +.diff-removed { + @apply bg-red-500/20 border-l-4 border-red-500; +} \ No newline at end of file diff --git a/app/types/actions.ts b/app/types/actions.ts index 3543ac7ec8..cf13abde61 100644 --- a/app/types/actions.ts +++ b/app/types/actions.ts @@ -1,3 +1,5 @@ +import type { Change } from 'diff'; + export type ActionType = 'file' | 'shell'; export interface BaseAction { @@ -28,3 +30,15 @@ export interface ActionAlert { content: string; source?: 'terminal' | 'preview'; // Add source to differentiate between terminal and preview errors } + +export interface FileHistory { + originalContent: string; + lastModified: number; + changes: Change[]; + versions: { + timestamp: number; + content: string; + }[]; + // Novo campo para rastrear a origem das mudanças + changeSource?: 'user' | 'auto-save' | 'external'; +} diff --git a/app/utils/getLanguageFromExtension.ts b/app/utils/getLanguageFromExtension.ts new file mode 100644 index 0000000000..1dd5d0fd1b --- /dev/null +++ b/app/utils/getLanguageFromExtension.ts @@ -0,0 +1,24 @@ +export const getLanguageFromExtension = (ext: string): string => { + const map: Record = { + js: "javascript", + jsx: "jsx", + ts: "typescript", + tsx: "tsx", + json: "json", + html: "html", + css: "css", + py: "python", + java: "java", + rb: "ruby", + cpp: "cpp", + c: "c", + cs: "csharp", + go: "go", + rs: "rust", + php: "php", + swift: "swift", + md: "plaintext", + sh: "bash", + }; + return map[ext] || "typescript"; +}; \ No newline at end of file diff --git a/package.json b/package.json index 6bbc999a2d..f797859db1 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,8 @@ "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-tooltip": "^1.1.4", + "lucide-react": "^0.474.0", + "next-themes": "^0.4.4", "@remix-run/cloudflare": "^2.15.2", "@remix-run/cloudflare-pages": "^2.15.2", "@remix-run/node": "^2.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1bbe2c760d..d6b355bffb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,7 +82,7 @@ importers: version: 6.36.2 '@headlessui/react': specifier: ^2.2.0 - version: 2.2.0(react-dom@18.3.1)(react@18.3.1) + version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@iconify-json/svg-spinners': specifier: ^1.2.1 version: 1.2.2 @@ -103,43 +103,43 @@ importers: version: 0.0.5(zod@3.24.1) '@phosphor-icons/react': specifier: ^2.1.7 - version: 2.1.7(react-dom@18.3.1)(react@18.3.1) + version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-context-menu': specifier: ^2.2.2 - version: 2.2.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.6 - version: 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.1 - version: 2.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 2.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.2 - version: 1.2.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.0 - version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.1.1 - version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.2 - version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.4 - version: 1.1.8(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@remix-run/cloudflare': specifier: ^2.15.2 version: 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) @@ -151,7 +151,7 @@ importers: version: 2.15.3(typescript@5.7.3) '@remix-run/react': specifier: ^2.15.2 - version: 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) + version: 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@types/react-beautiful-dnd': specifier: ^13.1.8 version: 13.1.8 @@ -202,7 +202,7 @@ importers: version: 2.0.5 framer-motion: specifier: ^11.12.0 - version: 11.18.2(react-dom@18.3.1)(react@18.3.1) + version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ignore: specifier: ^6.0.2 version: 6.0.2 @@ -227,9 +227,15 @@ importers: jszip: specifier: ^3.10.1 version: 3.10.1 + lucide-react: + specifier: ^0.474.0 + version: 0.474.0(react@18.3.1) nanostores: specifier: ^0.10.3 version: 0.10.3 + next-themes: + specifier: ^0.4.4 + version: 0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ollama-ai-provider: specifier: ^0.15.2 version: 0.15.2(zod@3.24.1) @@ -241,13 +247,13 @@ importers: version: 18.3.1 react-beautiful-dnd: specifier: ^13.1.1 - version: 13.1.1(react-dom@18.3.1)(react@18.3.1) + version: 13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-chartjs-2: specifier: ^5.3.0 version: 5.3.0(chart.js@4.4.7)(react@18.3.1) react-dnd: specifier: ^16.0.1 - version: 16.0.1(@types/react@18.3.18)(react@18.3.1) + version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.1)(@types/react@18.3.18)(react@18.3.1) react-dnd-html5-backend: specifier: ^16.0.1 version: 16.0.1 @@ -256,7 +262,7 @@ importers: version: 18.3.1(react@18.3.1) react-hotkeys-hook: specifier: ^4.6.1 - version: 4.6.1(react-dom@18.3.1)(react@18.3.1) + version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-icons: specifier: ^5.4.0 version: 5.4.0(react@18.3.1) @@ -265,10 +271,10 @@ importers: version: 9.0.3(@types/react@18.3.18)(react@18.3.1) react-resizable-panels: specifier: ^2.1.7 - version: 2.1.7(react-dom@18.3.1)(react@18.3.1) + version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-toastify: specifier: ^10.0.6 - version: 10.0.6(react-dom@18.3.1)(react@18.3.1) + version: 10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -280,10 +286,10 @@ importers: version: 4.0.1 remix-island: specifier: ^0.2.0 - version: 0.2.0(@remix-run/react@2.15.3)(@remix-run/server-runtime@2.15.3)(react-dom@18.3.1)(react@18.3.1) + version: 0.2.0(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/server-runtime@2.15.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remix-utils: specifier: ^7.7.0 - version: 7.7.0(@remix-run/cloudflare@2.15.3)(@remix-run/node@2.15.3)(@remix-run/react@2.15.3)(react@18.3.1)(zod@3.24.1) + version: 7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1) shiki: specifier: ^1.24.0 version: 1.29.2 @@ -295,11 +301,11 @@ importers: version: 5.0.0 zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@18.3.18)(react@18.3.1) + version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) devDependencies: '@blitz/eslint-plugin': specifier: 0.1.0 - version: 0.1.0(prettier@3.5.0)(typescript@5.7.3) + version: 0.1.0(jiti@1.21.7)(prettier@3.5.0)(typescript@5.7.3) '@cloudflare/workers-types': specifier: ^4.20241127.0 version: 4.20250204.0 @@ -311,7 +317,7 @@ importers: version: 2.0.0 '@remix-run/dev': specifier: ^2.15.2 - version: 2.15.3(@remix-run/react@2.15.3)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14)(wrangler@3.108.0) + version: 2.15.3(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@22.13.1)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))(wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0)) '@types/diff': specifier: ^5.2.3 version: 5.2.3 @@ -362,22 +368,22 @@ importers: version: 11.0.5 unocss: specifier: ^0.61.9 - version: 0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14) + version: 0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) vite: specifier: ^5.4.11 - version: 5.4.14(sass-embedded@1.83.4) + version: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@3.29.5)(vite@5.4.14) + version: 0.22.0(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) vite-plugin-optimize-css-modules: specifier: ^1.1.0 - version: 1.2.0(vite@5.4.14) + version: 1.2.0(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.7.3)(vite@5.4.14) + version: 4.3.2(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) vitest: specifier: ^2.1.7 - version: 2.1.9(sass-embedded@1.83.4) + version: 2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4) wrangler: specifier: ^3.91.0 version: 3.108.0(@cloudflare/workers-types@4.20250204.0) @@ -4536,6 +4542,11 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lucide-react@0.474.0: + resolution: {integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -4986,6 +4997,12 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + next-themes@0.4.4: + resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -6733,6 +6750,7 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 + optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@1.0.20(zod@3.24.1)': @@ -6741,6 +6759,7 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 + optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@1.0.9(zod@3.24.1)': @@ -6749,6 +6768,7 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 + optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@2.0.5(zod@3.24.1)': @@ -6757,6 +6777,7 @@ snapshots: eventsource-parser: 3.0.0 nanoid: 3.3.8 secure-json-parse: 2.7.0 + optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@2.1.6(zod@3.24.1)': @@ -6765,6 +6786,7 @@ snapshots: eventsource-parser: 3.0.0 nanoid: 3.3.8 secure-json-parse: 2.7.0 + optionalDependencies: zod: 3.24.1 '@ai-sdk/provider@0.0.12': @@ -6791,17 +6813,19 @@ snapshots: dependencies: '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) '@ai-sdk/ui-utils': 1.1.11(zod@3.24.1) - react: 18.3.1 swr: 2.3.2(react@18.3.1) throttleit: 2.1.0 + optionalDependencies: + react: 18.3.1 zod: 3.24.1 '@ai-sdk/ui-utils@1.1.11(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.7 '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) - zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) + optionalDependencies: + zod: 3.24.1 '@ampproject/remapping@2.3.0': dependencies: @@ -7363,19 +7387,19 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@blitz/eslint-plugin@0.1.0(prettier@3.5.0)(typescript@5.7.3)': + '@blitz/eslint-plugin@0.1.0(jiti@1.21.7)(prettier@3.5.0)(typescript@5.7.3)': dependencies: - '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0)(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) common-tags: 1.8.2 - eslint: 9.20.1 - eslint-config-prettier: 9.1.0(eslint@9.20.1) - eslint-plugin-jsonc: 2.19.1(eslint@9.20.1) - eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0)(eslint@9.20.1)(prettier@3.5.0) + eslint: 9.20.1(jiti@1.21.7) + eslint-config-prettier: 9.1.0(eslint@9.20.1(jiti@1.21.7)) + eslint-plugin-jsonc: 2.19.1(eslint@9.20.1(jiti@1.21.7)) + eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.0) globals: 15.14.0 - typescript-eslint: 8.24.0(eslint@9.20.1)(typescript@5.7.3) + typescript-eslint: 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) transitivePeerDependencies: - '@eslint/json' - '@types/eslint' @@ -7832,9 +7856,9 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@1.21.7))': dependencies: - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -7889,15 +7913,15 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.28(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@floating-ui/utils': 0.2.9 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7905,12 +7929,12 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@headlessui/react@2.2.0(react-dom@18.3.1)(react@18.3.1)': + '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react': 0.26.28(react-dom@18.3.1)(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1)(react@18.3.1) - '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8271,7 +8295,7 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@phosphor-icons/react@2.1.7(react-dom@18.3.1)(react@18.3.1)': + '@phosphor-icons/react@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8287,400 +8311,436 @@ snapshots: '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-direction@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - - '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + + '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-size@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/rect@1.1.0': {} - '@react-aria/focus@3.19.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/focus@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1)(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1)(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-types/shared': 3.27.0(react@18.3.1) '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/interactions@3.23.0(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/interactions@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1)(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-types/shared': 3.27.0(react@18.3.1) '@swc/helpers': 0.5.15 react: 18.3.1 @@ -8691,7 +8751,7 @@ snapshots: '@swc/helpers': 0.5.15 react: 18.3.1 - '@react-aria/utils@3.27.0(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/utils@3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) '@react-stately/utils': 3.10.5(react@18.3.1) @@ -8720,6 +8780,7 @@ snapshots: dependencies: '@cloudflare/workers-types': 4.20250204.0 '@remix-run/cloudflare': 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 '@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3)': @@ -8727,9 +8788,10 @@ snapshots: '@cloudflare/kv-asset-handler': 0.1.3 '@cloudflare/workers-types': 4.20250204.0 '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 - '@remix-run/dev@2.15.3(@remix-run/react@2.15.3)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14)(wrangler@3.108.0)': + '@remix-run/dev@2.15.3(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@22.13.1)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))(wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0))': dependencies: '@babel/core': 7.26.8 '@babel/generator': 7.26.8 @@ -8742,11 +8804,11 @@ snapshots: '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 '@remix-run/node': 2.15.3(typescript@5.7.3) - '@remix-run/react': 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) + '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/router': 1.22.0 '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(sass-embedded@1.83.4) + '@vanilla-extract/integration': 6.5.0(@types/node@22.13.1)(sass-embedded@1.83.4) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -8784,12 +8846,13 @@ snapshots: set-cookie-parser: 2.7.1 tar-fs: 2.1.2 tsconfig-paths: 4.2.0 - typescript: 5.7.3 valibot: 0.41.0(typescript@5.7.3) - vite: 5.4.14(sass-embedded@1.83.4) - vite-node: 1.6.1(sass-embedded@1.83.4) - wrangler: 3.108.0(@cloudflare/workers-types@4.20250204.0) + vite-node: 1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4) ws: 7.5.10 + optionalDependencies: + typescript: 5.7.3 + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + wrangler: 3.108.0(@cloudflare/workers-types@4.20250204.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -8814,18 +8877,20 @@ snapshots: cookie-signature: 1.2.2 source-map-support: 0.5.21 stream-slice: 0.1.2 - typescript: 5.7.3 undici: 6.21.1 + optionalDependencies: + typescript: 5.7.3 - '@remix-run/react@2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)': + '@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': dependencies: '@remix-run/router': 1.22.0 '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.29.0(react@18.3.1) - react-router-dom: 6.29.0(react-dom@18.3.1)(react@18.3.1) + react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) turbo-stream: 2.4.0 + optionalDependencies: typescript: 5.7.3 '@remix-run/router@1.22.0': {} @@ -8839,6 +8904,7 @@ snapshots: set-cookie-parser: 2.7.1 source-map: 0.7.4 turbo-stream: 2.4.0 + optionalDependencies: typescript: 5.7.3 '@remix-run/web-blob@3.1.0': @@ -8874,6 +8940,7 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@3.29.5) estree-walker: 2.0.2 magic-string: 0.30.17 + optionalDependencies: rollup: 3.29.5 '@rollup/pluginutils@5.1.4(rollup@3.29.5)': @@ -8881,6 +8948,7 @@ snapshots: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 + optionalDependencies: rollup: 3.29.5 '@rollup/rollup-android-arm-eabi@4.34.6': @@ -9272,10 +9340,10 @@ snapshots: '@smithy/util-buffer-from': 4.0.0 tslib: 2.8.1 - '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.20.1)(typescript@5.7.3)': + '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': dependencies: - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.20.1(jiti@1.21.7) eslint-visitor-keys: 4.2.0 espree: 10.3.0 transitivePeerDependencies: @@ -9286,7 +9354,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@tanstack/react-virtual@3.13.0(react-dom@18.3.1)(react@18.3.1)': + '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/virtual-core': 3.13.0 react: 18.3.1 @@ -9388,15 +9456,15 @@ snapshots: '@types/uuid@9.0.8': {} - '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0)(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.24.0 - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -9405,14 +9473,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.24.0 '@typescript-eslint/types': 8.24.0 '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.24.0 debug: 4.4.0 - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -9422,12 +9490,12 @@ snapshots: '@typescript-eslint/types': 8.24.0 '@typescript-eslint/visitor-keys': 8.24.0 - '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -9449,13 +9517,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.0(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.24.0 '@typescript-eslint/types': 8.24.0 '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -9481,12 +9549,13 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@0.61.9(rollup@3.29.5)(vite@5.4.14)': + '@unocss/astro@0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': dependencies: '@unocss/core': 0.61.9 '@unocss/reset': 0.61.9 - '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14) - vite: 5.4.14(sass-embedded@1.83.4) + '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + optionalDependencies: + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - rollup - supports-color @@ -9623,7 +9692,7 @@ snapshots: dependencies: '@unocss/core': 0.61.9 - '@unocss/vite@0.61.9(rollup@3.29.5)(vite@5.4.14)': + '@unocss/vite@0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': dependencies: '@ampproject/remapping': 2.3.0 '@rollup/pluginutils': 5.1.4(rollup@3.29.5) @@ -9635,7 +9704,7 @@ snapshots: chokidar: 3.6.0 fast-glob: 3.3.3 magic-string: 0.30.17 - vite: 5.4.14(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - rollup - supports-color @@ -9663,7 +9732,7 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(sass-embedded@1.83.4)': + '@vanilla-extract/integration@6.5.0(@types/node@22.13.1)(sass-embedded@1.83.4)': dependencies: '@babel/core': 7.26.8 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.8) @@ -9676,8 +9745,8 @@ snapshots: lodash: 4.17.21 mlly: 1.7.4 outdent: 0.8.0 - vite: 5.4.14(sass-embedded@1.83.4) - vite-node: 1.6.1(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite-node: 1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -9699,12 +9768,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(vite@5.4.14)': + '@vitest/mocker@2.1.9(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 - vite: 5.4.14(sass-embedded@1.83.4) + optionalDependencies: + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) '@vitest/pretty-format@2.1.9': dependencies: @@ -9782,6 +9852,7 @@ snapshots: '@ai-sdk/ui-utils': 1.1.11(zod@3.24.1) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 + optionalDependencies: react: 18.3.1 zod: 3.24.1 @@ -10522,27 +10593,27 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.6.4(eslint@9.20.1): + eslint-compat-utils@0.6.4(eslint@9.20.1(jiti@1.21.7)): dependencies: - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) semver: 7.7.1 - eslint-config-prettier@9.1.0(eslint@9.20.1): + eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)): dependencies: - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) - eslint-json-compat-utils@0.2.1(eslint@9.20.1)(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.20.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.20.1 + eslint: 9.20.1(jiti@1.21.7) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-plugin-jsonc@2.19.1(eslint@9.20.1): + eslint-plugin-jsonc@2.19.1(eslint@9.20.1(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) - eslint: 9.20.1 - eslint-compat-utils: 0.6.4(eslint@9.20.1) - eslint-json-compat-utils: 0.2.1(eslint@9.20.1)(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) + eslint: 9.20.1(jiti@1.21.7) + eslint-compat-utils: 0.6.4(eslint@9.20.1(jiti@1.21.7)) + eslint-json-compat-utils: 0.2.1(eslint@9.20.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -10551,13 +10622,14 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0)(eslint@9.20.1)(prettier@3.5.0): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.0): dependencies: - eslint: 9.20.1 - eslint-config-prettier: 9.1.0(eslint@9.20.1) + eslint: 9.20.1(jiti@1.21.7) prettier: 3.5.0 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@9.20.1(jiti@1.21.7)) eslint-scope@8.2.0: dependencies: @@ -10568,9 +10640,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.20.1: + eslint@9.20.1(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.2 '@eslint/core': 0.11.0 @@ -10604,6 +10676,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 transitivePeerDependencies: - supports-color @@ -10832,13 +10906,14 @@ snapshots: forwarded@0.2.0: {} - framer-motion@11.18.2(react-dom@18.3.1)(react@18.3.1): + framer-motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 11.18.1 motion-utils: 11.18.1 + tslib: 2.8.1 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.8.1 fresh@0.5.2: {} @@ -11429,6 +11504,10 @@ snapshots: lru-cache@7.18.3: {} + lucide-react@0.474.0(react@18.3.1): + dependencies: + react: 18.3.1 + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 @@ -12258,6 +12337,11 @@ snapshots: negotiator@0.6.3: {} + next-themes@0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + node-domexception@1.0.0: {} node-fetch-native@1.6.6: {} @@ -12366,6 +12450,7 @@ snapshots: '@ai-sdk/provider': 0.0.24 '@ai-sdk/provider-utils': 1.0.20(zod@3.24.1) partial-json: 0.1.7 + optionalDependencies: zod: 3.24.1 on-finished@2.4.1: @@ -12543,8 +12628,9 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.2): dependencies: lilconfig: 3.1.3 - postcss: 8.5.2 yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.2 postcss-modules-extract-imports@3.1.0(postcss@8.5.2): dependencies: @@ -12700,7 +12786,7 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-beautiful-dnd@13.1.1(react-dom@18.3.1)(react@18.3.1): + react-beautiful-dnd@13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 css-box-model: 1.2.1 @@ -12708,7 +12794,7 @@ snapshots: raf-schd: 4.0.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux: 7.2.9(react-dom@18.3.1)(react@18.3.1) + react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) redux: 4.2.1 use-memo-one: 1.1.3(react@18.3.1) transitivePeerDependencies: @@ -12723,15 +12809,18 @@ snapshots: dependencies: dnd-core: 16.0.1 - react-dnd@16.0.1(@types/react@18.3.18)(react@18.3.1): + react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.1)(@types/react@18.3.18)(react@18.3.1): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 - '@types/react': 18.3.18 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 react: 18.3.1 + optionalDependencies: + '@types/hoist-non-react-statics': 3.3.6 + '@types/node': 22.13.1 + '@types/react': 18.3.18 react-dom@18.3.1(react@18.3.1): dependencies: @@ -12739,7 +12828,7 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-hotkeys-hook@4.6.1(react-dom@18.3.1)(react@18.3.1): + react-hotkeys-hook@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -12769,7 +12858,7 @@ snapshots: transitivePeerDependencies: - supports-color - react-redux@7.2.9(react-dom@18.3.1)(react@18.3.1): + react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 '@types/react-redux': 7.1.34 @@ -12777,34 +12866,37 @@ snapshots: loose-envify: 1.4.0 prop-types: 15.8.1 react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) react-is: 17.0.2 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 - react-resizable-panels@2.1.7(react-dom@18.3.1)(react@18.3.1): + react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom@6.29.0(react-dom@18.3.1)(react@18.3.1): + react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.22.0 react: 18.3.1 @@ -12818,12 +12910,13 @@ snapshots: react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 - react-toastify@10.0.6(react-dom@18.3.1)(react@18.3.1): + react-toastify@10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: clsx: 2.1.1 react: 18.3.1 @@ -12954,20 +13047,22 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - remix-island@0.2.0(@remix-run/react@2.15.3)(@remix-run/server-runtime@2.15.3)(react-dom@18.3.1)(react@18.3.1): + remix-island@0.2.0(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/server-runtime@2.15.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/react': 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) + '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - remix-utils@7.7.0(@remix-run/cloudflare@2.15.3)(@remix-run/node@2.15.3)(@remix-run/react@2.15.3)(react@18.3.1)(zod@3.24.1): + remix-utils@7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1): dependencies: + type-fest: 4.34.1 + optionalDependencies: '@remix-run/cloudflare': 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) '@remix-run/node': 2.15.3(typescript@5.7.3) - '@remix-run/react': 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) + '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@remix-run/router': 1.22.0 react: 18.3.1 - type-fest: 4.34.1 zod: 3.24.1 require-like@0.1.2: {} @@ -13553,7 +13648,7 @@ snapshots: typescript: 5.7.3 tsconfck@3.1.5(typescript@5.7.3): - dependencies: + optionalDependencies: typescript: 5.7.3 tsconfig-paths@4.2.0: @@ -13586,12 +13681,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.24.0(eslint@9.20.1)(typescript@5.7.3): + typescript-eslint@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0)(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.20.1(jiti@1.21.7) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -13713,9 +13808,9 @@ snapshots: universalify@2.0.1: {} - unocss@0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14): + unocss@0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): dependencies: - '@unocss/astro': 0.61.9(rollup@3.29.5)(vite@5.4.14) + '@unocss/astro': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) '@unocss/cli': 0.61.9(rollup@3.29.5) '@unocss/core': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9 @@ -13734,8 +13829,9 @@ snapshots: '@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-directives': 0.61.9 '@unocss/transformer-variant-group': 0.61.9 - '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14) - vite: 5.4.14(sass-embedded@1.83.4) + '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + optionalDependencies: + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - postcss - rollup @@ -13760,9 +13856,10 @@ snapshots: use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 use-memo-one@1.1.3(react@18.3.1): dependencies: @@ -13770,10 +13867,11 @@ snapshots: use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 use-sync-external-store@1.4.0(react@18.3.1): dependencies: @@ -13806,7 +13904,7 @@ snapshots: sade: 1.8.1 valibot@0.41.0(typescript@5.7.3): - dependencies: + optionalDependencies: typescript: 5.7.3 validate-npm-package-license@3.0.4: @@ -13849,13 +13947,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.1(sass-embedded@1.83.4): + vite-node@1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4): dependencies: cac: 6.7.14 debug: 4.4.0 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.14(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' - less @@ -13867,13 +13965,13 @@ snapshots: - supports-color - terser - vite-node@2.1.9(sass-embedded@1.83.4): + vite-node@2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 1.1.2 - vite: 5.4.14(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' - less @@ -13885,41 +13983,43 @@ snapshots: - supports-color - terser - vite-plugin-node-polyfills@0.22.0(rollup@3.29.5)(vite@5.4.14): + vite-plugin-node-polyfills@0.22.0(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@3.29.5) node-stdlib-browser: 1.3.1 - vite: 5.4.14(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - rollup - vite-plugin-optimize-css-modules@1.2.0(vite@5.4.14): + vite-plugin-optimize-css-modules@1.2.0(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): dependencies: - vite: 5.4.14(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.4.14): + vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) - vite: 5.4.14(sass-embedded@1.83.4) + optionalDependencies: + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color - typescript - vite@5.4.14(sass-embedded@1.83.4): + vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4): dependencies: esbuild: 0.21.5 postcss: 8.5.2 rollup: 4.34.6 - sass-embedded: 1.83.4 optionalDependencies: + '@types/node': 22.13.1 fsevents: 2.3.3 + sass-embedded: 1.83.4 - vitest@2.1.9(sass-embedded@1.83.4): + vitest@2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.14) + '@vitest/mocker': 2.1.9(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -13935,9 +14035,11 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.14(sass-embedded@1.83.4) - vite-node: 2.1.9(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite-node: 2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4) why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.13.1 transitivePeerDependencies: - less - lightningcss @@ -14002,7 +14104,6 @@ snapshots: wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/workers-types': 4.20250204.0 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) blake3-wasm: 2.1.5 @@ -14012,6 +14113,7 @@ snapshots: unenv: 2.0.0-rc.1 workerd: 1.20250204.0 optionalDependencies: + '@cloudflare/workers-types': 4.20250204.0 fsevents: 2.3.3 sharp: 0.33.5 transitivePeerDependencies: @@ -14060,9 +14162,10 @@ snapshots: zod@3.24.1: {} - zustand@5.0.3(@types/react@18.3.18)(react@18.3.1): - dependencies: + zustand@5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + optionalDependencies: '@types/react': 18.3.18 react: 18.3.1 + use-sync-external-store: 1.4.0(react@18.3.1) zwitch@2.0.4: {} diff --git a/vite.config.ts b/vite.config.ts index 01fb3b2e6a..70908a9279 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -89,6 +89,7 @@ export default defineConfig((config) => { __PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies), __PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies), __PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies), + 'module': {}, }, build: { target: 'esnext', From bffb8a2a90b8aecae81269ac2e89b37f900516d6 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Fri, 21 Feb 2025 15:01:09 +0000 Subject: [PATCH 4/4] Revert "Merge pull request #1335 from Toddyclipsgg/diff-view-v2" This reverts commit 871aefbe83c31660b32b53b63772ebba33ed7954, reversing changes made to 8c72ed76b3315d8b9be77976769567bd4c41512e. --- .github/actions/setup-and-build/action.yaml | 4 - .tool-versions | 2 + README.md | 7 +- app/components/chat/BaseChat.tsx | 76 +- app/components/ui/Slider.tsx | 22 +- app/components/workbench/DiffView.tsx | 510 ------------- app/components/workbench/Workbench.client.tsx | 233 +----- app/lib/runtime/action-runner.ts | 35 +- app/lib/stores/workbench.ts | 24 +- app/styles/diff-view.css | 72 -- app/types/actions.ts | 14 - app/utils/getLanguageFromExtension.ts | 24 - package.json | 2 - pnpm-lock.yaml | 703 ++++++++---------- vite.config.ts | 1 - wrangler.toml | 6 + 16 files changed, 381 insertions(+), 1354 deletions(-) create mode 100644 .tool-versions delete mode 100644 app/components/workbench/DiffView.tsx delete mode 100644 app/styles/diff-view.css delete mode 100644 app/utils/getLanguageFromExtension.ts create mode 100644 wrangler.toml diff --git a/.github/actions/setup-and-build/action.yaml b/.github/actions/setup-and-build/action.yaml index b4f27b7364..b27bc6fb8e 100644 --- a/.github/actions/setup-and-build/action.yaml +++ b/.github/actions/setup-and-build/action.yaml @@ -30,7 +30,3 @@ runs: run: | pnpm install pnpm run build - - - name: Create history directory - shell: bash - run: mkdir -p .history diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000000..427253d38b --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +nodejs 20.15.1 +pnpm 9.4.0 diff --git a/README.md b/README.md index 3071fcee02..0a4e77e0e7 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,12 @@ Welcome to bolt.diy, the official open source version of Bolt.new (previously known as oTToDev and bolt.new ANY LLM), which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK! See the instructions below for running this locally and extending it to include more models. ------ +--- + Check the [bolt.diy Docs](https://stackblitz-labs.github.io/bolt.diy/) for more offical installation instructions and more informations. ------ +--- + Also [this pinned post in our community](https://thinktank.ottomator.ai/t/videos-tutorial-helpful-content/3243) has a bunch of incredible resources for running and deploying bolt.diy yourself! We have also launched an experimental agent called the "bolt.diy Expert" that can answer common questions about bolt.diy. Find it here on the [oTTomator Live Agent Studio](https://studio.ottomator.ai/). @@ -79,7 +81,6 @@ project, please check the [project management guide](./PROJECT.md) to get starte - ✅ Add Starter Template Options (@thecodacus) - ✅ Perplexity Integration (@meetpateltech) - ✅ AWS Bedrock Integration (@kunjabijukchhe) -- ✅ Add a "Diff View" to see the changes (@toddyclipsgg) - ⬜ **HIGH PRIORITY** - Prevent bolt from rewriting files as often (file locking and diffs) - ⬜ **HIGH PRIORITY** - Better prompting for smaller LLMs (code window sometimes doesn't start) - ⬜ **HIGH PRIORITY** - Run agents in the backend as opposed to a single model call diff --git a/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx index f38a5ccfec..ff1f4184ae 100644 --- a/app/components/chat/BaseChat.tsx +++ b/app/components/chat/BaseChat.tsx @@ -34,7 +34,6 @@ import ChatAlert from './ChatAlert'; import type { ModelInfo } from '~/lib/modules/llm/types'; import ProgressCompilation from './ProgressCompilation'; import type { ProgressAnnotation } from '~/types/context'; -import type { ActionRunner } from '~/lib/runtime/action-runner'; import { LOCAL_PROVIDERS } from '~/lib/stores/settings'; const TEXTAREA_MIN_HEIGHT = 76; @@ -69,7 +68,6 @@ interface BaseChatProps { actionAlert?: ActionAlert; clearAlert?: () => void; data?: JSONValue[] | undefined; - actionRunner?: ActionRunner; } export const BaseChat = React.forwardRef( @@ -104,7 +102,6 @@ export const BaseChat = React.forwardRef( actionAlert, clearAlert, data, - actionRunner, }, ref, ) => { @@ -307,7 +304,7 @@ export const BaseChat = React.forwardRef( data-chat-visible={showChat} > {() => } -
+
{!chatStarted && (
@@ -321,39 +318,40 @@ export const BaseChat = React.forwardRef( )}
{() => { return chatStarted ? ( - +
+ +
) : null; }}
-
- {actionAlert && ( - clearAlert?.()} - postMessage={(message) => { - sendMessage?.({} as any, message); - clearAlert?.(); - }} - /> - )} -
+ {actionAlert && ( + clearAlert?.()} + postMessage={(message) => { + sendMessage?.({} as any, message); + clearAlert?.(); + }} + /> + )} {progressAnnotations && }
(
-
- {!chatStarted && ( + {!chatStarted && ( +
- {ImportButtons(importChat)} - +
+ {ImportButtons(importChat)} + +
- )} - {!chatStarted && - ExamplePrompts((event, messageInput) => { + + {ExamplePrompts((event, messageInput) => { if (isStreaming) { handleStop?.(); return; @@ -603,18 +602,11 @@ export const BaseChat = React.forwardRef( handleSendMessage?.(event, messageInput); })} - {!chatStarted && } -
-
- - {() => ( - + +
)} - +
+ {() => }
); diff --git a/app/components/ui/Slider.tsx b/app/components/ui/Slider.tsx index d5e9b00096..f332a6af2d 100644 --- a/app/components/ui/Slider.tsx +++ b/app/components/ui/Slider.tsx @@ -9,11 +9,10 @@ interface SliderOption { text: string; } -export type SliderOptions = { - left: { value: T; text: string }; - middle?: { value: T; text: string }; - right: { value: T; text: string }; -}; +export interface SliderOptions { + left: SliderOption; + right: SliderOption; +} interface SliderProps { selected: T; @@ -22,23 +21,14 @@ interface SliderProps { } export const Slider = genericMemo(({ selected, options, setSelected }: SliderProps) => { - const hasMiddle = !!options.middle; - const isLeftSelected = hasMiddle ? selected === options.left.value : selected === options.left.value; - const isMiddleSelected = hasMiddle && options.middle ? selected === options.middle.value : false; + const isLeftSelected = selected === options.left.value; return (
setSelected?.(options.left.value)}> {options.left.text} - - {options.middle && ( - setSelected?.(options.middle!.value)}> - {options.middle.text} - - )} - - setSelected?.(options.right.value)}> + setSelected?.(options.right.value)}> {options.right.text}
diff --git a/app/components/workbench/DiffView.tsx b/app/components/workbench/DiffView.tsx deleted file mode 100644 index a3091d2d89..0000000000 --- a/app/components/workbench/DiffView.tsx +++ /dev/null @@ -1,510 +0,0 @@ -import { memo, useMemo, useState, useEffect, useCallback } from 'react'; -import { useStore } from '@nanostores/react'; -import { workbenchStore } from '~/lib/stores/workbench'; -import type { FileMap } from '~/lib/stores/files'; -import type { EditorDocument } from '~/components/editor/codemirror/CodeMirrorEditor'; -import { diffLines, type Change } from 'diff'; -import { getHighlighter } from 'shiki'; -import '~/styles/diff-view.css'; -import { diffFiles, extractRelativePath } from '~/utils/diff'; -import { ActionRunner } from '~/lib/runtime/action-runner'; -import type { FileHistory } from '~/types/actions'; -import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension'; - -interface CodeComparisonProps { - beforeCode: string; - afterCode: string; - language: string; - filename: string; - lightTheme: string; - darkTheme: string; -} - -interface DiffBlock { - lineNumber: number; - content: string; - type: 'added' | 'removed' | 'unchanged'; - correspondingLine?: number; -} - -interface FullscreenButtonProps { - onClick: () => void; - isFullscreen: boolean; -} - -const FullscreenButton = memo(({ onClick, isFullscreen }: FullscreenButtonProps) => ( - -)); - -const FullscreenOverlay = memo(({ isFullscreen, children }: { isFullscreen: boolean; children: React.ReactNode }) => { - if (!isFullscreen) return <>{children}; - - return ( -
-
- {children} -
-
- ); -}); - -const MAX_FILE_SIZE = 1024 * 1024; // 1MB -const BINARY_REGEX = /[\x00-\x08\x0E-\x1F]/; - -const isBinaryFile = (content: string) => { - return content.length > MAX_FILE_SIZE || BINARY_REGEX.test(content); -}; - -const processChanges = (beforeCode: string, afterCode: string) => { - try { - if (isBinaryFile(beforeCode) || isBinaryFile(afterCode)) { - return { - beforeLines: [], - afterLines: [], - hasChanges: false, - lineChanges: { before: new Set(), after: new Set() }, - unifiedBlocks: [], - isBinary: true - }; - } - - // Normalizar quebras de linha para evitar falsos positivos - const normalizedBefore = beforeCode.replace(/\r\n/g, '\n').trim(); - const normalizedAfter = afterCode.replace(/\r\n/g, '\n').trim(); - - // Se os conteúdos são idênticos após normalização, não há mudanças - if (normalizedBefore === normalizedAfter) { - return { - beforeLines: normalizedBefore.split('\n'), - afterLines: normalizedAfter.split('\n'), - hasChanges: false, - lineChanges: { before: new Set(), after: new Set() }, - unifiedBlocks: [] - }; - } - - // Processar as diferenças com configurações mais precisas - const changes = diffLines(normalizedBefore, normalizedAfter, { - newlineIsToken: true, - ignoreWhitespace: false, - ignoreCase: false - }); - - // Mapear as mudanças com mais precisão - const beforeLines = normalizedBefore.split('\n'); - const afterLines = normalizedAfter.split('\n'); - const lineChanges = { - before: new Set(), - after: new Set() - }; - - let beforeLineNumber = 0; - let afterLineNumber = 0; - - const unifiedBlocks = changes.map(change => { - const lines = change.value.split('\n').filter(line => line.length > 0); - - if (change.added) { - lines.forEach((_, i) => lineChanges.after.add(afterLineNumber + i)); - const block = lines.map((line, i) => ({ - lineNumber: afterLineNumber + i, - content: line, - type: 'added' as const - })); - afterLineNumber += lines.length; - return block; - } - - if (change.removed) { - lines.forEach((_, i) => lineChanges.before.add(beforeLineNumber + i)); - const block = lines.map((line, i) => ({ - lineNumber: beforeLineNumber + i, - content: line, - type: 'removed' as const - })); - beforeLineNumber += lines.length; - return block; - } - - const block = lines.map((line, i) => ({ - lineNumber: afterLineNumber + i, - content: line, - type: 'unchanged' as const, - correspondingLine: beforeLineNumber + i - })); - beforeLineNumber += lines.length; - afterLineNumber += lines.length; - return block; - }).flat(); - - return { - beforeLines, - afterLines, - hasChanges: lineChanges.before.size > 0 || lineChanges.after.size > 0, - lineChanges, - unifiedBlocks, - isBinary: false - }; - } catch (error) { - console.error('Error processing changes:', error); - return { - beforeLines: [], - afterLines: [], - hasChanges: false, - lineChanges: { before: new Set(), after: new Set() }, - unifiedBlocks: [], - error: true, - isBinary: false - }; - } -}; - -const lineNumberStyles = "w-12 shrink-0 pl-2 py-0.5 text-left font-mono text-bolt-elements-textTertiary border-r border-bolt-elements-borderColor bg-bolt-elements-background-depth-1"; -const lineContentStyles = "px-4 py-0.5 font-mono whitespace-pre flex-1 group-hover:bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary"; - -const renderContentWarning = (type: 'binary' | 'error') => ( -
-
-
-

- {type === 'binary' ? 'Binary file detected' : 'Error processing file'} -

-

- {type === 'binary' - ? 'Diff view is not available for binary files' - : 'Could not generate diff preview'} -

-
-
-); - -const NoChangesView = memo(({ beforeCode, language, highlighter }: { - beforeCode: string; - language: string; - highlighter: any; -}) => ( -
-
-
-

Files are identical

-

Both versions match exactly

-
-
-
- Current Content -
-
- {beforeCode.split('\n').map((line, index) => ( -
-
{index + 1}
-
- - ]*>/g, '') - .replace(/<\/?code[^>]*>/g, '') - : line - }} /> -
-
- ))} -
-
-
-)); - -const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language, lightTheme, darkTheme }: CodeComparisonProps) => { - const [isFullscreen, setIsFullscreen] = useState(false); - const [highlighter, setHighlighter] = useState(null); - - const toggleFullscreen = useCallback(() => { - setIsFullscreen(prev => !prev); - }, []); - - const { unifiedBlocks, hasChanges, isBinary, error } = useMemo(() => processChanges(beforeCode, afterCode), [beforeCode, afterCode]); - - useEffect(() => { - getHighlighter({ - themes: ['github-dark'], - langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx'] - }).then(setHighlighter); - }, []); - - if (isBinary || error) return renderContentWarning(isBinary ? 'binary' : 'error'); - - const renderDiffBlock = (block: DiffBlock, index?: number) => { - const key = index !== undefined ? `${block.lineNumber}-${index}` : block.lineNumber; - const bgColor = { - added: 'bg-green-500/20 border-l-4 border-green-500', - removed: 'bg-red-500/20 border-l-4 border-red-500', - unchanged: '' - }[block.type]; - - const highlightedCode = highlighter ? - highlighter.codeToHtml(block.content, { lang: language, theme: 'github-dark' }) : - block.content; - - return ( -
-
- {block.lineNumber + 1} -
-
- - {block.type === 'added' && '+'} - {block.type === 'removed' && '-'} - {block.type === 'unchanged' && ' '} - - ]*>/g, '').replace(/<\/?code[^>]*>/g, '') - }} - /> -
-
- ); - }; - - return ( - -
-
-
- {filename} - - {hasChanges ? ( - Modified - ) : ( - No Changes - )} - - -
-
- {hasChanges ? ( -
- {unifiedBlocks.map((block, index) => renderDiffBlock(block, index))} -
- ) : ( - - )} -
-
- - ); -}); - -const SideBySideComparison = memo(({ - beforeCode, - afterCode, - language, - filename, - lightTheme, - darkTheme, -}: CodeComparisonProps) => { - const [isFullscreen, setIsFullscreen] = useState(false); - const [highlighter, setHighlighter] = useState(null); - - const toggleFullscreen = useCallback(() => { - setIsFullscreen(prev => !prev); - }, []); - - const { beforeLines, afterLines, hasChanges, lineChanges, isBinary, error } = useMemo(() => processChanges(beforeCode, afterCode), [beforeCode, afterCode]); - - useEffect(() => { - getHighlighter({ - themes: ['github-dark'], - langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx'] - }).then(setHighlighter); - }, []); - - if (isBinary || error) return renderContentWarning(isBinary ? 'binary' : 'error'); - - const renderCode = (code: string) => { - if (!highlighter) return code; - const highlightedCode = highlighter.codeToHtml(code, { - lang: language, - theme: 'github-dark' - }); - return highlightedCode.replace(/<\/?pre[^>]*>/g, '').replace(/<\/?code[^>]*>/g, ''); - }; - - return ( - -
-
-
- {filename} - - {hasChanges ? ( - Modified - ) : ( - No Changes - )} - - -
-
- {hasChanges ? ( -
-
-
- {beforeLines.map((line, index) => ( -
-
{index + 1}
-
- - {lineChanges.before.has(index) ? '-' : ' '} - - -
-
- ))} -
-
-
- {afterLines.map((line, index) => ( -
-
{index + 1}
-
- - {lineChanges.after.has(index) ? '+' : ' '} - - -
-
- ))} -
-
- ) : ( - - )} -
-
- - ); -}); - -interface DiffViewProps { - fileHistory: Record; - setFileHistory: React.Dispatch>>; - diffViewMode: 'inline' | 'side'; - actionRunner: ActionRunner; -} - -export const DiffView = memo(({ fileHistory, setFileHistory, diffViewMode, actionRunner }: DiffViewProps) => { - const files = useStore(workbenchStore.files) as FileMap; - const selectedFile = useStore(workbenchStore.selectedFile); - const currentDocument = useStore(workbenchStore.currentDocument) as EditorDocument; - const unsavedFiles = useStore(workbenchStore.unsavedFiles); - - useEffect(() => { - if (selectedFile && currentDocument) { - const file = files[selectedFile]; - if (!file || !('content' in file)) return; - - const existingHistory = fileHistory[selectedFile]; - const currentContent = currentDocument.value; - - const relativePath = extractRelativePath(selectedFile); - const unifiedDiff = diffFiles( - relativePath, - existingHistory?.originalContent || file.content, - currentContent - ); - - if (unifiedDiff) { - const newChanges = diffLines( - existingHistory?.originalContent || file.content, - currentContent - ); - - const newHistory: FileHistory = { - originalContent: existingHistory?.originalContent || file.content, - lastModified: Date.now(), - changes: [ - ...(existingHistory?.changes || []), - ...newChanges - ].slice(-100), // Limitar histórico de mudanças - versions: [ - ...(existingHistory?.versions || []), - { - timestamp: Date.now(), - content: currentContent - } - ].slice(-10), // Manter apenas as 10 últimas versões - changeSource: 'auto-save' - }; - - setFileHistory(prev => ({ ...prev, [selectedFile]: newHistory })); - } - } - }, [selectedFile, currentDocument?.value, files, setFileHistory, unsavedFiles]); - - if (!selectedFile || !currentDocument) { - return ( -
- Select a file to view differences -
- ); - } - - const file = files[selectedFile]; - const originalContent = file && 'content' in file ? file.content : ''; - const currentContent = currentDocument.value; - - const history = fileHistory[selectedFile]; - const effectiveOriginalContent = history?.originalContent || originalContent; - const language = getLanguageFromExtension(selectedFile.split('.').pop() || ''); - - try { - return ( -
- {diffViewMode === 'inline' ? ( - - ) : ( - - )} -
- ); - } catch (error) { - console.error('DiffView render error:', error); - return ( -
-
-
-

Failed to render diff view

-
-
- ); - } -}); diff --git a/app/components/workbench/Workbench.client.tsx b/app/components/workbench/Workbench.client.tsx index 04ab5597f6..5fdcda7595 100644 --- a/app/components/workbench/Workbench.client.tsx +++ b/app/components/workbench/Workbench.client.tsx @@ -1,15 +1,8 @@ import { useStore } from '@nanostores/react'; import { motion, type HTMLMotionProps, type Variants } from 'framer-motion'; import { computed } from 'nanostores'; -import { memo, useCallback, useEffect, useState, useMemo } from 'react'; +import { memo, useCallback, useEffect, useState } from 'react'; import { toast } from 'react-toastify'; -import { Popover, Transition } from '@headlessui/react'; -import { type Change } from 'diff'; -import { formatDistanceToNow as formatDistance } from 'date-fns'; -import { ActionRunner } from '~/lib/runtime/action-runner'; -import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension'; -import type { FileHistory } from '~/types/actions'; -import { DiffView } from './DiffView'; import { type OnChangeCallback as OnEditorChange, type OnScrollCallback as OnEditorScroll, @@ -25,16 +18,10 @@ import { EditorPanel } from './EditorPanel'; import { Preview } from './Preview'; import useViewport from '~/lib/hooks'; import { PushToGitHubDialog } from '~/components/@settings/tabs/connections/components/PushToGitHubDialog'; -import Cookies from 'js-cookie'; interface WorkspaceProps { chatStarted?: boolean; isStreaming?: boolean; - actionRunner: ActionRunner; - metadata?: { - gitUrl?: string; - }; - updateChatMestaData?: (metadata: any) => void; } const viewTransition = { ease: cubicEasingFn }; @@ -44,10 +31,6 @@ const sliderOptions: SliderOptions = { value: 'code', text: 'Code', }, - middle: { - value: 'diff', - text: 'Diff', - }, right: { value: 'preview', text: 'Preview', @@ -71,171 +54,11 @@ const workbenchVariants = { }, } satisfies Variants; -const FileModifiedDropdown = memo(({ - fileHistory, - onSelectFile, - diffViewMode, - toggleDiffViewMode, -}: { - fileHistory: Record, - onSelectFile: (filePath: string) => void, - diffViewMode: 'inline' | 'side', - toggleDiffViewMode: () => void, -}) => { - const modifiedFiles = Object.entries(fileHistory); - const hasChanges = modifiedFiles.length > 0; - const [searchQuery, setSearchQuery] = useState(''); - - const filteredFiles = useMemo(() => { - return modifiedFiles.filter(([filePath]) => - filePath.toLowerCase().includes(searchQuery.toLowerCase()) - ); - }, [modifiedFiles, searchQuery]); - - return ( -
- - {({ open }: { open: boolean }) => ( - <> - - File Changes - {hasChanges && ( - - {modifiedFiles.length} - - )} - - - -
-
- setSearchQuery(e.target.value)} - className="w-full pl-8 pr-3 py-1.5 text-sm rounded-lg bg-bolt-elements-background-depth-1 border border-bolt-elements-borderColor focus:outline-none focus:ring-2 focus:ring-blue-500/50" - /> -
-
-
-
- -
- {filteredFiles.length > 0 ? ( - filteredFiles.map(([filePath, history]) => { - const extension = filePath.split('.').pop() || ''; - const language = getLanguageFromExtension(extension); - - return ( - - ); - }) - ) : ( -
-
-
-
-

- {searchQuery ? 'No matching files' : 'No modified files'} -

-

- {searchQuery ? 'Try another search' : 'Changes will appear here as you edit'} -

-
- )} -
-
- - {hasChanges && ( -
- -
- )} - - - - )} - - -
- ); -}); - -export const Workbench = memo(({ - chatStarted, - isStreaming, - actionRunner, - metadata, - updateChatMestaData -}: WorkspaceProps) => { +export const Workbench = memo(({ chatStarted, isStreaming }: WorkspaceProps) => { renderLogger.trace('Workbench'); const [isSyncing, setIsSyncing] = useState(false); const [isPushDialogOpen, setIsPushDialogOpen] = useState(false); - const [diffViewMode, setDiffViewMode] = useState<'inline' | 'side'>('inline'); - const [fileHistory, setFileHistory] = useState>({}); - - const modifiedFiles = Array.from(useStore(workbenchStore.unsavedFiles).keys()); const hasPreview = useStore(computed(workbenchStore.previews, (previews) => previews.length > 0)); const showWorkbench = useStore(workbenchStore.showWorkbench); @@ -298,15 +121,6 @@ export const Workbench = memo(({ } }, []); - const handleSelectFile = useCallback((filePath: string) => { - workbenchStore.setSelectedFile(filePath); - workbenchStore.currentView.set('diff'); - }, []); - - const toggleDiffViewMode = useCallback(() => { - setDiffViewMode(prev => prev === 'inline' ? 'side' : 'inline'); - }, []); - return ( chatStarted && (
)} - {selectedView === 'diff' && ( - - )}
- - - @@ -420,24 +215,14 @@ export const Workbench = memo(({ setIsPushDialogOpen(false)} - onPush={async (repoName, username, token) => { + onPush={async (repoName, username, token, isPrivate) => { try { - const commitMessage = prompt('Please enter a commit message:', 'Initial commit') || 'Initial commit'; - await workbenchStore.pushToGitHub(repoName, commitMessage, username, token); - const repoUrl = `https://github.com/${username}/${repoName}`; - - if (updateChatMestaData && !metadata?.gitUrl) { - updateChatMestaData({ - ...(metadata || {}), - gitUrl: repoUrl, - }); - } - + const repoUrl = await workbenchStore.pushToGitHub(repoName, undefined, username, token, isPrivate); return repoUrl; } catch (error) { console.error('Error pushing to GitHub:', error); toast.error('Failed to push to GitHub'); - throw error; + throw error; // Rethrow to let PushToGitHubDialog handle the error state } }} /> diff --git a/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts index d61502867f..250dff7912 100644 --- a/app/lib/runtime/action-runner.ts +++ b/app/lib/runtime/action-runner.ts @@ -1,7 +1,7 @@ import type { WebContainer } from '@webcontainer/api'; -import { path as nodePath } from '~/utils/path'; +import { path } from '~/utils/path'; import { atom, map, type MapStore } from 'nanostores'; -import type { ActionAlert, BoltAction, FileHistory } from '~/types/actions'; +import type { ActionAlert, BoltAction } from '~/types/actions'; import { createScopedLogger } from '~/utils/logger'; import { unreachable } from '~/utils/unreachable'; import type { ActionCallbackData } from './message-parser'; @@ -276,9 +276,9 @@ export class ActionRunner { } const webcontainer = await this.#webcontainer; - const relativePath = nodePath.relative(webcontainer.workdir, action.filePath); + const relativePath = path.relative(webcontainer.workdir, action.filePath); - let folder = nodePath.dirname(relativePath); + let folder = path.dirname(relativePath); // remove trailing slashes folder = folder.replace(/\/+$/g, ''); @@ -304,31 +304,4 @@ export class ActionRunner { this.actions.setKey(id, { ...actions[id], ...newState }); } - - async getFileHistory(filePath: string): Promise { - try { - const webcontainer = await this.#webcontainer; - const historyPath = this.#getHistoryPath(filePath); - const content = await webcontainer.fs.readFile(historyPath, 'utf-8'); - return JSON.parse(content); - } catch (error) { - return null; - } - } - - async saveFileHistory(filePath: string, history: FileHistory) { - const webcontainer = await this.#webcontainer; - const historyPath = this.#getHistoryPath(filePath); - - await this.#runFileAction({ - type: 'file', - filePath: historyPath, - content: JSON.stringify(history), - changeSource: 'auto-save' - } as any); - } - - #getHistoryPath(filePath: string) { - return nodePath.join('.history', filePath); - } } diff --git a/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts index 84d38efa51..e410e768e7 100644 --- a/app/lib/stores/workbench.ts +++ b/app/lib/stores/workbench.ts @@ -10,16 +10,18 @@ import { FilesStore, type FileMap } from './files'; import { PreviewsStore } from './previews'; import { TerminalStore } from './terminal'; import JSZip from 'jszip'; -import pkg from 'file-saver'; -const { saveAs } = pkg; +import fileSaver from 'file-saver'; import { Octokit, type RestEndpointMethodTypes } from '@octokit/rest'; -import * as nodePath from 'node:path'; +import { path } from '~/utils/path'; import { extractRelativePath } from '~/utils/diff'; import { description } from '~/lib/persistence'; import Cookies from 'js-cookie'; import { createSampler } from '~/utils/sampler'; import type { ActionAlert } from '~/types/actions'; +// Destructure saveAs from the CommonJS module +const { saveAs } = fileSaver; + export interface ArtifactState { id: string; title: string; @@ -32,7 +34,7 @@ export type ArtifactUpdateState = Pick; type Artifacts = MapStore>; -export type WorkbenchViewType = 'code' | 'diff' | 'preview'; +export type WorkbenchViewType = 'code' | 'preview'; export class WorkbenchStore { #previewsStore = new PreviewsStore(webcontainer); @@ -330,7 +332,7 @@ export class WorkbenchStore { if (data.action.type === 'file') { const wc = await webcontainer; - const fullPath = nodePath.join(wc.workdir, data.action.filePath); + const fullPath = path.join(wc.workdir, data.action.filePath); if (this.selectedFile.value !== fullPath) { this.setSelectedFile(fullPath); @@ -435,7 +437,13 @@ export class WorkbenchStore { return syncedFiles; } - async pushToGitHub(repoName: string, commitMessage?: string, githubUsername?: string, ghToken?: string) { + async pushToGitHub( + repoName: string, + commitMessage?: string, + githubUsername?: string, + ghToken?: string, + isPrivate: boolean = false, + ) { try { // Use cookies if username and token are not provided const githubToken = ghToken || Cookies.get('githubToken'); @@ -459,7 +467,7 @@ export class WorkbenchStore { // Repository doesn't exist, so create a new one const { data: newRepo } = await octokit.repos.createForAuthenticatedUser({ name: repoName, - private: false, + private: isPrivate, auto_init: true, }); repo = newRepo; @@ -537,7 +545,7 @@ export class WorkbenchStore { sha: newCommit.sha, }); - alert(`Repository created and code pushed: ${repo.html_url}`); + return repo.html_url; // Return the URL instead of showing alert } catch (error) { console.error('Error pushing to GitHub:', error); throw error; // Rethrow the error for further handling diff --git a/app/styles/diff-view.css b/app/styles/diff-view.css deleted file mode 100644 index e99e8be7a3..0000000000 --- a/app/styles/diff-view.css +++ /dev/null @@ -1,72 +0,0 @@ -.diff-panel-content { - scrollbar-width: thin; - scrollbar-color: rgba(155, 155, 155, 0.5) transparent; -} - -.diff-panel-content::-webkit-scrollbar { - width: 8px; - height: 8px; -} - -.diff-panel-content::-webkit-scrollbar-track { - background: transparent; -} - -.diff-panel-content::-webkit-scrollbar-thumb { - background-color: rgba(155, 155, 155, 0.5); - border-radius: 4px; - border: 2px solid transparent; -} - -.diff-panel-content::-webkit-scrollbar-thumb:hover { - background-color: rgba(155, 155, 155, 0.7); -} - -/* Hide scrollbar for the left panel when not hovered */ -.diff-panel:not(:hover) .diff-panel-content::-webkit-scrollbar { - display: none; -} - -.diff-panel:not(:hover) .diff-panel-content { - scrollbar-width: none; -} - -/* Estilos para as linhas de diff */ -.diff-block-added { - @apply bg-green-500/20 border-l-4 border-green-500; -} - -.diff-block-removed { - @apply bg-red-500/20 border-l-4 border-red-500; -} - -/* Melhorar contraste para mudanças */ -.diff-panel-content .group:hover .diff-block-added { - @apply bg-green-500/30; -} - -.diff-panel-content .group:hover .diff-block-removed { - @apply bg-red-500/30; -} - -/* Estilos unificados para ambas as visualizações */ -.diff-line { - @apply flex group min-w-fit transition-colors duration-150; -} - -.diff-line-number { - @apply w-12 shrink-0 pl-2 py-0.5 text-left font-mono text-bolt-elements-textTertiary border-r border-bolt-elements-borderColor bg-bolt-elements-background-depth-1; -} - -.diff-line-content { - @apply px-4 py-0.5 font-mono whitespace-pre flex-1 group-hover:bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary; -} - -/* Cores específicas para adições/remoções */ -.diff-added { - @apply bg-green-500/20 border-l-4 border-green-500; -} - -.diff-removed { - @apply bg-red-500/20 border-l-4 border-red-500; -} \ No newline at end of file diff --git a/app/types/actions.ts b/app/types/actions.ts index cf13abde61..3543ac7ec8 100644 --- a/app/types/actions.ts +++ b/app/types/actions.ts @@ -1,5 +1,3 @@ -import type { Change } from 'diff'; - export type ActionType = 'file' | 'shell'; export interface BaseAction { @@ -30,15 +28,3 @@ export interface ActionAlert { content: string; source?: 'terminal' | 'preview'; // Add source to differentiate between terminal and preview errors } - -export interface FileHistory { - originalContent: string; - lastModified: number; - changes: Change[]; - versions: { - timestamp: number; - content: string; - }[]; - // Novo campo para rastrear a origem das mudanças - changeSource?: 'user' | 'auto-save' | 'external'; -} diff --git a/app/utils/getLanguageFromExtension.ts b/app/utils/getLanguageFromExtension.ts deleted file mode 100644 index 1dd5d0fd1b..0000000000 --- a/app/utils/getLanguageFromExtension.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const getLanguageFromExtension = (ext: string): string => { - const map: Record = { - js: "javascript", - jsx: "jsx", - ts: "typescript", - tsx: "tsx", - json: "json", - html: "html", - css: "css", - py: "python", - java: "java", - rb: "ruby", - cpp: "cpp", - c: "c", - cs: "csharp", - go: "go", - rs: "rust", - php: "php", - swift: "swift", - md: "plaintext", - sh: "bash", - }; - return map[ext] || "typescript"; -}; \ No newline at end of file diff --git a/package.json b/package.json index f797859db1..6bbc999a2d 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,6 @@ "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-tooltip": "^1.1.4", - "lucide-react": "^0.474.0", - "next-themes": "^0.4.4", "@remix-run/cloudflare": "^2.15.2", "@remix-run/cloudflare-pages": "^2.15.2", "@remix-run/node": "^2.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6b355bffb..1bbe2c760d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,7 +82,7 @@ importers: version: 6.36.2 '@headlessui/react': specifier: ^2.2.0 - version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.0(react-dom@18.3.1)(react@18.3.1) '@iconify-json/svg-spinners': specifier: ^1.2.1 version: 1.2.2 @@ -103,43 +103,43 @@ importers: version: 0.0.5(zod@3.24.1) '@phosphor-icons/react': specifier: ^2.1.7 - version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.7(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-context-menu': specifier: ^2.2.2 - version: 2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.6 - version: 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.1 - version: 2.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.2 - version: 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.0 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.1.1 - version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.2 - version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.4 - version: 1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.8(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@remix-run/cloudflare': specifier: ^2.15.2 version: 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) @@ -151,7 +151,7 @@ importers: version: 2.15.3(typescript@5.7.3) '@remix-run/react': specifier: ^2.15.2 - version: 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + version: 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) '@types/react-beautiful-dnd': specifier: ^13.1.8 version: 13.1.8 @@ -202,7 +202,7 @@ importers: version: 2.0.5 framer-motion: specifier: ^11.12.0 - version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.2(react-dom@18.3.1)(react@18.3.1) ignore: specifier: ^6.0.2 version: 6.0.2 @@ -227,15 +227,9 @@ importers: jszip: specifier: ^3.10.1 version: 3.10.1 - lucide-react: - specifier: ^0.474.0 - version: 0.474.0(react@18.3.1) nanostores: specifier: ^0.10.3 version: 0.10.3 - next-themes: - specifier: ^0.4.4 - version: 0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ollama-ai-provider: specifier: ^0.15.2 version: 0.15.2(zod@3.24.1) @@ -247,13 +241,13 @@ importers: version: 18.3.1 react-beautiful-dnd: specifier: ^13.1.1 - version: 13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 13.1.1(react-dom@18.3.1)(react@18.3.1) react-chartjs-2: specifier: ^5.3.0 version: 5.3.0(chart.js@4.4.7)(react@18.3.1) react-dnd: specifier: ^16.0.1 - version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.1)(@types/react@18.3.18)(react@18.3.1) + version: 16.0.1(@types/react@18.3.18)(react@18.3.1) react-dnd-html5-backend: specifier: ^16.0.1 version: 16.0.1 @@ -262,7 +256,7 @@ importers: version: 18.3.1(react@18.3.1) react-hotkeys-hook: specifier: ^4.6.1 - version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 4.6.1(react-dom@18.3.1)(react@18.3.1) react-icons: specifier: ^5.4.0 version: 5.4.0(react@18.3.1) @@ -271,10 +265,10 @@ importers: version: 9.0.3(@types/react@18.3.18)(react@18.3.1) react-resizable-panels: specifier: ^2.1.7 - version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.7(react-dom@18.3.1)(react@18.3.1) react-toastify: specifier: ^10.0.6 - version: 10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 10.0.6(react-dom@18.3.1)(react@18.3.1) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -286,10 +280,10 @@ importers: version: 4.0.1 remix-island: specifier: ^0.2.0 - version: 0.2.0(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/server-runtime@2.15.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.2.0(@remix-run/react@2.15.3)(@remix-run/server-runtime@2.15.3)(react-dom@18.3.1)(react@18.3.1) remix-utils: specifier: ^7.7.0 - version: 7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1) + version: 7.7.0(@remix-run/cloudflare@2.15.3)(@remix-run/node@2.15.3)(@remix-run/react@2.15.3)(react@18.3.1)(zod@3.24.1) shiki: specifier: ^1.24.0 version: 1.29.2 @@ -301,11 +295,11 @@ importers: version: 5.0.0 zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + version: 5.0.3(@types/react@18.3.18)(react@18.3.1) devDependencies: '@blitz/eslint-plugin': specifier: 0.1.0 - version: 0.1.0(jiti@1.21.7)(prettier@3.5.0)(typescript@5.7.3) + version: 0.1.0(prettier@3.5.0)(typescript@5.7.3) '@cloudflare/workers-types': specifier: ^4.20241127.0 version: 4.20250204.0 @@ -317,7 +311,7 @@ importers: version: 2.0.0 '@remix-run/dev': specifier: ^2.15.2 - version: 2.15.3(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@22.13.1)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))(wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0)) + version: 2.15.3(@remix-run/react@2.15.3)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14)(wrangler@3.108.0) '@types/diff': specifier: ^5.2.3 version: 5.2.3 @@ -368,22 +362,22 @@ importers: version: 11.0.5 unocss: specifier: ^0.61.9 - version: 0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14) vite: specifier: ^5.4.11 - version: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + version: 5.4.14(sass-embedded@1.83.4) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 0.22.0(rollup@3.29.5)(vite@5.4.14) vite-plugin-optimize-css-modules: specifier: ^1.1.0 - version: 1.2.0(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 1.2.0(vite@5.4.14) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 4.3.2(typescript@5.7.3)(vite@5.4.14) vitest: specifier: ^2.1.7 - version: 2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4) + version: 2.1.9(sass-embedded@1.83.4) wrangler: specifier: ^3.91.0 version: 3.108.0(@cloudflare/workers-types@4.20250204.0) @@ -4542,11 +4536,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lucide-react@0.474.0: - resolution: {integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -4997,12 +4986,6 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - next-themes@0.4.4: - resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} - peerDependencies: - react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -6750,7 +6733,6 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 - optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@1.0.20(zod@3.24.1)': @@ -6759,7 +6741,6 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 - optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@1.0.9(zod@3.24.1)': @@ -6768,7 +6749,6 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 - optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@2.0.5(zod@3.24.1)': @@ -6777,7 +6757,6 @@ snapshots: eventsource-parser: 3.0.0 nanoid: 3.3.8 secure-json-parse: 2.7.0 - optionalDependencies: zod: 3.24.1 '@ai-sdk/provider-utils@2.1.6(zod@3.24.1)': @@ -6786,7 +6765,6 @@ snapshots: eventsource-parser: 3.0.0 nanoid: 3.3.8 secure-json-parse: 2.7.0 - optionalDependencies: zod: 3.24.1 '@ai-sdk/provider@0.0.12': @@ -6813,19 +6791,17 @@ snapshots: dependencies: '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) '@ai-sdk/ui-utils': 1.1.11(zod@3.24.1) + react: 18.3.1 swr: 2.3.2(react@18.3.1) throttleit: 2.1.0 - optionalDependencies: - react: 18.3.1 zod: 3.24.1 '@ai-sdk/ui-utils@1.1.11(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.7 '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) - zod-to-json-schema: 3.24.1(zod@3.24.1) - optionalDependencies: zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) '@ampproject/remapping@2.3.0': dependencies: @@ -7387,19 +7363,19 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@blitz/eslint-plugin@0.1.0(jiti@1.21.7)(prettier@3.5.0)(typescript@5.7.3)': + '@blitz/eslint-plugin@0.1.0(prettier@3.5.0)(typescript@5.7.3)': dependencies: - '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0)(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) common-tags: 1.8.2 - eslint: 9.20.1(jiti@1.21.7) - eslint-config-prettier: 9.1.0(eslint@9.20.1(jiti@1.21.7)) - eslint-plugin-jsonc: 2.19.1(eslint@9.20.1(jiti@1.21.7)) - eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.0) + eslint: 9.20.1 + eslint-config-prettier: 9.1.0(eslint@9.20.1) + eslint-plugin-jsonc: 2.19.1(eslint@9.20.1) + eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0)(eslint@9.20.1)(prettier@3.5.0) globals: 15.14.0 - typescript-eslint: 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + typescript-eslint: 8.24.0(eslint@9.20.1)(typescript@5.7.3) transitivePeerDependencies: - '@eslint/json' - '@types/eslint' @@ -7856,9 +7832,9 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1)': dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -7913,15 +7889,15 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react@0.26.28(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) '@floating-ui/utils': 0.2.9 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7929,12 +7905,12 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@2.2.0(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react': 0.26.28(react-dom@18.3.1)(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1)(react@18.3.1) + '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8295,7 +8271,7 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@phosphor-icons/react@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@phosphor-icons/react@2.1.7(react-dom@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8311,436 +8287,400 @@ snapshots: '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-direction@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/rect': 1.1.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - optionalDependencies: + + '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 '@radix-ui/react-use-size@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - optionalDependencies: '@types/react': 18.3.18 + react: 18.3.1 - '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@radix-ui/rect@1.1.0': {} - '@react-aria/focus@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/focus@3.19.1(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1)(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1)(react@18.3.1) '@react-types/shared': 3.27.0(react@18.3.1) '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/interactions@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/interactions@3.23.0(react-dom@18.3.1)(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1)(react@18.3.1) '@react-types/shared': 3.27.0(react@18.3.1) '@swc/helpers': 0.5.15 react: 18.3.1 @@ -8751,7 +8691,7 @@ snapshots: '@swc/helpers': 0.5.15 react: 18.3.1 - '@react-aria/utils@3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/utils@3.27.0(react-dom@18.3.1)(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) '@react-stately/utils': 3.10.5(react@18.3.1) @@ -8780,7 +8720,6 @@ snapshots: dependencies: '@cloudflare/workers-types': 4.20250204.0 '@remix-run/cloudflare': 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) - optionalDependencies: typescript: 5.7.3 '@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3)': @@ -8788,10 +8727,9 @@ snapshots: '@cloudflare/kv-asset-handler': 0.1.3 '@cloudflare/workers-types': 4.20250204.0 '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) - optionalDependencies: typescript: 5.7.3 - '@remix-run/dev@2.15.3(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@22.13.1)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))(wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0))': + '@remix-run/dev@2.15.3(@remix-run/react@2.15.3)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14)(wrangler@3.108.0)': dependencies: '@babel/core': 7.26.8 '@babel/generator': 7.26.8 @@ -8804,11 +8742,11 @@ snapshots: '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 '@remix-run/node': 2.15.3(typescript@5.7.3) - '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@remix-run/react': 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) '@remix-run/router': 1.22.0 '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@22.13.1)(sass-embedded@1.83.4) + '@vanilla-extract/integration': 6.5.0(sass-embedded@1.83.4) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -8846,13 +8784,12 @@ snapshots: set-cookie-parser: 2.7.1 tar-fs: 2.1.2 tsconfig-paths: 4.2.0 - valibot: 0.41.0(typescript@5.7.3) - vite-node: 1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4) - ws: 7.5.10 - optionalDependencies: typescript: 5.7.3 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + valibot: 0.41.0(typescript@5.7.3) + vite: 5.4.14(sass-embedded@1.83.4) + vite-node: 1.6.1(sass-embedded@1.83.4) wrangler: 3.108.0(@cloudflare/workers-types@4.20250204.0) + ws: 7.5.10 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -8877,20 +8814,18 @@ snapshots: cookie-signature: 1.2.2 source-map-support: 0.5.21 stream-slice: 0.1.2 - undici: 6.21.1 - optionalDependencies: typescript: 5.7.3 + undici: 6.21.1 - '@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': + '@remix-run/react@2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)': dependencies: '@remix-run/router': 1.22.0 '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.29.0(react@18.3.1) - react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: 6.29.0(react-dom@18.3.1)(react@18.3.1) turbo-stream: 2.4.0 - optionalDependencies: typescript: 5.7.3 '@remix-run/router@1.22.0': {} @@ -8904,7 +8839,6 @@ snapshots: set-cookie-parser: 2.7.1 source-map: 0.7.4 turbo-stream: 2.4.0 - optionalDependencies: typescript: 5.7.3 '@remix-run/web-blob@3.1.0': @@ -8940,7 +8874,6 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@3.29.5) estree-walker: 2.0.2 magic-string: 0.30.17 - optionalDependencies: rollup: 3.29.5 '@rollup/pluginutils@5.1.4(rollup@3.29.5)': @@ -8948,7 +8881,6 @@ snapshots: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 - optionalDependencies: rollup: 3.29.5 '@rollup/rollup-android-arm-eabi@4.34.6': @@ -9340,10 +9272,10 @@ snapshots: '@smithy/util-buffer-from': 4.0.0 tslib: 2.8.1 - '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.20.1)(typescript@5.7.3)': dependencies: - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.20.1(jiti@1.21.7) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + eslint: 9.20.1 eslint-visitor-keys: 4.2.0 espree: 10.3.0 transitivePeerDependencies: @@ -9354,7 +9286,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.13.0(react-dom@18.3.1)(react@18.3.1)': dependencies: '@tanstack/virtual-core': 3.13.0 react: 18.3.1 @@ -9456,15 +9388,15 @@ snapshots: '@types/uuid@9.0.8': {} - '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0)(eslint@9.20.1)(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.24.0 - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -9473,14 +9405,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.24.0 '@typescript-eslint/types': 8.24.0 '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.24.0 debug: 4.4.0 - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -9490,12 +9422,12 @@ snapshots: '@typescript-eslint/types': 8.24.0 '@typescript-eslint/visitor-keys': 8.24.0 - '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) debug: 4.4.0 - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -9517,13 +9449,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.0(eslint@9.20.1)(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) '@typescript-eslint/scope-manager': 8.24.0 '@typescript-eslint/types': 8.24.0 '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -9549,13 +9481,12 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@unocss/astro@0.61.9(rollup@3.29.5)(vite@5.4.14)': dependencies: '@unocss/core': 0.61.9 '@unocss/reset': 0.61.9 - '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) - optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - rollup - supports-color @@ -9692,7 +9623,7 @@ snapshots: dependencies: '@unocss/core': 0.61.9 - '@unocss/vite@0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@unocss/vite@0.61.9(rollup@3.29.5)(vite@5.4.14)': dependencies: '@ampproject/remapping': 2.3.0 '@rollup/pluginutils': 5.1.4(rollup@3.29.5) @@ -9704,7 +9635,7 @@ snapshots: chokidar: 3.6.0 fast-glob: 3.3.3 magic-string: 0.30.17 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - rollup - supports-color @@ -9732,7 +9663,7 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@22.13.1)(sass-embedded@1.83.4)': + '@vanilla-extract/integration@6.5.0(sass-embedded@1.83.4)': dependencies: '@babel/core': 7.26.8 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.8) @@ -9745,8 +9676,8 @@ snapshots: lodash: 4.17.21 mlly: 1.7.4 outdent: 0.8.0 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - vite-node: 1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) + vite-node: 1.6.1(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -9768,13 +9699,12 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@vitest/mocker@2.1.9(vite@5.4.14)': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) '@vitest/pretty-format@2.1.9': dependencies: @@ -9852,7 +9782,6 @@ snapshots: '@ai-sdk/ui-utils': 1.1.11(zod@3.24.1) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 - optionalDependencies: react: 18.3.1 zod: 3.24.1 @@ -10593,27 +10522,27 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.6.4(eslint@9.20.1(jiti@1.21.7)): + eslint-compat-utils@0.6.4(eslint@9.20.1): dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 semver: 7.7.1 - eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)): + eslint-config-prettier@9.1.0(eslint@9.20.1): dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 - eslint-json-compat-utils@0.2.1(eslint@9.20.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.20.1)(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-plugin-jsonc@2.19.1(eslint@9.20.1(jiti@1.21.7)): + eslint-plugin-jsonc@2.19.1(eslint@9.20.1): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) - eslint: 9.20.1(jiti@1.21.7) - eslint-compat-utils: 0.6.4(eslint@9.20.1(jiti@1.21.7)) - eslint-json-compat-utils: 0.2.1(eslint@9.20.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) + eslint: 9.20.1 + eslint-compat-utils: 0.6.4(eslint@9.20.1) + eslint-json-compat-utils: 0.2.1(eslint@9.20.1)(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -10622,14 +10551,13 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.0): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0)(eslint@9.20.1)(prettier@3.5.0): dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.20.1 + eslint-config-prettier: 9.1.0(eslint@9.20.1) prettier: 3.5.0 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 - optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.20.1(jiti@1.21.7)) eslint-scope@8.2.0: dependencies: @@ -10640,9 +10568,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.20.1(jiti@1.21.7): + eslint@9.20.1: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.2 '@eslint/core': 0.11.0 @@ -10676,8 +10604,6 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - optionalDependencies: - jiti: 1.21.7 transitivePeerDependencies: - supports-color @@ -10906,14 +10832,13 @@ snapshots: forwarded@0.2.0: {} - framer-motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.18.2(react-dom@18.3.1)(react@18.3.1): dependencies: motion-dom: 11.18.1 motion-utils: 11.18.1 - tslib: 2.8.1 - optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 fresh@0.5.2: {} @@ -11504,10 +11429,6 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.474.0(react@18.3.1): - dependencies: - react: 18.3.1 - magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 @@ -12337,11 +12258,6 @@ snapshots: negotiator@0.6.3: {} - next-themes@0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - node-domexception@1.0.0: {} node-fetch-native@1.6.6: {} @@ -12450,7 +12366,6 @@ snapshots: '@ai-sdk/provider': 0.0.24 '@ai-sdk/provider-utils': 1.0.20(zod@3.24.1) partial-json: 0.1.7 - optionalDependencies: zod: 3.24.1 on-finished@2.4.1: @@ -12628,9 +12543,8 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.2): dependencies: lilconfig: 3.1.3 - yaml: 2.7.0 - optionalDependencies: postcss: 8.5.2 + yaml: 2.7.0 postcss-modules-extract-imports@3.1.0(postcss@8.5.2): dependencies: @@ -12786,7 +12700,7 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-beautiful-dnd@13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-beautiful-dnd@13.1.1(react-dom@18.3.1)(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 css-box-model: 1.2.1 @@ -12794,7 +12708,7 @@ snapshots: raf-schd: 4.0.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-redux: 7.2.9(react-dom@18.3.1)(react@18.3.1) redux: 4.2.1 use-memo-one: 1.1.3(react@18.3.1) transitivePeerDependencies: @@ -12809,18 +12723,15 @@ snapshots: dependencies: dnd-core: 16.0.1 - react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.1)(@types/react@18.3.18)(react@18.3.1): + react-dnd@16.0.1(@types/react@18.3.18)(react@18.3.1): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 + '@types/react': 18.3.18 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 react: 18.3.1 - optionalDependencies: - '@types/hoist-non-react-statics': 3.3.6 - '@types/node': 22.13.1 - '@types/react': 18.3.18 react-dom@18.3.1(react@18.3.1): dependencies: @@ -12828,7 +12739,7 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-hotkeys-hook@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-hotkeys-hook@4.6.1(react-dom@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -12858,7 +12769,7 @@ snapshots: transitivePeerDependencies: - supports-color - react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-redux@7.2.9(react-dom@18.3.1)(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 '@types/react-redux': 7.1.34 @@ -12866,37 +12777,34 @@ snapshots: loose-envify: 1.4.0 prop-types: 15.8.1 react: 18.3.1 - react-is: 17.0.2 - optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-is: 17.0.2 react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: + '@types/react': 18.3.18 react: 18.3.1 react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): dependencies: + '@types/react': 18.3.18 react: 18.3.1 react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-resizable-panels@2.1.7(react-dom@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.29.0(react-dom@18.3.1)(react@18.3.1): dependencies: '@remix-run/router': 1.22.0 react: 18.3.1 @@ -12910,13 +12818,12 @@ snapshots: react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: + '@types/react': 18.3.18 get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 - react-toastify@10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-toastify@10.0.6(react-dom@18.3.1)(react@18.3.1): dependencies: clsx: 2.1.1 react: 18.3.1 @@ -13047,22 +12954,20 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - remix-island@0.2.0(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/server-runtime@2.15.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + remix-island@0.2.0(@remix-run/react@2.15.3)(@remix-run/server-runtime@2.15.3)(react-dom@18.3.1)(react@18.3.1): dependencies: - '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@remix-run/react': 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - remix-utils@7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1): + remix-utils@7.7.0(@remix-run/cloudflare@2.15.3)(@remix-run/node@2.15.3)(@remix-run/react@2.15.3)(react@18.3.1)(zod@3.24.1): dependencies: - type-fest: 4.34.1 - optionalDependencies: '@remix-run/cloudflare': 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) '@remix-run/node': 2.15.3(typescript@5.7.3) - '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) - '@remix-run/router': 1.22.0 + '@remix-run/react': 2.15.3(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) react: 18.3.1 + type-fest: 4.34.1 zod: 3.24.1 require-like@0.1.2: {} @@ -13648,7 +13553,7 @@ snapshots: typescript: 5.7.3 tsconfck@3.1.5(typescript@5.7.3): - optionalDependencies: + dependencies: typescript: 5.7.3 tsconfig-paths@4.2.0: @@ -13681,12 +13586,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3): + typescript-eslint@8.24.0(eslint@9.20.1)(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.20.1(jiti@1.21.7) + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0)(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + eslint: 9.20.1 typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -13808,9 +13713,9 @@ snapshots: universalify@2.0.1: {} - unocss@0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + unocss@0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14): dependencies: - '@unocss/astro': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + '@unocss/astro': 0.61.9(rollup@3.29.5)(vite@5.4.14) '@unocss/cli': 0.61.9(rollup@3.29.5) '@unocss/core': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9 @@ -13829,9 +13734,8 @@ snapshots: '@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-directives': 0.61.9 '@unocss/transformer-variant-group': 0.61.9 - '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) - optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - postcss - rollup @@ -13856,10 +13760,9 @@ snapshots: use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: + '@types/react': 18.3.18 react: 18.3.1 tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 use-memo-one@1.1.3(react@18.3.1): dependencies: @@ -13867,11 +13770,10 @@ snapshots: use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: + '@types/react': 18.3.18 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 use-sync-external-store@1.4.0(react@18.3.1): dependencies: @@ -13904,7 +13806,7 @@ snapshots: sade: 1.8.1 valibot@0.41.0(typescript@5.7.3): - optionalDependencies: + dependencies: typescript: 5.7.3 validate-npm-package-license@3.0.4: @@ -13947,13 +13849,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4): + vite-node@1.6.1(sass-embedded@1.83.4): dependencies: cac: 6.7.14 debug: 4.4.0 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' - less @@ -13965,13 +13867,13 @@ snapshots: - supports-color - terser - vite-node@2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4): + vite-node@2.1.9(sass-embedded@1.83.4): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 1.1.2 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' - less @@ -13983,43 +13885,41 @@ snapshots: - supports-color - terser - vite-plugin-node-polyfills@0.22.0(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + vite-plugin-node-polyfills@0.22.0(rollup@3.29.5)(vite@5.4.14): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@3.29.5) node-stdlib-browser: 1.3.1 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - rollup - vite-plugin-optimize-css-modules@1.2.0(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + vite-plugin-optimize-css-modules@1.2.0(vite@5.4.14): dependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) - vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.4.14): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) - optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color - typescript - vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4): + vite@5.4.14(sass-embedded@1.83.4): dependencies: esbuild: 0.21.5 postcss: 8.5.2 rollup: 4.34.6 + sass-embedded: 1.83.4 optionalDependencies: - '@types/node': 22.13.1 fsevents: 2.3.3 - sass-embedded: 1.83.4 - vitest@2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4): + vitest@2.1.9(sass-embedded@1.83.4): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + '@vitest/mocker': 2.1.9(vite@5.4.14) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -14035,11 +13935,9 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - vite-node: 2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.14(sass-embedded@1.83.4) + vite-node: 2.1.9(sass-embedded@1.83.4) why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 22.13.1 transitivePeerDependencies: - less - lightningcss @@ -14104,6 +14002,7 @@ snapshots: wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 + '@cloudflare/workers-types': 4.20250204.0 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) blake3-wasm: 2.1.5 @@ -14113,7 +14012,6 @@ snapshots: unenv: 2.0.0-rc.1 workerd: 1.20250204.0 optionalDependencies: - '@cloudflare/workers-types': 4.20250204.0 fsevents: 2.3.3 sharp: 0.33.5 transitivePeerDependencies: @@ -14162,10 +14060,9 @@ snapshots: zod@3.24.1: {} - zustand@5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): - optionalDependencies: + zustand@5.0.3(@types/react@18.3.18)(react@18.3.1): + dependencies: '@types/react': 18.3.18 react: 18.3.1 - use-sync-external-store: 1.4.0(react@18.3.1) zwitch@2.0.4: {} diff --git a/vite.config.ts b/vite.config.ts index 70908a9279..01fb3b2e6a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -89,7 +89,6 @@ export default defineConfig((config) => { __PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies), __PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies), __PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies), - 'module': {}, }, build: { target: 'esnext', diff --git a/wrangler.toml b/wrangler.toml new file mode 100644 index 0000000000..93c41604ee --- /dev/null +++ b/wrangler.toml @@ -0,0 +1,6 @@ +#:schema node_modules/wrangler/config-schema.json +name = "bolt" +compatibility_flags = ["nodejs_compat"] +compatibility_date = "2024-07-01" +pages_build_output_dir = "./build/client" +send_metrics = false