mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-25 19:56:13 +01:00
chore: update package version to 0.1.5 and adjust peer dependencies
- Bump version in package.json from 0.1.4 to 0.1.5. - Update peer dependency for @tanstack/react-query to allow version 5.0.0. - Add @tanstack/react-table and @tanstack/react-virtual as dependencies. - Update various dependencies to their latest compatible versions. - Simplify postcss.config.js by removing unnecessary options. - Clean up rollup.config.js by removing ignored PostCSS warnings. - Update CheckboxButton component to cast icon as React JSX element. - Adjust Combobox component's class names for better styling. - Change DropdownPopup component to use React's namespace import. - Modify InputOTP component to use 'any' type for OTPInputContext. - Ensure displayLabel and value in ModelParameters are converted to strings. - Update MultiSearch component's placeholder to ensure it's a string. - Cast selectIcon in MultiSelect as React JSX element for consistency. - Update OGDialogTemplate to cast selectText as React JSX element. - Initialize animationRef in PixelCard with undefined for clarity. - Add TypeScript ignore comments in Select and SelectDropDown components for Radix UI type conflicts. - Ensure title in SelectDropDown is a string and adjust rendering of options. - Update useLocalize hook to cast options as any for compatibility.
This commit is contained in:
parent
59412c2b36
commit
de69bcdd64
15 changed files with 10122 additions and 14220 deletions
24226
package-lock.json
generated
24226
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@librechat/client",
|
"name": "@librechat/client",
|
||||||
"version": "0.1.4",
|
"version": "0.1.5",
|
||||||
"description": "React components for LibreChat",
|
"description": "React components for LibreChat",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"module": "dist/index.es.js",
|
"module": "dist/index.es.js",
|
||||||
|
|
@ -22,14 +22,14 @@
|
||||||
"dev": "rollup -c -w --bundleConfigAsCjs"
|
"dev": "rollup -c -w --bundleConfigAsCjs"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@tanstack/react-query": "^4.28.0 || ^5.69.0",
|
"@tanstack/react-query": "^4.28.0 || ^5.0.0",
|
||||||
"i18next": "^24.2.2 || ^25.3.2",
|
"i18next": "^24.2.2 || ^25.3.2",
|
||||||
"jotai": "^2.12.5",
|
"jotai": "^2.12.5",
|
||||||
"react": "^18.2.0 || ^19.1.0",
|
"react": "^18.2.0 || ^19.1.0",
|
||||||
"react-dom": "^18.2.0 || ^19.1.0",
|
"react-dom": "^18.2.0 || ^19.1.0",
|
||||||
"react-i18next": "^15.4.0 || ^15.6.0"
|
"react-i18next": "^15.4.0 || ^15.6.0",
|
||||||
},
|
"@tanstack/react-table": "^8.11.7",
|
||||||
"dependencies": {
|
"@tanstack/react-virtual": "^3.0.0",
|
||||||
"@ariakit/react": "^0.4.16",
|
"@ariakit/react": "^0.4.16",
|
||||||
"@ariakit/react-core": "^0.4.17",
|
"@ariakit/react-core": "^0.4.17",
|
||||||
"@headlessui/react": "^2.1.2",
|
"@headlessui/react": "^2.1.2",
|
||||||
|
|
@ -51,10 +51,10 @@
|
||||||
"@radix-ui/react-switch": "^1.2.5",
|
"@radix-ui/react-switch": "^1.2.5",
|
||||||
"@radix-ui/react-tabs": "^1.0.3",
|
"@radix-ui/react-tabs": "^1.0.3",
|
||||||
"@radix-ui/react-toast": "^1.1.5",
|
"@radix-ui/react-toast": "^1.1.5",
|
||||||
"@radix-ui/react-tooltip": "^1.2.7",
|
"@radix-ui/react-tooltip": "^1.2.7"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
"@react-spring/web": "^10.0.1",
|
"@react-spring/web": "^10.0.1",
|
||||||
"@tanstack/react-table": "^8.11.7",
|
|
||||||
"@tanstack/react-virtual": "^3.0.0",
|
|
||||||
"class-variance-authority": "^0.6.0",
|
"class-variance-authority": "^0.6.0",
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
"framer-motion": "^12.23.6",
|
"framer-motion": "^12.23.6",
|
||||||
|
|
@ -75,19 +75,19 @@
|
||||||
"@rollup/plugin-replace": "^5.0.5",
|
"@rollup/plugin-replace": "^5.0.5",
|
||||||
"@rollup/plugin-terser": "^0.4.4",
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
"@tailwindcss/typography": "^0.5.10",
|
"@tailwindcss/typography": "^0.5.10",
|
||||||
"@tanstack/react-query": "^5.69.0",
|
"@tanstack/react-query": "^4.28.0",
|
||||||
"@testing-library/react": "^16.3.0",
|
"@testing-library/react": "^14.0.0",
|
||||||
"@types/react": "^19.0.12",
|
"@types/react": "^18.2.11",
|
||||||
"@types/react-dom": "^19.0.4",
|
"@types/react-dom": "^18.2.4",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"i18next": "^25.3.2",
|
"i18next": "^24.2.3",
|
||||||
"jotai": "^2.12.5",
|
"jotai": "^2.12.5",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.31",
|
||||||
"postcss-import": "^15.1.0",
|
"postcss-import": "^15.1.0",
|
||||||
"postcss-preset-env": "^8.5.1",
|
"postcss-preset-env": "^8.5.1",
|
||||||
"react": "^19.0.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-i18next": "^15.4.1",
|
"react-i18next": "^15.4.0",
|
||||||
"rimraf": "^5.0.1",
|
"rimraf": "^5.0.1",
|
||||||
"rollup": "^4.0.0",
|
"rollup": "^4.0.0",
|
||||||
"rollup-plugin-peer-deps-external": "^2.2.4",
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,7 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: [
|
plugins: [
|
||||||
require('postcss-import'),
|
require('postcss-import'),
|
||||||
require('postcss-preset-env')({
|
require('postcss-preset-env'),
|
||||||
stage: 1,
|
|
||||||
features: {
|
|
||||||
'nesting-rules': true,
|
|
||||||
'custom-media-queries': true,
|
|
||||||
'custom-properties': true,
|
|
||||||
'is-pseudo-class': false,
|
|
||||||
},
|
|
||||||
autoprefixer: {
|
|
||||||
flexbox: 'no-2009',
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
require('tailwindcss'),
|
require('tailwindcss'),
|
||||||
require('autoprefixer'),
|
require('autoprefixer'),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -79,14 +79,6 @@ export default {
|
||||||
if (warning.code === 'MODULE_LEVEL_DIRECTIVE') {
|
if (warning.code === 'MODULE_LEVEL_DIRECTIVE') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Ignore PostCSS warnings about complex selectors
|
|
||||||
if (
|
|
||||||
warning.plugin === 'postcss' &&
|
|
||||||
warning.message &&
|
|
||||||
warning.message.includes('can not be transformed to an equivalent selector')
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
warn(warning);
|
warn(warning);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ const CheckboxButton = React.forwardRef<
|
||||||
render={<button type="button" aria-label={label} />}
|
render={<button type="button" aria-label={label} />}
|
||||||
>
|
>
|
||||||
{/* Icon if provided */}
|
{/* Icon if provided */}
|
||||||
{icon && <span className="icon-md text-text-primary">{icon}</span>}
|
{icon && <span className="icon-md text-text-primary">{icon as React.JSX.Element}</span>}
|
||||||
|
|
||||||
{/* Show the label on larger screens */}
|
{/* Show the label on larger screens */}
|
||||||
<span className="hidden truncate md:block">{label}</span>
|
<span className="hidden truncate md:block">{label}</span>
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ export default function ComboboxComponent({
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<RadixSelect.Viewport className="mb-5 h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]">
|
<RadixSelect.Viewport className="mb-5 h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]">
|
||||||
<div className="group sticky left-0 top-0 z-10 flex h-12 items-center gap-2 bg-white px-2 px-3 py-2 text-black duration-300 dark:bg-gray-700 dark:text-white">
|
<div className="group sticky left-0 top-0 z-10 flex h-12 items-center gap-2 bg-white px-3 py-2 text-black duration-300 dark:bg-gray-700 dark:text-white">
|
||||||
<SearchIcon className="h-4 w-4 text-gray-500 transition-colors duration-300 dark:group-focus-within:text-gray-300 dark:group-hover:text-gray-300" />
|
<SearchIcon className="h-4 w-4 text-gray-500 transition-colors duration-300 dark:group-focus-within:text-gray-300 dark:group-hover:text-gray-300" />
|
||||||
<Combobox
|
<Combobox
|
||||||
autoSelect
|
autoSelect
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React from 'react';
|
import * as React from 'react';
|
||||||
import * as Ariakit from '@ariakit/react';
|
import * as Ariakit from '@ariakit/react';
|
||||||
import type * as t from '~/common';
|
import type * as t from '~/common';
|
||||||
import { cn } from '~/utils';
|
import { cn } from '~/utils';
|
||||||
|
|
@ -42,14 +42,14 @@ const DropdownPopup: React.FC<DropdownProps> = ({
|
||||||
if (mountByState) {
|
if (mountByState) {
|
||||||
return (
|
return (
|
||||||
<Ariakit.MenuProvider store={menu}>
|
<Ariakit.MenuProvider store={menu}>
|
||||||
{trigger}
|
{trigger as React.JSX.Element}
|
||||||
{isOpen && <Menu {...props} />}
|
{isOpen && <Menu {...props} />}
|
||||||
</Ariakit.MenuProvider>
|
</Ariakit.MenuProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Ariakit.MenuProvider store={menu}>
|
<Ariakit.MenuProvider store={menu}>
|
||||||
{trigger}
|
{trigger as React.JSX.Element}
|
||||||
<Menu {...props} />
|
<Menu {...props} />
|
||||||
</Ariakit.MenuProvider>
|
</Ariakit.MenuProvider>
|
||||||
);
|
);
|
||||||
|
|
@ -98,7 +98,6 @@ const Menu: React.FC<MenuProps> = ({
|
||||||
itemClassName,
|
itemClassName,
|
||||||
)}
|
)}
|
||||||
disabled={item.disabled}
|
disabled={item.disabled}
|
||||||
render={item.render}
|
|
||||||
ref={item.ref}
|
ref={item.ref}
|
||||||
hideOnClick={item.hideOnClick}
|
hideOnClick={item.hideOnClick}
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,11 @@ const InputOTPSlot = React.forwardRef<
|
||||||
React.ComponentPropsWithoutRef<'div'> & { index: number }
|
React.ComponentPropsWithoutRef<'div'> & { index: number }
|
||||||
>(({ index, className, ...props }, ref) => {
|
>(({ index, className, ...props }, ref) => {
|
||||||
const inputOTPContext = React.useContext(OTPInputContext);
|
const inputOTPContext = React.useContext(OTPInputContext);
|
||||||
|
|
||||||
|
if (!inputOTPContext) {
|
||||||
|
throw new Error('InputOTPSlot must be used within an OTPInput');
|
||||||
|
}
|
||||||
|
|
||||||
const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
|
const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ const ModelParameters: React.FC<ModelParametersProps> = ({
|
||||||
htmlFor={id}
|
htmlFor={id}
|
||||||
className={`text-sm font-medium ${disabled ? 'text-gray-400 dark:text-gray-400' : ''}`}
|
className={`text-sm font-medium ${disabled ? 'text-gray-400 dark:text-gray-400' : ''}`}
|
||||||
>
|
>
|
||||||
{displayLabel}
|
{String(displayLabel)}
|
||||||
</label>
|
</label>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<output
|
<output
|
||||||
|
|
@ -109,7 +109,7 @@ const ModelParameters: React.FC<ModelParametersProps> = ({
|
||||||
}`}
|
}`}
|
||||||
aria-live="polite"
|
aria-live="polite"
|
||||||
>
|
>
|
||||||
{value.toFixed(decimalPlaces).replace('-0.00', '0.00')}
|
{String(value.toFixed(decimalPlaces).replace('-0.00', '0.00'))}
|
||||||
</output>
|
</output>
|
||||||
{showButtons && (
|
{showButtons && (
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ export default function MultiSearch({
|
||||||
type="text"
|
type="text"
|
||||||
value={value ?? ''}
|
value={value ?? ''}
|
||||||
onChange={onChangeHandler}
|
onChange={onChangeHandler}
|
||||||
placeholder={placeholder ?? localize('com_ui_select_search_model')}
|
placeholder={String(placeholder ?? localize('com_ui_select_search_model'))}
|
||||||
aria-label="Search Model"
|
aria-label="Search Model"
|
||||||
className="flex-1 rounded-md border-none bg-transparent px-2.5 py-2 text-sm placeholder-text-secondary focus:outline-none focus:ring-1 focus:ring-ring-primary"
|
className="flex-1 rounded-md border-none bg-transparent px-2.5 py-2 text-sm placeholder-text-secondary focus:outline-none focus:ring-1 focus:ring-ring-primary"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ export default function MultiSelect<T extends string>({
|
||||||
)}
|
)}
|
||||||
onChange={(e) => e.stopPropagation()}
|
onChange={(e) => e.stopPropagation()}
|
||||||
>
|
>
|
||||||
{selectIcon && selectIcon}
|
{selectIcon && <span>{selectIcon as React.JSX.Element}</span>}
|
||||||
<span className="mr-auto hidden truncate md:block">
|
<span className="mr-auto hidden truncate md:block">
|
||||||
{renderSelectedValues(selectedValues, placeholder)}
|
{renderSelectedValues(selectedValues, placeholder)}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -130,8 +130,12 @@ export default function MultiSelect<T extends string>({
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{renderItemContent
|
{renderItemContent
|
||||||
? renderItemContent(value, defaultContent, isCurrentItemSelected)
|
? (renderItemContent(
|
||||||
: defaultContent}
|
value,
|
||||||
|
defaultContent,
|
||||||
|
isCurrentItemSelected,
|
||||||
|
) as React.JSX.Element)
|
||||||
|
: (defaultContent as React.JSX.Element)}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,11 @@ const OGDialogTemplate = forwardRef((props: DialogTemplateProps, ref: Ref<HTMLDi
|
||||||
selectClasses ?? defaultSelect
|
selectClasses ?? defaultSelect
|
||||||
} flex h-10 items-center justify-center rounded-lg border-none px-4 py-2 text-sm disabled:opacity-80 max-sm:order-first max-sm:w-full sm:order-none`}
|
} flex h-10 items-center justify-center rounded-lg border-none px-4 py-2 text-sm disabled:opacity-80 max-sm:order-first max-sm:w-full sm:order-none`}
|
||||||
>
|
>
|
||||||
{isLoading === true ? <Spinner className="size-4 text-white" /> : selectText}
|
{isLoading === true ? (
|
||||||
|
<Spinner className="size-4 text-white" />
|
||||||
|
) : (
|
||||||
|
(selectText as React.JSX.Element)
|
||||||
|
)}
|
||||||
</OGDialogClose>
|
</OGDialogClose>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,7 @@ export default function PixelCard({
|
||||||
const containerRef = useRef<HTMLDivElement>(null);
|
const containerRef = useRef<HTMLDivElement>(null);
|
||||||
const canvasRef = useRef<HTMLCanvasElement>(null);
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
||||||
const pixelsRef = useRef<Pixel[]>([]);
|
const pixelsRef = useRef<Pixel[]>([]);
|
||||||
const animationRef = useRef<number>();
|
const animationRef = useRef<number | undefined>(undefined);
|
||||||
const timePrevRef = useRef(performance.now());
|
const timePrevRef = useRef(performance.now());
|
||||||
const progressRef = useRef<number | undefined>(progress);
|
const progressRef = useRef<number | undefined>(progress);
|
||||||
const reducedMotion = useRef(
|
const reducedMotion = useRef(
|
||||||
|
|
@ -221,9 +221,11 @@ export default function PixelCard({
|
||||||
let idle = true;
|
let idle = true;
|
||||||
for (const p of pixelsRef.current) {
|
for (const p of pixelsRef.current) {
|
||||||
if (method === 'appearWithProgress') {
|
if (method === 'appearWithProgress') {
|
||||||
progressRef.current !== undefined
|
if (progressRef.current !== undefined) {
|
||||||
? p.appearWithProgress(progressRef.current)
|
p.appearWithProgress(progressRef.current);
|
||||||
: (p.isIdle = true);
|
} else {
|
||||||
|
p.isIdle = true;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore dynamic dispatch
|
// @ts-ignore dynamic dispatch
|
||||||
p[method]();
|
p[method]();
|
||||||
|
|
@ -312,7 +314,9 @@ export default function PixelCard({
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
initPixels();
|
initPixels();
|
||||||
const obs = new ResizeObserver(initPixels);
|
const obs = new ResizeObserver(initPixels);
|
||||||
containerRef.current && obs.observe(containerRef.current);
|
if (containerRef.current) {
|
||||||
|
obs.observe(containerRef.current);
|
||||||
|
}
|
||||||
return () => {
|
return () => {
|
||||||
obs.disconnect();
|
obs.disconnect();
|
||||||
cancelAnimationFrame(animationRef.current!);
|
cancelAnimationFrame(animationRef.current!);
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,15 @@ import { CaretSortIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@radix
|
||||||
|
|
||||||
import { cn } from '~/utils';
|
import { cn } from '~/utils';
|
||||||
|
|
||||||
|
// @ts-ignore - Radix UI type conflicts with React types
|
||||||
const Select = SelectPrimitive.Root;
|
const Select = SelectPrimitive.Root;
|
||||||
|
|
||||||
|
// @ts-ignore - Radix UI type conflicts with React types
|
||||||
const SelectGroup = SelectPrimitive.Group;
|
const SelectGroup = SelectPrimitive.Group;
|
||||||
|
|
||||||
const SelectValue = SelectPrimitive.Value;
|
const SelectValue = SelectPrimitive.Value;
|
||||||
|
|
||||||
|
// @ts-ignore - Radix UI type conflicts with React types
|
||||||
const SelectTrigger = React.forwardRef<
|
const SelectTrigger = React.forwardRef<
|
||||||
React.ElementRef<typeof SelectPrimitive.Trigger>,
|
React.ElementRef<typeof SelectPrimitive.Trigger>,
|
||||||
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
|
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ function SelectDropDown({
|
||||||
if (emptyTitle) {
|
if (emptyTitle) {
|
||||||
title = '';
|
title = '';
|
||||||
} else if (!(title ?? '')) {
|
} else if (!(title ?? '')) {
|
||||||
title = localize('com_ui_model');
|
title = String(localize('com_ui_model'));
|
||||||
}
|
}
|
||||||
const values = availableValues ?? [];
|
const values = availableValues ?? [];
|
||||||
|
|
||||||
|
|
@ -186,7 +186,7 @@ function SelectDropDown({
|
||||||
</ListboxButton>
|
</ListboxButton>
|
||||||
<Transition
|
<Transition
|
||||||
show={open}
|
show={open}
|
||||||
as={React.Fragment}
|
as="div"
|
||||||
leave="transition ease-in duration-100"
|
leave="transition ease-in duration-100"
|
||||||
leaveFrom="opacity-100"
|
leaveFrom="opacity-100"
|
||||||
leaveTo="opacity-0"
|
leaveTo="opacity-0"
|
||||||
|
|
@ -207,10 +207,10 @@ function SelectDropDown({
|
||||||
optionsClass ?? '',
|
optionsClass ?? '',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{renderOption()}
|
{renderOption() as React.JSX.Element}
|
||||||
</ListboxOption>
|
</ListboxOption>
|
||||||
)}
|
)}
|
||||||
{searchRender}
|
{searchRender as React.JSX.Element}
|
||||||
{options.map((option: string | Option, i: number) => {
|
{options.map((option: string | Option, i: number) => {
|
||||||
if (!option) {
|
if (!option) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue