mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-09-02 20:12:48 +00:00
* 🎨 feat: improve file display and overflow handling in SidePanel components * 🎨 feat: enhance bookmarks management UI and improve accessibility features * 🎨 feat: enhance BookmarkTable and BookmarkTableRow components for improved layout and performance * 🎨 feat: enhance file display and interaction in FilesView and ImagePreview components * 🎨 feat: adjust minimum width for filename filter input in DataTable component * 🎨 feat: enhance file upload UI with improved layout and styling adjustments * 🎨 feat: add surface-hover-alt color and update FileContainer styling for improved UI * 🎨 feat: update ImagePreview component styling for improved visual consistency * 🎨 feat: add MaximizeChatSpace component and integrate chat space maximization feature * 🎨 feat: enhance DataTable component with transition effects and update Checkbox styling for improved accessibility * fix: enhance a11y for Bookmark buttons by adding space key support, ARIA labels, and correct html role for key presses * fix: return focus back to trigger for BookmarkEditDialog (Edit and new bookmark buttons) * refactor: ShareButton and ExportModal components children prop support; refactor DropdownPopup item handling * refactor: enhance ExportAndShareMenu and ShareButton components with improved props handling and accessibility features * refactor: add ref prop support to MenuItemProps and update ExportAndShareMenu and DropdownPopup components so focus correctly returns to menu item * refactor: enhance ConvoOptions and DeleteButton components with improved props handling and accessibility features * refactor: add triggerRef support to DeleteButton and update ConvoOptions for improved dialog handling * refactor: accessible bookmarks menu * refactor: improve styling and accessibility for bookmarks components * refactor: add focusLoop support to DropdownPopup and update BookmarkMenu with Tooltip * refactor: integrate TooltipAnchor into ExportAndShareMenu for enhanced accessibility --------- Co-authored-by: Danny Avila <danny@librechat.ai>
81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
import { memo, useMemo } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
import {
|
|
supportsFiles,
|
|
mergeFileConfig,
|
|
isAgentsEndpoint,
|
|
EndpointFileConfig,
|
|
fileConfig as defaultFileConfig,
|
|
} from 'librechat-data-provider';
|
|
import { useGetFileConfig } from '~/data-provider';
|
|
import AttachFileMenu from './AttachFileMenu';
|
|
import { useChatContext } from '~/Providers';
|
|
import { useFileHandling } from '~/hooks';
|
|
import AttachFile from './AttachFile';
|
|
import FileRow from './FileRow';
|
|
import store from '~/store';
|
|
|
|
function FileFormWrapper({
|
|
children,
|
|
disableInputs,
|
|
}: {
|
|
disableInputs: boolean;
|
|
children?: React.ReactNode;
|
|
}) {
|
|
const chatDirection = useRecoilValue(store.chatDirection).toLowerCase();
|
|
const { files, setFiles, conversation, setFilesLoading } = useChatContext();
|
|
const { endpoint: _endpoint, endpointType } = conversation ?? { endpoint: null };
|
|
const isAgents = useMemo(() => isAgentsEndpoint(_endpoint), [_endpoint]);
|
|
|
|
const { handleFileChange, abortUpload, setToolResource } = useFileHandling();
|
|
|
|
const { data: fileConfig = defaultFileConfig } = useGetFileConfig({
|
|
select: (data) => mergeFileConfig(data),
|
|
});
|
|
|
|
const isRTL = chatDirection === 'rtl';
|
|
|
|
const endpointFileConfig = fileConfig.endpoints[_endpoint ?? ''] as
|
|
| EndpointFileConfig
|
|
| undefined;
|
|
|
|
const endpointSupportsFiles: boolean = supportsFiles[endpointType ?? _endpoint ?? ''] ?? false;
|
|
const isUploadDisabled = (disableInputs || endpointFileConfig?.disabled) ?? false;
|
|
|
|
const renderAttachFile = () => {
|
|
if (isAgents) {
|
|
return (
|
|
<AttachFileMenu
|
|
isRTL={isRTL}
|
|
disabled={disableInputs}
|
|
setToolResource={setToolResource}
|
|
handleFileChange={handleFileChange}
|
|
/>
|
|
);
|
|
}
|
|
if (endpointSupportsFiles && !isUploadDisabled) {
|
|
return (
|
|
<AttachFile isRTL={isRTL} disabled={disableInputs} handleFileChange={handleFileChange} />
|
|
);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<FileRow
|
|
files={files}
|
|
setFiles={setFiles}
|
|
abortUpload={abortUpload}
|
|
setFilesLoading={setFilesLoading}
|
|
isRTL={isRTL}
|
|
Wrapper={({ children }) => <div className="mx-2 mt-2 flex flex-wrap gap-2">{children}</div>}
|
|
/>
|
|
{children}
|
|
{renderAttachFile()}
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default memo(FileFormWrapper);
|