KevIsDev commited on
Commit
bffb8a2
·
1 Parent(s): 871aefb

Revert "Merge pull request #1335 from Toddyclipsgg/diff-view-v2"

Browse files

This reverts commit 871aefbe83c31660b32b53b63772ebba33ed7954, reversing
changes made to 8c72ed76b3315d8b9be77976769567bd4c41512e.

.github/actions/setup-and-build/action.yaml CHANGED
@@ -30,7 +30,3 @@ runs:
30
  run: |
31
  pnpm install
32
  pnpm run build
33
-
34
- - name: Create history directory
35
- shell: bash
36
- run: mkdir -p .history
 
30
  run: |
31
  pnpm install
32
  pnpm run build
 
 
 
 
.tool-versions ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ nodejs 20.15.1
2
+ pnpm 9.4.0
README.md CHANGED
@@ -4,10 +4,12 @@
4
 
5
  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.
6
 
7
- -----
 
8
  Check the [bolt.diy Docs](https://stackblitz-labs.github.io/bolt.diy/) for more offical installation instructions and more informations.
9
 
10
- -----
 
11
  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!
12
 
13
  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
79
  - ✅ Add Starter Template Options (@thecodacus)
80
  - ✅ Perplexity Integration (@meetpateltech)
81
  - ✅ AWS Bedrock Integration (@kunjabijukchhe)
82
- - ✅ Add a "Diff View" to see the changes (@toddyclipsgg)
83
  - ⬜ **HIGH PRIORITY** - Prevent bolt from rewriting files as often (file locking and diffs)
84
  - ⬜ **HIGH PRIORITY** - Better prompting for smaller LLMs (code window sometimes doesn't start)
85
  - ⬜ **HIGH PRIORITY** - Run agents in the backend as opposed to a single model call
 
4
 
5
  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.
6
 
7
+ ---
8
+
9
  Check the [bolt.diy Docs](https://stackblitz-labs.github.io/bolt.diy/) for more offical installation instructions and more informations.
10
 
11
+ ---
12
+
13
  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!
14
 
15
  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
  - ✅ Add Starter Template Options (@thecodacus)
82
  - ✅ Perplexity Integration (@meetpateltech)
83
  - ✅ AWS Bedrock Integration (@kunjabijukchhe)
 
84
  - ⬜ **HIGH PRIORITY** - Prevent bolt from rewriting files as often (file locking and diffs)
85
  - ⬜ **HIGH PRIORITY** - Better prompting for smaller LLMs (code window sometimes doesn't start)
86
  - ⬜ **HIGH PRIORITY** - Run agents in the backend as opposed to a single model call
app/components/chat/BaseChat.tsx CHANGED
@@ -34,7 +34,6 @@ import ChatAlert from './ChatAlert';
34
  import type { ModelInfo } from '~/lib/modules/llm/types';
35
  import ProgressCompilation from './ProgressCompilation';
36
  import type { ProgressAnnotation } from '~/types/context';
37
- import type { ActionRunner } from '~/lib/runtime/action-runner';
38
  import { LOCAL_PROVIDERS } from '~/lib/stores/settings';
39
 
40
  const TEXTAREA_MIN_HEIGHT = 76;
@@ -69,7 +68,6 @@ interface BaseChatProps {
69
  actionAlert?: ActionAlert;
70
  clearAlert?: () => void;
71
  data?: JSONValue[] | undefined;
72
- actionRunner?: ActionRunner;
73
  }
74
 
75
  export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
@@ -104,7 +102,6 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
104
  actionAlert,
105
  clearAlert,
106
  data,
107
- actionRunner,
108
  },
109
  ref,
110
  ) => {
@@ -307,7 +304,7 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
307
  data-chat-visible={showChat}
308
  >
309
  <ClientOnly>{() => <Menu />}</ClientOnly>
310
- <div ref={scrollRef} className="flex flex-col lg:flex-row overflow-y-auto w-full h-full">
311
  <div className={classNames(styles.Chat, 'flex flex-col flex-grow lg:min-w-[var(--chat-min-width)] h-full')}>
312
  {!chatStarted && (
313
  <div id="intro" className="mt-[16vh] max-w-chat mx-auto text-center px-4 lg:px-0">
@@ -321,39 +318,40 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
321
  )}
322
  <div
323
  className={classNames('pt-6 px-2 sm:px-6', {
324
- 'h-full flex flex-col': chatStarted,
325
  })}
326
  ref={scrollRef}
327
  >
328
  <ClientOnly>
329
  {() => {
330
  return chatStarted ? (
331
- <Messages
332
- ref={messageRef}
333
- className="flex flex-col w-full flex-1 max-w-chat pb-6 mx-auto z-1"
334
- messages={messages}
335
- isStreaming={isStreaming}
336
- />
 
 
337
  ) : null;
338
  }}
339
  </ClientOnly>
340
  <div
341
- className={classNames('flex flex-col gap-4 w-full max-w-chat mx-auto z-prompt mb-6', {
342
  'sticky bottom-2': chatStarted,
 
343
  })}
344
  >
345
- <div className="bg-bolt-elements-background-depth-2">
346
- {actionAlert && (
347
- <ChatAlert
348
- alert={actionAlert}
349
- clearAlert={() => clearAlert?.()}
350
- postMessage={(message) => {
351
- sendMessage?.({} as any, message);
352
- clearAlert?.();
353
- }}
354
- />
355
- )}
356
- </div>
357
  {progressAnnotations && <ProgressCompilation data={progressAnnotations} />}
358
  <div
359
  className={classNames(
@@ -587,15 +585,16 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
587
  </div>
588
  </div>
589
  </div>
590
- <div className="flex flex-col justify-center gap-5">
591
- {!chatStarted && (
592
  <div className="flex justify-center gap-2">
593
- {ImportButtons(importChat)}
594
- <GitCloneButton importChat={importChat} />
 
 
595
  </div>
596
- )}
597
- {!chatStarted &&
598
- ExamplePrompts((event, messageInput) => {
599
  if (isStreaming) {
600
  handleStop?.();
601
  return;
@@ -603,18 +602,11 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
603
 
604
  handleSendMessage?.(event, messageInput);
605
  })}
606
- {!chatStarted && <StarterTemplates />}
607
- </div>
608
- </div>
609
- <ClientOnly>
610
- {() => (
611
- <Workbench
612
- actionRunner={actionRunner ?? ({} as ActionRunner)}
613
- chatStarted={chatStarted}
614
- isStreaming={isStreaming}
615
- />
616
  )}
617
- </ClientOnly>
 
618
  </div>
619
  </div>
620
  );
 
34
  import type { ModelInfo } from '~/lib/modules/llm/types';
35
  import ProgressCompilation from './ProgressCompilation';
36
  import type { ProgressAnnotation } from '~/types/context';
 
37
  import { LOCAL_PROVIDERS } from '~/lib/stores/settings';
38
 
39
  const TEXTAREA_MIN_HEIGHT = 76;
 
68
  actionAlert?: ActionAlert;
69
  clearAlert?: () => void;
70
  data?: JSONValue[] | undefined;
 
71
  }
72
 
73
  export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
 
102
  actionAlert,
103
  clearAlert,
104
  data,
 
105
  },
106
  ref,
107
  ) => {
 
304
  data-chat-visible={showChat}
305
  >
306
  <ClientOnly>{() => <Menu />}</ClientOnly>
307
+ <div className="flex flex-col lg:flex-row overflow-y-auto w-full h-full">
308
  <div className={classNames(styles.Chat, 'flex flex-col flex-grow lg:min-w-[var(--chat-min-width)] h-full')}>
309
  {!chatStarted && (
310
  <div id="intro" className="mt-[16vh] max-w-chat mx-auto text-center px-4 lg:px-0">
 
318
  )}
319
  <div
320
  className={classNames('pt-6 px-2 sm:px-6', {
321
+ 'h-full flex flex-col pb-4 overflow-y-auto': chatStarted,
322
  })}
323
  ref={scrollRef}
324
  >
325
  <ClientOnly>
326
  {() => {
327
  return chatStarted ? (
328
+ <div className="flex-1 w-full max-w-chat pb-6 mx-auto z-1">
329
+ <Messages
330
+ ref={messageRef}
331
+ className="flex flex-col "
332
+ messages={messages}
333
+ isStreaming={isStreaming}
334
+ />
335
+ </div>
336
  ) : null;
337
  }}
338
  </ClientOnly>
339
  <div
340
+ className={classNames('flex flex-col gap-4 w-full max-w-chat mx-auto z-prompt', {
341
  'sticky bottom-2': chatStarted,
342
+ 'position-absolute': chatStarted,
343
  })}
344
  >
345
+ {actionAlert && (
346
+ <ChatAlert
347
+ alert={actionAlert}
348
+ clearAlert={() => clearAlert?.()}
349
+ postMessage={(message) => {
350
+ sendMessage?.({} as any, message);
351
+ clearAlert?.();
352
+ }}
353
+ />
354
+ )}
 
 
355
  {progressAnnotations && <ProgressCompilation data={progressAnnotations} />}
356
  <div
357
  className={classNames(
 
585
  </div>
586
  </div>
587
  </div>
588
+ {!chatStarted && (
589
+ <div className="flex flex-col justify-center mt-6 gap-5">
590
  <div className="flex justify-center gap-2">
591
+ <div className="flex items-center gap-2">
592
+ {ImportButtons(importChat)}
593
+ <GitCloneButton importChat={importChat} className="min-w-[120px]" />
594
+ </div>
595
  </div>
596
+
597
+ {ExamplePrompts((event, messageInput) => {
 
598
  if (isStreaming) {
599
  handleStop?.();
600
  return;
 
602
 
603
  handleSendMessage?.(event, messageInput);
604
  })}
605
+ <StarterTemplates />
606
+ </div>
 
 
 
 
 
 
 
 
607
  )}
608
+ </div>
609
+ <ClientOnly>{() => <Workbench chatStarted={chatStarted} isStreaming={isStreaming} />}</ClientOnly>
610
  </div>
611
  </div>
612
  );
app/components/ui/Slider.tsx CHANGED
@@ -9,11 +9,10 @@ interface SliderOption<T> {
9
  text: string;
10
  }
11
 
12
- export type SliderOptions<T> = {
13
- left: { value: T; text: string };
14
- middle?: { value: T; text: string };
15
- right: { value: T; text: string };
16
- };
17
 
18
  interface SliderProps<T> {
19
  selected: T;
@@ -22,23 +21,14 @@ interface SliderProps<T> {
22
  }
23
 
24
  export const Slider = genericMemo(<T,>({ selected, options, setSelected }: SliderProps<T>) => {
25
- const hasMiddle = !!options.middle;
26
- const isLeftSelected = hasMiddle ? selected === options.left.value : selected === options.left.value;
27
- const isMiddleSelected = hasMiddle && options.middle ? selected === options.middle.value : false;
28
 
29
  return (
30
  <div className="flex items-center flex-wrap shrink-0 gap-1 bg-bolt-elements-background-depth-1 overflow-hidden rounded-full p-1">
31
  <SliderButton selected={isLeftSelected} setSelected={() => setSelected?.(options.left.value)}>
32
  {options.left.text}
33
  </SliderButton>
34
-
35
- {options.middle && (
36
- <SliderButton selected={isMiddleSelected} setSelected={() => setSelected?.(options.middle!.value)}>
37
- {options.middle.text}
38
- </SliderButton>
39
- )}
40
-
41
- <SliderButton selected={!isLeftSelected && !isMiddleSelected} setSelected={() => setSelected?.(options.right.value)}>
42
  {options.right.text}
43
  </SliderButton>
44
  </div>
 
9
  text: string;
10
  }
11
 
12
+ export interface SliderOptions<T> {
13
+ left: SliderOption<T>;
14
+ right: SliderOption<T>;
15
+ }
 
16
 
17
  interface SliderProps<T> {
18
  selected: T;
 
21
  }
22
 
23
  export const Slider = genericMemo(<T,>({ selected, options, setSelected }: SliderProps<T>) => {
24
+ const isLeftSelected = selected === options.left.value;
 
 
25
 
26
  return (
27
  <div className="flex items-center flex-wrap shrink-0 gap-1 bg-bolt-elements-background-depth-1 overflow-hidden rounded-full p-1">
28
  <SliderButton selected={isLeftSelected} setSelected={() => setSelected?.(options.left.value)}>
29
  {options.left.text}
30
  </SliderButton>
31
+ <SliderButton selected={!isLeftSelected} setSelected={() => setSelected?.(options.right.value)}>
 
 
 
 
 
 
 
32
  {options.right.text}
33
  </SliderButton>
34
  </div>
app/components/workbench/DiffView.tsx DELETED
@@ -1,510 +0,0 @@
1
- import { memo, useMemo, useState, useEffect, useCallback } from 'react';
2
- import { useStore } from '@nanostores/react';
3
- import { workbenchStore } from '~/lib/stores/workbench';
4
- import type { FileMap } from '~/lib/stores/files';
5
- import type { EditorDocument } from '~/components/editor/codemirror/CodeMirrorEditor';
6
- import { diffLines, type Change } from 'diff';
7
- import { getHighlighter } from 'shiki';
8
- import '~/styles/diff-view.css';
9
- import { diffFiles, extractRelativePath } from '~/utils/diff';
10
- import { ActionRunner } from '~/lib/runtime/action-runner';
11
- import type { FileHistory } from '~/types/actions';
12
- import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension';
13
-
14
- interface CodeComparisonProps {
15
- beforeCode: string;
16
- afterCode: string;
17
- language: string;
18
- filename: string;
19
- lightTheme: string;
20
- darkTheme: string;
21
- }
22
-
23
- interface DiffBlock {
24
- lineNumber: number;
25
- content: string;
26
- type: 'added' | 'removed' | 'unchanged';
27
- correspondingLine?: number;
28
- }
29
-
30
- interface FullscreenButtonProps {
31
- onClick: () => void;
32
- isFullscreen: boolean;
33
- }
34
-
35
- const FullscreenButton = memo(({ onClick, isFullscreen }: FullscreenButtonProps) => (
36
- <button
37
- onClick={onClick}
38
- className="ml-4 p-1 rounded hover:bg-bolt-elements-background-depth-3 text-bolt-elements-textTertiary hover:text-bolt-elements-textPrimary transition-colors"
39
- title={isFullscreen ? "Exit Fullscreen" : "Enter Fullscreen"}
40
- >
41
- <div className={isFullscreen ? "i-ph:corners-in" : "i-ph:corners-out"} />
42
- </button>
43
- ));
44
-
45
- const FullscreenOverlay = memo(({ isFullscreen, children }: { isFullscreen: boolean; children: React.ReactNode }) => {
46
- if (!isFullscreen) return <>{children}</>;
47
-
48
- return (
49
- <div className="fixed inset-0 z-[9999] bg-black/50 flex items-center justify-center p-6">
50
- <div className="w-full h-full max-w-[90vw] max-h-[90vh] bg-bolt-elements-background-depth-2 rounded-lg border border-bolt-elements-borderColor shadow-xl overflow-hidden">
51
- {children}
52
- </div>
53
- </div>
54
- );
55
- });
56
-
57
- const MAX_FILE_SIZE = 1024 * 1024; // 1MB
58
- const BINARY_REGEX = /[\x00-\x08\x0E-\x1F]/;
59
-
60
- const isBinaryFile = (content: string) => {
61
- return content.length > MAX_FILE_SIZE || BINARY_REGEX.test(content);
62
- };
63
-
64
- const processChanges = (beforeCode: string, afterCode: string) => {
65
- try {
66
- if (isBinaryFile(beforeCode) || isBinaryFile(afterCode)) {
67
- return {
68
- beforeLines: [],
69
- afterLines: [],
70
- hasChanges: false,
71
- lineChanges: { before: new Set(), after: new Set() },
72
- unifiedBlocks: [],
73
- isBinary: true
74
- };
75
- }
76
-
77
- // Normalizar quebras de linha para evitar falsos positivos
78
- const normalizedBefore = beforeCode.replace(/\r\n/g, '\n').trim();
79
- const normalizedAfter = afterCode.replace(/\r\n/g, '\n').trim();
80
-
81
- // Se os conteúdos são idênticos após normalização, não há mudanças
82
- if (normalizedBefore === normalizedAfter) {
83
- return {
84
- beforeLines: normalizedBefore.split('\n'),
85
- afterLines: normalizedAfter.split('\n'),
86
- hasChanges: false,
87
- lineChanges: { before: new Set(), after: new Set() },
88
- unifiedBlocks: []
89
- };
90
- }
91
-
92
- // Processar as diferenças com configurações mais precisas
93
- const changes = diffLines(normalizedBefore, normalizedAfter, {
94
- newlineIsToken: true,
95
- ignoreWhitespace: false,
96
- ignoreCase: false
97
- });
98
-
99
- // Mapear as mudanças com mais precisão
100
- const beforeLines = normalizedBefore.split('\n');
101
- const afterLines = normalizedAfter.split('\n');
102
- const lineChanges = {
103
- before: new Set<number>(),
104
- after: new Set<number>()
105
- };
106
-
107
- let beforeLineNumber = 0;
108
- let afterLineNumber = 0;
109
-
110
- const unifiedBlocks = changes.map(change => {
111
- const lines = change.value.split('\n').filter(line => line.length > 0);
112
-
113
- if (change.added) {
114
- lines.forEach((_, i) => lineChanges.after.add(afterLineNumber + i));
115
- const block = lines.map((line, i) => ({
116
- lineNumber: afterLineNumber + i,
117
- content: line,
118
- type: 'added' as const
119
- }));
120
- afterLineNumber += lines.length;
121
- return block;
122
- }
123
-
124
- if (change.removed) {
125
- lines.forEach((_, i) => lineChanges.before.add(beforeLineNumber + i));
126
- const block = lines.map((line, i) => ({
127
- lineNumber: beforeLineNumber + i,
128
- content: line,
129
- type: 'removed' as const
130
- }));
131
- beforeLineNumber += lines.length;
132
- return block;
133
- }
134
-
135
- const block = lines.map((line, i) => ({
136
- lineNumber: afterLineNumber + i,
137
- content: line,
138
- type: 'unchanged' as const,
139
- correspondingLine: beforeLineNumber + i
140
- }));
141
- beforeLineNumber += lines.length;
142
- afterLineNumber += lines.length;
143
- return block;
144
- }).flat();
145
-
146
- return {
147
- beforeLines,
148
- afterLines,
149
- hasChanges: lineChanges.before.size > 0 || lineChanges.after.size > 0,
150
- lineChanges,
151
- unifiedBlocks,
152
- isBinary: false
153
- };
154
- } catch (error) {
155
- console.error('Error processing changes:', error);
156
- return {
157
- beforeLines: [],
158
- afterLines: [],
159
- hasChanges: false,
160
- lineChanges: { before: new Set(), after: new Set() },
161
- unifiedBlocks: [],
162
- error: true,
163
- isBinary: false
164
- };
165
- }
166
- };
167
-
168
- 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";
169
- 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";
170
-
171
- const renderContentWarning = (type: 'binary' | 'error') => (
172
- <div className="h-full flex items-center justify-center p-4">
173
- <div className="text-center text-bolt-elements-textTertiary">
174
- <div className={`i-ph:${type === 'binary' ? 'file-x' : 'warning-circle'} text-4xl text-red-400 mb-2 mx-auto`} />
175
- <p className="font-medium text-bolt-elements-textPrimary">
176
- {type === 'binary' ? 'Binary file detected' : 'Error processing file'}
177
- </p>
178
- <p className="text-sm mt-1">
179
- {type === 'binary'
180
- ? 'Diff view is not available for binary files'
181
- : 'Could not generate diff preview'}
182
- </p>
183
- </div>
184
- </div>
185
- );
186
-
187
- const NoChangesView = memo(({ beforeCode, language, highlighter }: {
188
- beforeCode: string;
189
- language: string;
190
- highlighter: any;
191
- }) => (
192
- <div className="h-full flex flex-col items-center justify-center p-4">
193
- <div className="text-center text-bolt-elements-textTertiary">
194
- <div className="i-ph:files text-4xl text-green-400 mb-2 mx-auto" />
195
- <p className="font-medium text-bolt-elements-textPrimary">Files are identical</p>
196
- <p className="text-sm mt-1">Both versions match exactly</p>
197
- </div>
198
- <div className="mt-4 w-full max-w-2xl bg-bolt-elements-background-depth-1 rounded-lg border border-bolt-elements-borderColor overflow-hidden">
199
- <div className="p-2 text-xs font-bold text-bolt-elements-textTertiary border-b border-bolt-elements-borderColor">
200
- Current Content
201
- </div>
202
- <div className="overflow-auto max-h-96">
203
- {beforeCode.split('\n').map((line, index) => (
204
- <div key={index} className="flex group min-w-fit">
205
- <div className={lineNumberStyles}>{index + 1}</div>
206
- <div className={lineContentStyles}>
207
- <span className="mr-2"> </span>
208
- <span dangerouslySetInnerHTML={{
209
- __html: highlighter ?
210
- highlighter.codeToHtml(line, { lang: language, theme: 'github-dark' })
211
- .replace(/<\/?pre[^>]*>/g, '')
212
- .replace(/<\/?code[^>]*>/g, '')
213
- : line
214
- }} />
215
- </div>
216
- </div>
217
- ))}
218
- </div>
219
- </div>
220
- </div>
221
- ));
222
-
223
- const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language, lightTheme, darkTheme }: CodeComparisonProps) => {
224
- const [isFullscreen, setIsFullscreen] = useState(false);
225
- const [highlighter, setHighlighter] = useState<any>(null);
226
-
227
- const toggleFullscreen = useCallback(() => {
228
- setIsFullscreen(prev => !prev);
229
- }, []);
230
-
231
- const { unifiedBlocks, hasChanges, isBinary, error } = useMemo(() => processChanges(beforeCode, afterCode), [beforeCode, afterCode]);
232
-
233
- useEffect(() => {
234
- getHighlighter({
235
- themes: ['github-dark'],
236
- langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx']
237
- }).then(setHighlighter);
238
- }, []);
239
-
240
- if (isBinary || error) return renderContentWarning(isBinary ? 'binary' : 'error');
241
-
242
- const renderDiffBlock = (block: DiffBlock, index?: number) => {
243
- const key = index !== undefined ? `${block.lineNumber}-${index}` : block.lineNumber;
244
- const bgColor = {
245
- added: 'bg-green-500/20 border-l-4 border-green-500',
246
- removed: 'bg-red-500/20 border-l-4 border-red-500',
247
- unchanged: ''
248
- }[block.type];
249
-
250
- const highlightedCode = highlighter ?
251
- highlighter.codeToHtml(block.content, { lang: language, theme: 'github-dark' }) :
252
- block.content;
253
-
254
- return (
255
- <div key={key} className="flex group min-w-fit">
256
- <div className={lineNumberStyles}>
257
- {block.lineNumber + 1}
258
- </div>
259
- <div className={`${lineContentStyles} ${bgColor}`}>
260
- <span className="mr-2 text-bolt-elements-textTertiary">
261
- {block.type === 'added' && '+'}
262
- {block.type === 'removed' && '-'}
263
- {block.type === 'unchanged' && ' '}
264
- </span>
265
- <span
266
- dangerouslySetInnerHTML={{
267
- __html: highlightedCode.replace(/<\/?pre[^>]*>/g, '').replace(/<\/?code[^>]*>/g, '')
268
- }}
269
- />
270
- </div>
271
- </div>
272
- );
273
- };
274
-
275
- return (
276
- <FullscreenOverlay isFullscreen={isFullscreen}>
277
- <div className="w-full h-full flex flex-col">
278
- <div className="flex items-center bg-bolt-elements-background-depth-1 p-2 text-sm text-bolt-elements-textPrimary shrink-0">
279
- <div className="i-ph:file mr-2 h-4 w-4 shrink-0" />
280
- <span className="truncate">{filename}</span>
281
- <span className="ml-auto shrink-0 flex items-center">
282
- {hasChanges ? (
283
- <span className="text-yellow-400">Modified</span>
284
- ) : (
285
- <span className="text-green-400">No Changes</span>
286
- )}
287
- <FullscreenButton onClick={toggleFullscreen} isFullscreen={isFullscreen} />
288
- </span>
289
- </div>
290
- <div className="flex-1 overflow-auto diff-panel-content">
291
- {hasChanges ? (
292
- <div className="overflow-x-auto">
293
- {unifiedBlocks.map((block, index) => renderDiffBlock(block, index))}
294
- </div>
295
- ) : (
296
- <NoChangesView
297
- beforeCode={beforeCode}
298
- language={language}
299
- highlighter={highlighter}
300
- />
301
- )}
302
- </div>
303
- </div>
304
- </FullscreenOverlay>
305
- );
306
- });
307
-
308
- const SideBySideComparison = memo(({
309
- beforeCode,
310
- afterCode,
311
- language,
312
- filename,
313
- lightTheme,
314
- darkTheme,
315
- }: CodeComparisonProps) => {
316
- const [isFullscreen, setIsFullscreen] = useState(false);
317
- const [highlighter, setHighlighter] = useState<any>(null);
318
-
319
- const toggleFullscreen = useCallback(() => {
320
- setIsFullscreen(prev => !prev);
321
- }, []);
322
-
323
- const { beforeLines, afterLines, hasChanges, lineChanges, isBinary, error } = useMemo(() => processChanges(beforeCode, afterCode), [beforeCode, afterCode]);
324
-
325
- useEffect(() => {
326
- getHighlighter({
327
- themes: ['github-dark'],
328
- langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx']
329
- }).then(setHighlighter);
330
- }, []);
331
-
332
- if (isBinary || error) return renderContentWarning(isBinary ? 'binary' : 'error');
333
-
334
- const renderCode = (code: string) => {
335
- if (!highlighter) return code;
336
- const highlightedCode = highlighter.codeToHtml(code, {
337
- lang: language,
338
- theme: 'github-dark'
339
- });
340
- return highlightedCode.replace(/<\/?pre[^>]*>/g, '').replace(/<\/?code[^>]*>/g, '');
341
- };
342
-
343
- return (
344
- <FullscreenOverlay isFullscreen={isFullscreen}>
345
- <div className="w-full h-full flex flex-col">
346
- <div className="flex items-center bg-bolt-elements-background-depth-1 p-2 text-sm text-bolt-elements-textPrimary shrink-0">
347
- <div className="i-ph:file mr-2 h-4 w-4 shrink-0" />
348
- <span className="truncate">{filename}</span>
349
- <span className="ml-auto shrink-0 flex items-center">
350
- {hasChanges ? (
351
- <span className="text-yellow-400">Modified</span>
352
- ) : (
353
- <span className="text-green-400">No Changes</span>
354
- )}
355
- <FullscreenButton onClick={toggleFullscreen} isFullscreen={isFullscreen} />
356
- </span>
357
- </div>
358
- <div className="flex-1 overflow-auto diff-panel-content">
359
- {hasChanges ? (
360
- <div className="grid md:grid-cols-2 divide-x divide-bolt-elements-borderColor relative h-full">
361
- <div className="overflow-auto">
362
- <div className="overflow-auto">
363
- {beforeLines.map((line, index) => (
364
- <div key={`before-${index}`} className="flex group min-w-fit">
365
- <div className={lineNumberStyles}>{index + 1}</div>
366
- <div className={`${lineContentStyles} ${lineChanges.before.has(index) ? 'bg-red-500/20 border-l-4 border-red-500' : ''}`}>
367
- <span className="mr-2 text-bolt-elements-textTertiary">
368
- {lineChanges.before.has(index) ? '-' : ' '}
369
- </span>
370
- <span dangerouslySetInnerHTML={{ __html: renderCode(line) }} />
371
- </div>
372
- </div>
373
- ))}
374
- </div>
375
- </div>
376
- <div className="overflow-auto">
377
- {afterLines.map((line, index) => (
378
- <div key={`after-${index}`} className="flex group min-w-fit">
379
- <div className={lineNumberStyles}>{index + 1}</div>
380
- <div className={`${lineContentStyles} ${lineChanges.after.has(index) ? 'bg-green-500/20 border-l-4 border-green-500' : ''}`}>
381
- <span className="mr-2 text-bolt-elements-textTertiary">
382
- {lineChanges.after.has(index) ? '+' : ' '}
383
- </span>
384
- <span dangerouslySetInnerHTML={{ __html: renderCode(line) }} />
385
- </div>
386
- </div>
387
- ))}
388
- </div>
389
- </div>
390
- ) : (
391
- <NoChangesView
392
- beforeCode={beforeCode}
393
- language={language}
394
- highlighter={highlighter}
395
- />
396
- )}
397
- </div>
398
- </div>
399
- </FullscreenOverlay>
400
- );
401
- });
402
-
403
- interface DiffViewProps {
404
- fileHistory: Record<string, FileHistory>;
405
- setFileHistory: React.Dispatch<React.SetStateAction<Record<string, FileHistory>>>;
406
- diffViewMode: 'inline' | 'side';
407
- actionRunner: ActionRunner;
408
- }
409
-
410
- export const DiffView = memo(({ fileHistory, setFileHistory, diffViewMode, actionRunner }: DiffViewProps) => {
411
- const files = useStore(workbenchStore.files) as FileMap;
412
- const selectedFile = useStore(workbenchStore.selectedFile);
413
- const currentDocument = useStore(workbenchStore.currentDocument) as EditorDocument;
414
- const unsavedFiles = useStore(workbenchStore.unsavedFiles);
415
-
416
- useEffect(() => {
417
- if (selectedFile && currentDocument) {
418
- const file = files[selectedFile];
419
- if (!file || !('content' in file)) return;
420
-
421
- const existingHistory = fileHistory[selectedFile];
422
- const currentContent = currentDocument.value;
423
-
424
- const relativePath = extractRelativePath(selectedFile);
425
- const unifiedDiff = diffFiles(
426
- relativePath,
427
- existingHistory?.originalContent || file.content,
428
- currentContent
429
- );
430
-
431
- if (unifiedDiff) {
432
- const newChanges = diffLines(
433
- existingHistory?.originalContent || file.content,
434
- currentContent
435
- );
436
-
437
- const newHistory: FileHistory = {
438
- originalContent: existingHistory?.originalContent || file.content,
439
- lastModified: Date.now(),
440
- changes: [
441
- ...(existingHistory?.changes || []),
442
- ...newChanges
443
- ].slice(-100), // Limitar histórico de mudanças
444
- versions: [
445
- ...(existingHistory?.versions || []),
446
- {
447
- timestamp: Date.now(),
448
- content: currentContent
449
- }
450
- ].slice(-10), // Manter apenas as 10 últimas versões
451
- changeSource: 'auto-save'
452
- };
453
-
454
- setFileHistory(prev => ({ ...prev, [selectedFile]: newHistory }));
455
- }
456
- }
457
- }, [selectedFile, currentDocument?.value, files, setFileHistory, unsavedFiles]);
458
-
459
- if (!selectedFile || !currentDocument) {
460
- return (
461
- <div className="flex w-full h-full justify-center items-center bg-bolt-elements-background-depth-1 text-bolt-elements-textPrimary">
462
- Select a file to view differences
463
- </div>
464
- );
465
- }
466
-
467
- const file = files[selectedFile];
468
- const originalContent = file && 'content' in file ? file.content : '';
469
- const currentContent = currentDocument.value;
470
-
471
- const history = fileHistory[selectedFile];
472
- const effectiveOriginalContent = history?.originalContent || originalContent;
473
- const language = getLanguageFromExtension(selectedFile.split('.').pop() || '');
474
-
475
- try {
476
- return (
477
- <div className="h-full overflow-hidden">
478
- {diffViewMode === 'inline' ? (
479
- <InlineDiffComparison
480
- beforeCode={effectiveOriginalContent}
481
- afterCode={currentContent}
482
- language={language}
483
- filename={selectedFile}
484
- lightTheme="github-light"
485
- darkTheme="github-dark"
486
- />
487
- ) : (
488
- <SideBySideComparison
489
- beforeCode={effectiveOriginalContent}
490
- afterCode={currentContent}
491
- language={language}
492
- filename={selectedFile}
493
- lightTheme="github-light"
494
- darkTheme="github-dark"
495
- />
496
- )}
497
- </div>
498
- );
499
- } catch (error) {
500
- console.error('DiffView render error:', error);
501
- return (
502
- <div className="flex w-full h-full justify-center items-center bg-bolt-elements-background-depth-1 text-red-400">
503
- <div className="text-center">
504
- <div className="i-ph:warning-circle text-4xl mb-2" />
505
- <p>Failed to render diff view</p>
506
- </div>
507
- </div>
508
- );
509
- }
510
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/components/workbench/Workbench.client.tsx CHANGED
@@ -1,15 +1,8 @@
1
  import { useStore } from '@nanostores/react';
2
  import { motion, type HTMLMotionProps, type Variants } from 'framer-motion';
3
  import { computed } from 'nanostores';
4
- import { memo, useCallback, useEffect, useState, useMemo } from 'react';
5
  import { toast } from 'react-toastify';
6
- import { Popover, Transition } from '@headlessui/react';
7
- import { type Change } from 'diff';
8
- import { formatDistanceToNow as formatDistance } from 'date-fns';
9
- import { ActionRunner } from '~/lib/runtime/action-runner';
10
- import { getLanguageFromExtension } from '~/utils/getLanguageFromExtension';
11
- import type { FileHistory } from '~/types/actions';
12
- import { DiffView } from './DiffView';
13
  import {
14
  type OnChangeCallback as OnEditorChange,
15
  type OnScrollCallback as OnEditorScroll,
@@ -25,16 +18,10 @@ import { EditorPanel } from './EditorPanel';
25
  import { Preview } from './Preview';
26
  import useViewport from '~/lib/hooks';
27
  import { PushToGitHubDialog } from '~/components/@settings/tabs/connections/components/PushToGitHubDialog';
28
- import Cookies from 'js-cookie';
29
 
30
  interface WorkspaceProps {
31
  chatStarted?: boolean;
32
  isStreaming?: boolean;
33
- actionRunner: ActionRunner;
34
- metadata?: {
35
- gitUrl?: string;
36
- };
37
- updateChatMestaData?: (metadata: any) => void;
38
  }
39
 
40
  const viewTransition = { ease: cubicEasingFn };
@@ -44,10 +31,6 @@ const sliderOptions: SliderOptions<WorkbenchViewType> = {
44
  value: 'code',
45
  text: 'Code',
46
  },
47
- middle: {
48
- value: 'diff',
49
- text: 'Diff',
50
- },
51
  right: {
52
  value: 'preview',
53
  text: 'Preview',
@@ -71,171 +54,11 @@ const workbenchVariants = {
71
  },
72
  } satisfies Variants;
73
 
74
- const FileModifiedDropdown = memo(({
75
- fileHistory,
76
- onSelectFile,
77
- diffViewMode,
78
- toggleDiffViewMode,
79
- }: {
80
- fileHistory: Record<string, FileHistory>,
81
- onSelectFile: (filePath: string) => void,
82
- diffViewMode: 'inline' | 'side',
83
- toggleDiffViewMode: () => void,
84
- }) => {
85
- const modifiedFiles = Object.entries(fileHistory);
86
- const hasChanges = modifiedFiles.length > 0;
87
- const [searchQuery, setSearchQuery] = useState('');
88
-
89
- const filteredFiles = useMemo(() => {
90
- return modifiedFiles.filter(([filePath]) =>
91
- filePath.toLowerCase().includes(searchQuery.toLowerCase())
92
- );
93
- }, [modifiedFiles, searchQuery]);
94
-
95
- return (
96
- <div className="flex items-center gap-2">
97
- <Popover className="relative">
98
- {({ open }: { open: boolean }) => (
99
- <>
100
- <Popover.Button className="flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg bg-bolt-elements-background-depth-2 hover:bg-bolt-elements-background-depth-3 transition-colors text-bolt-elements-textPrimary border border-bolt-elements-borderColor">
101
- <span className="font-medium">File Changes</span>
102
- {hasChanges && (
103
- <span className="w-5 h-5 rounded-full bg-accent-500/20 text-accent-500 text-xs flex items-center justify-center border border-accent-500/30">
104
- {modifiedFiles.length}
105
- </span>
106
- )}
107
- </Popover.Button>
108
- <Transition
109
- show={open}
110
- enter="transition duration-100 ease-out"
111
- enterFrom="transform scale-95 opacity-0"
112
- enterTo="transform scale-100 opacity-100"
113
- leave="transition duration-75 ease-out"
114
- leaveFrom="transform scale-100 opacity-100"
115
- leaveTo="transform scale-95 opacity-0"
116
- >
117
- <Popover.Panel className="absolute right-0 z-20 mt-2 w-80 origin-top-right rounded-xl bg-bolt-elements-background-depth-2 shadow-xl border border-bolt-elements-borderColor">
118
- <div className="p-2">
119
- <div className="relative mx-2 mb-2">
120
- <input
121
- type="text"
122
- placeholder="Search files..."
123
- value={searchQuery}
124
- onChange={(e) => setSearchQuery(e.target.value)}
125
- 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"
126
- />
127
- <div className="absolute left-2 top-1/2 -translate-y-1/2 text-bolt-elements-textTertiary">
128
- <div className="i-ph:magnifying-glass" />
129
- </div>
130
- </div>
131
-
132
- <div className="max-h-60 overflow-y-auto">
133
- {filteredFiles.length > 0 ? (
134
- filteredFiles.map(([filePath, history]) => {
135
- const extension = filePath.split('.').pop() || '';
136
- const language = getLanguageFromExtension(extension);
137
-
138
- return (
139
- <button
140
- key={filePath}
141
- onClick={() => onSelectFile(filePath)}
142
- className="w-full px-3 py-2 text-left rounded-md hover:bg-bolt-elements-background-depth-1 transition-colors group bg-transparent"
143
- >
144
- <div className="flex items-center gap-2">
145
- <div className="shrink-0 w-5 h-5 text-bolt-elements-textTertiary">
146
- {['typescript', 'javascript', 'jsx', 'tsx'].includes(language) && <div className="i-ph:file-js" />}
147
- {['css', 'scss', 'less'].includes(language) && <div className="i-ph:paint-brush" />}
148
- {language === 'html' && <div className="i-ph:code" />}
149
- {language === 'json' && <div className="i-ph:brackets-curly" />}
150
- {language === 'python' && <div className="i-ph:file-text" />}
151
- {language === 'markdown' && <div className="i-ph:article" />}
152
- {['yaml', 'yml'].includes(language) && <div className="i-ph:file-text" />}
153
- {language === 'sql' && <div className="i-ph:database" />}
154
- {language === 'dockerfile' && <div className="i-ph:cube" />}
155
- {language === 'shell' && <div className="i-ph:terminal" />}
156
- {!['typescript', 'javascript', 'css', 'html', 'json', 'python', 'markdown', 'yaml', 'yml', 'sql', 'dockerfile', 'shell', 'jsx', 'tsx', 'scss', 'less'].includes(language) && <div className="i-ph:file-text" />}
157
- </div>
158
- <div className="flex-1 min-w-0">
159
- <div className="flex items-center justify-between gap-2">
160
- <span className="truncate text-sm font-medium text-bolt-elements-textPrimary">
161
- {filePath.split('/').pop()}
162
- </span>
163
- </div>
164
- <div className="flex items-center gap-2 text-xs text-bolt-elements-textTertiary">
165
- <span className="truncate">{filePath}</span>
166
- <span className="shrink-0">•</span>
167
- <span className="shrink-0">
168
- {formatDistance(history.lastModified)}
169
- </span>
170
- </div>
171
- </div>
172
- </div>
173
- </button>
174
- );
175
- })
176
- ) : (
177
- <div className="flex flex-col items-center justify-center p-4 text-center">
178
- <div className="w-12 h-12 mb-2 text-bolt-elements-textTertiary">
179
- <div className="i-ph:file-dashed" />
180
- </div>
181
- <p className="text-sm font-medium text-bolt-elements-textPrimary">
182
- {searchQuery ? 'No matching files' : 'No modified files'}
183
- </p>
184
- <p className="text-xs text-bolt-elements-textTertiary mt-1">
185
- {searchQuery ? 'Try another search' : 'Changes will appear here as you edit'}
186
- </p>
187
- </div>
188
- )}
189
- </div>
190
- </div>
191
-
192
- {hasChanges && (
193
- <div className="border-t border-bolt-elements-borderColor p-2">
194
- <button
195
- onClick={() => {
196
- navigator.clipboard.writeText(
197
- filteredFiles.map(([filePath]) => filePath).join('\n')
198
- );
199
- toast('File list copied to clipboard', {
200
- icon: <div className="i-ph:check-circle text-accent-500" />
201
- });
202
- }}
203
- className="w-full flex items-center justify-center gap-2 px-3 py-1.5 text-sm rounded-lg bg-bolt-elements-background-depth-1 hover:bg-bolt-elements-background-depth-3 transition-colors text-bolt-elements-textTertiary hover:text-bolt-elements-textPrimary"
204
- >
205
- Copy File List
206
- </button>
207
- </div>
208
- )}
209
- </Popover.Panel>
210
- </Transition>
211
- </>
212
- )}
213
- </Popover>
214
- <button
215
- onClick={(e) => { e.stopPropagation(); toggleDiffViewMode(); }}
216
- className="flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg bg-bolt-elements-background-depth-2 hover:bg-bolt-elements-background-depth-3 transition-colors text-bolt-elements-textPrimary border border-bolt-elements-borderColor"
217
- >
218
- <span className="font-medium">{diffViewMode === 'inline' ? 'Inline' : 'Side by Side'}</span>
219
- </button>
220
- </div>
221
- );
222
- });
223
-
224
- export const Workbench = memo(({
225
- chatStarted,
226
- isStreaming,
227
- actionRunner,
228
- metadata,
229
- updateChatMestaData
230
- }: WorkspaceProps) => {
231
  renderLogger.trace('Workbench');
232
 
233
  const [isSyncing, setIsSyncing] = useState(false);
234
  const [isPushDialogOpen, setIsPushDialogOpen] = useState(false);
235
- const [diffViewMode, setDiffViewMode] = useState<'inline' | 'side'>('inline');
236
- const [fileHistory, setFileHistory] = useState<Record<string, FileHistory>>({});
237
-
238
- const modifiedFiles = Array.from(useStore(workbenchStore.unsavedFiles).keys());
239
 
240
  const hasPreview = useStore(computed(workbenchStore.previews, (previews) => previews.length > 0));
241
  const showWorkbench = useStore(workbenchStore.showWorkbench);
@@ -298,15 +121,6 @@ export const Workbench = memo(({
298
  }
299
  }, []);
300
 
301
- const handleSelectFile = useCallback((filePath: string) => {
302
- workbenchStore.setSelectedFile(filePath);
303
- workbenchStore.currentView.set('diff');
304
- }, []);
305
-
306
- const toggleDiffViewMode = useCallback(() => {
307
- setDiffViewMode(prev => prev === 'inline' ? 'side' : 'inline');
308
- }, []);
309
-
310
  return (
311
  chatStarted && (
312
  <motion.div
@@ -361,14 +175,6 @@ export const Workbench = memo(({
361
  </PanelHeaderButton>
362
  </div>
363
  )}
364
- {selectedView === 'diff' && (
365
- <FileModifiedDropdown
366
- fileHistory={fileHistory}
367
- onSelectFile={handleSelectFile}
368
- diffViewMode={diffViewMode}
369
- toggleDiffViewMode={toggleDiffViewMode}
370
- />
371
- )}
372
  <IconButton
373
  icon="i-ph:x-circle"
374
  className="-mr-1"
@@ -380,8 +186,8 @@ export const Workbench = memo(({
380
  </div>
381
  <div className="relative flex-1 overflow-hidden">
382
  <View
383
- initial={{ x: '0%' }}
384
- animate={{ x: selectedView === 'code' ? '0%' : '-100%' }}
385
  >
386
  <EditorPanel
387
  editorDocument={currentDocument}
@@ -397,19 +203,8 @@ export const Workbench = memo(({
397
  />
398
  </View>
399
  <View
400
- initial={{ x: '100%' }}
401
- animate={{ x: selectedView === 'diff' ? '0%' : selectedView === 'code' ? '100%' : '-100%' }}
402
- >
403
- <DiffView
404
- fileHistory={fileHistory}
405
- setFileHistory={setFileHistory}
406
- diffViewMode={diffViewMode}
407
- actionRunner={actionRunner}
408
- />
409
- </View>
410
- <View
411
- initial={{ x: '100%' }}
412
- animate={{ x: selectedView === 'preview' ? '0%' : '100%' }}
413
  >
414
  <Preview />
415
  </View>
@@ -420,24 +215,14 @@ export const Workbench = memo(({
420
  <PushToGitHubDialog
421
  isOpen={isPushDialogOpen}
422
  onClose={() => setIsPushDialogOpen(false)}
423
- onPush={async (repoName, username, token) => {
424
  try {
425
- const commitMessage = prompt('Please enter a commit message:', 'Initial commit') || 'Initial commit';
426
- await workbenchStore.pushToGitHub(repoName, commitMessage, username, token);
427
- const repoUrl = `https://github.com/${username}/${repoName}`;
428
-
429
- if (updateChatMestaData && !metadata?.gitUrl) {
430
- updateChatMestaData({
431
- ...(metadata || {}),
432
- gitUrl: repoUrl,
433
- });
434
- }
435
-
436
  return repoUrl;
437
  } catch (error) {
438
  console.error('Error pushing to GitHub:', error);
439
  toast.error('Failed to push to GitHub');
440
- throw error;
441
  }
442
  }}
443
  />
 
1
  import { useStore } from '@nanostores/react';
2
  import { motion, type HTMLMotionProps, type Variants } from 'framer-motion';
3
  import { computed } from 'nanostores';
4
+ import { memo, useCallback, useEffect, useState } from 'react';
5
  import { toast } from 'react-toastify';
 
 
 
 
 
 
 
6
  import {
7
  type OnChangeCallback as OnEditorChange,
8
  type OnScrollCallback as OnEditorScroll,
 
18
  import { Preview } from './Preview';
19
  import useViewport from '~/lib/hooks';
20
  import { PushToGitHubDialog } from '~/components/@settings/tabs/connections/components/PushToGitHubDialog';
 
21
 
22
  interface WorkspaceProps {
23
  chatStarted?: boolean;
24
  isStreaming?: boolean;
 
 
 
 
 
25
  }
26
 
27
  const viewTransition = { ease: cubicEasingFn };
 
31
  value: 'code',
32
  text: 'Code',
33
  },
 
 
 
 
34
  right: {
35
  value: 'preview',
36
  text: 'Preview',
 
54
  },
55
  } satisfies Variants;
56
 
57
+ export const Workbench = memo(({ chatStarted, isStreaming }: WorkspaceProps) => {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  renderLogger.trace('Workbench');
59
 
60
  const [isSyncing, setIsSyncing] = useState(false);
61
  const [isPushDialogOpen, setIsPushDialogOpen] = useState(false);
 
 
 
 
62
 
63
  const hasPreview = useStore(computed(workbenchStore.previews, (previews) => previews.length > 0));
64
  const showWorkbench = useStore(workbenchStore.showWorkbench);
 
121
  }
122
  }, []);
123
 
 
 
 
 
 
 
 
 
 
124
  return (
125
  chatStarted && (
126
  <motion.div
 
175
  </PanelHeaderButton>
176
  </div>
177
  )}
 
 
 
 
 
 
 
 
178
  <IconButton
179
  icon="i-ph:x-circle"
180
  className="-mr-1"
 
186
  </div>
187
  <div className="relative flex-1 overflow-hidden">
188
  <View
189
+ initial={{ x: selectedView === 'code' ? 0 : '-100%' }}
190
+ animate={{ x: selectedView === 'code' ? 0 : '-100%' }}
191
  >
192
  <EditorPanel
193
  editorDocument={currentDocument}
 
203
  />
204
  </View>
205
  <View
206
+ initial={{ x: selectedView === 'preview' ? 0 : '100%' }}
207
+ animate={{ x: selectedView === 'preview' ? 0 : '100%' }}
 
 
 
 
 
 
 
 
 
 
 
208
  >
209
  <Preview />
210
  </View>
 
215
  <PushToGitHubDialog
216
  isOpen={isPushDialogOpen}
217
  onClose={() => setIsPushDialogOpen(false)}
218
+ onPush={async (repoName, username, token, isPrivate) => {
219
  try {
220
+ const repoUrl = await workbenchStore.pushToGitHub(repoName, undefined, username, token, isPrivate);
 
 
 
 
 
 
 
 
 
 
221
  return repoUrl;
222
  } catch (error) {
223
  console.error('Error pushing to GitHub:', error);
224
  toast.error('Failed to push to GitHub');
225
+ throw error; // Rethrow to let PushToGitHubDialog handle the error state
226
  }
227
  }}
228
  />
app/lib/runtime/action-runner.ts CHANGED
@@ -1,7 +1,7 @@
1
  import type { WebContainer } from '@webcontainer/api';
2
- import { path as nodePath } from '~/utils/path';
3
  import { atom, map, type MapStore } from 'nanostores';
4
- import type { ActionAlert, BoltAction, FileHistory } from '~/types/actions';
5
  import { createScopedLogger } from '~/utils/logger';
6
  import { unreachable } from '~/utils/unreachable';
7
  import type { ActionCallbackData } from './message-parser';
@@ -276,9 +276,9 @@ export class ActionRunner {
276
  }
277
 
278
  const webcontainer = await this.#webcontainer;
279
- const relativePath = nodePath.relative(webcontainer.workdir, action.filePath);
280
 
281
- let folder = nodePath.dirname(relativePath);
282
 
283
  // remove trailing slashes
284
  folder = folder.replace(/\/+$/g, '');
@@ -304,31 +304,4 @@ export class ActionRunner {
304
 
305
  this.actions.setKey(id, { ...actions[id], ...newState });
306
  }
307
-
308
- async getFileHistory(filePath: string): Promise<FileHistory | null> {
309
- try {
310
- const webcontainer = await this.#webcontainer;
311
- const historyPath = this.#getHistoryPath(filePath);
312
- const content = await webcontainer.fs.readFile(historyPath, 'utf-8');
313
- return JSON.parse(content);
314
- } catch (error) {
315
- return null;
316
- }
317
- }
318
-
319
- async saveFileHistory(filePath: string, history: FileHistory) {
320
- const webcontainer = await this.#webcontainer;
321
- const historyPath = this.#getHistoryPath(filePath);
322
-
323
- await this.#runFileAction({
324
- type: 'file',
325
- filePath: historyPath,
326
- content: JSON.stringify(history),
327
- changeSource: 'auto-save'
328
- } as any);
329
- }
330
-
331
- #getHistoryPath(filePath: string) {
332
- return nodePath.join('.history', filePath);
333
- }
334
  }
 
1
  import type { WebContainer } from '@webcontainer/api';
2
+ import { path } from '~/utils/path';
3
  import { atom, map, type MapStore } from 'nanostores';
4
+ import type { ActionAlert, BoltAction } from '~/types/actions';
5
  import { createScopedLogger } from '~/utils/logger';
6
  import { unreachable } from '~/utils/unreachable';
7
  import type { ActionCallbackData } from './message-parser';
 
276
  }
277
 
278
  const webcontainer = await this.#webcontainer;
279
+ const relativePath = path.relative(webcontainer.workdir, action.filePath);
280
 
281
+ let folder = path.dirname(relativePath);
282
 
283
  // remove trailing slashes
284
  folder = folder.replace(/\/+$/g, '');
 
304
 
305
  this.actions.setKey(id, { ...actions[id], ...newState });
306
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  }
app/lib/stores/workbench.ts CHANGED
@@ -10,16 +10,18 @@ import { FilesStore, type FileMap } from './files';
10
  import { PreviewsStore } from './previews';
11
  import { TerminalStore } from './terminal';
12
  import JSZip from 'jszip';
13
- import pkg from 'file-saver';
14
- const { saveAs } = pkg;
15
  import { Octokit, type RestEndpointMethodTypes } from '@octokit/rest';
16
- import * as nodePath from 'node:path';
17
  import { extractRelativePath } from '~/utils/diff';
18
  import { description } from '~/lib/persistence';
19
  import Cookies from 'js-cookie';
20
  import { createSampler } from '~/utils/sampler';
21
  import type { ActionAlert } from '~/types/actions';
22
 
 
 
 
23
  export interface ArtifactState {
24
  id: string;
25
  title: string;
@@ -32,7 +34,7 @@ export type ArtifactUpdateState = Pick<ArtifactState, 'title' | 'closed'>;
32
 
33
  type Artifacts = MapStore<Record<string, ArtifactState>>;
34
 
35
- export type WorkbenchViewType = 'code' | 'diff' | 'preview';
36
 
37
  export class WorkbenchStore {
38
  #previewsStore = new PreviewsStore(webcontainer);
@@ -330,7 +332,7 @@ export class WorkbenchStore {
330
 
331
  if (data.action.type === 'file') {
332
  const wc = await webcontainer;
333
- const fullPath = nodePath.join(wc.workdir, data.action.filePath);
334
 
335
  if (this.selectedFile.value !== fullPath) {
336
  this.setSelectedFile(fullPath);
@@ -435,7 +437,13 @@ export class WorkbenchStore {
435
  return syncedFiles;
436
  }
437
 
438
- async pushToGitHub(repoName: string, commitMessage?: string, githubUsername?: string, ghToken?: string) {
 
 
 
 
 
 
439
  try {
440
  // Use cookies if username and token are not provided
441
  const githubToken = ghToken || Cookies.get('githubToken');
@@ -459,7 +467,7 @@ export class WorkbenchStore {
459
  // Repository doesn't exist, so create a new one
460
  const { data: newRepo } = await octokit.repos.createForAuthenticatedUser({
461
  name: repoName,
462
- private: false,
463
  auto_init: true,
464
  });
465
  repo = newRepo;
@@ -537,7 +545,7 @@ export class WorkbenchStore {
537
  sha: newCommit.sha,
538
  });
539
 
540
- alert(`Repository created and code pushed: ${repo.html_url}`);
541
  } catch (error) {
542
  console.error('Error pushing to GitHub:', error);
543
  throw error; // Rethrow the error for further handling
 
10
  import { PreviewsStore } from './previews';
11
  import { TerminalStore } from './terminal';
12
  import JSZip from 'jszip';
13
+ import fileSaver from 'file-saver';
 
14
  import { Octokit, type RestEndpointMethodTypes } from '@octokit/rest';
15
+ import { path } from '~/utils/path';
16
  import { extractRelativePath } from '~/utils/diff';
17
  import { description } from '~/lib/persistence';
18
  import Cookies from 'js-cookie';
19
  import { createSampler } from '~/utils/sampler';
20
  import type { ActionAlert } from '~/types/actions';
21
 
22
+ // Destructure saveAs from the CommonJS module
23
+ const { saveAs } = fileSaver;
24
+
25
  export interface ArtifactState {
26
  id: string;
27
  title: string;
 
34
 
35
  type Artifacts = MapStore<Record<string, ArtifactState>>;
36
 
37
+ export type WorkbenchViewType = 'code' | 'preview';
38
 
39
  export class WorkbenchStore {
40
  #previewsStore = new PreviewsStore(webcontainer);
 
332
 
333
  if (data.action.type === 'file') {
334
  const wc = await webcontainer;
335
+ const fullPath = path.join(wc.workdir, data.action.filePath);
336
 
337
  if (this.selectedFile.value !== fullPath) {
338
  this.setSelectedFile(fullPath);
 
437
  return syncedFiles;
438
  }
439
 
440
+ async pushToGitHub(
441
+ repoName: string,
442
+ commitMessage?: string,
443
+ githubUsername?: string,
444
+ ghToken?: string,
445
+ isPrivate: boolean = false,
446
+ ) {
447
  try {
448
  // Use cookies if username and token are not provided
449
  const githubToken = ghToken || Cookies.get('githubToken');
 
467
  // Repository doesn't exist, so create a new one
468
  const { data: newRepo } = await octokit.repos.createForAuthenticatedUser({
469
  name: repoName,
470
+ private: isPrivate,
471
  auto_init: true,
472
  });
473
  repo = newRepo;
 
545
  sha: newCommit.sha,
546
  });
547
 
548
+ return repo.html_url; // Return the URL instead of showing alert
549
  } catch (error) {
550
  console.error('Error pushing to GitHub:', error);
551
  throw error; // Rethrow the error for further handling
app/styles/diff-view.css DELETED
@@ -1,72 +0,0 @@
1
- .diff-panel-content {
2
- scrollbar-width: thin;
3
- scrollbar-color: rgba(155, 155, 155, 0.5) transparent;
4
- }
5
-
6
- .diff-panel-content::-webkit-scrollbar {
7
- width: 8px;
8
- height: 8px;
9
- }
10
-
11
- .diff-panel-content::-webkit-scrollbar-track {
12
- background: transparent;
13
- }
14
-
15
- .diff-panel-content::-webkit-scrollbar-thumb {
16
- background-color: rgba(155, 155, 155, 0.5);
17
- border-radius: 4px;
18
- border: 2px solid transparent;
19
- }
20
-
21
- .diff-panel-content::-webkit-scrollbar-thumb:hover {
22
- background-color: rgba(155, 155, 155, 0.7);
23
- }
24
-
25
- /* Hide scrollbar for the left panel when not hovered */
26
- .diff-panel:not(:hover) .diff-panel-content::-webkit-scrollbar {
27
- display: none;
28
- }
29
-
30
- .diff-panel:not(:hover) .diff-panel-content {
31
- scrollbar-width: none;
32
- }
33
-
34
- /* Estilos para as linhas de diff */
35
- .diff-block-added {
36
- @apply bg-green-500/20 border-l-4 border-green-500;
37
- }
38
-
39
- .diff-block-removed {
40
- @apply bg-red-500/20 border-l-4 border-red-500;
41
- }
42
-
43
- /* Melhorar contraste para mudanças */
44
- .diff-panel-content .group:hover .diff-block-added {
45
- @apply bg-green-500/30;
46
- }
47
-
48
- .diff-panel-content .group:hover .diff-block-removed {
49
- @apply bg-red-500/30;
50
- }
51
-
52
- /* Estilos unificados para ambas as visualizações */
53
- .diff-line {
54
- @apply flex group min-w-fit transition-colors duration-150;
55
- }
56
-
57
- .diff-line-number {
58
- @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;
59
- }
60
-
61
- .diff-line-content {
62
- @apply px-4 py-0.5 font-mono whitespace-pre flex-1 group-hover:bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary;
63
- }
64
-
65
- /* Cores específicas para adições/remoções */
66
- .diff-added {
67
- @apply bg-green-500/20 border-l-4 border-green-500;
68
- }
69
-
70
- .diff-removed {
71
- @apply bg-red-500/20 border-l-4 border-red-500;
72
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/types/actions.ts CHANGED
@@ -1,5 +1,3 @@
1
- import type { Change } from 'diff';
2
-
3
  export type ActionType = 'file' | 'shell';
4
 
5
  export interface BaseAction {
@@ -30,15 +28,3 @@ export interface ActionAlert {
30
  content: string;
31
  source?: 'terminal' | 'preview'; // Add source to differentiate between terminal and preview errors
32
  }
33
-
34
- export interface FileHistory {
35
- originalContent: string;
36
- lastModified: number;
37
- changes: Change[];
38
- versions: {
39
- timestamp: number;
40
- content: string;
41
- }[];
42
- // Novo campo para rastrear a origem das mudanças
43
- changeSource?: 'user' | 'auto-save' | 'external';
44
- }
 
 
 
1
  export type ActionType = 'file' | 'shell';
2
 
3
  export interface BaseAction {
 
28
  content: string;
29
  source?: 'terminal' | 'preview'; // Add source to differentiate between terminal and preview errors
30
  }
 
 
 
 
 
 
 
 
 
 
 
 
app/utils/getLanguageFromExtension.ts DELETED
@@ -1,24 +0,0 @@
1
- export const getLanguageFromExtension = (ext: string): string => {
2
- const map: Record<string, string> = {
3
- js: "javascript",
4
- jsx: "jsx",
5
- ts: "typescript",
6
- tsx: "tsx",
7
- json: "json",
8
- html: "html",
9
- css: "css",
10
- py: "python",
11
- java: "java",
12
- rb: "ruby",
13
- cpp: "cpp",
14
- c: "c",
15
- cs: "csharp",
16
- go: "go",
17
- rs: "rust",
18
- php: "php",
19
- swift: "swift",
20
- md: "plaintext",
21
- sh: "bash",
22
- };
23
- return map[ext] || "typescript";
24
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package.json CHANGED
@@ -74,8 +74,6 @@
74
  "@radix-ui/react-switch": "^1.1.1",
75
  "@radix-ui/react-tabs": "^1.1.2",
76
  "@radix-ui/react-tooltip": "^1.1.4",
77
- "lucide-react": "^0.474.0",
78
- "next-themes": "^0.4.4",
79
  "@remix-run/cloudflare": "^2.15.2",
80
  "@remix-run/cloudflare-pages": "^2.15.2",
81
  "@remix-run/node": "^2.15.2",
 
74
  "@radix-ui/react-switch": "^1.1.1",
75
  "@radix-ui/react-tabs": "^1.1.2",
76
  "@radix-ui/react-tooltip": "^1.1.4",
 
 
77
  "@remix-run/cloudflare": "^2.15.2",
78
  "@remix-run/cloudflare-pages": "^2.15.2",
79
  "@remix-run/node": "^2.15.2",
pnpm-lock.yaml CHANGED
@@ -82,7 +82,7 @@ importers:
82
  version: 6.36.2
83
  '@headlessui/react':
84
  specifier: ^2.2.0
85
86
  '@iconify-json/svg-spinners':
87
  specifier: ^1.2.1
88
  version: 1.2.2
@@ -103,43 +103,43 @@ importers:
103
  version: 0.0.5([email protected])
104
  '@phosphor-icons/react':
105
  specifier: ^2.1.7
106
107
  '@radix-ui/react-collapsible':
108
  specifier: ^1.0.3
109
110
  '@radix-ui/react-context-menu':
111
  specifier: ^2.2.2
112
113
  '@radix-ui/react-dialog':
114
  specifier: ^1.1.5
115
116
  '@radix-ui/react-dropdown-menu':
117
  specifier: ^2.1.6
118
119
  '@radix-ui/react-label':
120
  specifier: ^2.1.1
121
122
  '@radix-ui/react-popover':
123
  specifier: ^1.1.5
124
125
  '@radix-ui/react-progress':
126
  specifier: ^1.0.3
127
128
  '@radix-ui/react-scroll-area':
129
  specifier: ^1.2.2
130
131
  '@radix-ui/react-separator':
132
  specifier: ^1.1.0
133
134
  '@radix-ui/react-switch':
135
  specifier: ^1.1.1
136
137
  '@radix-ui/react-tabs':
138
  specifier: ^1.1.2
139
140
  '@radix-ui/react-tooltip':
141
  specifier: ^1.1.4
142
143
  '@remix-run/cloudflare':
144
  specifier: ^2.15.2
145
  version: 2.15.3(@cloudflare/[email protected])([email protected])
@@ -151,7 +151,7 @@ importers:
151
  version: 2.15.3([email protected])
152
  '@remix-run/react':
153
  specifier: ^2.15.2
154
155
  '@types/react-beautiful-dnd':
156
  specifier: ^13.1.8
157
  version: 13.1.8
@@ -202,7 +202,7 @@ importers:
202
  version: 2.0.5
203
  framer-motion:
204
  specifier: ^11.12.0
205
206
  ignore:
207
  specifier: ^6.0.2
208
  version: 6.0.2
@@ -227,15 +227,9 @@ importers:
227
  jszip:
228
  specifier: ^3.10.1
229
  version: 3.10.1
230
- lucide-react:
231
- specifier: ^0.474.0
232
- version: 0.474.0([email protected])
233
  nanostores:
234
  specifier: ^0.10.3
235
  version: 0.10.3
236
- next-themes:
237
- specifier: ^0.4.4
238
239
  ollama-ai-provider:
240
  specifier: ^0.15.2
241
  version: 0.15.2([email protected])
@@ -247,13 +241,13 @@ importers:
247
  version: 18.3.1
248
  react-beautiful-dnd:
249
  specifier: ^13.1.1
250
251
  react-chartjs-2:
252
  specifier: ^5.3.0
253
254
  react-dnd:
255
  specifier: ^16.0.1
256
- version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/[email protected])(@types/react@18.3.18)([email protected])
257
  react-dnd-html5-backend:
258
  specifier: ^16.0.1
259
  version: 16.0.1
@@ -262,7 +256,7 @@ importers:
262
  version: 18.3.1([email protected])
263
  react-hotkeys-hook:
264
  specifier: ^4.6.1
265
266
  react-icons:
267
  specifier: ^5.4.0
268
  version: 5.4.0([email protected])
@@ -271,10 +265,10 @@ importers:
271
  version: 9.0.3(@types/[email protected])([email protected])
272
  react-resizable-panels:
273
  specifier: ^2.1.7
274
275
  react-toastify:
276
  specifier: ^10.0.6
277
278
  rehype-raw:
279
  specifier: ^7.0.0
280
  version: 7.0.0
@@ -286,10 +280,10 @@ importers:
286
  version: 4.0.1
287
  remix-island:
288
  specifier: ^0.2.0
289
290
  remix-utils:
291
  specifier: ^7.7.0
292
293
  shiki:
294
  specifier: ^1.24.0
295
  version: 1.29.2
@@ -301,11 +295,11 @@ importers:
301
  version: 5.0.0
302
  zustand:
303
  specifier: ^5.0.3
304
305
  devDependencies:
306
  '@blitz/eslint-plugin':
307
  specifier: 0.1.0
308
309
  '@cloudflare/workers-types':
310
  specifier: ^4.20241127.0
311
  version: 4.20250204.0
@@ -317,7 +311,7 @@ importers:
317
  version: 2.0.0
318
  '@remix-run/dev':
319
  specifier: ^2.15.2
320
321
  '@types/diff':
322
  specifier: ^5.2.3
323
  version: 5.2.3
@@ -368,22 +362,22 @@ importers:
368
  version: 11.0.5
369
  unocss:
370
  specifier: ^0.61.9
371
372
  vite:
373
  specifier: ^5.4.11
374
- version: 5.4.14(@types/[email protected])([email protected])
375
  vite-plugin-node-polyfills:
376
  specifier: ^0.22.0
377
378
  vite-plugin-optimize-css-modules:
379
  specifier: ^1.1.0
380
381
  vite-tsconfig-paths:
382
  specifier: ^4.3.2
383
384
  vitest:
385
  specifier: ^2.1.7
386
- version: 2.1.9(@types/[email protected])([email protected])
387
  wrangler:
388
  specifier: ^3.91.0
389
  version: 3.108.0(@cloudflare/[email protected])
@@ -4542,11 +4536,6 @@ packages:
4542
  resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
4543
  engines: {node: '>=12'}
4544
 
4545
4546
- resolution: {integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==}
4547
- peerDependencies:
4548
- react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
4549
-
4550
4551
  resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
4552
 
@@ -4997,12 +4986,6 @@ packages:
4997
  resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
4998
  engines: {node: '>= 0.6'}
4999
 
5000
5001
- resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==}
5002
- peerDependencies:
5003
- react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
5004
- react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
5005
-
5006
5007
  resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
5008
  engines: {node: '>=10.5.0'}
@@ -6750,7 +6733,6 @@ snapshots:
6750
  eventsource-parser: 1.1.2
6751
  nanoid: 3.3.6
6752
  secure-json-parse: 2.7.0
6753
- optionalDependencies:
6754
  zod: 3.24.1
6755
 
6756
@@ -6759,7 +6741,6 @@ snapshots:
6759
  eventsource-parser: 1.1.2
6760
  nanoid: 3.3.6
6761
  secure-json-parse: 2.7.0
6762
- optionalDependencies:
6763
  zod: 3.24.1
6764
 
6765
@@ -6768,7 +6749,6 @@ snapshots:
6768
  eventsource-parser: 1.1.2
6769
  nanoid: 3.3.6
6770
  secure-json-parse: 2.7.0
6771
- optionalDependencies:
6772
  zod: 3.24.1
6773
 
6774
@@ -6777,7 +6757,6 @@ snapshots:
6777
  eventsource-parser: 3.0.0
6778
  nanoid: 3.3.8
6779
  secure-json-parse: 2.7.0
6780
- optionalDependencies:
6781
  zod: 3.24.1
6782
 
6783
@@ -6786,7 +6765,6 @@ snapshots:
6786
  eventsource-parser: 3.0.0
6787
  nanoid: 3.3.8
6788
  secure-json-parse: 2.7.0
6789
- optionalDependencies:
6790
  zod: 3.24.1
6791
 
6792
  '@ai-sdk/[email protected]':
@@ -6813,19 +6791,17 @@ snapshots:
6813
  dependencies:
6814
  '@ai-sdk/provider-utils': 2.1.6([email protected])
6815
  '@ai-sdk/ui-utils': 1.1.11([email protected])
 
6816
  swr: 2.3.2([email protected])
6817
  throttleit: 2.1.0
6818
- optionalDependencies:
6819
- react: 18.3.1
6820
  zod: 3.24.1
6821
 
6822
6823
  dependencies:
6824
  '@ai-sdk/provider': 1.0.7
6825
  '@ai-sdk/provider-utils': 2.1.6([email protected])
6826
- zod-to-json-schema: 3.24.1([email protected])
6827
- optionalDependencies:
6828
  zod: 3.24.1
 
6829
 
6830
  '@ampproject/[email protected]':
6831
  dependencies:
@@ -7387,19 +7363,19 @@ snapshots:
7387
  '@babel/helper-string-parser': 7.25.9
7388
  '@babel/helper-validator-identifier': 7.25.9
7389
 
7390
7391
  dependencies:
7392
- '@stylistic/eslint-plugin-ts': 2.13.0([email protected]([email protected]))([email protected])
7393
7394
- '@typescript-eslint/parser': 8.24.0([email protected]([email protected]))([email protected])
7395
- '@typescript-eslint/utils': 8.24.0([email protected]([email protected]))([email protected])
7396
  common-tags: 1.8.2
7397
- eslint: 9.20.1([email protected])
7398
- eslint-config-prettier: 9.1.0([email protected]([email protected]))
7399
- eslint-plugin-jsonc: 2.19.1([email protected]([email protected]))
7400
7401
  globals: 15.14.0
7402
7403
  transitivePeerDependencies:
7404
  - '@eslint/json'
7405
  - '@types/eslint'
@@ -7856,9 +7832,9 @@ snapshots:
7856
  '@esbuild/[email protected]':
7857
  optional: true
7858
 
7859
7860
  dependencies:
7861
- eslint: 9.20.1([email protected])
7862
  eslint-visitor-keys: 3.4.3
7863
 
7864
  '@eslint-community/[email protected]': {}
@@ -7913,15 +7889,15 @@ snapshots:
7913
  '@floating-ui/core': 1.6.9
7914
  '@floating-ui/utils': 0.2.9
7915
 
7916
7917
  dependencies:
7918
  '@floating-ui/dom': 1.6.13
7919
  react: 18.3.1
7920
  react-dom: 18.3.1([email protected])
7921
 
7922
7923
  dependencies:
7924
- '@floating-ui/react-dom': 2.1.2([email protected]([email protected]))([email protected])
7925
  '@floating-ui/utils': 0.2.9
7926
  react: 18.3.1
7927
  react-dom: 18.3.1([email protected])
@@ -7929,12 +7905,12 @@ snapshots:
7929
 
7930
  '@floating-ui/[email protected]': {}
7931
 
7932
7933
  dependencies:
7934
- '@floating-ui/react': 0.26.28([email protected]([email protected]))([email protected])
7935
- '@react-aria/focus': 3.19.1([email protected]([email protected]))([email protected])
7936
- '@react-aria/interactions': 3.23.0([email protected]([email protected]))([email protected])
7937
- '@tanstack/react-virtual': 3.13.0([email protected]([email protected]))([email protected])
7938
  react: 18.3.1
7939
  react-dom: 18.3.1([email protected])
7940
 
@@ -8295,7 +8271,7 @@ snapshots:
8295
 
8296
  '@opentelemetry/[email protected]': {}
8297
 
8298
8299
  dependencies:
8300
  react: 18.3.1
8301
  react-dom: 18.3.1([email protected])
@@ -8311,436 +8287,400 @@ snapshots:
8311
 
8312
  '@radix-ui/[email protected]': {}
8313
 
8314
8315
  dependencies:
8316
8317
- react: 18.3.1
8318
- react-dom: 18.3.1([email protected])
8319
- optionalDependencies:
8320
  '@types/react': 18.3.18
8321
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8322
 
8323
8324
  dependencies:
8325
  '@radix-ui/primitive': 1.1.1
8326
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8327
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8328
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8329
8330
8331
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8332
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8333
- react: 18.3.1
8334
- react-dom: 18.3.1([email protected])
8335
- optionalDependencies:
8336
  '@types/react': 18.3.18
8337
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8338
 
8339
8340
  dependencies:
8341
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8342
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8343
8344
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8345
- react: 18.3.1
8346
- react-dom: 18.3.1([email protected])
8347
- optionalDependencies:
8348
  '@types/react': 18.3.18
8349
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8350
 
8351
8352
  dependencies:
8353
- react: 18.3.1
8354
- optionalDependencies:
8355
  '@types/react': 18.3.18
 
8356
 
8357
8358
  dependencies:
8359
  '@radix-ui/primitive': 1.1.1
8360
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8361
8362
8363
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8364
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8365
- react: 18.3.1
8366
- react-dom: 18.3.1([email protected])
8367
- optionalDependencies:
8368
  '@types/react': 18.3.18
8369
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8370
 
8371
8372
  dependencies:
8373
- react: 18.3.1
8374
- optionalDependencies:
8375
  '@types/react': 18.3.18
 
8376
 
8377
8378
  dependencies:
8379
  '@radix-ui/primitive': 1.1.1
8380
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8381
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8382
- '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8383
  '@radix-ui/react-focus-guards': 1.1.1(@types/[email protected])([email protected])
8384
- '@radix-ui/react-focus-scope': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8385
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8386
8387
8388
8389
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8390
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
 
 
8391
  aria-hidden: 1.2.4
8392
  react: 18.3.1
8393
  react-dom: 18.3.1([email protected])
8394
  react-remove-scroll: 2.6.3(@types/[email protected])([email protected])
8395
- optionalDependencies:
8396
- '@types/react': 18.3.18
8397
- '@types/react-dom': 18.3.5(@types/[email protected])
8398
 
8399
8400
  dependencies:
8401
- react: 18.3.1
8402
- optionalDependencies:
8403
  '@types/react': 18.3.18
 
8404
 
8405
8406
  dependencies:
8407
  '@radix-ui/primitive': 1.1.1
8408
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8409
8410
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8411
  '@radix-ui/react-use-escape-keydown': 1.1.0(@types/[email protected])([email protected])
8412
- react: 18.3.1
8413
- react-dom: 18.3.1([email protected])
8414
- optionalDependencies:
8415
  '@types/react': 18.3.18
8416
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8417
 
8418
8419
  dependencies:
8420
  '@radix-ui/primitive': 1.1.1
8421
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8422
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8423
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8424
8425
8426
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8427
- react: 18.3.1
8428
- react-dom: 18.3.1([email protected])
8429
- optionalDependencies:
8430
  '@types/react': 18.3.18
8431
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8432
 
8433
8434
  dependencies:
8435
- react: 18.3.1
8436
- optionalDependencies:
8437
  '@types/react': 18.3.18
 
8438
 
8439
8440
  dependencies:
8441
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8442
8443
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8444
- react: 18.3.1
8445
- react-dom: 18.3.1([email protected])
8446
- optionalDependencies:
8447
  '@types/react': 18.3.18
8448
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8449
 
8450
8451
  dependencies:
8452
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8453
- react: 18.3.1
8454
- optionalDependencies:
8455
  '@types/react': 18.3.18
 
8456
 
8457
8458
  dependencies:
8459
8460
- react: 18.3.1
8461
- react-dom: 18.3.1([email protected])
8462
- optionalDependencies:
8463
  '@types/react': 18.3.18
8464
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8465
 
8466
8467
  dependencies:
8468
  '@radix-ui/primitive': 1.1.1
8469
- '@radix-ui/react-collection': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8470
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8471
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8472
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8473
- '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8474
  '@radix-ui/react-focus-guards': 1.1.1(@types/[email protected])([email protected])
8475
- '@radix-ui/react-focus-scope': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8476
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8477
8478
8479
8480
8481
- '@radix-ui/react-roving-focus': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8482
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8483
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
 
 
8484
  aria-hidden: 1.2.4
8485
  react: 18.3.1
8486
  react-dom: 18.3.1([email protected])
8487
  react-remove-scroll: 2.6.3(@types/[email protected])([email protected])
8488
- optionalDependencies:
8489
- '@types/react': 18.3.18
8490
- '@types/react-dom': 18.3.5(@types/[email protected])
8491
 
8492
8493
  dependencies:
8494
  '@radix-ui/primitive': 1.1.1
8495
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8496
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8497
- '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8498
  '@radix-ui/react-focus-guards': 1.1.1(@types/[email protected])([email protected])
8499
- '@radix-ui/react-focus-scope': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8500
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8501
8502
8503
8504
8505
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8506
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
 
 
8507
  aria-hidden: 1.2.4
8508
  react: 18.3.1
8509
  react-dom: 18.3.1([email protected])
8510
  react-remove-scroll: 2.6.3(@types/[email protected])([email protected])
8511
- optionalDependencies:
8512
- '@types/react': 18.3.18
8513
- '@types/react-dom': 18.3.5(@types/[email protected])
8514
 
8515
8516
  dependencies:
8517
- '@floating-ui/react-dom': 2.1.2([email protected]([email protected]))([email protected])
8518
8519
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8520
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8521
8522
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8523
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8524
  '@radix-ui/react-use-rect': 1.1.0(@types/[email protected])([email protected])
8525
  '@radix-ui/react-use-size': 1.1.0(@types/[email protected])([email protected])
8526
  '@radix-ui/rect': 1.1.0
8527
- react: 18.3.1
8528
- react-dom: 18.3.1([email protected])
8529
- optionalDependencies:
8530
  '@types/react': 18.3.18
8531
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8532
 
8533
8534
  dependencies:
8535
8536
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8537
- react: 18.3.1
8538
- react-dom: 18.3.1([email protected])
8539
- optionalDependencies:
8540
  '@types/react': 18.3.18
8541
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8542
 
8543
8544
  dependencies:
8545
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8546
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8547
- react: 18.3.1
8548
- react-dom: 18.3.1([email protected])
8549
- optionalDependencies:
8550
  '@types/react': 18.3.18
8551
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8552
 
8553
8554
  dependencies:
8555
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8556
- react: 18.3.1
8557
- react-dom: 18.3.1([email protected])
8558
- optionalDependencies:
8559
  '@types/react': 18.3.18
8560
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8561
 
8562
8563
  dependencies:
8564
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8565
8566
- react: 18.3.1
8567
- react-dom: 18.3.1([email protected])
8568
- optionalDependencies:
8569
  '@types/react': 18.3.18
8570
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8571
 
8572
8573
  dependencies:
8574
  '@radix-ui/primitive': 1.1.1
8575
- '@radix-ui/react-collection': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8576
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8577
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8578
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8579
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8580
8581
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8582
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8583
- react: 18.3.1
8584
- react-dom: 18.3.1([email protected])
8585
- optionalDependencies:
8586
  '@types/react': 18.3.18
8587
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8588
 
8589
8590
  dependencies:
8591
  '@radix-ui/number': 1.1.0
8592
  '@radix-ui/primitive': 1.1.1
8593
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8594
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8595
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8596
8597
8598
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8599
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8600
- react: 18.3.1
8601
- react-dom: 18.3.1([email protected])
8602
- optionalDependencies:
8603
  '@types/react': 18.3.18
8604
  '@types/react-dom': 18.3.5(@types/[email protected])
8605
-
8606
8607
- dependencies:
8608
8609
  react: 18.3.1
8610
  react-dom: 18.3.1([email protected])
8611
- optionalDependencies:
 
 
 
8612
  '@types/react': 18.3.18
8613
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8614
 
8615
8616
  dependencies:
8617
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8618
- react: 18.3.1
8619
- optionalDependencies:
8620
  '@types/react': 18.3.18
 
8621
 
8622
8623
  dependencies:
8624
  '@radix-ui/primitive': 1.1.1
8625
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8626
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8627
8628
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8629
  '@radix-ui/react-use-previous': 1.1.0(@types/[email protected])([email protected])
8630
  '@radix-ui/react-use-size': 1.1.0(@types/[email protected])([email protected])
8631
- react: 18.3.1
8632
- react-dom: 18.3.1([email protected])
8633
- optionalDependencies:
8634
  '@types/react': 18.3.18
8635
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8636
 
8637
8638
  dependencies:
8639
  '@radix-ui/primitive': 1.1.1
8640
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8641
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8642
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8643
8644
8645
- '@radix-ui/react-roving-focus': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8646
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8647
- react: 18.3.1
8648
- react-dom: 18.3.1([email protected])
8649
- optionalDependencies:
8650
  '@types/react': 18.3.18
8651
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8652
 
8653
8654
  dependencies:
8655
  '@radix-ui/primitive': 1.1.1
8656
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8657
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8658
- '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8659
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8660
8661
8662
8663
8664
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8665
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8666
- '@radix-ui/react-visually-hidden': 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
8667
- react: 18.3.1
8668
- react-dom: 18.3.1([email protected])
8669
- optionalDependencies:
8670
  '@types/react': 18.3.18
8671
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8672
 
8673
8674
  dependencies:
8675
- react: 18.3.1
8676
- optionalDependencies:
8677
  '@types/react': 18.3.18
 
8678
 
8679
8680
  dependencies:
8681
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8682
- react: 18.3.1
8683
- optionalDependencies:
8684
  '@types/react': 18.3.18
 
8685
 
8686
8687
  dependencies:
8688
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8689
- react: 18.3.1
8690
- optionalDependencies:
8691
  '@types/react': 18.3.18
 
8692
 
8693
8694
  dependencies:
8695
- react: 18.3.1
8696
- optionalDependencies:
8697
  '@types/react': 18.3.18
 
8698
 
8699
8700
  dependencies:
8701
- react: 18.3.1
8702
- optionalDependencies:
8703
  '@types/react': 18.3.18
 
8704
 
8705
8706
  dependencies:
8707
  '@radix-ui/rect': 1.1.0
8708
- react: 18.3.1
8709
- optionalDependencies:
8710
  '@types/react': 18.3.18
 
8711
 
8712
8713
  dependencies:
8714
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8715
- react: 18.3.1
8716
- optionalDependencies:
8717
  '@types/react': 18.3.18
 
8718
 
8719
8720
  dependencies:
8721
8722
- react: 18.3.1
8723
- react-dom: 18.3.1([email protected])
8724
- optionalDependencies:
8725
  '@types/react': 18.3.18
8726
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
8727
 
8728
  '@radix-ui/[email protected]': {}
8729
 
8730
8731
  dependencies:
8732
- '@react-aria/interactions': 3.23.0([email protected]([email protected]))([email protected])
8733
- '@react-aria/utils': 3.27.0([email protected]([email protected]))([email protected])
8734
  '@react-types/shared': 3.27.0([email protected])
8735
  '@swc/helpers': 0.5.15
8736
  clsx: 2.1.1
8737
  react: 18.3.1
8738
  react-dom: 18.3.1([email protected])
8739
 
8740
8741
  dependencies:
8742
  '@react-aria/ssr': 3.9.7([email protected])
8743
- '@react-aria/utils': 3.27.0([email protected]([email protected]))([email protected])
8744
  '@react-types/shared': 3.27.0([email protected])
8745
  '@swc/helpers': 0.5.15
8746
  react: 18.3.1
@@ -8751,7 +8691,7 @@ snapshots:
8751
  '@swc/helpers': 0.5.15
8752
  react: 18.3.1
8753
 
8754
8755
  dependencies:
8756
  '@react-aria/ssr': 3.9.7([email protected])
8757
  '@react-stately/utils': 3.10.5([email protected])
@@ -8780,7 +8720,6 @@ snapshots:
8780
  dependencies:
8781
  '@cloudflare/workers-types': 4.20250204.0
8782
  '@remix-run/cloudflare': 2.15.3(@cloudflare/[email protected])([email protected])
8783
- optionalDependencies:
8784
  typescript: 5.7.3
8785
 
8786
@@ -8788,10 +8727,9 @@ snapshots:
8788
  '@cloudflare/kv-asset-handler': 0.1.3
8789
  '@cloudflare/workers-types': 4.20250204.0
8790
  '@remix-run/server-runtime': 2.15.3([email protected])
8791
- optionalDependencies:
8792
  typescript: 5.7.3
8793
 
8794
8795
  dependencies:
8796
  '@babel/core': 7.26.8
8797
  '@babel/generator': 7.26.8
@@ -8804,11 +8742,11 @@ snapshots:
8804
  '@mdx-js/mdx': 2.3.0
8805
  '@npmcli/package-json': 4.0.1
8806
  '@remix-run/node': 2.15.3([email protected])
8807
8808
  '@remix-run/router': 1.22.0
8809
  '@remix-run/server-runtime': 2.15.3([email protected])
8810
  '@types/mdx': 2.0.13
8811
- '@vanilla-extract/integration': 6.5.0(@types/[email protected])([email protected])
8812
  arg: 5.0.2
8813
  cacache: 17.1.4
8814
  chalk: 4.1.2
@@ -8846,13 +8784,12 @@ snapshots:
8846
  set-cookie-parser: 2.7.1
8847
  tar-fs: 2.1.2
8848
  tsconfig-paths: 4.2.0
8849
- valibot: 0.41.0([email protected])
8850
- vite-node: 1.6.1(@types/[email protected])([email protected])
8851
- ws: 7.5.10
8852
- optionalDependencies:
8853
  typescript: 5.7.3
8854
- vite: 5.4.14(@types/node@22.13.1)([email protected])
 
 
8855
  wrangler: 3.108.0(@cloudflare/[email protected])
 
8856
  transitivePeerDependencies:
8857
  - '@types/node'
8858
  - babel-plugin-macros
@@ -8877,20 +8814,18 @@ snapshots:
8877
  cookie-signature: 1.2.2
8878
  source-map-support: 0.5.21
8879
  stream-slice: 0.1.2
8880
- undici: 6.21.1
8881
- optionalDependencies:
8882
  typescript: 5.7.3
 
8883
 
8884
8885
  dependencies:
8886
  '@remix-run/router': 1.22.0
8887
  '@remix-run/server-runtime': 2.15.3([email protected])
8888
  react: 18.3.1
8889
  react-dom: 18.3.1([email protected])
8890
  react-router: 6.29.0([email protected])
8891
8892
  turbo-stream: 2.4.0
8893
- optionalDependencies:
8894
  typescript: 5.7.3
8895
 
8896
  '@remix-run/[email protected]': {}
@@ -8904,7 +8839,6 @@ snapshots:
8904
  set-cookie-parser: 2.7.1
8905
  source-map: 0.7.4
8906
  turbo-stream: 2.4.0
8907
- optionalDependencies:
8908
  typescript: 5.7.3
8909
 
8910
  '@remix-run/[email protected]':
@@ -8940,7 +8874,6 @@ snapshots:
8940
  '@rollup/pluginutils': 5.1.4([email protected])
8941
  estree-walker: 2.0.2
8942
  magic-string: 0.30.17
8943
- optionalDependencies:
8944
  rollup: 3.29.5
8945
 
8946
@@ -8948,7 +8881,6 @@ snapshots:
8948
  '@types/estree': 1.0.6
8949
  estree-walker: 2.0.2
8950
  picomatch: 4.0.2
8951
- optionalDependencies:
8952
  rollup: 3.29.5
8953
 
8954
  '@rollup/[email protected]':
@@ -9340,10 +9272,10 @@ snapshots:
9340
  '@smithy/util-buffer-from': 4.0.0
9341
  tslib: 2.8.1
9342
 
9343
9344
  dependencies:
9345
- '@typescript-eslint/utils': 8.24.0([email protected]([email protected]))([email protected])
9346
- eslint: 9.20.1([email protected])
9347
  eslint-visitor-keys: 4.2.0
9348
  espree: 10.3.0
9349
  transitivePeerDependencies:
@@ -9354,7 +9286,7 @@ snapshots:
9354
  dependencies:
9355
  tslib: 2.8.1
9356
 
9357
9358
  dependencies:
9359
  '@tanstack/virtual-core': 3.13.0
9360
  react: 18.3.1
@@ -9456,15 +9388,15 @@ snapshots:
9456
 
9457
  '@types/[email protected]': {}
9458
 
9459
9460
  dependencies:
9461
  '@eslint-community/regexpp': 4.12.1
9462
- '@typescript-eslint/parser': 8.24.0([email protected]([email protected]))([email protected])
9463
  '@typescript-eslint/scope-manager': 8.24.0
9464
- '@typescript-eslint/type-utils': 8.24.0([email protected]([email protected]))([email protected])
9465
- '@typescript-eslint/utils': 8.24.0([email protected]([email protected]))([email protected])
9466
  '@typescript-eslint/visitor-keys': 8.24.0
9467
- eslint: 9.20.1([email protected])
9468
  graphemer: 1.4.0
9469
  ignore: 5.3.2
9470
  natural-compare: 1.4.0
@@ -9473,14 +9405,14 @@ snapshots:
9473
  transitivePeerDependencies:
9474
  - supports-color
9475
 
9476
9477
  dependencies:
9478
  '@typescript-eslint/scope-manager': 8.24.0
9479
  '@typescript-eslint/types': 8.24.0
9480
  '@typescript-eslint/typescript-estree': 8.24.0([email protected])
9481
  '@typescript-eslint/visitor-keys': 8.24.0
9482
  debug: 4.4.0
9483
- eslint: 9.20.1([email protected])
9484
  typescript: 5.7.3
9485
  transitivePeerDependencies:
9486
  - supports-color
@@ -9490,12 +9422,12 @@ snapshots:
9490
  '@typescript-eslint/types': 8.24.0
9491
  '@typescript-eslint/visitor-keys': 8.24.0
9492
 
9493
9494
  dependencies:
9495
  '@typescript-eslint/typescript-estree': 8.24.0([email protected])
9496
- '@typescript-eslint/utils': 8.24.0([email protected]([email protected]))([email protected])
9497
  debug: 4.4.0
9498
- eslint: 9.20.1([email protected])
9499
  ts-api-utils: 2.0.1([email protected])
9500
  typescript: 5.7.3
9501
  transitivePeerDependencies:
@@ -9517,13 +9449,13 @@ snapshots:
9517
  transitivePeerDependencies:
9518
  - supports-color
9519
 
9520
9521
  dependencies:
9522
- '@eslint-community/eslint-utils': 4.4.1([email protected]([email protected]))
9523
  '@typescript-eslint/scope-manager': 8.24.0
9524
  '@typescript-eslint/types': 8.24.0
9525
  '@typescript-eslint/typescript-estree': 8.24.0([email protected])
9526
- eslint: 9.20.1([email protected])
9527
  typescript: 5.7.3
9528
  transitivePeerDependencies:
9529
  - supports-color
@@ -9549,13 +9481,12 @@ snapshots:
9549
 
9550
  '@ungap/[email protected]': {}
9551
 
9552
9553
  dependencies:
9554
  '@unocss/core': 0.61.9
9555
  '@unocss/reset': 0.61.9
9556
9557
- optionalDependencies:
9558
- vite: 5.4.14(@types/[email protected])([email protected])
9559
  transitivePeerDependencies:
9560
  - rollup
9561
  - supports-color
@@ -9692,7 +9623,7 @@ snapshots:
9692
  dependencies:
9693
  '@unocss/core': 0.61.9
9694
 
9695
9696
  dependencies:
9697
  '@ampproject/remapping': 2.3.0
9698
  '@rollup/pluginutils': 5.1.4([email protected])
@@ -9704,7 +9635,7 @@ snapshots:
9704
  chokidar: 3.6.0
9705
  fast-glob: 3.3.3
9706
  magic-string: 0.30.17
9707
- vite: 5.4.14(@types/[email protected])([email protected])
9708
  transitivePeerDependencies:
9709
  - rollup
9710
  - supports-color
@@ -9732,7 +9663,7 @@ snapshots:
9732
  transitivePeerDependencies:
9733
  - babel-plugin-macros
9734
 
9735
9736
  dependencies:
9737
  '@babel/core': 7.26.8
9738
  '@babel/plugin-syntax-typescript': 7.25.9(@babel/[email protected])
@@ -9745,8 +9676,8 @@ snapshots:
9745
  lodash: 4.17.21
9746
  mlly: 1.7.4
9747
  outdent: 0.8.0
9748
- vite: 5.4.14(@types/[email protected])([email protected])
9749
- vite-node: 1.6.1(@types/[email protected])([email protected])
9750
  transitivePeerDependencies:
9751
  - '@types/node'
9752
  - babel-plugin-macros
@@ -9768,13 +9699,12 @@ snapshots:
9768
  chai: 5.1.2
9769
  tinyrainbow: 1.2.0
9770
 
9771
9772
  dependencies:
9773
  '@vitest/spy': 2.1.9
9774
  estree-walker: 3.0.3
9775
  magic-string: 0.30.17
9776
- optionalDependencies:
9777
- vite: 5.4.14(@types/[email protected])([email protected])
9778
 
9779
  '@vitest/[email protected]':
9780
  dependencies:
@@ -9852,7 +9782,6 @@ snapshots:
9852
  '@ai-sdk/ui-utils': 1.1.11([email protected])
9853
  '@opentelemetry/api': 1.9.0
9854
  jsondiffpatch: 0.6.0
9855
- optionalDependencies:
9856
  react: 18.3.1
9857
  zod: 3.24.1
9858
 
@@ -10593,27 +10522,27 @@ snapshots:
10593
 
10594
10595
 
10596
10597
  dependencies:
10598
- eslint: 9.20.1([email protected])
10599
  semver: 7.7.1
10600
 
10601
10602
  dependencies:
10603
- eslint: 9.20.1([email protected])
10604
 
10605
10606
  dependencies:
10607
- eslint: 9.20.1([email protected])
10608
  esquery: 1.6.0
10609
  jsonc-eslint-parser: 2.4.0
10610
 
10611
10612
  dependencies:
10613
- '@eslint-community/eslint-utils': 4.4.1([email protected]([email protected]))
10614
- eslint: 9.20.1([email protected])
10615
- eslint-compat-utils: 0.6.4([email protected]([email protected]))
10616
- eslint-json-compat-utils: 0.2.1([email protected]([email protected]))([email protected])
10617
  espree: 9.6.1
10618
  graphemer: 1.4.0
10619
  jsonc-eslint-parser: 2.4.0
@@ -10622,14 +10551,13 @@ snapshots:
10622
  transitivePeerDependencies:
10623
  - '@eslint/json'
10624
 
10625
10626
  dependencies:
10627
- eslint: 9.20.1([email protected])
 
10628
  prettier: 3.5.0
10629
  prettier-linter-helpers: 1.0.0
10630
  synckit: 0.9.2
10631
- optionalDependencies:
10632
- eslint-config-prettier: 9.1.0([email protected]([email protected]))
10633
 
10634
10635
  dependencies:
@@ -10640,9 +10568,9 @@ snapshots:
10640
 
10641
10642
 
10643
10644
  dependencies:
10645
- '@eslint-community/eslint-utils': 4.4.1([email protected]([email protected]))
10646
  '@eslint-community/regexpp': 4.12.1
10647
  '@eslint/config-array': 0.19.2
10648
  '@eslint/core': 0.11.0
@@ -10676,8 +10604,6 @@ snapshots:
10676
  minimatch: 3.1.2
10677
  natural-compare: 1.4.0
10678
  optionator: 0.9.4
10679
- optionalDependencies:
10680
- jiti: 1.21.7
10681
  transitivePeerDependencies:
10682
  - supports-color
10683
 
@@ -10906,14 +10832,13 @@ snapshots:
10906
 
10907
10908
 
10909
10910
  dependencies:
10911
  motion-dom: 11.18.1
10912
  motion-utils: 11.18.1
10913
- tslib: 2.8.1
10914
- optionalDependencies:
10915
  react: 18.3.1
10916
  react-dom: 18.3.1([email protected])
 
10917
 
10918
10919
 
@@ -11504,10 +11429,6 @@ snapshots:
11504
 
11505
11506
 
11507
11508
- dependencies:
11509
- react: 18.3.1
11510
-
11511
11512
  dependencies:
11513
  sourcemap-codec: 1.4.8
@@ -12337,11 +12258,6 @@ snapshots:
12337
 
12338
12339
 
12340
12341
- dependencies:
12342
- react: 18.3.1
12343
- react-dom: 18.3.1([email protected])
12344
-
12345
12346
 
12347
@@ -12450,7 +12366,6 @@ snapshots:
12450
  '@ai-sdk/provider': 0.0.24
12451
  '@ai-sdk/provider-utils': 1.0.20([email protected])
12452
  partial-json: 0.1.7
12453
- optionalDependencies:
12454
  zod: 3.24.1
12455
 
12456
@@ -12628,9 +12543,8 @@ snapshots:
12628
12629
  dependencies:
12630
  lilconfig: 3.1.3
12631
- yaml: 2.7.0
12632
- optionalDependencies:
12633
  postcss: 8.5.2
 
12634
 
12635
12636
  dependencies:
@@ -12786,7 +12700,7 @@ snapshots:
12786
  iconv-lite: 0.4.24
12787
  unpipe: 1.0.0
12788
 
12789
12790
  dependencies:
12791
  '@babel/runtime': 7.26.7
12792
  css-box-model: 1.2.1
@@ -12794,7 +12708,7 @@ snapshots:
12794
  raf-schd: 4.0.3
12795
  react: 18.3.1
12796
  react-dom: 18.3.1([email protected])
12797
12798
  redux: 4.2.1
12799
  use-memo-one: 1.1.3([email protected])
12800
  transitivePeerDependencies:
@@ -12809,18 +12723,15 @@ snapshots:
12809
  dependencies:
12810
  dnd-core: 16.0.1
12811
 
12812
- [email protected](@types/hoist-non-react-statics@3.3.6)(@types/[email protected])(@types/react@18.3.18)([email protected]):
12813
  dependencies:
12814
  '@react-dnd/invariant': 4.0.2
12815
  '@react-dnd/shallowequal': 4.0.2
 
12816
  dnd-core: 16.0.1
12817
  fast-deep-equal: 3.1.3
12818
  hoist-non-react-statics: 3.3.2
12819
  react: 18.3.1
12820
- optionalDependencies:
12821
- '@types/hoist-non-react-statics': 3.3.6
12822
- '@types/node': 22.13.1
12823
- '@types/react': 18.3.18
12824
 
12825
12826
  dependencies:
@@ -12828,7 +12739,7 @@ snapshots:
12828
  react: 18.3.1
12829
  scheduler: 0.23.2
12830
 
12831
12832
  dependencies:
12833
  react: 18.3.1
12834
  react-dom: 18.3.1([email protected])
@@ -12858,7 +12769,7 @@ snapshots:
12858
  transitivePeerDependencies:
12859
  - supports-color
12860
 
12861
12862
  dependencies:
12863
  '@babel/runtime': 7.26.7
12864
  '@types/react-redux': 7.1.34
@@ -12866,37 +12777,34 @@ snapshots:
12866
  loose-envify: 1.4.0
12867
  prop-types: 15.8.1
12868
  react: 18.3.1
12869
- react-is: 17.0.2
12870
- optionalDependencies:
12871
  react-dom: 18.3.1([email protected])
 
12872
 
12873
12874
 
12875
12876
  dependencies:
 
12877
  react: 18.3.1
12878
  react-style-singleton: 2.2.3(@types/[email protected])([email protected])
12879
  tslib: 2.8.1
12880
- optionalDependencies:
12881
- '@types/react': 18.3.18
12882
 
12883
12884
  dependencies:
 
12885
  react: 18.3.1
12886
  react-remove-scroll-bar: 2.3.8(@types/[email protected])([email protected])
12887
  react-style-singleton: 2.2.3(@types/[email protected])([email protected])
12888
  tslib: 2.8.1
12889
  use-callback-ref: 1.3.3(@types/[email protected])([email protected])
12890
  use-sidecar: 1.1.3(@types/[email protected])([email protected])
12891
- optionalDependencies:
12892
- '@types/react': 18.3.18
12893
 
12894
12895
  dependencies:
12896
  react: 18.3.1
12897
  react-dom: 18.3.1([email protected])
12898
 
12899
12900
  dependencies:
12901
  '@remix-run/router': 1.22.0
12902
  react: 18.3.1
@@ -12910,13 +12818,12 @@ snapshots:
12910
 
12911
12912
  dependencies:
 
12913
  get-nonce: 1.0.1
12914
  react: 18.3.1
12915
  tslib: 2.8.1
12916
- optionalDependencies:
12917
- '@types/react': 18.3.18
12918
 
12919
12920
  dependencies:
12921
  clsx: 2.1.1
12922
  react: 18.3.1
@@ -13047,22 +12954,20 @@ snapshots:
13047
  mdast-util-to-markdown: 2.1.2
13048
  unified: 11.0.5
13049
 
13050
13051
  dependencies:
13052
13053
  '@remix-run/server-runtime': 2.15.3([email protected])
13054
  react: 18.3.1
13055
  react-dom: 18.3.1([email protected])
13056
 
13057
13058
  dependencies:
13059
- type-fest: 4.34.1
13060
- optionalDependencies:
13061
  '@remix-run/cloudflare': 2.15.3(@cloudflare/[email protected])([email protected])
13062
  '@remix-run/node': 2.15.3([email protected])
13063
13064
- '@remix-run/router': 1.22.0
13065
  react: 18.3.1
 
13066
  zod: 3.24.1
13067
 
13068
@@ -13648,7 +13553,7 @@ snapshots:
13648
  typescript: 5.7.3
13649
 
13650
13651
- optionalDependencies:
13652
  typescript: 5.7.3
13653
 
13654
@@ -13681,12 +13586,12 @@ snapshots:
13681
  media-typer: 0.3.0
13682
  mime-types: 2.1.35
13683
 
13684
13685
  dependencies:
13686
13687
- '@typescript-eslint/parser': 8.24.0([email protected]([email protected]))([email protected])
13688
- '@typescript-eslint/utils': 8.24.0([email protected]([email protected]))([email protected])
13689
- eslint: 9.20.1([email protected])
13690
  typescript: 5.7.3
13691
  transitivePeerDependencies:
13692
  - supports-color
@@ -13808,9 +13713,9 @@ snapshots:
13808
 
13809
13810
 
13811
13812
  dependencies:
13813
13814
  '@unocss/cli': 0.61.9([email protected])
13815
  '@unocss/core': 0.61.9
13816
  '@unocss/extractor-arbitrary-variants': 0.61.9
@@ -13829,9 +13734,8 @@ snapshots:
13829
  '@unocss/transformer-compile-class': 0.61.9
13830
  '@unocss/transformer-directives': 0.61.9
13831
  '@unocss/transformer-variant-group': 0.61.9
13832
13833
- optionalDependencies:
13834
- vite: 5.4.14(@types/[email protected])([email protected])
13835
  transitivePeerDependencies:
13836
  - postcss
13837
  - rollup
@@ -13856,10 +13760,9 @@ snapshots:
13856
 
13857
13858
  dependencies:
 
13859
  react: 18.3.1
13860
  tslib: 2.8.1
13861
- optionalDependencies:
13862
- '@types/react': 18.3.18
13863
 
13864
13865
  dependencies:
@@ -13867,11 +13770,10 @@ snapshots:
13867
 
13868
13869
  dependencies:
 
13870
  detect-node-es: 1.1.0
13871
  react: 18.3.1
13872
  tslib: 2.8.1
13873
- optionalDependencies:
13874
- '@types/react': 18.3.18
13875
 
13876
13877
  dependencies:
@@ -13904,7 +13806,7 @@ snapshots:
13904
  sade: 1.8.1
13905
 
13906
13907
- optionalDependencies:
13908
  typescript: 5.7.3
13909
 
13910
@@ -13947,13 +13849,13 @@ snapshots:
13947
  '@types/unist': 3.0.3
13948
  vfile-message: 4.0.2
13949
 
13950
13951
  dependencies:
13952
  cac: 6.7.14
13953
  debug: 4.4.0
13954
  pathe: 1.1.2
13955
  picocolors: 1.1.1
13956
- vite: 5.4.14(@types/[email protected])([email protected])
13957
  transitivePeerDependencies:
13958
  - '@types/node'
13959
  - less
@@ -13965,13 +13867,13 @@ snapshots:
13965
  - supports-color
13966
  - terser
13967
 
13968
13969
  dependencies:
13970
  cac: 6.7.14
13971
  debug: 4.4.0
13972
  es-module-lexer: 1.6.0
13973
  pathe: 1.1.2
13974
- vite: 5.4.14(@types/[email protected])([email protected])
13975
  transitivePeerDependencies:
13976
  - '@types/node'
13977
  - less
@@ -13983,43 +13885,41 @@ snapshots:
13983
  - supports-color
13984
  - terser
13985
 
13986
13987
  dependencies:
13988
  '@rollup/plugin-inject': 5.0.5([email protected])
13989
  node-stdlib-browser: 1.3.1
13990
- vite: 5.4.14(@types/[email protected])([email protected])
13991
  transitivePeerDependencies:
13992
  - rollup
13993
 
13994
13995
  dependencies:
13996
- vite: 5.4.14(@types/[email protected])([email protected])
13997
 
13998
13999
  dependencies:
14000
  debug: 4.4.0
14001
  globrex: 0.1.2
14002
  tsconfck: 3.1.5([email protected])
14003
- optionalDependencies:
14004
- vite: 5.4.14(@types/[email protected])([email protected])
14005
  transitivePeerDependencies:
14006
  - supports-color
14007
  - typescript
14008
 
14009
14010
  dependencies:
14011
  esbuild: 0.21.5
14012
  postcss: 8.5.2
14013
  rollup: 4.34.6
 
14014
  optionalDependencies:
14015
- '@types/node': 22.13.1
14016
  fsevents: 2.3.3
14017
- sass-embedded: 1.83.4
14018
 
14019
14020
  dependencies:
14021
  '@vitest/expect': 2.1.9
14022
- '@vitest/mocker': 2.1.9([email protected](@types/[email protected])([email protected]))
14023
  '@vitest/pretty-format': 2.1.9
14024
  '@vitest/runner': 2.1.9
14025
  '@vitest/snapshot': 2.1.9
@@ -14035,11 +13935,9 @@ snapshots:
14035
  tinyexec: 0.3.2
14036
  tinypool: 1.0.2
14037
  tinyrainbow: 1.2.0
14038
- vite: 5.4.14(@types/[email protected])([email protected])
14039
- vite-node: 2.1.9(@types/[email protected])([email protected])
14040
  why-is-node-running: 2.3.0
14041
- optionalDependencies:
14042
- '@types/node': 22.13.1
14043
  transitivePeerDependencies:
14044
  - less
14045
  - lightningcss
@@ -14104,6 +14002,7 @@ snapshots:
14104
14105
  dependencies:
14106
  '@cloudflare/kv-asset-handler': 0.3.4
 
14107
  '@esbuild-plugins/node-globals-polyfill': 0.2.3([email protected])
14108
  '@esbuild-plugins/node-modules-polyfill': 0.2.2([email protected])
14109
  blake3-wasm: 2.1.5
@@ -14113,7 +14012,6 @@ snapshots:
14113
  unenv: 2.0.0-rc.1
14114
  workerd: 1.20250204.0
14115
  optionalDependencies:
14116
- '@cloudflare/workers-types': 4.20250204.0
14117
  fsevents: 2.3.3
14118
  sharp: 0.33.5
14119
  transitivePeerDependencies:
@@ -14162,10 +14060,9 @@ snapshots:
14162
 
14163
14164
 
14165
14166
- optionalDependencies:
14167
  '@types/react': 18.3.18
14168
  react: 18.3.1
14169
- use-sync-external-store: 1.4.0([email protected])
14170
 
14171
 
82
  version: 6.36.2
83
  '@headlessui/react':
84
  specifier: ^2.2.0
85
86
  '@iconify-json/svg-spinners':
87
  specifier: ^1.2.1
88
  version: 1.2.2
 
103
  version: 0.0.5([email protected])
104
  '@phosphor-icons/react':
105
  specifier: ^2.1.7
106
107
  '@radix-ui/react-collapsible':
108
  specifier: ^1.0.3
109
110
  '@radix-ui/react-context-menu':
111
  specifier: ^2.2.2
112
113
  '@radix-ui/react-dialog':
114
  specifier: ^1.1.5
115
116
  '@radix-ui/react-dropdown-menu':
117
  specifier: ^2.1.6
118
119
  '@radix-ui/react-label':
120
  specifier: ^2.1.1
121
122
  '@radix-ui/react-popover':
123
  specifier: ^1.1.5
124
125
  '@radix-ui/react-progress':
126
  specifier: ^1.0.3
127
128
  '@radix-ui/react-scroll-area':
129
  specifier: ^1.2.2
130
131
  '@radix-ui/react-separator':
132
  specifier: ^1.1.0
133
134
  '@radix-ui/react-switch':
135
  specifier: ^1.1.1
136
137
  '@radix-ui/react-tabs':
138
  specifier: ^1.1.2
139
140
  '@radix-ui/react-tooltip':
141
  specifier: ^1.1.4
142
143
  '@remix-run/cloudflare':
144
  specifier: ^2.15.2
145
  version: 2.15.3(@cloudflare/[email protected])([email protected])
 
151
  version: 2.15.3([email protected])
152
  '@remix-run/react':
153
  specifier: ^2.15.2
154
155
  '@types/react-beautiful-dnd':
156
  specifier: ^13.1.8
157
  version: 13.1.8
 
202
  version: 2.0.5
203
  framer-motion:
204
  specifier: ^11.12.0
205
+ version: 11.18.2([email protected])([email protected])
206
  ignore:
207
  specifier: ^6.0.2
208
  version: 6.0.2
 
227
  jszip:
228
  specifier: ^3.10.1
229
  version: 3.10.1
 
 
 
230
  nanostores:
231
  specifier: ^0.10.3
232
  version: 0.10.3
 
 
 
233
  ollama-ai-provider:
234
  specifier: ^0.15.2
235
  version: 0.15.2([email protected])
 
241
  version: 18.3.1
242
  react-beautiful-dnd:
243
  specifier: ^13.1.1
244
245
  react-chartjs-2:
246
  specifier: ^5.3.0
247
248
  react-dnd:
249
  specifier: ^16.0.1
250
+ version: 16.0.1(@types/[email protected])([email protected])
251
  react-dnd-html5-backend:
252
  specifier: ^16.0.1
253
  version: 16.0.1
 
256
  version: 18.3.1([email protected])
257
  react-hotkeys-hook:
258
  specifier: ^4.6.1
259
260
  react-icons:
261
  specifier: ^5.4.0
262
  version: 5.4.0([email protected])
 
265
  version: 9.0.3(@types/[email protected])([email protected])
266
  react-resizable-panels:
267
  specifier: ^2.1.7
268
269
  react-toastify:
270
  specifier: ^10.0.6
271
272
  rehype-raw:
273
  specifier: ^7.0.0
274
  version: 7.0.0
 
280
  version: 4.0.1
281
  remix-island:
282
  specifier: ^0.2.0
283
+ version: 0.2.0(@remix-run/[email protected])(@remix-run/[email protected])([email protected])([email protected])
284
  remix-utils:
285
  specifier: ^7.7.0
286
+ version: 7.7.0(@remix-run/[email protected])(@remix-run/[email protected])(@remix-run/[email protected])([email protected])([email protected])
287
  shiki:
288
  specifier: ^1.24.0
289
  version: 1.29.2
 
295
  version: 5.0.0
296
  zustand:
297
  specifier: ^5.0.3
298
+ version: 5.0.3(@types/[email protected])([email protected])
299
  devDependencies:
300
  '@blitz/eslint-plugin':
301
  specifier: 0.1.0
302
303
  '@cloudflare/workers-types':
304
  specifier: ^4.20241127.0
305
  version: 4.20250204.0
 
311
  version: 2.0.0
312
  '@remix-run/dev':
313
  specifier: ^2.15.2
314
315
  '@types/diff':
316
  specifier: ^5.2.3
317
  version: 5.2.3
 
362
  version: 11.0.5
363
  unocss:
364
  specifier: ^0.61.9
365
366
  vite:
367
  specifier: ^5.4.11
368
+ version: 5.4.14([email protected])
369
  vite-plugin-node-polyfills:
370
  specifier: ^0.22.0
371
372
  vite-plugin-optimize-css-modules:
373
  specifier: ^1.1.0
374
+ version: 1.2.0([email protected])
375
  vite-tsconfig-paths:
376
  specifier: ^4.3.2
377
378
  vitest:
379
  specifier: ^2.1.7
380
+ version: 2.1.9([email protected])
381
  wrangler:
382
  specifier: ^3.91.0
383
  version: 3.108.0(@cloudflare/[email protected])
 
4536
  resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
4537
  engines: {node: '>=12'}
4538
 
 
 
 
 
 
4539
4540
  resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
4541
 
 
4986
  resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
4987
  engines: {node: '>= 0.6'}
4988
 
 
 
 
 
 
 
4989
4990
  resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
4991
  engines: {node: '>=10.5.0'}
 
6733
  eventsource-parser: 1.1.2
6734
  nanoid: 3.3.6
6735
  secure-json-parse: 2.7.0
 
6736
  zod: 3.24.1
6737
 
6738
 
6741
  eventsource-parser: 1.1.2
6742
  nanoid: 3.3.6
6743
  secure-json-parse: 2.7.0
 
6744
  zod: 3.24.1
6745
 
6746
 
6749
  eventsource-parser: 1.1.2
6750
  nanoid: 3.3.6
6751
  secure-json-parse: 2.7.0
 
6752
  zod: 3.24.1
6753
 
6754
 
6757
  eventsource-parser: 3.0.0
6758
  nanoid: 3.3.8
6759
  secure-json-parse: 2.7.0
 
6760
  zod: 3.24.1
6761
 
6762
 
6765
  eventsource-parser: 3.0.0
6766
  nanoid: 3.3.8
6767
  secure-json-parse: 2.7.0
 
6768
  zod: 3.24.1
6769
 
6770
  '@ai-sdk/[email protected]':
 
6791
  dependencies:
6792
  '@ai-sdk/provider-utils': 2.1.6([email protected])
6793
  '@ai-sdk/ui-utils': 1.1.11([email protected])
6794
+ react: 18.3.1
6795
  swr: 2.3.2([email protected])
6796
  throttleit: 2.1.0
 
 
6797
  zod: 3.24.1
6798
 
6799
6800
  dependencies:
6801
  '@ai-sdk/provider': 1.0.7
6802
  '@ai-sdk/provider-utils': 2.1.6([email protected])
 
 
6803
  zod: 3.24.1
6804
+ zod-to-json-schema: 3.24.1([email protected])
6805
 
6806
  '@ampproject/[email protected]':
6807
  dependencies:
 
7363
  '@babel/helper-string-parser': 7.25.9
7364
  '@babel/helper-validator-identifier': 7.25.9
7365
 
7366
7367
  dependencies:
7368
+ '@stylistic/eslint-plugin-ts': 2.13.0([email protected])([email protected])
7369
+ '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/[email protected])([email protected])([email protected])
7370
+ '@typescript-eslint/parser': 8.24.0([email protected])([email protected])
7371
+ '@typescript-eslint/utils': 8.24.0([email protected])([email protected])
7372
  common-tags: 1.8.2
7373
+ eslint: 9.20.1
7374
+ eslint-config-prettier: 9.1.0([email protected])
7375
+ eslint-plugin-jsonc: 2.19.1([email protected])
7376
+ eslint-plugin-prettier: 5.2.3([email protected])([email protected])([email protected])
7377
  globals: 15.14.0
7378
+ typescript-eslint: 8.24.0([email protected])([email protected])
7379
  transitivePeerDependencies:
7380
  - '@eslint/json'
7381
  - '@types/eslint'
 
7832
  '@esbuild/[email protected]':
7833
  optional: true
7834
 
7835
+ '@eslint-community/[email protected]([email protected])':
7836
  dependencies:
7837
+ eslint: 9.20.1
7838
  eslint-visitor-keys: 3.4.3
7839
 
7840
  '@eslint-community/[email protected]': {}
 
7889
  '@floating-ui/core': 1.6.9
7890
  '@floating-ui/utils': 0.2.9
7891
 
7892
7893
  dependencies:
7894
  '@floating-ui/dom': 1.6.13
7895
  react: 18.3.1
7896
  react-dom: 18.3.1([email protected])
7897
 
7898
7899
  dependencies:
7900
+ '@floating-ui/react-dom': 2.1.2([email protected])([email protected])
7901
  '@floating-ui/utils': 0.2.9
7902
  react: 18.3.1
7903
  react-dom: 18.3.1([email protected])
 
7905
 
7906
  '@floating-ui/[email protected]': {}
7907
 
7908
7909
  dependencies:
7910
+ '@floating-ui/react': 0.26.28([email protected])([email protected])
7911
+ '@react-aria/focus': 3.19.1([email protected])([email protected])
7912
+ '@react-aria/interactions': 3.23.0([email protected])([email protected])
7913
+ '@tanstack/react-virtual': 3.13.0([email protected])([email protected])
7914
  react: 18.3.1
7915
  react-dom: 18.3.1([email protected])
7916
 
 
8271
 
8272
  '@opentelemetry/[email protected]': {}
8273
 
8274
8275
  dependencies:
8276
  react: 18.3.1
8277
  react-dom: 18.3.1([email protected])
 
8287
 
8288
  '@radix-ui/[email protected]': {}
8289
 
8290
8291
  dependencies:
8292
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
 
 
 
8293
  '@types/react': 18.3.18
8294
  '@types/react-dom': 18.3.5(@types/[email protected])
8295
+ react: 18.3.1
8296
+ react-dom: 18.3.1([email protected])
8297
 
8298
8299
  dependencies:
8300
  '@radix-ui/primitive': 1.1.1
8301
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8302
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8303
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8304
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8305
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8306
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8307
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
 
 
 
8308
  '@types/react': 18.3.18
8309
  '@types/react-dom': 18.3.5(@types/[email protected])
8310
+ react: 18.3.1
8311
+ react-dom: 18.3.1([email protected])
8312
 
8313
8314
  dependencies:
8315
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8316
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8317
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8318
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
 
 
 
8319
  '@types/react': 18.3.18
8320
  '@types/react-dom': 18.3.5(@types/[email protected])
8321
+ react: 18.3.1
8322
+ react-dom: 18.3.1([email protected])
8323
 
8324
8325
  dependencies:
 
 
8326
  '@types/react': 18.3.18
8327
+ react: 18.3.1
8328
 
8329
8330
  dependencies:
8331
  '@radix-ui/primitive': 1.1.1
8332
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8333
+ '@radix-ui/react-menu': 2.1.6(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8334
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8335
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8336
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
 
 
 
8337
  '@types/react': 18.3.18
8338
  '@types/react-dom': 18.3.5(@types/[email protected])
8339
+ react: 18.3.1
8340
+ react-dom: 18.3.1([email protected])
8341
 
8342
8343
  dependencies:
 
 
8344
  '@types/react': 18.3.18
8345
+ react: 18.3.1
8346
 
8347
8348
  dependencies:
8349
  '@radix-ui/primitive': 1.1.1
8350
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8351
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8352
+ '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8353
  '@radix-ui/react-focus-guards': 1.1.1(@types/[email protected])([email protected])
8354
+ '@radix-ui/react-focus-scope': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8355
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8356
+ '@radix-ui/react-portal': 1.1.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8357
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8358
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8359
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8360
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8361
+ '@types/react': 18.3.18
8362
+ '@types/react-dom': 18.3.5(@types/[email protected])
8363
  aria-hidden: 1.2.4
8364
  react: 18.3.1
8365
  react-dom: 18.3.1([email protected])
8366
  react-remove-scroll: 2.6.3(@types/[email protected])([email protected])
 
 
 
8367
 
8368
8369
  dependencies:
 
 
8370
  '@types/react': 18.3.18
8371
+ react: 18.3.1
8372
 
8373
8374
  dependencies:
8375
  '@radix-ui/primitive': 1.1.1
8376
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8377
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8378
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8379
  '@radix-ui/react-use-escape-keydown': 1.1.0(@types/[email protected])([email protected])
 
 
 
8380
  '@types/react': 18.3.18
8381
  '@types/react-dom': 18.3.5(@types/[email protected])
8382
+ react: 18.3.1
8383
+ react-dom: 18.3.1([email protected])
8384
 
8385
8386
  dependencies:
8387
  '@radix-ui/primitive': 1.1.1
8388
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8389
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8390
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8391
+ '@radix-ui/react-menu': 2.1.6(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8392
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8393
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
 
 
 
8394
  '@types/react': 18.3.18
8395
  '@types/react-dom': 18.3.5(@types/[email protected])
8396
+ react: 18.3.1
8397
+ react-dom: 18.3.1([email protected])
8398
 
8399
8400
  dependencies:
 
 
8401
  '@types/react': 18.3.18
8402
+ react: 18.3.1
8403
 
8404
8405
  dependencies:
8406
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8407
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8408
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
 
 
 
8409
  '@types/react': 18.3.18
8410
  '@types/react-dom': 18.3.5(@types/[email protected])
8411
+ react: 18.3.1
8412
+ react-dom: 18.3.1([email protected])
8413
 
8414
8415
  dependencies:
8416
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
 
 
8417
  '@types/react': 18.3.18
8418
+ react: 18.3.1
8419
 
8420
8421
  dependencies:
8422
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
 
 
 
8423
  '@types/react': 18.3.18
8424
  '@types/react-dom': 18.3.5(@types/[email protected])
8425
+ react: 18.3.1
8426
+ react-dom: 18.3.1([email protected])
8427
 
8428
8429
  dependencies:
8430
  '@radix-ui/primitive': 1.1.1
8431
+ '@radix-ui/react-collection': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8432
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8433
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8434
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8435
+ '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8436
  '@radix-ui/react-focus-guards': 1.1.1(@types/[email protected])([email protected])
8437
+ '@radix-ui/react-focus-scope': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8438
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8439
+ '@radix-ui/react-popper': 1.2.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8440
+ '@radix-ui/react-portal': 1.1.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8441
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8442
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8443
+ '@radix-ui/react-roving-focus': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8444
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8445
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8446
+ '@types/react': 18.3.18
8447
+ '@types/react-dom': 18.3.5(@types/[email protected])
8448
  aria-hidden: 1.2.4
8449
  react: 18.3.1
8450
  react-dom: 18.3.1([email protected])
8451
  react-remove-scroll: 2.6.3(@types/[email protected])([email protected])
 
 
 
8452
 
8453
8454
  dependencies:
8455
  '@radix-ui/primitive': 1.1.1
8456
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8457
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8458
+ '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8459
  '@radix-ui/react-focus-guards': 1.1.1(@types/[email protected])([email protected])
8460
+ '@radix-ui/react-focus-scope': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8461
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8462
+ '@radix-ui/react-popper': 1.2.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8463
+ '@radix-ui/react-portal': 1.1.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8464
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8465
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8466
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8467
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8468
+ '@types/react': 18.3.18
8469
+ '@types/react-dom': 18.3.5(@types/[email protected])
8470
  aria-hidden: 1.2.4
8471
  react: 18.3.1
8472
  react-dom: 18.3.1([email protected])
8473
  react-remove-scroll: 2.6.3(@types/[email protected])([email protected])
 
 
 
8474
 
8475
8476
  dependencies:
8477
+ '@floating-ui/react-dom': 2.1.2([email protected])([email protected])
8478
+ '@radix-ui/react-arrow': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8479
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8480
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8481
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8482
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8483
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
8484
  '@radix-ui/react-use-rect': 1.1.0(@types/[email protected])([email protected])
8485
  '@radix-ui/react-use-size': 1.1.0(@types/[email protected])([email protected])
8486
  '@radix-ui/rect': 1.1.0
 
 
 
8487
  '@types/react': 18.3.18
8488
  '@types/react-dom': 18.3.5(@types/[email protected])
8489
+ react: 18.3.1
8490
+ react-dom: 18.3.1([email protected])
8491
 
8492
8493
  dependencies:
8494
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8495
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
 
 
 
8496
  '@types/react': 18.3.18
8497
  '@types/react-dom': 18.3.5(@types/[email protected])
8498
+ react: 18.3.1
8499
+ react-dom: 18.3.1([email protected])
8500
 
8501
8502
  dependencies:
8503
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8504
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
 
 
 
8505
  '@types/react': 18.3.18
8506
  '@types/react-dom': 18.3.5(@types/[email protected])
8507
+ react: 18.3.1
8508
+ react-dom: 18.3.1([email protected])
8509
 
8510
8511
  dependencies:
8512
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
 
 
 
8513
  '@types/react': 18.3.18
8514
  '@types/react-dom': 18.3.5(@types/[email protected])
8515
+ react: 18.3.1
8516
+ react-dom: 18.3.1([email protected])
8517
 
8518
8519
  dependencies:
8520
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8521
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
 
 
 
8522
  '@types/react': 18.3.18
8523
  '@types/react-dom': 18.3.5(@types/[email protected])
8524
+ react: 18.3.1
8525
+ react-dom: 18.3.1([email protected])
8526
 
8527
8528
  dependencies:
8529
  '@radix-ui/primitive': 1.1.1
8530
+ '@radix-ui/react-collection': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8531
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8532
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8533
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8534
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8535
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8536
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8537
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
 
 
 
8538
  '@types/react': 18.3.18
8539
  '@types/react-dom': 18.3.5(@types/[email protected])
8540
+ react: 18.3.1
8541
+ react-dom: 18.3.1([email protected])
8542
 
8543
8544
  dependencies:
8545
  '@radix-ui/number': 1.1.0
8546
  '@radix-ui/primitive': 1.1.1
8547
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8548
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8549
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8550
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8551
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8552
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
8553
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
 
 
 
8554
  '@types/react': 18.3.18
8555
  '@types/react-dom': 18.3.5(@types/[email protected])
 
 
 
 
8556
  react: 18.3.1
8557
  react-dom: 18.3.1([email protected])
8558
+
8559
8560
+ dependencies:
8561
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8562
  '@types/react': 18.3.18
8563
  '@types/react-dom': 18.3.5(@types/[email protected])
8564
+ react: 18.3.1
8565
+ react-dom: 18.3.1([email protected])
8566
 
8567
8568
  dependencies:
8569
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
 
 
8570
  '@types/react': 18.3.18
8571
+ react: 18.3.1
8572
 
8573
8574
  dependencies:
8575
  '@radix-ui/primitive': 1.1.1
8576
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8577
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8578
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8579
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8580
  '@radix-ui/react-use-previous': 1.1.0(@types/[email protected])([email protected])
8581
  '@radix-ui/react-use-size': 1.1.0(@types/[email protected])([email protected])
 
 
 
8582
  '@types/react': 18.3.18
8583
  '@types/react-dom': 18.3.5(@types/[email protected])
8584
+ react: 18.3.1
8585
+ react-dom: 18.3.1([email protected])
8586
 
8587
8588
  dependencies:
8589
  '@radix-ui/primitive': 1.1.1
8590
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8591
  '@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
8592
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8593
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8594
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8595
+ '@radix-ui/react-roving-focus': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8596
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
 
 
 
8597
  '@types/react': 18.3.18
8598
  '@types/react-dom': 18.3.5(@types/[email protected])
8599
+ react: 18.3.1
8600
+ react-dom: 18.3.1([email protected])
8601
 
8602
8603
  dependencies:
8604
  '@radix-ui/primitive': 1.1.1
8605
  '@radix-ui/react-compose-refs': 1.1.1(@types/[email protected])([email protected])
8606
  '@radix-ui/react-context': 1.1.1(@types/[email protected])([email protected])
8607
+ '@radix-ui/react-dismissable-layer': 1.1.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8608
  '@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
8609
+ '@radix-ui/react-popper': 1.2.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8610
+ '@radix-ui/react-portal': 1.1.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8611
+ '@radix-ui/react-presence': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8612
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
8613
  '@radix-ui/react-slot': 1.1.2(@types/[email protected])([email protected])
8614
  '@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
8615
+ '@radix-ui/react-visually-hidden': 1.1.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
 
 
 
8616
  '@types/react': 18.3.18
8617
  '@types/react-dom': 18.3.5(@types/[email protected])
8618
+ react: 18.3.1
8619
+ react-dom: 18.3.1([email protected])
8620
 
8621
8622
  dependencies:
 
 
8623
  '@types/react': 18.3.18
8624
+ react: 18.3.1
8625
 
8626
8627
  dependencies:
8628
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
 
 
8629
  '@types/react': 18.3.18
8630
+ react: 18.3.1
8631
 
8632
8633
  dependencies:
8634
  '@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
 
 
8635
  '@types/react': 18.3.18
8636
+ react: 18.3.1
8637
 
8638
8639
  dependencies:
 
 
8640
  '@types/react': 18.3.18
8641
+ react: 18.3.1
8642
 
8643
8644
  dependencies:
 
 
8645
  '@types/react': 18.3.18
8646
+ react: 18.3.1
8647
 
8648
8649
  dependencies:
8650
  '@radix-ui/rect': 1.1.0
 
 
8651
  '@types/react': 18.3.18
8652
+ react: 18.3.1
8653
 
8654
8655
  dependencies:
8656
  '@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
 
 
8657
  '@types/react': 18.3.18
8658
+ react: 18.3.1
8659
 
8660
8661
  dependencies:
8662
+ '@radix-ui/react-primitive': 2.0.2(@types/[email protected])(@types/[email protected])([email protected])([email protected])
 
 
 
8663
  '@types/react': 18.3.18
8664
  '@types/react-dom': 18.3.5(@types/[email protected])
8665
+ react: 18.3.1
8666
+ react-dom: 18.3.1([email protected])
8667
 
8668
  '@radix-ui/[email protected]': {}
8669
 
8670
8671
  dependencies:
8672
+ '@react-aria/interactions': 3.23.0([email protected])([email protected])
8673
+ '@react-aria/utils': 3.27.0([email protected])([email protected])
8674
  '@react-types/shared': 3.27.0([email protected])
8675
  '@swc/helpers': 0.5.15
8676
  clsx: 2.1.1
8677
  react: 18.3.1
8678
  react-dom: 18.3.1([email protected])
8679
 
8680
8681
  dependencies:
8682
  '@react-aria/ssr': 3.9.7([email protected])
8683
+ '@react-aria/utils': 3.27.0([email protected])([email protected])
8684
  '@react-types/shared': 3.27.0([email protected])
8685
  '@swc/helpers': 0.5.15
8686
  react: 18.3.1
 
8691
  '@swc/helpers': 0.5.15
8692
  react: 18.3.1
8693
 
8694
8695
  dependencies:
8696
  '@react-aria/ssr': 3.9.7([email protected])
8697
  '@react-stately/utils': 3.10.5([email protected])
 
8720
  dependencies:
8721
  '@cloudflare/workers-types': 4.20250204.0
8722
  '@remix-run/cloudflare': 2.15.3(@cloudflare/[email protected])([email protected])
 
8723
  typescript: 5.7.3
8724
 
8725
 
8727
  '@cloudflare/kv-asset-handler': 0.1.3
8728
  '@cloudflare/workers-types': 4.20250204.0
8729
  '@remix-run/server-runtime': 2.15.3([email protected])
 
8730
  typescript: 5.7.3
8731
 
8732
8733
  dependencies:
8734
  '@babel/core': 7.26.8
8735
  '@babel/generator': 7.26.8
 
8742
  '@mdx-js/mdx': 2.3.0
8743
  '@npmcli/package-json': 4.0.1
8744
  '@remix-run/node': 2.15.3([email protected])
8745
+ '@remix-run/react': 2.15.3([email protected])([email protected])([email protected])
8746
  '@remix-run/router': 1.22.0
8747
  '@remix-run/server-runtime': 2.15.3([email protected])
8748
  '@types/mdx': 2.0.13
8749
+ '@vanilla-extract/integration': 6.5.0([email protected])
8750
  arg: 5.0.2
8751
  cacache: 17.1.4
8752
  chalk: 4.1.2
 
8784
  set-cookie-parser: 2.7.1
8785
  tar-fs: 2.1.2
8786
  tsconfig-paths: 4.2.0
 
 
 
 
8787
  typescript: 5.7.3
8788
+ valibot: 0.41.0(typescript@5.7.3)
8789
+ vite: 5.4.14([email protected])
8790
+ vite-node: 1.6.1([email protected])
8791
  wrangler: 3.108.0(@cloudflare/[email protected])
8792
+ ws: 7.5.10
8793
  transitivePeerDependencies:
8794
  - '@types/node'
8795
  - babel-plugin-macros
 
8814
  cookie-signature: 1.2.2
8815
  source-map-support: 0.5.21
8816
  stream-slice: 0.1.2
 
 
8817
  typescript: 5.7.3
8818
+ undici: 6.21.1
8819
 
8820
8821
  dependencies:
8822
  '@remix-run/router': 1.22.0
8823
  '@remix-run/server-runtime': 2.15.3([email protected])
8824
  react: 18.3.1
8825
  react-dom: 18.3.1([email protected])
8826
  react-router: 6.29.0([email protected])
8827
+ react-router-dom: 6.29.0([email protected])([email protected])
8828
  turbo-stream: 2.4.0
 
8829
  typescript: 5.7.3
8830
 
8831
  '@remix-run/[email protected]': {}
 
8839
  set-cookie-parser: 2.7.1
8840
  source-map: 0.7.4
8841
  turbo-stream: 2.4.0
 
8842
  typescript: 5.7.3
8843
 
8844
  '@remix-run/[email protected]':
 
8874
  '@rollup/pluginutils': 5.1.4([email protected])
8875
  estree-walker: 2.0.2
8876
  magic-string: 0.30.17
 
8877
  rollup: 3.29.5
8878
 
8879
 
8881
  '@types/estree': 1.0.6
8882
  estree-walker: 2.0.2
8883
  picomatch: 4.0.2
 
8884
  rollup: 3.29.5
8885
 
8886
  '@rollup/[email protected]':
 
9272
  '@smithy/util-buffer-from': 4.0.0
9273
  tslib: 2.8.1
9274
 
9275
9276
  dependencies:
9277
+ '@typescript-eslint/utils': 8.24.0([email protected])([email protected])
9278
+ eslint: 9.20.1
9279
  eslint-visitor-keys: 4.2.0
9280
  espree: 10.3.0
9281
  transitivePeerDependencies:
 
9286
  dependencies:
9287
  tslib: 2.8.1
9288
 
9289
9290
  dependencies:
9291
  '@tanstack/virtual-core': 3.13.0
9292
  react: 18.3.1
 
9388
 
9389
  '@types/[email protected]': {}
9390
 
9391
+ '@typescript-eslint/[email protected](@typescript-eslint/[email protected])([email protected])([email protected])':
9392
  dependencies:
9393
  '@eslint-community/regexpp': 4.12.1
9394
+ '@typescript-eslint/parser': 8.24.0([email protected])([email protected])
9395
  '@typescript-eslint/scope-manager': 8.24.0
9396
+ '@typescript-eslint/type-utils': 8.24.0([email protected])([email protected])
9397
+ '@typescript-eslint/utils': 8.24.0([email protected])([email protected])
9398
  '@typescript-eslint/visitor-keys': 8.24.0
9399
+ eslint: 9.20.1
9400
  graphemer: 1.4.0
9401
  ignore: 5.3.2
9402
  natural-compare: 1.4.0
 
9405
  transitivePeerDependencies:
9406
  - supports-color
9407
 
9408
9409
  dependencies:
9410
  '@typescript-eslint/scope-manager': 8.24.0
9411
  '@typescript-eslint/types': 8.24.0
9412
  '@typescript-eslint/typescript-estree': 8.24.0([email protected])
9413
  '@typescript-eslint/visitor-keys': 8.24.0
9414
  debug: 4.4.0
9415
+ eslint: 9.20.1
9416
  typescript: 5.7.3
9417
  transitivePeerDependencies:
9418
  - supports-color
 
9422
  '@typescript-eslint/types': 8.24.0
9423
  '@typescript-eslint/visitor-keys': 8.24.0
9424
 
9425
9426
  dependencies:
9427
  '@typescript-eslint/typescript-estree': 8.24.0([email protected])
9428
+ '@typescript-eslint/utils': 8.24.0([email protected])([email protected])
9429
  debug: 4.4.0
9430
+ eslint: 9.20.1
9431
  ts-api-utils: 2.0.1([email protected])
9432
  typescript: 5.7.3
9433
  transitivePeerDependencies:
 
9449
  transitivePeerDependencies:
9450
  - supports-color
9451
 
9452
9453
  dependencies:
9454
+ '@eslint-community/eslint-utils': 4.4.1([email protected])
9455
  '@typescript-eslint/scope-manager': 8.24.0
9456
  '@typescript-eslint/types': 8.24.0
9457
  '@typescript-eslint/typescript-estree': 8.24.0([email protected])
9458
+ eslint: 9.20.1
9459
  typescript: 5.7.3
9460
  transitivePeerDependencies:
9461
  - supports-color
 
9481
 
9482
  '@ungap/[email protected]': {}
9483
 
9484
9485
  dependencies:
9486
  '@unocss/core': 0.61.9
9487
  '@unocss/reset': 0.61.9
9488
+ '@unocss/vite': 0.61.9([email protected])([email protected])
9489
+ vite: 5.4.14([email protected])
 
9490
  transitivePeerDependencies:
9491
  - rollup
9492
  - supports-color
 
9623
  dependencies:
9624
  '@unocss/core': 0.61.9
9625
 
9626
9627
  dependencies:
9628
  '@ampproject/remapping': 2.3.0
9629
  '@rollup/pluginutils': 5.1.4([email protected])
 
9635
  chokidar: 3.6.0
9636
  fast-glob: 3.3.3
9637
  magic-string: 0.30.17
9638
+ vite: 5.4.14([email protected])
9639
  transitivePeerDependencies:
9640
  - rollup
9641
  - supports-color
 
9663
  transitivePeerDependencies:
9664
  - babel-plugin-macros
9665
 
9666
+ '@vanilla-extract/[email protected]([email protected])':
9667
  dependencies:
9668
  '@babel/core': 7.26.8
9669
  '@babel/plugin-syntax-typescript': 7.25.9(@babel/[email protected])
 
9676
  lodash: 4.17.21
9677
  mlly: 1.7.4
9678
  outdent: 0.8.0
9679
+ vite: 5.4.14([email protected])
9680
+ vite-node: 1.6.1([email protected])
9681
  transitivePeerDependencies:
9682
  - '@types/node'
9683
  - babel-plugin-macros
 
9699
  chai: 5.1.2
9700
  tinyrainbow: 1.2.0
9701
 
9702
9703
  dependencies:
9704
  '@vitest/spy': 2.1.9
9705
  estree-walker: 3.0.3
9706
  magic-string: 0.30.17
9707
+ vite: 5.4.14([email protected])
 
9708
 
9709
  '@vitest/[email protected]':
9710
  dependencies:
 
9782
  '@ai-sdk/ui-utils': 1.1.11([email protected])
9783
  '@opentelemetry/api': 1.9.0
9784
  jsondiffpatch: 0.6.0
 
9785
  react: 18.3.1
9786
  zod: 3.24.1
9787
 
 
10522
 
10523
10524
 
10525
10526
  dependencies:
10527
+ eslint: 9.20.1
10528
  semver: 7.7.1
10529
 
10530
10531
  dependencies:
10532
+ eslint: 9.20.1
10533
 
10534
10535
  dependencies:
10536
+ eslint: 9.20.1
10537
  esquery: 1.6.0
10538
  jsonc-eslint-parser: 2.4.0
10539
 
10540
10541
  dependencies:
10542
+ '@eslint-community/eslint-utils': 4.4.1([email protected])
10543
+ eslint: 9.20.1
10544
+ eslint-compat-utils: 0.6.4([email protected])
10545
+ eslint-json-compat-utils: 0.2.1([email protected])([email protected])
10546
  espree: 9.6.1
10547
  graphemer: 1.4.0
10548
  jsonc-eslint-parser: 2.4.0
 
10551
  transitivePeerDependencies:
10552
  - '@eslint/json'
10553
 
10554
10555
  dependencies:
10556
+ eslint: 9.20.1
10557
+ eslint-config-prettier: 9.1.0([email protected])
10558
  prettier: 3.5.0
10559
  prettier-linter-helpers: 1.0.0
10560
  synckit: 0.9.2
 
 
10561
 
10562
10563
  dependencies:
 
10568
 
10569
10570
 
10571
10572
  dependencies:
10573
+ '@eslint-community/eslint-utils': 4.4.1([email protected])
10574
  '@eslint-community/regexpp': 4.12.1
10575
  '@eslint/config-array': 0.19.2
10576
  '@eslint/core': 0.11.0
 
10604
  minimatch: 3.1.2
10605
  natural-compare: 1.4.0
10606
  optionator: 0.9.4
 
 
10607
  transitivePeerDependencies:
10608
  - supports-color
10609
 
 
10832
 
10833
10834
 
10835
10836
  dependencies:
10837
  motion-dom: 11.18.1
10838
  motion-utils: 11.18.1
 
 
10839
  react: 18.3.1
10840
  react-dom: 18.3.1([email protected])
10841
+ tslib: 2.8.1
10842
 
10843
10844
 
 
11429
 
11430
11431
 
 
 
 
 
11432
11433
  dependencies:
11434
  sourcemap-codec: 1.4.8
 
12258
 
12259
12260
 
 
 
 
 
 
12261
12262
 
12263
 
12366
  '@ai-sdk/provider': 0.0.24
12367
  '@ai-sdk/provider-utils': 1.0.20([email protected])
12368
  partial-json: 0.1.7
 
12369
  zod: 3.24.1
12370
 
12371
 
12543
12544
  dependencies:
12545
  lilconfig: 3.1.3
 
 
12546
  postcss: 8.5.2
12547
+ yaml: 2.7.0
12548
 
12549
12550
  dependencies:
 
12700
  iconv-lite: 0.4.24
12701
  unpipe: 1.0.0
12702
 
12703
12704
  dependencies:
12705
  '@babel/runtime': 7.26.7
12706
  css-box-model: 1.2.1
 
12708
  raf-schd: 4.0.3
12709
  react: 18.3.1
12710
  react-dom: 18.3.1([email protected])
12711
+ react-redux: 7.2.9([email protected])([email protected])
12712
  redux: 4.2.1
12713
  use-memo-one: 1.1.3([email protected])
12714
  transitivePeerDependencies:
 
12723
  dependencies:
12724
  dnd-core: 16.0.1
12725
 
12726
12727
  dependencies:
12728
  '@react-dnd/invariant': 4.0.2
12729
  '@react-dnd/shallowequal': 4.0.2
12730
+ '@types/react': 18.3.18
12731
  dnd-core: 16.0.1
12732
  fast-deep-equal: 3.1.3
12733
  hoist-non-react-statics: 3.3.2
12734
  react: 18.3.1
 
 
 
 
12735
 
12736
12737
  dependencies:
 
12739
  react: 18.3.1
12740
  scheduler: 0.23.2
12741
 
12742
12743
  dependencies:
12744
  react: 18.3.1
12745
  react-dom: 18.3.1([email protected])
 
12769
  transitivePeerDependencies:
12770
  - supports-color
12771
 
12772
12773
  dependencies:
12774
  '@babel/runtime': 7.26.7
12775
  '@types/react-redux': 7.1.34
 
12777
  loose-envify: 1.4.0
12778
  prop-types: 15.8.1
12779
  react: 18.3.1
 
 
12780
  react-dom: 18.3.1([email protected])
12781
+ react-is: 17.0.2
12782
 
12783
12784
 
12785
12786
  dependencies:
12787
+ '@types/react': 18.3.18
12788
  react: 18.3.1
12789
  react-style-singleton: 2.2.3(@types/[email protected])([email protected])
12790
  tslib: 2.8.1
 
 
12791
 
12792
12793
  dependencies:
12794
+ '@types/react': 18.3.18
12795
  react: 18.3.1
12796
  react-remove-scroll-bar: 2.3.8(@types/[email protected])([email protected])
12797
  react-style-singleton: 2.2.3(@types/[email protected])([email protected])
12798
  tslib: 2.8.1
12799
  use-callback-ref: 1.3.3(@types/[email protected])([email protected])
12800
  use-sidecar: 1.1.3(@types/[email protected])([email protected])
 
 
12801
 
12802
12803
  dependencies:
12804
  react: 18.3.1
12805
  react-dom: 18.3.1([email protected])
12806
 
12807
12808
  dependencies:
12809
  '@remix-run/router': 1.22.0
12810
  react: 18.3.1
 
12818
 
12819
12820
  dependencies:
12821
+ '@types/react': 18.3.18
12822
  get-nonce: 1.0.1
12823
  react: 18.3.1
12824
  tslib: 2.8.1
 
 
12825
 
12826
12827
  dependencies:
12828
  clsx: 2.1.1
12829
  react: 18.3.1
 
12954
  mdast-util-to-markdown: 2.1.2
12955
  unified: 11.0.5
12956
 
12957
12958
  dependencies:
12959
+ '@remix-run/react': 2.15.3([email protected])([email protected])([email protected])
12960
  '@remix-run/server-runtime': 2.15.3([email protected])
12961
  react: 18.3.1
12962
  react-dom: 18.3.1([email protected])
12963
 
12964
12965
  dependencies:
 
 
12966
  '@remix-run/cloudflare': 2.15.3(@cloudflare/[email protected])([email protected])
12967
  '@remix-run/node': 2.15.3([email protected])
12968
+ '@remix-run/react': 2.15.3([email protected])([email protected])([email protected])
 
12969
  react: 18.3.1
12970
+ type-fest: 4.34.1
12971
  zod: 3.24.1
12972
 
12973
 
13553
  typescript: 5.7.3
13554
 
13555
13556
+ dependencies:
13557
  typescript: 5.7.3
13558
 
13559
 
13586
  media-typer: 0.3.0
13587
  mime-types: 2.1.35
13588
 
13589
13590
  dependencies:
13591
+ '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/[email protected])([email protected])([email protected])
13592
+ '@typescript-eslint/parser': 8.24.0([email protected])([email protected])
13593
+ '@typescript-eslint/utils': 8.24.0([email protected])([email protected])
13594
+ eslint: 9.20.1
13595
  typescript: 5.7.3
13596
  transitivePeerDependencies:
13597
  - supports-color
 
13713
 
13714
13715
 
13716
13717
  dependencies:
13718
+ '@unocss/astro': 0.61.9([email protected])([email protected])
13719
  '@unocss/cli': 0.61.9([email protected])
13720
  '@unocss/core': 0.61.9
13721
  '@unocss/extractor-arbitrary-variants': 0.61.9
 
13734
  '@unocss/transformer-compile-class': 0.61.9
13735
  '@unocss/transformer-directives': 0.61.9
13736
  '@unocss/transformer-variant-group': 0.61.9
13737
+ '@unocss/vite': 0.61.9([email protected])([email protected])
13738
+ vite: 5.4.14([email protected])
 
13739
  transitivePeerDependencies:
13740
  - postcss
13741
  - rollup
 
13760
 
13761
13762
  dependencies:
13763
+ '@types/react': 18.3.18
13764
  react: 18.3.1
13765
  tslib: 2.8.1
 
 
13766
 
13767
13768
  dependencies:
 
13770
 
13771
13772
  dependencies:
13773
+ '@types/react': 18.3.18
13774
  detect-node-es: 1.1.0
13775
  react: 18.3.1
13776
  tslib: 2.8.1
 
 
13777
 
13778
13779
  dependencies:
 
13806
  sade: 1.8.1
13807
 
13808
13809
+ dependencies:
13810
  typescript: 5.7.3
13811
 
13812
 
13849
  '@types/unist': 3.0.3
13850
  vfile-message: 4.0.2
13851
 
13852
13853
  dependencies:
13854
  cac: 6.7.14
13855
  debug: 4.4.0
13856
  pathe: 1.1.2
13857
  picocolors: 1.1.1
13858
+ vite: 5.4.14([email protected])
13859
  transitivePeerDependencies:
13860
  - '@types/node'
13861
  - less
 
13867
  - supports-color
13868
  - terser
13869
 
13870
13871
  dependencies:
13872
  cac: 6.7.14
13873
  debug: 4.4.0
13874
  es-module-lexer: 1.6.0
13875
  pathe: 1.1.2
13876
+ vite: 5.4.14([email protected])
13877
  transitivePeerDependencies:
13878
  - '@types/node'
13879
  - less
 
13885
  - supports-color
13886
  - terser
13887
 
13888
13889
  dependencies:
13890
  '@rollup/plugin-inject': 5.0.5([email protected])
13891
  node-stdlib-browser: 1.3.1
13892
+ vite: 5.4.14([email protected])
13893
  transitivePeerDependencies:
13894
  - rollup
13895
 
13896
13897
  dependencies:
13898
+ vite: 5.4.14([email protected])
13899
 
13900
13901
  dependencies:
13902
  debug: 4.4.0
13903
  globrex: 0.1.2
13904
  tsconfck: 3.1.5([email protected])
13905
+ vite: 5.4.14([email protected])
 
13906
  transitivePeerDependencies:
13907
  - supports-color
13908
  - typescript
13909
 
13910
13911
  dependencies:
13912
  esbuild: 0.21.5
13913
  postcss: 8.5.2
13914
  rollup: 4.34.6
13915
+ sass-embedded: 1.83.4
13916
  optionalDependencies:
 
13917
  fsevents: 2.3.3
 
13918
 
13919
13920
  dependencies:
13921
  '@vitest/expect': 2.1.9
13922
+ '@vitest/mocker': 2.1.9([email protected])
13923
  '@vitest/pretty-format': 2.1.9
13924
  '@vitest/runner': 2.1.9
13925
  '@vitest/snapshot': 2.1.9
 
13935
  tinyexec: 0.3.2
13936
  tinypool: 1.0.2
13937
  tinyrainbow: 1.2.0
13938
+ vite: 5.4.14([email protected])
13939
+ vite-node: 2.1.9([email protected])
13940
  why-is-node-running: 2.3.0
 
 
13941
  transitivePeerDependencies:
13942
  - less
13943
  - lightningcss
 
14002
14003
  dependencies:
14004
  '@cloudflare/kv-asset-handler': 0.3.4
14005
+ '@cloudflare/workers-types': 4.20250204.0
14006
  '@esbuild-plugins/node-globals-polyfill': 0.2.3([email protected])
14007
  '@esbuild-plugins/node-modules-polyfill': 0.2.2([email protected])
14008
  blake3-wasm: 2.1.5
 
14012
  unenv: 2.0.0-rc.1
14013
  workerd: 1.20250204.0
14014
  optionalDependencies:
 
14015
  fsevents: 2.3.3
14016
  sharp: 0.33.5
14017
  transitivePeerDependencies:
 
14060
 
14061
14062
 
14063
14064
+ dependencies:
14065
  '@types/react': 18.3.18
14066
  react: 18.3.1
 
14067
 
14068
vite.config.ts CHANGED
@@ -89,7 +89,6 @@ export default defineConfig((config) => {
89
  __PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies),
90
  __PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies),
91
  __PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies),
92
- 'module': {},
93
  },
94
  build: {
95
  target: 'esnext',
 
89
  __PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies),
90
  __PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies),
91
  __PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies),
 
92
  },
93
  build: {
94
  target: 'esnext',
wrangler.toml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ #:schema node_modules/wrangler/config-schema.json
2
+ name = "bolt"
3
+ compatibility_flags = ["nodejs_compat"]
4
+ compatibility_date = "2024-07-01"
5
+ pages_build_output_dir = "./build/client"
6
+ send_metrics = false