diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..5f0889ce91 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.tool-versions b/.tool-versions index 427253d38b..fb60688b38 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -nodejs 20.15.1 -pnpm 9.4.0 +nodejs 22.14.0 +pnpm 10.12.3 diff --git a/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx index c4f90f43a1..0eae9a6f11 100644 --- a/app/components/chat/BaseChat.tsx +++ b/app/components/chat/BaseChat.tsx @@ -1,17 +1,16 @@ import type { Message } from 'ai'; import React, { type RefCallback } from 'react'; import { ClientOnly } from 'remix-utils/client-only'; +import styles from './BaseChat.module.scss'; +import { Messages } from './Messages.client'; +import { SendButton } from './SendButton.client'; import { Menu } from '~/components/sidebar/Menu.client'; import { IconButton } from '~/components/ui/IconButton'; import { Workbench } from '~/components/workbench/Workbench.client'; import { classNames } from '~/utils/classNames'; -import { Messages } from './Messages.client'; -import { SendButton } from './SendButton.client'; - -import styles from './BaseChat.module.scss'; interface BaseChatProps { - textareaRef?: React.RefObject | undefined; + textareaRef?: React.RefObject | undefined; messageRef?: RefCallback | undefined; scrollRef?: RefCallback | undefined; showChat?: boolean; diff --git a/app/components/chat/Chat.client.tsx b/app/components/chat/Chat.client.tsx index dff7598e40..0d89b4b219 100644 --- a/app/components/chat/Chat.client.tsx +++ b/app/components/chat/Chat.client.tsx @@ -4,6 +4,7 @@ import { useChat } from 'ai/react'; import { useAnimate } from 'framer-motion'; import { memo, useEffect, useRef, useState } from 'react'; import { cssTransition, toast, ToastContainer } from 'react-toastify'; +import { BaseChat } from './BaseChat'; import { useMessageParser, usePromptEnhancer, useShortcuts, useSnapScroll } from '~/lib/hooks'; import { useChatHistory } from '~/lib/persistence'; import { chatStore } from '~/lib/stores/chat'; @@ -11,7 +12,6 @@ import { workbenchStore } from '~/lib/stores/workbench'; import { fileModificationsToHTML } from '~/utils/diff'; import { cubicEasingFn } from '~/utils/easings'; import { createScopedLogger, renderLogger } from '~/utils/logger'; -import { BaseChat } from './BaseChat'; const toastAnimation = cssTransition({ enter: 'animated fadeInRight', diff --git a/app/components/chat/CodeBlock.tsx b/app/components/chat/CodeBlock.tsx index e48913ce55..bfda9724c8 100644 --- a/app/components/chat/CodeBlock.tsx +++ b/app/components/chat/CodeBlock.tsx @@ -1,10 +1,9 @@ import { memo, useEffect, useState } from 'react'; import { bundledLanguages, codeToHtml, isSpecialLang, type BundledLanguage, type SpecialLanguage } from 'shiki'; +import styles from './CodeBlock.module.scss'; import { classNames } from '~/utils/classNames'; import { createScopedLogger } from '~/utils/logger'; -import styles from './CodeBlock.module.scss'; - const logger = createScopedLogger('CodeBlock'); interface CodeBlockProps { diff --git a/app/components/chat/Markdown.tsx b/app/components/chat/Markdown.tsx index a91df43d30..41b2db04b8 100644 --- a/app/components/chat/Markdown.tsx +++ b/app/components/chat/Markdown.tsx @@ -1,12 +1,12 @@ import { memo, useMemo } from 'react'; import ReactMarkdown, { type Components } from 'react-markdown'; import type { BundledLanguage } from 'shiki'; -import { createScopedLogger } from '~/utils/logger'; -import { rehypePlugins, remarkPlugins, allowedHTMLElements } from '~/utils/markdown'; import { Artifact } from './Artifact'; import { CodeBlock } from './CodeBlock'; import styles from './Markdown.module.scss'; +import { createScopedLogger } from '~/utils/logger'; +import { rehypePlugins, remarkPlugins, allowedHTMLElements } from '~/utils/markdown'; const logger = createScopedLogger('MarkdownComponent'); @@ -61,14 +61,15 @@ export const Markdown = memo(({ children, html = false, limitedMarkdown = false }, []); return ( - - {children} - +
+ + {children} + +
); }); diff --git a/app/components/chat/Messages.client.tsx b/app/components/chat/Messages.client.tsx index 2f35f49d46..63a8441ba3 100644 --- a/app/components/chat/Messages.client.tsx +++ b/app/components/chat/Messages.client.tsx @@ -1,8 +1,8 @@ import type { Message } from 'ai'; import React from 'react'; -import { classNames } from '~/utils/classNames'; import { AssistantMessage } from './AssistantMessage'; import { UserMessage } from './UserMessage'; +import { classNames } from '~/utils/classNames'; interface MessagesProps { id?: string; diff --git a/app/components/chat/UserMessage.tsx b/app/components/chat/UserMessage.tsx index 2f4e1d52d0..c9838dd0d1 100644 --- a/app/components/chat/UserMessage.tsx +++ b/app/components/chat/UserMessage.tsx @@ -1,5 +1,5 @@ -import { modificationsRegex } from '~/utils/diff'; import { Markdown } from './Markdown'; +import { modificationsRegex } from '~/utils/diff'; interface UserMessageProps { content: string; diff --git a/app/components/editor/codemirror/CodeMirrorEditor.tsx b/app/components/editor/codemirror/CodeMirrorEditor.tsx index 8e9f3a3fe9..117acca085 100644 --- a/app/components/editor/codemirror/CodeMirrorEditor.tsx +++ b/app/components/editor/codemirror/CodeMirrorEditor.tsx @@ -17,14 +17,14 @@ import { type Tooltip, } from '@codemirror/view'; import { memo, useEffect, useRef, useState, type MutableRefObject } from 'react'; -import type { Theme } from '~/types/theme'; -import { classNames } from '~/utils/classNames'; -import { debounce } from '~/utils/debounce'; -import { createScopedLogger, renderLogger } from '~/utils/logger'; import { BinaryContent } from './BinaryContent'; import { getTheme, reconfigureTheme } from './cm-theme'; import { indentKeyBinding } from './indent'; import { getLanguage } from './languages'; +import type { Theme } from '~/types/theme'; +import { classNames } from '~/utils/classNames'; +import { debounce } from '~/utils/debounce'; +import { createScopedLogger, renderLogger } from '~/utils/logger'; const logger = createScopedLogger('CodeMirrorEditor'); @@ -135,10 +135,10 @@ export const CodeMirrorEditor = memo( const [languageCompartment] = useState(new Compartment()); const containerRef = useRef(null); - const viewRef = useRef(); - const themeRef = useRef(); - const docRef = useRef(); - const editorStatesRef = useRef(); + const viewRef = useRef(null); + const themeRef = useRef(null); + const docRef = useRef(null); + const editorStatesRef = useRef(null); const onScrollRef = useRef(onScroll); const onChangeRef = useRef(onChange); const onSaveRef = useRef(onSave); @@ -151,7 +151,7 @@ export const CodeMirrorEditor = memo( onScrollRef.current = onScroll; onChangeRef.current = onChange; onSaveRef.current = onSave; - docRef.current = doc; + docRef.current = doc ?? null; themeRef.current = theme; }); @@ -188,7 +188,7 @@ export const CodeMirrorEditor = memo( return () => { viewRef.current?.destroy(); - viewRef.current = undefined; + viewRef.current = null; }; }, []); diff --git a/app/components/editor/codemirror/cm-theme.ts b/app/components/editor/codemirror/cm-theme.ts index 6f3f3639ff..fedda83fcf 100644 --- a/app/components/editor/codemirror/cm-theme.ts +++ b/app/components/editor/codemirror/cm-theme.ts @@ -1,8 +1,8 @@ import { Compartment, type Extension } from '@codemirror/state'; import { EditorView } from '@codemirror/view'; import { vscodeDark, vscodeLight } from '@uiw/codemirror-theme-vscode'; -import type { Theme } from '~/types/theme.js'; import type { EditorSettings } from './CodeMirrorEditor.js'; +import type { Theme } from '~/types/theme.js'; export const darkTheme = EditorView.theme({}, { dark: true }); export const themeSelection = new Compartment(); diff --git a/app/components/header/Header.tsx b/app/components/header/Header.tsx index 15cf4bfbd0..5bbebaeebb 100644 --- a/app/components/header/Header.tsx +++ b/app/components/header/Header.tsx @@ -1,9 +1,9 @@ import { useStore } from '@nanostores/react'; import { ClientOnly } from 'remix-utils/client-only'; -import { chatStore } from '~/lib/stores/chat'; -import { classNames } from '~/utils/classNames'; import { HeaderActionButtons } from './HeaderActionButtons.client'; import { ChatDescription } from '~/lib/persistence/ChatDescription.client'; +import { chatStore } from '~/lib/stores/chat'; +import { classNames } from '~/utils/classNames'; export function Header() { const chat = useStore(chatStore); diff --git a/app/components/header/HeaderActionButtons.client.tsx b/app/components/header/HeaderActionButtons.client.tsx index 6f8e8432a7..cd51a82716 100644 --- a/app/components/header/HeaderActionButtons.client.tsx +++ b/app/components/header/HeaderActionButtons.client.tsx @@ -23,7 +23,7 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { } }} > -
+