2024-08-18 19:02:46 -04:00
|
|
|
import * as Ariakit from '@ariakit/react';
|
|
|
|
|
import { matchSorter } from 'match-sorter';
|
2025-02-21 15:02:07 -05:00
|
|
|
import { Search, ChevronDown } from 'lucide-react';
|
2025-02-13 10:07:40 -05:00
|
|
|
import { useMemo, useState, useRef, memo, useEffect } from 'react';
|
|
|
|
|
import { SelectRenderer } from '@ariakit/react-core/select/select-renderer';
|
2024-08-18 19:02:46 -04:00
|
|
|
import type { OptionWithIcon } from '~/common';
|
2025-02-13 10:07:40 -05:00
|
|
|
import { cn } from '~/utils';
|
2024-08-18 19:02:46 -04:00
|
|
|
|
|
|
|
|
interface ControlComboboxProps {
|
|
|
|
|
selectedValue: string;
|
|
|
|
|
displayValue?: string;
|
|
|
|
|
items: OptionWithIcon[];
|
|
|
|
|
setValue: (value: string) => void;
|
|
|
|
|
ariaLabel: string;
|
|
|
|
|
searchPlaceholder?: string;
|
|
|
|
|
selectPlaceholder?: string;
|
|
|
|
|
isCollapsed: boolean;
|
|
|
|
|
SelectIcon?: React.ReactNode;
|
2025-02-21 15:02:07 -05:00
|
|
|
containerClassName?: string;
|
|
|
|
|
iconClassName?: string;
|
|
|
|
|
showCarat?: boolean;
|
|
|
|
|
className?: string;
|
|
|
|
|
disabled?: boolean;
|
|
|
|
|
iconSide?: 'left' | 'right';
|
|
|
|
|
selectId?: string;
|
2024-08-18 19:02:46 -04:00
|
|
|
}
|
|
|
|
|
|
2025-01-24 18:15:47 -05:00
|
|
|
const ROW_HEIGHT = 36;
|
|
|
|
|
|
2024-08-21 18:18:45 -04:00
|
|
|
function ControlCombobox({
|
2024-08-18 19:02:46 -04:00
|
|
|
selectedValue,
|
|
|
|
|
displayValue,
|
|
|
|
|
items,
|
|
|
|
|
setValue,
|
|
|
|
|
ariaLabel,
|
|
|
|
|
searchPlaceholder,
|
|
|
|
|
selectPlaceholder,
|
2025-02-21 15:02:07 -05:00
|
|
|
containerClassName,
|
2024-08-18 19:02:46 -04:00
|
|
|
isCollapsed,
|
|
|
|
|
SelectIcon,
|
2025-02-21 15:02:07 -05:00
|
|
|
showCarat,
|
|
|
|
|
className,
|
|
|
|
|
disabled,
|
|
|
|
|
iconClassName,
|
|
|
|
|
iconSide = 'left',
|
|
|
|
|
selectId,
|
2024-08-18 19:02:46 -04:00
|
|
|
}: ControlComboboxProps) {
|
|
|
|
|
const [searchValue, setSearchValue] = useState('');
|
|
|
|
|
const buttonRef = useRef<HTMLButtonElement>(null);
|
|
|
|
|
const [buttonWidth, setButtonWidth] = useState<number | null>(null);
|
|
|
|
|
|
2025-02-13 10:07:40 -05:00
|
|
|
const getItem = (option: OptionWithIcon) => ({
|
|
|
|
|
id: `item-${option.value}`,
|
|
|
|
|
value: option.value as string | undefined,
|
|
|
|
|
label: option.label,
|
|
|
|
|
icon: option.icon,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const combobox = Ariakit.useComboboxStore({
|
|
|
|
|
defaultItems: items.map(getItem),
|
|
|
|
|
resetValueOnHide: true,
|
|
|
|
|
value: searchValue,
|
|
|
|
|
setValue: setSearchValue,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const select = Ariakit.useSelectStore({
|
|
|
|
|
combobox,
|
|
|
|
|
defaultItems: items.map(getItem),
|
|
|
|
|
value: selectedValue,
|
|
|
|
|
setValue,
|
|
|
|
|
});
|
|
|
|
|
|
2024-08-18 19:02:46 -04:00
|
|
|
const matches = useMemo(() => {
|
2025-02-13 10:07:40 -05:00
|
|
|
const filteredItems = matchSorter(items, searchValue, {
|
2024-08-18 19:02:46 -04:00
|
|
|
keys: ['value', 'label'],
|
|
|
|
|
baseSort: (a, b) => (a.index < b.index ? -1 : 1),
|
|
|
|
|
});
|
2025-02-13 10:07:40 -05:00
|
|
|
return filteredItems.map(getItem);
|
2024-08-18 19:02:46 -04:00
|
|
|
}, [searchValue, items]);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (buttonRef.current && !isCollapsed) {
|
|
|
|
|
setButtonWidth(buttonRef.current.offsetWidth);
|
|
|
|
|
}
|
|
|
|
|
}, [isCollapsed]);
|
|
|
|
|
|
2025-02-21 15:02:07 -05:00
|
|
|
const selectIconClassName = cn(
|
|
|
|
|
'flex h-5 w-5 items-center justify-center overflow-hidden rounded-full',
|
|
|
|
|
iconClassName,
|
|
|
|
|
);
|
|
|
|
|
const optionIconClassName = cn(
|
|
|
|
|
'mr-2 flex h-5 w-5 items-center justify-center overflow-hidden rounded-full',
|
|
|
|
|
iconClassName,
|
|
|
|
|
);
|
|
|
|
|
|
2025-02-13 10:07:40 -05:00
|
|
|
return (
|
2025-02-21 15:02:07 -05:00
|
|
|
<div className={cn('flex w-full items-center justify-center px-1', containerClassName)}>
|
2025-02-13 10:07:40 -05:00
|
|
|
<Ariakit.SelectLabel store={select} className="sr-only">
|
|
|
|
|
{ariaLabel}
|
|
|
|
|
</Ariakit.SelectLabel>
|
|
|
|
|
<Ariakit.Select
|
|
|
|
|
ref={buttonRef}
|
|
|
|
|
store={select}
|
2025-02-21 15:02:07 -05:00
|
|
|
id={selectId}
|
|
|
|
|
disabled={disabled}
|
2025-01-24 18:15:47 -05:00
|
|
|
className={cn(
|
2025-02-13 10:07:40 -05:00
|
|
|
'flex items-center justify-center gap-2 rounded-full bg-surface-secondary',
|
2025-01-24 18:15:47 -05:00
|
|
|
'text-text-primary hover:bg-surface-tertiary',
|
2025-02-13 10:07:40 -05:00
|
|
|
'border border-border-light',
|
🎨 feat: UI Refresh for Enhanced UX (#6346)
* ✨ feat: Add Expand Chat functionality and improve UI components
* ✨ feat: Introduce Chat Badges feature with editing capabilities and UI enhancements
* ✨ feat: re-implement file attachment functionality with new components and improved UI
* ✨ feat: Enhance BadgeRow component with drag-and-drop functionality and add animations for better user experience
* ✨ feat: Add useChatBadges hook and enhance Badge component with animations and toggle functionality
* feat: Improve Add/Delete Badges + style and bug fixes
* ✨ feat: Refactor EditBadges component and optimize useChatBadges hook for improved performance and readability
* ✨ feat: Add type definition for LucideIcon in EditBadges component
* refactor: Clean up BadgeRow component by removing outdated comment and improving code readability
* refactor: Rename app-icon class to badge-icon for consistency and improve badge styling
* feat: Add Center Chat Input toggle and update related components for improved UI/UX
* refactor: Simplify ChatView and MessagesView components for improved readability and performance
* refactor: Improve layout and positioning of scroll button in MessagesView component
* refactor: Adjust scroll button position in MessagesView component for better visibility
* refactor: Remove redundant background class from Badge component for cleaner styling
* feat: disable chat badges
* refactor: adjust positioning of scroll button and popover for improved layout
* refactor: simplify class names in ChatForm and RemoveFile components for cleaner code
* refactor: move Switcher to HeaderOptions from SidePanel
* fix(Landing): duplicate description
* feat: add SplitText component for animated text display and update Landing component to use it
* feat(Chat): add ConversationStarters component and integrate it into ChatView; remove ConvoStarter component
* feat(Chat): enhance Message component layout and styling for improved readability
* feat(ControlCombobox, Select): enhance styling and add animation for improved UI experience
* feat(Chat): update Header and HeaderNewChat components for improved layout and styling
* feat(Chat): add ModelDropdown (now includes both endpoint and model) and refactor Menu components for improved UI
* feat(ModelDropdown): add Agent Select; removed old AgentSwitcher components
* feat(ModelDropdown): add settings button for user key configuration
* fix(ModelDropdown): the model dropdown wasn't opening automatically when opening the endpoint one
* refactor(Chat): remove unused EndpointsMenu and related components to streamline codebase
* feat: enhance greeting message and improve accessibility fro ModelDropdown
* refactor(Endpoints): add new hooks and components for endpoint management
* feat(Endpoint): add support for modelSpecs
* feat(Endpoints): add mobile support
* fix: type issues
* fix(modelSpec): type issue
* fix(EndpointMenuDropdown): double overflow scroller in mobile model list
* fix: search model on mobile
* refactor: Endpoint/Model/modelSpec dropdown
* refactor: reorganize imports in Endpoint components
* refactor: remove unused translation keys from English locale
* BREAKING: moving to ariakit with new CustomMenu
* refactor: remove unnecessary comments
* refactor: remove EndpointItem, ModelDropdownButton, SpecIcon, and SpecItem components
* 🔧 fix: AI Icon bump when regenerating message
* wip: chat UI refactoring, fix issues
* chore: add recent update to useAutoSave
* feat: add access control for agent permissions in useMentions hook
* refactor: streamline ModelSelector by removing unused endpoints logic
* refactor: enhance ModelSelector and context by integrating endpointsConfig and improving type usage
* feat: update ModelSelectorContext to utilize conversation data for initial state
* feat: add selector effects for synced endpoint handling
* feat: add guard clause for conversation endpoint in useSelectorEffects hook
* fix: safely call onSelectMention and add autofocus to mention input
* chore: typing
* refactor: ModelSelector to streamline key dialog handling and improve endpoint rendering
* refactor: extract SettingsButton component for cleaner endpoint item rendering
* wip: first pass, expand set api key
* wip: first pass, expanding set key
* refactor: update EndpointItem styles for improved layout and hover effects
* refactor: adjust padding in EndpointItem for improved layout consistency
* refactor: update preset structure in useSelectMention to include spec as null
* refactor: rename setKeyDialogOpen to onOpenChange for clarity and consistency, bring focus back to button that opened dialog
* feat: add SpecIcon component for dynamic model spec icons in menu, adjust icon styling
* refactor: update getSelectedIcon to accept additional parameters and improve icon rendering logic
* fix: adjust padding in MessageRender for improved layout
* refactor: remove inline style for menu width in CustomMenu component
* refactor: enhance layout and styling in ModelSpecItem component for better responsiveness
* refactor: update getDefaultModelSpec to accept startupConfig and improve model spec retrieval logic
* refactor: improve key management and default values in ModelSelector and related components
* refactor: adjust menu width and improve responsiveness in CustomMenu and EndpointItem components
* refactor: enhance focus styles and responsiveness in EndpointItem component
* refactor: improve layout and spacing in Header and ModelSelector components for better responsiveness
* refactor: adjust button styles for consistency and improved layout in AddMultiConvo and PresetsMenu components
* fix: initial fix of assistant names
* fix: assistants handling
* chore: update version of librechat-data-provider to 0.7.75 and add 'spec' to excludedKeys
* fix: improve endpoint filtering logic based on interface configuration and access rights
* fix: remove unused HeaderOptions import and set spec to null in presets and mentions
* fix: ensure currentExample is always an object when updating examples
* fix: update interfaceConfig checks to ensure modelSelect is considered for rendering components
* fix: update model selection logic to consider interface configuration when prioritizing model specs
* fix: add missing localizations
* fix: remove unused agent and assistant selection translations
* fix: implement debounced state updates for selected values in useSelectorEffects
* style: minor style changes related to the ModelSelector
* fix: adjust maximum height for popover and set fixed height for model item
* fix: update placeholders for model and endpoint search inputs
* fix: refactor MessageRender and ContentRender components to better match each other
* fix: remove convo fallback for iconURL in MessageRender and ContentRender components
* fix: update handling of spec, iconURL, and modelLabel in conversation presets, to allow better interchangeability
* fix: replace chatGptLabel with modelLabel in OpenAI settings configuration (fully deprecate chatGptLabel)
* fix: remove console log for assistantNames in useEndpoints hook
* refactor: add cleanInput and cleanOutput options to default conversation handling
* chore: update bun.lockb
* fix: set default value for showIconInHeader in getSelectedIcon function
* refactor: enhance error handling in message processing when latest message has existing content blocks
* chore: allow import/no-cycle for messages
* fix: adjust flex properties in BookmarkMenu for better layout
* feat: support both 'prompt' and 'q' as query parameters in useQueryParams hook
* feat: re-enable Badges components
* refactor: disable edit badge component
* chore: rename assistantMap to assistantsMap for consistency
* chore: rename assistantMap to assistantsMap for consistency in Mention component
* feat: set staleTime for various queries to improve data freshness
* feat: add spec field to tQueryParamsSchema for model specification
* feat: enhance useQueryParams to handle model specs
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
2025-03-25 23:50:58 +01:00
|
|
|
isCollapsed ? 'h-10 w-10' : 'h-10 w-full rounded-xl px-3 py-2 text-sm',
|
2025-02-21 15:02:07 -05:00
|
|
|
className,
|
2025-01-24 18:15:47 -05:00
|
|
|
)}
|
|
|
|
|
>
|
2025-02-21 15:02:07 -05:00
|
|
|
{SelectIcon != null && iconSide === 'left' && (
|
|
|
|
|
<div className={selectIconClassName}>{SelectIcon}</div>
|
2025-01-24 18:15:47 -05:00
|
|
|
)}
|
2025-02-13 10:07:40 -05:00
|
|
|
{!isCollapsed && (
|
2025-02-21 15:02:07 -05:00
|
|
|
<>
|
|
|
|
|
<span className="flex-grow truncate text-left">
|
|
|
|
|
{displayValue != null
|
|
|
|
|
? displayValue || selectPlaceholder
|
|
|
|
|
: selectedValue || selectPlaceholder}
|
|
|
|
|
</span>
|
|
|
|
|
{SelectIcon != null && iconSide === 'right' && (
|
|
|
|
|
<div className={selectIconClassName}>{SelectIcon}</div>
|
|
|
|
|
)}
|
|
|
|
|
{showCarat && <ChevronDown className="h-4 w-4 text-text-secondary" />}
|
|
|
|
|
</>
|
2025-02-13 10:07:40 -05:00
|
|
|
)}
|
|
|
|
|
</Ariakit.Select>
|
|
|
|
|
<Ariakit.SelectPopover
|
|
|
|
|
store={select}
|
|
|
|
|
gutter={4}
|
|
|
|
|
portal
|
🎨 feat: UI Refresh for Enhanced UX (#6346)
* ✨ feat: Add Expand Chat functionality and improve UI components
* ✨ feat: Introduce Chat Badges feature with editing capabilities and UI enhancements
* ✨ feat: re-implement file attachment functionality with new components and improved UI
* ✨ feat: Enhance BadgeRow component with drag-and-drop functionality and add animations for better user experience
* ✨ feat: Add useChatBadges hook and enhance Badge component with animations and toggle functionality
* feat: Improve Add/Delete Badges + style and bug fixes
* ✨ feat: Refactor EditBadges component and optimize useChatBadges hook for improved performance and readability
* ✨ feat: Add type definition for LucideIcon in EditBadges component
* refactor: Clean up BadgeRow component by removing outdated comment and improving code readability
* refactor: Rename app-icon class to badge-icon for consistency and improve badge styling
* feat: Add Center Chat Input toggle and update related components for improved UI/UX
* refactor: Simplify ChatView and MessagesView components for improved readability and performance
* refactor: Improve layout and positioning of scroll button in MessagesView component
* refactor: Adjust scroll button position in MessagesView component for better visibility
* refactor: Remove redundant background class from Badge component for cleaner styling
* feat: disable chat badges
* refactor: adjust positioning of scroll button and popover for improved layout
* refactor: simplify class names in ChatForm and RemoveFile components for cleaner code
* refactor: move Switcher to HeaderOptions from SidePanel
* fix(Landing): duplicate description
* feat: add SplitText component for animated text display and update Landing component to use it
* feat(Chat): add ConversationStarters component and integrate it into ChatView; remove ConvoStarter component
* feat(Chat): enhance Message component layout and styling for improved readability
* feat(ControlCombobox, Select): enhance styling and add animation for improved UI experience
* feat(Chat): update Header and HeaderNewChat components for improved layout and styling
* feat(Chat): add ModelDropdown (now includes both endpoint and model) and refactor Menu components for improved UI
* feat(ModelDropdown): add Agent Select; removed old AgentSwitcher components
* feat(ModelDropdown): add settings button for user key configuration
* fix(ModelDropdown): the model dropdown wasn't opening automatically when opening the endpoint one
* refactor(Chat): remove unused EndpointsMenu and related components to streamline codebase
* feat: enhance greeting message and improve accessibility fro ModelDropdown
* refactor(Endpoints): add new hooks and components for endpoint management
* feat(Endpoint): add support for modelSpecs
* feat(Endpoints): add mobile support
* fix: type issues
* fix(modelSpec): type issue
* fix(EndpointMenuDropdown): double overflow scroller in mobile model list
* fix: search model on mobile
* refactor: Endpoint/Model/modelSpec dropdown
* refactor: reorganize imports in Endpoint components
* refactor: remove unused translation keys from English locale
* BREAKING: moving to ariakit with new CustomMenu
* refactor: remove unnecessary comments
* refactor: remove EndpointItem, ModelDropdownButton, SpecIcon, and SpecItem components
* 🔧 fix: AI Icon bump when regenerating message
* wip: chat UI refactoring, fix issues
* chore: add recent update to useAutoSave
* feat: add access control for agent permissions in useMentions hook
* refactor: streamline ModelSelector by removing unused endpoints logic
* refactor: enhance ModelSelector and context by integrating endpointsConfig and improving type usage
* feat: update ModelSelectorContext to utilize conversation data for initial state
* feat: add selector effects for synced endpoint handling
* feat: add guard clause for conversation endpoint in useSelectorEffects hook
* fix: safely call onSelectMention and add autofocus to mention input
* chore: typing
* refactor: ModelSelector to streamline key dialog handling and improve endpoint rendering
* refactor: extract SettingsButton component for cleaner endpoint item rendering
* wip: first pass, expand set api key
* wip: first pass, expanding set key
* refactor: update EndpointItem styles for improved layout and hover effects
* refactor: adjust padding in EndpointItem for improved layout consistency
* refactor: update preset structure in useSelectMention to include spec as null
* refactor: rename setKeyDialogOpen to onOpenChange for clarity and consistency, bring focus back to button that opened dialog
* feat: add SpecIcon component for dynamic model spec icons in menu, adjust icon styling
* refactor: update getSelectedIcon to accept additional parameters and improve icon rendering logic
* fix: adjust padding in MessageRender for improved layout
* refactor: remove inline style for menu width in CustomMenu component
* refactor: enhance layout and styling in ModelSpecItem component for better responsiveness
* refactor: update getDefaultModelSpec to accept startupConfig and improve model spec retrieval logic
* refactor: improve key management and default values in ModelSelector and related components
* refactor: adjust menu width and improve responsiveness in CustomMenu and EndpointItem components
* refactor: enhance focus styles and responsiveness in EndpointItem component
* refactor: improve layout and spacing in Header and ModelSelector components for better responsiveness
* refactor: adjust button styles for consistency and improved layout in AddMultiConvo and PresetsMenu components
* fix: initial fix of assistant names
* fix: assistants handling
* chore: update version of librechat-data-provider to 0.7.75 and add 'spec' to excludedKeys
* fix: improve endpoint filtering logic based on interface configuration and access rights
* fix: remove unused HeaderOptions import and set spec to null in presets and mentions
* fix: ensure currentExample is always an object when updating examples
* fix: update interfaceConfig checks to ensure modelSelect is considered for rendering components
* fix: update model selection logic to consider interface configuration when prioritizing model specs
* fix: add missing localizations
* fix: remove unused agent and assistant selection translations
* fix: implement debounced state updates for selected values in useSelectorEffects
* style: minor style changes related to the ModelSelector
* fix: adjust maximum height for popover and set fixed height for model item
* fix: update placeholders for model and endpoint search inputs
* fix: refactor MessageRender and ContentRender components to better match each other
* fix: remove convo fallback for iconURL in MessageRender and ContentRender components
* fix: update handling of spec, iconURL, and modelLabel in conversation presets, to allow better interchangeability
* fix: replace chatGptLabel with modelLabel in OpenAI settings configuration (fully deprecate chatGptLabel)
* fix: remove console log for assistantNames in useEndpoints hook
* refactor: add cleanInput and cleanOutput options to default conversation handling
* chore: update bun.lockb
* fix: set default value for showIconInHeader in getSelectedIcon function
* refactor: enhance error handling in message processing when latest message has existing content blocks
* chore: allow import/no-cycle for messages
* fix: adjust flex properties in BookmarkMenu for better layout
* feat: support both 'prompt' and 'q' as query parameters in useQueryParams hook
* feat: re-enable Badges components
* refactor: disable edit badge component
* chore: rename assistantMap to assistantsMap for consistency
* chore: rename assistantMap to assistantsMap for consistency in Mention component
* feat: set staleTime for various queries to improve data freshness
* feat: add spec field to tQueryParamsSchema for model specification
* feat: enhance useQueryParams to handle model specs
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
2025-03-25 23:50:58 +01:00
|
|
|
className={cn(
|
|
|
|
|
'animate-popover z-50 overflow-hidden rounded-xl border border-border-light bg-surface-secondary shadow-lg',
|
|
|
|
|
)}
|
2025-02-13 10:07:40 -05:00
|
|
|
style={{ width: isCollapsed ? '300px' : (buttonWidth ?? '300px') }}
|
2024-08-18 19:02:46 -04:00
|
|
|
>
|
🎨 feat: UI Refresh for Enhanced UX (#6346)
* ✨ feat: Add Expand Chat functionality and improve UI components
* ✨ feat: Introduce Chat Badges feature with editing capabilities and UI enhancements
* ✨ feat: re-implement file attachment functionality with new components and improved UI
* ✨ feat: Enhance BadgeRow component with drag-and-drop functionality and add animations for better user experience
* ✨ feat: Add useChatBadges hook and enhance Badge component with animations and toggle functionality
* feat: Improve Add/Delete Badges + style and bug fixes
* ✨ feat: Refactor EditBadges component and optimize useChatBadges hook for improved performance and readability
* ✨ feat: Add type definition for LucideIcon in EditBadges component
* refactor: Clean up BadgeRow component by removing outdated comment and improving code readability
* refactor: Rename app-icon class to badge-icon for consistency and improve badge styling
* feat: Add Center Chat Input toggle and update related components for improved UI/UX
* refactor: Simplify ChatView and MessagesView components for improved readability and performance
* refactor: Improve layout and positioning of scroll button in MessagesView component
* refactor: Adjust scroll button position in MessagesView component for better visibility
* refactor: Remove redundant background class from Badge component for cleaner styling
* feat: disable chat badges
* refactor: adjust positioning of scroll button and popover for improved layout
* refactor: simplify class names in ChatForm and RemoveFile components for cleaner code
* refactor: move Switcher to HeaderOptions from SidePanel
* fix(Landing): duplicate description
* feat: add SplitText component for animated text display and update Landing component to use it
* feat(Chat): add ConversationStarters component and integrate it into ChatView; remove ConvoStarter component
* feat(Chat): enhance Message component layout and styling for improved readability
* feat(ControlCombobox, Select): enhance styling and add animation for improved UI experience
* feat(Chat): update Header and HeaderNewChat components for improved layout and styling
* feat(Chat): add ModelDropdown (now includes both endpoint and model) and refactor Menu components for improved UI
* feat(ModelDropdown): add Agent Select; removed old AgentSwitcher components
* feat(ModelDropdown): add settings button for user key configuration
* fix(ModelDropdown): the model dropdown wasn't opening automatically when opening the endpoint one
* refactor(Chat): remove unused EndpointsMenu and related components to streamline codebase
* feat: enhance greeting message and improve accessibility fro ModelDropdown
* refactor(Endpoints): add new hooks and components for endpoint management
* feat(Endpoint): add support for modelSpecs
* feat(Endpoints): add mobile support
* fix: type issues
* fix(modelSpec): type issue
* fix(EndpointMenuDropdown): double overflow scroller in mobile model list
* fix: search model on mobile
* refactor: Endpoint/Model/modelSpec dropdown
* refactor: reorganize imports in Endpoint components
* refactor: remove unused translation keys from English locale
* BREAKING: moving to ariakit with new CustomMenu
* refactor: remove unnecessary comments
* refactor: remove EndpointItem, ModelDropdownButton, SpecIcon, and SpecItem components
* 🔧 fix: AI Icon bump when regenerating message
* wip: chat UI refactoring, fix issues
* chore: add recent update to useAutoSave
* feat: add access control for agent permissions in useMentions hook
* refactor: streamline ModelSelector by removing unused endpoints logic
* refactor: enhance ModelSelector and context by integrating endpointsConfig and improving type usage
* feat: update ModelSelectorContext to utilize conversation data for initial state
* feat: add selector effects for synced endpoint handling
* feat: add guard clause for conversation endpoint in useSelectorEffects hook
* fix: safely call onSelectMention and add autofocus to mention input
* chore: typing
* refactor: ModelSelector to streamline key dialog handling and improve endpoint rendering
* refactor: extract SettingsButton component for cleaner endpoint item rendering
* wip: first pass, expand set api key
* wip: first pass, expanding set key
* refactor: update EndpointItem styles for improved layout and hover effects
* refactor: adjust padding in EndpointItem for improved layout consistency
* refactor: update preset structure in useSelectMention to include spec as null
* refactor: rename setKeyDialogOpen to onOpenChange for clarity and consistency, bring focus back to button that opened dialog
* feat: add SpecIcon component for dynamic model spec icons in menu, adjust icon styling
* refactor: update getSelectedIcon to accept additional parameters and improve icon rendering logic
* fix: adjust padding in MessageRender for improved layout
* refactor: remove inline style for menu width in CustomMenu component
* refactor: enhance layout and styling in ModelSpecItem component for better responsiveness
* refactor: update getDefaultModelSpec to accept startupConfig and improve model spec retrieval logic
* refactor: improve key management and default values in ModelSelector and related components
* refactor: adjust menu width and improve responsiveness in CustomMenu and EndpointItem components
* refactor: enhance focus styles and responsiveness in EndpointItem component
* refactor: improve layout and spacing in Header and ModelSelector components for better responsiveness
* refactor: adjust button styles for consistency and improved layout in AddMultiConvo and PresetsMenu components
* fix: initial fix of assistant names
* fix: assistants handling
* chore: update version of librechat-data-provider to 0.7.75 and add 'spec' to excludedKeys
* fix: improve endpoint filtering logic based on interface configuration and access rights
* fix: remove unused HeaderOptions import and set spec to null in presets and mentions
* fix: ensure currentExample is always an object when updating examples
* fix: update interfaceConfig checks to ensure modelSelect is considered for rendering components
* fix: update model selection logic to consider interface configuration when prioritizing model specs
* fix: add missing localizations
* fix: remove unused agent and assistant selection translations
* fix: implement debounced state updates for selected values in useSelectorEffects
* style: minor style changes related to the ModelSelector
* fix: adjust maximum height for popover and set fixed height for model item
* fix: update placeholders for model and endpoint search inputs
* fix: refactor MessageRender and ContentRender components to better match each other
* fix: remove convo fallback for iconURL in MessageRender and ContentRender components
* fix: update handling of spec, iconURL, and modelLabel in conversation presets, to allow better interchangeability
* fix: replace chatGptLabel with modelLabel in OpenAI settings configuration (fully deprecate chatGptLabel)
* fix: remove console log for assistantNames in useEndpoints hook
* refactor: add cleanInput and cleanOutput options to default conversation handling
* chore: update bun.lockb
* fix: set default value for showIconInHeader in getSelectedIcon function
* refactor: enhance error handling in message processing when latest message has existing content blocks
* chore: allow import/no-cycle for messages
* fix: adjust flex properties in BookmarkMenu for better layout
* feat: support both 'prompt' and 'q' as query parameters in useQueryParams hook
* feat: re-enable Badges components
* refactor: disable edit badge component
* chore: rename assistantMap to assistantsMap for consistency
* chore: rename assistantMap to assistantsMap for consistency in Mention component
* feat: set staleTime for various queries to improve data freshness
* feat: add spec field to tQueryParamsSchema for model specification
* feat: enhance useQueryParams to handle model specs
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
2025-03-25 23:50:58 +01:00
|
|
|
<div className="py-1.5">
|
2025-02-13 10:07:40 -05:00
|
|
|
<div className="relative">
|
|
|
|
|
<Search className="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-primary" />
|
|
|
|
|
<Ariakit.Combobox
|
|
|
|
|
store={combobox}
|
|
|
|
|
autoSelect
|
|
|
|
|
placeholder={searchPlaceholder}
|
🎨 feat: UI Refresh for Enhanced UX (#6346)
* ✨ feat: Add Expand Chat functionality and improve UI components
* ✨ feat: Introduce Chat Badges feature with editing capabilities and UI enhancements
* ✨ feat: re-implement file attachment functionality with new components and improved UI
* ✨ feat: Enhance BadgeRow component with drag-and-drop functionality and add animations for better user experience
* ✨ feat: Add useChatBadges hook and enhance Badge component with animations and toggle functionality
* feat: Improve Add/Delete Badges + style and bug fixes
* ✨ feat: Refactor EditBadges component and optimize useChatBadges hook for improved performance and readability
* ✨ feat: Add type definition for LucideIcon in EditBadges component
* refactor: Clean up BadgeRow component by removing outdated comment and improving code readability
* refactor: Rename app-icon class to badge-icon for consistency and improve badge styling
* feat: Add Center Chat Input toggle and update related components for improved UI/UX
* refactor: Simplify ChatView and MessagesView components for improved readability and performance
* refactor: Improve layout and positioning of scroll button in MessagesView component
* refactor: Adjust scroll button position in MessagesView component for better visibility
* refactor: Remove redundant background class from Badge component for cleaner styling
* feat: disable chat badges
* refactor: adjust positioning of scroll button and popover for improved layout
* refactor: simplify class names in ChatForm and RemoveFile components for cleaner code
* refactor: move Switcher to HeaderOptions from SidePanel
* fix(Landing): duplicate description
* feat: add SplitText component for animated text display and update Landing component to use it
* feat(Chat): add ConversationStarters component and integrate it into ChatView; remove ConvoStarter component
* feat(Chat): enhance Message component layout and styling for improved readability
* feat(ControlCombobox, Select): enhance styling and add animation for improved UI experience
* feat(Chat): update Header and HeaderNewChat components for improved layout and styling
* feat(Chat): add ModelDropdown (now includes both endpoint and model) and refactor Menu components for improved UI
* feat(ModelDropdown): add Agent Select; removed old AgentSwitcher components
* feat(ModelDropdown): add settings button for user key configuration
* fix(ModelDropdown): the model dropdown wasn't opening automatically when opening the endpoint one
* refactor(Chat): remove unused EndpointsMenu and related components to streamline codebase
* feat: enhance greeting message and improve accessibility fro ModelDropdown
* refactor(Endpoints): add new hooks and components for endpoint management
* feat(Endpoint): add support for modelSpecs
* feat(Endpoints): add mobile support
* fix: type issues
* fix(modelSpec): type issue
* fix(EndpointMenuDropdown): double overflow scroller in mobile model list
* fix: search model on mobile
* refactor: Endpoint/Model/modelSpec dropdown
* refactor: reorganize imports in Endpoint components
* refactor: remove unused translation keys from English locale
* BREAKING: moving to ariakit with new CustomMenu
* refactor: remove unnecessary comments
* refactor: remove EndpointItem, ModelDropdownButton, SpecIcon, and SpecItem components
* 🔧 fix: AI Icon bump when regenerating message
* wip: chat UI refactoring, fix issues
* chore: add recent update to useAutoSave
* feat: add access control for agent permissions in useMentions hook
* refactor: streamline ModelSelector by removing unused endpoints logic
* refactor: enhance ModelSelector and context by integrating endpointsConfig and improving type usage
* feat: update ModelSelectorContext to utilize conversation data for initial state
* feat: add selector effects for synced endpoint handling
* feat: add guard clause for conversation endpoint in useSelectorEffects hook
* fix: safely call onSelectMention and add autofocus to mention input
* chore: typing
* refactor: ModelSelector to streamline key dialog handling and improve endpoint rendering
* refactor: extract SettingsButton component for cleaner endpoint item rendering
* wip: first pass, expand set api key
* wip: first pass, expanding set key
* refactor: update EndpointItem styles for improved layout and hover effects
* refactor: adjust padding in EndpointItem for improved layout consistency
* refactor: update preset structure in useSelectMention to include spec as null
* refactor: rename setKeyDialogOpen to onOpenChange for clarity and consistency, bring focus back to button that opened dialog
* feat: add SpecIcon component for dynamic model spec icons in menu, adjust icon styling
* refactor: update getSelectedIcon to accept additional parameters and improve icon rendering logic
* fix: adjust padding in MessageRender for improved layout
* refactor: remove inline style for menu width in CustomMenu component
* refactor: enhance layout and styling in ModelSpecItem component for better responsiveness
* refactor: update getDefaultModelSpec to accept startupConfig and improve model spec retrieval logic
* refactor: improve key management and default values in ModelSelector and related components
* refactor: adjust menu width and improve responsiveness in CustomMenu and EndpointItem components
* refactor: enhance focus styles and responsiveness in EndpointItem component
* refactor: improve layout and spacing in Header and ModelSelector components for better responsiveness
* refactor: adjust button styles for consistency and improved layout in AddMultiConvo and PresetsMenu components
* fix: initial fix of assistant names
* fix: assistants handling
* chore: update version of librechat-data-provider to 0.7.75 and add 'spec' to excludedKeys
* fix: improve endpoint filtering logic based on interface configuration and access rights
* fix: remove unused HeaderOptions import and set spec to null in presets and mentions
* fix: ensure currentExample is always an object when updating examples
* fix: update interfaceConfig checks to ensure modelSelect is considered for rendering components
* fix: update model selection logic to consider interface configuration when prioritizing model specs
* fix: add missing localizations
* fix: remove unused agent and assistant selection translations
* fix: implement debounced state updates for selected values in useSelectorEffects
* style: minor style changes related to the ModelSelector
* fix: adjust maximum height for popover and set fixed height for model item
* fix: update placeholders for model and endpoint search inputs
* fix: refactor MessageRender and ContentRender components to better match each other
* fix: remove convo fallback for iconURL in MessageRender and ContentRender components
* fix: update handling of spec, iconURL, and modelLabel in conversation presets, to allow better interchangeability
* fix: replace chatGptLabel with modelLabel in OpenAI settings configuration (fully deprecate chatGptLabel)
* fix: remove console log for assistantNames in useEndpoints hook
* refactor: add cleanInput and cleanOutput options to default conversation handling
* chore: update bun.lockb
* fix: set default value for showIconInHeader in getSelectedIcon function
* refactor: enhance error handling in message processing when latest message has existing content blocks
* chore: allow import/no-cycle for messages
* fix: adjust flex properties in BookmarkMenu for better layout
* feat: support both 'prompt' and 'q' as query parameters in useQueryParams hook
* feat: re-enable Badges components
* refactor: disable edit badge component
* chore: rename assistantMap to assistantsMap for consistency
* chore: rename assistantMap to assistantsMap for consistency in Mention component
* feat: set staleTime for various queries to improve data freshness
* feat: add spec field to tQueryParamsSchema for model specification
* feat: enhance useQueryParams to handle model specs
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
2025-03-25 23:50:58 +01:00
|
|
|
className="w-full rounded-md bg-surface-secondary py-2 pl-9 pr-3 text-sm text-text-primary focus:outline-none"
|
2025-02-13 10:07:40 -05:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="max-h-[300px] overflow-auto">
|
|
|
|
|
<Ariakit.ComboboxList store={combobox}>
|
|
|
|
|
<SelectRenderer store={select} items={matches} itemSize={ROW_HEIGHT} overscan={5}>
|
|
|
|
|
{({ value, icon, label, ...item }) => (
|
|
|
|
|
<Ariakit.ComboboxItem
|
|
|
|
|
key={item.id}
|
|
|
|
|
{...item}
|
|
|
|
|
className={cn(
|
|
|
|
|
'flex w-full cursor-pointer items-center px-3 text-sm',
|
|
|
|
|
'text-text-primary hover:bg-surface-tertiary',
|
|
|
|
|
'data-[active-item]:bg-surface-tertiary',
|
|
|
|
|
)}
|
|
|
|
|
render={<Ariakit.SelectItem value={value} />}
|
|
|
|
|
>
|
2025-02-21 15:02:07 -05:00
|
|
|
{icon != null && iconSide === 'left' && (
|
|
|
|
|
<div className={optionIconClassName}>{icon}</div>
|
2025-02-13 10:07:40 -05:00
|
|
|
)}
|
|
|
|
|
<span className="flex-grow truncate text-left">{label}</span>
|
2025-02-21 15:02:07 -05:00
|
|
|
{icon != null && iconSide === 'right' && (
|
|
|
|
|
<div className={optionIconClassName}>{icon}</div>
|
|
|
|
|
)}
|
2025-02-13 10:07:40 -05:00
|
|
|
</Ariakit.ComboboxItem>
|
|
|
|
|
)}
|
|
|
|
|
</SelectRenderer>
|
|
|
|
|
</Ariakit.ComboboxList>
|
|
|
|
|
</div>
|
|
|
|
|
</Ariakit.SelectPopover>
|
2024-08-18 19:02:46 -04:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-08-21 18:18:45 -04:00
|
|
|
|
|
|
|
|
export default memo(ControlCombobox);
|