2024-09-20 20:29:42 -04:00
|
|
|
import React, { useContext, useCallback } from 'react';
|
2025-05-30 18:16:34 +02:00
|
|
|
import Cookies from 'js-cookie';
|
|
|
|
|
import { useRecoilState } from 'recoil';
|
📦 feat: Move Shared Components to `@librechat/client` (#8685)
* feat: init @librechat/client
* feat: Add common types and interfaces for accessibility, agents, artifacts, assistants, and tools
* feat: Add jotai as a peer dependency
* fix build client package
* feat: cleanup unused types from common/index.ts
- Remove 104 unused type exports from packages/client/src/common/index.ts
- Keep only 7 actually used exports (93% reduction)
- Add cleanup script with enhanced import pattern detection
- Support both named imports and namespace imports (* as t)
- Create automatic backups and comprehensive documentation
- Maintain type safety with build verification
- No breaking changes to existing code
Kept exports:
- TShowToast, Option, OptionWithIcon, DropdownValueSetter
- MentionOption, NotificationSeverity, MenuItemProps
Scripts: cleanup-common-types-safe.js, README-CLEANUP.md
* fix: cleanup
* fix: package; refactor: tsconfig
* feat: add back `recoil`
* fix: move dependencies to peerDependencies in client package
* feat: add @librechat/client as a dependency in package.json and package-lock.json
* feat: update client package configuration and dependencies
- Added new dependencies for Rollup plugins and updated existing ones in package.json and package-lock.json.
- Introduced a new Rollup configuration file for building the client package.
- Refactored build scripts to include a dedicated build command for the client.
- Updated TypeScript configuration for improved module resolution and type declaration output.
- Integrated a Toast component from the client package into the main App component.
* feat: enhance Rollup configuration for client package
- Updated terser plugin settings to preserve directives like 'use client'.
- Added custom warning handler to ignore "use client" directive warnings during the build process.
* chore: rename package/client build script command
* feat: update client package dependencies and Rollup configuration
- Added rollup-plugin-postcss to package.json and updated package-lock.json.
- Enhanced Rollup configuration to include postcss plugin for CSS handling.
- Updated index.ts to export all components from the components directory for better modularity.
* feat: add client package directory to update configuration
- Included the 'client' package directory in the update.js configuration to ensure it is recognized during updates.
* feat: export Toast component in client package
- Added export for the Toast component in index.ts to enhance modularity and accessibility of components.
* feat: /client transition to @librechat/client
* chore: fixed formatting issues
* fix: update peer dependencies in @librechat/client to prevent bundling them
* fix: correct useSprings implementation in SplitText component
* fix: circular dependencies in DataTable
* fix: add remaining peer dependencies and match actual versions previously used in `client/package.json`
* fix: correct frontend:ci script to include client package build
* chore: enhance unused package detection for @librechat/client and improve dependency extraction
* fix: add missing peer dependency for @radix-ui/react-collapsible
* chore: include "packages/client" in unused i18next keys detection
* test: update AgentFooter tests to use document.querySelector for spinner checks
test: mock window.matchMedia in setupTests.js for consistent test environment
* feat: add react-hook-form dependency and update FormInput component to use its types
* chore: linting
* refactor: remove unused defaultSelectedValues prop from MCPSelect and MultiSelect components
* chore: linting
* feat: update GitHub Actions workflow to publish @librechat/client
* chore: update GitHub Actions workflow to install and build data-provider and client dependencies
* chore: add missing @testing-library/react dependency to client package
* chore: update tsconfig.json to exclude additional test files
* chore: fix build issues, resolve latest LC changes
* chore: move MCP components outside of `~/components/ui`
* feat: implement dynamic theme system with environment variable support and Tailwind CSS integration
* chore: remove unnecessary logging of sttExternal and ttsExternal in Speech component
* chore: squashed cleanup commits
chore: move @tanstack/react-virtual to dependencies and remove recoil from package.json
chore: move dependencies to peerDependencies in package.json
feat: update package.json and rollup.config.js to include jotai and enhance bundling configuration
feat: update package.json and rollup.config.js to include jotai and enhance bundling configuration
refactor: reorganize exports in index.ts for improved clarity
refactor: remove unused types and interfaces from common files
refactor: update peer dependencies and improve component typings
- Removed duplicate peer dependencies from package.json and organized them.
- Updated rollup.config.js to disable TypeScript checking during the build process.
- Modified AnimatedTabs component to use React.ReactNode for label and content types, and added TypeScript workarounds for compatibility.
- Enhanced Label and Separator components to accept an optional className prop and improved prop spreading.
- Updated Slider component to include an optional className prop and refined prop handling for better type safety.
refactor: clean up client workflow and update package dependencies
refactor: update package dependencies and improve PostCSS and Rollup configurations
chore: bump version to 0.1.2 in package.json
chore: bump client version to 0.1.2 in package-lock.json
chore: bump client version to 0.1.3 and update dependencies
chore: bump client version to 0.1.4 and update @react-spring dependencies
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.
refactor: code structure; chore: translations cleanup
chore: remove unused imports and clean up code in NewChat component
refactor: enhance Menu component to support custom render functions for menu items
style: update itemClassName in ToolsDropdown for improved UI consistency
fix: merge conflicts
chore: update @radix-ui/react-accordion to version 1.2.11
* refactor: remove unnecessary TypeScript type assertions in AnimatedTabs, Label, Separator, and Slider components
* feat: enhance theme system with localStorage persistence and new theme atoms
* chore: bump version of @librechat/client to 0.1.7
* chore: fix ci/cd warnings/errors related to linting and unused localization keys
* chore: update dependencies for class-variance-authority, clsx, and match-sorter
* chore: bump @librechat/client to v0.1.8
* feat: add utility colors for theme customization and remove unused tailwindConfig
* v0.1.9
---------
Co-authored-by: Marco Beretta <81851188+berry-13@users.noreply.github.com>
2025-07-27 12:19:01 -04:00
|
|
|
import { Dropdown, ThemeContext } from '@librechat/client';
|
2024-08-07 14:23:33 -04:00
|
|
|
import ArchivedChats from './ArchivedChats';
|
2025-04-01 09:15:41 +02:00
|
|
|
import ToggleSwitch from '../ToggleSwitch';
|
📦 feat: Move Shared Components to `@librechat/client` (#8685)
* feat: init @librechat/client
* feat: Add common types and interfaces for accessibility, agents, artifacts, assistants, and tools
* feat: Add jotai as a peer dependency
* fix build client package
* feat: cleanup unused types from common/index.ts
- Remove 104 unused type exports from packages/client/src/common/index.ts
- Keep only 7 actually used exports (93% reduction)
- Add cleanup script with enhanced import pattern detection
- Support both named imports and namespace imports (* as t)
- Create automatic backups and comprehensive documentation
- Maintain type safety with build verification
- No breaking changes to existing code
Kept exports:
- TShowToast, Option, OptionWithIcon, DropdownValueSetter
- MentionOption, NotificationSeverity, MenuItemProps
Scripts: cleanup-common-types-safe.js, README-CLEANUP.md
* fix: cleanup
* fix: package; refactor: tsconfig
* feat: add back `recoil`
* fix: move dependencies to peerDependencies in client package
* feat: add @librechat/client as a dependency in package.json and package-lock.json
* feat: update client package configuration and dependencies
- Added new dependencies for Rollup plugins and updated existing ones in package.json and package-lock.json.
- Introduced a new Rollup configuration file for building the client package.
- Refactored build scripts to include a dedicated build command for the client.
- Updated TypeScript configuration for improved module resolution and type declaration output.
- Integrated a Toast component from the client package into the main App component.
* feat: enhance Rollup configuration for client package
- Updated terser plugin settings to preserve directives like 'use client'.
- Added custom warning handler to ignore "use client" directive warnings during the build process.
* chore: rename package/client build script command
* feat: update client package dependencies and Rollup configuration
- Added rollup-plugin-postcss to package.json and updated package-lock.json.
- Enhanced Rollup configuration to include postcss plugin for CSS handling.
- Updated index.ts to export all components from the components directory for better modularity.
* feat: add client package directory to update configuration
- Included the 'client' package directory in the update.js configuration to ensure it is recognized during updates.
* feat: export Toast component in client package
- Added export for the Toast component in index.ts to enhance modularity and accessibility of components.
* feat: /client transition to @librechat/client
* chore: fixed formatting issues
* fix: update peer dependencies in @librechat/client to prevent bundling them
* fix: correct useSprings implementation in SplitText component
* fix: circular dependencies in DataTable
* fix: add remaining peer dependencies and match actual versions previously used in `client/package.json`
* fix: correct frontend:ci script to include client package build
* chore: enhance unused package detection for @librechat/client and improve dependency extraction
* fix: add missing peer dependency for @radix-ui/react-collapsible
* chore: include "packages/client" in unused i18next keys detection
* test: update AgentFooter tests to use document.querySelector for spinner checks
test: mock window.matchMedia in setupTests.js for consistent test environment
* feat: add react-hook-form dependency and update FormInput component to use its types
* chore: linting
* refactor: remove unused defaultSelectedValues prop from MCPSelect and MultiSelect components
* chore: linting
* feat: update GitHub Actions workflow to publish @librechat/client
* chore: update GitHub Actions workflow to install and build data-provider and client dependencies
* chore: add missing @testing-library/react dependency to client package
* chore: update tsconfig.json to exclude additional test files
* chore: fix build issues, resolve latest LC changes
* chore: move MCP components outside of `~/components/ui`
* feat: implement dynamic theme system with environment variable support and Tailwind CSS integration
* chore: remove unnecessary logging of sttExternal and ttsExternal in Speech component
* chore: squashed cleanup commits
chore: move @tanstack/react-virtual to dependencies and remove recoil from package.json
chore: move dependencies to peerDependencies in package.json
feat: update package.json and rollup.config.js to include jotai and enhance bundling configuration
feat: update package.json and rollup.config.js to include jotai and enhance bundling configuration
refactor: reorganize exports in index.ts for improved clarity
refactor: remove unused types and interfaces from common files
refactor: update peer dependencies and improve component typings
- Removed duplicate peer dependencies from package.json and organized them.
- Updated rollup.config.js to disable TypeScript checking during the build process.
- Modified AnimatedTabs component to use React.ReactNode for label and content types, and added TypeScript workarounds for compatibility.
- Enhanced Label and Separator components to accept an optional className prop and improved prop spreading.
- Updated Slider component to include an optional className prop and refined prop handling for better type safety.
refactor: clean up client workflow and update package dependencies
refactor: update package dependencies and improve PostCSS and Rollup configurations
chore: bump version to 0.1.2 in package.json
chore: bump client version to 0.1.2 in package-lock.json
chore: bump client version to 0.1.3 and update dependencies
chore: bump client version to 0.1.4 and update @react-spring dependencies
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.
refactor: code structure; chore: translations cleanup
chore: remove unused imports and clean up code in NewChat component
refactor: enhance Menu component to support custom render functions for menu items
style: update itemClassName in ToolsDropdown for improved UI consistency
fix: merge conflicts
chore: update @radix-ui/react-accordion to version 1.2.11
* refactor: remove unnecessary TypeScript type assertions in AnimatedTabs, Label, Separator, and Slider components
* feat: enhance theme system with localStorage persistence and new theme atoms
* chore: bump version of @librechat/client to 0.1.7
* chore: fix ci/cd warnings/errors related to linting and unused localization keys
* chore: update dependencies for class-variance-authority, clsx, and match-sorter
* chore: bump @librechat/client to v0.1.8
* feat: add utility colors for theme customization and remove unused tailwindConfig
* v0.1.9
---------
Co-authored-by: Marco Beretta <81851188+berry-13@users.noreply.github.com>
2025-07-27 12:19:01 -04:00
|
|
|
import { useLocalize } from '~/hooks';
|
2023-07-24 08:33:08 -04:00
|
|
|
import store from '~/store';
|
2023-06-11 13:45:28 -04:00
|
|
|
|
2025-04-01 09:15:41 +02:00
|
|
|
const toggleSwitchConfigs = [
|
|
|
|
|
{
|
|
|
|
|
stateAtom: store.enableUserMsgMarkdown,
|
|
|
|
|
localizationKey: 'com_nav_user_msg_markdown',
|
|
|
|
|
switchId: 'enableUserMsgMarkdown',
|
|
|
|
|
hoverCardText: undefined,
|
|
|
|
|
key: 'enableUserMsgMarkdown',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
stateAtom: store.autoScroll,
|
|
|
|
|
localizationKey: 'com_nav_auto_scroll',
|
|
|
|
|
switchId: 'autoScroll',
|
|
|
|
|
hoverCardText: undefined,
|
|
|
|
|
key: 'autoScroll',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
stateAtom: store.hideSidePanel,
|
|
|
|
|
localizationKey: 'com_nav_hide_panel',
|
|
|
|
|
switchId: 'hideSidePanel',
|
|
|
|
|
hoverCardText: undefined,
|
|
|
|
|
key: 'hideSidePanel',
|
|
|
|
|
},
|
2025-11-21 15:14:32 +01:00
|
|
|
{
|
|
|
|
|
stateAtom: store.keepScreenAwake,
|
|
|
|
|
localizationKey: 'com_nav_keep_screen_awake',
|
|
|
|
|
switchId: 'keepScreenAwake',
|
|
|
|
|
hoverCardText: undefined,
|
|
|
|
|
key: 'keepScreenAwake',
|
|
|
|
|
},
|
2025-04-01 09:15:41 +02:00
|
|
|
];
|
|
|
|
|
|
2023-07-04 12:47:41 -07:00
|
|
|
export const ThemeSelector = ({
|
|
|
|
|
theme,
|
2023-07-14 09:36:49 -04:00
|
|
|
onChange,
|
2023-07-04 12:47:41 -07:00
|
|
|
}: {
|
|
|
|
|
theme: string;
|
|
|
|
|
onChange: (value: string) => void;
|
2023-07-24 08:33:08 -04:00
|
|
|
}) => {
|
2023-09-04 15:23:26 +02:00
|
|
|
const localize = useLocalize();
|
2023-07-24 08:33:08 -04:00
|
|
|
|
2023-11-16 14:42:03 +01:00
|
|
|
const themeOptions = [
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'system', label: localize('com_nav_theme_system') },
|
|
|
|
|
{ value: 'dark', label: localize('com_nav_theme_dark') },
|
|
|
|
|
{ value: 'light', label: localize('com_nav_theme_light') },
|
2023-11-16 14:42:03 +01:00
|
|
|
];
|
|
|
|
|
|
2025-10-07 20:12:49 +02:00
|
|
|
const labelId = 'theme-selector-label';
|
|
|
|
|
|
2023-07-24 08:33:08 -04:00
|
|
|
return (
|
|
|
|
|
<div className="flex items-center justify-between">
|
2025-10-07 20:12:49 +02:00
|
|
|
<div id={labelId}>{localize('com_nav_theme')}</div>
|
2024-06-21 15:58:04 +02:00
|
|
|
|
2023-11-16 14:42:03 +01:00
|
|
|
<Dropdown
|
2023-07-24 08:33:08 -04:00
|
|
|
value={theme}
|
2023-11-16 14:42:03 +01:00
|
|
|
onChange={onChange}
|
|
|
|
|
options={themeOptions}
|
2024-09-22 04:45:50 +02:00
|
|
|
sizeClasses="w-[180px]"
|
2023-11-16 14:42:03 +01:00
|
|
|
testId="theme-selector"
|
2025-04-18 17:36:59 +02:00
|
|
|
className="z-50"
|
2025-10-07 20:12:49 +02:00
|
|
|
aria-labelledby={labelId}
|
2023-11-16 14:42:03 +01:00
|
|
|
/>
|
2023-07-24 08:33:08 -04:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
2023-06-11 13:45:28 -04:00
|
|
|
|
2023-07-31 11:47:14 -04:00
|
|
|
export const LangSelector = ({
|
|
|
|
|
langcode,
|
|
|
|
|
onChange,
|
2025-11-13 22:59:46 +01:00
|
|
|
portal = true,
|
2023-07-31 11:47:14 -04:00
|
|
|
}: {
|
|
|
|
|
langcode: string;
|
|
|
|
|
onChange: (value: string) => void;
|
2025-11-13 22:59:46 +01:00
|
|
|
portal?: boolean;
|
2023-07-31 11:47:14 -04:00
|
|
|
}) => {
|
2023-09-04 15:23:26 +02:00
|
|
|
const localize = useLocalize();
|
2023-07-31 11:47:14 -04:00
|
|
|
|
2023-11-16 14:42:03 +01:00
|
|
|
const languageOptions = [
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'auto', label: localize('com_nav_lang_auto') },
|
|
|
|
|
{ value: 'en-US', label: localize('com_nav_lang_english') },
|
2025-02-14 14:30:27 +01:00
|
|
|
{ value: 'zh-Hans', label: localize('com_nav_lang_chinese') },
|
2025-02-13 20:20:30 +01:00
|
|
|
{ value: 'zh-Hant', label: localize('com_nav_lang_traditional_chinese') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'ar-EG', label: localize('com_nav_lang_arabic') },
|
2025-08-20 11:17:23 -07:00
|
|
|
{ value: 'bs', label: localize('com_nav_lang_bosnian') },
|
2025-05-14 19:08:06 +02:00
|
|
|
{ value: 'da-DK', label: localize('com_nav_lang_danish') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'de-DE', label: localize('com_nav_lang_german') },
|
|
|
|
|
{ value: 'es-ES', label: localize('com_nav_lang_spanish') },
|
2025-05-14 19:08:06 +02:00
|
|
|
{ value: 'ca-ES', label: localize('com_nav_lang_catalan') },
|
2025-02-14 14:30:27 +01:00
|
|
|
{ value: 'et-EE', label: localize('com_nav_lang_estonian') },
|
2025-04-01 23:42:56 +02:00
|
|
|
{ value: 'fa-IR', label: localize('com_nav_lang_persian') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'fr-FR', label: localize('com_nav_lang_french') },
|
2025-03-26 18:25:13 +01:00
|
|
|
{ value: 'he-HE', label: localize('com_nav_lang_hebrew') },
|
|
|
|
|
{ value: 'hu-HU', label: localize('com_nav_lang_hungarian') },
|
2025-07-03 17:16:33 +02:00
|
|
|
{ value: 'hy-AM', label: localize('com_nav_lang_armenian') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'it-IT', label: localize('com_nav_lang_italian') },
|
2025-08-20 11:17:23 -07:00
|
|
|
{ value: 'nb', label: localize('com_nav_lang_norwegian_bokmal') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'pl-PL', label: localize('com_nav_lang_polish') },
|
|
|
|
|
{ value: 'pt-BR', label: localize('com_nav_lang_brazilian_portuguese') },
|
2025-02-14 14:30:27 +01:00
|
|
|
{ value: 'pt-PT', label: localize('com_nav_lang_portuguese') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'ru-RU', label: localize('com_nav_lang_russian') },
|
|
|
|
|
{ value: 'ja-JP', label: localize('com_nav_lang_japanese') },
|
2025-02-26 02:28:58 +01:00
|
|
|
{ value: 'ka-GE', label: localize('com_nav_lang_georgian') },
|
2025-05-14 19:08:06 +02:00
|
|
|
{ value: 'cs-CZ', label: localize('com_nav_lang_czech') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'sv-SE', label: localize('com_nav_lang_swedish') },
|
|
|
|
|
{ value: 'ko-KR', label: localize('com_nav_lang_korean') },
|
2025-07-03 17:16:33 +02:00
|
|
|
{ value: 'lv-LV', label: localize('com_nav_lang_latvian') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'vi-VN', label: localize('com_nav_lang_vietnamese') },
|
2025-03-07 17:57:57 +01:00
|
|
|
{ value: 'th-TH', label: localize('com_nav_lang_thai') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'tr-TR', label: localize('com_nav_lang_turkish') },
|
2025-07-03 17:16:33 +02:00
|
|
|
{ value: 'ug', label: localize('com_nav_lang_uyghur') },
|
2024-08-13 02:42:49 -04:00
|
|
|
{ value: 'nl-NL', label: localize('com_nav_lang_dutch') },
|
|
|
|
|
{ value: 'id-ID', label: localize('com_nav_lang_indonesia') },
|
|
|
|
|
{ value: 'fi-FI', label: localize('com_nav_lang_finnish') },
|
2025-08-27 11:02:22 -07:00
|
|
|
{ value: 'sl', label: localize('com_nav_lang_slovenian') },
|
2025-08-02 12:37:18 -04:00
|
|
|
{ value: 'bo', label: localize('com_nav_lang_tibetan') },
|
|
|
|
|
{ value: 'uk-UA', label: localize('com_nav_lang_ukrainian') },
|
2023-11-16 14:42:03 +01:00
|
|
|
];
|
|
|
|
|
|
2025-10-07 20:12:49 +02:00
|
|
|
const labelId = 'language-selector-label';
|
|
|
|
|
|
2023-07-31 11:47:14 -04:00
|
|
|
return (
|
|
|
|
|
<div className="flex items-center justify-between">
|
2025-10-07 20:12:49 +02:00
|
|
|
<div id={labelId}>{localize('com_nav_language')}</div>
|
2024-06-21 15:58:04 +02:00
|
|
|
|
2024-05-10 03:16:16 +05:30
|
|
|
<Dropdown
|
|
|
|
|
value={langcode}
|
|
|
|
|
onChange={onChange}
|
2025-11-13 22:59:46 +01:00
|
|
|
sizeClasses="[--anchor-max-height:256px] max-h-[60vh]"
|
2024-05-10 03:16:16 +05:30
|
|
|
options={languageOptions}
|
2025-04-18 17:36:59 +02:00
|
|
|
className="z-50"
|
2025-10-07 20:12:49 +02:00
|
|
|
aria-labelledby={labelId}
|
2025-11-13 22:59:46 +01:00
|
|
|
portal={portal}
|
2024-05-10 03:16:16 +05:30
|
|
|
/>
|
2023-07-31 11:47:14 -04:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
2023-06-11 13:45:28 -04:00
|
|
|
function General() {
|
|
|
|
|
const { theme, setTheme } = useContext(ThemeContext);
|
🌿 feat: Fork Messages/Conversations (#2617)
* typedef for ImportBatchBuilder
* feat: first pass, fork conversations
* feat: fork - getMessagesUpToTargetLevel
* fix: additional tests and fix getAllMessagesUpToParent
* chore: arrow function return
* refactor: fork 3 options
* chore: remove unused genbuttons
* chore: remove unused hover buttons code
* feat: fork first pass
* wip: fork remember setting
* style: user icon
* chore: move clear chats to data tab
* WIP: fork UI options
* feat: data-provider fork types/services/vars and use generic MutationOptions
* refactor: use single param for fork option, use enum, fix mongo errors, use Date.now(), add records flag for testing, use endpoint from original convo and messages, pass originalConvo to finishConversation
* feat: add fork mutation hook and consolidate type imports
* refactor: use enum
* feat: first pass, fork mutation
* chore: add enum for target level fork option
* chore: add enum for target level fork option
* show toast when checking remember selection
* feat: splitAtTarget
* feat: split at target option
* feat: navigate to new fork, show toasts, set result query data
* feat: hover info for all fork options
* refactor: add Messages settings tab
* fix(Fork): remember text info
* ci: test for single message and is target edge case
* feat: additional tests for getAllMessagesUpToParent
* ci: additional tests and cycle detection for getMessagesUpToTargetLevel
* feat: circular dependency checks for getAllMessagesUpToParent
* fix: getMessagesUpToTargetLevel circular dep. check
* ci: more tests for getMessagesForConversation
* style: hover text for checkbox fork items
* refactor: add statefulness to conversation import
2024-05-05 11:48:20 -04:00
|
|
|
|
2023-07-31 11:47:14 -04:00
|
|
|
const [langcode, setLangcode] = useRecoilState(store.lang);
|
2023-07-27 10:13:05 -04:00
|
|
|
|
2023-07-04 12:47:41 -07:00
|
|
|
const changeTheme = useCallback(
|
|
|
|
|
(value: string) => {
|
|
|
|
|
setTheme(value);
|
|
|
|
|
},
|
2023-07-14 09:36:49 -04:00
|
|
|
[setTheme],
|
2023-07-04 12:47:41 -07:00
|
|
|
);
|
2023-06-11 13:45:28 -04:00
|
|
|
|
2023-07-31 11:47:14 -04:00
|
|
|
const changeLang = useCallback(
|
|
|
|
|
(value: string) => {
|
2024-08-30 20:57:29 +10:00
|
|
|
let userLang = value;
|
2023-09-18 21:40:20 +02:00
|
|
|
if (value === 'auto') {
|
2024-08-30 20:57:29 +10:00
|
|
|
userLang = navigator.language || navigator.languages[0];
|
2023-09-18 21:40:20 +02:00
|
|
|
}
|
2024-08-30 20:57:29 +10:00
|
|
|
|
|
|
|
|
requestAnimationFrame(() => {
|
|
|
|
|
document.documentElement.lang = userLang;
|
|
|
|
|
});
|
|
|
|
|
setLangcode(userLang);
|
|
|
|
|
Cookies.set('lang', userLang, { expires: 365 });
|
2023-07-31 11:47:14 -04:00
|
|
|
},
|
2024-08-30 20:57:29 +10:00
|
|
|
[setLangcode],
|
2023-07-31 11:47:14 -04:00
|
|
|
);
|
|
|
|
|
|
2023-06-11 13:45:28 -04:00
|
|
|
return (
|
2024-09-10 10:11:39 -09:00
|
|
|
<div className="flex flex-col gap-3 p-1 text-sm text-text-primary">
|
2024-10-20 17:29:47 +02:00
|
|
|
<div className="pb-3">
|
2024-09-10 10:11:39 -09:00
|
|
|
<ThemeSelector theme={theme} onChange={changeTheme} />
|
|
|
|
|
</div>
|
2024-10-20 17:29:47 +02:00
|
|
|
<div className="pb-3">
|
2024-09-10 10:11:39 -09:00
|
|
|
<LangSelector langcode={langcode} onChange={changeLang} />
|
|
|
|
|
</div>
|
2025-04-01 09:15:41 +02:00
|
|
|
{toggleSwitchConfigs.map((config) => (
|
|
|
|
|
<div key={config.key} className="pb-3">
|
|
|
|
|
<ToggleSwitch
|
|
|
|
|
stateAtom={config.stateAtom}
|
|
|
|
|
localizationKey={config.localizationKey}
|
|
|
|
|
hoverCardText={config.hoverCardText}
|
|
|
|
|
switchId={config.switchId}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
2024-10-20 17:29:47 +02:00
|
|
|
<div className="pb-3">
|
2024-09-10 10:11:39 -09:00
|
|
|
<ArchivedChats />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-06-11 13:45:28 -04:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default React.memo(General);
|