diff --git a/client/src/a11y/LiveAnnouncer.tsx b/client/src/a11y/LiveAnnouncer.tsx index 9df48bf2e9..29912b49af 100644 --- a/client/src/a11y/LiveAnnouncer.tsx +++ b/client/src/a11y/LiveAnnouncer.tsx @@ -1,6 +1,6 @@ // client/src/a11y/LiveAnnouncer.tsx import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react'; -import type { AnnounceOptions } from '~/Providers/AnnouncerContext'; +import type { AnnounceOptions } from '~/common'; import AnnouncerContext from '~/Providers/AnnouncerContext'; import useLocalize from '~/hooks/useLocalize'; import Announcer from './Announcer'; diff --git a/client/src/components/Audio/Voices.tsx b/client/src/components/Audio/Voices.tsx index ab6b0a8609..963ff250d8 100644 --- a/client/src/components/Audio/Voices.tsx +++ b/client/src/components/Audio/Voices.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { useRecoilState } from 'recoil'; import type { Option } from '~/common'; -import DropdownNoState from '~/components/ui/DropdownNoState'; import { useLocalize, useTTSBrowser, useTTSEdge, useTTSExternal } from '~/hooks'; import { Dropdown } from '~/components/ui'; import { logger } from '~/utils'; diff --git a/client/src/components/Auth/AuthLayout.tsx b/client/src/components/Auth/AuthLayout.tsx index 0ff99f357c..6df73d2cf9 100644 --- a/client/src/components/Auth/AuthLayout.tsx +++ b/client/src/components/Auth/AuthLayout.tsx @@ -9,8 +9,9 @@ import Footer from './Footer'; const ErrorRender = ({ children }: { children: React.ReactNode }) => (
{children}
@@ -36,8 +37,9 @@ function AuthLayout({ }) { const localize = useLocalize(); + const hasStartupConfigError = startupConfigError !== null && startupConfigError !== undefined; const DisplayError = () => { - if (startupConfigError !== null && startupConfigError !== undefined) { + if (hasStartupConfigError) { return {localize('com_auth_error_login_server')}; } else if (error === 'com_auth_error_invalid_reset_token') { return ( @@ -49,7 +51,7 @@ function AuthLayout({ {localize('com_auth_to_try_again')} ); - } else if (error) { + } else if (error != null && error) { return {localize(error)}; } return null; @@ -60,7 +62,11 @@ function AuthLayout({
- Logo + {localize('com_ui_logo',
@@ -70,7 +76,7 @@ function AuthLayout({
- {!startupConfigError && !isFetching && ( + {!hasStartupConfigError && !isFetching && (

(
{children}
diff --git a/client/src/components/Chat/ExportAndShareMenu.tsx b/client/src/components/Chat/ExportAndShareMenu.tsx index 420c753310..349658a41e 100644 --- a/client/src/components/Chat/ExportAndShareMenu.tsx +++ b/client/src/components/Chat/ExportAndShareMenu.tsx @@ -1,11 +1,11 @@ -import { useState, useId } from 'react'; +import { useState, useId, useRef } from 'react'; import { useRecoilValue } from 'recoil'; import * as Ariakit from '@ariakit/react'; import { Upload, Share2 } from 'lucide-react'; import { ShareButton } from '~/components/Conversations/ConvoOptions'; import { useMediaQuery, useLocalize } from '~/hooks'; +import ExportModal from '~/components/Nav/ExportConversation/ExportModal'; import { DropdownPopup } from '~/components/ui'; -import { ExportModal } from '../Nav'; import store from '~/store'; export default function ExportAndShareMenu({ @@ -19,6 +19,7 @@ export default function ExportAndShareMenu({ const [showShareDialog, setShowShareDialog] = useState(false); const menuId = useId(); + const exportButtonRef = useRef(null); const isSmallScreen = useMediaQuery('(max-width: 768px)'); const conversation = useRecoilValue(store.conversationByIndex(0)); @@ -68,6 +69,7 @@ export default function ExportAndShareMenu({ setIsOpen={setIsPopoverActive} trigger={ )} diff --git a/client/src/components/Chat/Menus/EndpointsMenu.tsx b/client/src/components/Chat/Menus/EndpointsMenu.tsx index f4ac27ccc4..fc92c89d98 100644 --- a/client/src/components/Chat/Menus/EndpointsMenu.tsx +++ b/client/src/components/Chat/Menus/EndpointsMenu.tsx @@ -5,6 +5,7 @@ import type { FC } from 'react'; import { useChatContext, useAgentsMapContext, useAssistantsMapContext } from '~/Providers'; import { mapEndpoints, getEntity } from '~/utils'; import EndpointItems from './Endpoints/MenuItems'; +import useLocalize from '~/hooks/useLocalize'; import TitleButton from './UI/TitleButton'; const EndpointsMenu: FC = () => { @@ -12,6 +13,7 @@ const EndpointsMenu: FC = () => { select: mapEndpoints, }); + const localize = useLocalize(); const agentsMap = useAgentsMapContext(); const assistantMap = useAssistantsMapContext(); const { conversation } = useChatContext(); @@ -51,6 +53,9 @@ const EndpointsMenu: FC = () => { diff --git a/client/src/components/Chat/Menus/Models/MenuButton.tsx b/client/src/components/Chat/Menus/Models/MenuButton.tsx index aa568231e4..24ef1e9452 100644 --- a/client/src/components/Chat/Menus/Models/MenuButton.tsx +++ b/client/src/components/Chat/Menus/Models/MenuButton.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react'; import { Trigger } from '@radix-ui/react-popover'; import type { TModelSpec, TEndpointsConfig } from 'librechat-data-provider'; import { useLocalize } from '~/hooks'; @@ -20,6 +21,8 @@ export default function MenuButton({ endpointsConfig: TEndpointsConfig; }) { const localize = useLocalize(); + const [isExpanded, setIsExpanded] = useState(false); + return (