Compare commits

...

274 Commits

Author SHA1 Message Date
icarus
f9f1a723da style(selection): truncate provider and model name in action app to prevent overflow 2025-11-25 18:01:28 +08:00
icarus
c2dde99947 refactor(selection): improve type safety and model handling for actions
- Replace FC type with direct props typing in ActionTranslate
- Add zod schema and type guards for builtin action items
- Enhance model selection logic in SelectionActionApp
2025-11-25 17:56:40 +08:00
icarus
63cde7c8ab feat(selection): display assistant model name in action window
Add assistant model name display when available to provide more context about the selected action
2025-11-25 17:36:41 +08:00
icarus
913238c991 feat(selection): add builtin action item type and update default items
Add new SelectionBuiltinActionItem type to better type builtin actions
Update defaultActionItems to use new type with const assertion
2025-11-25 17:36:29 +08:00
fullex
0045bf6c9c Merge branch 'main' into v2 2025-11-24 16:22:32 +08:00
fullex
cf7b4dd07b Merge branch 'main' into v2 2025-11-22 08:48:07 +08:00
fullex
fe88cfe106 feat: initialize database in app startup and enhance DbService
- Added an init method to DbService for database initialization, ensuring it is called before migrations.
- Updated the migrateDb and migrateSeed methods to check if the database is initialized, improving error handling.
- Called dbService.init() in the app's whenReady event to ensure proper database setup during startup.
2025-11-21 23:46:51 +08:00
MyPrototypeWhat
e3bf63d7a0 chore: remove DmxapiToImg component and related assets
- Deleted the DmxapiToImg SVG file and its corresponding React component to streamline the icon library.
- Updated index.ts and Logos.stories.tsx to remove references to DmxapiToImg, ensuring consistency across the codebase.
2025-11-21 18:27:30 +08:00
MyPrototypeWhat
9a356cb27d style(tabs.stories):lint 2025-11-21 17:26:14 +08:00
MyPrototypeWhat
53883a27be feat: add Tabs component and related subcomponents
- Introduced a new Tabs component along with TabsList, TabsTrigger, and TabsContent for improved content organization.
- Updated package.json and yarn.lock to include @radix-ui/react-tabs dependency.
- Enhanced index.ts to export the new Tabs components for easier access in the UI library.
- Created stories for the Tabs component in Storybook to demonstrate various usage scenarios.
2025-11-21 17:09:29 +08:00
fullex
24c9c157f9 chore: format 2025-11-21 16:58:04 +08:00
fullex
55727e2adf feat: configure WAL mode for improved database performance
- Introduced a new method to configure Write-Ahead Logging (WAL) mode for better concurrency during database operations.
- Ensured WAL mode is set only once, with error handling to fall back to default settings if configuration fails.
- Updated the migrateDb method to call the new configuration method on the first database operation.
2025-11-21 16:36:15 +08:00
MyPrototypeWhat
1e4239d189 feat: update UI component stories to use centralized imports from @cherrystudio/ui
- Added a new Breadcrumb.stories.tsx file to showcase the Breadcrumb component and its variations.
- Refactored existing stories for Button, Checkbox, Combobox, Kbd, Pagination, RadioGroup, Select, and Spinner components to import directly from @cherrystudio/ui instead of relative paths.
- Enhanced the organization and accessibility of component stories in the Storybook environment.
2025-11-21 13:34:02 +08:00
MyPrototypeWhat
5ccb16a0be feat: add Breadcrumb component and related subcomponents
- Introduced a new Breadcrumb component along with BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, and BreadcrumbEllipsis.
- Updated index.ts to export the new Breadcrumb components for easier access in the UI library.
2025-11-21 13:34:02 +08:00
MyPrototypeWhat
34c9a6b350 docs: update CLAUDE.md to reflect UI component migration to Tailwind CSS and Shadcn UI
- Revised guidelines to specify the use of Tailwind CSS and Shadcn UI components from `@packages/ui` for new UI development.
- Updated project documentation to clarify the prohibition of `antd` and `styled-components` in favor of the new UI libraries.
2025-11-21 13:34:02 +08:00
fullex
ab99366a0a feat: enhance DbService with improved error handling and documentation
- Added detailed JSDoc comments for better understanding of DbService methods and usage.
- Implemented error handling during database initialization and migration processes to ensure robustness.
- Introduced a method to check if the database is initialized before accessing it.
- Updated the migrateSeed method to throw errors on failure, improving error reporting.
2025-11-21 13:29:24 +08:00
fullex
7419cadd80 Merge branch 'main' into v2 2025-11-20 23:12:55 +08:00
fullex
46f2726a63 refactor: remove obsolete data refactor migration components and related tests
- Deleted the DataRefactorMigrateService and associated HTML files, as they are no longer needed.
- Removed test components and files related to data refactor migration, streamlining the codebase.
- Updated configuration files to reflect the removal of the data refactor migration functionality.
2025-11-20 23:03:00 +08:00
fullex
7bd3e047d2 docs: add README.md for data migration infra 2025-11-20 22:54:06 +08:00
fullex
1ea19adfec refactor: update migration types and imports for consistency
- Replaced core types with shared types in migration files to ensure consistency across the application.
- Deleted obsolete core types file and updated imports in migrator and window components to reference the new shared types.
- Enhanced the migration process by streamlining type definitions and improving code maintainability.
2025-11-20 22:42:43 +08:00
fullex
1685590a07 feat: integrate i18n support into migration process
- Added internationalization support to the MigrationApp component, enabling dynamic language changes.
- Updated button labels and informational texts to use translation keys for better localization.
- Introduced a language selector to allow users to switch between languages during the migration process.
- Ensured that the migration process waits for i18n initialization before rendering the main application.
2025-11-20 22:08:22 +08:00
fullex
db10bdd539 feat: enhance migration process with new 'migration_completed' stage
- Added 'migration_completed' stage to the migration process for better tracking of completion.
- Updated relevant components and hooks to handle the new stage, including UI changes to confirm migration completion.
- Adjusted messages and progress indicators to reflect the new stage in the migration workflow.
2025-11-20 20:32:33 +08:00
fullex
d79602325d Merge branch 'v2' of github.com:CherryHQ/cherry-studio into v2 2025-11-20 19:48:27 +08:00
fullex
a19419e597 feat: add migration v2 support and update dependencies
- Integrated migration v2 functionality by importing necessary modules and registering IPC handlers.
- Updated the migration process to check for data migration needs and handle the migration window.
- Added new dependencies for stream-json and its types in package.json.
- Updated electron.vite.config.ts to include the new migration window HTML file.
2025-11-20 19:48:19 +08:00
MyPrototypeWhat
a7686f61c7 style: enhance PaginationLink styles with rounded corners
- Updated the PaginationLink component to include rounded corners in its hover styles, improving the overall visual appearance and user experience.
2025-11-20 15:39:18 +08:00
MyPrototypeWhat
e694ae68e3 feat: add Pagination component exports and enhance PaginationLink styles
- Exported the new Pagination component from the index file to make it available for use.
- Updated the PaginationLink styles to improve hover effects and active state visibility, enhancing user experience.
2025-11-20 15:27:06 +08:00
MyPrototypeWhat
02a65daa27 feat: update @radix-ui/react-slot to version 1.2.4 and add Pagination component with stories
- Updated the @radix-ui/react-slot dependency in package.json and yarn.lock to version 1.2.4.
- Introduced a new Pagination component with associated subcomponents (PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PaginationEllipsis).
- Added stories for the Pagination component to demonstrate various use cases and configurations.
2025-11-20 14:49:22 +08:00
fullex
1a9fd77599 feat: implement garbage collection in CacheService and update cleanup interval in PreferenceService
- Added a garbage collection mechanism in CacheService to automatically remove expired cache entries every 10 minutes.
- Introduced a cleanup interval in PreferenceService, adjusting the frequency to every 5 minutes for better resource management.
- Enhanced cleanup methods in both services to ensure proper resource release during shutdown.
2025-11-19 22:23:09 +08:00
MyPrototypeWhat
7fa97f8a2b feat: add new Tooltip component with enhanced functionality
- Introduced a new Tooltip component along with TooltipProvider, TooltipTrigger, and TooltipContent for improved user interface interactions.
- Implemented NormalTooltip for easier usage with customizable content and positioning options.
- Integrated Radix UI's tooltip primitives for better accessibility and performance.
2025-11-18 18:07:28 +08:00
MyPrototypeWhat
838bb385fd refactor: comment out Tooltip integration in Kbd stories for cleanup
- Removed the InTooltip story from Kbd.stories.tsx to declutter the examples.
- Kept the Tooltip-related imports commented out for potential future use.
2025-11-18 17:59:36 +08:00
MyPrototypeWhat
583e4e9db7 feat: add Kbd component for keyboard shortcuts and integrate with Tooltip
- Introduced a new Kbd component to display keyboard shortcuts, supporting both single keys and key combinations.
- Added KbdGroup for grouping multiple Kbd components together.
- Updated package.json to include @radix-ui/react-tooltip version 1.2.8.
- Created stories for Kbd component showcasing various use cases, including integration with Tooltip for enhanced user guidance.
2025-11-18 16:50:10 +08:00
fullex
5fdfa5a594 Merge branch 'main' of into v2 2025-11-17 19:51:07 +08:00
MyPrototypeWhat
ad939f4b77 Refactor index.ts to update icon component documentation and remove commented-out selector exports
- Updated comments for brand logo icons to reflect the current count and recommended import path.
- Removed deprecated selector component exports to clean up the index file.
2025-11-17 11:10:12 +08:00
MyPrototypeWhat
6abe5ab8c3 Remove deprecated icon components and their associated stories
- Deleted the FilePngIcon and FileSvgIcon components from the icons directory due to low usage.
- Removed the ToolsCallingIcon component and its related stories, as it did not meet the UI library extraction criteria.
- Updated the index.ts file to reflect these removals and cleaned up the export list accordingly.
- Ensured that all related story files for the removed icons were also deleted to maintain a clean codebase.
2025-11-17 11:07:11 +08:00
fullex
1156b12ac6 Merge remote-tracking branch 'origin/main' into v2 2025-11-14 21:38:00 +08:00
MyPrototypeWhat
4410599dfa Remove DmxapiLogo icon and update icon export list
- Deleted the DmxapiLogo SVG file from the icons directory.
- Updated the icon export list to reflect the removal of DmxapiLogo, reducing the total icon count from 81 to 80.
- Adjusted related stories to exclude DmxapiLogo from the showcased icons.
2025-11-14 18:25:27 +08:00
MyPrototypeWhat
bce8e5cc7f Update Electron and TypeScript configurations to include new icon package
- Added '@cherrystudio/ui/icons' to the Electron Vite configuration for improved icon management.
- Updated TypeScript configuration to include type definitions for the new icon package.
- Removed unused dependencies from yarn.lock to streamline package management.
2025-11-14 18:02:47 +08:00
MyPrototypeWhat
9d75b0972e Refactor icon management and update dependencies
- Removed the ICON_IMPLEMENTATION_GUIDE.md file and several unused SVG icons from the `icons/` directory.
- Added new SVG icons to enhance the icon library, including various brand logos.
- Updated package.json to reflect the new version of the `tsx` dependency.
- Introduced a script for generating icons and improved the structure of the icons module for better organization and accessibility.
- Updated the stories for icons to showcase the new additions and ensure proper documentation.
2025-11-14 17:55:44 +08:00
MyPrototypeWhat
a3062d6e38 Add ICON_IMPLEMENTATION_GUIDE and new SVG icons
- Created ICON_IMPLEMENTATION_GUIDE.md to document icon usage and common issues.
- Added multiple new SVG icons to the `icons/` directory, enhancing the icon library.
- Updated tailwind.css for improved styling consistency across components.
2025-11-14 13:31:17 +08:00
MyPrototypeWhat
43fb232cca Update tailwind.css to use glob pattern for component imports 2025-11-13 17:28:02 +08:00
SuYao
d610943f0f Fix/merge-main (#11262)
* merge branch 'main'

* fix: lint error

* fix yarn lock

* fix: lock

* fix: ci

* fix: yarn lock
2025-11-12 22:49:58 +08:00
fullex
680fcb4b9d Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-12 20:41:05 +08:00
MyPrototypeWhat
d82e004f57 feat(design-reference): restructure color tokens and remove outdated conversion log
- Deleted the outdated CONVERSION_LOG.md file to streamline documentation.
- Introduced new HSLA color files for primitive, semantic, and status colors, enhancing color management.
- Updated theme and token files to utilize Oklch color format for improved color representation.
- Refactored radius and color tokens for consistency and maintainability across the design system.
2025-11-12 18:14:18 +08:00
MyPrototypeWhat
aa13ad4fac feat(checkbox): export CheckedState type and add checkbox/combobox to component index
- Exported CheckedState type from the checkbox component for better type management.
- Added checkbox and combobox components to the main component index for easier access.
- Updated Storybook examples to utilize the CheckedState type for controlled checkbox states.
2025-11-12 15:04:50 +08:00
MyPrototypeWhat
02d79f47b3 feat(checkbox): add Radix UI checkbox component with Storybook examples
- Introduced a new checkbox component utilizing Radix UI, allowing for customizable sizes and states.
- Implemented styles using class-variance-authority for consistent design across different sizes (sm, md, lg).
- Added comprehensive Storybook stories demonstrating various use cases, including default, checked, disabled, and controlled states.
- Updated package.json and yarn.lock to include the new Radix UI checkbox dependency.
2025-11-12 14:58:14 +08:00
MyPrototypeWhat
75c0923636 feat(radioGroup): enhance RadioGroup component with size variants and add Storybook examples
- Introduced size variants for RadioGroupItem using class-variance-authority for better customization.
- Updated RadioGroupItem to accept size prop and adjusted styles accordingly.
- Added comprehensive Storybook stories for various use cases, including default, disabled, and size variations, to demonstrate component functionality and usage.
2025-11-12 14:26:25 +08:00
MyPrototypeWhat
7dd1ecd4a5 feat(storybook): add background options for light and dark themes
- Introduced background parameters in Storybook preview configuration to support light and dark themes.
- Defined specific color values for each theme to enhance visual consistency during component development.
2025-11-12 14:26:09 +08:00
MyPrototypeWhat
a2299fa2ab style(combobox, select): update styles to use Tailwind CSS utility classes
- Refactored the combobox and select components to utilize Tailwind CSS utility classes for consistent styling.
- Added 'text-foreground' class to enhance text visibility in both components.
- Streamlined the default styles for better maintainability and adherence to the new design system.
2025-11-11 17:24:47 +08:00
MyPrototypeWhat
a830d05790 fix(tailwind): dynamically import Tailwind CSS in Vite config
- Updated the Electron Vite configuration to dynamically import Tailwind CSS for improved performance.
- Removed the direct import of Tailwind CSS from the plugins array to streamline the build process.
2025-11-11 17:17:23 +08:00
MyPrototypeWhat
8429e678bc style(tailwind): migrate to Tailwind CSS and update theme handling
- Integrated Tailwind CSS into the project by adding necessary imports and configurations.
- Updated CSS files to reflect the transition to Tailwind, including commenting out old styles and adjusting theme-related attributes.
- Changed theme mode handling in the ThemeProvider and CitationBlock components for consistency with the new class-based approach.
2025-11-11 17:03:14 +08:00
MyPrototypeWhat
91215c899d style(tailwind): add source import for UI components in tailwind.css
- Included a new source import statement for UI components to enhance styling capabilities.
- Maintained existing imports while ensuring compatibility with the updated structure.
2025-11-11 13:56:58 +08:00
fullex
1309b194e9 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-11 12:03:35 +08:00
MyPrototypeWhat
1b1f85b35f fix(navbar): remove duplicate placement attribute in Tooltip component
- Simplified Tooltip component in ChatNavbar and Navbar by removing redundant 'placement' attribute.
- Ensured consistent behavior across both components while maintaining functionality.
2025-11-11 11:31:43 +08:00
fullex
4407c0f675 refactor(oauth): update language retrieval in OAuth callback
- Replaced the configManager.getLanguage() method with getAppLanguage() for improved language handling.
- Adjusted imports to reflect the new language utility structure.
2025-11-11 11:19:06 +08:00
MyPrototypeWhat
30947c6bc1 refactor(select): replace Selector component with new Select implementation in SettingsTab
- Updated SettingsTab to utilize the new Select component instead of the deprecated Selector.
- Enhanced Select integration with SelectTrigger, SelectContent, SelectItem, and SelectValue for improved functionality.
- Removed Selector imports and related code to streamline the component structure.
- Adjusted styles and layout for better user experience in the settings interface.
2025-11-11 11:01:48 +08:00
MyPrototypeWhat
0b3cefb125 style(select): update styles for Select component items and content
- Adjusted border radius for SelectContent to 'rounded-2xs' for a more modern look.
- Enhanced SelectItem styles to include a background color for checked state.
- Updated CheckIcon color to 'text-primary' for better visibility in the SelectItem.
2025-11-11 10:46:20 +08:00
MyPrototypeWhat
b382b06c57 feat(select): introduce new Select component and related features
- Added a new Select component based on Radix UI, including SelectTrigger, SelectContent, SelectItem, and SelectValue.
- Implemented support for groups and separators within the Select component.
- Updated package.json to include @radix-ui/react-select as a dependency.
- Removed deprecated Selector and SearchableSelector components to streamline the codebase.
- Added stories for the Select component to showcase various use cases and configurations.
2025-11-10 19:42:33 +08:00
MyPrototypeWhat
8246f46e7d fix(Button): update import path for Button component to reflect new structure 2025-11-10 19:35:46 +08:00
fullex
f32fa08c41 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-10 18:44:02 +08:00
kangfenmao
56df52d850 Merge branch 'main' into v2
# Conflicts:
#	src/renderer/src/pages/settings/MCPSettings/BuiltinMCPServerList.tsx
#	src/renderer/src/pages/settings/MCPSettings/McpProviderSettings.tsx
#	src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx
#	src/renderer/src/pages/settings/MCPSettings/McpSettingsNavbar.tsx
#	src/renderer/src/pages/settings/MCPSettings/index.tsx
#	src/renderer/src/pages/settings/MCPSettings/providers/config.ts
2025-11-07 19:34:45 +08:00
MyPrototypeWhat
846a7f5ecf refactor(button & combobox): enhance styling and accessibility
- Updated button variants for improved hover effects and accessibility, including aria-loading support.
- Refined combobox trigger styles for better visibility and consistency, including adjustments to error state styling and input placeholder appearance.
- Improved overall class management and organization for both components.
2025-11-07 19:29:06 +08:00
MyPrototypeWhat
f2c2a27622 refactor(combobox & tailwind): update styling and variable management
- Modified default combobox trigger styles for improved visibility and consistency.
- Updated background and text colors in the combobox options for better accessibility.
- Cleaned up unused CSS variables in tailwind.css, retaining only those necessary for theme usage.
- Enhanced comments for clarity in the CSS files.
2025-11-07 17:30:12 +08:00
MyPrototypeWhat
348e0dfc80 fix(theme.css): standardize import syntax for tailwindcss 2025-11-07 17:17:24 +08:00
MyPrototypeWhat
77c848035d feat(tokens): introduce design tokens for colors, spacing, typography, and radius
- Added new CSS files for design tokens including colors, spacing, typography, and border radius.
- Updated theme.css to import the new tokens and ensure proper usage in the UI.
- Enhanced the theme structure to support light and dark modes with semantic color mappings.
- Introduced a build script to generate theme from tokens for easier management.
2025-11-07 17:12:34 +08:00
MyPrototypeWhat
cd6a38ebeb fix(tailwindCSS): add experimental classRegex for improved class management 2025-11-07 11:26:00 +08:00
MyPrototypeWhat
b57ed07d00 refactor(button & combobox): improve styling and class management
- Adjusted button outline variant for consistency in dark mode styling.
- Removed unnecessary background color from combobox trigger for cleaner appearance.
- Updated comments in the theme CSS file for clarity and consistency.
2025-11-07 11:04:12 +08:00
kangfenmao
f7c8fb8d56 refactor: update component imports and styling for consistency
- Removed the 'no-restricted-imports' rule from ESLint configuration.
- Updated `AgentSessionInputbar` to use `icon` prop for `ActionIconButton`.
- Cleaned up imports in `AssistantsTab`, `SessionItem`, and `DataSettings` components.
- Adjusted button styling in `UnifiedAddButton` and `AboutSettings` for improved layout.
- Fixed test assertions in `WebviewSearch.test.tsx` for better accuracy.
2025-11-06 20:23:38 +08:00
kangfenmao
dae10cf673 Merge branch 'v2' of github.com:CherryHQ/cherry-studio into v2 2025-11-06 19:53:20 +08:00
kangfenmao
a50da9fc80 Merge branch 'main' into v2
# Conflicts:
#	CLAUDE.md
#	package.json
#	packages/ui/src/components/primitives/toast.ts
#	src/main/services/AppMenuService.ts
#	src/renderer/src/assets/styles/tailwind.css
#	src/renderer/src/components/Avatar/EmojiAvatarWithPicker.tsx
#	src/renderer/src/components/Buttons/ActionIconButton.tsx
#	src/renderer/src/components/ConfirmDialog.tsx
#	src/renderer/src/components/ErrorBoundary.tsx
#	src/renderer/src/components/Popups/ExportToPhoneLanPopup.tsx
#	src/renderer/src/components/Popups/agent/AgentModal.tsx
#	src/renderer/src/components/Popups/agent/SessionModal.tsx
#	src/renderer/src/components/TopView/index.tsx
#	src/renderer/src/components/UpdateDialog.tsx
#	src/renderer/src/context/HeroUIProvider.tsx
#	src/renderer/src/env.d.ts
#	src/renderer/src/hero.ts
#	src/renderer/src/hooks/useUserTheme.ts
#	src/renderer/src/pages/home/Chat.tsx
#	src/renderer/src/pages/home/Inputbar/AgentSessionInputbar.tsx
#	src/renderer/src/pages/home/Messages/Blocks/ErrorBlock.tsx
#	src/renderer/src/pages/home/Messages/Message.tsx
#	src/renderer/src/pages/home/Messages/Tools/ToolPermissionRequestCard.tsx
#	src/renderer/src/pages/home/Tabs/AssistantsTab.tsx
#	src/renderer/src/pages/home/Tabs/SessionSettingsTab.tsx
#	src/renderer/src/pages/home/Tabs/components/AddButton.tsx
#	src/renderer/src/pages/home/Tabs/components/AgentItem.tsx
#	src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx
#	src/renderer/src/pages/home/Tabs/components/SessionItem.tsx
#	src/renderer/src/pages/home/Tabs/components/Sessions.tsx
#	src/renderer/src/pages/home/Tabs/components/TagGroup.tsx
#	src/renderer/src/pages/home/Tabs/components/Topics.tsx
#	src/renderer/src/pages/home/Tabs/components/UnifiedAddButton.tsx
#	src/renderer/src/pages/home/Tabs/index.tsx
#	src/renderer/src/pages/home/components/ChatNavbarContent.tsx
#	src/renderer/src/pages/home/components/SelectAgentBaseModelButton.tsx
#	src/renderer/src/pages/home/components/UpdateAppButton.tsx
#	src/renderer/src/pages/minapps/components/WebviewSearch.tsx
#	src/renderer/src/pages/notes/HeaderNavbar.tsx
#	src/renderer/src/pages/settings/AboutSettings.tsx
#	src/renderer/src/pages/settings/AgentSettings/AccessibleDirsSetting.tsx
#	src/renderer/src/pages/settings/AgentSettings/components/InstalledPluginsList.tsx
#	src/renderer/src/pages/settings/AgentSettings/components/PluginBrowser.tsx
#	src/renderer/src/pages/settings/AgentSettings/components/PluginCard.tsx
#	src/renderer/src/pages/settings/DataSettings/DataSettings.tsx
#	src/renderer/src/pages/settings/ToolSettings/ApiServerSettings/ApiServerSettings.tsx
#	src/renderer/src/pages/translate/TranslateSettings.tsx
#	src/renderer/src/services/ApiService.ts
#	src/renderer/src/store/runtime.ts
#	src/renderer/src/windows/mini/MiniWindowApp.tsx
#	src/renderer/src/windows/selection/action/entryPoint.tsx
#	yarn.lock
2025-11-06 19:53:09 +08:00
MyPrototypeWhat
7d5d9964d7 refactor(combobox): simplify default styling and enhance class management
- Removed unnecessary background color from default combobox trigger variant for cleaner styling.
- Added a white background to the combobox trigger for improved visibility.
- Updated comments in the CSS file to enhance clarity and consistency in English.
2025-11-06 18:36:12 +08:00
MyPrototypeWhat
059f821584 refactor(button & combobox): update size properties and improve styling
- Changed button size properties to use min-height for better layout consistency.
- Simplified combobox size properties by removing height specifications.
- Enhanced combobox option rendering with improved class management for better styling.
- Updated comments in ComboboxProps to English for clarity.
2025-11-06 18:20:43 +08:00
MyPrototypeWhat
1c38e31e9e feat(theme): enhance color tokens with brand colors and update primary color references
- Added new brand color tokens for Cherry Studio ranging from 50 to 950.
- Updated primary color references to use brand colors for improved consistency.
- Introduced hover states for primary and destructive colors to enhance UI interactivity.
2025-11-06 17:45:40 +08:00
MyPrototypeWhat
12e3a22726 feat: add Combobox component with search and multi-select functionality
- Introduced a new Combobox component that supports single and multiple selections, search functionality, and customizable rendering of options.
- Implemented variants for different states (default, error, disabled) and sizes (small, default, large).
- Added a demo and Storybook stories to showcase various use cases and states of the Combobox.
2025-11-06 17:24:45 +08:00
MyPrototypeWhat
2b1269af92 chore: update Storybook dependencies to version 10.0.5 and refactor Storybook configuration for absolute paths 2025-11-06 17:24:28 +08:00
MyPrototypeWhat
c4fa975b89 style(tailwind): add cursor pointer for non-disabled buttons 2025-11-06 17:24:12 +08:00
fullex
1b67b851b7 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-05 16:24:06 +08:00
fullex
811e702568 fix: i18n 2025-11-05 16:14:28 +08:00
MyPrototypeWhat
4ef4297391 refactor: update imports and button event handlers in story files
- Refactored import statements in CodeEditor, ThinkingEffect, ErrorBoundary, and Spinner story files for consistency and clarity.
- Changed button event handlers from `onPress` to `onClick` to align with standard React practices.
- Improved type imports for better organization and maintainability.
2025-11-03 19:17:50 +08:00
MyPrototypeWhat
292f7f7b75 chore: remove unused CSS files and update Storybook configurations
- Deleted the todocss.css file as it was no longer needed.
- Updated Storybook main.ts to include path aliasing for better module resolution.
- Removed deprecated stories and components, streamlining the codebase.
- Added new stories for CodeEditor, Ellipsis, ExpandableText, and other components to enhance documentation and showcase functionality.
2025-11-03 18:31:48 +08:00
MyPrototypeWhat
e56edbaa4f feat: enhance Button component with loading state and custom loading icon
- Added loading state support to the Button component, allowing for a spinner to be displayed when the button is in a loading state.
- Introduced props for custom loading icons and adjusted button behavior to disable when loading.
- Updated various components to utilize the new loading feature for better user experience during asynchronous actions.
2025-11-03 16:30:45 +08:00
MyPrototypeWhat
e06142b89a chore: remove deprecation comments from EditableNumber and Sortable components
- Removed deprecation comments from EditableNumber and Sortable components, as they were previously marked for removal due to low usage and dependency conflicts.
2025-11-03 14:24:22 +08:00
MyPrototypeWhat
fb6b326947 chore: mark multiple components and icons as deprecated
- Added deprecation comments to several components and icons due to low usage (≤2 times), indicating plans for removal in future versions.
- Components affected include EditableNumber, MaxContextCount, Sortable, ThinkingEffect, FileIcons, ToolIcon, and others.
- Suggested alternatives or direct usage of other components where applicable.
2025-11-03 13:41:00 +08:00
MyPrototypeWhat
f9b7ff7d0e refactor: comment out unused CSS imports and styles
- Commented out the import of color.css in index.css.
- Commented out the universal selector in tailwind.css to prevent unintended styling, with a note for future removal after migration.
2025-11-03 11:30:58 +08:00
fullex
14706ec4d7 fix: typecheck 2025-11-01 19:11:17 +08:00
fullex
09f2fb6538 fix: lint errors 2025-11-01 18:47:20 +08:00
fullex
62aedcaa23 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-01 18:46:38 +08:00
fullex
62ccb6105d feat: enhance CacheService and DataApiService documentation and structure
- Added detailed file overview comments to CacheService and DataApiService, clarifying their roles as infrastructure components rather than business services.
- Updated README.md to reflect the new structure and naming conventions, emphasizing the distinction between infrastructure and business logic components.
- Introduced a new TestService for API testing scenarios, providing mock data and various test cases.
- Created IBaseService interface to standardize service operations across the codebase.
- Improved organization of API handlers and services for better clarity and maintainability.
2025-11-01 18:36:28 +08:00
fullex
5101488d65 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-01 11:01:56 +08:00
fullex
7c0b03dbdc Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-11-01 09:46:47 +08:00
fullex
b3dc2d0422 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-31 19:35:45 +08:00
MyPrototypeWhat
1828ef8997 fix: update muted foreground color variable in theme.css
- Changed the variable for muted foreground color from `--cs-foreground-secondary` to `--cs-foreground-muted` for improved clarity and consistency in styling.
2025-10-31 19:33:58 +08:00
fullex
b3f88a7fc2 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-31 18:29:44 +08:00
MyPrototypeWhat
2c07ea0dd8 chore: update Tailwind CSS imports and adjust source paths
- Replaced the import of `theme.css` with `tailwindcss` for improved styling management.
- Adjusted the source path to include components specifically, enhancing clarity in file structure.
- Retained the import of `tw-animate-css` for animation support.
2025-10-31 16:25:11 +08:00
MyPrototypeWhat
6042ee8ca8 chore: remove outdated DESIGN_SYSTEM.md and update migration documentation
- Deleted the obsolete DESIGN_SYSTEM.md file to streamline documentation.
- Updated MIGRATION_STATUS.md to reflect the new design token namespace (`--cs-*`) and improved clarity on migration phases and principles.
- Revised README.md to correct the number of import methods and enhance usage instructions for the updated design system.
2025-10-31 15:54:29 +08:00
MyPrototypeWhat
d164d7c8bf refactor: update CSS structure and improve theme integration
- Changed the main CSS file reference from `globals.css` to `theme.css` in `components.json` for better theme management.
- Introduced `index.css` to export only CSS variables, allowing npm users to utilize design tokens without overriding Tailwind defaults.
- Removed `globals.css` as it is no longer needed with the new structure.
- Updated `package.json` to reflect changes in CSS file paths.
- Enhanced `README.md` to clarify installation and configuration steps for the new styling approach.
2025-10-31 15:31:51 +08:00
fullex
23f7b39753 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-31 11:12:49 +08:00
MyPrototypeWhat
fe188ba8fb feat: enhance design token management and documentation
- Added new design token files including design-tokens.css and theme.css to standardize styling across the UI.
- Introduced a conversion log (CONVERSION_LOG.md) detailing the migration from todocss.css to design-tokens.css, including variable updates and deprecations.
- Updated package.json to include new CSS files for easier imports.
- Enhanced README.md to provide clear guidelines on the design reference and usage of design tokens.
- Improved globals.css to integrate with the new design token structure and ensure consistency in styling.
2025-10-30 19:40:19 +08:00
MyPrototypeWhat
cf008ca22e feat: update migration status documentation for Cherry Studio UI
- Expanded the migration status document to outline the comprehensive plan for transitioning from antd + styled-components to shadcn/ui + Tailwind CSS.
- Introduced detailed migration strategies, principles, and component classification guidelines.
- Added extraction criteria and migration steps to ensure a structured approach to component migration and optimization.
- Emphasized collaboration with UI designers for maintaining design consistency throughout the migration process.
2025-10-29 18:06:30 +08:00
MyPrototypeWhat
851ff8992f style: format color variables in todocss.css for improved readability
- Reformatted color variable definitions in todocss.css to enhance readability by breaking long lines into multiple lines.
- Ensured consistency in the formatting of HSLA values across the file.
2025-10-29 16:56:31 +08:00
MyPrototypeWhat
91f9088436 feat: add design system documentation and todocss.css file
- Introduced a comprehensive design system document outlining integration strategies for Tailwind CSS v4, usage guidelines, and UI library balance strategies.
- Added todocss.css file containing typography, spacing, sizing, and color variables for the design system.
- Established naming conventions and core transformation rules for design tokens to enhance consistency and usability across the UI components.
2025-10-29 16:52:05 +08:00
fullex
c971daf23c Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-29 16:43:40 +08:00
fullex
0c7cee2700 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-29 16:37:54 +08:00
fullex
3e9d9f16d6 fix: test 2025-10-29 14:45:55 +08:00
fullex
f3a279d8de Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-29 14:28:03 +08:00
MyPrototypeWhat
b9a947d2fd refactor: restructure UI components and remove deprecated files
- Added new components including CodeEditor, CollapsibleSearchBar, and DraggableList.
- Removed obsolete components such as Button, CustomCollapse, and StatusTag.
- Updated migration status documentation and adjusted component exports.
- Enhanced package.json dependencies for better compatibility.
2025-10-28 14:27:05 +08:00
fullex
57b9ca111a fix: format 2025-10-28 09:12:51 +08:00
fullex
709f264ac9 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-28 09:02:09 +08:00
fullex
736aef22c4 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-23 18:30:32 +08:00
fullex
d0ed4cc1f2 Merge pull request #10913 from CherryHQ/v2-merge-main
Merge branch 'main' into v2
2025-10-23 18:14:19 +08:00
icarus
8c6a577cca fix: correct model logo source to use message.model directly 2025-10-23 17:48:33 +08:00
icarus
27b6ad75df refactor: use type-only import for Model type 2025-10-23 17:44:30 +08:00
icarus
c617a0b51a Merge branch 'main' into v2 2025-10-23 17:41:21 +08:00
fullex
75d7ed075b fix: update snapshot styles for InputEmbeddingDimension and Spinner components
- Adjusted the flex style for the InputEmbeddingDimension component to improve layout consistency.
- Removed the unset color style from the Spinner component to ensure default styling is applied.
2025-10-22 01:01:21 +08:00
fullex
b5b577dc79 fix: yarn.lock 2025-10-22 00:39:08 +08:00
fullex
e754b5a863 style: format InfoTooltip component in GeneralSettings for improved readability 2025-10-21 18:01:02 +08:00
fullex
82dd771110 fix: replace Tooltip with InfoTooltip in GeneralSettings for improved clarity
- Updated the proxy bypass tooltip to use InfoTooltip component for better styling and functionality.
- Maintained existing behavior while enhancing the user interface.
2025-10-21 17:40:17 +08:00
fullex
8a4a34a946 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-21 17:38:15 +08:00
beyondkmp
fb62ae18b7 chores: remove config manager (#10856)
* refactor: migrate from configManager to preferenceService

- Replace configManager with preferenceService for app settings
- Update zoom factor management to use preferenceService
- Migrate spell check settings to preferenceService
- Update language subscription in NodeTraceService
- Move client ID generation to systemInfo utility
- Keep shortcuts management in configManager (not migrated)
- Mark legacy Config_Set/Config_Get as deprecated
- Update AppUpdater test mock to include getClientId

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: migrate from configManager to preferenceService

- Replace configManager with preferenceService for app settings
- Update zoom factor management to use preferenceService
- Migrate spell check settings to preferenceService
- Update language subscription in NodeTraceService
- Move client ID generation to systemInfo utility
- Keep shortcuts management in configManager (not migrated)
- Mark legacy Config_Set/Config_Get as deprecated
- Update AppUpdater test mock to include getClientId

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-21 13:46:05 +08:00
fullex
e59990d24e Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-21 10:09:13 +08:00
kangfenmao
b08228bdb5 refactor: update LaunchpadPage to use useSettings hook
- Replaced usePreference with useSettings in LaunchpadPage for improved state management.
- This change aligns with recent updates to enhance consistency across components.
2025-10-18 18:42:29 +08:00
kangfenmao
d2b6433609 feat: add Radix UI radio group component and update MCP settings UI
- Introduced a new RadioGroup component using Radix UI for better UI consistency.
- Updated MCPProviderSettings to utilize the new RadioGroup and adjusted button styles for improved UX.
- Added Radix UI radio group dependency to package.json and yarn.lock.
2025-10-18 18:31:00 +08:00
kangfenmao
3417acafe2 refactor: mcp servers settings 2025-10-18 18:07:52 +08:00
kangfenmao
f42afe28d7 refactor: update Chat, AgentItem, and LaunchpadPage components to use preference hooks
- Replaced useSettings with usePreference in AgentItem and LaunchpadPage for better state management.
- Adjusted Chat component's Main element to include width styling for improved layout consistency.
2025-10-18 18:07:43 +08:00
fullex
0da9252eb7 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-18 17:45:44 +08:00
fullex
de5fa5e09c fix: test snapshot 2025-10-16 17:33:14 +08:00
fullex
8d64bb0316 fix: lint error 2025-10-16 17:13:30 +08:00
fullex
d7eb88f7e2 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-16 17:07:52 +08:00
MyPrototypeWhat
b41e1d712f chore: refactor UI package paths and imports for consistency
- Updated tsconfig files to standardize module resolution paths for the UI package.
- Modified component import paths in components.json to align with the new structure.
- Refactored import statements in various UI components to use the updated paths from '@cherrystudio/ui'.
- Added new exports for UI components in the index file to enhance accessibility.
2025-10-16 15:18:35 +08:00
MyPrototypeWhat
c258035f6a chore: enhance type checking and update UI package configuration
- Added a new typecheck command for the UI package in package.json to ensure type safety.
- Updated tsconfig.web.json to include UI paths for better module resolution.
- Modified the type-check command in the UI package to specify the tsconfig.json file.
- Adjusted the include paths in the UI tsconfig.json to focus on specific component directories.
2025-10-14 14:43:49 +08:00
MyPrototypeWhat
569572bfdc style: standardize import syntax in globals.css
- Updated import statements in globals.css to use single quotes for consistency across the codebase.
2025-10-14 14:20:21 +08:00
MyPrototypeWhat
b821ac5390 fix: update import path for RequireSome type in Toast component
- Changed the import path for RequireSome type from '@types' to '@/types' to align with the project's directory structure.
2025-10-14 14:12:55 +08:00
MyPrototypeWhat
534c2ce485 feat: update UI components and styles with Radix and Tailwind integration
- Added new UI components including Button, Command, Dialog, Popover, and Dropzone using Radix UI.
- Introduced global styles with Tailwind CSS for consistent theming and design.
- Updated existing components to utilize new utility functions for class name management.
- Enhanced Tooltip component with inline-block display for better layout.
- Updated package dependencies in package.json and yarn.lock to include new Radix and Tailwind packages.
2025-10-14 14:12:48 +08:00
Phantom
bab1a5445c ci: allow v2 branch to run PR CI workflow (#10698) 2025-10-13 23:31:46 +08:00
fullex
742f901052 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-13 23:18:32 +08:00
Pleasure1234
cb12bb5137 fix: v2 merge error (#10658)
* fix: v2 merge error

* fix: review improve

* fix: ci error

* fix: review

* Update index.tsx

* Update index.tsx
2025-10-13 09:24:32 +08:00
fullex
06b6f2b9d8 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-11 09:56:42 +08:00
fullex
2c102ed3b4 refactor: update imports to use 'type' for type-only imports across multiple files
- Changed imports to use 'type' for type-only imports in various files, improving clarity and potentially optimizing the build process.
- Adjusted imports in files related to agents, models, and types to ensure consistency in type usage.
2025-10-09 12:45:17 +08:00
fullex
767e22c58d Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-09 12:10:37 +08:00
fullex
dee397f6ac Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-10-08 19:10:15 +08:00
Pleasure1234
a00aba23bd refactor: migrate all antd Tooltip components to HeroUI Tooltip (#10295)
* refactor: migrate tooltip components to @cherrystudio/ui

- Replace all antd Tooltip + InfoCircleOutlined patterns with InfoTooltip component
- Replace all antd Tooltip + QuestionCircleOutlined patterns with HelpTooltip component
- Migrate all WarnTooltip imports to @cherrystudio/ui
- Add onClick support to InfoTooltip and HelpTooltip components
- Remove local tooltip components from renderer
- Update eslint config to restrict antd Tooltip imports
- Clean up unused imports and styled components

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: replace tooltip

* fix: yarn format

* fix: type check

* Update QuickModelPopup.tsx

* fix: yarn test

* fix: ci error

* Update TabContainer.tsx

* fix: ci error

* fix: ci error

* fix: issue

* fix: ci

* fix: again

* refactor(ui): replace Tooltip title prop with content for consistency

* refactor(Tooltip): improve Tooltip component by extending props and simplifying implementation

- Extend TooltipProps from HeroUITooltipProps instead of redefining
- Remove redundant props and use spread operator for classNames
- Export TooltipProps type for better type support

* refactor(HelpTooltip): rename title prop to content and simplify component

Update HelpTooltip component to use TooltipProps interface and rename title prop to content for consistency
Update all instances where HelpTooltip is used to reflect the prop name change

* refactor(IconTooltips): consolidate tooltip components into unified module

Move HelpTooltip, InfoTooltip, and WarnTooltip into a single IconTooltips directory with shared types
Update exports in components index to use new module structure

* refactor(tooltip): update InfoTooltip prop from title to content and simplify component

Consolidate tooltip props interface and update all instances to use content prop instead of title for consistency. Remove redundant interface definitions and simplify InfoTooltip component implementation.

* refactor(ui): rename WarnTooltip prop from title to content for consistency

Update all instances of WarnTooltip component to use content prop instead of title for better consistency with Tooltip component interface. Also simplify the component props by extending IconTooltipProps type.

* fix(tooltip): update tooltip usage

- Replace deprecated props like `mouseEnterDelay` and `mouseLeaveDelay` with `delay` and `closeDelay`
- Rename `arrow` prop to `showArrow` for better semantics
- Update styling props to use `classNames` instead of inline styles
- Remove unnecessary props like `fresh` and `destroyOnHidden`

* refactor(components): remove redundant placement="top" from Tooltip components

The placement="top" prop was removed from all Tooltip components since it's the default value and redundant. This change improves code cleanliness without affecting functionality.

* fix(HeaderNavbar): add tooltip placement for sidebar toggle buttons

* fix(ui): add delay to tooltip components for better user experience

* refactor(tooltip): adjust tooltip behavior and styling across components

- Remove default delay values from base Tooltip component
- Add delay and closeDelay props to specific tooltip instances
- Fix tooltip compatibility issue with Antd Dropdown
- Adjust tooltip placement and styling in various components

* fix(ui): set closeDelay to 0 for Tooltip components to improve responsiveness

Prevent tooltip delay from causing poor user experience by making them close immediately when mouse leaves the element

* refactor(ui): remove redundant tooltip placement prop

The 'placement="top"' prop was removed from Tooltip components as it's the default value and doesn't need to be explicitly set.

* fix(ui): adjust tooltip delays for better user experience

- Set consistent default delay of 1000ms for window controls
- Increase delay for sidebar toggle tooltips to 2000ms
- Adjust various message action tooltip delays between 600-1200ms

* fix(SelectModelPopup): add delay props to provider settings tooltip

Add delay and closeDelay props to Tooltip component to improve user experience by preventing accidental triggers

* style(HelpTooltip): add cursor help style to improve UX

* fix(components): add tooltip delay and placement props for better UX

Add delay prop to CustomTag and ModelIdWithTags tooltips to prevent flickering
Set placement prop for LocalBackupManager tooltip to top-start
Add closeDelay prop to HelpTooltip in SaveToKnowledgePopup for immediate closing

* refactor(ModelSelectButton): simplify tooltip props by using TooltipProps type

Replace individual tooltip placement props with TooltipProps type from ui library for better maintainability

* fix(ui): remove tooltip close delay for better user experience

* docs(tooltip): add jsdoc comments explaining tooltip wrapper behavior

* refactor(Tooltip): clarify showArrow prop

* fix(Inputbar): set closeDelay to 0 for pause tooltip to improve UX

Prevent tooltip from staying visible after interaction by removing the close delay

* style(InputbarTools): improve tooltip consistency and css formatting

- Add closeDelay to new topic tooltip for consistency
- Remove redundant line breaks in tooltip props
- Format css transition properties for better readability

* chore: add tailwindCSS class attributes to vscode settings

* fix(tooltips): improve tooltip behavior and styling across components

- Add closeDelay=0 to most tooltips for instant closing
- Add custom styling to CitationTooltip and ChatFlowHistory tooltips
- Adjust delay times for navigation tooltips
- Remove conflicting Tooltip wrappers around Popconfirm actions

* refactor(ui): adjust tooltip delays and placements across components

- Remove redundant isOpen prop from CustomNode tooltip
- Standardize tooltip delays and placements in MessageGroupMenuBar, MessageTokens, ChatNavbar
- Simplify tooltip wrapper structure in HeaderNavbar
- Add consistent tooltip delays in MessageGroupModelList
- Set tooltip placements in MinimalToolbar

* refactor(Tooltip): enhance tooltip structure and props

- Add className prop to Tooltip component for better customization
- Wrap children in a div with relative positioning to improve layout

* refactor(Tooltip): enhance props structure for improved customization

- Update Tooltip component to allow optional classNames with a placeholder property
- Modify child wrapper to utilize classNames for better styling control

* refactor(IconTooltips): consolidate icon props into single iconProps object

Replace individual icon styling props (iconColor, iconSize, iconStyle) with a unified iconProps object using LucideProps type. This simplifies the component API and improves maintainability by using a standardized props structure across all icon tooltip components.

* feat(JoplinSettings): add help button to open Joplin documentation

Add a help button in Joplin settings that opens the official Joplin documentation in a minapp popup when clicked. This provides users with quick access to Joplin's help resources.

* feat(NotionSettings): add help link click handler for notion title

Add click handler to open help documentation when clicking on Notion title in settings

* feat(S3Settings): add help link to S3 settings title

Add click handler to open documentation for S3 settings when title is clicked

* feat(settings): add help button for siyuan integration

Add click handler to open help documentation for siyuan integration settings

* feat(yuque-settings): add help button to open yuque token guide

Add a help button in Yuque settings that opens a minapp popup with Yuque's token guide. This helps users easily access documentation for generating API tokens.

* fix(ui): adjust tooltip delay settings for better user experience

Set closeDelay to 0 for reset button tooltip to prevent lingering
Add delay of 500ms for api key list tooltip to avoid accidental triggers

* fix(ModelList): set closeDelay to 0 for all Tooltip components

Prevent tooltips from staying open longer than necessary by immediately closing them on mouse leave

* fix(ui): improve tooltip placement and delay settings

adjust tooltip placement and delay for better user experience

* refactor(tests): update tooltip mock implementation and snapshots

- Consolidate tooltip mock to handle both title and content props
- Remove deprecated placement attributes from snapshots
- Clean up test tooltip content assertions

* refactor: remove unnecessary whitespace and simplify tooltip components

clean up code by removing redundant whitespace and simplifying tooltip component usage across multiple files

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: icarus <eurfelux@gmail.com>
Co-authored-by: MyPrototypeWhat <daoquqiexing@gmail.com>
2025-10-05 18:33:21 +08:00
one
de5fb03efb feat(CodeEditor): enable readOnly for CodeEditor (v2) (#10517)
* feat(CodeEditor): enable readOnly for CodeEditor (v2)

* docs: update prop comments
2025-10-05 18:32:31 +08:00
MyPrototypeWhat
a6e58776d2 feat(tailwind): add source for UI package to Tailwind CSS configuration
- Included a new source path for the UI package in the Tailwind CSS configuration to enhance styling capabilities.
- This addition allows for better integration of UI components with Tailwind's utility classes, improving overall design consistency.
2025-09-30 15:12:33 +08:00
MyPrototypeWhat
bebe745e69 refactor(ProviderAvatar): update props for clarity and consistency
- Changed the `name` prop to directly use `providerName` for better readability.
- Updated the `getInitials` prop to use `getFirstCharacter` for improved clarity in the component's functionality.

These changes enhance the maintainability and understanding of the ProviderAvatar component.
2025-09-30 15:07:27 +08:00
MyPrototypeWhat
ec8c24a1c2 refactor: update Avatar components for improved styling and functionality
- Refactored ProviderAvatar to use the name prop for better clarity.
- Updated ModelAvatar to apply consistent styling using Tailwind CSS for width and height.
- Adjusted useOcrProvider hook to standardize Avatar component usage with dynamic sizing.

These changes enhance the overall consistency and maintainability of the Avatar components across the application.
2025-09-30 15:03:58 +08:00
MyPrototypeWhat
db4fcac768 feat: enhance Selector component with SearchableSelector and update exports
- Introduced a new SearchableSelector component for improved item selection with search functionality.
- Updated the Selector component to streamline item selection and added type exports for better type safety.
- Refactored the preferenceSchemas to use the new MathEngine type for better clarity.
- Added comprehensive README documentation for the Selector component detailing usage and features.
- Updated various components and stories to utilize the new Selector and SearchableSelector components.
2025-09-30 14:59:33 +08:00
MyPrototypeWhat
6c71b92d1d refactor: remove ProviderAvatar component and related files
- Deleted the ProviderAvatar component and its associated utility functions and stories to streamline the codebase.
- Updated index.ts to remove the export of ProviderAvatar, ensuring a cleaner component structure.
2025-09-29 18:58:46 +08:00
MyPrototypeWhat
d470fd8b88 refactor: remove unused ProviderLogo styled component from multiple pages
- Deleted the ProviderLogo styled component from CodeToolsPage, AihubmixPage, and PreprocessProviderSettings to streamline the codebase and eliminate redundancy.
2025-09-29 17:48:01 +08:00
MyPrototypeWhat
99962b740c feat: add EmojiAvatar component and update component exports
- Introduced a new EmojiAvatar component for enhanced avatar functionality.
- Updated index.ts to export the new EmojiAvatar alongside existing components.
- Removed the old display/EmojiAvatar component to streamline the codebase.
- Adjusted various components to utilize the new Avatar structure and styling.
2025-09-29 17:47:17 +08:00
MyPrototypeWhat
ef4bede062 feat: introduce DescriptionSwitch component and update component exports
- Added a new DescriptionSwitch component to enhance the Switch functionality with a description feature.
- Updated the exports in index.ts to include the new DescriptionSwitch alongside existing components.
- Refactored the SettingsTab to utilize DescriptionSwitch for improved UI consistency.
- Removed the InfoPopover component as part of the cleanup process.
2025-09-29 12:47:36 +08:00
Phantom
e6e1fb0404 refactor(button): migrate button from antd to heroui (#10292)
* fix(eslint): add Button to restricted antd imports

* feat(ui): add Button component with Storybook stories

Implement a reusable Button component wrapping HeroUIButton with proper TypeScript props.
Add comprehensive Storybook stories demonstrating all button variants, colors, sizes and states.

* refactor(components): update ActionIconButton implementation and usage

Replace onClick with onPress prop and move icon into icon prop
Update component to use @cherrystudio/ui Button instead of antd
Simplify props interface and add displayName

* refactor(ui): migrate antd buttons to @cherrystudio/ui components

update button components across multiple files to use @cherrystudio/ui's Button component
replace antd button props with equivalent @cherrystudio/ui props

* refactor(InputEmbeddingDimension): replace antd Button with custom Button component

Update the Button component to use the custom @cherrystudio/ui Button with updated props for better consistency and maintainability

* refactor(components): migrate buttons from antd to @cherrystudio/ui

Update button components in LocalBackupModals and LocalBackupManager to use @cherrystudio/ui instead of antd
Add flex styling to modal footers for better button alignment

* refactor(ProviderSetting): migrate Button components from antd to @cherrystudio/ui

Update Button components to use @cherrystudio/ui implementation with new props like variant, color, and startContent
Replace onClick handlers with onPress and adjust disabled states

* refactor(ui): migrate antd buttons to cherrystudio ui buttons

Update button components across multiple files to use @cherrystudio/ui Button instead of antd Button
Standardize button props and behavior while maintaining existing functionality

* refactor(NutstorePathSelector): update button props to use cherrystudio ui

Replace antd Button with cherrystudio ui Button component and update props

* refactor(S3BackupManager): migrate antd buttons to @cherrystudio/ui

Update button components from antd to @cherrystudio/ui library
Change button props to match new library's API (variant, color, onPress, etc)
Adjust table props for consistency with new component library

* refactor(TranslateButton): replace styled Button with cherrystudio Button component

The custom styled Button was replaced with the cherrystudio Button component to maintain consistency across the UI and reduce custom styling code. The functionality remains the same but uses the library's built-in props for styling.

* refactor(WebdavBackupManager): replace antd buttons with cherrystudio ui buttons

Update button components to use cherrystudio ui library for consistency

* refactor(ui): migrate buttons from antd to @cherrystudio/ui

Update button components across multiple editor components to use @cherrystudio/ui's Button component instead of antd's. This includes updating props like size, variant, and event handlers to match the new component's API.

* refactor(components): migrate buttons from antd to @cherrystudio/ui

Update button components in HtmlArtifactsCard and HtmlArtifactsPopup to use @cherrystudio/ui's Button component instead of antd's Button. This includes updating props like icon to startContent, onClick to onPress, and type to variant/color.

* refactor(ui): migrate button components from antd to hero ui

- replace antd Button with hero ui Button component
- update button props interface to extend hero ui props
- adjust button props in OAuthButton and MinappPopupContainer

* refactor(MultiSelectionPopup): migrate button components to @cherrystudio/ui

Update button props to match new component library requirements

* refactor(ApiKeyItem): migrate antd buttons to cherrystudio ui components

Update button components in ApiKeyItem to use cherrystudio ui library instead of antd

* refactor(ApiKeyListPopup): update button props to use new UI library syntax

Update button components to use the new syntax from @cherrystudio/ui library, replacing antd Button props with the new variant, color, and isDisabled props. Also adjust icon placement and button types to match the new library's API.

* refactor(SelectModelButton): replace antd Button with custom Button component

Simplify button implementation by using custom Button component from ui library instead of antd. Remove unused styled component and event handling.

* refactor(Preview): migrate ImageToolButton to use @cherrystudio/ui

Update ImageToolButton component to use Button from @cherrystudio/ui instead of antd
Change onClick prop to onPress to match new Button component API
Update related usage in ImageToolbar component

* refactor(ui): migrate buttons from antd to cherrystudio ui components

Update button components across multiple files to use cherrystudio's Button component instead of antd's. This includes updating props like onClick to onPress and adjusting button styling props to match the new component's API.

* refactor(ui): migrate antd buttons to @cherrystudio/ui buttons

Update button components from antd to @cherrystudio/ui library
Adjust button props to match new component API

* refactor(components): update prop names and component usage

- Rename onClick to onPress in ImageToolButton test props
- Update isLoading to loading in S3BackupManager table props
- Change ghost to variant in ProviderSetting button props
- Replace antd Button with cherrystudio Button in PreferenceBasicTests

* refactor(ImageToolButton): migrate from antd to @cherrystudio/ui

* refactor(FilesPage): migrate Button components from antd to @cherrystudio/ui

* refactor(SearchMessage): migrate Button components from antd to @cherrystudio/ui

* refactor(TopicMessages): migrate Button components from antd to @cherrystudio/ui

* refactor(TopicsHistory): migrate Button components from antd to @cherrystudio/ui

* refactor(ChatNavigation): migrate Button components from antd to @cherrystudio/ui

* refactor(CitationsList): migrate Button components from antd to @cherrystudio/ui

* refactor(MessageGroupMenuBar): migrate Button components from antd to @cherrystudio/ui

* refactor: reorganize button imports and adjust class order

Consolidate Button imports from @cherrystudio/ui to be grouped with other imports
Standardize className order for consistency across components

* refactor(SelectModelPopup): replace HStack with Flex component for layout

* feat: migrate PrivacyPopup from antd Button to @cherrystudio/ui Button

- Replace antd Button import with @cherrystudio/ui Button
- Update onClick to onPress event handler
- Update type="primary" to variant="solid" color="primary"
- Maintain existing functionality while following Hero UI API

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate NewTopicButton from antd Button to @cherrystudio/ui Button

- Replace antd Button import with @cherrystudio/ui Button
- Update size="small" to size="sm"
- Update icon prop to startContent for Hero UI API
- Update onClick to onPress event handler
- Maintain existing styled-components with StyledButton wrapper

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate MessageMcpTool Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update two Button components with Hero UI API:
  - size="small" to size="sm"
  - onClick to onPress
  - variant="filled" to variant="solid"
  - Move icons to startContent prop
- Maintain Dropdown.Button as antd component (not migrated)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate SettingsTab Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update settings icon button with Hero UI API:
  - type="text" to variant="light"
  - size="small" to size="sm"
  - icon prop to isIconOnly with child content
  - onClick to onPress event handler

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate AssistantTagsPopup Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update delete tag button with Hero UI API:
  - type="text" to variant="light"
  - danger prop to color="danger"
  - icon prop to isIconOnly with child content
  - onClick to onPress event handler

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate UpdateAppButton from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update styled Button component with Hero UI API:
  - onClick to onPress event handler
  - icon prop to startContent
  - color="orange" to color="warning" (closest equivalent)
  - variant="outlined" to variant="bordered"
  - size="small" to size="sm"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NewTopicButton): replace styled-components with cn utility

Simplify component styling by removing styled-components in favor of the cn utility

* refactor: organize imports and remove unused event handlers

remove duplicate Button imports and clean up stopPropagation handlers

* feat: migrate KnowledgeContent Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update settings icon Button with Hero UI API:
  - type="text" to variant="light"
  - size="small" to size="sm"
  - icon prop to isIconOnly with child content
  - onClick to onPress event handler
- Update ResponsiveButton styled component selector:
  - .ant-btn-icon + span to [data-slot="icon"] + [data-slot="label"]

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate KnowledgeDirectories Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update three Button components with Hero UI API:
  - Refresh button: type="text" to variant="light", icon to isIconOnly, onClick to onPress
  - Delete button: type="text" danger to variant="light" color="danger", icon to isIconOnly, onClick to onPress
  - Add directory button: type="primary" to variant="solid" color="primary", icon to startContent, disabled to isDisabled
- Remove stopPropagation from add directory button as not needed with onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate KnowledgeFiles Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update three Button components with Hero UI API:
  - Add file button: type="primary" to variant="solid" color="primary", icon to startContent, disabled to isDisabled
  - Refresh button: type="text" to variant="light", icon to isIconOnly, onClick to onPress
  - Delete button: type="text" danger to variant="light" color="danger", icon to isIconOnly, onClick to onPress
- Remove stopPropagation from add file button as not needed with onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate KnowledgeNotes Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update three Button components with Hero UI API:
  - Add note button: type="primary" to variant="solid" color="primary", icon to startContent, disabled to isDisabled
  - Edit button: type="text" to variant="light", icon to isIconOnly, onClick to onPress
  - Delete button: type="text" danger to variant="light" color="danger", icon to isIconOnly, onClick to onPress
- Remove stopPropagation from add note button as not needed with onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate KnowledgeSitemaps Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update three Button components with Hero UI API:
  - Add sitemap button: type="primary" to variant="solid" color="primary", icon to startContent, disabled to isDisabled
  - Refresh button: type="text" to variant="light", icon to isIconOnly, onClick to onPress
  - Delete button: type="text" danger to variant="light" color="danger", icon to isIconOnly, onClick to onPress
- Remove stopPropagation from add sitemap button as not needed with onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate KnowledgeUrls Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update three Button components with Hero UI API:
  - Add URL button: type="primary" to variant="solid" color="primary", icon to startContent, disabled to isDisabled
  - Refresh button: type="text" to variant="light", icon to isIconOnly, onClick to onPress
  - Delete button: type="text" danger to variant="light" color="danger", icon to isIconOnly, onClick to onPress
- Remove stopPropagation from add URL button as not needed with onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate KnowledgeVideos Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update three Button components with Hero UI API:
  - Add video button: type="primary" to variant="solid" color="primary", icon to startContent, disabled to isDisabled
  - Refresh button: type="text" to variant="light", icon to isIconOnly, onClick to onPress
  - Delete button: type="text" danger to variant="light" color="danger", icon to isIconOnly, onClick to onPress
- Remove stopPropagation from add video button as not needed with onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate MinAppsPage Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update two settings Button components with Hero UI API:
  - type="text" to variant="light"
  - icon prop to isIconOnly with child content
  - onClick to onPress event handler
  - Maintain className="nodrag" for draggable interface

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate MiniAppSettings Buttons from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update two Button components with Hero UI API:
  - Swap button: onClick to onPress event handler
  - Reset button: onClick to onPress event handler
- Buttons use default Hero UI styling without additional props

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate NewAppButton from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update two Button components with Hero UI API:
  - Upload button: icon to startContent
  - Save button: type="primary" htmlType="submit" to variant="solid" color="primary" type="submit"
- Maintain form submission functionality with type="submit"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: standardize button imports from @cherrystudio/ui

* refactor(KnowledgeContent): replace icon prop with startContent in Button

Improve consistency with component library by using startContent prop instead of children for icons

* refactor(KnowledgeVideos): update button components to use startContent prop

Use startContent prop for icons in buttons to improve consistency with the design system

* refactor(MinAppsPage): improve button component structure by using startContent prop

* feat: migrate AihubmixPage Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - size="small" to size="sm"
  - icon to startContent
  - onClick to onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate DmxapiPage Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - size="small" to size="sm"
  - icon to startContent
  - onClick to onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate NewApiPage Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - size="small" to size="sm"
  - icon to startContent
  - onClick to onPress
  - type="primary" to variant="solid" color="primary"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate SiliconPage Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - size="small" to size="sm"
  - icon to startContent
  - onClick to onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate TokenFluxPage Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - size="small" to size="sm"
  - icon to startContent
  - onClick to onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate ZhipuPage Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - type="text" to variant="light"
  - icon to startContent
  - onClick to onPress
  - disabled to isDisabled

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate Artboard Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - onClick to onPress for NavigationButton and CancelButton
  - type="link" to variant="light"
- Maintain styled-components usage for NavigationButton and CancelButton

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate DynamicFormRender Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - icon to startContent
  - onClick to onPress
  - size="small" to size="sm"
  - danger to color="danger"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: convert Button inline styles to Tailwind CSS

- Replace style={{borderTopLeftRadius: 0, borderBottomLeftRadius: 0, height: '32px'}} with className="rounded-l-none h-8"
- Replace style={{flexShrink: 0, minWidth: 'auto', padding: '0 8px'}} with className="shrink-0 min-w-0 px-2"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate ImageUploader Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - size="small" to size="sm"
  - onClick to onPress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(Artboard): replace inline styles with tailwind classes

Use tailwind classes for consistent styling of navigation buttons instead of inline styles

* feat: migrate AboutSettings Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - onClick to onPress for all Button components
  - loading to isLoading for CheckUpdateButton
  - disabled to isDisabled for CheckUpdateButton
- Maintain CheckUpdateButton styled component

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate AssistantMemorySettings Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - type="text" to variant="light" + isIconOnly
  - icon to startContent
  - onClick to onPress
  - size="small" to size="sm"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate AssistantModelSettings Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - icon to startContent
  - onClick to onPress
  - variant="filled" to variant="solid"
  - danger + type="primary" to color="danger" variant="solid"
  - Add isIconOnly for icon-only buttons
- Maintain ModelSelectButton styled component

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate AssistantPromptSettings Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - type="primary" to variant="solid" color="primary"
  - icon to startContent
  - onClick to onPress
- Convert inline styles to Tailwind CSS:
  - style={{fontSize: 18, padding: '4px', minWidth: '28px', height: '28px'}} to className="text-lg p-1 min-w-7 h-7"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: consolidate Button imports from @cherrystudio/ui

Move all Button imports from @cherrystudio/ui to be grouped with other imports from the same package for better consistency and maintainability

* feat: migrate AssistantRegularPromptsSettings Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - type="text" to variant="light"
  - icon to startContent
  - onClick to onPress
  - Add isIconOnly for icon-only buttons
  - danger to color="danger"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: migrate DataSettings Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Update Button props with Hero UI API:
  - onClick to onPress for all buttons
  - icon to startContent for backup/restore buttons
  - danger to color="danger" for reset button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NutstoreSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Update type/danger props to variant/color system
- Convert loading to isLoading prop
- Convert disabled to isDisabled prop
- Update ghost prop to variant="ghost"
- Add isIconOnly for folder icon button
- Migrate startContent pattern for icons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(S3Settings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert icon props to startContent pattern
- Convert loading to isLoading prop
- Convert disabled to isDisabled prop

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SiyuanSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(WebDavSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert icon props to startContent pattern
- Convert loading to isLoading prop
- Convert disabled to isDisabled prop

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(YuqueSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(DisplaySettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert icon props to startContent pattern
- Convert variant="text" to variant="light"
- Add isIconOnly for icon-only buttons
- Replace inline styles with Tailwind CSS classes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(PreprocessProviderSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Convert type="text" to variant="light"
- Convert size="small" to size="sm"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NotionSettings): replace antd Button with cherrystudio Button and update prop

Update the Button import to use cherrystudio's component instead of antd's

* refactor(settings): migrate Button props to use startContent and isDisabled

Update Button components in LocalBackupSettings to use startContent instead of icon and isDisabled instead of disabled for consistency with the updated UI library

* refactor(JoplinSettings): replace Button import and update onPress prop

Use Button component from @cherrystudio/ui instead of antd
Update onClick to onPress for consistency with component API

* refactor(MarkdownExportSettings): replace antd Button with cherrystudio Button in markdown export

Update the Button component import and props to use the cherrystudio UI library version instead of antd for consistency

* refactor: organize imports in settings components

Move Button import from cherrystudio/ui to be grouped with other imports from the same package for better consistency and readability

* refactor(AddMcpServerModal): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert icon prop to startContent pattern

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(BuiltinMCPServerList): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Convert type="text" to variant="light"
- Convert size="small" to size="sm"
- Convert icon to startContent pattern
- Convert disabled to isDisabled prop
- Add isIconOnly for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(InstallNpxUv): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert type="primary" to variant="solid" color="primary"
- Convert type="link" to variant="light"
- Convert shape="circle" to radius="full"
- Convert size="small" to size="sm"
- Convert loading/disabled to isLoading/isDisabled
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button
- Convert green color to success color

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(McpServerCard): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers (removing e.stopPropagation)
- Convert type="text" to variant="light"
- Convert size="small" to size="sm"
- Convert shape="circle" to radius="full"
- Convert danger to color="danger"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(MCPSettings): reorder Button imports for consistency

Move Button imports to be grouped with other UI component imports for better readability and maintainability

* refactor(McpServersList): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert type="default" to variant="solid"
- Convert shape="round" to radius="full"
- Convert icon to startContent pattern

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(McpServerCard): remove unused event parameter from click handlers

The event parameter was not being used in handleOpenUrl and onClickDetails handlers, so it was removed to simplify the code.

* refactor(McpServerCard): remove data-no-dnd attribute from Button

* refactor(McpSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert danger to color="danger"
- Convert type="text" to variant="light"
- Convert type="primary" to variant="solid" color="primary"
- Convert shape="round" to radius="full"
- Convert loading/disabled to isLoading/isDisabled
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(McpSettingsNavbar): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Convert type="text" to variant="light"
- Convert size="small" to size="sm"
- Convert icon to startContent pattern
- Replace inline styles with Tailwind CSS classes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NpxSearch): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Convert type="text" to variant="light"
- Convert size="small" to size="sm"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SyncServersPopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert type="default" to variant="solid"
- Convert type="primary" to variant="solid" color="primary"
- Convert loading/disabled to isLoading/isDisabled

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(MCPSettings/index): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert type="default" to variant="solid"
- Convert shape="circle" to radius="full"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(MemorySettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Convert type="text" to variant="light"
- Convert type="primary" to variant="solid" color="primary"
- Convert size="large" to size="lg"
- Convert size="small" to size="sm"
- Convert loading/disabled to isLoading/isDisabled
- Convert danger to color="danger"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(UserSelector): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Convert type="default" to variant="solid"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(DefaultAssistantSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Convert type="text" to variant="light"
- Convert icon to startContent pattern
- Add isIconOnly for icon-only button
- Replace inline styles with Tailwind CSS classes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(QuickModelPopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Change icon prop to startContent
- Update type="text" to variant="light"
- Add isIconOnly prop for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NotesSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for all buttons
- Change type="default" to variant="solid"
- Change type="primary" to color="primary"
- Update loading to isLoading prop
- Update disabled to isDisabled prop
- Change icon prop to startContent
- Replace inline style with Tailwind CSS class (ml-2)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(AnthropicSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Change type="primary" to color="primary"
- Update loading to isLoading prop

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ModelEditContent): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for all buttons
- Change size="small" to size="sm"
- Update icon prop to startContent for save and reset buttons
- Change iconPosition="end" to endContent for more settings toggle
- Update type="text" to variant="light" and add isIconOnly for reset button
- Change type="primary" to color="primary"
- Replace htmlType="submit" with type="submit"
- Update variant="filled" to variant="solid"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ModelTypeSelector): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Change size="small" to size="sm"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(GithubCopilotSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for all buttons
- Change type="primary" to color="primary"
- Change type="primary" danger to color="danger"
- Update size="small" to size="sm"
- Update loading to isLoading prop
- Update disabled to isDisabled prop
- Change icon prop to startContent for copy button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(AddModelPopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Change type="primary" to color="primary"
- Replace htmlType="submit" with type="submit"
- Change size="middle" to size="md"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ModelList): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for all buttons
- Change type="text" to variant="light" and add isIconOnly for icon button
- Change type="primary" to color="primary"
- Change type="default" to variant="solid"
- Update disabled to isDisabled prop
- Change icon prop to startContent for all buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ModelListGroup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Change type="text" to variant="light"
- Update disabled to isDisabled prop
- Change icon prop to startContent
- Remove e.stopPropagation() as no longer needed
- Add isIconOnly prop for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ModelListItem): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for both buttons
- Change type="text" to variant="light"
- Update disabled to isDisabled prop
- Change icon prop to startContent for both buttons
- Add isIconOnly prop for icon-only buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NewApiAddModelPopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Change type="primary" to color="primary"
- Replace htmlType="submit" with type="submit"
- Change size="middle" to size="md"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(NewApiBatchAddModelPopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Change type="primary" to color="primary"
- Replace htmlType="submit" with type="submit"
- Change size="middle" to size="md"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ProviderList): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Update disabled to isDisabled prop
- Change icon prop to startContent
- Keep existing style attributes for custom styling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ProviderOAuth): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for both buttons
- Change shape="round" to radius="full"
- Change icon prop to startContent for both buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(UrlSchemaInfoPopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Change type="link" to variant="light"
- Change size="small" to size="sm"
- Change icon prop to startContent
- Add isIconOnly prop for icon-only button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(QuickAssistantSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for both styled buttons
- Change type="primary" to color="primary"
- Change type="default" to color="default"
- Update styled component to use new Button from @cherrystudio/ui

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(QuickPhraseSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for all buttons
- Change type="text" to variant="light"
- Change icon prop to startContent for all buttons
- Change danger prop to color="danger"
- Add isIconOnly prop for all icon-only buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SelectionAssistantSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for both buttons
- Change type="link" to variant="light"
- Change icon prop to startContent
- Keep existing style attributes for custom styling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ActionsListItem): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for all buttons
- Change type="link" to variant="light"
- Change size="small" to size="sm"
- Change danger prop to color="danger"
- Add isIconOnly prop for all icon-only buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(MacProcessTrustHintModal): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for both buttons
- Change type="link" to variant="light"
- Change type="primary" to color="primary"
- Keep existing style attributes for custom styling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SelectionActionSearchModal): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler
- Change type="link" to variant="light"
- Change size="small" to size="sm"
- Keep existing style attributes for custom styling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SelectionFilterListModal): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handler for both modal buttons
- Change type="primary" to color="primary"
- Keep existing key attributes for modal footer

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SettingsActionsListHeader): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers
- Update icon prop to startContent with Plus icon
- Change disabled to isDisabled
- Add color="primary" for primary button style
- Update styled ResetButton to use variant="light"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ShortcutSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for all buttons
- Update icon prop to startContent for icon buttons
- Change disabled to isDisabled
- Convert size="small" to size="sm"
- Replace shape="circle" with isIconOnly for circular buttons
- Migrate reset undo button, clear button, and reset all button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(ApiServerSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for all buttons
- Update icon prop to startContent for documentation and copy buttons
- Change type="primary" to color="primary"
- Convert type="link" to variant="light" for regenerate button
- Change disabled to isDisabled for input button and regenerate button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(CustomLanguageModal): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for modal footer buttons
- Change type="primary" to color="primary" for save button
- Convert icon prop to startContent with isIconOnly for emoji button
- Migrate cancel, save, and emoji picker buttons to Hero UI API

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(CustomLanguageSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for all buttons
- Update icon prop to startContent for edit, delete, and add buttons
- Change type="primary" to color="primary" for add button
- Convert danger prop to color="danger" for delete button
- Migrate table action buttons and primary add button to Hero UI API

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(AddSubscribePopup): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert type="primary" to color="primary" for submit button
- Change htmlType="submit" to type="submit" following Hero UI API
- Migrate form submit button from antd to Hero UI

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(BlacklistSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for all buttons
- Change type="primary" to color="primary" for subscribe buttons
- Convert ghost prop to variant="ghost"
- Change disabled to isDisabled for all button states
- Migrate save, add subscribe, update subscribe, and delete buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(WebSearchProviderSetting): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for API key list and check buttons
- Change type="text" to variant="light" for API key list button
- Convert icon prop to startContent with isIconOnly for list button
- Update size="small" to size="sm"
- Change ghost prop to variant="ghost" and type to color for check button
- Convert disabled to isDisabled for API checking state

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(TranslateSettings): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress for more settings button
- Simple migration for modal footer button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(MigrateApp): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for all migration buttons
- Change type="primary" to color="primary" for primary buttons
- Convert disabled to isDisabled for migration in progress button
- Change size="small" to size="sm" for debug button
- Convert type="dashed" to variant="bordered" for styled buttons
- Migrate all buttons in migration workflow stages

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(SelectionActionApp): migrate Button from antd to @cherrystudio/ui

- Replace antd Button import with @cherrystudio/ui Button
- Convert onClick to onPress handlers for all window control buttons
- Change type="text" to variant="light" for all title bar buttons
- Update icon prop to startContent for pin, opacity, minimize, and close buttons
- Add isIconOnly prop for all icon-only buttons in the title bar
- Migrate styled WinButton component to use Hero UI Button as base

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* style(ActionIconButton): remove fixed dimensions and add size prop

Simplify button styling by removing fixed height/width and using size="sm" prop instead

* refactor(AssistantPromptSettings): migrate from antd Popover to hero-ui components

Replace antd Popover with hero-ui Popover and Tooltip components for better consistency
Rename EmojiButtonWrapper to EmojiDeleteButtonWrapper for clarity

* style(AssistantModelSettings): add size prop to delete button in model settings

* style(settings): standardize button sizes and replace Space.Compact with Flex

Consistently apply 'sm' size to buttons across settings components and replace deprecated Space.Compact with Flex component for better layout consistency

* refactor(ApiServerSettings): replace custom buttons with standard Button component

remove custom styled InputButton and RegenerateButton components in favor of using the standard Button component with appropriate props

* style(ProviderSetting): make settings button icon-only for consistency

* style(ui): update icon styling and button props

remove global lucide icon color override
update button components to use consistent props

* style(ProviderList): adjust button size to match design

* feat(theme): add foreground color calculation for primary theme

Calculate and set foreground color based on primary theme color to ensure proper contrast

* style(KnowledgeFiles): make button size consistent with other buttons

* test: update test snapshots for button components

Update test snapshots to reflect changes in button styling and accessibility attributes. The changes include updated class names, ripple effects, and focus states.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: fullex <106392080+0xfullex@users.noreply.github.com>
Co-authored-by: MyPrototypeWhat <daoquqiexing@gmail.com>
2025-09-29 12:04:03 +08:00
fullex
e6696def10 chore: update TypeScript configuration and refactor AppUpdater tests
- Added tests mock path to tsconfig.node.json for improved test coverage.
- Refactored AppUpdater to use preferenceService for language retrieval instead of configManager.
- Updated AppUpdater tests to mock preferenceService and ensure correct language handling in release notes.
- Changed import statements to use type imports for better clarity in MessageMcpTool component.
2025-09-29 10:11:40 +08:00
fullex
e5a3363021 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-29 10:01:04 +08:00
fullex
f6ff436294 refactor: replace keyv with cacheService 2025-09-25 11:38:05 +08:00
fullex
8a9b633af2 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-24 22:30:56 +08:00
Phantom
0a37146ba8 refactor(SelectModelPopup): replace HStack with Flex component (#10337)
refactor(SelectModelPopup): replace HStack with Flex component for layout
2025-09-24 20:10:12 +08:00
fullex
ac3dfcbfbe Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-24 13:13:58 +08:00
Phantom
5ac09d5311 refactor: migrate to toast from antd message (#10233)
* style(eslint): reorganize eslint config comments and rules

Move comments to consistent positions above their corresponding rules
Update antd import restriction to include 'message' component

* fix(eslint): reorganize eslint config to enable custom rules

* fix(eslint): update antd import restriction to include message

Prevent direct imports of both Flex and message from antd, enforcing usage of custom components

* feat(migration): add toast utilities to migrate and test apps

Initialize toast utilities on window object for both migration and test applications to enable toast notifications

* build(ui): add path aliases for types and utils modules

* refactor(toast): move toast utilities to ui package for better reusability

Centralize toast utilities in the @cherrystudio/ui package to improve code organization and reuse across multiple components. This change includes:
- Moving toast implementation to ui package
- Updating all imports to use the new location
- Adding proper type definitions

* refactor: replace antd message with window.toast for consistency

Replace all instances of antd's message component with window.toast throughout the application to maintain consistent notification behavior. Also add an ignore rule for dataRefactorTest files in eslint config.
2025-09-20 16:58:41 +08:00
MyPrototypeWhat
d4fd8ffdcc refactor(SettingsTab): update Selector component usage for consistency
- Simplified Selector component usage in SettingsTab by removing deprecated props and updating to the new API.
- Added size and label props to enhance accessibility and user experience.
- Ensured consistent handling of selected keys and selection change events across multiple instances of Selector.
2025-09-19 12:10:33 +08:00
fullex
84274d9d85 Merge branches 'v2' and 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-19 11:19:29 +08:00
Phantom
a72feebead refactor: migrate Switch from antd to heroui (#10237)
* refactor(eslint): reorganize eslint config for better maintainability

Move ignores section and oxlint configs to be grouped with other configurations

* fix(eslint): update antd import restriction to include Switch

Add Switch to restricted imports from antd to enforce using custom components

* feat(ui): add Switch component wrapper and update imports

Add a wrapper for the Switch component from @heroui/react and export it through @cherrystudio/ui. Update eslint rules to prevent direct imports from @heroui/react and update imports in TranslateSettings to use the new wrapper

* refactor(ui): replace antd Switch with custom Switch component

Migrate all instances of antd Switch component to the custom Switch component from @cherrystudio/ui. This includes updating props from `checked` to `isSelected` and `onChange` to `onValueChange` to match the new component's API. Also updates size prop from `small` to `sm` where applicable.

The change ensures consistency across the UI and reduces dependency on antd components. All affected files have been updated to use the new Switch component with proper prop mappings.

* feat(ui): enhance Switch component with loading state

Add loading state support to Switch component by showing a spinner when isLoading is true and disabling interaction during loading. Update all Switch component usages to use the new isLoading prop instead of loading.

* fix(Switch): prevent thumbIcon override when isLoading is true

Implement type constraints to disallow thumbIcon when isLoading is true
Add ref forwarding support and export enhanced props type

* fix(settings): update Switch component props to use consistent naming

Change deprecated 'defaultChecked' and 'disabled' props to 'defaultSelected' and 'isDisabled' respectively to match component library updates

* refactor(Switch): simplify type definition by removing redundant ref prop

* refactor(Switch): simplify props type definition for loading state

Remove complex union type in favor of simpler interface extending SwitchProps

* docs(ui): add jsdoc for CustomizedSwitch component

Add documentation for the CustomizedSwitch component to clarify its purpose and the isLoading prop usage

* fix(eslint): comment out heroui import restriction rule

Temporarily disable the heroui import restriction to allow direct imports while wrapped components are being updated

* style: fix formatting and spacing in settings components
2025-09-18 19:16:53 +08:00
MyPrototypeWhat
e930d3de43 refactor: update imports to use type-only imports for WebSearchPluginConfig and CherryWebSearchConfig
- Changed imports of WebSearchPluginConfig and CherryWebSearchConfig to type-only imports for better clarity and to optimize TypeScript compilation.
2025-09-17 18:40:38 +08:00
MyPrototypeWhat
ecc9923050 Merge remote-tracking branch 'origin/main' into v2 2025-09-17 18:37:22 +08:00
MyPrototypeWhat
e469016775 style(Selector.stories): simplify Selector component stories by condensing JSX structure
- Refactored the Selector component stories to use a more concise JSX format, improving readability.
- Ensured consistent formatting across size variations for better maintainability.
2025-09-17 18:33:14 +08:00
MyPrototypeWhat
15569387c7 feat(ui): implement new Selector component with enhanced functionality
- Replaced the existing Selector component with a new implementation using HeroUI's Select and SelectItem.
- Updated the props structure to support items and selection change handling.
- Added a new story file for the Selector component, showcasing various use cases including single and multiple selection modes, size variations, and disabled states.
- Improved type definitions for better clarity and usability.
2025-09-17 18:31:11 +08:00
Phantom
4f746842a5 refactor: migrate Flex from antd to custom Flex component (#10083)
* refactor(components): rename HStack and VStack to RowFlex and ColFlex for clarity

rename HStack to RowFlex and VStack to ColFlex across all components to better reflect their purpose as flex containers with row and column directions. This improves code readability and maintainability while keeping the same functionality. All references to these components have been updated accordingly.

* refactor(layout): migrate layout components from .ts to .tsx

The layout components have been moved from TypeScript (.ts) to TypeScript with JSX (.tsx) to better support JSX syntax and improve type safety. The functionality remains unchanged.

* refactor(Layout): convert styled Box component to functional component

Improve maintainability by converting styled-component to a functional component with explicit style props. This provides better type safety through CSSProperties interface and makes the component easier to debug.

* refactor(Layout): restructure Box component and convert styled components to functional

- Replace styled-components with functional components for Stack and Center
- Rename style variable to _style in Box component to avoid naming conflict
- Add style prop to Box component to allow external style overrides

* refactor(components): rename HSpaceBetweenStack to SpaceBetweenRowFlex for clarity

* refactor(Layout): pass through props in Stack components

Allow additional props to be passed to Stack and its variants for better flexibility. Convert RowFlex from styled component to regular component for consistency.

* refactor(Layout): convert SpaceBetweenRowFlex from styled to component

Improve maintainability by converting styled component to a regular component that explicitly passes justifyContent prop

* refactor(Layout): convert ColFlex to component and type RowFlex props

Improve type safety by explicitly omitting flexDirection from StackProps and convert ColFlex from styled component to regular component for consistency

* refactor(Layout): convert BaseTypography from styled to component

Improve type safety and maintainability by converting styled component to regular React component with TypeScript interface

* refactor(Layout): remove unused BaseTypography component

* refactor(Layout): remove unused Container component and interface

* refactor(layout): rename Stack to Flex and use CSSProperties types

The Stack component was renamed to Flex to better reflect its purpose and align with common naming conventions. The interface properties were also updated to use CSSProperties types for better type safety and consistency with CSS standards.

* refactor(Layout): move FlexProps interface and comment out unused ButtonProps

Clean up component interfaces by moving FlexProps closer to its usage and commenting out unused ButtonProps interface to reduce clutter

* refactor(layout): standardize flex props from alignItems/justifyContent to align/justify

The changes standardize the flex-related props in the Layout component and across multiple files from using alignItems/justifyContent to the shorter align/justify. This improves consistency and reduces verbosity in the codebase while maintaining the same functionality.

All instances of alignItems have been replaced with align and justifyContent with justify in Flex, RowFlex, ColFlex and related components. The changes are purely syntactic and do not affect the actual layout behavior.

This refactoring makes the code more maintainable by using a consistent naming convention for flex properties throughout the application.

* refactor(Layout): extend BoxProps with React div props

* feat(Layout): add flexWrap prop to Flex component interface

Add flexWrap property to FlexProps interface to support CSS flex-wrap functionality. Also replace antd Flex with custom Flex component in TagFilterSection.

* refactor(components): replace antd Flex with custom Layout components

Consolidate Flex component usage across multiple files by replacing antd's Flex with custom Layout components (Flex, ColFlex, RowFlex) for better maintainability and consistency

* refactor(components):  migrate antd Flex tu custom Flex

* refactor(components): update layout component usage for consistency

replace RowFlex with ColFlex where appropriate and align prop names

* refactor(tests): rename HStack to RowFlex in test components

Update test snapshots and mock components to reflect the component name change from HStack to RowFlex
Remove unused data-vertical attribute from preview container

* refactor(Layout): pass through props and merge styles in Box and Flex components

Improve component flexibility by allowing additional props to pass through and properly merging style objects in both Box and Flex components

* refactor(Layout): make Flex component props optional with undefined defaults

* test: update TagFilterSection snapshot to include wrap style

* perf(Layout): optimize Box component style calculation with useMemo

* docs: fix typo in Layout component comment

* refactor(Layout): update BoxProps to use CSSProperties types

Standardize prop types by using CSSProperties for style-related props to improve type safety and consistency with React's style system

* feat(Layout): add wrap prop to Flex component

* style(TagFilterSection): update snapshot styling to use flex-wrap property

* refactor(Layout): simplify layout components by using Tailwind CSS classes

Remove custom style calculations and props in favor of Tailwind utility classes

* refactor: replace inline styles with Tailwind CSS classes for consistent styling

style: update spacing and alignment utilities across components

* refactor(tests): update test snapshots to use tailwind classes

Replace inline styles with tailwind classes in test snapshots and update test assertions to match. This improves consistency with the codebase's styling approach.

* style: adjust spacing and gaps in UI components for consistency

* style: replace inline styles with tailwind classes for consistency

Refactor various components to use tailwind classes instead of inline styles to maintain consistency and improve readability. Changes include:
- Replacing style attributes with tailwind classes for spacing, margins, and padding
- Standardizing gap sizes across components
- Using tailwind for width, height, and other layout properties
- Updating test files to match new class names

* style(settings): replace inline styles with tailwind classes for consistency

Refactor settings components to use tailwind gap utility instead of inline styles for better maintainability and consistency across the codebase

* refactor(styles): replace inline styles with tailwind classes for consistency

* feat(eslint): add rule to restrict antd Flex imports

Enforce using custom Layout components instead of antd's Flex by adding a restricted import rule

* refactor: migrate flex layout from antd props to tailwind classes

- Replace antd Flex component props with tailwind classes for consistency
- Update gap and alignment values to use tailwind's spacing scale
- Remove unused antd Flex imports to clean up dependencies

* style(settings): adjust spacing and layout in various settings components

- Add gap spacing between elements in multiple settings components
- Remove redundant flex class in some components
- Standardize gap sizes across related components

* refactor(ui): replace inline styles with tailwind classes for consistency

Replace various inline style attributes with equivalent tailwind classes across multiple components to maintain consistent styling approach. Changes include margin, padding, width, and flex properties.

- Convert style attributes to tailwind classes
- Standardize spacing values using tailwind's spacing scale
- Improve maintainability by using utility classes

* style(ui): adjust spacing in model list group header

* style(css): wrap base styles in @layer for better organization

* style(css): fix indentation and nesting in global styles

* style(settings): adjust spacing in model list and convert subtitle to cn

Refactor SettingSubtitle to use cn utility for better className handling
Add gap spacing between model list items for improved layout

* style(css): move some styles from base layer to outer in index.css

* refactor(components): replace HStack with RowFlex for consistency

Update layout components to use RowFlex instead of HStack to maintain consistent naming

* style: reorder imports in useAppInit and BaseApiClient files

* fix(MinAppTabsPool): wrong import path

* refactor: update style file extensions from scss to css

Update file extensions and comments to reflect the change from SCSS to CSS stylesheets

* feat(layout): add Flex component and its variants

Introduce new Flex component with Box, RowFlex, SpaceBetweenRowFlex, ColFlex and Center variants to provide reusable layout components

* refactor: migrate layout components to @cherrystudio/ui package

This commit updates all imports of layout components (Box, Flex, RowFlex, ColFlex, etc.) from '@renderer/components/Layout' to '@cherrystudio/ui' across the codebase. The change also includes updating related test files and eslint configuration to reflect this migration. This refactoring aims to centralize layout components in a shared package for better maintainability and consistency.

* docs(eslint): update comment and restricted imports rule

Update comment to clarify the purpose of the rule and add a TODO note for future migration

* docs(ui): update migration status for layout components

Mark Layout/* components as migrated and refactored in both Chinese and English documentation

* docs: update migration status for Layout components
2025-09-17 18:17:17 +08:00
one
aab941d89c refactor: migrate sortable (#10204)
* refactor: rename sortable dir

* refactor: migrate Sortable to the ui package

* feat: add stories for Sortable

* refactor: add scroller to the vertical story

* refactor: improve hints and width

* refactor: simplify item style

* fix: lint errors

* chore: dependencies

* refactor: move hooks

* fix: import errors

* style: format

* style: format
2025-09-17 17:26:40 +08:00
MyPrototypeWhat
1b04fd065d refactor(ui): enhance CustomCollapse and ToolsCallingIcon components
- Refactored CustomCollapse to utilize Accordion and AccordionItem from HeroUI, simplifying props and improving functionality.
- Updated ToolsCallingIcon to accept TooltipProps for better customization.
- Revised stories for CustomCollapse to reflect new prop structure and added examples for various use cases.
- Cleaned up unnecessary props and improved documentation in story files.
2025-09-17 15:45:22 +08:00
MyPrototypeWhat
76b3ba5d7e feat(ui): integrate @storybook/addon-themes and enhance CustomCollapse component
- Added @storybook/addon-themes to package.json and yarn.lock for theme support in Storybook.
- Updated CustomCollapse component to utilize HeroUI's Accordion and AccordionItem for improved functionality and styling.
- Removed the ReasoningIcon component as it was deemed unnecessary.
- Enhanced ProviderAvatar component to ensure consistent className handling.
- Added new stories for FileIcons, SvgSpinners180Ring, and ToolsCallingIcon to showcase their usage and variations.
2025-09-17 14:53:34 +08:00
fullex
355e5b269d Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-17 14:28:36 +08:00
Phantom
d4b0272fe7 refactor: prefer import type (#10190)
* style(linter): enable consistent-type-imports rule in typescript

* chore: add biome to lint script for improved code formatting

* chore: add oxlint-specific lint script for faster linting

* refactor: use type-only imports for better type safety and clarity
2025-09-17 12:32:53 +08:00
MyPrototypeWhat
59bf94b118 refactor(ui): update migration status and enhance component implementations
- Increased the refactored component count to 18 and reduced pending migrations to 184 in the migration status files.
- Improved the Ellipsis, ListItem, MaxContextCount, and ThinkingEffect components by simplifying their structure and enhancing styling.
- Updated the tsconfig.json to adjust the root directory for better project organization.
- Removed unnecessary alias configurations in tsdown.config.ts for cleaner setup.
- Added new stories for Ellipsis and ListItem components to improve documentation and showcase their usage.
2025-09-16 19:20:04 +08:00
fullex
bd7cd22220 refactor: update data management documentation and structure
- Renamed "State Management" to "Data Management" in CLAUDE.md for clarity.
- Enhanced data management section with detailed descriptions of Cache System, Preference System, and User Data API.
- Updated README.md in shared/data to reflect new directory structure and provide clearer organization of type definitions and schemas.
- Added guidelines for selecting appropriate data access patterns based on data characteristics.
2025-09-16 17:30:02 +08:00
MyPrototypeWhat
f48674b2c7 refactor(ui): clean up component code and improve styling
- Refactored EmojiIcon, ExpandableText, and ProviderAvatar components for better readability and consistency.
- Simplified JSX structure and improved styling in ExpandableText and EmojiAvatar stories.
- Enhanced code formatting in various files for improved maintainability.
2025-09-16 17:21:01 +08:00
MyPrototypeWhat
56af6f43c0 refactor(ui): update button elements to include type attribute
- Added type="button" to button elements in DividerWithText and Icon stories for better accessibility and to prevent unintended form submissions.
- Improved code consistency across button components in the UI stories.
2025-09-16 17:15:40 +08:00
MyPrototypeWhat
f83c3e171e chore(ui): update migration status and component files
- Updated migration status to reflect the migration of additional components, reducing the total migrated count to 34 and increasing the refactored count to 14.
- Enhanced component files by refactoring several components to improve structure and styling, including CopyButton, CustomTag, and IndicatorLight.
- Added new stories for components such as CopyButton, CustomCollapse, and DividerWithText to improve documentation and showcase usage.
- Adjusted TypeScript configuration to include story files for better type checking.
2025-09-16 17:12:10 +08:00
fullex
d397a43806 fix: typecheck/test:lint/format:check
feat: add data related test
2025-09-16 15:26:36 +08:00
fullex
8353f331f1 test: update tests to use usePreference hook and improve snapshot consistency
- Refactored tests in MainTextBlock and ThinkingBlock to utilize the usePreference hook for managing user settings.
- Updated snapshots in DraggableVirtualList test to reflect changes in class names.
- Enhanced export tests to ensure proper handling of markdown formatting and citation footnotes.
- Mocked additional dependencies globally for improved test reliability.
2025-09-16 14:07:54 +08:00
MyPrototypeWhat
8cc6b08831 chore(ui): update package.json and migration status files
- Reformatted keywords and files array in package.json for better readability.
- Updated migration status to reflect the migration of additional components, increasing the total migrated count to 46 and reducing pending migrations to 190.
- Added new components to the migration status table, including ErrorBoundary and ProviderAvatar, while removing deprecated components like ErrorTag, SuccessTag, and WarnTag.
2025-09-16 13:32:25 +08:00
fullex
ffe897d58c chore: update yarn.lock and refactor SettingsTab component
- Added "@typescript-eslint/visitor-keys@npm:8.43.0" to yarn.lock.
- Refactored getVirtualIndexes in DraggableVirtualList to use item.index.
- Replaced useSettings with usePreference for codeFancyBlock in SettingsTab.
- Updated Switch component to use setCodeFancyBlock directly.
2025-09-16 11:56:10 +08:00
fullex
182ac3bc98 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-16 11:35:18 +08:00
fullex
c0cca4ae44 chore: update configuration and improve cache management
- Added "packages/ui/scripts/**" to .oxlintrc.json for linting.
- Excluded ".claude/**" from biome.jsonc.
- Refactored API path types in apiPaths.ts for better clarity.
- Updated error handling in errorCodes.ts to ensure stack trace is always available.
- Modified preferenceSchemas.ts to include new features and updated generated timestamp.
- Cleaned up tsconfig.json for better organization.
- Adjusted CustomTag component to improve rendering logic.
- Enhanced CodeEditor utility functions for better type safety.
- Improved Scrollbar story for better readability.
- Refactored CacheService to streamline comments and improve documentation.
- Updated useCache and useSharedCache hooks for better clarity and functionality.
- Cleaned up selectionStore and settings.ts by commenting out deprecated actions.
- Updated DataApiHookTests for better optimistic update handling.
2025-09-16 11:27:18 +08:00
one
8981d0a09d refactor(CodeEditor): decouple CodeEditor and global settings (#10163)
* refactor(CodeEditor): decouple CodeEditor and global settings

* refactor: improve language extension fallbacks

* refactor: make a copy of CodeEditor in the ui package

* refactor: update ui CodeEditor and language list

* refactor: use CodeEditor from the ui package

* feat: add a story for CodeEditor
2025-09-16 10:11:36 +08:00
Phantom
de44938d9b fix: ui package env (#10191)
* ci: add ui package to oxlint configuration

* chore: update vscode settings for oxlintrc.json association
2025-09-16 10:08:52 +08:00
fullex
75d5dcf275 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-16 00:46:42 +08:00
fullex
d8f4825e5e Merge branch 'v2' of github.com:CherryHQ/cherry-studio into v2 2025-09-16 00:40:48 +08:00
fullex
c242abd81a feat: refactor cache management and update component dependencies
- Updated package.json to version 2.0.0-alpha, reflecting significant changes.
- Refactored cache management by integrating useCache hooks across various components, enhancing state management and performance.
- Replaced useRuntime references with useMinapps in multiple components to streamline minapp state handling.
- Improved type safety in cache schemas and updated related components to utilize new types.
- Removed deprecated runtime actions and streamlined the codebase for better maintainability.
2025-09-16 00:40:36 +08:00
MyPrototypeWhat
79c9ed963f feat: update UI package with Storybook integration and Tailwind CSS v4 configuration
- Added Storybook scripts for development and building the UI components.
- Updated package.json to include new dependencies for Storybook and styled-components.
- Revised README to reflect changes in Tailwind CSS configuration, transitioning to v4 and removing the tailwind.config.js file.
- Enhanced the tsdown configuration to mark additional peer dependencies as external.
- Removed outdated Tailwind CSS configuration file to streamline the setup.
2025-09-15 19:26:23 +08:00
fullex
6079961f44 feat: enhance testing framework for CacheService and PreferenceService
- Updated README.md to reflect the expanded testing framework for CacheService, including detailed test modules and scenarios.
- Added CacheService tests for direct API, hooks, advanced features, and stress testing.
- Refactored TestApp to incorporate CacheService tests alongside existing PreferenceService tests, improving organization and accessibility.
- Adjusted component styling to support dark mode and ensure consistent UI across test components.
2025-09-15 17:36:14 +08:00
MyPrototypeWhat
04ef5edea2 feat: update migration status and add new UI components
- Updated migration status documentation to reflect the migration of 43 components, with 193 pending.
- Enhanced the component status table with new entries for MaxContextCount, CollapsibleSearchBar, ImageToolButton, and InfoPopover.
- Added implementations for the new components, improving the UI library's functionality.
- Updated index.ts to export the newly added components for better accessibility.
2025-09-15 16:08:35 +08:00
MyPrototypeWhat
046ed3edef feat: update migration status and add ListItem and EditableNumber components
- Updated migration status documentation to reflect the migration of 38 components, with 198 pending.
- Enhanced the component status table with new entries for ListItem and EditableNumber.
- Added ListItem and EditableNumber components with their respective implementations and styles.
- Updated index.ts to export the newly added components for improved accessibility.
2025-09-15 15:23:03 +08:00
MyPrototypeWhat
6eb9ab30b0 feat: update migration status and add new UI components
- Updated migration status documentation to reflect the migration of 36 components, with 200 pending.
- Enhanced the component status table with new entries for CustomCollapse, EmojiAvatar, ResetIcon, OcrIcon, ToolIcon, WrapIcon, UnWrapIcon, HelpTooltip, Selector, and WarnTooltip.
- Updated index.ts to export the newly added components for improved accessibility.
2025-09-15 15:12:28 +08:00
MyPrototypeWhat
1c27481813 feat: update migration status and add new UI components
- Updated migration status documentation to reflect the migration of 26 components, with 210 pending.
- Enhanced the component status table with detailed descriptions and categorized components.
- Introduced new components: CustomTag, ErrorTag, SuccessTag, WarnTag, CopyIcon, DeleteIcon, EditIcon, and RefreshIcon.
- Updated index.ts to export the newly added components for improved accessibility.
2025-09-15 14:59:52 +08:00
fullex
a6e19f7757 refactor: consolidate CacheService implementation and update references
- Moved CacheService functionality to a new implementation in @data/CacheService, enhancing modularity.
- Updated all references across the codebase to utilize the new cacheService instance.
- Removed the old CacheService files from both main and renderer directories to streamline the codebase.
2025-09-15 14:47:30 +08:00
fullex
6d89f94335 feat: CacheService & useCache Hooks 2025-09-15 14:12:41 +08:00
MyPrototypeWhat
2e07b4ea58 feat: add migration status documentation and new UI components
- Introduced migration status documentation in both English and Chinese to track the progress of the UI component library migration.
- Added new UI components including CopyButton, DividerWithText, EmojiIcon, IndicatorLight, Spinner, TextBadge, and various display and icon components.
- Updated the index.ts file to export the newly added components for easier access.
- Enhanced the directory structure and component classification guidelines for better organization and clarity.
2025-09-15 14:10:49 +08:00
MyPrototypeWhat
bf2f6ddd7f chore: update CODEOWNERS to include new UI package ownership
- Added ownership for the /packages/ui/ directory to @MyPrototypeWhat.
- Ensured consistent ownership assignment across relevant directories.
2025-09-15 12:34:56 +08:00
MyPrototypeWhat
c936bddfe7 feat: add index.ts type definitions for UI components
- Introduced a new TypeScript definition file (index.ts) to support the newly added UI component library.
- This file will facilitate better type checking and autocompletion for developers using the library.
2025-09-15 12:33:47 +08:00
MyPrototypeWhat
d3028f1dd1 feat: add @cherrystudio/ui component library
- Introduced a new UI component library for Cherry Studio, including various components such as buttons, inputs, and layout elements.
- Updated configuration files to include the new library and its dependencies.
- Enhanced the project structure to support modular imports and TypeScript definitions for better development experience.
2025-09-15 12:03:39 +08:00
MyPrototypeWhat
0038280fba refactor: update import paths for styles and navbar position
- Changed the import of navbar position hook from useSettings to useNavbarPosition for better clarity.
- Updated style imports from index.scss to index.css for consistency across components.
2025-09-15 11:45:12 +08:00
fullex
0a94609f78 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-15 00:06:06 +08:00
fullex
f9f8390540 Merge branch 'v2' of github.com:CherryHQ/cherry-studio into v2 2025-09-14 21:01:07 +08:00
fullex
91dd6482ce chore: add CODEOWNERS file to define ownership for specific directories
- Created a CODEOWNERS file to specify ownership for migrations and data directories.
- Assigned ownership to @0xfullex for the specified paths to streamline code review and management.
2025-09-14 21:00:57 +08:00
fullex
016bbff79f Update pr-ci.yml 2025-09-14 18:52:58 +08:00
fullex
32f41391c4 Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 2025-09-14 17:39:42 +08:00
fullex
78a8ebc777 feat(preferences): update user theme settings and add new preferences
- Updated preferences configuration with new user theme options including font family and code font family.
- Added new preferences for chat and export menus.
- Adjusted default preferences to include new settings for user theme.
- Enhanced useUserTheme hook to manage new font family preferences.
2025-09-14 17:05:31 +08:00
fullex
57fd73e51a Merge branch 'main' of github.com:CherryHQ/cherry-studio into wip/data-refactor 2025-09-14 17:05:14 +08:00
fullex
bd448b5108 refactor: remove AbortSignal support from DataApiService and related components
- Eliminated AbortSignal handling from ApiClient interface and DataApiService to streamline request processing.
- Updated IpcAdapter to remove event sender logic for responses, aligning with the new direct IPC approach.
- Adjusted tests to reflect the removal of cancellation capabilities, emphasizing that direct IPC requests cannot be cancelled.
- Cleaned up related code and comments to enhance clarity and maintainability.
2025-09-13 13:50:59 +08:00
fullex
a7d12abd1f feat: add Data API channels and integrate swr for data fetching
- Introduced new IPC channels for Data API requests and responses in IpcChannel.
- Added swr library to package.json for improved data fetching capabilities.
- Updated preload API to include Data API related methods for handling requests and subscriptions.
- Removed deprecated pending_default_values.ts file as part of data refactor.
2025-09-13 00:55:15 +08:00
fullex
9e3618bc17 refactor: update selection preferences and enums for improved consistency
- Removed deprecated selection IPC channels from IpcChannel.
- Replaced string literals with enums for SelectionTriggerMode and SelectionFilterMode in preference management.
- Updated the SelectionService and selectionStore to utilize the new enum types for better type safety and clarity.
- Marked selectionStore as deprecated for future removal after data refactoring.
2025-09-09 12:14:29 +08:00
fullex
8cb270ca86 fix: restore LANG_DETECT_PROMPT import in translate utility and reorder imports in MiniWindowApp 2025-09-06 18:44:26 +08:00
fullex
d321cd23ef chore: format 2025-09-06 18:32:33 +08:00
fullex
9da3e82c47 refactor: update preference management in AI components
- Replaced instances of useSettings with usePreference for better preference handling across various components.
- Updated function signatures to support async operations where necessary.
- Adjusted imports to utilize shared configuration for prompts, enhancing consistency in prompt management.
- Improved error handling and logging in AI-related functionalities.
2025-09-06 18:21:11 +08:00
fullex
2931e558b3 Merge branch 'main' of github.com:CherryHQ/cherry-studio into wip/data-refactor 2025-09-06 18:20:53 +08:00
fullex
9a847dc5a3 refactor: update Minapp components to use preference management
- Replaced useSettings with usePreference in PinnedMinapps and useMinappPopup components for better preference handling.
- Added external dependency for Electron in electron.vite.config.ts and set output format to CommonJS.
2025-09-06 17:23:19 +08:00
fullex
c2a1178dff refactor: update preferences management and enhance PreferenceService documentation
- Updated preferences types in preferences.ts to use PreferenceTypes for better type safety.
- Added new preference keys related to notes features in preferences.ts.
- Enhanced documentation in PreferenceService.ts and usePreference.ts to clarify usage and update strategies.
- Improved caching and subscription mechanisms in PreferenceService for better performance and reliability.
2025-09-04 12:47:22 +08:00
fullex
7f114ade4d Merge branch 'main' of github.com:CherryHQ/cherry-studio into wip/data-refactor 2025-09-03 21:21:38 +08:00
fullex
7b633641d1 Merge branch 'main' of github.com:CherryHQ/cherry-studio into wip/data-refactor 2025-09-03 16:58:15 +08:00
fullex
1dacdc3178 refactor: expand settings state with comprehensive user preferences
- Introduced a detailed SettingsState interface, incorporating various user preferences such as showAssistants, language settings, proxy configurations, and more.
- Updated initialState to reflect the new comprehensive settings structure, ensuring all preferences are initialized correctly.
- Cleaned up commented-out code and organized settings for improved clarity and maintainability.
- Enhanced type safety by integrating new types for various settings, aligning with recent refactoring efforts in preference management.
2025-09-03 16:53:29 +08:00
fullex
566dd14fed refactor: enhance preference management and streamline component integrations
- Updated various components to utilize the usePreference hook, replacing previous useSettings references for improved consistency and maintainability.
- Introduced new preference types for ChatMessageStyle, ChatMessageNavigationMode, and MultiModelMessageStyle to enhance type safety.
- Refactored preference handling in multiple files, ensuring a more streamlined approach to managing user preferences.
- Cleaned up unused code and comments related to previous settings for better clarity and maintainability.
- Updated auto-generated preference mappings to reflect recent changes in preference structure.
2025-09-03 16:48:04 +08:00
fullex
68cd87e069 refactor: update UpgradeChannel handling and improve preference integration
- Commented out the UpgradeChannel enum in constant.ts and moved it to preferenceTypes.ts for better organization.
- Updated various components to utilize the new UpgradeChannel type from preferenceTypes, enhancing type safety and consistency.
- Refactored preference handling across multiple files to streamline the use of the usePreference hook, replacing previous settings references.
- Cleaned up unused code and comments related to previous settings for improved maintainability.
- Updated auto-generated preference mappings to reflect recent changes in preference structure.
2025-09-03 14:31:15 +08:00
fullex
1b57ffeb56 refactor: enhance preference management and update component integrations
- Updated preference handling to utilize the usePreference hook across various components, improving consistency and maintainability.
- Introduced new preference types for ProxyMode and MultiModelFoldDisplayMode to enhance type safety.
- Refactored components to replace useSettings with usePreference, streamlining preference management.
- Cleaned up unused code and comments related to previous settings for better clarity.
- Updated auto-generated preference mappings to reflect recent changes in preference structure.
2025-09-02 22:11:15 +08:00
fullex
5d789ef394 refactor: enhance preference management and update sidebar icon handling
- Updated preferences to include new confirmation settings for message actions, allowing users to customize action confirmations.
- Refactored components to utilize the usePreference hook for improved preference handling, replacing previous useSettings references.
- Introduced new types for AssistantIconType and SidebarIcon to enhance type safety.
- Cleaned up unused code and comments related to previous settings for better maintainability.
- Updated auto-generated preference mappings to reflect recent changes in preference structure.
2025-09-02 17:24:38 +08:00
fullex
820d6a6e96 refactor: update preference keys and enhance preference management
- Updated preference keys from 'app.theme.*' to 'ui.*' for better organization and clarity.
- Introduced new preferences for assistant tab sorting and visibility.
- Refactored components to utilize the updated preference keys, improving consistency across the codebase.
- Cleaned up unused code and comments related to previous settings for maintainability.
- Updated auto-generated preference mappings to reflect the new structure.
2025-09-02 15:37:30 +08:00
fullex
0a67ab4103 refactor: enhance preference management and update mappings
- Updated preferences to utilize the new SendMessageShortcut type for better type safety.
- Refactored components to use the usePreference hook instead of useSettings for improved preference handling.
- Added new preferences for target language and send message shortcut in various components.
- Cleaned up unused code and comments related to settings for better maintainability.
- Updated auto-generated preference mappings to reflect recent changes in preference structure.
2025-09-02 13:24:41 +08:00
fullex
5cc7390bb6 Merge branch 'main' of github.com:CherryHQ/cherry-studio into wip/data-refactor 2025-09-02 11:50:00 +08:00
fullex
2ce4fabc7d refactor: update preference handling and remove unused settings
- Commented out the App_SetDisableHardwareAcceleration IPC channel and related code for hardware acceleration settings.
- Updated preferences to utilize the new WindowStyle type for window style settings.
- Refactored components to use the usePreference hook instead of useSettings for better preference management.
- Cleaned up unused code and comments related to hardware acceleration and window style for improved maintainability.
2025-09-02 11:45:33 +08:00
fullex
7b2570974e refactor: update language handling and remove unused locales
- Commented out the App_SetLanguage IPC channel and related language management code.
- Updated preferences to use LanguageVarious type for language settings.
- Removed the locales utility file and adjusted imports to utilize preferenceService for language management.
- Cleaned up unused code and comments related to language handling for improved maintainability.
2025-09-02 01:39:04 +08:00
fullex
0ef3852029 refactor: update theme handling and preference types
- Removed the App_SetTheme IPC channel and related theme management code.
- Updated imports to use preferenceTypes for theme and selection action items.
- Refactored preference service to preload preferences and adjusted related components.
- Cleaned up unused code and comments related to theme management.
- Enhanced the organization of preference-related types and actions for better maintainability.
2025-09-01 23:49:17 +08:00
fullex
0dce1c57fc Merge branch 'main' of github.com:CherryHQ/cherry-studio into wip/data-refactor 2025-09-01 09:44:12 +08:00
fullex
190ee76cf1 refactor(preload): update action item type to SelectionActionItem
Replaced the ActionItem type with SelectionActionItem in the processAction method for better type safety. Removed unused imports related to ActionItem in ActionTranslate component.
2025-08-28 10:54:12 +08:00
fullex
83fea49ed2 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/data-refactor 2025-08-28 10:52:05 +08:00
fullex
ccc50dbf2b Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/data-refactor 2025-08-19 23:04:35 +08:00
fullex
6b503c4080 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/data-refactor 2025-08-16 21:52:19 +08:00
fullex
40fe381aa5 refactor(preferences): replace empty action items with default values and remove unused hook
- Updated the preferences configuration to use `defaultActionItems` instead of an empty array for `feature.selection.action_items`, enhancing default behavior.
- Removed the `useSelectionAssistant` hook as it was no longer needed, streamlining the codebase.
2025-08-16 21:51:58 +08:00
fullex
65c24a2f4b fix(selection): disable sandbox mode in SelectionService and clean up imports in ActionTranslate component
- Changed sandbox mode from true to false in SelectionService to improve security and functionality.
- Removed unnecessary blank line in entryPoint.tsx for cleaner code.
- Updated ActionTranslate component to use the new SelectionActionItem type for better type safety.
2025-08-16 18:52:46 +08:00
fullex
b15778b16b feat(preferences): enhance selection management with type safety and refactor preferences structure
- Introduced new types for selection management: `SelectionActionItem`, `SelectionFilterMode`, and `SelectionTriggerMode` to improve type safety across the application.
- Updated `PreferencesType` to utilize these new types, ensuring better consistency and clarity in preference definitions.
- Refactored `SelectionService` and related components to adopt the new types, enhancing the handling of selection actions and preferences.
- Cleaned up deprecated types and improved the overall structure of preference management, aligning with recent updates in the preference system.
2025-08-16 08:57:48 +08:00
fullex
087e825086 feat(preferences): implement custom notifier for preference change management
- Introduced `PreferenceNotifier` class to replace `EventEmitter`, enhancing performance and memory efficiency for preference change notifications.
- Refactored `PreferenceService` to utilize the new notifier for managing subscriptions and notifications.
- Updated `SelectionService` to adopt the new subscription model, improving the handling of preference changes and ensuring proper cleanup of listeners.
- Enhanced subscription statistics and debugging capabilities within the notifier.
2025-08-15 19:45:13 +08:00
fullex
3dd2bc1a40 feat(preferences): enhance preference subscription and notification system
- Updated `PreferenceService` to notify change listeners immediately upon fetching uncached values.
- Refactored subscription logic to simplify auto-subscribing to preference keys.
- Modified `usePreference` and `useMultiplePreferences` hooks to improve handling of default values and subscription behavior.
- Enhanced `SelectionAssistantSettings` to include detailed logging of preference states for better debugging.
2025-08-15 18:27:36 +08:00
fullex
9bde833419 feat(preferences): implement optimistic and pessimistic update strategies in PreferenceService
- Introduced `PreferenceUpdateOptions` interface to configure update behavior.
- Enhanced `set` and `setMultiple` methods in `PreferenceService` to support both optimistic and pessimistic update strategies, allowing for immediate UI feedback or database-first updates.
- Updated `usePreference` and `useMultiplePreferences` hooks to accept options for flexible update strategies.
- Improved handling of concurrent updates with request queues and rollback mechanisms for optimistic updates.
- Enhanced documentation in hooks to clarify usage of update strategies.
2025-08-15 16:48:22 +08:00
fullex
e15005d1cf feat(preferences): update preferences structure and enhance shortcut management
- Updated the preferences configuration with new shortcut definitions and types for better management.
- Introduced a method to get and subscribe to preference changes in the PreferenceService, improving reactivity.
- Refactored SelectionService to utilize the new preference management system, enhancing code clarity and maintainability.
- Updated SelectionAssistantSettings to use the new preference hooks for managing selection settings.
- Adjusted the generated preferences file to reflect the latest configuration changes.
2025-08-15 12:54:24 +08:00
fullex
30e6883333 refactor(preferences): consolidate IPC handlers into PreferenceService
- Moved IPC handler logic for preference operations from ipc.ts to PreferenceService.
- Introduced a unified method for registering IPC handlers, improving code organization and maintainability.
- Enhanced preference change notification system with optimized performance and added support for main process listeners.
2025-08-14 18:01:22 +08:00
fullex
99be38c325 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-08-13 13:24:26 +08:00
fullex
df876651b9 feat(preferences): enhance testing framework with real-time UI synchronization and slider controls
This commit updates the dataRefactorTest README to include new features such as real-time UI linkage for theme, language, and zoom preferences, as well as interactive slider controls for various settings. The TestApp component is modified to support dynamic window identification and theme monitoring. Additionally, the PreferenceBasicTests, PreferenceMultipleTests, and PreferenceServiceTests components are enhanced with slider functionality for numerical preferences, improving the testing capabilities for cross-window synchronization and user experience.
2025-08-12 23:42:10 +08:00
fullex
85bdcdc206 refactor(preferences): improve PreferenceService and related hooks with enhanced type safety and listener management
This commit refactors the PreferenceService to improve type safety for preference handling and updates the listener management system. It renames methods for clarity, ensuring that preference changes are properly notified to all relevant listeners. Additionally, the usePreference hook is updated to align with these changes, enhancing the overall consistency and reliability of preference management in the application.
2025-08-12 21:23:02 +08:00
fullex
2860935e5b refactor(preferences): enhance PreferenceService with public access modifiers and improve caching logic
This commit updates the PreferenceService by adding public access modifiers to several methods, improving code clarity and consistency. It also refines the caching logic to eliminate unnecessary type assertions and streamline the handling of preference values. Additionally, minor formatting adjustments are made for better readability across the service and related hooks.
2025-08-12 18:14:39 +08:00
fullex
b219e96544 feat(preferences): integrate PreferenceService and enhance testing capabilities
This commit refactors the PreferenceService to use named exports for better consistency and updates the DbService import accordingly. It introduces a testing mechanism for the PreferenceService by creating test windows to facilitate cross-window preference synchronization testing. Additionally, improvements are made to the usePreference hook for better performance and stability, ensuring efficient preference management in the application.
2025-08-12 13:44:41 +08:00
fullex
c02f93e6b9 feat(preferences): add data path alias and update TypeScript configuration
This commit introduces a new alias '@data' in the Electron Vite configuration for easier access to the data directory. Additionally, the TypeScript configuration is updated to include path mapping for '@data/*', enhancing module resolution. Several test files related to the PreferenceService have been removed, streamlining the test suite and focusing on essential functionality.
2025-08-12 11:35:09 +08:00
fullex
72f32e4b8f feat(preferences): add getAll method and IPC handler for retrieving all preferences
This commit introduces a new IPC channel and handler for fetching all user preferences at once, enhancing the efficiency of preference management. The PreferenceService is updated with a getAll method to retrieve all preferences from the memory cache, and the renderer-side PreferenceService is adjusted to support this new functionality. Additionally, type safety improvements are made across the preference handling code, ensuring better consistency and reducing potential errors.
2025-08-12 01:01:22 +08:00
fullex
a81f13848c refactor(preferences): enhance preference handling with type safety and improved IPC methods
This commit refines the preference management system by introducing type safety for preference keys and values, ensuring better consistency across the application. It updates IPC handlers for getting and setting preferences to utilize the new types, improving code clarity and reducing potential errors. Additionally, the PreferenceService is adjusted to align with these changes, enhancing the overall robustness of preference operations.
2025-08-11 22:58:30 +08:00
fullex
81538d5709 feat(preferences): add IPC channels and handlers for preference management
This commit introduces new IPC channels for getting, setting, and subscribing to preferences, enhancing the application's ability to manage user preferences. It also updates the preferences interface to use a consistent naming convention and refactors the preference seeding and migration processes to align with these changes. Additionally, the PrefService has been removed as it is no longer needed.
2025-08-11 20:40:50 +08:00
fullex
54449e7130 feat(migration): implement transaction handling and batch migration for preferences
This commit introduces a new transaction method in DbService to manage database operations with automatic rollback on error and commit on success. It enhances the PreferencesMigrator to support batch migration operations, improving the efficiency of migrating preferences from multiple sources. Additionally, the migration UI is updated to reflect progress during backup and migration stages, providing clearer feedback to users.
2025-08-10 23:25:28 +08:00
fullex
c217a0bf02 feat(migration): add Redux data handling to migration process
This commit introduces new IPC channels for sending and retrieving Redux persist data during the migration process. It enhances the DataRefactorMigrateService with methods to cache and manage Redux data, ensuring a smoother migration experience. Additionally, the MigrateApp component is updated to extract Redux data from localStorage and send it to the main process, improving the overall migration flow and user experience.
2025-08-10 20:58:43 +08:00
fullex
39257f64b1 feat(migration): enhance migration UI and refactor layout
This commit updates the migration window dimensions for improved usability, sets explicit entry points for preload scripts, and enhances the overall layout of the migration interface. It introduces new styles for buttons and alerts, improves the structure of the migration steps, and refines the user experience with clearer feedback and options during the migration process.
2025-08-10 13:51:08 +08:00
fullex
06dab978f7 feat(migration): update migration UI and enhance user experience
This commit modifies the migration window dimensions and properties for improved usability, allowing for resizing and maximizing. It also introduces new icons for different migration stages, updates localized messages for clarity, and enhances the overall layout of the migration interface, including adjustments to the alert messages and step indicators for better user guidance during the migration process.
2025-08-10 02:09:52 +08:00
fullex
c3f61533f7 feat(migration): enhance migration flow with new stages and error handling
This commit introduces additional stages to the migration process, including 'backup_required', 'backup_progress', and 'backup_confirmed', improving user guidance during data migration. It also adds new IPC channels for proceeding to backup and retrying migration, along with enhanced error handling and logging throughout the migration flow. The user interface has been updated to reflect these changes, providing clearer feedback and options during the migration process.
2025-08-10 01:40:03 +08:00
fullex
8715eb1f41 feat(migration): add new IPC channels and enhance migration flow
This commit introduces new IPC channels for starting the migration flow, restarting the application, and closing the migration window. It also updates the migration logic to improve user interaction and error handling during the migration process. Additionally, the migration interface has been enhanced with a step indicator and localized messages for better user experience.
2025-08-10 00:19:09 +08:00
fullex
92eb5aed7f refactor(migration): rename data migration files and update migration logic
This commit renames the data migration files for clarity, changing `dataMigrate.html` to `dataRefactorMigrate.html` and updating the corresponding service imports. It also enhances the migration logic by implementing a new `app_state` table structure and removing deprecated migration files, streamlining the overall migration process.
2025-08-09 22:37:20 +08:00
fullex
ff965402cd refactor(migration): streamline migration process and enhance IPC handling
This commit refines the data migration process by ensuring that migration checks occur before window creation and improves the logging of migration events. It also consolidates IPC handlers specific to migration within the MigrateService, allowing for better management of migration-related tasks. Additionally, the HTML for the data migration interface has been updated to enhance security policies.
2025-08-09 20:56:21 +08:00
fullex
973f26f9dd feat(migration): implement data migration service and update database architecture
This commit introduces a new data migration service with various IPC channels for migration tasks, including checking if migration is needed, starting the migration, and tracking progress. Additionally, the database architecture section has been added to the documentation, detailing the use of SQLite with Drizzle ORM, migration standards, and JSON field handling. Legacy migration files for ElectronStore and Redux have been removed as they are now deprecated.
2025-08-09 20:19:41 +08:00
fullex
4e3f8a8f76 feat(preferences): auto-generate preferences configuration from classification.json
This commit introduces an auto-generated preferences configuration file, replacing the previous manual definitions. The new structure is based on the latest classification.json and includes comprehensive settings for various application features. The auto-generation process ensures that the preferences are up-to-date and consistent with the defined classifications.
2025-08-09 16:44:35 +08:00
fullex
21e40db086 mv dir to data 2025-08-09 14:30:24 +08:00
fullex
92cd012037 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-08-09 09:44:28 +08:00
fullex
7cd937888e Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-08-06 19:53:07 +08:00
fullex
ec491f5f24 更新 Preferences 接口以使用排序的对象键,并调整默认偏好设置的结构。同时,在 preference.ts 文件中添加了关于 scope 字段的注释,说明其未来用途。此更改旨在提高代码的可读性和一致性。 2025-08-02 00:22:22 +08:00
fullex
c0efb46c2b format 2025-07-28 22:40:19 +08:00
fullex
aa47fc3ed7 更新 yarn.lock 文件,添加了多个新依赖项,包括 @drizzle-team/brocli、@esbuild-kit/core-utils、@esbuild-kit/esm-loader 及其相关版本,同时更新了 esbuild 和 esbuild-register 的版本,确保依赖项的兼容性和稳定性。 2025-07-26 21:46:44 +08:00
fullex
c3c9f9b3f2 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-07-26 21:46:02 +08:00
fullex
d486b56595 chore: update dependencies in package.json and yarn.lock 2025-07-03 12:21:31 +08:00
fullex
4bb5ff8086 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-07-03 12:13:49 +08:00
fullex
a748162e67 chore: update yarn.lock and refactor database schema
- Added `get-tsconfig` dependency version 4.10.1 to yarn.lock.
- Updated schema path in sqlite-drizzle.config.ts from './src/main/db/schema/*' to './src/main/db/schemas/*'.
- Removed unused files: columnHelpers.ts, preference.ts, seed/index.ts, and seed/preferenceSeed.ts to clean up the codebase.
2025-05-27 12:09:08 +08:00
fullex
610e7481b3 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-05-26 22:52:23 +08:00
fullex
9105e0f5c1 db init 2025-05-26 08:30:22 +08:00
fullex
a248517520 Merge branch 'main' of https://github.com/CherryHQ/cherry-studio into wip/refactor/databases 2025-05-23 11:01:19 +08:00
fullex
d31f35b16d feat: update dependencies in package.json and yarn.lock
- Added better-sqlite3, drizzle-orm, drizzle-kit, and their respective type definitions.
- Updated various esbuild-related packages to their latest versions.
- Enhanced package management for improved compatibility and performance.
2025-05-20 12:40:17 +08:00
863 changed files with 49114 additions and 7754 deletions

8
.github/CODEOWNERS vendored
View File

@@ -3,4 +3,12 @@
/src/main/services/ConfigManager.ts @0xfullex
/packages/shared/IpcChannel.ts @0xfullex
/src/main/ipc.ts @0xfullex
/migrations/ @0xfullex
/packages/shared/data/ @0xfullex
/src/main/data/ @0xfullex
/src/renderer/src/data/ @0xfullex
/packages/ui/ @MyPrototypeWhat
/app-upgrade-config.json @kangfenmao

View File

@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
env:
PRCI: true
if: github.event.pull_request.draft == false
if: github.event.pull_request.draft == false || github.head_ref == 'v2'
steps:
- name: Check out Git repository

View File

@@ -26,7 +26,7 @@
"env": {
"node": true
},
"files": ["src/main/**", "resources/scripts/**", "scripts/**", "playwright.config.ts", "electron.vite.config.ts"]
"files": ["src/main/**", "resources/scripts/**", "scripts/**", "playwright.config.ts", "electron.vite.config.ts", "packages/ui/scripts/**"]
},
{
"env": {
@@ -35,7 +35,8 @@
"files": [
"src/renderer/**/*.{ts,tsx}",
"packages/aiCore/**",
"packages/extension-table-plus/**"
"packages/extension-table-plus/**",
"packages/ui/**"
]
},
{

View File

@@ -31,7 +31,8 @@
},
"editor.formatOnSave": true,
"files.associations": {
"*.css": "tailwindcss"
"*.css": "tailwindcss",
".oxlintrc.json": "jsonc"
},
"files.eol": "\n",
// "i18n-ally.displayLanguage": "zh-cn", // 界面显示语言
@@ -50,6 +51,9 @@
},
"tailwindCSS.classAttributes": [
"className",
"classNames",
"classNames"
],
"tailwindCSS.experimental.classRegex": [
["cva\\(([^;]*)[\\);]", "[`'\"`]([^'\"`;]*)[`'\"`]"]
]
}

113
CLAUDE.md
View File

@@ -7,6 +7,7 @@ This file provides guidance to AI coding assistants when working with code in th
- **Keep it clear**: Write code that is easy to read, maintain, and explain.
- **Match the house style**: Reuse existing patterns, naming, and conventions.
- **Search smart**: Prefer `ast-grep` for semantic queries; fall back to `rg`/`grep` when needed.
- **Build with Tailwind CSS & Shadcn UI**: Use components from `@packages/ui` (Shadcn UI + Tailwind CSS) for every new UI component; never add `antd` or `styled-components`.
- **Log centrally**: Route all logging through `loggerService` with the right context—no `console.log`.
- **Research via subagent**: Lean on `subagent` for external docs, APIs, news, and references.
- **Always propose before executing**: Before making any changes, clearly explain your planned approach and wait for explicit user approval to ensure alignment and prevent unwanted modifications.
@@ -34,13 +35,113 @@ This file provides guidance to AI coding assistants when working with code in th
- **Renderer Process** (`src/renderer/`): React UI with Redux state management
- **Preload Scripts** (`src/preload/`): Secure IPC bridge
### Key Components
- **AI Core** (`src/renderer/src/aiCore/`): Middleware pipeline for multiple AI providers.
- **Services** (`src/main/services/`): MCPService, KnowledgeService, WindowService, etc.
- **Build System**: Electron-Vite with experimental rolldown-vite, yarn workspaces.
- **State Management**: Redux Toolkit (`src/renderer/src/store/`) for predictable state.
### Key Architectural Components
#### Main Process Services (`src/main/services/`)
- **MCPService**: Model Context Protocol server management
- **KnowledgeService**: Document processing and knowledge base management
- **FileStorage/S3Storage/WebDav**: Multiple storage backends
- **WindowService**: Multi-window management (main, mini, selection windows)
- **ProxyManager**: Network proxy handling
- **SearchService**: Full-text search capabilities
#### AI Core (`src/renderer/src/aiCore/`)
- **Middleware System**: Composable pipeline for AI request processing
- **Client Factory**: Supports multiple AI providers (OpenAI, Anthropic, Gemini, etc.)
- **Stream Processing**: Real-time response handling
#### Data Management
- **Cache System**: Three-layer caching (memory/shared/persist) with React hooks integration
- **Preferences**: Type-safe configuration management with multi-window synchronization
- **User Data**: SQLite-based storage with Drizzle ORM for business data
#### Knowledge Management
- **Embeddings**: Vector search with multiple providers (OpenAI, Voyage, etc.)
- **OCR**: Document text extraction (system OCR, Doc2x, Mineru)
- **Preprocessing**: Document preparation pipeline
- **Loaders**: Support for various file formats (PDF, DOCX, EPUB, etc.)
### Build System
- **Electron-Vite**: Development and build tooling (v4.0.0)
- **Rolldown-Vite**: Using experimental rolldown-vite instead of standard vite
- **Workspaces**: Monorepo structure with `packages/` directory
- **Multiple Entry Points**: Main app, mini window, selection toolbar
- **Styled Components**: CSS-in-JS styling with SWC optimization
### Testing Strategy
- **Vitest**: Unit and integration testing
- **Playwright**: End-to-end testing
- **Component Testing**: React Testing Library
- **Coverage**: Available via `yarn test:coverage`
### Key Patterns
- **IPC Communication**: Secure main-renderer communication via preload scripts
- **Service Layer**: Clear separation between UI and business logic
- **Plugin Architecture**: Extensible via MCP servers and middleware
- **Multi-language Support**: i18n with dynamic loading
- **Theme System**: Light/dark themes with custom CSS variables
### UI Design
The project is in the process of migrating from antd & styled-components to Tailwind CSS and Shadcn UI. Please use components from `@packages/ui` to build UI components. The use of antd and styled-components is prohibited.
UI Library: `@packages/ui`
### Database Architecture
- **Database**: SQLite (`cherrystudio.sqlite`) + libsql driver
- **ORM**: Drizzle ORM with comprehensive migration system
- **Schemas**: Located in `src/main/data/db/schemas/` directory
#### Database Standards
- **Table Naming**: Use singular form with snake_case (e.g., `topic`, `message`, `app_state`)
- **Schema Exports**: Export using `xxxTable` pattern (e.g., `topicTable`, `appStateTable`)
- **Field Definition**: Drizzle auto-infers field names, no need to add default field names
- **JSON Fields**: For JSON support, add `{ mode: 'json' }`, refer to `preference.ts` table definition
- **JSON Serialization**: For JSON fields, no need to manually serialize/deserialize when reading/writing to database, Drizzle handles this automatically
- **Timestamps**: Use existing `crudTimestamps` utility
- **Migrations**: Generate via `yarn run migrations:generate`
## Data Access Patterns
The application uses three distinct data management systems. Choose the appropriate system based on data characteristics:
### Cache System
- **Purpose**: Temporary data that can be regenerated
- **Lifecycle**: Component-level (memory), window-level (shared), or persistent (survives restart)
- **Use Cases**: API response caching, computed results, temporary UI state
- **APIs**: `useCache`, `useSharedCache`, `usePersistCache` hooks, or `cacheService`
### Preference System
- **Purpose**: User configuration and application settings
- **Lifecycle**: Permanent until user changes
- **Use Cases**: Theme, language, editor settings, user preferences
- **APIs**: `usePreference`, `usePreferences` hooks, or `preferenceService`
### User Data API
- **Purpose**: Core business data (conversations, files, notes, etc.)
- **Lifecycle**: Permanent business records
- **Use Cases**: Topics, messages, files, knowledge base, user-generated content
- **APIs**: `useDataApi` hook or `dataApiService` for direct calls
### Selection Guidelines
- **Use Cache** for data that can be lost without impact (computed values, API responses)
- **Use Preferences** for user settings that affect app behavior (UI configuration, feature flags)
- **Use User Data API** for irreplaceable business data (conversations, documents, user content)
## Logging Standards
### Usage
### Logging
```typescript
import { loggerService } from '@logger'
const logger = loggerService.withContext('moduleName')

View File

@@ -42,6 +42,7 @@
"!.github/**",
"!.husky/**",
"!.vscode/**",
"!.claude/**",
"!*.yaml",
"!*.yml",
"!*.mjs",

View File

@@ -66,9 +66,10 @@ asarUnpack:
- resources/**
- "**/*.{metal,exp,lib}"
- "node_modules/@img/sharp-libvips-*/**"
# copy from node_modules/claude-code-plugins/plugins to resources/data/claude-code-pluginso
extraResources:
- from: "migrations/sqlite-drizzle"
to: "migrations/sqlite-drizzle"
# copy from node_modules/claude-code-plugins/plugins to resources/data/claude-code-pluginso
- from: "./node_modules/claude-code-plugins/plugins/"
to: "claude-code-plugins"

View File

@@ -22,6 +22,7 @@ export default defineConfig({
alias: {
'@main': resolve('src/main'),
'@types': resolve('src/renderer/src/types'),
'@data': resolve('src/main/data'),
'@shared': resolve('packages/shared'),
'@logger': resolve('src/main/services/LoggerService'),
'@mcp-trace/trace-core': resolve('packages/mcp-trace/trace-core'),
@@ -61,7 +62,20 @@ export default defineConfig({
}
},
build: {
sourcemap: isDev
sourcemap: isDev,
rollupOptions: {
// Unlike renderer which auto-discovers entries from HTML files,
// preload requires explicit entry point configuration for multiple scripts
input: {
index: resolve(__dirname, 'src/preload/index.ts'),
simplest: resolve(__dirname, 'src/preload/simplest.ts') // Minimal preload
},
external: ['electron'],
output: {
entryFileNames: '[name].js',
format: 'cjs'
}
}
}
},
renderer: {
@@ -90,13 +104,16 @@ export default defineConfig({
'@shared': resolve('packages/shared'),
'@types': resolve('src/renderer/src/types'),
'@logger': resolve('src/renderer/src/services/LoggerService'),
'@data': resolve('src/renderer/src/data'),
'@mcp-trace/trace-core': resolve('packages/mcp-trace/trace-core'),
'@mcp-trace/trace-web': resolve('packages/mcp-trace/trace-web'),
'@cherrystudio/ai-core/provider': resolve('packages/aiCore/src/core/providers'),
'@cherrystudio/ai-core/built-in/plugins': resolve('packages/aiCore/src/core/plugins/built-in'),
'@cherrystudio/ai-core': resolve('packages/aiCore/src'),
'@cherrystudio/extension-table-plus': resolve('packages/extension-table-plus/src'),
'@cherrystudio/ai-sdk-provider': resolve('packages/ai-sdk-provider/src')
'@cherrystudio/ai-sdk-provider': resolve('packages/ai-sdk-provider/src'),
'@cherrystudio/ui/icons': resolve('packages/ui/src/components/icons'),
'@cherrystudio/ui': resolve('packages/ui/src')
}
},
optimizeDeps: {
@@ -116,7 +133,8 @@ export default defineConfig({
miniWindow: resolve(__dirname, 'src/renderer/miniWindow.html'),
selectionToolbar: resolve(__dirname, 'src/renderer/selectionToolbar.html'),
selectionAction: resolve(__dirname, 'src/renderer/selectionAction.html'),
traceWindow: resolve(__dirname, 'src/renderer/traceWindow.html')
traceWindow: resolve(__dirname, 'src/renderer/traceWindow.html'),
migrationV2: resolve(__dirname, 'src/renderer/migrationV2.html')
},
onwarn(warning, warn) {
if (warning.code === 'COMMONJS_VARIABLE_IN_ESM') return

View File

@@ -72,8 +72,9 @@ export default defineConfig([
...oxlint.configs['flat/eslint'],
...oxlint.configs['flat/typescript'],
...oxlint.configs['flat/unicorn'],
// Custom rules should be after oxlint to overwrite
// LoggerService Custom Rules - only apply to src directory
{
// LoggerService Custom Rules - only apply to src directory
files: ['src/**/*.{ts,tsx,js,jsx}'],
ignores: ['src/**/__tests__/**', 'src/**/__mocks__/**', 'src/**/*.test.*', 'src/preload/**'],
rules: {
@@ -87,6 +88,7 @@ export default defineConfig([
]
}
},
// i18n
{
files: ['**/*.{ts,tsx,js,jsx}'],
languageOptions: {
@@ -134,4 +136,25 @@ export default defineConfig([
'i18n/no-template-in-t': 'warn'
}
},
// ui migration
{
// Component Rules - prevent importing antd components when migration completed
files: ['**/*.{ts,tsx,js,jsx}'],
ignores: [],
rules: {
// 'no-restricted-imports': [
// 'error',
// {
// paths: [
// {
// name: 'antd',
// importNames: ['Flex', 'Switch', 'message', 'Button', 'Tooltip'],
// message:
// '❌ Do not import this component from antd. Use our custom components instead: import { ... } from "@cherrystudio/ui"'
// }
// ]
// }
// ]
}
},
])

6
migrations/README.md Normal file
View File

@@ -0,0 +1,6 @@
**THIS DIRECTORY IS NOT FOR RUNTIME USE**
- Using `libsql` as the `sqlite3` driver, and `drizzle` as the ORM and database migration tool
- `migrations/sqlite-drizzle` contains auto-generated migration data. Please **DO NOT** modify it.
- If table structure changes, we should run migrations.
- To generate migrations, use the command `yarn run migrations:generate`

View File

@@ -0,0 +1,7 @@
import { defineConfig } from 'drizzle-kit'
export default defineConfig({
out: './migrations/sqlite-drizzle',
schema: './src/main/data/db/schemas/*',
dialect: 'sqlite',
casing: 'snake_case'
})

View File

@@ -0,0 +1,17 @@
CREATE TABLE `app_state` (
`key` text PRIMARY KEY NOT NULL,
`value` text NOT NULL,
`description` text,
`created_at` integer,
`updated_at` integer
);
--> statement-breakpoint
CREATE TABLE `preference` (
`scope` text NOT NULL,
`key` text NOT NULL,
`value` text,
`created_at` integer,
`updated_at` integer
);
--> statement-breakpoint
CREATE INDEX `scope_name_idx` ON `preference` (`scope`,`key`);

View File

@@ -0,0 +1,114 @@
{
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
},
"dialect": "sqlite",
"enums": {},
"id": "de8009d7-95b9-4f99-99fa-4b8795708f21",
"internal": {
"indexes": {}
},
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"app_state": {
"checkConstraints": {},
"columns": {
"created_at": {
"autoincrement": false,
"name": "created_at",
"notNull": false,
"primaryKey": false,
"type": "integer"
},
"description": {
"autoincrement": false,
"name": "description",
"notNull": false,
"primaryKey": false,
"type": "text"
},
"key": {
"autoincrement": false,
"name": "key",
"notNull": true,
"primaryKey": true,
"type": "text"
},
"updated_at": {
"autoincrement": false,
"name": "updated_at",
"notNull": false,
"primaryKey": false,
"type": "integer"
},
"value": {
"autoincrement": false,
"name": "value",
"notNull": true,
"primaryKey": false,
"type": "text"
}
},
"compositePrimaryKeys": {},
"foreignKeys": {},
"indexes": {},
"name": "app_state",
"uniqueConstraints": {}
},
"preference": {
"checkConstraints": {},
"columns": {
"created_at": {
"autoincrement": false,
"name": "created_at",
"notNull": false,
"primaryKey": false,
"type": "integer"
},
"key": {
"autoincrement": false,
"name": "key",
"notNull": true,
"primaryKey": false,
"type": "text"
},
"scope": {
"autoincrement": false,
"name": "scope",
"notNull": true,
"primaryKey": false,
"type": "text"
},
"updated_at": {
"autoincrement": false,
"name": "updated_at",
"notNull": false,
"primaryKey": false,
"type": "integer"
},
"value": {
"autoincrement": false,
"name": "value",
"notNull": false,
"primaryKey": false,
"type": "text"
}
},
"compositePrimaryKeys": {},
"foreignKeys": {},
"indexes": {
"scope_name_idx": {
"columns": ["scope", "key"],
"isUnique": false,
"name": "scope_name_idx"
}
},
"name": "preference",
"uniqueConstraints": {}
}
},
"version": "6",
"views": {}
}

View File

@@ -0,0 +1,13 @@
{
"dialect": "sqlite",
"entries": [
{
"breakpoints": true,
"idx": 0,
"tag": "0000_solid_lord_hawal",
"version": "6",
"when": 1754745234572
}
],
"version": "7"
}

View File

@@ -1,6 +1,6 @@
{
"name": "CherryStudio",
"version": "1.7.0-rc.2",
"version": "2.0.0-alpha",
"private": true,
"description": "A powerful AI assistant for producer.",
"main": "./out/main/index.js",
@@ -50,9 +50,10 @@
"generate:icons": "electron-icon-builder --input=./build/logo.png --output=build",
"analyze:renderer": "VISUALIZER_RENDERER=true yarn build",
"analyze:main": "VISUALIZER_MAIN=true yarn build",
"typecheck": "concurrently -n \"node,web\" -c \"cyan,magenta\" \"npm run typecheck:node\" \"npm run typecheck:web\"",
"typecheck": "concurrently -n \"node,web,ui\" -c \"cyan,magenta,green\" \"npm run typecheck:node\" \"npm run typecheck:web\" \"npm run typecheck:ui\"",
"typecheck:node": "tsgo --noEmit -p tsconfig.node.json --composite false",
"typecheck:web": "tsgo --noEmit -p tsconfig.web.json --composite false",
"typecheck:ui": "cd packages/ui && npm run type-check",
"check:i18n": "dotenv -e .env -- tsx scripts/check-i18n.ts",
"sync:i18n": "dotenv -e .env -- tsx scripts/sync-i18n.ts",
"update:i18n": "dotenv -e .env -- tsx scripts/update-i18n.ts",
@@ -69,11 +70,13 @@
"test:e2e": "yarn playwright test",
"test:lint": "oxlint --deny-warnings && eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --cache",
"test:scripts": "vitest scripts",
"lint": "oxlint --fix && eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --cache && yarn typecheck && yarn check:i18n && yarn format:check",
"lint": "oxlint --fix && eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --cache && biome lint --write && biome format --write && yarn typecheck && yarn check:i18n && yarn format:check",
"lint:ox": "oxlint --fix && biome lint --write && biome format --write",
"format": "biome format --write && biome lint --write",
"format:check": "biome format && biome lint",
"prepare": "git config blame.ignoreRevsFile .git-blame-ignore-revs && husky",
"claude": "dotenv -e .env -- claude",
"migrations:generate": "drizzle-kit generate --config ./migrations/sqlite-drizzle.config.ts",
"release:aicore:alpha": "yarn workspace @cherrystudio/ai-core version prerelease --preid alpha --immediate && yarn workspace @cherrystudio/ai-core build && yarn workspace @cherrystudio/ai-core npm publish --tag alpha --access public",
"release:aicore:beta": "yarn workspace @cherrystudio/ai-core version prerelease --preid beta --immediate && yarn workspace @cherrystudio/ai-core build && yarn workspace @cherrystudio/ai-core npm publish --tag beta --access public",
"release:aicore": "yarn workspace @cherrystudio/ai-core version patch --immediate && yarn workspace @cherrystudio/ai-core build && yarn workspace @cherrystudio/ai-core npm publish --access public",
@@ -100,6 +103,7 @@
"selection-hook": "^1.0.12",
"sharp": "^0.34.3",
"socket.io": "^4.8.1",
"stream-json": "^1.9.1",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.1",
"tesseract.js": "patch:tesseract.js@npm%3A6.0.1#~/.yarn/patches/tesseract.js-npm-6.0.1-2562a7e46d.patch",
@@ -142,6 +146,7 @@
"@cherrystudio/embedjs-openai": "^0.1.31",
"@cherrystudio/extension-table-plus": "workspace:^",
"@cherrystudio/openai": "^6.9.0",
"@cherrystudio/ui": "workspace:*",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/modifiers": "^9.0.0",
"@dnd-kit/sortable": "^10.0.0",
@@ -156,7 +161,6 @@
"@eslint/js": "^9.22.0",
"@google/genai": "patch:@google/genai@npm%3A1.0.1#~/.yarn/patches/@google-genai-npm-1.0.1-e26f0f9af7.patch",
"@hello-pangea/dnd": "^18.0.1",
"@kangfenmao/keyv-storage": "^0.1.0",
"@langchain/community": "^1.0.0",
"@langchain/core": "patch:@langchain/core@npm%3A1.0.2#~/.yarn/patches/@langchain-core-npm-1.0.2-183ef83fe4.patch",
"@langchain/openai": "patch:@langchain/openai@npm%3A1.0.0#~/.yarn/patches/@langchain-openai-npm-1.0.0-474d0ad9d4.patch",
@@ -222,6 +226,7 @@
"@types/react-infinite-scroll-component": "^5.0.0",
"@types/react-transition-group": "^4.4.12",
"@types/react-window": "^1",
"@types/stream-json": "^1",
"@types/swagger-jsdoc": "^6",
"@types/swagger-ui-express": "^4.1.8",
"@types/tinycolor2": "^1",

View File

@@ -1,8 +1,7 @@
import { anthropic } from '@ai-sdk/anthropic'
import { google } from '@ai-sdk/google'
import { openai } from '@ai-sdk/openai'
import type { InferToolInput, InferToolOutput } from 'ai'
import { type Tool } from 'ai'
import type { InferToolInput, InferToolOutput, Tool } from 'ai'
import { createOpenRouterOptions, createXaiOptions, mergeProviderOptions } from '../../../options'
import type { ProviderOptionsMap } from '../../../options/types'

View File

@@ -2,7 +2,7 @@ export enum IpcChannel {
App_GetCacheSize = 'app:get-cache-size',
App_ClearCache = 'app:clear-cache',
App_SetLaunchOnBoot = 'app:set-launch-on-boot',
App_SetLanguage = 'app:set-language',
// App_SetLanguage = 'app:set-language',
App_SetEnableSpellCheck = 'app:set-enable-spell-check',
App_SetSpellCheckLanguages = 'app:set-spell-check-languages',
App_CheckForUpdate = 'app:check-for-update',
@@ -14,7 +14,7 @@ export enum IpcChannel {
App_SetLaunchToTray = 'app:set-launch-to-tray',
App_SetTray = 'app:set-tray',
App_SetTrayOnClose = 'app:set-tray-on-close',
App_SetTheme = 'app:set-theme',
// App_SetTheme = 'app:set-theme',
App_SetAutoUpdate = 'app:set-auto-update',
App_SetTestPlan = 'app:set-test-plan',
App_SetTestChannel = 'app:set-test-channel',
@@ -47,7 +47,7 @@ export enum IpcChannel {
App_MacRequestProcessTrust = 'app:mac-request-process-trust',
App_QuoteToMain = 'app:quote-to-main',
App_SetDisableHardwareAcceleration = 'app:set-disable-hardware-acceleration',
// App_SetDisableHardwareAcceleration = 'app:set-disable-hardware-acceleration',
Notification_Send = 'notification:send',
Notification_OnClick = 'notification:on-click',
@@ -227,6 +227,22 @@ export enum IpcChannel {
Backup_DeleteS3File = 'backup:deleteS3File',
Backup_CheckS3Connection = 'backup:checkS3Connection',
// data migration
DataMigrate_CheckNeeded = 'data-migrate:check-needed',
DataMigrate_GetProgress = 'data-migrate:get-progress',
DataMigrate_Cancel = 'data-migrate:cancel',
DataMigrate_RequireBackup = 'data-migrate:require-backup',
DataMigrate_BackupCompleted = 'data-migrate:backup-completed',
DataMigrate_ShowBackupDialog = 'data-migrate:show-backup-dialog',
DataMigrate_StartFlow = 'data-migrate:start-flow',
DataMigrate_ProceedToBackup = 'data-migrate:proceed-to-backup',
DataMigrate_StartMigration = 'data-migrate:start-migration',
DataMigrate_RetryMigration = 'data-migrate:retry-migration',
DataMigrate_RestartApp = 'data-migrate:restart-app',
DataMigrate_CloseWindow = 'data-migrate:close-window',
DataMigrate_SendReduxData = 'data-migrate:send-redux-data',
DataMigrate_GetReduxData = 'data-migrate:get-redux-data',
// zip
Zip_Compress = 'zip:compress',
Zip_Decompress = 'zip:decompress',
@@ -242,7 +258,8 @@ export enum IpcChannel {
// events
BackupProgress = 'backup-progress',
ThemeUpdated = 'theme:updated',
DataMigrateProgress = 'data-migrate-progress',
NativeThemeUpdated = 'native-theme:updated',
RestoreProgress = 'restore-progress',
UpdateError = 'update-error',
UpdateAvailable = 'update-available',
@@ -281,12 +298,6 @@ export enum IpcChannel {
Selection_ToolbarVisibilityChange = 'selection:toolbar-visibility-change',
Selection_ToolbarDetermineSize = 'selection:toolbar-determine-size',
Selection_WriteToClipboard = 'selection:write-to-clipboard',
Selection_SetEnabled = 'selection:set-enabled',
Selection_SetTriggerMode = 'selection:set-trigger-mode',
Selection_SetFilterMode = 'selection:set-filter-mode',
Selection_SetFilterList = 'selection:set-filter-list',
Selection_SetFollowToolbar = 'selection:set-follow-toolbar',
Selection_SetRemeberWinSize = 'selection:set-remeber-win-size',
Selection_ActionWindowClose = 'selection:action-window-close',
Selection_ActionWindowMinimize = 'selection:action-window-minimize',
Selection_ActionWindowPin = 'selection:action-window-pin',
@@ -305,6 +316,27 @@ export enum IpcChannel {
Memory_DeleteAllMemoriesForUser = 'memory:delete-all-memories-for-user',
Memory_GetUsersList = 'memory:get-users-list',
// Data: Preference
Preference_Get = 'preference:get',
Preference_Set = 'preference:set',
Preference_GetMultiple = 'preference:get-multiple',
Preference_SetMultiple = 'preference:set-multiple',
Preference_GetAll = 'preference:get-all',
Preference_Subscribe = 'preference:subscribe',
Preference_Changed = 'preference:changed',
// Data: Cache
Cache_Sync = 'cache:sync',
Cache_SyncBatch = 'cache:sync-batch',
// Data: API Channels
DataApi_Request = 'data-api:request',
DataApi_Batch = 'data-api:batch',
DataApi_Transaction = 'data-api:transaction',
DataApi_Subscribe = 'data-api:subscribe',
DataApi_Unsubscribe = 'data-api:unsubscribe',
DataApi_Stream = 'data-api:stream',
// TRACE
TRACE_SAVE_DATA = 'trace:saveData',
TRACE_GET_DATA = 'trace:getData',

View File

@@ -202,11 +202,11 @@ export enum UpdateConfigUrl {
GITCODE = 'https://raw.gitcode.com/CherryHQ/cherry-studio/raw/x-files%2Fapp-upgrade-config/app-upgrade-config.json'
}
export enum UpgradeChannel {
LATEST = 'latest', // 最新稳定版本
RC = 'rc', // 公测版本
BETA = 'beta' // 预览版本
}
// export enum UpgradeChannel {
// LATEST = 'latest', // 最新稳定版本
// RC = 'rc', // 公测版本
// BETA = 'beta' // 预览版本
// }
export enum UpdateMirror {
GITHUB = 'github',

View File

@@ -0,0 +1,106 @@
# Cherry Studio Shared Data
This directory contains shared type definitions and schemas for the Cherry Studio data management systems. These files provide type safety and consistency across the entire application.
## 📁 Directory Structure
```
packages/shared/data/
├── api/ # Data API type system
│ ├── index.ts # Barrel exports for clean imports
│ ├── apiSchemas.ts # API endpoint definitions and mappings
│ ├── apiTypes.ts # Core request/response infrastructure types
│ ├── apiModels.ts # Business entity types and DTOs
│ ├── apiPaths.ts # API path definitions and utilities
│ └── errorCodes.ts # Standardized error handling
├── cache/ # Cache system type definitions
│ ├── cacheTypes.ts # Core cache infrastructure types
│ ├── cacheSchemas.ts # Cache key schemas and type mappings
│ └── cacheValueTypes.ts # Cache value type definitions
├── preference/ # Preference system type definitions
│ ├── preferenceTypes.ts # Core preference system types
│ └── preferenceSchemas.ts # Preference schemas and default values
└── README.md # This file
```
## 🏗️ System Overview
This directory provides type definitions for three main data management systems:
### API System (`api/`)
- **Purpose**: Type-safe IPC communication between Main and Renderer processes
- **Features**: RESTful patterns, error handling, business entity definitions
- **Usage**: Ensures type safety for all data API operations
### Cache System (`cache/`)
- **Purpose**: Type definitions for three-layer caching architecture
- **Features**: Memory/shared/persist cache schemas, TTL support, hook integration
- **Usage**: Type-safe caching operations across the application
### Preference System (`preference/`)
- **Purpose**: User configuration and settings management
- **Features**: 158 configuration items, default values, nested key support
- **Usage**: Type-safe preference access and synchronization
## 📋 File Categories
**Framework Infrastructure** - These are TypeScript type definitions that:
- ✅ Exist only at compile time
- ✅ Provide type safety and IntelliSense support
- ✅ Define contracts between application layers
- ✅ Enable static analysis and error detection
## 📖 Usage Examples
### API Types
```typescript
// Import API types
import type { DataRequest, DataResponse, ApiSchemas } from '@shared/data/api'
```
### Cache Types
```typescript
// Import cache types
import type { UseCacheKey, UseSharedCacheKey } from '@shared/data/cache'
```
### Preference Types
```typescript
// Import preference types
import type { PreferenceKeyType, PreferenceDefaultScopeType } from '@shared/data/preference'
```
## 🔧 Development Guidelines
### Adding Cache Types
1. Add cache key to `cache/cacheSchemas.ts`
2. Define value type in `cache/cacheValueTypes.ts`
3. Update type mappings for type safety
### Adding Preference Types
1. Add preference key to `preference/preferenceSchemas.ts`
2. Define default value and type
3. Preference system automatically picks up new keys
### Adding API Types
1. Define business entities in `api/apiModels.ts`
2. Add endpoint definitions to `api/apiSchemas.ts`
3. Export types from `api/index.ts`
### Best Practices
- Use `import type` for type-only imports
- Follow existing naming conventions
- Document complex types with JSDoc
- Maintain type safety across all imports
## 🔗 Related Implementation
### Main Process Services
- `src/main/data/CacheService.ts` - Main process cache management
- `src/main/data/PreferenceService.ts` - Preference management service
- `src/main/data/DataApiService.ts` - Data API coordination service
### Renderer Process Services
- `src/renderer/src/data/CacheService.ts` - Renderer cache service
- `src/renderer/src/data/PreferenceService.ts` - Renderer preference service
- `src/renderer/src/data/DataApiService.ts` - Renderer API client

View File

@@ -0,0 +1,107 @@
/**
* Generic test model definitions
* Contains flexible types for comprehensive API testing
*/
/**
* Generic test item entity - flexible structure for testing various scenarios
*/
export interface TestItem {
/** Unique identifier */
id: string
/** Item title */
title: string
/** Optional description */
description?: string
/** Type category */
type: string
/** Current status */
status: string
/** Priority level */
priority: string
/** Associated tags */
tags: string[]
/** Creation timestamp */
createdAt: string
/** Last update timestamp */
updatedAt: string
/** Additional metadata */
metadata: Record<string, any>
}
/**
* Data Transfer Objects (DTOs) for test operations
*/
/**
* DTO for creating a new test item
*/
export interface CreateTestItemDto {
/** Item title */
title: string
/** Optional description */
description?: string
/** Type category */
type?: string
/** Current status */
status?: string
/** Priority level */
priority?: string
/** Associated tags */
tags?: string[]
/** Additional metadata */
metadata?: Record<string, any>
}
/**
* DTO for updating an existing test item
*/
export interface UpdateTestItemDto {
/** Updated title */
title?: string
/** Updated description */
description?: string
/** Updated type */
type?: string
/** Updated status */
status?: string
/** Updated priority */
priority?: string
/** Updated tags */
tags?: string[]
/** Updated metadata */
metadata?: Record<string, any>
}
/**
* Bulk operation types for batch processing
*/
/**
* Request for bulk operations on multiple items
*/
export interface BulkOperationRequest<TData = any> {
/** Type of bulk operation to perform */
operation: 'create' | 'update' | 'delete' | 'archive' | 'restore'
/** Array of data items to process */
data: TData[]
}
/**
* Response from a bulk operation
*/
export interface BulkOperationResponse {
/** Number of successfully processed items */
successful: number
/** Number of items that failed processing */
failed: number
/** Array of errors that occurred during processing */
errors: Array<{
/** Index of the item that failed */
index: number
/** Error message */
error: string
/** Optional additional error data */
data?: any
}>
}

View File

@@ -0,0 +1,60 @@
import type { ApiSchemas } from './apiSchemas'
/**
* Template literal type utilities for converting parameterized paths to concrete paths
* This enables type-safe API calls with actual paths like '/test/items/123' instead of '/test/items/:id'
*/
/**
* Convert parameterized path templates to concrete path types
* @example '/test/items/:id' -> '/test/items/${string}'
* @example '/topics/:id/messages' -> '/topics/${string}/messages'
*/
export type ResolvedPath<T extends string> = T extends `${infer Prefix}/:${string}/${infer Suffix}`
? `${Prefix}/${string}/${ResolvedPath<Suffix>}`
: T extends `${infer Prefix}/:${string}`
? `${Prefix}/${string}`
: T
/**
* Generate all possible concrete paths from ApiSchemas
* This creates a union type of all valid API paths
*/
export type ConcreteApiPaths = {
[K in keyof ApiSchemas]: ResolvedPath<K & string>
}[keyof ApiSchemas]
/**
* Reverse lookup: from concrete path back to original template path
* Used to determine which ApiSchema entry matches a concrete path
*/
export type MatchApiPath<Path extends string> = {
[K in keyof ApiSchemas]: Path extends ResolvedPath<K & string> ? K : never
}[keyof ApiSchemas]
/**
* Extract query parameters type for a given concrete path
*/
export type QueryParamsForPath<Path extends string> = MatchApiPath<Path> extends keyof ApiSchemas
? ApiSchemas[MatchApiPath<Path>] extends { GET: { query?: infer Q } }
? Q
: Record<string, any>
: Record<string, any>
/**
* Extract request body type for a given concrete path and HTTP method
*/
export type BodyForPath<Path extends string, Method extends string> = MatchApiPath<Path> extends keyof ApiSchemas
? ApiSchemas[MatchApiPath<Path>] extends { [M in Method]: { body: infer B } }
? B
: any
: any
/**
* Extract response type for a given concrete path and HTTP method
*/
export type ResponseForPath<Path extends string, Method extends string> = MatchApiPath<Path> extends keyof ApiSchemas
? ApiSchemas[MatchApiPath<Path>] extends { [M in Method]: { response: infer R } }
? R
: any
: any

View File

@@ -0,0 +1,487 @@
// NOTE: Types are defined inline in the schema for simplicity
// If needed, specific types can be imported from './apiModels'
import type { BodyForPath, ConcreteApiPaths, QueryParamsForPath, ResponseForPath } from './apiPaths'
import type { HttpMethod, PaginatedResponse, PaginationParams } from './apiTypes'
// Re-export for external use
export type { ConcreteApiPaths } from './apiPaths'
/**
* Complete API Schema definitions for Test API
*
* Each path defines the supported HTTP methods with their:
* - Request parameters (params, query, body)
* - Response types
* - Type safety guarantees
*
* This schema serves as the contract between renderer and main processes,
* enabling full TypeScript type checking across IPC boundaries.
*/
export interface ApiSchemas {
/**
* Test items collection endpoint
* @example GET /test/items?page=1&limit=10&search=hello
* @example POST /test/items { "title": "New Test Item" }
*/
'/test/items': {
/** List all test items with optional filtering and pagination */
GET: {
query?: PaginationParams & {
/** Search items by title or description */
search?: string
/** Filter by item type */
type?: string
/** Filter by status */
status?: string
}
response: PaginatedResponse<any>
}
/** Create a new test item */
POST: {
body: {
title: string
description?: string
type?: string
status?: string
priority?: string
tags?: string[]
metadata?: Record<string, any>
}
response: any
}
}
/**
* Individual test item endpoint
* @example GET /test/items/123
* @example PUT /test/items/123 { "title": "Updated Title" }
* @example DELETE /test/items/123
*/
'/test/items/:id': {
/** Get a specific test item by ID */
GET: {
params: { id: string }
response: any
}
/** Update a specific test item */
PUT: {
params: { id: string }
body: {
title?: string
description?: string
type?: string
status?: string
priority?: string
tags?: string[]
metadata?: Record<string, any>
}
response: any
}
/** Delete a specific test item */
DELETE: {
params: { id: string }
response: void
}
}
/**
* Test search endpoint
* @example GET /test/search?query=hello&page=1&limit=20
*/
'/test/search': {
/** Search test items */
GET: {
query: {
/** Search query string */
query: string
/** Page number for pagination */
page?: number
/** Number of results per page */
limit?: number
/** Additional filters */
type?: string
status?: string
}
response: PaginatedResponse<any>
}
}
/**
* Test statistics endpoint
* @example GET /test/stats
*/
'/test/stats': {
/** Get comprehensive test statistics */
GET: {
response: {
/** Total number of items */
total: number
/** Item count grouped by type */
byType: Record<string, number>
/** Item count grouped by status */
byStatus: Record<string, number>
/** Item count grouped by priority */
byPriority: Record<string, number>
/** Recent activity timeline */
recentActivity: Array<{
/** Date of activity */
date: string
/** Number of items on that date */
count: number
}>
}
}
}
/**
* Test bulk operations endpoint
* @example POST /test/bulk { "operation": "create", "data": [...] }
*/
'/test/bulk': {
/** Perform bulk operations on test items */
POST: {
body: {
/** Operation type */
operation: 'create' | 'update' | 'delete'
/** Array of data items to process */
data: any[]
}
response: {
successful: number
failed: number
errors: string[]
}
}
}
/**
* Test error simulation endpoint
* @example POST /test/error { "errorType": "timeout" }
*/
'/test/error': {
/** Simulate various error scenarios for testing */
POST: {
body: {
/** Type of error to simulate */
errorType:
| 'timeout'
| 'network'
| 'server'
| 'notfound'
| 'validation'
| 'unauthorized'
| 'ratelimit'
| 'generic'
}
response: never
}
}
/**
* Test slow response endpoint
* @example POST /test/slow { "delay": 2000 }
*/
'/test/slow': {
/** Test slow response for performance testing */
POST: {
body: {
/** Delay in milliseconds */
delay: number
}
response: {
message: string
delay: number
timestamp: string
}
}
}
/**
* Test data reset endpoint
* @example POST /test/reset
*/
'/test/reset': {
/** Reset all test data to initial state */
POST: {
response: {
message: string
timestamp: string
}
}
}
/**
* Test config endpoint
* @example GET /test/config
* @example PUT /test/config { "setting": "value" }
*/
'/test/config': {
/** Get test configuration */
GET: {
response: Record<string, any>
}
/** Update test configuration */
PUT: {
body: Record<string, any>
response: Record<string, any>
}
}
/**
* Test status endpoint
* @example GET /test/status
*/
'/test/status': {
/** Get system test status */
GET: {
response: {
status: string
timestamp: string
version: string
uptime: number
environment: string
}
}
}
/**
* Test performance endpoint
* @example GET /test/performance
*/
'/test/performance': {
/** Get performance metrics */
GET: {
response: {
requestsPerSecond: number
averageLatency: number
memoryUsage: number
cpuUsage: number
uptime: number
}
}
}
/**
* Batch execution of multiple requests
* @example POST /batch { "requests": [...], "parallel": true }
*/
'/batch': {
/** Execute multiple API requests in a single call */
POST: {
body: {
/** Array of requests to execute */
requests: Array<{
/** HTTP method for the request */
method: HttpMethod
/** API path for the request */
path: string
/** URL parameters */
params?: any
/** Request body */
body?: any
}>
/** Execute requests in parallel vs sequential */
parallel?: boolean
}
response: {
/** Results array matching input order */
results: Array<{
/** HTTP status code */
status: number
/** Response data if successful */
data?: any
/** Error information if failed */
error?: any
}>
/** Batch execution metadata */
metadata: {
/** Total execution duration in ms */
duration: number
/** Number of successful requests */
successCount: number
/** Number of failed requests */
errorCount: number
}
}
}
}
/**
* Atomic transaction of multiple operations
* @example POST /transaction { "operations": [...], "options": { "rollbackOnError": true } }
*/
'/transaction': {
/** Execute multiple operations in a database transaction */
POST: {
body: {
/** Array of operations to execute atomically */
operations: Array<{
/** HTTP method for the operation */
method: HttpMethod
/** API path for the operation */
path: string
/** URL parameters */
params?: any
/** Request body */
body?: any
}>
/** Transaction configuration options */
options?: {
/** Database isolation level */
isolation?: 'read-uncommitted' | 'read-committed' | 'repeatable-read' | 'serializable'
/** Rollback all operations on any error */
rollbackOnError?: boolean
/** Transaction timeout in milliseconds */
timeout?: number
}
}
response: Array<{
/** HTTP status code */
status: number
/** Response data if successful */
data?: any
/** Error information if failed */
error?: any
}>
}
}
}
/**
* Simplified type extraction helpers
*/
export type ApiPaths = keyof ApiSchemas
export type ApiMethods<TPath extends ApiPaths> = keyof ApiSchemas[TPath] & HttpMethod
export type ApiResponse<TPath extends ApiPaths, TMethod extends string> = TPath extends keyof ApiSchemas
? TMethod extends keyof ApiSchemas[TPath]
? ApiSchemas[TPath][TMethod] extends { response: infer R }
? R
: never
: never
: never
export type ApiParams<TPath extends ApiPaths, TMethod extends string> = TPath extends keyof ApiSchemas
? TMethod extends keyof ApiSchemas[TPath]
? ApiSchemas[TPath][TMethod] extends { params: infer P }
? P
: never
: never
: never
export type ApiQuery<TPath extends ApiPaths, TMethod extends string> = TPath extends keyof ApiSchemas
? TMethod extends keyof ApiSchemas[TPath]
? ApiSchemas[TPath][TMethod] extends { query: infer Q }
? Q
: never
: never
: never
export type ApiBody<TPath extends ApiPaths, TMethod extends string> = TPath extends keyof ApiSchemas
? TMethod extends keyof ApiSchemas[TPath]
? ApiSchemas[TPath][TMethod] extends { body: infer B }
? B
: never
: never
: never
/**
* Type-safe API client interface using concrete paths
* Accepts actual paths like '/test/items/123' instead of '/test/items/:id'
* Automatically infers query, body, and response types from ApiSchemas
*/
export interface ApiClient {
get<TPath extends ConcreteApiPaths>(
path: TPath,
options?: {
query?: QueryParamsForPath<TPath>
headers?: Record<string, string>
}
): Promise<ResponseForPath<TPath, 'GET'>>
post<TPath extends ConcreteApiPaths>(
path: TPath,
options: {
body?: BodyForPath<TPath, 'POST'>
query?: Record<string, any>
headers?: Record<string, string>
}
): Promise<ResponseForPath<TPath, 'POST'>>
put<TPath extends ConcreteApiPaths>(
path: TPath,
options: {
body: BodyForPath<TPath, 'PUT'>
query?: Record<string, any>
headers?: Record<string, string>
}
): Promise<ResponseForPath<TPath, 'PUT'>>
delete<TPath extends ConcreteApiPaths>(
path: TPath,
options?: {
query?: Record<string, any>
headers?: Record<string, string>
}
): Promise<ResponseForPath<TPath, 'DELETE'>>
patch<TPath extends ConcreteApiPaths>(
path: TPath,
options: {
body?: BodyForPath<TPath, 'PATCH'>
query?: Record<string, any>
headers?: Record<string, string>
}
): Promise<ResponseForPath<TPath, 'PATCH'>>
}
/**
* Helper types to determine if parameters are required based on schema
*/
type HasRequiredQuery<Path extends ApiPaths, Method extends ApiMethods<Path>> = Path extends keyof ApiSchemas
? Method extends keyof ApiSchemas[Path]
? ApiSchemas[Path][Method] extends { query: any }
? true
: false
: false
: false
type HasRequiredBody<Path extends ApiPaths, Method extends ApiMethods<Path>> = Path extends keyof ApiSchemas
? Method extends keyof ApiSchemas[Path]
? ApiSchemas[Path][Method] extends { body: any }
? true
: false
: false
: false
type HasRequiredParams<Path extends ApiPaths, Method extends ApiMethods<Path>> = Path extends keyof ApiSchemas
? Method extends keyof ApiSchemas[Path]
? ApiSchemas[Path][Method] extends { params: any }
? true
: false
: false
: false
/**
* Handler function for a specific API endpoint
* Provides type-safe parameter extraction based on ApiSchemas
* Parameters are required or optional based on the schema definition
*/
export type ApiHandler<Path extends ApiPaths, Method extends ApiMethods<Path>> = (
params: (HasRequiredParams<Path, Method> extends true
? { params: ApiParams<Path, Method> }
: { params?: ApiParams<Path, Method> }) &
(HasRequiredQuery<Path, Method> extends true
? { query: ApiQuery<Path, Method> }
: { query?: ApiQuery<Path, Method> }) &
(HasRequiredBody<Path, Method> extends true ? { body: ApiBody<Path, Method> } : { body?: ApiBody<Path, Method> })
) => Promise<ApiResponse<Path, Method>>
/**
* Complete API implementation that must match ApiSchemas structure
* TypeScript will error if any endpoint is missing - this ensures exhaustive coverage
*/
export type ApiImplementation = {
[Path in ApiPaths]: {
[Method in ApiMethods<Path>]: ApiHandler<Path, Method>
}
}

View File

@@ -0,0 +1,289 @@
/**
* Core types for the Data API system
* Provides type definitions for request/response handling across renderer-main IPC communication
*/
/**
* Standard HTTP methods supported by the Data API
*/
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'
/**
* Request object structure for Data API calls
*/
export interface DataRequest<T = any> {
/** Unique request identifier for tracking and correlation */
id: string
/** HTTP method for the request */
method: HttpMethod
/** API path (e.g., '/topics', '/topics/123') */
path: string
/** URL parameters for the request */
params?: Record<string, any>
/** Request body data */
body?: T
/** Request headers */
headers?: Record<string, string>
/** Additional metadata for request processing */
metadata?: {
/** Request timestamp */
timestamp: number
/** OpenTelemetry span context for tracing */
spanContext?: any
/** Cache options for this specific request */
cache?: CacheOptions
}
}
/**
* Response object structure for Data API calls
*/
export interface DataResponse<T = any> {
/** Request ID that this response corresponds to */
id: string
/** HTTP status code */
status: number
/** Response data if successful */
data?: T
/** Error information if request failed */
error?: DataApiError
/** Response metadata */
metadata?: {
/** Request processing duration in milliseconds */
duration: number
/** Whether response was served from cache */
cached?: boolean
/** Cache TTL if applicable */
cacheTtl?: number
/** Response timestamp */
timestamp: number
}
}
/**
* Standardized error structure for Data API
*/
export interface DataApiError {
/** Error code for programmatic handling */
code: string
/** Human-readable error message */
message: string
/** HTTP status code */
status: number
/** Additional error details */
details?: any
/** Error stack trace (development mode only) */
stack?: string
}
/**
* Standard error codes for Data API
*/
export enum ErrorCode {
// Client errors (4xx)
BAD_REQUEST = 'BAD_REQUEST',
UNAUTHORIZED = 'UNAUTHORIZED',
FORBIDDEN = 'FORBIDDEN',
NOT_FOUND = 'NOT_FOUND',
METHOD_NOT_ALLOWED = 'METHOD_NOT_ALLOWED',
VALIDATION_ERROR = 'VALIDATION_ERROR',
RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED',
// Server errors (5xx)
INTERNAL_SERVER_ERROR = 'INTERNAL_SERVER_ERROR',
DATABASE_ERROR = 'DATABASE_ERROR',
SERVICE_UNAVAILABLE = 'SERVICE_UNAVAILABLE',
// Custom application errors
MIGRATION_ERROR = 'MIGRATION_ERROR',
PERMISSION_DENIED = 'PERMISSION_DENIED',
RESOURCE_LOCKED = 'RESOURCE_LOCKED',
CONCURRENT_MODIFICATION = 'CONCURRENT_MODIFICATION'
}
/**
* Cache configuration options
*/
export interface CacheOptions {
/** Cache TTL in seconds */
ttl?: number
/** Return stale data while revalidating in background */
staleWhileRevalidate?: boolean
/** Custom cache key override */
cacheKey?: string
/** Operations that should invalidate this cache entry */
invalidateOn?: string[]
/** Whether to bypass cache entirely */
noCache?: boolean
}
/**
* Transaction request wrapper for atomic operations
*/
export interface TransactionRequest {
/** List of operations to execute in transaction */
operations: DataRequest[]
/** Transaction options */
options?: {
/** Database isolation level */
isolation?: 'read-uncommitted' | 'read-committed' | 'repeatable-read' | 'serializable'
/** Whether to rollback entire transaction on any error */
rollbackOnError?: boolean
/** Transaction timeout in milliseconds */
timeout?: number
}
}
/**
* Batch request for multiple operations
*/
export interface BatchRequest {
/** List of requests to execute */
requests: DataRequest[]
/** Whether to execute requests in parallel */
parallel?: boolean
/** Stop on first error */
stopOnError?: boolean
}
/**
* Batch response containing results for all requests
*/
export interface BatchResponse {
/** Individual response for each request */
results: DataResponse[]
/** Overall batch execution metadata */
metadata: {
/** Total execution time */
duration: number
/** Number of successful operations */
successCount: number
/** Number of failed operations */
errorCount: number
}
}
/**
* Pagination parameters for list operations
*/
export interface PaginationParams {
/** Page number (1-based) */
page?: number
/** Items per page */
limit?: number
/** Cursor for cursor-based pagination */
cursor?: string
/** Sort field and direction */
sort?: {
field: string
order: 'asc' | 'desc'
}
}
/**
* Paginated response wrapper
*/
export interface PaginatedResponse<T> {
/** Items for current page */
items: T[]
/** Total number of items */
total: number
/** Current page number */
page: number
/** Total number of pages */
pageCount: number
/** Whether there are more pages */
hasNext: boolean
/** Whether there are previous pages */
hasPrev: boolean
/** Next cursor for cursor-based pagination */
nextCursor?: string
/** Previous cursor for cursor-based pagination */
prevCursor?: string
}
/**
* Subscription options for real-time data updates
*/
export interface SubscriptionOptions {
/** Path pattern to subscribe to */
path: string
/** Filters to apply to subscription */
filters?: Record<string, any>
/** Whether to receive initial data */
includeInitial?: boolean
/** Custom subscription metadata */
metadata?: Record<string, any>
}
/**
* Subscription callback function
*/
export type SubscriptionCallback<T = any> = (data: T, event: SubscriptionEvent) => void
/**
* Subscription event types
*/
export enum SubscriptionEvent {
CREATED = 'created',
UPDATED = 'updated',
DELETED = 'deleted',
INITIAL = 'initial',
ERROR = 'error'
}
/**
* Middleware interface
*/
export interface Middleware {
/** Middleware name */
name: string
/** Execution priority (lower = earlier) */
priority?: number
/** Middleware execution function */
execute(req: DataRequest, res: DataResponse, next: () => Promise<void>): Promise<void>
}
/**
* Request context passed through middleware chain
*/
export interface RequestContext {
/** Original request */
request: DataRequest
/** Response being built */
response: DataResponse
/** Path that matched this request */
path?: string
/** HTTP method */
method?: HttpMethod
/** Authenticated user (if any) */
user?: any
/** Additional context data */
data: Map<string, any>
}
/**
* Base options for service operations
*/
export interface ServiceOptions {
/** Database transaction to use */
transaction?: any
/** User context for authorization */
user?: any
/** Additional service-specific options */
metadata?: Record<string, any>
}
/**
* Standard service response wrapper
*/
export interface ServiceResult<T = any> {
/** Whether operation was successful */
success: boolean
/** Result data if successful */
data?: T
/** Error information if failed */
error?: DataApiError
/** Additional metadata */
metadata?: Record<string, any>
}

View File

@@ -0,0 +1,194 @@
/**
* Centralized error code definitions for the Data API system
* Provides consistent error handling across renderer and main processes
*/
import type { DataApiError } from './apiTypes'
import { ErrorCode } from './apiTypes'
// Re-export ErrorCode for convenience
export { ErrorCode } from './apiTypes'
/**
* Error code to HTTP status mapping
*/
export const ERROR_STATUS_MAP: Record<ErrorCode, number> = {
// Client errors (4xx)
[ErrorCode.BAD_REQUEST]: 400,
[ErrorCode.UNAUTHORIZED]: 401,
[ErrorCode.FORBIDDEN]: 403,
[ErrorCode.NOT_FOUND]: 404,
[ErrorCode.METHOD_NOT_ALLOWED]: 405,
[ErrorCode.VALIDATION_ERROR]: 422,
[ErrorCode.RATE_LIMIT_EXCEEDED]: 429,
// Server errors (5xx)
[ErrorCode.INTERNAL_SERVER_ERROR]: 500,
[ErrorCode.DATABASE_ERROR]: 500,
[ErrorCode.SERVICE_UNAVAILABLE]: 503,
// Custom application errors (5xx)
[ErrorCode.MIGRATION_ERROR]: 500,
[ErrorCode.PERMISSION_DENIED]: 403,
[ErrorCode.RESOURCE_LOCKED]: 423,
[ErrorCode.CONCURRENT_MODIFICATION]: 409
}
/**
* Default error messages for each error code
*/
export const ERROR_MESSAGES: Record<ErrorCode, string> = {
[ErrorCode.BAD_REQUEST]: 'Bad request: Invalid request format or parameters',
[ErrorCode.UNAUTHORIZED]: 'Unauthorized: Authentication required',
[ErrorCode.FORBIDDEN]: 'Forbidden: Insufficient permissions',
[ErrorCode.NOT_FOUND]: 'Not found: Requested resource does not exist',
[ErrorCode.METHOD_NOT_ALLOWED]: 'Method not allowed: HTTP method not supported for this endpoint',
[ErrorCode.VALIDATION_ERROR]: 'Validation error: Request data does not meet requirements',
[ErrorCode.RATE_LIMIT_EXCEEDED]: 'Rate limit exceeded: Too many requests',
[ErrorCode.INTERNAL_SERVER_ERROR]: 'Internal server error: An unexpected error occurred',
[ErrorCode.DATABASE_ERROR]: 'Database error: Failed to access or modify data',
[ErrorCode.SERVICE_UNAVAILABLE]: 'Service unavailable: The service is temporarily unavailable',
[ErrorCode.MIGRATION_ERROR]: 'Migration error: Failed to migrate data',
[ErrorCode.PERMISSION_DENIED]: 'Permission denied: Operation not allowed for current user',
[ErrorCode.RESOURCE_LOCKED]: 'Resource locked: Resource is currently locked by another operation',
[ErrorCode.CONCURRENT_MODIFICATION]: 'Concurrent modification: Resource was modified by another user'
}
/**
* Utility class for creating standardized Data API errors
*/
export class DataApiErrorFactory {
/**
* Create a DataApiError with standard properties
*/
static create(code: ErrorCode, customMessage?: string, details?: any, stack?: string): DataApiError {
return {
code,
message: customMessage || ERROR_MESSAGES[code],
status: ERROR_STATUS_MAP[code],
details,
stack: stack || undefined
}
}
/**
* Create a validation error with field-specific details
*/
static validation(fieldErrors: Record<string, string[]>, message?: string): DataApiError {
return this.create(ErrorCode.VALIDATION_ERROR, message || 'Request validation failed', { fieldErrors })
}
/**
* Create a not found error for specific resource
*/
static notFound(resource: string, id?: string): DataApiError {
const message = id ? `${resource} with id '${id}' not found` : `${resource} not found`
return this.create(ErrorCode.NOT_FOUND, message, { resource, id })
}
/**
* Create a database error with query details
*/
static database(originalError: Error, operation?: string): DataApiError {
return this.create(
ErrorCode.DATABASE_ERROR,
`Database operation failed${operation ? `: ${operation}` : ''}`,
{
originalError: originalError.message,
operation
},
originalError.stack
)
}
/**
* Create a permission denied error
*/
static permissionDenied(action: string, resource?: string): DataApiError {
const message = resource ? `Permission denied: Cannot ${action} ${resource}` : `Permission denied: Cannot ${action}`
return this.create(ErrorCode.PERMISSION_DENIED, message, { action, resource })
}
/**
* Create an internal server error from an unexpected error
*/
static internal(originalError: Error, context?: string): DataApiError {
const message = context
? `Internal error in ${context}: ${originalError.message}`
: `Internal error: ${originalError.message}`
return this.create(
ErrorCode.INTERNAL_SERVER_ERROR,
message,
{ originalError: originalError.message, context },
originalError.stack
)
}
/**
* Create a rate limit exceeded error
*/
static rateLimit(limit: number, windowMs: number): DataApiError {
return this.create(ErrorCode.RATE_LIMIT_EXCEEDED, `Rate limit exceeded: ${limit} requests per ${windowMs}ms`, {
limit,
windowMs
})
}
/**
* Create a resource locked error
*/
static resourceLocked(resource: string, id: string, lockedBy?: string): DataApiError {
const message = lockedBy
? `${resource} '${id}' is locked by ${lockedBy}`
: `${resource} '${id}' is currently locked`
return this.create(ErrorCode.RESOURCE_LOCKED, message, { resource, id, lockedBy })
}
/**
* Create a concurrent modification error
*/
static concurrentModification(resource: string, id: string): DataApiError {
return this.create(ErrorCode.CONCURRENT_MODIFICATION, `${resource} '${id}' was modified by another user`, {
resource,
id
})
}
}
/**
* Check if an error is a Data API error
*/
export function isDataApiError(error: any): error is DataApiError {
return (
error &&
typeof error === 'object' &&
typeof error.code === 'string' &&
typeof error.message === 'string' &&
typeof error.status === 'number'
)
}
/**
* Convert a generic error to a DataApiError
*/
export function toDataApiError(error: unknown, context?: string): DataApiError {
if (isDataApiError(error)) {
return error
}
if (error instanceof Error) {
return DataApiErrorFactory.internal(error, context)
}
return DataApiErrorFactory.create(
ErrorCode.INTERNAL_SERVER_ERROR,
`Unknown error${context ? ` in ${context}` : ''}: ${String(error)}`,
{ originalError: error, context }
)
}

View File

@@ -0,0 +1,121 @@
/**
* Cherry Studio Data API - Barrel Exports
*
* This file provides a centralized entry point for all data API types,
* schemas, and utilities. Import everything you need from this single location.
*
* @example
* ```typescript
* import { Topic, CreateTopicDto, ApiSchemas, DataRequest, ErrorCode } from '@/shared/data'
* ```
*/
// Core data API types and infrastructure
export type {
BatchRequest,
BatchResponse,
CacheOptions,
DataApiError,
DataRequest,
DataResponse,
HttpMethod,
Middleware,
PaginatedResponse,
PaginationParams,
RequestContext,
ServiceOptions,
ServiceResult,
SubscriptionCallback,
SubscriptionOptions,
TransactionRequest
} from './apiTypes'
export { ErrorCode, SubscriptionEvent } from './apiTypes'
// Domain models and DTOs
export type {
BulkOperationRequest,
BulkOperationResponse,
CreateTestItemDto,
TestItem,
UpdateTestItemDto
} from './apiModels'
// API schema definitions and type helpers
export type {
ApiBody,
ApiClient,
ApiMethods,
ApiParams,
ApiPaths,
ApiQuery,
ApiResponse,
ApiSchemas
} from './apiSchemas'
// Path type utilities for template literal types
export type {
BodyForPath,
ConcreteApiPaths,
MatchApiPath,
QueryParamsForPath,
ResolvedPath,
ResponseForPath
} from './apiPaths'
// Error handling utilities
export {
ErrorCode as DataApiErrorCode,
DataApiErrorFactory,
ERROR_MESSAGES,
ERROR_STATUS_MAP,
isDataApiError,
toDataApiError
} from './errorCodes'
/**
* Re-export commonly used type combinations for convenience
*/
// Import types for re-export convenience types
import type { CreateTestItemDto, TestItem, UpdateTestItemDto } from './apiModels'
import type {
BatchRequest,
BatchResponse,
DataApiError,
DataRequest,
DataResponse,
ErrorCode,
PaginatedResponse,
PaginationParams,
TransactionRequest
} from './apiTypes'
import type { DataApiErrorFactory } from './errorCodes'
/** All test item-related types */
export type TestItemTypes = {
TestItem: TestItem
CreateTestItemDto: CreateTestItemDto
UpdateTestItemDto: UpdateTestItemDto
}
/** All error-related types and utilities */
export type ErrorTypes = {
DataApiError: DataApiError
ErrorCode: ErrorCode
ErrorFactory: typeof DataApiErrorFactory
}
/** All request/response types */
export type RequestTypes = {
DataRequest: DataRequest
DataResponse: DataResponse
BatchRequest: BatchRequest
BatchResponse: BatchResponse
TransactionRequest: TransactionRequest
}
/** All pagination-related types */
export type PaginationTypes = {
PaginationParams: PaginationParams
PaginatedResponse: PaginatedResponse<any>
}

View File

@@ -0,0 +1,90 @@
import type * as CacheValueTypes from './cacheValueTypes'
/**
* Use cache schema for renderer hook
*/
export type UseCacheSchema = {
// App state
'app.dist.update_state': CacheValueTypes.CacheAppUpdateState
'app.user.avatar': string
// Chat context
'chat.multi_select_mode': boolean
'chat.selected_message_ids': string[]
'chat.generating': boolean
'chat.websearch.searching': boolean
'chat.websearch.active_searches': CacheValueTypes.CacheActiveSearches
// Minapp management
'minapp.opened_keep_alive': CacheValueTypes.CacheMinAppType[]
'minapp.current_id': string
'minapp.show': boolean
'minapp.opened_oneoff': CacheValueTypes.CacheMinAppType | null
// Topic management
'topic.active': CacheValueTypes.CacheTopic | null
'topic.renaming': string[]
'topic.newly_renamed': string[]
}
export const DefaultUseCache: UseCacheSchema = {
// App state
'app.dist.update_state': {
info: null,
checking: false,
downloading: false,
downloaded: false,
downloadProgress: 0,
available: false
},
'app.user.avatar': '',
// Chat context
'chat.multi_select_mode': false,
'chat.selected_message_ids': [],
'chat.generating': false,
'chat.websearch.searching': false,
'chat.websearch.active_searches': {},
// Minapp management
'minapp.opened_keep_alive': [],
'minapp.current_id': '',
'minapp.show': false,
'minapp.opened_oneoff': null,
// Topic management
'topic.active': null,
'topic.renaming': [],
'topic.newly_renamed': []
}
/**
* Use shared cache schema for renderer hook
*/
export type UseSharedCacheSchema = {
'example-key': string
}
export const DefaultUseSharedCache: UseSharedCacheSchema = {
'example-key': 'example default value'
}
/**
* Persist cache schema defining allowed keys and their value types
* This ensures type safety and prevents key conflicts
*/
export type RendererPersistCacheSchema = {
'example-key': string
}
export const DefaultRendererPersistCache: RendererPersistCacheSchema = {
'example-key': 'example default value'
}
/**
* Type-safe cache key
*/
export type RendererPersistCacheKey = keyof RendererPersistCacheSchema
export type UseCacheKey = keyof UseCacheSchema
export type UseSharedCacheKey = keyof UseSharedCacheSchema

View File

@@ -0,0 +1,43 @@
/**
* Cache types and interfaces for CacheService
*
* Supports three-layer caching architecture:
* 1. Memory cache (cross-component within renderer)
* 2. Shared cache (cross-window via IPC)
* 3. Persist cache (cross-window with localStorage persistence)
*/
/**
* Cache entry with optional TTL support
*/
export interface CacheEntry<T = any> {
value: T
expireAt?: number // Unix timestamp
}
/**
* Cache synchronization message for IPC communication
*/
export interface CacheSyncMessage {
type: 'shared' | 'persist'
key: string
value: any
ttl?: number
}
/**
* Batch cache synchronization message
*/
export interface CacheSyncBatchMessage {
type: 'shared' | 'persist'
entries: Array<{
key: string
value: any
ttl?: number
}>
}
/**
* Cache subscription callback
*/
export type CacheSubscriber = () => void

View File

@@ -0,0 +1,18 @@
import type { MinAppType, Topic, WebSearchStatus } from '@types'
import type { UpdateInfo } from 'builder-util-runtime'
export type CacheAppUpdateState = {
info: UpdateInfo | null
checking: boolean
downloading: boolean
downloaded: boolean
downloadProgress: number
available: boolean
}
export type CacheActiveSearches = Record<string, WebSearchStatus>
// For cache schema, we use any for complex types to avoid circular dependencies
// The actual type checking will be done at runtime by the cache system
export type CacheMinAppType = MinAppType
export type CacheTopic = Topic

View File

@@ -0,0 +1,123 @@
/**
* Shared type definitions for the migration system
*/
// Migration stages for UI flow
export type MigrationStage =
| 'introduction'
| 'backup_required'
| 'backup_progress'
| 'backup_confirmed'
| 'migration'
| 'migration_completed'
| 'completed'
| 'error'
// Individual migrator status
export type MigratorStatus = 'pending' | 'running' | 'completed' | 'failed'
// Migrator progress info for UI display
export interface MigratorProgress {
id: string
name: string
status: MigratorStatus
error?: string
}
// Overall migration progress
export interface MigrationProgress {
stage: MigrationStage
overallProgress: number // 0-100
currentMessage: string
migrators: MigratorProgress[]
error?: string
}
// Prepare phase result
export interface PrepareResult {
success: boolean
itemCount: number
warnings?: string[]
}
// Execute phase result
export interface ExecuteResult {
success: boolean
processedCount: number
error?: string
}
// Validation error detail
export interface ValidationError {
key: string
expected?: unknown
actual?: unknown
message: string
}
// Validate phase result with count validation support
export interface ValidateResult {
success: boolean
errors: ValidationError[]
stats: {
sourceCount: number
targetCount: number
skippedCount: number
mismatchReason?: string
}
}
// Individual migrator result
export interface MigratorResult {
migratorId: string
migratorName: string
success: boolean
recordsProcessed: number
duration: number
error?: string
}
// Overall migration result
export interface MigrationResult {
success: boolean
migratorResults: MigratorResult[]
totalDuration: number
error?: string
}
// Migration status stored in app_state table
export interface MigrationStatusValue {
status: 'completed' | 'failed' | 'in_progress'
completedAt?: number
failedAt?: number
version: string
error?: string | null
}
// IPC channels for migration communication
export const MigrationIpcChannels = {
// Status queries
CheckNeeded: 'migration:check-needed',
GetProgress: 'migration:get-progress',
GetLastError: 'migration:get-last-error',
GetUserDataPath: 'migration:get-user-data-path',
// Flow control
Start: 'migration:start',
ProceedToBackup: 'migration:proceed-to-backup',
ShowBackupDialog: 'migration:show-backup-dialog',
BackupCompleted: 'migration:backup-completed',
StartMigration: 'migration:start-migration',
Retry: 'migration:retry',
Cancel: 'migration:cancel',
Restart: 'migration:restart',
// Data transfer (Renderer -> Main)
SendReduxData: 'migration:send-redux-data',
DexieExportCompleted: 'migration:dexie-export-completed',
WriteExportFile: 'migration:write-export-file',
// Progress broadcast (Main -> Renderer)
Progress: 'migration:progress',
ExportProgress: 'migration:export-progress'
} as const

View File

@@ -0,0 +1,687 @@
/**
* Auto-generated preferences configuration
* Generated at: 2025-09-16T03:17:03.354Z
*
* This file is automatically generated from classification.json
* To update this file, modify classification.json and run:
* node .claude/data-classify/scripts/generate-preferences.js
*
* === AUTO-GENERATED CONTENT START ===
*/
import { TRANSLATE_PROMPT } from '@shared/config/prompts'
import * as PreferenceTypes from '@shared/data/preference/preferenceTypes'
/* eslint @typescript-eslint/member-ordering: ["error", {
"interfaces": { "order": "alphabetically" },
"typeLiterals": { "order": "alphabetically" }
}] */
export interface PreferenceSchemas {
default: {
// redux/settings/enableDeveloperMode
'app.developer_mode.enabled': boolean
// redux/settings/disableHardwareAcceleration
'app.disable_hardware_acceleration': boolean
// redux/settings/autoCheckUpdate
'app.dist.auto_update.enabled': boolean
// redux/settings/testChannel
'app.dist.test_plan.channel': PreferenceTypes.UpgradeChannel
// redux/settings/testPlan
'app.dist.test_plan.enabled': boolean
// redux/settings/language
'app.language': PreferenceTypes.LanguageVarious | null
// redux/settings/launchOnBoot
'app.launch_on_boot': boolean
// redux/settings/notification.assistant
'app.notification.assistant.enabled': boolean
// redux/settings/notification.backup
'app.notification.backup.enabled': boolean
// redux/settings/notification.knowledge
'app.notification.knowledge.enabled': boolean
// redux/settings/enableDataCollection
'app.privacy.data_collection.enabled': boolean
// redux/settings/proxyBypassRules
'app.proxy.bypass_rules': string
// redux/settings/proxyMode
'app.proxy.mode': PreferenceTypes.ProxyMode
// redux/settings/proxyUrl
'app.proxy.url': string
// redux/settings/enableSpellCheck
'app.spell_check.enabled': boolean
// redux/settings/spellCheckLanguages
'app.spell_check.languages': string[]
// redux/settings/tray
'app.tray.enabled': boolean
// redux/settings/trayOnClose
'app.tray.on_close': boolean
// redux/settings/launchToTray
'app.tray.on_launch': boolean
// redux/settings/userId
'app.user.id': string
// redux/settings/userName
'app.user.name': string
// electronStore/ZoomFactor/ZoomFactor
'app.zoom_factor': number
// redux/settings/clickAssistantToShowTopic
'assistant.click_to_show_topic': boolean
// redux/settings/assistantIconType
'assistant.icon_type': PreferenceTypes.AssistantIconType
// redux/settings/showAssistants
'assistant.tab.show': boolean
// redux/settings/assistantsTabSortType
'assistant.tab.sort_type': PreferenceTypes.AssistantTabSortType
// redux/settings/codeCollapsible
'chat.code.collapsible': boolean
// redux/settings/codeEditor.autocompletion
'chat.code.editor.autocompletion': boolean
// redux/settings/codeEditor.enabled
'chat.code.editor.enabled': boolean
// redux/settings/codeEditor.foldGutter
'chat.code.editor.fold_gutter': boolean
// redux/settings/codeEditor.highlightActiveLine
'chat.code.editor.highlight_active_line': boolean
// redux/settings/codeEditor.keymap
'chat.code.editor.keymap': boolean
// redux/settings/codeEditor.themeDark
'chat.code.editor.theme_dark': string
// redux/settings/codeEditor.themeLight
'chat.code.editor.theme_light': string
// redux/settings/codeExecution.enabled
'chat.code.execution.enabled': boolean
// redux/settings/codeExecution.timeoutMinutes
'chat.code.execution.timeout_minutes': number
// redux/settings/codeFancyBlock
'chat.code.fancy_block': boolean
// redux/settings/codeImageTools
'chat.code.image_tools': boolean
// redux/settings/codePreview.themeDark
'chat.code.preview.theme_dark': string
// redux/settings/codePreview.themeLight
'chat.code.preview.theme_light': string
// redux/settings/codeShowLineNumbers
'chat.code.show_line_numbers': boolean
// redux/settings/codeViewer.themeDark
'chat.code.viewer.theme_dark': string
// redux/settings/codeViewer.themeLight
'chat.code.viewer.theme_light': string
// redux/settings/codeWrappable
'chat.code.wrappable': boolean
// redux/settings/pasteLongTextAsFile
'chat.input.paste_long_text_as_file': boolean
// redux/settings/pasteLongTextThreshold
'chat.input.paste_long_text_threshold': number
// redux/settings/enableQuickPanelTriggers
'chat.input.quick_panel.triggers_enabled': boolean
// redux/settings/sendMessageShortcut
'chat.input.send_message_shortcut': PreferenceTypes.SendMessageShortcut
// redux/settings/showInputEstimatedTokens
'chat.input.show_estimated_tokens': boolean
// redux/settings/autoTranslateWithSpace
'chat.input.translate.auto_translate_with_space': boolean
// redux/settings/showTranslateConfirm
'chat.input.translate.show_confirm': boolean
// redux/settings/confirmDeleteMessage
'chat.message.confirm_delete': boolean
// redux/settings/confirmRegenerateMessage
'chat.message.confirm_regenerate': boolean
// redux/settings/messageFont
'chat.message.font': string
// redux/settings/fontSize
'chat.message.font_size': number
// redux/settings/mathEngine
'chat.message.math.engine': PreferenceTypes.MathEngine
// redux/settings/mathEnableSingleDollar
'chat.message.math.single_dollar': boolean
// redux/settings/foldDisplayMode
'chat.message.multi_model.fold_display_mode': PreferenceTypes.MultiModelFoldDisplayMode
// redux/settings/gridColumns
'chat.message.multi_model.grid_columns': number
// redux/settings/gridPopoverTrigger
'chat.message.multi_model.grid_popover_trigger': PreferenceTypes.MultiModelGridPopoverTrigger
// redux/settings/multiModelMessageStyle
'chat.message.multi_model.style': PreferenceTypes.MultiModelMessageStyle
// redux/settings/messageNavigation
'chat.message.navigation_mode': PreferenceTypes.ChatMessageNavigationMode
// redux/settings/renderInputMessageAsMarkdown
'chat.message.render_as_markdown': boolean
// redux/settings/showMessageDivider
'chat.message.show_divider': boolean
// redux/settings/showMessageOutline
'chat.message.show_outline': boolean
// redux/settings/showPrompt
'chat.message.show_prompt': boolean
// redux/settings/messageStyle
'chat.message.style': PreferenceTypes.ChatMessageStyle
// redux/settings/thoughtAutoCollapse
'chat.message.thought.auto_collapse': boolean
// redux/settings/narrowMode
'chat.narrow_mode': boolean
// redux/settings/skipBackupFile
'data.backup.general.skip_backup_file': boolean
// redux/settings/localBackupAutoSync
'data.backup.local.auto_sync': boolean
// redux/settings/localBackupDir
'data.backup.local.dir': string
// redux/settings/localBackupMaxBackups
'data.backup.local.max_backups': number
// redux/settings/localBackupSkipBackupFile
'data.backup.local.skip_backup_file': boolean
// redux/settings/localBackupSyncInterval
'data.backup.local.sync_interval': number
// redux/nutstore/nutstoreAutoSync
'data.backup.nutstore.auto_sync': boolean
// redux/nutstore/nutstoreMaxBackups
'data.backup.nutstore.max_backups': number
// redux/nutstore/nutstorePath
'data.backup.nutstore.path': string
// redux/nutstore/nutstoreSkipBackupFile
'data.backup.nutstore.skip_backup_file': boolean
// redux/nutstore/nutstoreSyncInterval
'data.backup.nutstore.sync_interval': number
// redux/nutstore/nutstoreToken
'data.backup.nutstore.token': string
// redux/settings/s3.accessKeyId
'data.backup.s3.access_key_id': string
// redux/settings/s3.autoSync
'data.backup.s3.auto_sync': boolean
// redux/settings/s3.bucket
'data.backup.s3.bucket': string
// redux/settings/s3.endpoint
'data.backup.s3.endpoint': string
// redux/settings/s3.maxBackups
'data.backup.s3.max_backups': number
// redux/settings/s3.region
'data.backup.s3.region': string
// redux/settings/s3.root
'data.backup.s3.root': string
// redux/settings/s3.secretAccessKey
'data.backup.s3.secret_access_key': string
// redux/settings/s3.skipBackupFile
'data.backup.s3.skip_backup_file': boolean
// redux/settings/s3.syncInterval
'data.backup.s3.sync_interval': number
// redux/settings/webdavAutoSync
'data.backup.webdav.auto_sync': boolean
// redux/settings/webdavDisableStream
'data.backup.webdav.disable_stream': boolean
// redux/settings/webdavHost
'data.backup.webdav.host': string
// redux/settings/webdavMaxBackups
'data.backup.webdav.max_backups': number
// redux/settings/webdavPass
'data.backup.webdav.pass': string
// redux/settings/webdavPath
'data.backup.webdav.path': string
// redux/settings/webdavSkipBackupFile
'data.backup.webdav.skip_backup_file': boolean
// redux/settings/webdavSyncInterval
'data.backup.webdav.sync_interval': number
// redux/settings/webdavUser
'data.backup.webdav.user': string
// redux/settings/excludeCitationsInExport
'data.export.markdown.exclude_citations': boolean
// redux/settings/forceDollarMathInMarkdown
'data.export.markdown.force_dollar_math': boolean
// redux/settings/markdownExportPath
'data.export.markdown.path': string | null
// redux/settings/showModelNameInMarkdown
'data.export.markdown.show_model_name': boolean
// redux/settings/showModelProviderInMarkdown
'data.export.markdown.show_model_provider': boolean
// redux/settings/standardizeCitationsInExport
'data.export.markdown.standardize_citations': boolean
// redux/settings/useTopicNamingForMessageTitle
'data.export.markdown.use_topic_naming_for_message_title': boolean
// redux/settings/exportMenuOptions.docx
'data.export.menus.docx': boolean
// redux/settings/exportMenuOptions.image
'data.export.menus.image': boolean
// redux/settings/exportMenuOptions.joplin
'data.export.menus.joplin': boolean
// redux/settings/exportMenuOptions.markdown
'data.export.menus.markdown': boolean
// redux/settings/exportMenuOptions.markdown_reason
'data.export.menus.markdown_reason': boolean
// redux/settings/exportMenuOptions.notes
'data.export.menus.notes': boolean
// redux/settings/exportMenuOptions.notion
'data.export.menus.notion': boolean
// redux/settings/exportMenuOptions.obsidian
'data.export.menus.obsidian': boolean
// redux/settings/exportMenuOptions.plain_text
'data.export.menus.plain_text': boolean
// redux/settings/exportMenuOptions.siyuan
'data.export.menus.siyuan': boolean
// redux/settings/exportMenuOptions.yuque
'data.export.menus.yuque': boolean
// redux/settings/joplinExportReasoning
'data.integration.joplin.export_reasoning': boolean
// redux/settings/joplinToken
'data.integration.joplin.token': string
// redux/settings/joplinUrl
'data.integration.joplin.url': string
// redux/settings/notionApiKey
'data.integration.notion.api_key': string
// redux/settings/notionDatabaseID
'data.integration.notion.database_id': string
// redux/settings/notionExportReasoning
'data.integration.notion.export_reasoning': boolean
// redux/settings/notionPageNameKey
'data.integration.notion.page_name_key': string
// redux/settings/defaultObsidianVault
'data.integration.obsidian.default_vault': string
// redux/settings/siyuanApiUrl
'data.integration.siyuan.api_url': string | null
// redux/settings/siyuanBoxId
'data.integration.siyuan.box_id': string | null
// redux/settings/siyuanRootPath
'data.integration.siyuan.root_path': string | null
// redux/settings/siyuanToken
'data.integration.siyuan.token': string | null
// redux/settings/yuqueRepoId
'data.integration.yuque.repo_id': string
// redux/settings/yuqueToken
'data.integration.yuque.token': string
// redux/settings/yuqueUrl
'data.integration.yuque.url': string
// redux/settings/apiServer.apiKey
'feature.csaas.api_key': string
// redux/settings/apiServer.enabled
'feature.csaas.enabled': boolean
// redux/settings/apiServer.host
'feature.csaas.host': string
// redux/settings/apiServer.port
'feature.csaas.port': number
// redux/settings/maxKeepAliveMinapps
'feature.minapp.max_keep_alive': number
// redux/settings/minappsOpenLinkExternal
'feature.minapp.open_link_external': boolean
// redux/settings/showOpenedMinappsInSidebar
'feature.minapp.show_opened_in_sidebar': boolean
// redux/note/settings.defaultEditMode
'feature.notes.default_edit_mode': string
// redux/note/settings.defaultViewMode
'feature.notes.default_view_mode': string
// redux/note/settings.fontFamily
'feature.notes.font_family': string
// redux/note/settings.fontSize
'feature.notes.font_size': number
// redux/note/settings.isFullWidth
'feature.notes.full_width': boolean
// redux/note/notesPath
'feature.notes.path': string
// redux/note/settings.showTabStatus
'feature.notes.show_tab_status': boolean
// redux/note/settings.showTableOfContents
'feature.notes.show_table_of_contents': boolean
// redux/note/settings.showWorkspace
'feature.notes.show_workspace': boolean
// redux/note/sortType
'feature.notes.sort_type': string
// redux/settings/clickTrayToShowQuickAssistant
'feature.quick_assistant.click_tray_to_show': boolean
// redux/settings/enableQuickAssistant
'feature.quick_assistant.enabled': boolean
// redux/settings/readClipboardAtStartup
'feature.quick_assistant.read_clipboard_at_startup': boolean
// redux/selectionStore/actionItems
'feature.selection.action_items': PreferenceTypes.SelectionActionItem[]
// redux/selectionStore/actionWindowOpacity
'feature.selection.action_window_opacity': number
// redux/selectionStore/isAutoClose
'feature.selection.auto_close': boolean
// redux/selectionStore/isAutoPin
'feature.selection.auto_pin': boolean
// redux/selectionStore/isCompact
'feature.selection.compact': boolean
// redux/selectionStore/selectionEnabled
'feature.selection.enabled': boolean
// redux/selectionStore/filterList
'feature.selection.filter_list': string[]
// redux/selectionStore/filterMode
'feature.selection.filter_mode': PreferenceTypes.SelectionFilterMode
// redux/selectionStore/isFollowToolbar
'feature.selection.follow_toolbar': boolean
// redux/selectionStore/isRemeberWinSize
'feature.selection.remember_win_size': boolean
// redux/selectionStore/triggerMode
'feature.selection.trigger_mode': PreferenceTypes.SelectionTriggerMode
// redux/settings/translateModelPrompt
'feature.translate.model_prompt': string
// redux/settings/targetLanguage
'feature.translate.target_language': string
// redux/shortcuts/shortcuts.exit_fullscreen
'shortcut.app.exit_fullscreen': Record<string, unknown>
// redux/shortcuts/shortcuts.search_message
'shortcut.app.search_message': Record<string, unknown>
// redux/shortcuts/shortcuts.show_app
'shortcut.app.show_main_window': Record<string, unknown>
// redux/shortcuts/shortcuts.mini_window
'shortcut.app.show_mini_window': Record<string, unknown>
// redux/shortcuts/shortcuts.show_settings
'shortcut.app.show_settings': Record<string, unknown>
// redux/shortcuts/shortcuts.toggle_show_assistants
'shortcut.app.toggle_show_assistants': Record<string, unknown>
// redux/shortcuts/shortcuts.zoom_in
'shortcut.app.zoom_in': Record<string, unknown>
// redux/shortcuts/shortcuts.zoom_out
'shortcut.app.zoom_out': Record<string, unknown>
// redux/shortcuts/shortcuts.zoom_reset
'shortcut.app.zoom_reset': Record<string, unknown>
// redux/shortcuts/shortcuts.clear_topic
'shortcut.chat.clear': Record<string, unknown>
// redux/shortcuts/shortcuts.copy_last_message
'shortcut.chat.copy_last_message': Record<string, unknown>
// redux/shortcuts/shortcuts.search_message_in_chat
'shortcut.chat.search_message': Record<string, unknown>
// redux/shortcuts/shortcuts.toggle_new_context
'shortcut.chat.toggle_new_context': Record<string, unknown>
// redux/shortcuts/shortcuts.selection_assistant_select_text
'shortcut.selection.get_text': Record<string, unknown>
// redux/shortcuts/shortcuts.selection_assistant_toggle
'shortcut.selection.toggle_enabled': Record<string, unknown>
// redux/shortcuts/shortcuts.new_topic
'shortcut.topic.new': Record<string, unknown>
// redux/settings/enableTopicNaming
'topic.naming.enabled': boolean
// redux/settings/topicNamingPrompt
'topic.naming_prompt': string
// redux/settings/topicPosition
'topic.position': string
// redux/settings/pinTopicsToTop
'topic.tab.pin_to_top': boolean
// redux/settings/showTopics
'topic.tab.show': boolean
// redux/settings/showTopicTime
'topic.tab.show_time': boolean
// redux/settings/customCss
'ui.custom_css': string
// redux/settings/navbarPosition
'ui.navbar.position': 'left' | 'top'
// redux/settings/sidebarIcons.disabled
'ui.sidebar.icons.invisible': PreferenceTypes.SidebarIcon[]
// redux/settings/sidebarIcons.visible
'ui.sidebar.icons.visible': PreferenceTypes.SidebarIcon[]
// redux/settings/theme
'ui.theme_mode': PreferenceTypes.ThemeMode
// redux/settings/userTheme.userCodeFontFamily
'ui.theme_user.code_font_family': string
// redux/settings/userTheme.colorPrimary
'ui.theme_user.color_primary': string
// redux/settings/userTheme.userFontFamily
'ui.theme_user.font_family': string
// redux/settings/windowStyle
'ui.window_style': PreferenceTypes.WindowStyle
}
}
/* eslint sort-keys: ["error", "asc", {"caseSensitive": true, "natural": false}] */
export const DefaultPreferences: PreferenceSchemas = {
default: {
'app.developer_mode.enabled': false,
'app.disable_hardware_acceleration': false,
'app.dist.auto_update.enabled': true,
'app.dist.test_plan.channel': PreferenceTypes.UpgradeChannel.LATEST,
'app.dist.test_plan.enabled': false,
'app.language': null,
'app.launch_on_boot': false,
'app.notification.assistant.enabled': false,
'app.notification.backup.enabled': false,
'app.notification.knowledge.enabled': false,
'app.privacy.data_collection.enabled': false,
'app.proxy.bypass_rules': '',
'app.proxy.mode': 'system',
'app.proxy.url': '',
'app.spell_check.enabled': false,
'app.spell_check.languages': [],
'app.tray.enabled': true,
'app.tray.on_close': true,
'app.tray.on_launch': false,
'app.user.id': 'uuid()',
'app.user.name': '',
'app.zoom_factor': 1,
'assistant.click_to_show_topic': true,
'assistant.icon_type': 'emoji',
'assistant.tab.show': true,
'assistant.tab.sort_type': 'list',
'chat.code.collapsible': false,
'chat.code.editor.autocompletion': true,
'chat.code.editor.enabled': false,
'chat.code.editor.fold_gutter': false,
'chat.code.editor.highlight_active_line': false,
'chat.code.editor.keymap': false,
'chat.code.editor.theme_dark': 'auto',
'chat.code.editor.theme_light': 'auto',
'chat.code.execution.enabled': false,
'chat.code.execution.timeout_minutes': 1,
'chat.code.fancy_block': true,
'chat.code.image_tools': false,
'chat.code.preview.theme_dark': 'auto',
'chat.code.preview.theme_light': 'auto',
'chat.code.show_line_numbers': false,
'chat.code.viewer.theme_dark': 'auto',
'chat.code.viewer.theme_light': 'auto',
'chat.code.wrappable': false,
'chat.input.paste_long_text_as_file': false,
'chat.input.paste_long_text_threshold': 1500,
'chat.input.quick_panel.triggers_enabled': false,
'chat.input.send_message_shortcut': 'Enter',
'chat.input.show_estimated_tokens': false,
'chat.input.translate.auto_translate_with_space': false,
'chat.input.translate.show_confirm': true,
'chat.message.confirm_delete': true,
'chat.message.confirm_regenerate': true,
'chat.message.font': 'system',
'chat.message.font_size': 14,
'chat.message.math.engine': 'KaTeX',
'chat.message.math.single_dollar': true,
'chat.message.multi_model.fold_display_mode': 'expanded',
'chat.message.multi_model.grid_columns': 2,
'chat.message.multi_model.grid_popover_trigger': 'click',
'chat.message.multi_model.style': 'horizontal',
'chat.message.navigation_mode': 'none',
'chat.message.render_as_markdown': false,
'chat.message.show_divider': true,
'chat.message.show_outline': false,
'chat.message.show_prompt': true,
'chat.message.style': 'plain',
'chat.message.thought.auto_collapse': true,
'chat.narrow_mode': false,
'data.backup.general.skip_backup_file': false,
'data.backup.local.auto_sync': false,
'data.backup.local.dir': '',
'data.backup.local.max_backups': 0,
'data.backup.local.skip_backup_file': false,
'data.backup.local.sync_interval': 0,
'data.backup.nutstore.auto_sync': false,
'data.backup.nutstore.max_backups': 0,
'data.backup.nutstore.path': '/cherry-studio',
'data.backup.nutstore.skip_backup_file': false,
'data.backup.nutstore.sync_interval': 0,
'data.backup.nutstore.token': '',
'data.backup.s3.access_key_id': '',
'data.backup.s3.auto_sync': false,
'data.backup.s3.bucket': '',
'data.backup.s3.endpoint': '',
'data.backup.s3.max_backups': 0,
'data.backup.s3.region': '',
'data.backup.s3.root': '',
'data.backup.s3.secret_access_key': '',
'data.backup.s3.skip_backup_file': false,
'data.backup.s3.sync_interval': 0,
'data.backup.webdav.auto_sync': false,
'data.backup.webdav.disable_stream': false,
'data.backup.webdav.host': '',
'data.backup.webdav.max_backups': 0,
'data.backup.webdav.pass': '',
'data.backup.webdav.path': '/cherry-studio',
'data.backup.webdav.skip_backup_file': false,
'data.backup.webdav.sync_interval': 0,
'data.backup.webdav.user': '',
'data.export.markdown.exclude_citations': false,
'data.export.markdown.force_dollar_math': false,
'data.export.markdown.path': null,
'data.export.markdown.show_model_name': false,
'data.export.markdown.show_model_provider': false,
'data.export.markdown.standardize_citations': false,
'data.export.markdown.use_topic_naming_for_message_title': false,
'data.export.menus.docx': true,
'data.export.menus.image': true,
'data.export.menus.joplin': true,
'data.export.menus.markdown': true,
'data.export.menus.markdown_reason': true,
'data.export.menus.notes': true,
'data.export.menus.notion': true,
'data.export.menus.obsidian': true,
'data.export.menus.plain_text': true,
'data.export.menus.siyuan': true,
'data.export.menus.yuque': true,
'data.integration.joplin.export_reasoning': false,
'data.integration.joplin.token': '',
'data.integration.joplin.url': '',
'data.integration.notion.api_key': '',
'data.integration.notion.database_id': '',
'data.integration.notion.export_reasoning': false,
'data.integration.notion.page_name_key': 'Name',
'data.integration.obsidian.default_vault': '',
'data.integration.siyuan.api_url': null,
'data.integration.siyuan.box_id': null,
'data.integration.siyuan.root_path': null,
'data.integration.siyuan.token': null,
'data.integration.yuque.repo_id': '',
'data.integration.yuque.token': '',
'data.integration.yuque.url': '',
'feature.csaas.api_key': '`cs-sk-${uuid()}`',
'feature.csaas.enabled': false,
'feature.csaas.host': 'localhost',
'feature.csaas.port': 23333,
'feature.minapp.max_keep_alive': 3,
'feature.minapp.open_link_external': false,
'feature.minapp.show_opened_in_sidebar': true,
'feature.notes.default_edit_mode': 'preview',
'feature.notes.default_view_mode': 'edit',
'feature.notes.font_family': 'default',
'feature.notes.font_size': 16,
'feature.notes.full_width': true,
'feature.notes.path': '',
'feature.notes.show_tab_status': true,
'feature.notes.show_table_of_contents': true,
'feature.notes.show_workspace': true,
'feature.notes.sort_type': 'sort_a2z',
'feature.quick_assistant.click_tray_to_show': false,
'feature.quick_assistant.enabled': false,
'feature.quick_assistant.read_clipboard_at_startup': true,
'feature.selection.action_items': [
{
enabled: true,
icon: 'languages',
id: 'translate',
isBuiltIn: true,
name: 'selection.action.builtin.translate'
},
{
enabled: true,
icon: 'file-question',
id: 'explain',
isBuiltIn: true,
name: 'selection.action.builtin.explain'
},
{ enabled: true, icon: 'scan-text', id: 'summary', isBuiltIn: true, name: 'selection.action.builtin.summary' },
{
enabled: true,
icon: 'search',
id: 'search',
isBuiltIn: true,
name: 'selection.action.builtin.search',
searchEngine: 'Google|https://www.google.com/search?q={{queryString}}'
},
{ enabled: true, icon: 'clipboard-copy', id: 'copy', isBuiltIn: true, name: 'selection.action.builtin.copy' },
{ enabled: false, icon: 'wand-sparkles', id: 'refine', isBuiltIn: true, name: 'selection.action.builtin.refine' },
{ enabled: false, icon: 'quote', id: 'quote', isBuiltIn: true, name: 'selection.action.builtin.quote' }
],
'feature.selection.action_window_opacity': 100,
'feature.selection.auto_close': false,
'feature.selection.auto_pin': false,
'feature.selection.compact': false,
'feature.selection.enabled': false,
'feature.selection.filter_list': [],
'feature.selection.filter_mode': PreferenceTypes.SelectionFilterMode.Default,
'feature.selection.follow_toolbar': true,
'feature.selection.remember_win_size': false,
'feature.selection.trigger_mode': PreferenceTypes.SelectionTriggerMode.Selected,
'feature.translate.model_prompt': TRANSLATE_PROMPT,
'feature.translate.target_language': 'en-us',
'shortcut.app.exit_fullscreen': { editable: false, enabled: true, key: ['Escape'], system: true },
'shortcut.app.search_message': {
editable: true,
enabled: true,
key: ['CommandOrControl', 'Shift', 'F'],
system: false
},
'shortcut.app.show_main_window': { editable: true, enabled: true, key: [], system: true },
'shortcut.app.show_mini_window': { editable: true, enabled: false, key: ['CommandOrControl', 'E'], system: true },
'shortcut.app.show_settings': { editable: false, enabled: true, key: ['CommandOrControl', ','], system: true },
'shortcut.app.toggle_show_assistants': {
editable: true,
enabled: true,
key: ['CommandOrControl', '['],
system: false
},
'shortcut.app.zoom_in': { editable: false, enabled: true, key: ['CommandOrControl', '='], system: true },
'shortcut.app.zoom_out': { editable: false, enabled: true, key: ['CommandOrControl', '-'], system: true },
'shortcut.app.zoom_reset': { editable: false, enabled: true, key: ['CommandOrControl', '0'], system: true },
'shortcut.chat.clear': { editable: true, enabled: true, key: ['CommandOrControl', 'L'], system: false },
'shortcut.chat.copy_last_message': {
editable: true,
enabled: false,
key: ['CommandOrControl', 'Shift', 'C'],
system: false
},
'shortcut.chat.search_message': { editable: true, enabled: true, key: ['CommandOrControl', 'F'], system: false },
'shortcut.chat.toggle_new_context': {
editable: true,
enabled: true,
key: ['CommandOrControl', 'K'],
system: false
},
'shortcut.selection.get_text': { editable: true, enabled: false, key: [], system: true },
'shortcut.selection.toggle_enabled': { editable: true, enabled: false, key: [], system: true },
'shortcut.topic.new': { editable: true, enabled: true, key: ['CommandOrControl', 'N'], system: false },
'topic.naming.enabled': true,
'topic.naming_prompt': '',
'topic.position': 'left',
'topic.tab.pin_to_top': false,
'topic.tab.show': true,
'topic.tab.show_time': false,
'ui.custom_css': '',
'ui.navbar.position': 'top',
'ui.sidebar.icons.invisible': [],
'ui.sidebar.icons.visible': [
'assistants',
'store',
'paintings',
'translate',
'minapp',
'knowledge',
'files',
'code_tools',
'notes'
],
'ui.theme_mode': PreferenceTypes.ThemeMode.system,
'ui.theme_user.code_font_family': '',
'ui.theme_user.color_primary': '#00b96b',
'ui.theme_user.font_family': '',
'ui.window_style': 'opaque'
}
}
// === AUTO-GENERATED CONTENT END ===
/**
* 生成统计:
* - 总配置项: 197
* - electronStore项: 1
* - redux项: 196
* - localStorage项: 0
*/

View File

@@ -0,0 +1,131 @@
import * as z from 'zod'
import type { PreferenceSchemas } from './preferenceSchemas'
export type PreferenceDefaultScopeType = PreferenceSchemas['default']
export type PreferenceKeyType = keyof PreferenceDefaultScopeType
export type PreferenceUpdateOptions = {
optimistic: boolean
}
export type PreferenceShortcutType = {
key: string[]
editable: boolean
enabled: boolean
system: boolean
}
export enum SelectionTriggerMode {
Selected = 'selected',
Ctrlkey = 'ctrlkey',
Shortcut = 'shortcut'
}
export enum SelectionFilterMode {
Default = 'default',
Whitelist = 'whitelist',
Blacklist = 'blacklist'
}
export type SelectionActionItem = {
id: string
name: string
enabled: boolean
isBuiltIn: boolean
icon?: string
prompt?: string
assistantId?: string
selectedText?: string
searchEngine?: string
}
const SelectionBuiltinActionItemIdSchema = z.enum([
'translate',
'explain',
'summary',
'search',
'copy',
'refine',
'quote'
])
export type SelectionBuiltinActionItemId = z.infer<typeof SelectionBuiltinActionItemIdSchema>
export function isBuiltinActionItemId(id: string): id is SelectionBuiltinActionItemId {
return SelectionBuiltinActionItemIdSchema.safeParse(id).success
}
export interface SelectionBuiltinActionItem extends SelectionActionItem {
id: SelectionBuiltinActionItemId
isBuiltIn: true
assistantId?: never
}
export function isSelectionBuiltinActionItem(
item: SelectionActionItem | null | undefined
): item is SelectionBuiltinActionItem {
if (!item) {
return false
}
return isBuiltinActionItemId(item.id)
}
export enum ThemeMode {
light = 'light',
dark = 'dark',
system = 'system'
}
/** 有限的UI语言 */
export type LanguageVarious =
| 'zh-CN'
| 'zh-TW'
| 'el-GR'
| 'en-US'
| 'es-ES'
| 'fr-FR'
| 'ja-JP'
| 'pt-PT'
| 'ru-RU'
| 'de-DE'
export type WindowStyle = 'transparent' | 'opaque'
export type SendMessageShortcut = 'Enter' | 'Shift+Enter' | 'Ctrl+Enter' | 'Command+Enter' | 'Alt+Enter'
export type AssistantTabSortType = 'tags' | 'list'
export type SidebarIcon =
| 'assistants'
| 'store'
| 'paintings'
| 'translate'
| 'minapp'
| 'knowledge'
| 'files'
| 'code_tools'
| 'notes'
export type AssistantIconType = 'model' | 'emoji' | 'none'
export type ProxyMode = 'system' | 'custom' | 'none'
export type MultiModelFoldDisplayMode = 'expanded' | 'compact'
export type MathEngine = 'KaTeX' | 'MathJax' | 'none'
export enum UpgradeChannel {
LATEST = 'latest', // 最新稳定版本
RC = 'rc', // 公测版本
BETA = 'beta' // 预览版本
}
export type ChatMessageStyle = 'plain' | 'bubble'
export type ChatMessageNavigationMode = 'none' | 'buttons' | 'anchor'
export type MultiModelMessageStyle = 'horizontal' | 'vertical' | 'fold' | 'grid'
export type MultiModelGridPopoverTrigger = 'hover' | 'click'

15
packages/ui/.gitignore vendored Normal file
View File

@@ -0,0 +1,15 @@
node_modules/
dist/
*.log
.DS_Store
# Storybook build output
storybook-static/
# IDE
.vscode/
.idea/
# Temporary files
*.tmp
*.temp

View File

@@ -0,0 +1,28 @@
import { fileURLToPath } from 'node:url'
import type { StorybookConfig } from '@storybook/react-vite'
import { dirname, resolve } from 'path'
const config: StorybookConfig = {
stories: ['../stories/components/**/*.stories.@(js|jsx|ts|tsx)'],
addons: [getAbsolutePath('@storybook/addon-docs'), getAbsolutePath('@storybook/addon-themes')],
framework: getAbsolutePath('@storybook/react-vite'),
viteFinal: async (config) => {
const { mergeConfig } = await import('vite')
const tailwindPlugin = (await import('@tailwindcss/vite')).default
return mergeConfig(config, {
plugins: [tailwindPlugin()],
resolve: {
alias: {
'@cherrystudio/ui': resolve('src')
}
}
})
}
}
export default config
function getAbsolutePath(value: string): any {
return dirname(fileURLToPath(import.meta.resolve(`${value}/package.json`)))
}

View File

@@ -0,0 +1,26 @@
import '../stories/tailwind.css'
import { withThemeByClassName } from '@storybook/addon-themes'
import type { Preview } from '@storybook/react'
const preview: Preview = {
parameters: {
backgrounds: {
options: {
light: { name: 'Light', value: 'hsla(0, 0%, 97%, 1)' },
dark: { name: 'Dark', value: 'hsla(240, 6%, 10%, 1)' }
}
}
},
decorators: [
withThemeByClassName({
themes: {
light: '',
dark: 'dark'
},
defaultTheme: 'light'
})
]
}
export default preview

View File

@@ -0,0 +1,150 @@
# Cherry Studio UI Migration Plan
## Overview
This document outlines the detailed plan for migrating Cherry Studio from antd + styled-components to shadcn/ui + Tailwind CSS. We will adopt a progressive migration strategy to ensure system stability and development efficiency, while gradually implementing UI refactoring in collaboration with UI designers.
## Migration Strategy
### Target Tech Stack
- **UI Component Library**: shadcn/ui (replacing antd and previously migrated HeroUI)
- **Styling Solution**: Tailwind CSS v4 (replacing styled-components)
- **Design System**: Custom CSS variable system (`--cs-*` namespace)
- **Theme System**: CSS variables + Tailwind CSS theme
### Migration Principles
1. **Backward Compatibility**: Old components continue working until new components are fully available
2. **Progressive Migration**: Migrate components one by one to avoid large-scale rewrites
3. **Feature Parity**: Ensure new components have all the functionality of old components
4. **Design Consistency**: Follow new design system specifications (see [README.md](./README.md))
5. **Performance Priority**: Optimize bundle size and rendering performance
6. **Designer Collaboration**: Work with UI designers for gradual component encapsulation and UI optimization
## Usage Example
```typescript
// Import components from @cherrystudio/ui
import { Spinner, DividerWithText, InfoTooltip } from '@cherrystudio/ui'
// Use in components
function MyComponent() {
return (
<div>
<Spinner size={24} />
<DividerWithText text="Divider Text" />
<InfoTooltip content="Tooltip message" />
</div>
)
}
```
## Directory Structure
```text
@packages/ui/
├── src/
│ ├── components/ # Main components directory
│ │ ├── primitives/ # Basic/primitive components (Avatar, ErrorBoundary, Selector, etc.)
│ │ │ └── shadcn-io/ # shadcn/ui components (dropzone, etc.)
│ │ ├── icons/ # Icon components (Icon, FileIcons, etc.)
│ │ └── composites/ # Composite components (CodeEditor, ListItem, etc.)
│ ├── hooks/ # Custom React Hooks
│ ├── styles/ # Global styles and CSS variables
│ ├── types/ # TypeScript type definitions
│ ├── utils/ # Utility functions
│ └── index.ts # Main export file
```
### Component Classification Guide
When submitting PRs, please place components in the correct directory based on their function:
- **primitives**: Basic and primitive UI elements, shadcn/ui components
- `Avatar`: Avatar components
- `ErrorBoundary`: Error boundary components
- `Selector`: Selection components
- `shadcn-io/`: Direct shadcn/ui components or adaptations
- **icons**: All icon-related components
- `Icon`: Icon factory and basic icons
- `FileIcons`: File-specific icons
- Loading/spinner icons (SvgSpinners180Ring, ToolsCallingIcon, etc.)
- **composites**: Complex components made from multiple primitives
- `CodeEditor`: Code editing components
- `ListItem`: List item components
- `ThinkingEffect`: Animation components
- Form and interaction components (DraggableList, EditableNumber, etc.)
## Component Extraction Criteria
### Extraction Standards
1. **Usage Frequency**: Component is used in ≥ 3 places in the codebase
2. **Future Reusability**: Expected to be used in multiple scenarios in the future
3. **Business Complexity**: Component contains complex interaction logic or state management
4. **Maintenance Cost**: Centralized management can reduce maintenance overhead
5. **Design Consistency**: Components that require unified visual and interaction experience
6. **Test Coverage**: As common components, they facilitate unit test writing and maintenance
### Extraction Principles
- **Single Responsibility**: Each component should only handle one clear function
- **Highly Configurable**: Provide flexible configuration options through props
- **Backward Compatible**: New versions maintain API backward compatibility
- **Complete Documentation**: Provide clear API documentation and usage examples
- **Type Safety**: Use TypeScript to ensure type safety
### Cases Not Recommended for Extraction
- Simple display components used only on a single page
- Overly customized business logic components
- Components tightly coupled to specific data sources
## Migration Steps
| Phase | Status | Main Tasks | Description |
| --- | --- | --- | --- |
| **Phase 1** | ✅ **Completed** | **Design System Integration** | • Converted design tokens from todocss.css to tokens.css with `--cs-*` namespace<br>• Created theme.css mapping all design tokens to standard Tailwind classes<br>• Extended Tailwind with semantic spacing (5xs~8xl) and radius (4xs~3xl) systems<br>• Established two usage modes: full override and selective override<br>• Cleaned up main package's conflicting Shadcn theme definitions |
| **Phase 2** | ⏳ **To Start** | **Component Migration and Optimization** | • Filter components for migration based on extraction criteria<br>• Remove antd dependencies, replace with shadcn/ui<br>• Remove HeroUI dependencies, replace with shadcn/ui<br>• Remove styled-components, replace with Tailwind CSS + design system variables<br>• Optimize component APIs and type definitions |
| **Phase 3** | ⏳ **To Start** | **UI Refactoring and Optimization** | • Gradually implement UI refactoring with UI designers<br>• Ensure visual consistency and user experience<br>• Performance optimization and code quality improvement |
## Notes
1. **Do NOT migrate** components with these dependencies (can be migrated after decoupling):
- window.api calls
- Redux (useSelector, useDispatch, etc.)
- Other external data sources
2. **Can migrate** but need decoupling later:
- Components using i18n (change i18n to props)
- Components using antd (replace with shadcn/ui later)
- Components using HeroUI (replace with shadcn/ui later)
3. **Submission Guidelines**:
- Each PR should focus on one category of components
- Ensure all migrated components are exported
- Follow component extraction criteria, only migrate qualified components
## Design System Integration
### CSS Variable System
- All design tokens use `--cs-*` namespace (e.g., `--cs-primary`, `--cs-red-500`)
- Complete color palette: 17 colors × 11 shades each
- Semantic spacing system: `5xs` through `8xl` (16 levels)
- Semantic radius system: `4xs` through `3xl` plus `round` (11 levels)
- Full light/dark mode support
- See [README.md](./README.md) for usage documentation
### Migration Priority Adjustment
1. **High Priority**: Basic components (buttons, inputs, tags, etc.)
2. **Medium Priority**: Display components (cards, lists, tables, etc.)
3. **Low Priority**: Composite components and business-coupled components
### UI Designer Collaboration
- All component designs need confirmation from UI designers
- Gradually implement UI refactoring to maintain visual consistency
- New components must comply with design system specifications

263
packages/ui/README.md Normal file
View File

@@ -0,0 +1,263 @@
# @cherrystudio/ui
Cherry Studio UI 组件库 - 为 Cherry Studio 设计的 React 组件集合
## ✨ 特性
- 🎨 **设计系统**: 完整的 CherryStudio 设计令牌17种颜色 × 11个色阶 + 语义化主题)
- 🌓 **Dark Mode**: 开箱即用的深色模式支持
- 🚀 **Tailwind v4**: 基于最新 Tailwind CSS v4 构建
- 📦 **灵活导入**: 2种样式导入方式满足不同使用场景
- 🔷 **TypeScript**: 完整的类型定义和智能提示
- 🎯 **零冲突**: CSS 变量隔离,不覆盖用户主题
---
## 🚀 快速开始
### 安装
```bash
npm install @cherrystudio/ui
# peer dependencies
npm install framer-motion react react-dom tailwindcss
```
### 两种使用方式
#### 方式 1完整覆盖 ✨
使用完整的 CherryStudio 设计系统,所有 Tailwind 类名映射到设计系统。
```css
/* app.css */
@import '@cherrystudio/ui/styles/theme.css';
```
**特点**
- ✅ 直接使用标准 Tailwind 类名(`bg-primary``bg-red-500``p-md``rounded-lg`
- ✅ 所有颜色使用设计师定义的值
- ✅ 扩展的 Spacing 系统(`p-5xs` ~ `p-8xl`,共 16 个语义化尺寸)
- ✅ 扩展的 Radius 系统(`rounded-4xs` ~ `rounded-3xl`,共 11 个圆角)
- ⚠️ 会完全覆盖 Tailwind 默认主题
**示例**
```tsx
<Button className="bg-primary text-red-500 p-md rounded-lg">
{/* bg-primary → 品牌色lime-500 */}
{/* text-red-500 → 设计师定义的红色 */}
{/* p-md → 2.5remspacing-md */}
{/* rounded-lg → 2.5remradius-lg */}
</Button>
{/* 扩展的工具类 */}
<div className="p-5xs">最小间距 (0.5rem)</div>
<div className="p-xs">超小间距 (1rem)</div>
<div className="p-sm">小间距 (1.5rem)</div>
<div className="p-md">中等间距 (2.5rem)</div>
<div className="p-lg">大间距 (3.5rem)</div>
<div className="p-xl">超大间距 (5rem)</div>
<div className="p-8xl">最大间距 (15rem)</div>
<div className="rounded-4xs">最小圆角 (0.25rem)</div>
<div className="rounded-xs">小圆角 (1rem)</div>
<div className="rounded-md">中等圆角 (2rem)</div>
<div className="rounded-xl">大圆角 (3rem)</div>
<div className="rounded-round">完全圆角 (999px)</div>
```
#### 方式 2选择性覆盖 🎯
只导入设计令牌CSS 变量),手动选择要覆盖的部分。
```css
/* app.css */
@import 'tailwindcss';
@import '@cherrystudio/ui/styles/tokens.css';
/* 只使用部分设计系统 */
@theme {
--color-primary: var(--cs-primary); /* 使用 CS 的主色 */
--color-red-500: oklch(...); /* 使用自己的红色 */
--spacing-md: var(--cs-size-md); /* 使用 CS 的间距 */
--radius-lg: 1rem; /* 使用自己的圆角 */
}
```
**特点**
- ✅ 不覆盖任何 Tailwind 默认主题
- ✅ 通过 CSS 变量访问所有设计令牌(`var(--cs-primary)``var(--cs-red-500)`
- ✅ 精细控制哪些使用 CS、哪些保持原样
- ✅ 适合有自己设计系统但想借用部分 CS 设计令牌的场景
**示例**
```tsx
{/* 通过 CSS 变量使用 CS 设计令牌 */}
<button style={{ backgroundColor: 'var(--cs-primary)' }}>
使用 CherryStudio 品牌色
</button>
{/* 保持原有的 Tailwind 类名不受影响 */}
<div className="bg-red-500">
使用 Tailwind 默认的红色
</div>
{/* 可用的 CSS 变量 */}
<div style={{
color: 'var(--cs-primary)', // 品牌色
backgroundColor: 'var(--cs-red-500)', // 红色-500
padding: 'var(--cs-size-md)', // 间距
borderRadius: 'var(--cs-radius-lg)' // 圆角
}} />
```
### Provider 配置
在你的 App 根组件中添加 HeroUI Provider
```tsx
import { HeroUIProvider } from '@heroui/react'
function App() {
return (
<HeroUIProvider>
{/* 你的应用内容 */}
</HeroUIProvider>
)
}
```
## 使用
### 基础组件
```tsx
import { Button, Input } from '@cherrystudio/ui'
function App() {
return (
<div>
<Button variant="primary" size="md">
点击我
</Button>
<Input
type="text"
placeholder="请输入内容"
onChange={(value) => console.log(value)}
/>
</div>
)
}
```
### 分模块导入
```tsx
// 只导入组件
import { Button } from '@cherrystudio/ui/components'
// 只导入工具函数
import { cn, formatFileSize } from '@cherrystudio/ui/utils'
```
## 开发
```bash
# 安装依赖
yarn install
# 开发模式(监听文件变化)
yarn dev
# 构建
yarn build
# 类型检查
yarn type-check
# 运行测试
yarn test
```
## 目录结构
```text
src/
├── components/ # React 组件
│ ├── Button/ # 按钮组件
│ ├── Input/ # 输入框组件
│ └── index.ts # 组件导出
├── hooks/ # React Hooks
├── utils/ # 工具函数
├── types/ # 类型定义
└── index.ts # 主入口文件
```
## 组件列表
### Button 按钮
支持多种变体和尺寸的按钮组件。
**Props:**
- `variant`: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
- `size`: 'sm' | 'md' | 'lg'
- `loading`: boolean
- `fullWidth`: boolean
- `leftIcon` / `rightIcon`: React.ReactNode
### Input 输入框
带有错误处理和密码显示切换的输入框组件。
**Props:**
- `type`: 'text' | 'password' | 'email' | 'number'
- `error`: boolean
- `errorMessage`: string
- `onChange`: (value: string) => void
## Hooks
### useDebounce
防抖处理,延迟执行状态更新。
### useLocalStorage
本地存储的 React Hook 封装。
### useClickOutside
检测点击元素外部区域。
### useCopyToClipboard
复制文本到剪贴板。
## 工具函数
### cn(...inputs)
基于 clsx 的类名合并工具,支持条件类名。
### formatFileSize(bytes)
格式化文件大小显示。
### debounce(func, delay)
防抖函数。
### throttle(func, delay)
节流函数。
## 许可证
MIT

View File

@@ -0,0 +1,21 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"aliases": {
"components": "@cherrystudio/ui/components",
"hooks": "@cherrystudio/ui/hooks",
"lib": "@cherrystudio/ui/lib",
"ui": "@cherrystudio/ui/components/primitives",
"utils": "@cherrystudio/ui/utils"
},
"iconLibrary": "lucide",
"rsc": false,
"style": "new-york",
"tailwind": {
"baseColor": "zinc",
"config": "",
"css": "src/styles/theme.css",
"cssVariables": true,
"prefix": ""
},
"tsx": true
}

View File

@@ -0,0 +1,15 @@
# Design Reference
本文件夹包含设计师提供的原始设计令牌文件,仅作为参考使用。
## 文件说明
### *.hsla.css
为hsla格式的色值
## 注意事项
⚠️ **请勿直接使用此文件夹中的文件**
- 这些文件仅供参考
- 实际使用请导入 `src/styles/` 中的文件

View File

@@ -0,0 +1,309 @@
/**
* Primitive Colors - Light Mode
* 基础色板 - 所有原始颜色定义
*/
:root {
/* Neutral */
--cs-neutral-50: hsla(0, 0%, 98%, 1);
--cs-neutral-100: hsla(0, 0%, 96%, 1);
--cs-neutral-200: hsla(0, 0%, 90%, 1);
--cs-neutral-300: hsla(0, 0%, 83%, 1);
--cs-neutral-400: hsla(0, 0%, 64%, 1);
--cs-neutral-500: hsla(0, 0%, 45%, 1);
--cs-neutral-600: hsla(215, 14%, 34%, 1);
--cs-neutral-700: hsla(0, 0%, 25%, 1);
--cs-neutral-800: hsla(0, 0%, 15%, 1);
--cs-neutral-900: hsla(0, 0%, 9%, 1);
--cs-neutral-950: hsla(0, 0%, 4%, 1);
/* Stone */
--cs-stone-50: hsla(60, 9%, 98%, 1);
--cs-stone-100: hsla(60, 5%, 96%, 1);
--cs-stone-200: hsla(20, 6%, 90%, 1);
--cs-stone-300: hsla(24, 6%, 83%, 1);
--cs-stone-400: hsla(24, 5%, 64%, 1);
--cs-stone-500: hsla(25, 5%, 45%, 1);
--cs-stone-600: hsla(33, 5%, 32%, 1);
--cs-stone-700: hsla(30, 6%, 25%, 1);
--cs-stone-800: hsla(12, 6%, 15%, 1);
--cs-stone-900: hsla(24, 10%, 10%, 1);
--cs-stone-950: hsla(20, 14%, 4%, 1);
/* Zinc */
--cs-zinc-50: hsla(0, 0%, 98%, 1);
--cs-zinc-100: hsla(240, 5%, 96%, 1);
--cs-zinc-200: hsla(240, 6%, 90%, 1);
--cs-zinc-300: hsla(240, 5%, 84%, 1);
--cs-zinc-400: hsla(240, 5%, 65%, 1);
--cs-zinc-500: hsla(240, 4%, 46%, 1);
--cs-zinc-600: hsla(240, 5%, 34%, 1);
--cs-zinc-700: hsla(240, 5%, 26%, 1);
--cs-zinc-800: hsla(240, 4%, 16%, 1);
--cs-zinc-900: hsla(240, 6%, 10%, 1);
--cs-zinc-950: hsla(240, 10%, 4%, 1);
/* Slate */
--cs-slate-50: hsla(210, 40%, 98%, 1);
--cs-slate-100: hsla(210, 40%, 96%, 1);
--cs-slate-200: hsla(214, 32%, 91%, 1);
--cs-slate-300: hsla(213, 27%, 84%, 1);
--cs-slate-400: hsla(215, 20%, 65%, 1);
--cs-slate-500: hsla(215, 16%, 47%, 1);
--cs-slate-600: hsla(215, 19%, 35%, 1);
--cs-slate-700: hsla(215, 25%, 27%, 1);
--cs-slate-800: hsla(217, 33%, 17%, 1);
--cs-slate-900: hsla(222, 47%, 11%, 1);
--cs-slate-950: hsla(229, 84%, 5%, 1);
/* Gray */
--cs-gray-50: hsla(210, 20%, 98%, 1);
--cs-gray-100: hsla(220, 14%, 96%, 1);
--cs-gray-200: hsla(220, 13%, 91%, 1);
--cs-gray-300: hsla(216, 12%, 84%, 1);
--cs-gray-400: hsla(218, 11%, 65%, 1);
--cs-gray-500: hsla(220, 9%, 46%, 1);
--cs-gray-600: hsla(0, 0%, 32%, 1);
--cs-gray-700: hsla(217, 19%, 27%, 1);
--cs-gray-800: hsla(215, 28%, 17%, 1);
--cs-gray-900: hsla(221, 39%, 11%, 1);
--cs-gray-950: hsla(224, 71%, 4%, 1);
/* Red */
--cs-red-50: hsla(0, 86%, 97%, 1);
--cs-red-100: hsla(0, 93%, 94%, 1);
--cs-red-200: hsla(0, 96%, 89%, 1);
--cs-red-300: hsla(0, 94%, 82%, 1);
--cs-red-400: hsla(0, 91%, 71%, 1);
--cs-red-500: hsla(0, 84%, 60%, 1);
--cs-red-600: hsla(0, 72%, 51%, 1);
--cs-red-700: hsla(0, 74%, 42%, 1);
--cs-red-800: hsla(0, 70%, 35%, 1);
--cs-red-900: hsla(0, 63%, 31%, 1);
--cs-red-950: hsla(0, 75%, 15%, 1);
/* Orange */
--cs-orange-50: hsla(33, 100%, 96%, 1);
--cs-orange-100: hsla(34, 100%, 92%, 1);
--cs-orange-200: hsla(32, 98%, 83%, 1);
--cs-orange-300: hsla(31, 97%, 72%, 1);
--cs-orange-400: hsla(27, 96%, 61%, 1);
--cs-orange-500: hsla(25, 95%, 53%, 1);
--cs-orange-600: hsla(21, 90%, 48%, 1);
--cs-orange-700: hsla(17, 88%, 40%, 1);
--cs-orange-800: hsla(15, 79%, 34%, 1);
--cs-orange-900: hsla(15, 75%, 28%, 1);
--cs-orange-950: hsla(13, 81%, 15%, 1);
/* Amber */
--cs-amber-50: hsla(48, 100%, 96%, 1);
--cs-amber-100: hsla(48, 96%, 89%, 1);
--cs-amber-200: hsla(48, 97%, 77%, 1);
--cs-amber-300: hsla(46, 97%, 65%, 1);
--cs-amber-400: hsla(43, 96%, 56%, 1);
--cs-amber-500: hsla(38, 92%, 50%, 1);
--cs-amber-600: hsla(32, 95%, 44%, 1);
--cs-amber-700: hsla(26, 90%, 37%, 1);
--cs-amber-800: hsla(23, 83%, 31%, 1);
--cs-amber-900: hsla(22, 78%, 26%, 1);
--cs-amber-950: hsla(21, 92%, 14%, 1);
/* Yellow */
--cs-yellow-50: hsla(55, 92%, 95%, 1);
--cs-yellow-100: hsla(55, 97%, 88%, 1);
--cs-yellow-200: hsla(53, 98%, 77%, 1);
--cs-yellow-300: hsla(50, 98%, 64%, 1);
--cs-yellow-400: hsla(48, 96%, 53%, 1);
--cs-yellow-500: hsla(45, 93%, 47%, 1);
--cs-yellow-600: hsla(41, 96%, 40%, 1);
--cs-yellow-700: hsla(35, 92%, 33%, 1);
--cs-yellow-800: hsla(32, 81%, 29%, 1);
--cs-yellow-900: hsla(28, 73%, 26%, 1);
--cs-yellow-950: hsla(26, 83%, 14%, 1);
/* Lime (品牌主色) */
--cs-lime-50: hsla(78, 92%, 95%, 1);
--cs-lime-100: hsla(80, 89%, 89%, 1);
--cs-lime-200: hsla(81, 88%, 80%, 1);
--cs-lime-300: hsla(82, 85%, 67%, 1);
--cs-lime-400: hsla(83, 78%, 55%, 1);
--cs-lime-500: hsla(84, 81%, 44%, 1);
--cs-lime-600: hsla(85, 85%, 35%, 1);
--cs-lime-700: hsla(86, 78%, 27%, 1);
--cs-lime-800: hsla(86, 69%, 23%, 1);
--cs-lime-900: hsla(88, 61%, 20%, 1);
--cs-lime-950: hsla(89, 80%, 10%, 1);
/* Green */
--cs-green-50: hsla(138, 76%, 97%, 1);
--cs-green-100: hsla(141, 84%, 93%, 1);
--cs-green-200: hsla(141, 79%, 85%, 1);
--cs-green-300: hsla(142, 77%, 73%, 1);
--cs-green-400: hsla(142, 69%, 58%, 1);
--cs-green-500: hsla(142, 71%, 45%, 1);
--cs-green-600: hsla(142, 76%, 36%, 1);
--cs-green-700: hsla(142, 72%, 29%, 1);
--cs-green-800: hsla(143, 64%, 24%, 1);
--cs-green-900: hsla(144, 61%, 20%, 1);
--cs-green-950: hsla(145, 80%, 10%, 1);
/* Emerald */
--cs-emerald-50: hsla(152, 81%, 96%, 1);
--cs-emerald-100: hsla(149, 80%, 90%, 1);
--cs-emerald-200: hsla(152, 76%, 80%, 1);
--cs-emerald-300: hsla(156, 72%, 67%, 1);
--cs-emerald-400: hsla(158, 64%, 52%, 1);
--cs-emerald-500: hsla(160, 84%, 39%, 1);
--cs-emerald-600: hsla(161, 94%, 30%, 1);
--cs-emerald-700: hsla(163, 94%, 24%, 1);
--cs-emerald-800: hsla(163, 88%, 20%, 1);
--cs-emerald-900: hsla(164, 86%, 16%, 1);
--cs-emerald-950: hsla(166, 91%, 9%, 1);
/* Teal */
--cs-teal-50: hsla(166, 76%, 97%, 1);
--cs-teal-100: hsla(167, 85%, 89%, 1);
--cs-teal-200: hsla(168, 84%, 78%, 1);
--cs-teal-300: hsla(171, 77%, 64%, 1);
--cs-teal-400: hsla(172, 66%, 50%, 1);
--cs-teal-500: hsla(173, 80%, 40%, 1);
--cs-teal-600: hsla(175, 84%, 32%, 1);
--cs-teal-700: hsla(175, 77%, 26%, 1);
--cs-teal-800: hsla(176, 69%, 22%, 1);
--cs-teal-900: hsla(176, 61%, 19%, 1);
--cs-teal-950: hsla(179, 84%, 10%, 1);
/* Cyan */
--cs-cyan-50: hsla(183, 100%, 96%, 1);
--cs-cyan-100: hsla(185, 96%, 90%, 1);
--cs-cyan-200: hsla(186, 94%, 82%, 1);
--cs-cyan-300: hsla(187, 92%, 69%, 1);
--cs-cyan-400: hsla(188, 86%, 53%, 1);
--cs-cyan-500: hsla(189, 94%, 43%, 1);
--cs-cyan-600: hsla(192, 91%, 36%, 1);
--cs-cyan-700: hsla(193, 82%, 31%, 1);
--cs-cyan-800: hsla(194, 70%, 27%, 1);
--cs-cyan-900: hsla(196, 64%, 24%, 1);
--cs-cyan-950: hsla(197, 79%, 15%, 1);
/* Sky */
--cs-sky-50: hsla(204, 100%, 97%, 1);
--cs-sky-100: hsla(204, 94%, 94%, 1);
--cs-sky-200: hsla(201, 94%, 86%, 1);
--cs-sky-300: hsla(199, 95%, 74%, 1);
--cs-sky-400: hsla(198, 93%, 60%, 1);
--cs-sky-500: hsla(199, 89%, 48%, 1);
--cs-sky-600: hsla(200, 98%, 39%, 1);
--cs-sky-700: hsla(201, 96%, 32%, 1);
--cs-sky-800: hsla(201, 90%, 27%, 1);
--cs-sky-900: hsla(202, 80%, 24%, 1);
--cs-sky-950: hsla(204, 80%, 16%, 1);
/* Blue */
--cs-blue-50: hsla(214, 100%, 97%, 1);
--cs-blue-100: hsla(214, 95%, 93%, 1);
--cs-blue-200: hsla(213, 97%, 87%, 1);
--cs-blue-300: hsla(212, 96%, 78%, 1);
--cs-blue-400: hsla(213, 94%, 68%, 1);
--cs-blue-500: hsla(217, 91%, 60%, 1);
--cs-blue-600: hsla(221, 83%, 53%, 1);
--cs-blue-700: hsla(224, 76%, 48%, 1);
--cs-blue-800: hsla(226, 71%, 40%, 1);
--cs-blue-900: hsla(224, 64%, 33%, 1);
--cs-blue-950: hsla(226, 57%, 21%, 1);
/* Indigo */
--cs-indigo-50: hsla(226, 100%, 97%, 1);
--cs-indigo-100: hsla(226, 100%, 94%, 1);
--cs-indigo-200: hsla(228, 96%, 89%, 1);
--cs-indigo-300: hsla(230, 94%, 82%, 1);
--cs-indigo-400: hsla(234, 89%, 74%, 1);
--cs-indigo-500: hsla(239, 84%, 67%, 1);
--cs-indigo-600: hsla(243, 75%, 59%, 1);
--cs-indigo-700: hsla(245, 58%, 51%, 1);
--cs-indigo-800: hsla(244, 55%, 41%, 1);
--cs-indigo-900: hsla(242, 47%, 34%, 1);
--cs-indigo-950: hsla(244, 47%, 20%, 1);
/* Violet */
--cs-violet-50: hsla(250, 100%, 98%, 1);
--cs-violet-100: hsla(251, 91%, 95%, 1);
--cs-violet-200: hsla(251, 95%, 92%, 1);
--cs-violet-300: hsla(253, 95%, 85%, 1);
--cs-violet-400: hsla(255, 92%, 76%, 1);
--cs-violet-500: hsla(258, 90%, 66%, 1);
--cs-violet-600: hsla(262, 83%, 58%, 1);
--cs-violet-700: hsla(263, 70%, 50%, 1);
--cs-violet-800: hsla(263, 69%, 42%, 1);
--cs-violet-900: hsla(264, 67%, 35%, 1);
--cs-violet-950: hsla(262, 78%, 23%, 1);
/* Purple */
--cs-purple-50: hsla(270, 100%, 98%, 1);
--cs-purple-100: hsla(269, 100%, 95%, 1);
--cs-purple-200: hsla(269, 100%, 92%, 1);
--cs-purple-300: hsla(269, 97%, 85%, 1);
--cs-purple-400: hsla(270, 95%, 75%, 1);
--cs-purple-500: hsla(271, 91%, 65%, 1);
--cs-purple-600: hsla(271, 81%, 56%, 1);
--cs-purple-700: hsla(272, 72%, 47%, 1);
--cs-purple-800: hsla(273, 67%, 39%, 1);
--cs-purple-900: hsla(274, 66%, 32%, 1);
--cs-purple-950: hsla(274, 87%, 21%, 1);
/* Fuchsia */
--cs-fuchsia-50: hsla(289, 100%, 98%, 1);
--cs-fuchsia-100: hsla(287, 100%, 95%, 1);
--cs-fuchsia-200: hsla(288, 96%, 91%, 1);
--cs-fuchsia-300: hsla(291, 93%, 83%, 1);
--cs-fuchsia-400: hsla(292, 91%, 73%, 1);
--cs-fuchsia-500: hsla(292, 84%, 61%, 1);
--cs-fuchsia-600: hsla(293, 69%, 49%, 1);
--cs-fuchsia-700: hsla(295, 72%, 40%, 1);
--cs-fuchsia-800: hsla(295, 70%, 33%, 1);
--cs-fuchsia-900: hsla(297, 64%, 28%, 1);
--cs-fuchsia-950: hsla(297, 90%, 16%, 1);
/* Pink */
--cs-pink-50: hsla(327, 73%, 97%, 1);
--cs-pink-100: hsla(326, 78%, 95%, 1);
--cs-pink-200: hsla(326, 85%, 90%, 1);
--cs-pink-300: hsla(327, 87%, 82%, 1);
--cs-pink-400: hsla(329, 86%, 70%, 1);
--cs-pink-500: hsla(330, 81%, 60%, 1);
--cs-pink-600: hsla(333, 71%, 51%, 1);
--cs-pink-700: hsla(335, 78%, 42%, 1);
--cs-pink-800: hsla(336, 74%, 35%, 1);
--cs-pink-900: hsla(336, 69%, 30%, 1);
--cs-pink-950: hsla(336, 84%, 17%, 1);
/* Rose */
--cs-rose-50: hsla(356, 100%, 97%, 1);
--cs-rose-100: hsla(356, 100%, 95%, 1);
--cs-rose-200: hsla(353, 96%, 90%, 1);
--cs-rose-300: hsla(353, 96%, 82%, 1);
--cs-rose-400: hsla(351, 95%, 71%, 1);
--cs-rose-500: hsla(350, 89%, 60%, 1);
--cs-rose-600: hsla(347, 77%, 50%, 1);
--cs-rose-700: hsla(345, 83%, 41%, 1);
--cs-rose-800: hsla(343, 80%, 35%, 1);
--cs-rose-900: hsla(342, 75%, 30%, 1);
--cs-rose-950: hsla(343, 88%, 16%, 1);
/* Black & White */
--cs-black: hsla(0, 0%, 0%, 1);
--cs-white: hsla(0, 0%, 100%, 1);
/* Brand (Cherry Studio 品牌专属色) */
--cs-brand-50: hsla(132, 64%, 97%, 1);
--cs-brand-100: hsla(132, 64%, 93%, 1);
--cs-brand-200: hsla(132, 64%, 85%, 1);
--cs-brand-300: hsla(132, 64%, 73%, 1);
--cs-brand-400: hsla(132, 64%, 63%, 1);
--cs-brand-500: hsla(132, 64%, 53%, 1);
--cs-brand-600: hsla(132, 64%, 43%, 1);
--cs-brand-700: hsla(132, 64%, 33%, 1);
--cs-brand-800: hsla(132, 64%, 23%, 1);
--cs-brand-900: hsla(132, 64%, 13%, 1);
--cs-brand-950: hsla(132, 64%, 8%, 1);
}

View File

@@ -0,0 +1,81 @@
/**
* Semantic Colors - Light Mode
* 语义化颜色 - 基于 Primitive Colors 的语义化映射
*/
:root {
/* Brand Colors */
--cs-primary: var(--cs-brand-500);
--cs-primary-hover: var(--cs-brand-300);
--cs-destructive: var(--cs-red-500);
--cs-destructive-hover: var(--cs-red-400);
--cs-success: var(--cs-green-500);
--cs-warning: var(--cs-amber-500);
/* Background & Foreground */
--cs-background: var(--cs-zinc-50);
--cs-background-subtle: hsla(0, 0%, 0%, 0.02);
--cs-foreground: hsla(0, 0%, 0%, 0.9);
--cs-foreground-secondary: hsla(0, 0%, 0%, 0.6);
--cs-foreground-muted: hsla(0, 0%, 0%, 0.4);
/* Card & Popover */
--cs-card: var(--cs-white);
--cs-popover: var(--cs-white);
/* Border */
--cs-border: hsla(0, 0%, 0%, 0.1);
--cs-border-hover: hsla(0, 0%, 0%, 0.2);
--cs-border-active: hsla(0, 0%, 0%, 0.3);
/* Ring (Focus) */
--cs-ring: color-mix(in srgb, var(--cs-primary) 40%, transparent);
/* UI Element Colors */
--cs-secondary: hsla(0, 0%, 0%, 0.05); /* Secondary Button Background */
--cs-secondary-hover: hsla(0, 0%, 0%, 0.85);
--cs-secondary-active: hsla(0, 0%, 0%, 0.7);
--cs-muted: hsla(0, 0%, 0%, 0.05); /* Muted/Subtle Background */
--cs-accent: hsla(0, 0%, 0%, 0.05); /* Accent Background */
--cs-ghost-hover: hsla(0, 0%, 0%, 0.05); /* Ghost Button Hover */
--cs-ghost-active: hsla(0, 0%, 0%, 0.1); /* Ghost Button Active */
/* Sidebar */
--cs-sidebar: var(--cs-white);
--cs-sidebar-accent: hsla(0, 0%, 0%, 0.05);
}
/* Dark Mode */
.dark {
/* Background & Foreground */
--cs-background: var(--cs-zinc-900);
--cs-background-subtle: hsla(0, 0%, 100%, 0.02);
--cs-foreground: hsla(0, 0%, 100%, 0.9);
--cs-foreground-secondary: hsla(0, 0%, 100%, 0.6);
--cs-foreground-muted: hsla(0, 0%, 100%, 0.4);
/* Card & Popover */
--cs-card: var(--cs-black);
--cs-popover: var(--cs-black);
/* Border */
--cs-border: hsla(0, 0%, 100%, 0.1);
--cs-border-hover: hsla(0, 0%, 100%, 0.2);
--cs-border-active: hsla(0, 0%, 100%, 0.3);
/* Ring (Focus) - 保持不变 */
--cs-ring: hsla(84, 81%, 44%, 0.4);
/* UI Element Colors - Dark Mode */
--cs-secondary: hsla(0, 0%, 100%, 0.1); /* Secondary Button Background */
--cs-secondary-hover: hsla(0, 0%, 100%, 0.2);
--cs-secondary-active: hsla(0, 0%, 100%, 0.25);
--cs-muted: hsla(0, 0%, 100%, 0.1); /* Muted/Subtle Background */
--cs-accent: hsla(0, 0%, 100%, 0.1); /* Accent Background */
--cs-ghost-hover: hsla(0, 0%, 100%, 0.1); /* Ghost Button Hover */
--cs-ghost-active: hsla(0, 0%, 100%, 0.15); /* Ghost Button Active */
/* Sidebar */
--cs-sidebar: var(--cs-black);
--cs-sidebar-accent: hsla(0, 0%, 100%, 0.1);
}

View File

@@ -0,0 +1,55 @@
/**
* Status Colors - Light Mode & Dark Mode
* 状态颜色 - Error, Success, Warning
*/
:root {
/* Status Colors - Error */
--cs-error-base: var(--cs-red-500); /* #ef4444 */
--cs-error-text: var(--cs-red-800); /* #991b1b */
--cs-error-bg: var(--cs-red-50); /* #fef2f2 */
--cs-error-text-hover: var(--cs-red-700); /* #b91c1c */
--cs-error-bg-hover: var(--cs-red-100); /* #fee2e2 */
--cs-error-border: var(--cs-red-200); /* #fecaca */
--cs-error-border-hover: var(--cs-red-300); /* #fca5a5 */
--cs-error-active: var(--cs-red-600); /* #dc2626 */
/* Status Colors - Success */
--cs-success-base: var(--cs-green-500); /* #22c55e */
--cs-success-text-hover: var(--cs-green-700); /* #15803d */
--cs-success-bg: var(--cs-green-50); /* #f0fdf4 */
--cs-success-bg-hover: var(--cs-green-200); /* #bbf7d0 */
/* Status Colors - Warning */
--cs-warning-base: var(--cs-amber-400); /* #fbbf24 */
--cs-warning-text-hover: var(--cs-amber-700); /* #b45309 */
--cs-warning-bg: var(--cs-amber-50); /* #fffbeb */
--cs-warning-bg-hover: var(--cs-amber-100); /* #fef3c7 */
--cs-warning-active: var(--cs-amber-600); /* #d97706 */
}
/* Dark Mode */
.dark {
/* Status Colors - Error (Dark Mode) */
--cs-error-base: var(--cs-red-400); /* #f87171 */
--cs-error-text: var(--cs-red-100); /* #fee2e2 */
--cs-error-bg: var(--cs-red-900); /* #7f1d1d */
--cs-error-text-hover: var(--cs-red-200); /* #fecaca */
--cs-error-bg-hover: var(--cs-red-800); /* #991b1b */
--cs-error-border: var(--cs-red-700); /* #b91c1c */
--cs-error-border-hover: var(--cs-red-600); /* #dc2626 */
--cs-error-active: var(--cs-red-300); /* #fca5a5 */
/* Status Colors - Success (Dark Mode) */
--cs-success-base: var(--cs-green-400); /* #4ade80 */
--cs-success-text-hover: var(--cs-green-200); /* #bbf7d0 */
--cs-success-bg: var(--cs-green-900); /* #14532d */
--cs-success-bg-hover: var(--cs-green-800); /* #166534 */
/* Status Colors - Warning (Dark Mode) */
--cs-warning-base: var(--cs-amber-400); /* #fbbf24 */
--cs-warning-text-hover: var(--cs-amber-200); /* #fde68a */
--cs-warning-bg: var(--cs-amber-900); /* #78350f */
--cs-warning-bg-hover: var(--cs-amber-800); /* #92400e */
--cs-warning-active: var(--cs-amber-600); /* #d97706 */
}

View File

@@ -0,0 +1,450 @@
/**
* Generated from Design Tokens
*
* ⚠️ DO NOT EDIT DIRECTLY!
* This file is auto-generated from tokens/ directory.
* To make changes, edit files in tokens/ and run: npm run tokens:build
*
* Generated on: 2025-11-07T08:56:09.444Z
*/
@theme {
/* ==================== */
/* Primitive Colors */
/* ==================== */
--color-neutral-50: hsla(0, 0%, 98%, 1);
--color-neutral-100: hsla(0, 0%, 96%, 1);
--color-neutral-200: hsla(0, 0%, 90%, 1);
--color-neutral-300: hsla(0, 0%, 83%, 1);
--color-neutral-400: hsla(0, 0%, 64%, 1);
--color-neutral-500: hsla(0, 0%, 45%, 1);
--color-neutral-600: hsla(215, 14%, 34%, 1);
--color-neutral-700: hsla(0, 0%, 25%, 1);
--color-neutral-800: hsla(0, 0%, 15%, 1);
--color-neutral-900: hsla(0, 0%, 9%, 1);
--color-neutral-950: hsla(0, 0%, 4%, 1);
--color-stone-50: hsla(60, 9%, 98%, 1);
--color-stone-100: hsla(60, 5%, 96%, 1);
--color-stone-200: hsla(20, 6%, 90%, 1);
--color-stone-300: hsla(24, 6%, 83%, 1);
--color-stone-400: hsla(24, 5%, 64%, 1);
--color-stone-500: hsla(25, 5%, 45%, 1);
--color-stone-600: hsla(33, 5%, 32%, 1);
--color-stone-700: hsla(30, 6%, 25%, 1);
--color-stone-800: hsla(12, 6%, 15%, 1);
--color-stone-900: hsla(24, 10%, 10%, 1);
--color-stone-950: hsla(20, 14%, 4%, 1);
--color-zinc-50: hsla(0, 0%, 98%, 1);
--color-zinc-100: hsla(240, 5%, 96%, 1);
--color-zinc-200: hsla(240, 6%, 90%, 1);
--color-zinc-300: hsla(240, 5%, 84%, 1);
--color-zinc-400: hsla(240, 5%, 65%, 1);
--color-zinc-500: hsla(240, 4%, 46%, 1);
--color-zinc-600: hsla(240, 5%, 34%, 1);
--color-zinc-700: hsla(240, 5%, 26%, 1);
--color-zinc-800: hsla(240, 4%, 16%, 1);
--color-zinc-900: hsla(240, 6%, 10%, 1);
--color-zinc-950: hsla(240, 10%, 4%, 1);
--color-slate-50: hsla(210, 40%, 98%, 1);
--color-slate-100: hsla(210, 40%, 96%, 1);
--color-slate-200: hsla(214, 32%, 91%, 1);
--color-slate-300: hsla(213, 27%, 84%, 1);
--color-slate-400: hsla(215, 20%, 65%, 1);
--color-slate-500: hsla(215, 16%, 47%, 1);
--color-slate-600: hsla(215, 19%, 35%, 1);
--color-slate-700: hsla(215, 25%, 27%, 1);
--color-slate-800: hsla(217, 33%, 17%, 1);
--color-slate-900: hsla(222, 47%, 11%, 1);
--color-slate-950: hsla(229, 84%, 5%, 1);
--color-gray-50: hsla(210, 20%, 98%, 1);
--color-gray-100: hsla(220, 14%, 96%, 1);
--color-gray-200: hsla(220, 13%, 91%, 1);
--color-gray-300: hsla(216, 12%, 84%, 1);
--color-gray-400: hsla(218, 11%, 65%, 1);
--color-gray-500: hsla(220, 9%, 46%, 1);
--color-gray-600: hsla(0, 0%, 32%, 1);
--color-gray-700: hsla(217, 19%, 27%, 1);
--color-gray-800: hsla(215, 28%, 17%, 1);
--color-gray-900: hsla(221, 39%, 11%, 1);
--color-gray-950: hsla(224, 71%, 4%, 1);
--color-red-50: hsla(0, 86%, 97%, 1);
--color-red-100: hsla(0, 93%, 94%, 1);
--color-red-200: hsla(0, 96%, 89%, 1);
--color-red-300: hsla(0, 94%, 82%, 1);
--color-red-400: hsla(0, 91%, 71%, 1);
--color-red-500: hsla(0, 84%, 60%, 1);
--color-red-600: hsla(0, 72%, 51%, 1);
--color-red-700: hsla(0, 74%, 42%, 1);
--color-red-800: hsla(0, 70%, 35%, 1);
--color-red-900: hsla(0, 63%, 31%, 1);
--color-red-950: hsla(0, 75%, 15%, 1);
--color-orange-50: hsla(33, 100%, 96%, 1);
--color-orange-100: hsla(34, 100%, 92%, 1);
--color-orange-200: hsla(32, 98%, 83%, 1);
--color-orange-300: hsla(31, 97%, 72%, 1);
--color-orange-400: hsla(27, 96%, 61%, 1);
--color-orange-500: hsla(25, 95%, 53%, 1);
--color-orange-600: hsla(21, 90%, 48%, 1);
--color-orange-700: hsla(17, 88%, 40%, 1);
--color-orange-800: hsla(15, 79%, 34%, 1);
--color-orange-900: hsla(15, 75%, 28%, 1);
--color-orange-950: hsla(13, 81%, 15%, 1);
--color-amber-50: hsla(48, 100%, 96%, 1);
--color-amber-100: hsla(48, 96%, 89%, 1);
--color-amber-200: hsla(48, 97%, 77%, 1);
--color-amber-300: hsla(46, 97%, 65%, 1);
--color-amber-400: hsla(43, 96%, 56%, 1);
--color-amber-500: hsla(38, 92%, 50%, 1);
--color-amber-600: hsla(32, 95%, 44%, 1);
--color-amber-700: hsla(26, 90%, 37%, 1);
--color-amber-800: hsla(23, 83%, 31%, 1);
--color-amber-900: hsla(22, 78%, 26%, 1);
--color-amber-950: hsla(21, 92%, 14%, 1);
--color-yellow-50: hsla(55, 92%, 95%, 1);
--color-yellow-100: hsla(55, 97%, 88%, 1);
--color-yellow-200: hsla(53, 98%, 77%, 1);
--color-yellow-300: hsla(50, 98%, 64%, 1);
--color-yellow-400: hsla(48, 96%, 53%, 1);
--color-yellow-500: hsla(45, 93%, 47%, 1);
--color-yellow-600: hsla(41, 96%, 40%, 1);
--color-yellow-700: hsla(35, 92%, 33%, 1);
--color-yellow-800: hsla(32, 81%, 29%, 1);
--color-yellow-900: hsla(28, 73%, 26%, 1);
--color-yellow-950: hsla(26, 83%, 14%, 1);
--color-lime-50: hsla(78, 92%, 95%, 1);
--color-lime-100: hsla(80, 89%, 89%, 1);
--color-lime-200: hsla(81, 88%, 80%, 1);
--color-lime-300: hsla(82, 85%, 67%, 1);
--color-lime-400: hsla(83, 78%, 55%, 1);
--color-lime-500: hsla(84, 81%, 44%, 1);
--color-lime-600: hsla(85, 85%, 35%, 1);
--color-lime-700: hsla(86, 78%, 27%, 1);
--color-lime-800: hsla(86, 69%, 23%, 1);
--color-lime-900: hsla(88, 61%, 20%, 1);
--color-lime-950: hsla(89, 80%, 10%, 1);
--color-green-50: hsla(138, 76%, 97%, 1);
--color-green-100: hsla(141, 84%, 93%, 1);
--color-green-200: hsla(141, 79%, 85%, 1);
--color-green-300: hsla(142, 77%, 73%, 1);
--color-green-400: hsla(142, 69%, 58%, 1);
--color-green-500: hsla(142, 71%, 45%, 1);
--color-green-600: hsla(142, 76%, 36%, 1);
--color-green-700: hsla(142, 72%, 29%, 1);
--color-green-800: hsla(143, 64%, 24%, 1);
--color-green-900: hsla(144, 61%, 20%, 1);
--color-green-950: hsla(145, 80%, 10%, 1);
--color-emerald-50: hsla(152, 81%, 96%, 1);
--color-emerald-100: hsla(149, 80%, 90%, 1);
--color-emerald-200: hsla(152, 76%, 80%, 1);
--color-emerald-300: hsla(156, 72%, 67%, 1);
--color-emerald-400: hsla(158, 64%, 52%, 1);
--color-emerald-500: hsla(160, 84%, 39%, 1);
--color-emerald-600: hsla(161, 94%, 30%, 1);
--color-emerald-700: hsla(163, 94%, 24%, 1);
--color-emerald-800: hsla(163, 88%, 20%, 1);
--color-emerald-900: hsla(164, 86%, 16%, 1);
--color-emerald-950: hsla(166, 91%, 9%, 1);
--color-teal-50: hsla(166, 76%, 97%, 1);
--color-teal-100: hsla(167, 85%, 89%, 1);
--color-teal-200: hsla(168, 84%, 78%, 1);
--color-teal-300: hsla(171, 77%, 64%, 1);
--color-teal-400: hsla(172, 66%, 50%, 1);
--color-teal-500: hsla(173, 80%, 40%, 1);
--color-teal-600: hsla(175, 84%, 32%, 1);
--color-teal-700: hsla(175, 77%, 26%, 1);
--color-teal-800: hsla(176, 69%, 22%, 1);
--color-teal-900: hsla(176, 61%, 19%, 1);
--color-teal-950: hsla(179, 84%, 10%, 1);
--color-cyan-50: hsla(183, 100%, 96%, 1);
--color-cyan-100: hsla(185, 96%, 90%, 1);
--color-cyan-200: hsla(186, 94%, 82%, 1);
--color-cyan-300: hsla(187, 92%, 69%, 1);
--color-cyan-400: hsla(188, 86%, 53%, 1);
--color-cyan-500: hsla(189, 94%, 43%, 1);
--color-cyan-600: hsla(192, 91%, 36%, 1);
--color-cyan-700: hsla(193, 82%, 31%, 1);
--color-cyan-800: hsla(194, 70%, 27%, 1);
--color-cyan-900: hsla(196, 64%, 24%, 1);
--color-cyan-950: hsla(197, 79%, 15%, 1);
--color-sky-50: hsla(204, 100%, 97%, 1);
--color-sky-100: hsla(204, 94%, 94%, 1);
--color-sky-200: hsla(201, 94%, 86%, 1);
--color-sky-300: hsla(199, 95%, 74%, 1);
--color-sky-400: hsla(198, 93%, 60%, 1);
--color-sky-500: hsla(199, 89%, 48%, 1);
--color-sky-600: hsla(200, 98%, 39%, 1);
--color-sky-700: hsla(201, 96%, 32%, 1);
--color-sky-800: hsla(201, 90%, 27%, 1);
--color-sky-900: hsla(202, 80%, 24%, 1);
--color-sky-950: hsla(204, 80%, 16%, 1);
--color-blue-50: hsla(214, 100%, 97%, 1);
--color-blue-100: hsla(214, 95%, 93%, 1);
--color-blue-200: hsla(213, 97%, 87%, 1);
--color-blue-300: hsla(212, 96%, 78%, 1);
--color-blue-400: hsla(213, 94%, 68%, 1);
--color-blue-500: hsla(217, 91%, 60%, 1);
--color-blue-600: hsla(221, 83%, 53%, 1);
--color-blue-700: hsla(224, 76%, 48%, 1);
--color-blue-800: hsla(226, 71%, 40%, 1);
--color-blue-900: hsla(224, 64%, 33%, 1);
--color-blue-950: hsla(226, 57%, 21%, 1);
--color-indigo-50: hsla(226, 100%, 97%, 1);
--color-indigo-100: hsla(226, 100%, 94%, 1);
--color-indigo-200: hsla(228, 96%, 89%, 1);
--color-indigo-300: hsla(230, 94%, 82%, 1);
--color-indigo-400: hsla(234, 89%, 74%, 1);
--color-indigo-500: hsla(239, 84%, 67%, 1);
--color-indigo-600: hsla(243, 75%, 59%, 1);
--color-indigo-700: hsla(245, 58%, 51%, 1);
--color-indigo-800: hsla(244, 55%, 41%, 1);
--color-indigo-900: hsla(242, 47%, 34%, 1);
--color-indigo-950: hsla(244, 47%, 20%, 1);
--color-violet-50: hsla(250, 100%, 98%, 1);
--color-violet-100: hsla(251, 91%, 95%, 1);
--color-violet-200: hsla(251, 95%, 92%, 1);
--color-violet-300: hsla(253, 95%, 85%, 1);
--color-violet-400: hsla(255, 92%, 76%, 1);
--color-violet-500: hsla(258, 90%, 66%, 1);
--color-violet-600: hsla(262, 83%, 58%, 1);
--color-violet-700: hsla(263, 70%, 50%, 1);
--color-violet-800: hsla(263, 69%, 42%, 1);
--color-violet-900: hsla(264, 67%, 35%, 1);
--color-violet-950: hsla(262, 78%, 23%, 1);
--color-purple-50: hsla(270, 100%, 98%, 1);
--color-purple-100: hsla(269, 100%, 95%, 1);
--color-purple-200: hsla(269, 100%, 92%, 1);
--color-purple-300: hsla(269, 97%, 85%, 1);
--color-purple-400: hsla(270, 95%, 75%, 1);
--color-purple-500: hsla(271, 91%, 65%, 1);
--color-purple-600: hsla(271, 81%, 56%, 1);
--color-purple-700: hsla(272, 72%, 47%, 1);
--color-purple-800: hsla(273, 67%, 39%, 1);
--color-purple-900: hsla(274, 66%, 32%, 1);
--color-purple-950: hsla(274, 87%, 21%, 1);
--color-fuchsia-50: hsla(289, 100%, 98%, 1);
--color-fuchsia-100: hsla(287, 100%, 95%, 1);
--color-fuchsia-200: hsla(288, 96%, 91%, 1);
--color-fuchsia-300: hsla(291, 93%, 83%, 1);
--color-fuchsia-400: hsla(292, 91%, 73%, 1);
--color-fuchsia-500: hsla(292, 84%, 61%, 1);
--color-fuchsia-600: hsla(293, 69%, 49%, 1);
--color-fuchsia-700: hsla(295, 72%, 40%, 1);
--color-fuchsia-800: hsla(295, 70%, 33%, 1);
--color-fuchsia-900: hsla(297, 64%, 28%, 1);
--color-fuchsia-950: hsla(297, 90%, 16%, 1);
--color-pink-50: hsla(327, 73%, 97%, 1);
--color-pink-100: hsla(326, 78%, 95%, 1);
--color-pink-200: hsla(326, 85%, 90%, 1);
--color-pink-300: hsla(327, 87%, 82%, 1);
--color-pink-400: hsla(329, 86%, 70%, 1);
--color-pink-500: hsla(330, 81%, 60%, 1);
--color-pink-600: hsla(333, 71%, 51%, 1);
--color-pink-700: hsla(335, 78%, 42%, 1);
--color-pink-800: hsla(336, 74%, 35%, 1);
--color-pink-900: hsla(336, 69%, 30%, 1);
--color-pink-950: hsla(336, 84%, 17%, 1);
--color-rose-50: hsla(356, 100%, 97%, 1);
--color-rose-100: hsla(356, 100%, 95%, 1);
--color-rose-200: hsla(353, 96%, 90%, 1);
--color-rose-300: hsla(353, 96%, 82%, 1);
--color-rose-400: hsla(351, 95%, 71%, 1);
--color-rose-500: hsla(350, 89%, 60%, 1);
--color-rose-600: hsla(347, 77%, 50%, 1);
--color-rose-700: hsla(345, 83%, 41%, 1);
--color-rose-800: hsla(343, 80%, 35%, 1);
--color-rose-900: hsla(342, 75%, 30%, 1);
--color-rose-950: hsla(343, 88%, 16%, 1);
--color-brand-50: hsla(132, 64%, 97%, 1);
--color-brand-100: hsla(132, 64%, 93%, 1);
--color-brand-200: hsla(132, 64%, 85%, 1);
--color-brand-300: hsla(132, 64%, 73%, 1);
--color-brand-400: hsla(132, 64%, 63%, 1);
--color-brand-500: hsla(132, 64%, 53%, 1);
--color-brand-600: hsla(132, 64%, 43%, 1);
--color-brand-700: hsla(132, 64%, 33%, 1);
--color-brand-800: hsla(132, 64%, 23%, 1);
--color-brand-900: hsla(132, 64%, 13%, 1);
--color-brand-950: hsla(132, 64%, 8%, 1);
/* ==================== */
/* Semantic Colors */
/* ==================== */
--color-primary: hsla(132, 64%, 53%, 1);
--color-primary-hover: hsla(132, 64%, 73%, 1);
--color-destructive: hsla(0, 84%, 60%, 1);
--color-destructive-hover: hsla(0, 91%, 71%, 1);
--color-background: hsla(0, 0%, 98%, 1);
--color-background-subtle: hsla(0, 0%, 0%, 0.02);
--color-foreground: hsla(0, 0%, 0%, 0.9);
--color-foreground-secondary: hsla(0, 0%, 0%, 0.6);
--color-foreground-muted: hsla(0, 0%, 0%, 0.4);
--color-card: hsla(0, 0%, 100%, 1);
--color-popover: hsla(0, 0%, 100%, 1);
--color-border: hsla(0, 0%, 0%, 0.1);
--color-border-hover: hsla(0, 0%, 0%, 0.2);
--color-border-active: hsla(0, 0%, 0%, 0.3);
--color-ring: color-mix(in srgb, hsla(132, 64%, 53%, 1) 40%, transparent);
--color-secondary: hsla(0, 0%, 0%, 0.05);
--color-secondary-hover: hsla(0, 0%, 0%, 0.85);
--color-secondary-active: hsla(0, 0%, 0%, 0.7);
--color-muted: hsla(0, 0%, 0%, 0.05);
--color-accent: hsla(0, 0%, 0%, 0.05);
--color-ghost-hover: hsla(0, 0%, 0%, 0.05);
--color-ghost-active: hsla(0, 0%, 0%, 0.1);
--color-sidebar: hsla(0, 0%, 100%, 1);
--color-sidebar-accent: hsla(0, 0%, 0%, 0.05);
--color-border-width-sm: 1px;
--color-border-width-md: 2px;
--color-border-width-lg: 3px;
/* ==================== */
/* Status Colors */
/* ==================== */
--color-error-base: hsla(0, 84%, 60%, 1);
--color-error-text: hsla(0, 70%, 35%, 1);
--color-error-bg: hsla(0, 86%, 97%, 1);
--color-error-text-hover: hsla(0, 74%, 42%, 1);
--color-error-bg-hover: hsla(0, 93%, 94%, 1);
--color-error-border: hsla(0, 96%, 89%, 1);
--color-error-border-hover: hsla(0, 94%, 82%, 1);
--color-error-active: hsla(0, 72%, 51%, 1);
--color-success-base: hsla(142, 71%, 45%, 1);
--color-success-text-hover: hsla(142, 72%, 29%, 1);
--color-success-bg: hsla(138, 76%, 97%, 1);
--color-success-bg-hover: hsla(141, 79%, 85%, 1);
--color-warning-base: hsla(43, 96%, 56%, 1);
--color-warning-text-hover: hsla(26, 90%, 37%, 1);
--color-warning-bg: hsla(48, 100%, 96%, 1);
--color-warning-bg-hover: hsla(48, 96%, 89%, 1);
--color-warning-active: hsla(32, 95%, 44%, 1);
/* ==================== */
/* Spacing */
/* ==================== */
--spacing-5xs: 0.25rem;
--spacing-4xs: 0.5rem;
--spacing-3xs: 0.75rem;
--spacing-2xs: 1rem;
--spacing-xs: 1.5rem;
--spacing-sm: 2rem;
--spacing-md: 2.5rem;
--spacing-lg: 3rem;
--spacing-xl: 3.5rem;
--spacing-2xl: 4rem;
--spacing-3xl: 4.5rem;
--spacing-4xl: 5rem;
--spacing-5xl: 5.5rem;
--spacing-6xl: 6rem;
--spacing-7xl: 6.5rem;
--spacing-8xl: 7rem;
/* ==================== */
/* Radius */
/* ==================== */
--radius-4xs: 0.25rem; /* 4px */
--radius-3xs: 0.5rem; /* 8px */
--radius-2xs: 0.75rem; /* 12px */
--radius-xs: 1rem; /* 16px */
--radius-sm: 1.5rem; /* 24px */
--radius-md: 2rem; /* 32px */
--radius-lg: 2.5rem; /* 40px */
--radius-xl: 3rem; /* 48px */
--radius-2xl: 3.5rem; /* 56px */
--radius-3xl: 4rem; /* 64px */
--radius-round: 999px; /* 完全圆角 */
/* ==================== */
/* Typography */
/* ==================== */
--font-family-heading: Inter;
--font-family-body: Inter;
--font-weight-regular: 400;
--font-weight-medium: 500;
--font-weight-bold: 700;
--font-size-body-xs: 0.75rem;
--font-size-body-sm: 0.875rem;
--font-size-body-md: 1rem;
--font-size-body-lg: 1.125rem;
--font-size-heading-xs: 1.25rem;
--font-size-heading-sm: 1.5rem;
--font-size-heading-md: 2rem;
--font-size-heading-lg: 2.5rem;
--font-size-heading-xl: 3rem;
--font-size-heading-2xl: 3.75rem;
--line-height-body-xs: 1.25rem;
--line-height-body-sm: 1.5rem;
--line-height-body-md: 1.5rem;
--line-height-body-lg: 1.75rem;
--line-height-heading-xs: 2rem;
--line-height-heading-sm: 2.5rem;
--line-height-heading-md: 3rem;
--line-height-heading-lg: 3.75rem;
--line-height-heading-xl: 5rem;
--paragraph-spacing-body-xs: 0.75rem;
--paragraph-spacing-body-sm: 0.875rem;
--paragraph-spacing-body-md: 1rem;
--paragraph-spacing-body-lg: 1.125rem;
--paragraph-spacing-heading-xs: 1.25rem;
--paragraph-spacing-heading-sm: 1.5rem;
--paragraph-spacing-heading-md: 2rem;
--paragraph-spacing-heading-lg: 2.5rem;
--paragraph-spacing-heading-xl: 3rem;
--paragraph-spacing-heading-2xl: 3.75rem;
}
/* ==================== */
/* Dark Mode */
/* ==================== */
@layer theme {
.dark {
--color-background: hsla(240, 6%, 10%, 1);
--color-background-subtle: hsla(0, 0%, 100%, 0.02);
--color-foreground: hsla(0, 0%, 100%, 0.9);
--color-foreground-secondary: hsla(0, 0%, 100%, 0.6);
--color-foreground-muted: hsla(0, 0%, 100%, 0.4);
--color-card: hsla(0, 0%, 0%, 1);
--color-popover: hsla(0, 0%, 0%, 1);
--color-border: hsla(0, 0%, 100%, 0.1);
--color-border-hover: hsla(0, 0%, 100%, 0.2);
--color-border-active: hsla(0, 0%, 100%, 0.3);
--color-ring: hsla(84, 81%, 44%, 0.4);
--color-secondary: hsla(0, 0%, 100%, 0.1);
--color-secondary-hover: hsla(0, 0%, 100%, 0.2);
--color-secondary-active: hsla(0, 0%, 100%, 0.25);
--color-muted: hsla(0, 0%, 100%, 0.1);
--color-accent: hsla(0, 0%, 100%, 0.1);
--color-ghost-hover: hsla(0, 0%, 100%, 0.1);
--color-ghost-active: hsla(0, 0%, 100%, 0.15);
--color-sidebar: hsla(0, 0%, 0%, 1);
--color-sidebar-accent: hsla(0, 0%, 100%, 0.1);
--color-error-base: hsla(0, 91%, 71%, 1);
--color-error-text: hsla(0, 93%, 94%, 1);
--color-error-bg: hsla(0, 63%, 31%, 1);
--color-error-text-hover: hsla(0, 96%, 89%, 1);
--color-error-bg-hover: hsla(0, 70%, 35%, 1);
--color-error-border: hsla(0, 74%, 42%, 1);
--color-error-border-hover: hsla(0, 72%, 51%, 1);
--color-error-active: hsla(0, 94%, 82%, 1);
--color-success-base: hsla(142, 69%, 58%, 1);
--color-success-text-hover: hsla(141, 79%, 85%, 1);
--color-success-bg: hsla(144, 61%, 20%, 1);
--color-success-bg-hover: hsla(143, 64%, 24%, 1);
--color-warning-base: hsla(43, 96%, 56%, 1);
--color-warning-text-hover: hsla(48, 97%, 77%, 1);
--color-warning-bg: hsla(22, 78%, 26%, 1);
--color-warning-bg-hover: hsla(23, 83%, 31%, 1);
--color-warning-active: hsla(32, 95%, 44%, 1);
}
}
/* ==================== */
/* Base Styles */
/* ==================== */
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}

View File

@@ -0,0 +1,870 @@
:root {
/* Typography: Desktop mode */
--Font_family--Heading: Inter;
--Font_weight--Regular: 400px;
--Font_size--Heading--2xl: 60px;
--Font_size--Heading--xl: 48px;
--Font_size--Heading--lg: 40px;
--Font_size--Heading--md: 32px;
--Font_size--Heading--sm: 24px;
--Font_size--Heading--xs: 20px;
--Line_height--Heading--xl: 80px;
--Line_height--Body--lg: 28px;
--Line_height--Body--md: 24px;
--Line_height--Body--sm: 24px;
--Line_height--Body--xs: 20px;
--Paragraph_spacing--Body--lg: 18px;
--Paragraph_spacing--Body--md: 16px;
--Paragraph_spacing--Body--sm: 14px;
--Paragraph_spacing--Body--xs: 12px;
--Line_height--Heading--lg: 60px;
--Line_height--Heading--md: 48px;
--Line_height--Heading--sm: 40px;
--Line_height--Heading--xs: 32px;
--Font_size--Body--lg: 18px;
--Font_size--Body--md: 16px;
--Font_size--Body--sm: 14px;
--Font_size--Body--xs: 12px;
--Font_weight--Italic: 400px;
--Font_weight--Medium: 500px;
--Font_weight--Bold: 700px;
--Font_family--Body: Inter;
--Paragraph_spacing--Heading--2xl: 60px;
--Paragraph_spacing--Heading--xl: 48px;
--Paragraph_spacing--Heading--lg: 40px;
--Paragraph_spacing--Heading--md: 32px;
--Paragraph_spacing--Heading--sm: 24px;
--Paragraph_spacing--Heading--xs: 20px;
--typography_components--h1--font-family: Inter;
--typography_components--h2--font-family: Inter;
--typography_components--h2--font-size: 30px;
--typography_components--h2--line-height: 36px;
--typography_components--h2--font-weight: 600;
--typography_components--h2--letter-spacing: -0.4000000059604645px;
--typography_components--h1--font-size: 36px;
--typography_components--h1--font-size-lg: 48px;
--typography_components--h1--line-height: 40px;
--typography_components--h1--font-weight: 800;
--typography_components--h1--letter-spacing: -0.4000000059604645px;
--typography_components--h3--font-family: Inter;
--typography_components--h3--font-size: 24px;
--typography_components--h3--line-height: 32px;
--typography_components--h3--font-weight: 600;
--typography_components--h3--letter-spacing: -0.4000000059604645px;
--typography_components--h4--font-family: Inter;
--typography_components--h4--font-size: 20px;
--typography_components--h4--line-height: 28px;
--typography_components--h4--font-weight: 600;
--typography_components--h4--letter-spacing: -0.4000000059604645px;
--typography_components--p--font-family: Inter;
--typography_components--p--font-size: 16px;
--typography_components--p--line-height: 28px;
--typography_components--p--font-weight: 400;
--typography_components--p--letter-spacing: 0px;
--typography_components--blockquote--font-family: Inter;
--typography_components--blockquote--font-size: 16px;
--typography_components--blockquote--line-height: 24px;
--typography_components--blockquote--letter-spacing: 0px;
--typography_components--blockquote--font-style: italic;
--typography_components--list--font-family: Inter;
--typography_components--list--font-size: 16px;
--typography_components--list--line-height: 28px;
--typography_components--list--letter-spacing: 0px;
--typography_components--inline_code--font-family: Menlo;
--typography_components--inline_code--font-size: 14px;
--typography_components--inline_code--line-height: 20px;
--typography_components--inline_code--font-weight: 600;
--typography_components--inline_code--letter-spacing: 0px;
--typography_components--lead--font-family: Inter;
--typography_components--lead--font-size: 20px;
--typography_components--lead--line-height: 28px;
--typography_components--lead--font-weight: 400;
--typography_components--lead--letter-spacing: 0px;
--typography_components--large--font-family: Inter;
--typography_components--large--font-size: 18px;
--typography_components--large--line-height: 28px;
--typography_components--large--font-weight: 600;
--typography_components--large--letter-spacing: 0px;
--typography_components--small--font-family: Inter;
--typography_components--small--font-size: 14px;
--typography_components--small--line-height: 14px;
--typography_components--small--font-weight: 500;
--typography_components--table--font-family: Inter;
--typography_components--table--font-size: 16px;
--typography_components--table--font-weight: 400;
--typography_components--table--font-weight-bold: 700;
--typography_components--table--letter-spacing: 0px;
/* Spacing and sizing: Desktop */
--Border_width--sm: 1px;
--Border_width--md: 2px;
--Border_width--lg: 3px;
--Radius--4xs: 4px;
--Radius--3xs: 8px;
--Radius--2xs: 12px;
--Radius--xs: 16px;
--Radius--sm: 24px;
--Radius--md: 32px;
--Radius--lg: 40px;
--Radius--xl: 48px;
--Radius--2xl: 56px;
--Radius--3xl: 64px;
--Radius--round: 999px;
--Spacing--5xs: 4px;
--Spacing--4xs: 8px;
--Spacing--3xs: 12px;
--Spacing--2xs: 16px;
--Spacing--xs: 24px;
--Spacing--sm: 32px;
--Spacing--md: 40px;
--Spacing--lg: 48px;
--Spacing--xl: 56px;
--Spacing--2xl: 64px;
--Spacing--3xl: 72px;
--Spacing--4xl: 80px;
--Spacing--5xl: 88px;
--Spacing--6xl: 96px;
--Spacing--7xl: 104px;
--Spacing--8xl: 112px;
--Sizing--5xs: 4px;
--Sizing--4xs: 8px;
--Sizing--3xs: 12px;
--Sizing--2xs: 16px;
--Sizing--xs: 24px;
--Sizing--sm: 32px;
--Sizing--md: 40px;
--Sizing--lg: 48px;
--Sizing--xl: 56px;
--Sizing--2xl: 64px;
--Sizing--3xl: 72px;
--Sizing--4xl: 80px;
--Sizing--5xl: 88px;
/* Color: Light mode */
--Opacity--Red--Red-100: var(--Primitive--Red--600);
--Opacity--Red--Red-80: hsla(0, 72%, 51%, 0.8);
--Opacity--Red--Red-60: hsla(0, 72%, 51%, 0.6);
--Opacity--Red--Red-40: hsla(0, 72%, 51%, 0.4);
--Opacity--Red--Red-20: hsla(0, 72%, 51%, 0.2);
--Opacity--Red--Red-10: hsla(0, 72%, 51%, 0.1);
--Opacity--Green--Green-100: var(--Primitive--Green--600);
--Opacity--Green--Green-80: hsla(142, 76%, 36%, 0.8);
--Opacity--Green--Green-60: hsla(142, 76%, 36%, 0.6);
--Opacity--Green--Green-40: hsla(142, 76%, 36%, 0.4);
--Opacity--Green--Green-20: hsla(142, 76%, 36%, 0.2);
--Opacity--Green--Green-10: hsla(142, 76%, 36%, 0.1);
--Opacity--Yellow--Yellow-100: var(--Primitive--Amber--400);
--Opacity--Yellow--Yellow-80: hsla(48, 96%, 53%, 0.8);
--Opacity--Yellow--Yellow-60: hsla(48, 96%, 53%, 0.6);
--Opacity--Yellow--Yellow-40: hsla(48, 96%, 53%, 0.4);
--Opacity--Yellow--Yellow-20: hsla(48, 96%, 53%, 0.2);
--Opacity--Yellow--Yellow-10: hsla(48, 96%, 53%, 0.1);
--Opacity--Violet--Violet-100: var(--Primitive--Violet--500);
--Opacity--Violet--Violet-80: hsla(258, 90%, 66%, 0.8);
--Opacity--Violet--Violet-60: hsla(258, 90%, 66%, 0.6);
--Opacity--Violet--Violet-40: hsla(258, 90%, 66%, 0.4);
--Opacity--Violet--Violet-20: hsla(258, 90%, 66%, 0.2);
--Opacity--Violet--Violet-10: hsla(258, 90%, 66%, 0.1);
--Opacity--Indigo--Indigo-100: var(--Primitive--Indigo--500);
--Opacity--Indigo--Indigo-80: hsla(239, 84%, 67%, 0.8);
--Opacity--Indigo--Indigo-60: hsla(239, 84%, 67%, 0.6);
--Opacity--Indigo--Indigo-40: hsla(239, 84%, 67%, 0.4);
--Opacity--Indigo--Indigo-20: hsla(239, 84%, 67%, 0.2);
--Opacity--Indigo--Indigo-10: hsla(239, 84%, 67%, 0.1);
--Opacity--Blue--Blue-100: var(--Primitive--Blue--500);
--Opacity--Blue--Blue-80: hsla(217, 91%, 60%, 0.8);
--Opacity--Blue--Blue-60: hsla(217, 91%, 60%, 0.6);
--Opacity--Blue--Blue-40: hsla(217, 91%, 60%, 0.4);
--Opacity--Blue--Blue-20: hsla(217, 91%, 60%, 0.2);
--Opacity--Blue--Blue-10: hsla(217, 91%, 60%, 0.1);
--Opacity--Grey--Grey-100: var(--Primitive--Gray--500);
--Opacity--Grey--Grey-80: hsla(220, 9%, 46%, 0.8);
--Opacity--Grey--Grey-60: hsla(220, 9%, 46%, 0.6);
--Opacity--Grey--Grey-40: hsla(220, 9%, 46%, 0.4);
--Opacity--Grey--Grey-20: hsla(220, 9%, 46%, 0.2);
--Opacity--Grey--Grey-10: hsla(220, 9%, 46%, 0.1);
--Opacity--White--White-100: var(--Primitive--White);
--Opacity--White--White-80: hsla(0, 0%, 100%, 0.8);
--Opacity--White--White-60: hsla(0, 0%, 100%, 0.6);
--Opacity--White--White-40: hsla(0, 0%, 100%, 0.4);
--Opacity--White--White-20: hsla(0, 0%, 100%, 0.2);
--Opacity--White--White-10: hsla(0, 0%, 100%, 0.1);
--Opacity--White--White-0: hsla(0, 0%, 100%, 0);
--Status--Error--colorErrorBg: var(--color--Red--50);
--Status--Error--colorErrorBgHover: var(--color--Red--100);
--Status--Error--colorErrorBorder: var(--color--Red--200);
--Status--Error--colorErrorBorderHover: var(--color--Red--300);
--Status--Error--colorErrorBase: var(--color--Red--500);
--Status--Error--colorErrorActive: var(--color--Red--600);
--Status--Error--colorErrorTextHover: var(--color--Red--700);
--Status--Error--colorErrorText: var(--color--Red--800);
--Status--Success--colorSuccessBg: var(--color--Green--50);
--Status--Success--colorSuccessBgHover: var(--color--Green--100);
--Status--Success--colorSuccessBase: var(--color--Green--500);
--Status--Success--colorSuccessTextHover: var(--color--Green--700);
--Status--Warning--colorWarningBg: var(--color--Yellow--50);
--Status--Warning--colorWarningBgHover: var(--color--Yellow--100);
--Status--Warning--colorWarningBase: var(--color--Yellow--500);
--Status--Warning--colorWarningActive: var(--color--Yellow--600);
--Status--Warning--colorWarningTextHover: var(--color--Yellow--700);
--Primitive--Black: hsla(0, 0%, 0%, 1);
--Primitive--White: hsla(0, 0%, 100%, 1);
--Brand--Base_Colors--Primary: var(--Primitive--Lime--500);
--Primitive--Neutral--50: hsla(0, 0%, 98%, 1);
--Primitive--Neutral--100: hsla(0, 0%, 96%, 1);
--Primitive--Neutral--200: hsla(0, 0%, 90%, 1);
--Primitive--Neutral--300: hsla(0, 0%, 83%, 1);
--Primitive--Neutral--400: hsla(0, 0%, 64%, 1);
--Primitive--Neutral--500: hsla(0, 0%, 45%, 1);
--Primitive--Neutral--600: hsla(215, 14%, 34%, 1);
--Primitive--Neutral--700: hsla(0, 0%, 25%, 1);
--Primitive--Neutral--800: hsla(0, 0%, 15%, 1);
--Primitive--Neutral--900: hsla(0, 0%, 9%, 1);
--Primitive--Neutral--950: hsla(0, 0%, 4%, 1);
--Primitive--Stone--50: hsla(60, 9%, 98%, 1);
--Primitive--Stone--100: hsla(60, 5%, 96%, 1);
--Primitive--Stone--200: hsla(20, 6%, 90%, 1);
--Primitive--Stone--300: hsla(24, 6%, 83%, 1);
--Primitive--Stone--400: hsla(24, 5%, 64%, 1);
--Primitive--Stone--500: hsla(25, 5%, 45%, 1);
--Primitive--Stone--600: hsla(33, 5%, 32%, 1);
--Primitive--Stone--700: hsla(30, 6%, 25%, 1);
--Primitive--Stone--800: hsla(12, 6%, 15%, 1);
--Primitive--Stone--900: hsla(24, 10%, 10%, 1);
--Primitive--Stone--950: hsla(20, 14%, 4%, 1);
--Primitive--Zinc--50: hsla(0, 0%, 98%, 1);
--Primitive--Zinc--100: hsla(240, 5%, 96%, 1);
--Primitive--Zinc--200: hsla(240, 6%, 90%, 1);
--Primitive--Zinc--300: hsla(240, 5%, 84%, 1);
--Primitive--Zinc--400: hsla(240, 5%, 65%, 1);
--Primitive--Zinc--500: hsla(240, 4%, 46%, 1);
--Primitive--Zinc--600: hsla(240, 5%, 34%, 1);
--Primitive--Zinc--700: hsla(240, 5%, 26%, 1);
--Primitive--Zinc--800: hsla(240, 4%, 16%, 1);
--Primitive--Zinc--900: hsla(240, 6%, 10%, 1);
--Primitive--Zinc--950: hsla(240, 10%, 4%, 1);
--Primitive--Slate--50: hsla(210, 40%, 98%, 1);
--Primitive--Slate--100: hsla(210, 40%, 96%, 1);
--Primitive--Slate--200: hsla(214, 32%, 91%, 1);
--Primitive--Slate--300: hsla(213, 27%, 84%, 1);
--Primitive--Slate--400: hsla(215, 20%, 65%, 1);
--Primitive--Slate--500: hsla(215, 16%, 47%, 1);
--Primitive--Slate--600: hsla(215, 19%, 35%, 1);
--Primitive--Slate--700: hsla(215, 25%, 27%, 1);
--Primitive--Slate--800: hsla(217, 33%, 17%, 1);
--Primitive--Slate--900: hsla(222, 47%, 11%, 1);
--Primitive--Slate--950: hsla(229, 84%, 5%, 1);
--Primitive--Gray--50: hsla(210, 20%, 98%, 1);
--Primitive--Gray--100: hsla(220, 14%, 96%, 1);
--Primitive--Gray--200: hsla(220, 13%, 91%, 1);
--Primitive--Gray--300: hsla(216, 12%, 84%, 1);
--Primitive--Gray--400: hsla(218, 11%, 65%, 1);
--Primitive--Gray--500: hsla(220, 9%, 46%, 1);
--Primitive--Gray--600: hsla(0, 0%, 32%, 1);
--Primitive--Gray--700: hsla(217, 19%, 27%, 1);
--Primitive--Gray--800: hsla(215, 28%, 17%, 1);
--Primitive--Gray--900: hsla(221, 39%, 11%, 1);
--Primitive--Gray--950: hsla(224, 71%, 4%, 1);
--Primitive--Red--50: hsla(0, 86%, 97%, 1);
--Primitive--Red--100: hsla(0, 93%, 94%, 1);
--Primitive--Red--200: hsla(0, 96%, 89%, 1);
--Primitive--Red--300: hsla(0, 94%, 82%, 1);
--Primitive--Red--400: hsla(0, 91%, 71%, 1);
--Primitive--Red--500: hsla(0, 84%, 60%, 1);
--Primitive--Red--600: hsla(0, 72%, 51%, 1);
--Primitive--Red--700: hsla(0, 74%, 42%, 1);
--Primitive--Red--800: hsla(0, 70%, 35%, 1);
--Primitive--Red--900: hsla(0, 63%, 31%, 1);
--Primitive--Red--950: hsla(0, 75%, 15%, 1);
--Primitive--Orange--50: hsla(33, 100%, 96%, 1);
--Primitive--Orange--100: hsla(34, 100%, 92%, 1);
--Primitive--Orange--200: hsla(32, 98%, 83%, 1);
--Primitive--Orange--300: hsla(31, 97%, 72%, 1);
--Primitive--Orange--400: hsla(27, 96%, 61%, 1);
--Primitive--Orange--500: hsla(25, 95%, 53%, 1);
--Primitive--Orange--600: hsla(21, 90%, 48%, 1);
--Primitive--Orange--700: hsla(17, 88%, 40%, 1);
--Primitive--Orange--800: hsla(15, 79%, 34%, 1);
--Primitive--Orange--900: hsla(15, 75%, 28%, 1);
--Primitive--Orange--950: hsla(13, 81%, 15%, 1);
--Primitive--Amber--50: hsla(48, 100%, 96%, 1);
--Primitive--Amber--100: hsla(48, 96%, 89%, 1);
--Primitive--Amber--200: hsla(48, 97%, 77%, 1);
--Primitive--Amber--300: hsla(46, 97%, 65%, 1);
--Primitive--Amber--400: hsla(43, 96%, 56%, 1);
--Primitive--Amber--500: hsla(38, 92%, 50%, 1);
--Primitive--Amber--600: hsla(32, 95%, 44%, 1);
--Primitive--Amber--700: hsla(26, 90%, 37%, 1);
--Primitive--Amber--800: hsla(23, 83%, 31%, 1);
--Primitive--Amber--900: hsla(22, 78%, 26%, 1);
--Primitive--Amber--950: hsla(21, 92%, 14%, 1);
--Primitive--Yellow--50: hsla(55, 92%, 95%, 1);
--Primitive--Yellow--100: hsla(55, 97%, 88%, 1);
--Primitive--Yellow--200: hsla(53, 98%, 77%, 1);
--Primitive--Yellow--300: hsla(50, 98%, 64%, 1);
--Primitive--Yellow--400: hsla(48, 96%, 53%, 1);
--Primitive--Yellow--500: hsla(45, 93%, 47%, 1);
--Primitive--Yellow--600: hsla(41, 96%, 40%, 1);
--Primitive--Yellow--700: hsla(35, 92%, 33%, 1);
--Primitive--Yellow--800: hsla(32, 81%, 29%, 1);
--Primitive--Yellow--900: hsla(28, 73%, 26%, 1);
--Primitive--Yellow--950: hsla(26, 83%, 14%, 1);
--Primitive--Lime--50: hsla(78, 92%, 95%, 1);
--Primitive--Lime--100: hsla(80, 89%, 89%, 1);
--Primitive--Lime--200: hsla(81, 88%, 80%, 1);
--Primitive--Lime--300: hsla(82, 85%, 67%, 1);
--Primitive--Lime--400: hsla(83, 78%, 55%, 1);
--Primitive--Lime--500: hsla(84, 81%, 44%, 1);
--Primitive--Lime--600: hsla(85, 85%, 35%, 1);
--Primitive--Lime--700: hsla(86, 78%, 27%, 1);
--Primitive--Lime--800: hsla(86, 69%, 23%, 1);
--Primitive--Lime--900: hsla(88, 61%, 20%, 1);
--Primitive--Lime--950: hsla(89, 80%, 10%, 1);
--Primitive--Green--50: hsla(138, 76%, 97%, 1);
--Primitive--Green--100: hsla(141, 84%, 93%, 1);
--Primitive--Green--200: hsla(141, 79%, 85%, 1);
--Primitive--Green--300: hsla(142, 77%, 73%, 1);
--Primitive--Green--400: hsla(142, 69%, 58%, 1);
--Primitive--Green--500: hsla(142, 71%, 45%, 1);
--Primitive--Green--600: hsla(142, 76%, 36%, 1);
--Primitive--Green--700: hsla(142, 72%, 29%, 1);
--Primitive--Green--800: hsla(143, 64%, 24%, 1);
--Primitive--Green--900: hsla(144, 61%, 20%, 1);
--Primitive--Green--950: hsla(145, 80%, 10%, 1);
--Primitive--Emerald--50: hsla(152, 81%, 96%, 1);
--Primitive--Emerald--100: hsla(149, 80%, 90%, 1);
--Primitive--Emerald--200: hsla(152, 76%, 80%, 1);
--Primitive--Emerald--300: hsla(156, 72%, 67%, 1);
--Primitive--Emerald--400: hsla(158, 64%, 52%, 1);
--Primitive--Emerald--500: hsla(160, 84%, 39%, 1);
--Primitive--Emerald--600: hsla(161, 94%, 30%, 1);
--Primitive--Emerald--700: hsla(163, 94%, 24%, 1);
--Primitive--Emerald--800: hsla(163, 88%, 20%, 1);
--Primitive--Emerald--900: hsla(164, 86%, 16%, 1);
--Primitive--Emerald--950: hsla(166, 91%, 9%, 1);
--Primitive--Teal--50: hsla(166, 76%, 97%, 1);
--Primitive--Teal--100: hsla(167, 85%, 89%, 1);
--Primitive--Teal--200: hsla(168, 84%, 78%, 1);
--Primitive--Teal--300: hsla(171, 77%, 64%, 1);
--Primitive--Teal--400: hsla(172, 66%, 50%, 1);
--Primitive--Teal--500: hsla(173, 80%, 40%, 1);
--Primitive--Teal--600: hsla(175, 84%, 32%, 1);
--Primitive--Teal--700: hsla(175, 77%, 26%, 1);
--Primitive--Teal--800: hsla(176, 69%, 22%, 1);
--Primitive--Teal--900: hsla(176, 61%, 19%, 1);
--Primitive--Teal--950: hsla(179, 84%, 10%, 1);
--Primitive--Cyan--50: hsla(183, 100%, 96%, 1);
--Primitive--Cyan--100: hsla(185, 96%, 90%, 1);
--Primitive--Cyan--200: hsla(186, 94%, 82%, 1);
--Primitive--Cyan--300: hsla(187, 92%, 69%, 1);
--Primitive--Cyan--400: hsla(188, 86%, 53%, 1);
--Primitive--Cyan--500: hsla(189, 94%, 43%, 1);
--Primitive--Cyan--600: hsla(192, 91%, 36%, 1);
--Primitive--Cyan--700: hsla(193, 82%, 31%, 1);
--Primitive--Cyan--800: hsla(194, 70%, 27%, 1);
--Primitive--Cyan--900: hsla(196, 64%, 24%, 1);
--Primitive--Cyan--950: hsla(197, 79%, 15%, 1);
--Primitive--Sky--50: hsla(204, 100%, 97%, 1);
--Primitive--Sky--100: hsla(204, 94%, 94%, 1);
--Primitive--Sky--200: hsla(201, 94%, 86%, 1);
--Primitive--Sky--300: hsla(199, 95%, 74%, 1);
--Primitive--Sky--400: hsla(198, 93%, 60%, 1);
--Primitive--Sky--500: hsla(199, 89%, 48%, 1);
--Primitive--Sky--600: hsla(200, 98%, 39%, 1);
--Primitive--Sky--700: hsla(201, 96%, 32%, 1);
--Primitive--Sky--800: hsla(201, 90%, 27%, 1);
--Primitive--Sky--900: hsla(202, 80%, 24%, 1);
--Primitive--Sky--950: hsla(204, 80%, 16%, 1);
--Primitive--Blue--50: hsla(214, 100%, 97%, 1);
--Primitive--Blue--100: hsla(214, 95%, 93%, 1);
--Primitive--Blue--200: hsla(213, 97%, 87%, 1);
--Primitive--Blue--300: hsla(212, 96%, 78%, 1);
--Primitive--Blue--400: hsla(213, 94%, 68%, 1);
--Primitive--Blue--500: hsla(217, 91%, 60%, 1);
--Primitive--Blue--600: hsla(221, 83%, 53%, 1);
--Primitive--Blue--700: hsla(224, 76%, 48%, 1);
--Primitive--Blue--800: hsla(226, 71%, 40%, 1);
--Primitive--Blue--900: hsla(224, 64%, 33%, 1);
--Primitive--Blue--950: hsla(226, 57%, 21%, 1);
--Primitive--Indigo--50: hsla(226, 100%, 97%, 1);
--Primitive--Indigo--100: hsla(226, 100%, 94%, 1);
--Primitive--Indigo--200: hsla(228, 96%, 89%, 1);
--Primitive--Indigo--300: hsla(230, 94%, 82%, 1);
--Primitive--Indigo--400: hsla(234, 89%, 74%, 1);
--Primitive--Indigo--500: hsla(239, 84%, 67%, 1);
--Primitive--Indigo--600: hsla(243, 75%, 59%, 1);
--Primitive--Indigo--700: hsla(245, 58%, 51%, 1);
--Primitive--Indigo--800: hsla(244, 55%, 41%, 1);
--Primitive--Indigo--900: hsla(242, 47%, 34%, 1);
--Primitive--Indigo--950: hsla(244, 47%, 20%, 1);
--Primitive--Violet--50: hsla(250, 100%, 98%, 1);
--Primitive--Violet--100: hsla(251, 91%, 95%, 1);
--Primitive--Violet--200: hsla(251, 95%, 92%, 1);
--Primitive--Violet--300: hsla(253, 95%, 85%, 1);
--Primitive--Violet--400: hsla(255, 92%, 76%, 1);
--Primitive--Violet--500: hsla(258, 90%, 66%, 1);
--Primitive--Violet--600: hsla(262, 83%, 58%, 1);
--Primitive--Violet--700: hsla(263, 70%, 50%, 1);
--Primitive--Violet--800: hsla(263, 69%, 42%, 1);
--Primitive--Violet--900: hsla(264, 67%, 35%, 1);
--Primitive--Violet--950: hsla(262, 78%, 23%, 1);
--Primitive--Purple--50: hsla(270, 100%, 98%, 1);
--Primitive--Purple--100: hsla(269, 100%, 95%, 1);
--Primitive--Purple--200: hsla(269, 100%, 92%, 1);
--Primitive--Purple--300: hsla(269, 97%, 85%, 1);
--Primitive--Purple--400: hsla(270, 95%, 75%, 1);
--Primitive--Purple--500: hsla(271, 91%, 65%, 1);
--Primitive--Purple--600: hsla(271, 81%, 56%, 1);
--Primitive--Purple--700: hsla(272, 72%, 47%, 1);
--Primitive--Purple--800: hsla(273, 67%, 39%, 1);
--Primitive--Purple--900: hsla(274, 66%, 32%, 1);
--Primitive--Purple--950: hsla(274, 87%, 21%, 1);
--Primitive--Fuchsia--50: hsla(289, 100%, 98%, 1);
--Primitive--Fuchsia--100: hsla(287, 100%, 95%, 1);
--Primitive--Fuchsia--200: hsla(288, 96%, 91%, 1);
--Primitive--Fuchsia--300: hsla(291, 93%, 83%, 1);
--Primitive--Fuchsia--400: hsla(292, 91%, 73%, 1);
--Primitive--Fuchsia--500: hsla(292, 84%, 61%, 1);
--Primitive--Fuchsia--600: hsla(293, 69%, 49%, 1);
--Primitive--Fuchsia--700: hsla(295, 72%, 40%, 1);
--Primitive--Fuchsia--800: hsla(295, 70%, 33%, 1);
--Primitive--Fuchsia--900: hsla(297, 64%, 28%, 1);
--Primitive--Fuchsia--950: hsla(297, 90%, 16%, 1);
--Primitive--Pink--50: hsla(327, 73%, 97%, 1);
--Primitive--Pink--100: hsla(326, 78%, 95%, 1);
--Primitive--Pink--200: hsla(326, 85%, 90%, 1);
--Primitive--Pink--300: hsla(327, 87%, 82%, 1);
--Primitive--Pink--400: hsla(329, 86%, 70%, 1);
--Primitive--Pink--500: hsla(330, 81%, 60%, 1);
--Primitive--Pink--600: hsla(333, 71%, 51%, 1);
--Primitive--Pink--700: hsla(335, 78%, 42%, 1);
--Primitive--Pink--800: hsla(336, 74%, 35%, 1);
--Primitive--Pink--900: hsla(336, 69%, 30%, 1);
--Primitive--Pink--950: hsla(336, 84%, 17%, 1);
--Primitive--Rose--50: hsla(356, 100%, 97%, 1);
--Primitive--Rose--100: hsla(356, 100%, 95%, 1);
--Primitive--Rose--200: hsla(353, 96%, 90%, 1);
--Primitive--Rose--300: hsla(353, 96%, 82%, 1);
--Primitive--Rose--400: hsla(351, 95%, 71%, 1);
--Primitive--Rose--500: hsla(350, 89%, 60%, 1);
--Primitive--Rose--600: hsla(347, 77%, 50%, 1);
--Primitive--Rose--700: hsla(345, 83%, 41%, 1);
--Primitive--Rose--800: hsla(343, 80%, 35%, 1);
--Primitive--Rose--900: hsla(342, 75%, 30%, 1);
--Primitive--Rose--950: hsla(343, 88%, 16%, 1);
--Brand--Base_Colors--Destructive: var(--Primitive--Red--500);
--Brand--Base_Colors--Success: var(--Primitive--Green--500);
--Brand--Base_Colors--Warning: var(--Primitive--Amber--500);
--Brand--Base_Colors--White: var(--Primitive--White);
--Brand--Base_Colors--Black: var(--Primitive--Black);
--Brand--Semantic_Colors--Background: var(--Primitive--Zinc--50); /*页面背景色:应用在整个页面的最底层。*/
--Brand--Semantic_Colors--Background-subtle: hsla(
0,
0%,
0%,
0.02
); /*细微背景色:用于需要与主背景有微弱区分的区域,如代码块背景。*/
--Brand--Semantic_Colors--Foreground: hsla(0, 0%, 0%, 0.9); /*主要前景/文字色:用于正文、标题等。*/
--Brand--Semantic_Colors--Foreground-secondary: hsla(0, 0%, 0%, 0.6); /*次要前景/文字色:用于辅助性文本、描述。*/
--Brand--Semantic_Colors--Foreground-muted: hsla(0, 0%, 0%, 0.4); /*静默前景/文字色:用于禁用状态的文字、占位符。*/
--Brand--Semantic_Colors--Border: hsla(0, 0%, 0%, 0.1); /*默认边框色:用于卡片、输入框、分隔线。*/
--Brand--Semantic_Colors--Border-hover: hsla(0, 0%, 0%, 0.2); /*激活边框色:用于元素被按下或激活时的边框。*/
--Brand--Semantic_Colors--Border-active: hsla(0, 0%, 0%, 0.3); /*激活边框色:用于元素被按下或激活时的边框。*/
--Brand--Semantic_Colors--Ring: hsla(
84,
81%,
44%,
0.4
); /*聚焦环颜色:用于输入框等元素在聚焦 (Focus) 状态下的外发光。*/
--Brand--UI_Element_Colors--Modal--Backdrop: hsla(0, 0%, 0%, 0.4);
--Brand--UI_Element_Colors--Modal--Thumb: hsla(0, 0%, 0%, 0.2);
--Brand--UI_Element_Colors--Modal--Thumb_Hover: hsla(0, 0%, 0%, 0.3);
--Brand--UI_Element_Colors--Icon--Default: var(--Brand--Semantic_Colors--Foreground-secondary);
--Brand--UI_Element_Colors--Icon--Hover: var(--Brand--Semantic_Colors--Foreground);
--Brand--UI_Element_Colors--Input_Select--Background: var(--Brand--Base_Colors--White);
--Brand--UI_Element_Colors--Input_Select--Border: var(--Brand--Semantic_Colors--Border);
--Brand--UI_Element_Colors--Input_Select--Border_Hover: var(--Brand--Semantic_Colors--Border-hover);
--Brand--UI_Element_Colors--Input_Select--Border_Focus: var(--Brand--Base_Colors--Primary);
--Brand--UI_Element_Colors--Primary_Button--Background: var(--Brand--Base_Colors--Primary);
--Brand--UI_Element_Colors--Card_Container--Background: var(--Brand--Base_Colors--White);
--Brand--UI_Element_Colors--Card_Container--Border: var(--Brand--Semantic_Colors--Border);
--Brand--UI_Element_Colors--Ghost_Button--Background: hsla(0, 0%, 0%, 0);
--Brand--UI_Element_Colors--Ghost_Button--Text: var(--Brand--Semantic_Colors--Foreground);
--Brand--UI_Element_Colors--Ghost_Button--Background_Hover: hsla(0, 0%, 0%, 0.05);
--Brand--UI_Element_Colors--Ghost_Button--Background_Active: hsla(0, 0%, 0%, 0.1);
--Brand--UI_Element_Colors--Secondary_Button--Background: hsla(0, 0%, 0%, 0.05);
--Brand--UI_Element_Colors--Secondary_Button--Text: var(--Brand--Semantic_Colors--Foreground);
--Brand--UI_Element_Colors--Secondary_Button--Background_Hover: hsla(0, 0%, 0%, 0.85);
--Brand--UI_Element_Colors--Secondary_Button--Background_Active: hsla(0, 0%, 0%, 0.7);
--Brand--UI_Element_Colors--Secondary_Button--Border: var(--Brand--Semantic_Colors--Border);
--Brand--UI_Element_Colors--Primary_Button--Text: var(--Brand--Base_Colors--White);
--Brand--UI_Element_Colors--Primary_Button--Background_Hover: hsla(84, 81%, 44%, 0.85);
--Brand--UI_Element_Colors--Primary_Button--2nd_Background: hsla(84, 81%, 44%, 0.1);
--Brand--UI_Element_Colors--Primary_Button--3rd_Background: hsla(84, 81%, 44%, 0.05);
--Brand--UI_Element_Colors--Primary_Button--Background_Active: hsla(84, 81%, 44%, 0.7);
--Boolean: false;
/* Color: Dark mode */
--Opacity--Red--Red-100: var(--Primitive--Red--600);
--Opacity--Red--Red-80: hsla(0, 72%, 51%, 0.8);
--Opacity--Red--Red-60: hsla(0, 72%, 51%, 0.6);
--Opacity--Red--Red-40: hsla(0, 72%, 51%, 0.4);
--Opacity--Red--Red-20: hsla(0, 72%, 51%, 0.2);
--Opacity--Red--Red-10: hsla(0, 72%, 51%, 0.1);
--Opacity--Green--Green-100: var(--Primitive--Green--600);
--Opacity--Green--Green-80: hsla(142, 76%, 36%, 0.8);
--Opacity--Green--Green-60: hsla(142, 76%, 36%, 0.6);
--Opacity--Green--Green-40: hsla(142, 76%, 36%, 0.4);
--Opacity--Green--Green-20: hsla(142, 76%, 36%, 0.2);
--Opacity--Green--Green-10: hsla(142, 76%, 36%, 0.1);
--Opacity--Yellow--Yellow-100: var(--Primitive--Yellow--400);
--Opacity--Yellow--Yellow-80: hsla(48, 96%, 53%, 0.8);
--Opacity--Yellow--Yellow-60: hsla(48, 96%, 53%, 0.6);
--Opacity--Yellow--Yellow-40: hsla(48, 96%, 53%, 0.4);
--Opacity--Yellow--Yellow-20: hsla(48, 96%, 53%, 0.2);
--Opacity--Yellow--Yellow-10: hsla(48, 96%, 53%, 0.1);
--Opacity--Violet--Violet-100: var(--Primitive--Violet--500);
--Opacity--Violet--Violet-80: hsla(258, 90%, 66%, 0.8);
--Opacity--Violet--Violet-60: hsla(258, 90%, 66%, 0.6);
--Opacity--Violet--Violet-40: hsla(258, 90%, 66%, 0.4);
--Opacity--Violet--Violet-20: hsla(258, 90%, 66%, 0.2);
--Opacity--Violet--Violet-10: hsla(258, 90%, 66%, 0.1);
--Opacity--Indigo--Indigo-100: var(--Primitive--Indigo--500);
--Opacity--Indigo--Indigo-80: hsla(239, 84%, 67%, 0.8);
--Opacity--Indigo--Indigo-60: hsla(239, 84%, 67%, 0.6);
--Opacity--Indigo--Indigo-40: hsla(239, 84%, 67%, 0.4);
--Opacity--Indigo--Indigo-20: hsla(239, 84%, 67%, 0.2);
--Opacity--Indigo--Indigo-10: hsla(239, 84%, 67%, 0.1);
--Opacity--Blue--Blue-100: var(--Primitive--Blue--500);
--Opacity--Blue--Blue-80: hsla(217, 91%, 60%, 0.8);
--Opacity--Blue--Blue-60: hsla(217, 91%, 60%, 0.6);
--Opacity--Blue--Blue-40: hsla(217, 91%, 60%, 0.4);
--Opacity--Blue--Blue-20: hsla(217, 91%, 60%, 0.2);
--Opacity--Blue--Blue-10: hsla(217, 91%, 60%, 0.1);
--Opacity--Grey--Grey-100: var(--Primitive--Gray--500);
--Opacity--Grey--Grey-80: hsla(220, 9%, 46%, 0.8);
--Opacity--Grey--Grey-60: hsla(220, 9%, 46%, 0.6);
--Opacity--Grey--Grey-40: hsla(220, 9%, 46%, 0.4);
--Opacity--Grey--Grey-20: hsla(220, 9%, 46%, 0.2);
--Opacity--Grey--Grey-10: hsla(220, 9%, 46%, 0.1);
--Opacity--White--White-100: var(--Primitive--White);
--Opacity--White--White-80: hsla(0, 0%, 100%, 0.8);
--Opacity--White--White-60: hsla(0, 0%, 100%, 0.6);
--Opacity--White--White-40: hsla(0, 0%, 100%, 0.4);
--Opacity--White--White-20: hsla(0, 0%, 100%, 0.2);
--Opacity--White--White-10: hsla(0, 0%, 100%, 0.1);
--Opacity--White--White-0: hsla(0, 0%, 100%, 0);
--Status--Error--colorErrorBg: var(--color--Red--900);
--Status--Error--colorErrorBgHover: var(--color--Red--800);
--Status--Error--colorErrorBorder: var(--color--Red--700);
--Status--Error--colorErrorBorderHover: var(--color--Red--600);
--Status--Error--colorErrorBase: var(--color--Red--400);
--Status--Error--colorErrorActive: var(--color--Red--300);
--Status--Error--colorErrorTextHover: var(--color--Red--200);
--Status--Error--colorErrorText: var(--color--Red--100);
--Status--Success--colorSuccessBg: var(--color--Green--900);
--Status--Success--colorSuccessBgHover: var(--color--Green--800);
--Status--Success--colorSuccessBase: var(--color--Green--400);
--Status--Success--colorSuccessTextHover: var(--color--Green--200);
--Status--Warning--colorWarningBg: var(--color--Yellow--900);
--Status--Warning--colorWarningBgHover: var(--color--Yellow--800);
--Status--Warning--colorWarningBase: var(--color--Yellow--400);
--Status--Warning--colorWarningActive: var(--color--Yellow--300);
--Status--Warning--colorWarningTextHover: var(--color--Yellow--200);
--Primitive--Black: hsla(0, 0%, 0%, 1);
--Primitive--White: hsla(0, 0%, 100%, 1);
--Brand--Base_Colors--Primary: var(--Primitive--Lime--500);
--Primitive--Neutral--50: hsla(0, 0%, 98%, 1);
--Primitive--Neutral--100: hsla(0, 0%, 96%, 1);
--Primitive--Neutral--200: hsla(0, 0%, 90%, 1);
--Primitive--Neutral--300: hsla(0, 0%, 83%, 1);
--Primitive--Neutral--400: hsla(0, 0%, 64%, 1);
--Primitive--Neutral--500: hsla(0, 0%, 45%, 1);
--Primitive--Neutral--600: hsla(215, 14%, 34%, 1);
--Primitive--Neutral--700: hsla(0, 0%, 25%, 1);
--Primitive--Neutral--800: hsla(0, 0%, 15%, 1);
--Primitive--Neutral--900: hsla(0, 0%, 9%, 1);
--Primitive--Neutral--950: hsla(0, 0%, 4%, 1);
--Primitive--Stone--50: hsla(60, 9%, 98%, 1);
--Primitive--Stone--100: hsla(60, 5%, 96%, 1);
--Primitive--Stone--200: hsla(20, 6%, 90%, 1);
--Primitive--Stone--300: hsla(24, 6%, 83%, 1);
--Primitive--Stone--400: hsla(24, 5%, 64%, 1);
--Primitive--Stone--500: hsla(25, 5%, 45%, 1);
--Primitive--Stone--600: hsla(33, 5%, 32%, 1);
--Primitive--Stone--700: hsla(30, 6%, 25%, 1);
--Primitive--Stone--800: hsla(12, 6%, 15%, 1);
--Primitive--Stone--900: hsla(24, 10%, 10%, 1);
--Primitive--Stone--950: hsla(20, 14%, 4%, 1);
--Primitive--Zinc--50: hsla(0, 0%, 98%, 1);
--Primitive--Zinc--100: hsla(240, 5%, 96%, 1);
--Primitive--Zinc--200: hsla(240, 6%, 90%, 1);
--Primitive--Zinc--300: hsla(240, 5%, 84%, 1);
--Primitive--Zinc--400: hsla(240, 5%, 65%, 1);
--Primitive--Zinc--500: hsla(240, 4%, 46%, 1);
--Primitive--Zinc--600: hsla(240, 5%, 34%, 1);
--Primitive--Zinc--700: hsla(240, 5%, 26%, 1);
--Primitive--Zinc--800: hsla(240, 4%, 16%, 1);
--Primitive--Zinc--900: hsla(240, 6%, 10%, 1);
--Primitive--Zinc--950: hsla(240, 10%, 4%, 1);
--Primitive--Slate--50: hsla(210, 40%, 98%, 1);
--Primitive--Slate--100: hsla(210, 40%, 96%, 1);
--Primitive--Slate--200: hsla(214, 32%, 91%, 1);
--Primitive--Slate--300: hsla(213, 27%, 84%, 1);
--Primitive--Slate--400: hsla(215, 20%, 65%, 1);
--Primitive--Slate--500: hsla(215, 16%, 47%, 1);
--Primitive--Slate--600: hsla(215, 19%, 35%, 1);
--Primitive--Slate--700: hsla(215, 25%, 27%, 1);
--Primitive--Slate--800: hsla(217, 33%, 17%, 1);
--Primitive--Slate--900: hsla(222, 47%, 11%, 1);
--Primitive--Slate--950: hsla(229, 84%, 5%, 1);
--Primitive--Gray--50: hsla(210, 20%, 98%, 1);
--Primitive--Gray--100: hsla(220, 14%, 96%, 1);
--Primitive--Gray--200: hsla(220, 13%, 91%, 1);
--Primitive--Gray--300: hsla(216, 12%, 84%, 1);
--Primitive--Gray--400: hsla(218, 11%, 65%, 1);
--Primitive--Gray--500: hsla(220, 9%, 46%, 1);
--Primitive--Gray--600: hsla(0, 0%, 32%, 1);
--Primitive--Gray--700: hsla(217, 19%, 27%, 1);
--Primitive--Gray--800: hsla(215, 28%, 17%, 1);
--Primitive--Gray--900: hsla(221, 39%, 11%, 1);
--Primitive--Gray--950: hsla(224, 71%, 4%, 1);
--Primitive--Red--50: hsla(0, 86%, 97%, 1);
--Primitive--Red--100: hsla(0, 93%, 94%, 1);
--Primitive--Red--200: hsla(0, 96%, 89%, 1);
--Primitive--Red--300: hsla(0, 94%, 82%, 1);
--Primitive--Red--400: hsla(0, 91%, 71%, 1);
--Primitive--Red--500: hsla(0, 84%, 60%, 1);
--Primitive--Red--600: hsla(0, 72%, 51%, 1);
--Primitive--Red--700: hsla(0, 74%, 42%, 1);
--Primitive--Red--800: hsla(0, 70%, 35%, 1);
--Primitive--Red--900: hsla(0, 63%, 31%, 1);
--Primitive--Red--950: hsla(0, 75%, 15%, 1);
--Primitive--Orange--50: hsla(33, 100%, 96%, 1);
--Primitive--Orange--100: hsla(34, 100%, 92%, 1);
--Primitive--Orange--200: hsla(32, 98%, 83%, 1);
--Primitive--Orange--300: hsla(31, 97%, 72%, 1);
--Primitive--Orange--400: hsla(27, 96%, 61%, 1);
--Primitive--Orange--500: hsla(25, 95%, 53%, 1);
--Primitive--Orange--600: hsla(21, 90%, 48%, 1);
--Primitive--Orange--700: hsla(17, 88%, 40%, 1);
--Primitive--Orange--800: hsla(15, 79%, 34%, 1);
--Primitive--Orange--900: hsla(15, 75%, 28%, 1);
--Primitive--Orange--950: hsla(13, 81%, 15%, 1);
--Primitive--Amber--50: hsla(48, 100%, 96%, 1);
--Primitive--Amber--100: hsla(48, 96%, 89%, 1);
--Primitive--Amber--200: hsla(48, 97%, 77%, 1);
--Primitive--Amber--300: hsla(46, 97%, 65%, 1);
--Primitive--Amber--400: hsla(43, 96%, 56%, 1);
--Primitive--Amber--500: hsla(38, 92%, 50%, 1);
--Primitive--Amber--600: hsla(32, 95%, 44%, 1);
--Primitive--Amber--700: hsla(26, 90%, 37%, 1);
--Primitive--Amber--800: hsla(23, 83%, 31%, 1);
--Primitive--Amber--900: hsla(22, 78%, 26%, 1);
--Primitive--Amber--950: hsla(21, 92%, 14%, 1);
--Primitive--Yellow--50: hsla(55, 92%, 95%, 1);
--Primitive--Yellow--100: hsla(55, 97%, 88%, 1);
--Primitive--Yellow--200: hsla(53, 98%, 77%, 1);
--Primitive--Yellow--300: hsla(50, 98%, 64%, 1);
--Primitive--Yellow--400: hsla(48, 96%, 53%, 1);
--Primitive--Yellow--500: hsla(45, 93%, 47%, 1);
--Primitive--Yellow--600: hsla(41, 96%, 40%, 1);
--Primitive--Yellow--700: hsla(35, 92%, 33%, 1);
--Primitive--Yellow--800: hsla(32, 81%, 29%, 1);
--Primitive--Yellow--900: hsla(28, 73%, 26%, 1);
--Primitive--Yellow--950: hsla(26, 83%, 14%, 1);
--Primitive--Lime--50: hsla(78, 92%, 95%, 1);
--Primitive--Lime--100: hsla(80, 89%, 89%, 1);
--Primitive--Lime--200: hsla(81, 88%, 80%, 1);
--Primitive--Lime--300: hsla(82, 85%, 67%, 1);
--Primitive--Lime--400: hsla(83, 78%, 55%, 1);
--Primitive--Lime--500: hsla(84, 81%, 44%, 1);
--Primitive--Lime--600: hsla(85, 85%, 35%, 1);
--Primitive--Lime--700: hsla(86, 78%, 27%, 1);
--Primitive--Lime--800: hsla(86, 69%, 23%, 1);
--Primitive--Lime--900: hsla(88, 61%, 20%, 1);
--Primitive--Lime--950: hsla(89, 80%, 10%, 1);
--Primitive--Green--50: hsla(138, 76%, 97%, 1);
--Primitive--Green--100: hsla(141, 84%, 93%, 1);
--Primitive--Green--200: hsla(141, 79%, 85%, 1);
--Primitive--Green--300: hsla(142, 77%, 73%, 1);
--Primitive--Green--400: hsla(142, 69%, 58%, 1);
--Primitive--Green--500: hsla(142, 71%, 45%, 1);
--Primitive--Green--600: hsla(142, 76%, 36%, 1);
--Primitive--Green--700: hsla(142, 72%, 29%, 1);
--Primitive--Green--800: hsla(143, 64%, 24%, 1);
--Primitive--Green--900: hsla(144, 61%, 20%, 1);
--Primitive--Green--950: hsla(145, 80%, 10%, 1);
--Primitive--Emerald--50: hsla(152, 81%, 96%, 1);
--Primitive--Emerald--100: hsla(149, 80%, 90%, 1);
--Primitive--Emerald--200: hsla(152, 76%, 80%, 1);
--Primitive--Emerald--300: hsla(156, 72%, 67%, 1);
--Primitive--Emerald--400: hsla(158, 64%, 52%, 1);
--Primitive--Emerald--500: hsla(160, 84%, 39%, 1);
--Primitive--Emerald--600: hsla(161, 94%, 30%, 1);
--Primitive--Emerald--700: hsla(163, 94%, 24%, 1);
--Primitive--Emerald--800: hsla(163, 88%, 20%, 1);
--Primitive--Emerald--900: hsla(164, 86%, 16%, 1);
--Primitive--Emerald--950: hsla(166, 91%, 9%, 1);
--Primitive--Teal--50: hsla(166, 76%, 97%, 1);
--Primitive--Teal--100: hsla(167, 85%, 89%, 1);
--Primitive--Teal--200: hsla(168, 84%, 78%, 1);
--Primitive--Teal--300: hsla(171, 77%, 64%, 1);
--Primitive--Teal--400: hsla(172, 66%, 50%, 1);
--Primitive--Teal--500: hsla(173, 80%, 40%, 1);
--Primitive--Teal--600: hsla(175, 84%, 32%, 1);
--Primitive--Teal--700: hsla(175, 77%, 26%, 1);
--Primitive--Teal--800: hsla(176, 69%, 22%, 1);
--Primitive--Teal--900: hsla(176, 61%, 19%, 1);
--Primitive--Teal--950: hsla(179, 84%, 10%, 1);
--Primitive--Cyan--50: hsla(183, 100%, 96%, 1);
--Primitive--Cyan--100: hsla(185, 96%, 90%, 1);
--Primitive--Cyan--200: hsla(186, 94%, 82%, 1);
--Primitive--Cyan--300: hsla(187, 92%, 69%, 1);
--Primitive--Cyan--400: hsla(188, 86%, 53%, 1);
--Primitive--Cyan--500: hsla(189, 94%, 43%, 1);
--Primitive--Cyan--600: hsla(192, 91%, 36%, 1);
--Primitive--Cyan--700: hsla(193, 82%, 31%, 1);
--Primitive--Cyan--800: hsla(194, 70%, 27%, 1);
--Primitive--Cyan--900: hsla(196, 64%, 24%, 1);
--Primitive--Cyan--950: hsla(197, 79%, 15%, 1);
--Primitive--Sky--50: hsla(204, 100%, 97%, 1);
--Primitive--Sky--100: hsla(204, 94%, 94%, 1);
--Primitive--Sky--200: hsla(201, 94%, 86%, 1);
--Primitive--Sky--300: hsla(199, 95%, 74%, 1);
--Primitive--Sky--400: hsla(198, 93%, 60%, 1);
--Primitive--Sky--500: hsla(199, 89%, 48%, 1);
--Primitive--Sky--600: hsla(200, 98%, 39%, 1);
--Primitive--Sky--700: hsla(201, 96%, 32%, 1);
--Primitive--Sky--800: hsla(201, 90%, 27%, 1);
--Primitive--Sky--900: hsla(202, 80%, 24%, 1);
--Primitive--Sky--950: hsla(204, 80%, 16%, 1);
--Primitive--Blue--50: hsla(214, 100%, 97%, 1);
--Primitive--Blue--100: hsla(214, 95%, 93%, 1);
--Primitive--Blue--200: hsla(213, 97%, 87%, 1);
--Primitive--Blue--300: hsla(212, 96%, 78%, 1);
--Primitive--Blue--400: hsla(213, 94%, 68%, 1);
--Primitive--Blue--500: hsla(217, 91%, 60%, 1);
--Primitive--Blue--600: hsla(221, 83%, 53%, 1);
--Primitive--Blue--700: hsla(224, 76%, 48%, 1);
--Primitive--Blue--800: hsla(226, 71%, 40%, 1);
--Primitive--Blue--900: hsla(224, 64%, 33%, 1);
--Primitive--Blue--950: hsla(226, 57%, 21%, 1);
--Primitive--Indigo--50: hsla(226, 100%, 97%, 1);
--Primitive--Indigo--100: hsla(226, 100%, 94%, 1);
--Primitive--Indigo--200: hsla(228, 96%, 89%, 1);
--Primitive--Indigo--300: hsla(230, 94%, 82%, 1);
--Primitive--Indigo--400: hsla(234, 89%, 74%, 1);
--Primitive--Indigo--500: hsla(239, 84%, 67%, 1);
--Primitive--Indigo--600: hsla(243, 75%, 59%, 1);
--Primitive--Indigo--700: hsla(245, 58%, 51%, 1);
--Primitive--Indigo--800: hsla(244, 55%, 41%, 1);
--Primitive--Indigo--900: hsla(242, 47%, 34%, 1);
--Primitive--Indigo--950: hsla(244, 47%, 20%, 1);
--Primitive--Violet--50: hsla(250, 100%, 98%, 1);
--Primitive--Violet--100: hsla(251, 91%, 95%, 1);
--Primitive--Violet--200: hsla(251, 95%, 92%, 1);
--Primitive--Violet--300: hsla(253, 95%, 85%, 1);
--Primitive--Violet--400: hsla(255, 92%, 76%, 1);
--Primitive--Violet--500: hsla(258, 90%, 66%, 1);
--Primitive--Violet--600: hsla(262, 83%, 58%, 1);
--Primitive--Violet--700: hsla(263, 70%, 50%, 1);
--Primitive--Violet--800: hsla(263, 69%, 42%, 1);
--Primitive--Violet--900: hsla(264, 67%, 35%, 1);
--Primitive--Violet--950: hsla(262, 78%, 23%, 1);
--Primitive--Purple--50: hsla(270, 100%, 98%, 1);
--Primitive--Purple--100: hsla(269, 100%, 95%, 1);
--Primitive--Purple--200: hsla(269, 100%, 92%, 1);
--Primitive--Purple--300: hsla(269, 97%, 85%, 1);
--Primitive--Purple--400: hsla(270, 95%, 75%, 1);
--Primitive--Purple--500: hsla(271, 91%, 65%, 1);
--Primitive--Purple--600: hsla(271, 81%, 56%, 1);
--Primitive--Purple--700: hsla(272, 72%, 47%, 1);
--Primitive--Purple--800: hsla(273, 67%, 39%, 1);
--Primitive--Purple--900: hsla(274, 66%, 32%, 1);
--Primitive--Purple--950: hsla(274, 87%, 21%, 1);
--Primitive--Fuchsia--50: hsla(289, 100%, 98%, 1);
--Primitive--Fuchsia--100: hsla(287, 100%, 95%, 1);
--Primitive--Fuchsia--200: hsla(288, 96%, 91%, 1);
--Primitive--Fuchsia--300: hsla(291, 93%, 83%, 1);
--Primitive--Fuchsia--400: hsla(292, 91%, 73%, 1);
--Primitive--Fuchsia--500: hsla(292, 84%, 61%, 1);
--Primitive--Fuchsia--600: hsla(293, 69%, 49%, 1);
--Primitive--Fuchsia--700: hsla(295, 72%, 40%, 1);
--Primitive--Fuchsia--800: hsla(295, 70%, 33%, 1);
--Primitive--Fuchsia--900: hsla(297, 64%, 28%, 1);
--Primitive--Fuchsia--950: hsla(297, 90%, 16%, 1);
--Primitive--Pink--50: hsla(327, 73%, 97%, 1);
--Primitive--Pink--100: hsla(326, 78%, 95%, 1);
--Primitive--Pink--200: hsla(326, 85%, 90%, 1);
--Primitive--Pink--300: hsla(327, 87%, 82%, 1);
--Primitive--Pink--400: hsla(329, 86%, 70%, 1);
--Primitive--Pink--500: hsla(330, 81%, 60%, 1);
--Primitive--Pink--600: hsla(333, 71%, 51%, 1);
--Primitive--Pink--700: hsla(335, 78%, 42%, 1);
--Primitive--Pink--800: hsla(336, 74%, 35%, 1);
--Primitive--Pink--900: hsla(336, 69%, 30%, 1);
--Primitive--Pink--950: hsla(336, 84%, 17%, 1);
--Primitive--Rose--50: hsla(356, 100%, 97%, 1);
--Primitive--Rose--100: hsla(356, 100%, 95%, 1);
--Primitive--Rose--200: hsla(353, 96%, 90%, 1);
--Primitive--Rose--300: hsla(353, 96%, 82%, 1);
--Primitive--Rose--400: hsla(351, 95%, 71%, 1);
--Primitive--Rose--500: hsla(350, 89%, 60%, 1);
--Primitive--Rose--600: hsla(347, 77%, 50%, 1);
--Primitive--Rose--700: hsla(345, 83%, 41%, 1);
--Primitive--Rose--800: hsla(343, 80%, 35%, 1);
--Primitive--Rose--900: hsla(342, 75%, 30%, 1);
--Primitive--Rose--950: hsla(343, 88%, 16%, 1);
--Brand--Base_Colors--Destructive: var(--Primitive--Red--500);
--Brand--Base_Colors--Success: var(--Primitive--Green--500);
--Brand--Base_Colors--Warning: var(--Primitive--Amber--500);
--Brand--Base_Colors--White: var(--Primitive--White);
--Brand--Base_Colors--Black: var(--Primitive--Black);
--Brand--Semantic_Colors--Background: var(--Primitive--Zinc--900); /*页面背景色:应用在整个页面的最底层。*/
--Brand--Semantic_Colors--Background-subtle: hsla(
0,
0%,
100%,
0.02
); /*细微背景色:用于需要与主背景有微弱区分的区域,如代码块背景。*/
--Brand--Semantic_Colors--Foreground: hsla(0, 0%, 100%, 0.9); /*主要前景/文字色:用于正文、标题等。*/
--Brand--Semantic_Colors--Foreground-secondary: hsla(0, 0%, 100%, 0.6); /*次要前景/文字色:用于辅助性文本、描述。*/
--Brand--Semantic_Colors--Foreground-muted: hsla(0, 0%, 100%, 0.4); /*静默前景/文字色:用于禁用状态的文字、占位符。*/
--Brand--Semantic_Colors--Border: hsla(0, 0%, 100%, 0.1); /*默认边框色:用于卡片、输入框、分隔线。*/
--Brand--Semantic_Colors--Border-hover: hsla(0, 0%, 100%, 0.2); /*激活边框色:用于元素被按下或激活时的边框。*/
--Brand--Semantic_Colors--Border-active: hsla(0, 0%, 100%, 0.3); /*激活边框色:用于元素被按下或激活时的边框。*/
--Brand--Semantic_Colors--Ring: hsla(
84,
81%,
44%,
0.4
); /*聚焦环颜色:用于输入框等元素在聚焦 (Focus) 状态下的外发光。*/
--Brand--UI_Element_Colors--Modal--Backdrop: hsla(0, 0%, 0%, 0.06);
--Brand--UI_Element_Colors--Modal--Thumb: hsla(0, 0%, 100%, 0.2);
--Brand--UI_Element_Colors--Modal--Thumb_Hover: hsla(0, 0%, 100%, 0.3);
--Brand--UI_Element_Colors--Icon--Default: var(--Brand--Semantic_Colors--Foreground-secondary);
--Brand--UI_Element_Colors--Icon--Hover: var(--Brand--Semantic_Colors--Foreground);
--Brand--UI_Element_Colors--Input_Select--Background: var(--Brand--Base_Colors--Black);
--Brand--UI_Element_Colors--Input_Select--Border: var(--Brand--Semantic_Colors--Border);
--Brand--UI_Element_Colors--Input_Select--Border_Hover: var(--Brand--Semantic_Colors--Border-hover);
--Brand--UI_Element_Colors--Input_Select--Border_Focus: var(--Brand--Base_Colors--Primary);
--Brand--UI_Element_Colors--Primary_Button--Background: var(--Brand--Base_Colors--Primary);
--Brand--UI_Element_Colors--Card_Container--Background: var(--Brand--Base_Colors--Black);
--Brand--UI_Element_Colors--Card_Container--Border: var(--Brand--Semantic_Colors--Border);
--Brand--UI_Element_Colors--Ghost_Button--Background: hsla(0, 0%, 100%, 0);
--Brand--UI_Element_Colors--Ghost_Button--Text: var(--Brand--Semantic_Colors--Foreground);
--Brand--UI_Element_Colors--Ghost_Button--Background_Hover: var(--Opacity--White--White-10);
--Brand--UI_Element_Colors--Ghost_Button--Background_Active: hsla(0, 0%, 100%, 0.15);
--Brand--UI_Element_Colors--Secondary_Button--Background: var(--Opacity--White--White-10);
--Brand--UI_Element_Colors--Secondary_Button--Text: var(--Brand--Semantic_Colors--Foreground);
--Brand--UI_Element_Colors--Secondary_Button--Background_Hover: var(--Opacity--White--White-20);
--Brand--UI_Element_Colors--Secondary_Button--Background_Active: hsla(0, 0%, 100%, 0.25);
--Brand--UI_Element_Colors--Secondary_Button--Border: var(--Brand--Semantic_Colors--Border);
--Brand--UI_Element_Colors--Primary_Button--Text: var(--Brand--Base_Colors--White);
--Brand--UI_Element_Colors--Primary_Button--Background_Hover: hsla(84, 81%, 44%, 0.85);
--Brand--UI_Element_Colors--Primary_Button--2nd_Background: hsla(84, 81%, 44%, 0.1);
--Brand--UI_Element_Colors--Primary_Button--3rd_Background: hsla(84, 81%, 44%, 0.05);
--Brand--UI_Element_Colors--Primary_Button--Background_Active: hsla(84, 81%, 44%, 0.7);
--Boolean: false;
}

View File

@@ -0,0 +1,12 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1002_325032)">
<path d="M13.1591 23.9994C19.1463 23.9994 23.9999 19.1369 23.9999 13.1387C23.9999 7.14056 19.1463 2.27808 13.1591 2.27808C7.17194 2.27808 2.31836 7.14056 2.31836 13.1387C2.31836 19.1369 7.17194 23.9994 13.1591 23.9994Z" fill="#3F3FAA"/>
<path d="M10.8408 21.7213C16.828 21.7213 21.6816 16.8589 21.6816 10.8607C21.6816 4.86249 16.828 0 10.8408 0C4.85358 0 0 4.86249 0 10.8607C0 16.8589 4.85358 21.7213 10.8408 21.7213Z" fill="#8E47F0"/>
<path d="M10.674 18.0887C9.90386 18.0887 9.15988 17.8338 8.5431 17.3518C7.81081 16.7798 7.34412 15.9557 7.23049 15.0323C7.19589 14.7503 7.19449 14.4706 7.22628 14.1956C7.01212 14.2373 6.79047 14.2589 6.56461 14.2589C4.64737 14.2589 3.0874 12.696 3.0874 10.7753C3.0874 8.85455 4.64737 7.29172 6.56461 7.29172C6.83863 7.29172 7.10564 7.32357 7.36143 7.38401C7.34646 7.25283 7.33898 7.11979 7.33898 6.98627C7.33898 5.06552 8.89895 3.50269 10.8162 3.50269C12.7334 3.50269 14.2934 5.06552 14.2934 6.98627C14.2934 7.09777 14.2882 7.2088 14.2775 7.31936C14.559 7.27017 14.848 7.25517 15.1393 7.27719C17.0514 7.41914 18.4917 9.09347 18.35 11.0091C18.2812 11.9371 17.8557 12.7827 17.1524 13.3903C16.4486 13.9979 15.5503 14.295 14.6249 14.2256C14.4566 14.213 14.2911 14.1886 14.1293 14.153C14.1302 14.161 14.1311 14.1689 14.1325 14.1769C14.2466 15.1003 13.995 16.0129 13.4241 16.747C12.8531 17.4811 12.0306 17.9481 11.1089 18.0624C10.9635 18.0802 10.8185 18.0891 10.6745 18.0891L10.674 18.0887ZM8.74417 13.4878C8.50008 13.9113 8.40328 14.3915 8.4636 14.8796C8.53702 15.4732 8.83629 16.0025 9.30718 16.3698C9.77761 16.7376 10.3631 16.8997 10.9555 16.8261C11.548 16.7526 12.0764 16.4528 12.443 15.981C12.8101 15.5092 12.9719 14.9227 12.8985 14.3296C12.8503 13.938 12.7016 13.5702 12.4669 13.2587C12.3135 13.1102 12.1732 12.9472 12.0474 12.7696C11.8487 12.4895 11.9142 12.1006 12.1938 11.9015C12.4734 11.7019 12.8615 11.768 13.0603 12.0477C13.1066 12.1128 13.1557 12.1751 13.208 12.2341C13.2497 12.2636 13.2885 12.2988 13.3236 12.3391C13.3446 12.3639 13.3656 12.3887 13.3857 12.414C13.7505 12.7443 14.2162 12.9462 14.7166 12.9832C15.9483 13.0755 17.0191 12.1475 17.1103 10.9163C17.2015 9.68516 16.2761 8.60954 15.0472 8.51818C14.5763 8.48305 14.1166 8.59455 13.7159 8.8405C13.5256 8.99697 13.252 9.03117 13.0229 8.90515C12.7222 8.73977 12.6118 8.36125 12.7769 8.06002C12.956 7.73302 13.0505 7.36152 13.0505 6.9858C13.0505 5.75137 12.0479 4.74696 10.8157 4.74696C9.58354 4.74696 8.58097 5.75137 8.58097 6.9858C8.58097 7.42757 8.7091 7.85435 8.95133 8.2207C8.96302 8.2385 8.97377 8.25677 8.98359 8.27551C9.63545 8.90889 10.0409 9.79572 10.0409 10.7753C10.0409 11.8701 9.53444 12.8483 8.7437 13.4873L8.74417 13.4878ZM6.56414 8.53692C5.33197 8.53692 4.32939 9.54134 4.32939 10.7758C4.32939 12.0102 5.33197 13.0146 6.56414 13.0146C7.79631 13.0146 8.79888 12.0102 8.79888 10.7758C8.79888 9.54134 7.79631 8.53692 6.56414 8.53692Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1002_325032">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 140 KiB

View File

@@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1010_212037)">
<path d="M19.5 0H4.5C2.01472 0 0 2.01472 0 4.5V19.5C0 21.9853 2.01472 24 4.5 24H19.5C21.9853 24 24 21.9853 24 19.5V4.5C24 2.01472 21.9853 0 19.5 0Z" fill="#333333"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5423 4.71087C5.21065 6.81312 11.4721 19.8057 11.8942 19.8746C12.246 19.9436 17.0652 10.156 19.4923 4.40071C19.5627 4.26285 19.1406 4.125 18.5426 4.125C17.7335 4.125 17.4521 4.29732 17.4521 4.71087C17.4521 5.26228 12.457 17.2899 12.3163 17.1176C12.0349 16.7385 7.2509 5.77923 7.07501 5.0555C6.86395 4.26285 6.65289 4.125 5.5976 4.125C4.57748 4.125 4.40159 4.22839 4.5423 4.71087Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1010_212037">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 866 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -0,0 +1,15 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1002_325038)">
<path d="M21.8843 0H2.07031C0.965743 0 0.0703125 0.89543 0.0703125 2V22C0.0703125 23.1046 0.965742 24 2.07031 24H21.8843C22.9888 24 23.8843 23.1046 23.8843 22V2C23.8843 0.895431 22.9888 0 21.8843 0Z" fill="url(#paint0_linear_1002_325038)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.2237 8.39297C11.3167 7.74923 11.5229 6.92265 11.8423 5.91328C11.8846 5.78242 12.0698 5.78242 12.1121 5.91328C12.4315 6.92265 12.6377 7.74923 12.7307 8.39297C12.802 8.86485 12.802 9.46485 12.7307 10.193C12.6594 10.9242 12.6594 11.5289 12.7307 12.007C12.8361 12.707 13.154 13.2883 13.6842 13.7508C14.2237 14.2227 14.8485 14.4586 15.5586 14.4586C16.3462 14.4586 17.0191 14.1789 17.5772 13.6195C18.1322 13.0602 18.4129 12.3852 18.4191 11.5945C18.4222 10.8945 18.4935 10.1227 18.6331 9.27891C18.7012 8.85703 18.7709 8.50391 18.8424 8.21953C18.8731 8.09239 19.0472 8.07302 19.1028 8.19141C19.5834 9.21641 19.8346 10.2976 19.8563 11.4352V11.5945C19.8563 12.6727 19.65 13.7023 19.2377 14.6836C18.8377 15.6367 18.2749 16.4789 17.5493 17.2102C16.8206 17.9414 15.985 18.5086 15.0423 18.9118C14.0687 19.3273 13.047 19.5353 11.9772 19.5353C10.9074 19.5353 9.88574 19.3273 8.9121 18.9118C7.96946 18.5086 7.13381 17.9414 6.40512 17.2102C5.67954 16.4789 5.11675 15.6367 4.71675 14.6836C4.30434 13.7023 4.09814 12.6727 4.09814 11.5945V11.4352C4.11986 10.2976 4.37102 9.21641 4.85163 8.19141C4.90728 8.07302 5.08133 8.09239 5.1121 8.21953C5.18341 8.50391 5.25318 8.85703 5.3214 9.27891C5.46094 10.1227 5.53225 10.8945 5.53535 11.5945C5.54155 12.3852 5.82218 13.0602 6.37721 13.6195C6.93535 14.1789 7.60823 14.4586 8.39582 14.4586C9.1059 14.4586 9.7307 14.2227 10.2702 13.7508C10.8005 13.2883 11.1183 12.707 11.2237 12.007C11.295 11.5289 11.295 10.9242 11.2237 10.193C11.1524 9.46485 11.1524 8.86485 11.2237 8.39297ZM11.9772 18.0867C13.0656 18.0867 14.0857 17.8273 15.0377 17.3086C15.7123 16.9427 16.2981 16.4766 16.7952 15.9103C16.8573 15.8397 16.7842 15.7321 16.6938 15.7568C16.3276 15.857 15.9492 15.907 15.5586 15.907C14.7834 15.907 14.0625 15.7102 13.3958 15.3164C12.8571 15 12.4108 14.5891 12.0568 14.0839C12.0182 14.0289 11.9362 14.0289 11.8977 14.0839C11.5437 14.5891 11.0973 15 10.5586 15.3164C9.89195 15.7102 9.17102 15.907 8.39582 15.907C8.00523 15.907 7.62685 15.857 7.26064 15.7568C7.17029 15.7321 7.0972 15.8397 7.1592 15.9103C7.65628 16.4766 8.24213 16.9427 8.91675 17.3086C9.86869 17.8273 10.8888 18.0867 11.9772 18.0867Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_1002_325038" x1="11.9773" y1="0" x2="11.9773" y2="24" gradientUnits="userSpaceOnUse">
<stop stop-color="#2563EB"/>
<stop offset="1" stop-color="#0049DF"/>
</linearGradient>
<clipPath id="clip0_1002_325038">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1010_212036)">
<path d="M18 0H6C2.68629 0 0 2.68629 0 6V18C0 21.3137 2.68629 24 6 24H18C21.3137 24 24 21.3137 24 18V6C24 2.68629 21.3137 0 18 0Z" fill="#CA9F7B"/>
<path d="M15.3843 6.43481H12.9687L17.3739 17.5652H19.7896L15.3843 6.43481ZM8.40522 6.43481L4 17.5652H6.4633L7.36417 15.2279H11.9729L12.8737 17.5652H15.337L10.9318 6.43481H8.40522ZM8.16104 13.1607L9.66852 9.24907L11.176 13.1607H8.16104Z" fill="#191918"/>
</g>
<defs>
<clipPath id="clip0_1010_212036">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 655 B

View File

@@ -0,0 +1,20 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1002_325036)">
<mask id="mask0_1002_325036" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24">
<path d="M24 0H0V24H24V0Z" fill="white"/>
</mask>
<g mask="url(#mask0_1002_325036)">
<path d="M19 0H4.99999C2.23857 0 0 2.23857 0 4.99999V19C0 21.7614 2.23857 24 4.99999 24H19C21.7614 24 24 21.7614 24 19V4.99999C24 2.23857 21.7614 0 19 0Z" fill="url(#paint0_linear_1002_325036)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9995 18.1395L9.57351 18.9485L8.62752 18.3174L9.65751 17.9734L9.34152 17.0254L7.57352 17.6145L6.99951 17.2325V14.4995C6.99951 14.3105 6.89252 14.1375 6.72351 14.0525L4.99952 13.1905V10.8085L6.49952 10.0585L7.99952 10.8085V12.4995C7.99952 12.6895 8.10651 12.8625 8.27552 12.9475L10.2755 13.9475L10.7235 13.0525L8.99952 12.1905V10.8085L10.7235 9.94746C10.8925 9.86245 10.9995 9.68946 10.9995 9.49946V7.99946H9.99951V9.19045L8.49951 9.94045L6.99951 9.19045V6.76746L7.99952 6.10045V7.99946H8.99952V5.43445L9.57351 5.05146L11.9995 5.86045V18.1395ZM17.4995 16.9995C17.7745 16.9995 17.9995 17.2234 17.9995 17.4994C17.9995 17.7754 17.7745 17.9994 17.4995 17.9994C17.2246 17.9994 16.9996 17.7754 16.9996 17.4994C16.9996 17.2234 17.2246 16.9995 17.4995 16.9995ZM16.4995 5.99946C16.7746 5.99946 16.9996 6.22345 16.9996 6.49945C16.9996 6.77545 16.7746 6.99945 16.4995 6.99945C16.2245 6.99945 15.9995 6.77545 15.9995 6.49945C15.9995 6.22345 16.2245 5.99946 16.4995 5.99946ZM18.4996 11.9995C18.7745 11.9995 18.9995 12.2235 18.9995 12.4995C18.9995 12.7755 18.7745 12.9995 18.4996 12.9995C18.2245 12.9995 17.9995 12.7755 17.9995 12.4995C17.9995 12.2235 18.2245 11.9995 18.4996 11.9995ZM17.0915 12.9995C17.2985 13.5805 17.8486 13.9995 18.4996 13.9995C19.3265 13.9995 19.9996 13.3275 19.9996 12.4995C19.9996 11.6725 19.3265 10.9995 18.4996 10.9995C17.8486 10.9995 17.2985 11.4195 17.0915 11.9995H12.9995V9.99946H16.4995C16.7755 9.99946 16.9996 9.77646 16.9996 9.49946V7.90746C17.5805 7.70046 17.9995 7.15045 17.9995 6.49945C17.9995 5.67246 17.3266 4.99945 16.4995 4.99945C15.6725 4.99945 14.9995 5.67246 14.9995 6.49945C14.9995 7.15045 15.4186 7.70046 15.9995 7.90746V8.99946H12.9995V5.49945C12.9995 5.28445 12.8615 5.09346 12.6575 5.02545L9.65751 4.02546C9.51051 3.97645 9.35052 3.99846 9.22251 4.08345L6.22251 6.08346C6.08352 6.17646 5.99952 6.33246 5.99952 6.49945V9.19045L4.27551 10.0525C4.10652 10.1375 3.99951 10.3105 3.99951 10.4995V13.4995C3.99951 13.6895 4.10652 13.8625 4.27551 13.9475L5.99952 14.8085V17.4994C5.99952 17.6664 6.08352 17.8234 6.22251 17.9154L9.22251 19.9155C9.30552 19.9715 9.40152 19.9995 9.49952 19.9995C9.55251 19.9995 9.60552 19.9914 9.65751 19.9734L12.6575 18.9735C12.8615 18.9065 12.9995 18.7155 12.9995 18.4995V15.9994H15.2926L16.1455 16.8534L16.1585 16.8405C16.0606 17.0405 15.9995 17.2624 15.9995 17.4994C15.9995 18.3264 16.6726 18.9994 17.4995 18.9994C18.3265 18.9994 18.9995 18.3264 18.9995 17.4994C18.9995 16.6725 18.3265 15.9994 17.4995 15.9994C17.2615 15.9994 17.0395 16.0605 16.8406 16.1595L16.8535 16.1465L15.8536 15.1464C15.7595 15.0525 15.6325 14.9995 15.4996 14.9995H12.9995V12.9995H17.0915Z" fill="white"/>
</g>
</g>
<defs>
<linearGradient id="paint0_linear_1002_325036" x1="0" y1="2400" x2="2400" y2="0" gradientUnits="userSpaceOnUse">
<stop stop-color="#055F4E"/>
<stop offset="1" stop-color="#56C0A7"/>
</linearGradient>
<clipPath id="clip0_1002_325036">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,49 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1012_212067)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.2329 0C16.9459 0 17.5779 0.551 17.8049 1.329C18.0319 2.107 19.3599 6.919 19.3599 6.919V16.481H14.5469L14.6449 0H16.2329Z" fill="url(#paint0_linear_1012_212067)"/>
<path d="M23.298 7.47012C23.298 7.13012 23.023 6.87012 22.698 6.87012H19.863C18.9046 6.87091 17.9857 7.25206 17.3081 7.92986C16.6305 8.60767 16.2496 9.5267 16.249 10.4851V16.4811H19.685C20.6431 16.4801 21.5616 16.0989 22.239 15.4214C22.9164 14.7438 23.2972 13.8252 23.298 12.8671V7.47012Z" fill="url(#paint1_linear_1012_212067)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.233 2.5131e-05C16.1028 -0.00090588 15.9738 0.0240397 15.8534 0.0734119C15.733 0.122784 15.6236 0.195598 15.5316 0.287621C15.4395 0.379644 15.3667 0.489041 15.3173 0.609452C15.268 0.729864 15.243 0.858888 15.244 0.989025L15.147 19.187C15.1467 20.4634 14.6395 21.6875 13.737 22.59C12.8344 23.4926 11.6104 23.9998 10.334 24H1.59996C1.50434 24.0006 1.40998 23.9782 1.32484 23.9346C1.23969 23.8911 1.16624 23.8278 1.11067 23.75C1.0551 23.6722 1.01904 23.5821 1.00551 23.4875C0.991989 23.3928 1.0014 23.2963 1.03296 23.206L8.03296 3.22502C8.36272 2.2842 8.97615 1.4688 9.78873 0.891207C10.6013 0.313611 11.573 0.00224754 12.57 2.5131e-05H16.249H16.233Z" fill="url(#paint2_linear_1012_212067)"/>
</g>
<defs>
<linearGradient id="paint0_linear_1012_212067" x1="18.2419" y1="16.837" x2="14.1909" y2="0.616" gradientUnits="userSpaceOnUse">
<stop stop-color="#712575"/>
<stop offset="0.09" stop-color="#9A2884"/>
<stop offset="0.18" stop-color="#BF2C92"/>
<stop offset="0.27" stop-color="#DA2E9C"/>
<stop offset="0.34" stop-color="#EB30A2"/>
<stop offset="0.4" stop-color="#F131A5"/>
<stop offset="0.5" stop-color="#EC30A3"/>
<stop offset="0.61" stop-color="#DF2F9E"/>
<stop offset="0.72" stop-color="#C92D96"/>
<stop offset="0.83" stop-color="#AA2A8A"/>
<stop offset="0.95" stop-color="#83267C"/>
<stop offset="1" stop-color="#712575"/>
</linearGradient>
<linearGradient id="paint1_linear_1012_212067" x1="19.782" y1="0.340117" x2="19.782" y2="23.2221" gradientUnits="userSpaceOnUse">
<stop stop-color="#DA7ED0"/>
<stop offset="0.08" stop-color="#B17BD5"/>
<stop offset="0.19" stop-color="#8778DB"/>
<stop offset="0.3" stop-color="#6276E1"/>
<stop offset="0.41" stop-color="#4574E5"/>
<stop offset="0.54" stop-color="#2E72E8"/>
<stop offset="0.67" stop-color="#1D71EB"/>
<stop offset="0.81" stop-color="#1471EC"/>
<stop offset="1" stop-color="#1171ED"/>
</linearGradient>
<linearGradient id="paint2_linear_1012_212067" x1="18.404" y1="0.859025" x2="3.23596" y2="25.183" gradientUnits="userSpaceOnUse">
<stop stop-color="#DA7ED0"/>
<stop offset="0.05" stop-color="#B77BD4"/>
<stop offset="0.11" stop-color="#9079DA"/>
<stop offset="0.18" stop-color="#6E77DF"/>
<stop offset="0.25" stop-color="#5175E3"/>
<stop offset="0.33" stop-color="#3973E7"/>
<stop offset="0.42" stop-color="#2772E9"/>
<stop offset="0.54" stop-color="#1A71EB"/>
<stop offset="0.68" stop-color="#1371EC"/>
<stop offset="1" stop-color="#1171ED"/>
</linearGradient>
<clipPath id="clip0_1012_212067">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,9 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.58154 1.7793H5.52779L3.34655 6.20409V17.7335L0.916016 22.2206H6.21333L8.58154 17.7335V1.7793ZM10.5761 1.7793H15.8111V22.2206H10.5761V1.7793ZM22.9166 1.7793H17.6816V6.01712H22.9166V1.7793ZM22.9166 7.38818H17.6816V22.2206H22.9166V7.38818Z" fill="url(#paint0_radial_1002_325039)"/>
<defs>
<radialGradient id="paint0_radial_1002_325039" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(5.5 5.5) rotate(45) scale(20.5061 22.0704)">
<stop stop-color="#FEBD3F"/>
<stop offset="0.77608" stop-color="#FF6933"/>
</radialGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 714 B

View File

@@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.7149 5.61L17.7319 7.92C17.5954 7.99796 17.441 8.03897 17.2839 8.03897C17.1267 8.03897 16.9723 7.99796 16.8359 7.92L12.4399 5.384C12.3033 5.30585 12.1487 5.26475 11.9914 5.26475C11.834 5.26475 11.6794 5.30585 11.5429 5.384L7.15588 7.92C7.01944 7.99796 6.86502 8.03897 6.70788 8.03897C6.55074 8.03897 6.39632 7.99796 6.25988 7.92L2.27588 5.617L12.0019 0L21.7149 5.61Z" fill="#5BCA87"/>
<path d="M18.6408 9.46698C18.5069 9.54591 18.3961 9.65853 18.3192 9.79362C18.2424 9.92871 18.2022 10.0816 18.2028 10.237V15.309C18.2021 15.465 18.1606 15.618 18.0826 15.7531C18.0045 15.8881 17.8926 16.0005 17.7578 16.079L13.3298 18.589C13.1932 18.6671 13.0799 18.7804 13.0017 18.917C12.9234 19.0536 12.8831 19.2086 12.8848 19.366V23.973L17.3138 21.437L22.6238 18.39V7.15698L18.6408 9.46698Z" fill="#EC5D3E"/>
<path d="M10.9799 18.941C10.9095 18.7998 10.8046 18.6787 10.6749 18.589L6.24588 16.073C6.11503 15.9927 6.00679 15.8805 5.93138 15.7468C5.85597 15.6131 5.81587 15.4624 5.81488 15.309V10.231C5.81178 10.0764 5.76847 9.92529 5.68921 9.79255C5.60995 9.65982 5.49748 9.55001 5.36288 9.47396L4.91188 9.21396L1.37988 7.15796V18.39L6.69088 21.437L11.1259 24V19.392C11.1192 19.2315 11.0687 19.0748 10.9799 18.941Z" fill="#2464F5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,9 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.33594 8.91895V15.0809L11.6709 11.9979L6.33694 8.91995L6.33594 8.91895Z" fill="#1C54E3"/>
<path d="M21.3939 5.28791C21.3939 5.28791 21.3879 5.28191 21.3839 5.28191L17.0099 2.75391L6.33594 8.91991L11.6709 12.0019L21.3719 6.40191L21.3879 6.39191C21.4848 6.33671 21.5654 6.25698 21.6217 6.16074C21.678 6.0645 21.708 5.95513 21.7086 5.84364C21.7092 5.73215 21.6804 5.62246 21.6252 5.52561C21.57 5.42876 21.4902 5.34815 21.3939 5.29191V5.28791Z" fill="#AA9AFF"/>
<path d="M21.7098 12.4651C21.5987 12.4646 21.4896 12.494 21.3938 12.5501C21.3938 12.5501 21.3878 12.5501 21.3848 12.5531L17.0098 15.0811L22.0598 17.9961H22.0658C22.2497 17.6804 22.3463 17.3215 22.3458 16.9561V13.1011C22.3455 12.9325 22.2784 12.7709 22.1592 12.6517C22.04 12.5324 21.8784 12.4654 21.7098 12.4651Z" fill="#00EAD1"/>
<path d="M22.0598 17.9961L17.0098 15.0811L6.33984 21.2421L10.6098 23.7071C10.6098 23.7071 10.6258 23.7131 10.6318 23.7191C10.9503 23.9019 11.3111 23.9981 11.6783 23.9981C12.0456 23.9981 12.4064 23.9019 12.7248 23.7191C12.7308 23.7161 12.7408 23.7131 12.7468 23.7071L21.2848 18.7771C21.2878 18.7771 21.2908 18.7741 21.2948 18.7711C21.6158 18.5881 21.8838 18.3211 22.0698 17.9991H22.0638L22.0598 17.9961Z" fill="#00CEC9"/>
<path d="M11.6718 11.998L6.33578 15.081L4.89179 15.913L1.28679 17.996H1.27979C1.45279 18.299 1.69579 18.551 1.98879 18.734L2.06679 18.778L2.08279 18.788L2.10279 18.8L6.33479 21.242L17.0058 15.081L11.6708 11.999L11.6718 11.998Z" fill="#00EAD1"/>
<path d="M12.7398 0.29C12.6398 0.23 12.5318 0.183 12.4248 0.142C12.4048 0.136 12.3868 0.126 12.3678 0.12C12.1428 0.0409411 11.9062 0.000372506 11.6678 0C11.4348 0 11.2108 0.038 10.9998 0.11L10.9688 0.12C10.8397 0.164971 10.7152 0.221884 10.5968 0.29L2.06776 5.222C2.06776 5.222 2.06476 5.222 2.06176 5.225C1.73776 5.408 1.46976 5.676 1.28076 5.998H1.28676L6.33576 8.916L17.0098 2.758L12.7398 0.29Z" fill="#7347FF"/>
<path d="M1.287 6.00098H1.28C1.09609 6.31668 0.999456 6.67561 1 7.04098V16.956C1 17.334 1.1 17.691 1.28 17.999H1.287L6.336 15.081V8.91898L1.287 6.00098Z" fill="#0423DA"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.03564 5.23655C4.98434 4.28649 7.33391 5.09586 8.28487 7.04481L10.3152 11.2059C10.7903 12.1795 10.3865 13.3541 9.41333 13.8293C9.41293 13.8295 9.41253 13.8297 9.41213 13.8299C8.43778 14.3049 7.26299 13.9003 6.78749 12.9258L3.03564 5.23655Z" fill="#A5CCFF"/>
<path opacity="0.64774" fill-rule="evenodd" clip-rule="evenodd" d="M1 9.20141C2.53317 7.66887 5.0175 7.66887 6.55069 9.20141L9.94604 12.5954C10.7118 13.3607 10.7123 14.6023 9.94724 15.3683C9.94684 15.3687 9.94644 15.3691 9.94604 15.3695C9.17949 16.1358 7.93729 16.1358 7.17069 15.3695L1 9.20141Z" fill="#A5CCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0666 5.92163C19.4481 5.92163 23 9.47209 23 13.8518C23 15.99 21.9007 18.1627 20.5242 19.589L19.9543 18.9058C18.9766 17.734 18.6294 16.1599 19.0233 14.6853C19.0946 14.418 19.1303 14.1725 19.1303 13.9487C19.1303 11.6897 17.2983 9.85839 15.0383 9.85839C12.7785 9.85839 10.9464 11.6897 10.9464 13.9487C10.9464 16.2076 12.7785 18.0389 15.0383 18.0389C15.4614 18.0389 15.8695 17.9747 16.2534 17.8556C17.4037 17.4985 18.6572 17.795 19.5259 18.6297L20.5242 19.589C19.1068 20.9118 17.1588 21.7818 15.0666 21.7818C10.6852 21.7818 7.1333 18.2314 7.1333 13.8518C7.1333 9.47209 10.6852 5.92163 15.0666 5.92163Z" fill="#006EFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.1333 3C9.30097 3 11.0582 4.75808 11.0582 6.9267V9.75804C11.0582 11.9267 9.30097 13.6847 7.1333 13.6847V3Z" fill="#006EFF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.9442 18.587L13.2402 18.142V10.01L15.0642 9.54795C16.0642 9.29395 16.9042 9.08695 16.9442 9.09495C16.9762 9.09495 17.0002 11.33 17.0002 14.067V19.04L16.8242 19.0319C16.7202 19.0319 15.8722 18.826 14.9442 18.587Z" fill="#00C8D2"/>
<path d="M7 16.542C7 13.806 7.024 11.562 7.064 11.562C7.096 11.554 7.936 11.762 8.944 12.016L10.76 12.477L10.744 16.527L10.72 20.576L9.088 20.998C8.192 21.228 7.352 21.443 7.232 21.467L7 21.523V16.542Z" fill="#3C8CFF"/>
<path d="M19.2402 12.477C19.2402 3.44697 19.2482 2.96197 19.3842 3.00197C19.4562 3.02597 20.1682 3.20897 20.9602 3.40797C21.7522 3.61497 22.5362 3.81297 22.7042 3.85297L23.0002 3.93297L22.9842 12.493L22.9602 21.061L21.3362 21.475C20.4482 21.705 19.6082 21.912 19.4802 21.945L19.2402 22V12.477Z" fill="#78E6DC"/>
<path d="M1 12.5089C1 7.83091 1.024 4.00391 1.064 4.00391C1.096 4.00391 1.936 4.21091 2.936 4.45791L4.76 4.91891V12.5009C4.76 16.6609 4.744 20.0749 4.728 20.0749C4.704 20.0749 3.856 20.2899 2.848 20.5449L1 21.0129V12.5089Z" fill="#325AB4"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.9681 5.37441C12.0144 5.46932 12.037 5.57421 12.0336 5.67911C12.0295 5.80735 12.0554 5.9348 12.1093 6.05175C12.1631 6.1687 12.2435 6.27206 12.3443 6.35396C12.4451 6.43585 12.5636 6.49413 12.6909 6.52433C12.8181 6.55454 12.9508 6.55588 13.0786 6.52826L19.6465 5.10635C19.9293 5.04511 20.2227 5.04687 20.5048 5.11149C20.7869 5.1761 21.0506 5.30193 21.2764 5.4797C21.5023 5.65746 21.6846 5.88263 21.8098 6.13859C21.935 6.39456 22 6.67481 22 6.95867V16.8576C22 17.4258 21.7696 17.9707 21.3596 18.3725C20.9495 18.7743 20.3933 19 19.8134 19H4.18658C3.60667 19 3.0505 18.7743 2.64044 18.3725C2.23037 17.9707 2 17.4258 2 16.8576V10.67C2.00009 10.2659 2.11675 9.87 2.33653 9.52805C2.55632 9.1861 2.87027 8.91198 3.24219 8.73731L11.0709 5.06472C11.1506 5.02731 11.237 5.00565 11.3252 5.00096C11.4134 4.99628 11.5017 5.00868 11.585 5.03743C11.6683 5.06619 11.745 5.11076 11.8108 5.16858C11.8765 5.2264 11.93 5.29634 11.9681 5.37441ZM7.2738 11.5016H4.87608V16.6569H8.23221V13.376H7.27295L7.2738 11.5016ZM14.2248 11.5016H12.0675V16.6569H15.4237L15.4233 13.376H14.2252L14.2248 11.5016Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,12 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_177_2014)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.776 14.304C8.416 14.304 9.696 14.272 11.488 13.536C13.568 12.672 17.664 11.136 20.64 9.536C22.72 8.416 23.616 6.944 23.616 4.96C23.616 2.24 21.408 0 18.656 0H7.136C3.2 0 0 3.2 0 7.136C0 11.072 3.008 14.304 7.776 14.304Z" fill="#39594D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.72803 19.2C9.72803 17.28 10.88 15.52 12.672 14.784L16.288 13.28C19.968 11.776 24 14.464 24 18.432C24 21.504 21.504 24 18.432 24H14.496C11.872 24 9.72803 21.856 9.72803 19.2Z" fill="#D18EE2"/>
<path d="M4.128 15.2319C1.856 15.2319 0 17.0879 0 19.3599V19.9039C0 22.1439 1.856 23.9999 4.128 23.9999C6.4 23.9999 8.256 22.1439 8.256 19.8719V19.3279C8.224 17.0879 6.4 15.2319 4.128 15.2319Z" fill="#FF7759"/>
</g>
<defs>
<clipPath id="clip0_177_2014">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -0,0 +1,71 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.9473 6.02637L23 12.3937L22.7993 13.7166L11.9576 7.47034L11.9473 6.02637Z" fill="url(#paint0_linear_1003_325075)"/>
<path d="M11.9507 8.45435L22.9999 14.8182L22.7993 16.0823L11.9524 9.90523L11.9507 8.45435Z" fill="url(#paint1_linear_1003_325075)"/>
<path d="M11.9917 10.8616L22.9994 17.1632L22.7988 18.448L12.0125 12.3021L11.9917 10.8616Z" fill="url(#paint2_linear_1003_325075)"/>
<path d="M1 5.95025L1.01211 18.6468L2.25768 18.882L2.21789 5.77905L1 5.95025Z" fill="url(#paint3_linear_1003_325075)"/>
<path d="M3.10889 4.769L3.11062 19.8537L4.37176 19.7949L4.34927 4.58569L3.10889 4.769Z" fill="url(#paint4_linear_1003_325075)"/>
<path d="M5.21729 3.58789V21.0677L6.4767 21.2493L6.48881 3.35962L5.21729 3.58789Z" fill="url(#paint5_linear_1003_325075)"/>
<path d="M1 5.95017L12.0147 12.3019L11.9922 10.8614L2.61924 5.49709C2.37013 5.35529 2.06393 5.35356 1.81481 5.49363L1 5.95017Z" fill="url(#paint6_linear_1003_325075)"/>
<path d="M3.94446 4.30219L3.10889 4.7691L11.9542 9.90514L11.9507 8.45425L4.75062 4.30737C4.5015 4.16384 4.1953 4.16038 3.94446 4.30219Z" fill="url(#paint7_linear_1003_325075)"/>
<path d="M5.21729 3.58798L6.08399 3.10377C6.33484 2.9637 6.64104 2.96543 6.89016 3.10896L11.9468 6.02457L11.9572 7.46854L5.21729 3.58798Z" fill="url(#paint8_linear_1003_325075)"/>
<path d="M12.0204 17.1628L12.017 15.1171L12.0222 14.6951L12.017 14.6986L12.0135 12.3018L1.0127 18.6466L1.84827 19.1291C2.10257 19.276 2.41569 19.2743 2.66827 19.1273L10.8527 14.3493V15.3747L3.11114 19.8536L3.96574 20.3448C4.21658 20.49 4.52624 20.49 4.77882 20.3465L10.8527 16.8758V17.8355L5.2165 21.0693L6.0711 21.5587C6.32194 21.7023 6.6316 21.7023 6.88418 21.5587L10.8544 19.283L12.0239 18.612L12.0204 17.1628Z" fill="url(#paint9_linear_1003_325075)"/>
<path d="M22.9998 17.163L17.5798 20.3311L16.7114 19.8434L22.595 16.4038C22.8458 16.2568 22.9998 15.9888 22.9998 15.6983V14.8163L15.471 19.1448L14.4953 18.5966L22.5812 14.0779C22.8389 13.9344 22.9998 13.6612 22.9998 13.3654V12.3918L12.0215 18.6104L17.1076 21.5243C17.3601 21.6696 17.6698 21.6678 17.9206 21.5226L22.5898 18.8335C22.8424 18.6882 22.9981 18.4185 22.9981 18.1262L22.9998 17.163Z" fill="url(#paint10_linear_1003_325075)"/>
<path d="M21.858 5.56447L17.7701 3.14345C17.5158 2.993 17.2009 2.99127 16.9449 3.13826L11.9453 6.0262L11.9557 7.47017L17.3203 4.35742L18.1628 4.86584L11.9488 8.45414L11.9522 9.90503L19.3945 5.60771L20.2232 6.10748L11.9903 10.8613L12.0128 12.3019L21.8528 6.62108C22.2576 6.38762 22.2611 5.80312 21.858 5.56447Z" fill="url(#paint11_linear_1003_325075)"/>
<defs>
<linearGradient id="paint0_linear_1003_325075" x1="113.894" y1="360.911" x2="1179.98" y2="509.029" gradientUnits="userSpaceOnUse">
<stop stop-color="#148FB4"/>
<stop offset="1" stop-color="#14B4BE"/>
</linearGradient>
<linearGradient id="paint1_linear_1003_325075" x1="71.8713" y1="363.078" x2="1147.45" y2="488.284" gradientUnits="userSpaceOnUse">
<stop stop-color="#148FB4"/>
<stop offset="1" stop-color="#14B4BE"/>
</linearGradient>
<linearGradient id="paint2_linear_1003_325075" x1="83.4027" y1="371.276" x2="1164.81" y2="463.045" gradientUnits="userSpaceOnUse">
<stop stop-color="#148FB4"/>
<stop offset="1" stop-color="#14B4BE"/>
</linearGradient>
<linearGradient id="paint3_linear_1003_325075" x1="63.8806" y1="-12.5896" x2="63.8806" y2="1571.21" gradientUnits="userSpaceOnUse">
<stop stop-color="#3311D4"/>
<stop offset="0.2722" stop-color="#5314E0"/>
<stop offset="0.5453" stop-color="#6C16E9"/>
<stop offset="0.7957" stop-color="#7B18EE"/>
<stop offset="1" stop-color="#8018F0"/>
</linearGradient>
<linearGradient id="paint4_linear_1003_325075" x1="66.2005" y1="111.305" x2="66.2005" y2="1483.1" gradientUnits="userSpaceOnUse">
<stop stop-color="#3311D4"/>
<stop offset="0.2034" stop-color="#4513DB"/>
<stop offset="0.7305" stop-color="#7017EA"/>
<stop offset="1" stop-color="#8018F0"/>
</linearGradient>
<linearGradient id="paint5_linear_1003_325075" x1="68.7154" y1="-253.954" x2="68.7154" y2="2533.3" gradientUnits="userSpaceOnUse">
<stop stop-color="#3311D4"/>
<stop offset="0.6282" stop-color="#8018F0"/>
</linearGradient>
<linearGradient id="paint6_linear_1003_325075" x1="-100.376" y1="178.272" x2="1175.01" y2="951.49" gradientUnits="userSpaceOnUse">
<stop offset="0.1495" stop-color="#645AFF"/>
<stop offset="1" stop-color="#AA64FA"/>
</linearGradient>
<linearGradient id="paint7_linear_1003_325075" x1="-86.4321" y1="141.306" x2="831.625" y2="680.338" gradientUnits="userSpaceOnUse">
<stop offset="0.188" stop-color="#645AFF"/>
<stop offset="1" stop-color="#AA64FA"/>
</linearGradient>
<linearGradient id="paint8_linear_1003_325075" x1="-105.936" y1="97.0607" x2="730.547" y2="568.776" gradientUnits="userSpaceOnUse">
<stop offset="0.2122" stop-color="#645AFF"/>
<stop offset="0.4681" stop-color="#775DFE"/>
<stop offset="0.9857" stop-color="#A964FA"/>
<stop offset="1" stop-color="#AA64FA"/>
</linearGradient>
<linearGradient id="paint9_linear_1003_325075" x1="404.896" y1="791.692" x2="823.67" y2="32.9467" gradientUnits="userSpaceOnUse">
<stop stop-color="#AA64FA"/>
<stop offset="1" stop-color="#645AFF"/>
</linearGradient>
<linearGradient id="paint10_linear_1003_325075" x1="12.1218" y1="474.502" x2="1109.91" y2="474.502" gradientUnits="userSpaceOnUse">
<stop stop-color="#2DF7F7"/>
<stop offset="1" stop-color="#17C8D2"/>
</linearGradient>
<linearGradient id="paint11_linear_1003_325075" x1="12.1027" y1="466.63" x2="1033.29" y2="466.63" gradientUnits="userSpaceOnUse">
<stop stop-color="#17C8D2"/>
<stop offset="1" stop-color="#2DF7F7"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_177_2019)">
<path d="M23.7479 4.482C23.4939 4.358 23.384 4.595 23.236 4.716C23.1849 4.755 23.142 4.806 23.099 4.852C22.727 5.249 22.2929 5.509 21.726 5.478C20.8969 5.432 20.1889 5.692 19.563 6.326C19.43 5.544 18.988 5.078 18.316 4.778C17.964 4.622 17.608 4.467 17.361 4.128C17.1889 3.887 17.142 3.618 17.056 3.354C17.0009 3.194 16.946 3.031 16.763 3.004C16.563 2.973 16.4849 3.14 16.4069 3.28C16.094 3.852 15.9729 4.482 15.9849 5.12C16.0119 6.556 16.618 7.7 17.823 8.513C17.9599 8.606 17.9949 8.7 17.952 8.836C17.8699 9.116 17.772 9.388 17.686 9.669C17.631 9.848 17.549 9.886 17.357 9.809C16.7082 9.53019 16.1189 9.12963 15.6209 8.629C14.7639 7.801 13.9899 6.887 13.0239 6.171C12.8001 6.00562 12.5703 5.84851 12.3349 5.7C11.3499 4.743 12.4649 3.957 12.7229 3.864C12.9929 3.766 12.8159 3.432 11.9439 3.436C11.0719 3.44 10.2739 3.731 9.25695 4.12C9.10582 4.17791 8.95033 4.22372 8.79195 4.257C7.84158 4.07793 6.8696 4.04355 5.90895 4.155C4.02395 4.365 2.51895 5.257 1.41195 6.778C0.0819496 8.606 -0.23105 10.684 0.15195 12.85C0.55495 15.134 1.72095 17.025 3.51195 18.503C5.36995 20.036 7.50895 20.787 9.94995 20.643C11.4319 20.558 13.0829 20.359 14.9439 18.783C15.4139 19.017 15.906 19.11 16.724 19.18C17.354 19.239 17.96 19.15 18.429 19.052C19.164 18.896 19.1129 18.215 18.8479 18.091C16.6929 17.087 17.166 17.496 16.735 17.165C17.831 15.869 19.481 14.523 20.127 10.162C20.177 9.815 20.134 9.597 20.127 9.317C20.123 9.147 20.162 9.08 20.357 9.061C20.898 9.00487 21.4228 8.84351 21.902 8.586C23.298 7.823 23.862 6.571 23.995 5.069C24.015 4.839 23.9909 4.603 23.7479 4.482ZM11.5809 18C9.49195 16.358 8.47895 15.817 8.06095 15.84C7.66895 15.864 7.73995 16.311 7.82595 16.603C7.91595 16.891 8.03295 17.089 8.19695 17.342C8.31095 17.509 8.38895 17.758 8.08395 17.945C7.41095 18.361 6.24195 17.805 6.18695 17.778C4.82595 16.976 3.68695 15.918 2.88595 14.471C2.11195 13.078 1.66195 11.584 1.58795 9.989C1.56795 9.603 1.68095 9.467 2.06495 9.397C2.56906 9.30053 3.08558 9.28735 3.59395 9.358C5.72595 9.67 7.53995 10.623 9.06195 12.132C9.92995 12.992 10.5869 14.019 11.2639 15.023C11.9839 16.089 12.7579 17.105 13.7439 17.937C14.0919 18.229 14.3689 18.451 14.6349 18.614C13.8329 18.704 12.4949 18.724 11.5809 18ZM12.5809 11.56C12.5808 11.5103 12.5927 11.4614 12.6157 11.4173C12.6387 11.3733 12.672 11.3355 12.7129 11.3072C12.7538 11.279 12.8009 11.2611 12.8502 11.2551C12.8995 11.2492 12.9495 11.2553 12.9959 11.273C13.0551 11.2942 13.1062 11.3334 13.142 11.385C13.1779 11.4366 13.1967 11.4982 13.1959 11.561C13.1961 11.6016 13.1881 11.6418 13.1726 11.6793C13.157 11.7168 13.1341 11.7509 13.1053 11.7795C13.0764 11.808 13.0422 11.8306 13.0045 11.8458C12.9669 11.861 12.9266 11.8685 12.8859 11.868C12.8457 11.8681 12.8057 11.8602 12.7685 11.8448C12.7313 11.8293 12.6976 11.8065 12.6693 11.7779C12.641 11.7492 12.6186 11.7151 12.6037 11.6777C12.5887 11.6403 12.5803 11.6003 12.5809 11.56ZM15.6909 13.156C15.4909 13.237 15.2919 13.307 15.1009 13.316C14.8136 13.326 14.5316 13.2363 14.3029 13.062C14.0289 12.832 13.8329 12.704 13.7509 12.304C13.7227 12.1085 13.7281 11.9096 13.7669 11.716C13.8369 11.389 13.7589 11.179 13.5279 10.989C13.3409 10.833 13.1019 10.79 12.8399 10.79C12.7502 10.7848 12.6631 10.758 12.5859 10.712C12.5537 10.6974 12.5249 10.6761 12.5013 10.6497C12.4778 10.6232 12.4601 10.5921 12.4494 10.5583C12.4386 10.5246 12.4351 10.489 12.439 10.4538C12.4429 10.4186 12.4541 10.3846 12.4719 10.354C12.4999 10.3 12.6319 10.168 12.6639 10.144C13.0199 9.942 13.431 10.008 13.8099 10.16C14.162 10.304 14.4279 10.568 14.8109 10.942C15.2019 11.393 15.273 11.518 15.4959 11.856C15.6719 12.121 15.8319 12.393 15.9409 12.704C16.0079 12.899 15.9219 13.058 15.6909 13.156Z" fill="#4D6BFE"/>
</g>
<defs>
<clipPath id="clip0_177_2019">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.6601 7.01709C21.9761 6.71199 22.2283 6.34699 22.4017 5.9434C22.5752 5.53981 22.6666 5.10572 22.6705 4.66644C22.6744 4.22717 22.5907 3.79152 22.4244 3.38491C22.2581 2.97831 22.0125 2.6089 21.7019 2.29824C21.3914 1.98758 21.022 1.7419 20.6154 1.57552C20.2089 1.40915 19.7732 1.32542 19.334 1.32923C18.8947 1.33303 18.4606 1.42429 18.0569 1.59767C17.6533 1.77106 17.2883 2.0231 16.9831 2.33909L13.5251 5.79709C13.2091 6.10226 12.9571 6.46731 12.7837 6.87093C12.6103 7.27456 12.519 7.70868 12.5152 8.14795C12.5114 8.58723 12.5952 9.02286 12.7615 9.42943C12.9279 9.836 13.1736 10.2054 13.4842 10.5159C13.7949 10.8265 14.1643 11.0721 14.5709 11.2384C14.9775 11.4047 15.4132 11.4884 15.8524 11.4845C16.2917 11.4806 16.7258 11.3892 17.1294 11.2157C17.533 11.0423 17.898 10.7901 18.2031 10.4741L21.6601 7.01709ZM10.4751 18.2031C10.7871 17.897 11.0354 17.5321 11.2056 17.1295C11.3758 16.7269 11.4645 16.2946 11.4667 15.8575C11.4688 15.4204 11.3842 14.9872 11.2179 14.583C11.0516 14.1787 10.8069 13.8115 10.4978 13.5024C10.1887 13.1933 9.82146 12.9485 9.41722 12.7822C9.01299 12.6159 8.57981 12.5314 8.14271 12.5335C7.70561 12.5356 7.27327 12.6244 6.87066 12.7945C6.46805 12.9647 6.10317 13.213 5.79709 13.5251L2.33909 16.9831C2.0231 17.2883 1.77106 17.6533 1.59767 18.0569C1.42429 18.4606 1.33303 18.8947 1.32923 19.334C1.32542 19.7732 1.40915 20.2089 1.57552 20.6154C1.7419 21.022 1.98758 21.3914 2.29824 21.7019C2.6089 22.0125 2.97831 22.2581 3.38491 22.4244C3.79152 22.5907 4.22717 22.6744 4.66644 22.6705C5.10572 22.6666 5.53981 22.5752 5.9434 22.4017C6.34699 22.2283 6.71199 21.9761 7.01709 21.6601L10.4751 18.2031Z" fill="#7748F9"/>
<path d="M18.2028 13.525C17.8967 13.213 17.5318 12.9647 17.1292 12.7945C16.7266 12.6243 16.2942 12.5356 15.8572 12.5335C15.4201 12.5313 14.9869 12.6159 14.5826 12.7822C14.1784 12.9485 13.8111 13.1932 13.5021 13.5023C13.193 13.8114 12.9482 14.1786 12.7819 14.5829C12.6156 14.9871 12.5311 15.4203 12.5332 15.8574C12.5353 16.2945 12.624 16.7268 12.7942 17.1294C12.9644 17.5321 13.2127 17.8969 13.5248 18.203L16.9828 21.661C17.6052 22.2715 18.4434 22.6116 19.3152 22.6074C20.1869 22.6032 21.0218 22.255 21.6383 21.6385C22.2547 21.0221 22.6029 20.1872 22.6071 19.3154C22.6113 18.4436 22.2712 17.6054 21.6608 16.983L18.2028 13.525ZM7.01677 2.33902C6.7107 2.02697 6.34581 1.77867 5.9432 1.60847C5.5406 1.43828 5.10825 1.34956 4.67115 1.34745C4.23405 1.34534 3.80087 1.42987 3.39664 1.59617C2.99241 1.76246 2.62514 2.00722 2.31606 2.3163C2.00698 2.62538 1.76222 2.99265 1.59592 3.39688C1.42963 3.80112 1.34509 4.2343 1.34721 4.6714C1.34932 5.10849 1.43804 5.54084 1.60823 5.94345C1.77842 6.34605 2.02672 6.71094 2.33877 7.01702L5.79677 10.474C6.42076 11.0764 7.25636 11.4096 8.12362 11.4019C8.99088 11.3942 9.82043 11.0462 10.4336 10.4329C11.0468 9.81955 11.3946 8.98993 11.4022 8.12266C11.4097 7.2554 11.0763 6.41988 10.4738 5.79602L7.01677 2.33902Z" fill="#BFABFB"/>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,13 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1004_325513)">
<path d="M5.30998 15.7561C5.48198 12.0061 7.19298 9.75709 7.85898 9.01709C4.59898 11.0751 2.43398 14.6751 1.50098 17.3251V18.4451C1.50098 21.5131 4.22598 24.0001 7.58998 24.0001C8.3393 24.0011 9.0833 23.8743 9.78998 23.6251C10.143 23.5051 10.49 23.3771 10.829 23.2471C11.742 22.3481 12.479 21.3371 13.072 20.2551C8.19498 22.6861 5.09798 20.3271 5.30898 15.7551L5.30998 15.7561Z" fill="#1E37FC"/>
<path d="M22.5701 10.2829C21.3581 9.38191 18.4611 7.87891 15.1731 7.48291C15.4681 11.2749 15.2661 16.2489 13.0731 20.2559C12.4758 21.3579 11.7198 22.366 10.8291 23.2479C14.5931 21.7999 17.5751 19.7909 19.4251 18.0289C22.2451 15.3459 22.7781 12.8509 22.7861 11.3689C22.7886 10.9966 22.7151 10.6278 22.5701 10.2849V10.2829Z" fill="#37E1BE"/>
<path d="M14.303 1.867C12.955 0.7 11.248 0 9.39 0C7.532 0 5.883 0.677 4.545 1.807C2.791 3.29 1.627 5.557 1.5 8.125V17.326C2.432 14.676 4.597 11.076 7.857 9.019C8.357 8.701 8.882 8.424 9.426 8.19C11.309 7.389 13.304 7.258 15.172 7.484C14.95 4.654 14.454 2.482 14.302 1.867H14.303Z" fill="#A569FF"/>
<path d="M17.3052 4.96094C16.9437 4.59767 16.5837 4.233 16.2252 3.86694C16.0232 3.65394 15.8272 3.44794 15.6392 3.24494L14.3062 1.86694C14.4572 2.48194 14.9542 4.65294 15.1752 7.48394C18.4632 7.87894 21.3602 9.38194 22.5712 10.2839C21.2652 9.00894 19.0962 6.79694 17.3052 4.96094Z" fill="#1E37FC"/>
</g>
<defs>
<clipPath id="clip0_1004_325513">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 1H21V2.64175L13.7455 12L21 21.3582V23H4V1ZM12.6074 10.4857L18.5028 2.64175H6.71105L12.6074 10.4857ZM5.91295 4.60708V11.1796H10.8519L5.91295 4.60708ZM10.8519 12.8204H5.91295V19.3929L10.8519 12.8204ZM6.71105 21.3592L12.6074 13.5153L18.5028 21.3592H6.71105Z" fill="#1F40ED"/>
</svg>

After

Width:  |  Height:  |  Size: 428 B

View File

@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.8 5L11.999 11.795L9.195 5H7.397L10.469 12.428C10.5917 12.7301 10.8017 12.9888 11.0722 13.1709C11.3426 13.3531 11.6612 13.4505 11.9873 13.4507C12.3134 13.451 12.6322 13.354 12.9028 13.1721C13.1735 12.9903 13.3839 12.7319 13.507 12.43L16.598 5H14.8ZM15.996 15.352L21.12 10.108L20.421 8.439L14.825 14.178C14.5965 14.4121 14.4422 14.7084 14.3811 15.0298C14.3201 15.3512 14.3552 15.6834 14.482 15.985C14.6065 16.2846 14.8169 16.5406 15.0867 16.7207C15.3565 16.9008 15.6736 16.9969 15.998 16.997L16 17L24 16.98L23.301 15.311L15.998 15.352H15.996ZM2.88 10.104L3.579 8.435L9.175 14.174C9.643 14.653 9.778 15.363 9.518 15.981C9.39342 16.2805 9.18299 16.5364 8.9132 16.7165C8.64342 16.8966 8.32637 16.9928 8.002 16.993L0.002 16.975L0 16.977L0.699 15.308L8.002 15.35L2.88 10.104Z" fill="#5019C5"/>
</svg>

After

Width:  |  Height:  |  Size: 943 B

View File

@@ -0,0 +1,16 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1004_325515)">
<path d="M18 0H6C2.68629 0 0 2.68629 0 6V18C0 21.3137 2.68629 24 6 24H18C21.3137 24 24 21.3137 24 18V6C24 2.68629 21.3137 0 18 0Z" fill="url(#paint0_linear_1004_325515)"/>
<path d="M20 12.0116C15.7043 12.42 12.3692 15.757 11.9995 20C11.652 15.8183 8.20301 12.361 4 12.0181C8.21855 11.6991 11.6656 8.1853 12.006 4C12.2833 8.19653 15.8057 11.7005 20 12.0116Z" fill="white" fill-opacity="0.88"/>
</g>
<defs>
<linearGradient id="paint0_linear_1004_325515" x1="-9" y1="29.5" x2="19.4387" y2="1.43791" gradientUnits="userSpaceOnUse">
<stop offset="0.192878" stop-color="#1C7DFF"/>
<stop offset="0.520213" stop-color="#1C69FF"/>
<stop offset="1" stop-color="#F0DCD6"/>
</linearGradient>
<clipPath id="clip0_1004_325515">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 921 B

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1004_325516)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0792 14.6368C15.2982 15.4516 15.539 16.2847 15.8 17.15C16.0381 17.9395 15.3275 18.25 15.0451 17.5054C14.7426 16.7079 14.4531 15.9137 14.1808 15.1037C12.639 15.8792 11.1015 16.5254 9.35766 17.2524C10.0549 19.8153 10.6985 21.959 11.6971 23.996C11.6971 23.996 11.6972 23.9961 11.6971 23.996C11.7977 23.9985 11.8988 23.9999 12 23.9999C18.6274 23.9999 24 18.6274 24 11.9999C24 9.62004 23.3072 7.4019 22.1122 5.53632C18.9951 5.81715 16.2308 6.27366 13.6911 6.84354C13.7329 7.35114 13.7806 7.84428 13.8333 8.31294C14.0294 10.0562 14.3467 11.7168 14.7682 13.4301C16.2349 12.7708 17.4504 12.1934 18.409 11.7131C19.3292 11.252 20.2166 11.2237 18.7211 12.3956C17.4233 13.2961 16.2386 14.0139 15.0792 14.6368ZM21.6935 4.92502C19.8001 2.33505 16.8937 0.532419 13.5573 0.100071C13.4554 1.71735 13.4871 3.75801 13.6086 5.70262C16.0484 5.3331 18.7033 5.07613 21.6935 4.92502ZM11.9621 0C11.8556 1.75611 11.903 3.99392 12.114 5.9477C10.4249 6.24648 8.8335 6.60378 7.29552 7.02222C7.22916 6.25536 7.19562 5.55453 7.19562 4.94501C7.19562 4.50318 6.83742 4.14501 6.39558 4.14501C5.95378 4.14501 5.59561 4.50318 5.59561 4.94501C5.59561 5.68715 5.65724 6.53874 5.76841 7.46274C5.0014 7.69662 4.24438 7.94652 3.49151 8.21274C3.07496 8.3601 2.85671 8.81718 3.00402 9.2337C3.15134 9.65028 3.60844 9.8685 4.02498 9.7212C4.67586 9.49104 5.33089 9.26322 5.99356 9.03948C6.31332 11.0006 6.80064 13.1656 7.36218 15.2493C7.46016 15.613 7.56372 15.9757 7.67178 16.3357C5.60501 17.048 3.49567 17.6269 1.56677 17.9327C0.569644 16.1829 0 14.158 0 11.9999C0 5.38515 5.35214 0.0204081 11.9621 0ZM2.51491 19.3516C4.47041 21.8709 7.40748 23.5903 10.7522 23.9359C9.95496 22.4729 8.96028 20.2301 8.1243 17.754C6.26424 18.4657 4.3553 18.9616 2.51491 19.3516ZM13.7841 13.868C13.2887 12.2459 12.8677 10.5264 12.5535 8.56614C12.4476 8.1504 12.3551 7.68204 12.2756 7.1781C10.5905 7.5963 8.99952 8.06226 7.46136 8.55582C7.70874 10.4859 8.12688 12.68 8.70708 14.833C8.7972 15.1675 8.88486 15.4948 8.97084 15.8156L8.97144 15.818L8.9838 15.864C9.70998 15.5923 10.4248 15.3073 11.118 15.0155C12.0741 14.6131 12.9631 14.2298 13.7841 13.868Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_1004_325516">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1004_325517)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.0099 0.199951C5.36875 0.199951 0 5.60828 0 12.2991C0 17.6475 3.43994 22.1747 8.21205 23.7771C8.80869 23.8975 9.02724 23.5167 9.02724 23.1964C9.02724 22.9159 9.00757 21.9545 9.00757 20.9527C5.6667 21.674 4.97099 19.5104 4.97099 19.5104C4.43409 18.1082 3.63858 17.7478 3.63858 17.7478C2.54511 17.0066 3.71823 17.0066 3.71823 17.0066C4.93117 17.0867 5.56763 18.2485 5.56763 18.2485C6.64118 20.0913 8.37111 19.5706 9.06706 19.25C9.16638 18.4688 9.48473 17.928 9.82275 17.6275C7.15817 17.3471 4.35469 16.3055 4.35469 11.658C4.35469 10.3359 4.8316 9.25423 5.58729 8.41299C5.46807 8.11258 5.0504 6.87039 5.70677 5.20782C5.70677 5.20782 6.72083 4.88725 9.00732 6.44977C9.98625 6.18492 10.9958 6.05019 12.0099 6.04906C13.024 6.04906 14.0577 6.18943 15.0123 6.44977C17.299 4.88725 18.3131 5.20782 18.3131 5.20782C18.9695 6.87039 18.5515 8.11258 18.4323 8.41299C19.2079 9.25423 19.6652 10.3359 19.6652 11.658C19.6652 16.3055 16.8617 17.3269 14.1772 17.6275C14.6148 18.0081 14.9924 18.7291 14.9924 19.871C14.9924 21.4935 14.9727 22.7957 14.9727 23.1962C14.9727 23.5167 15.1915 23.8975 15.7879 23.7773C20.56 22.1745 23.9999 17.6475 23.9999 12.2991C24.0196 5.60828 18.6312 0.199951 12.0099 0.199951Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_1004_325517">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,151 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_177_1962" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24">
<path d="M23.5232 9.77372H12.2502V14.3873H18.7277C18.6236 15.0403 18.3897 15.6826 18.0474 16.2683C17.6551 16.9393 17.1701 17.4502 16.673 17.8392C15.1839 19.0046 13.4479 19.2429 12.2423 19.2429C9.19671 19.2429 6.59445 17.2325 5.58706 14.5006C5.5464 14.4014 5.51941 14.299 5.48654 14.1978C5.26392 13.5025 5.14229 12.7661 5.14229 12.0008C5.14229 11.2042 5.274 10.4417 5.51416 9.7216C6.46145 6.88141 9.12238 4.76006 12.2445 4.76006C12.8725 4.76006 13.4772 4.83641 14.0507 4.98869C15.3613 5.3367 16.2884 6.02212 16.8565 6.56428L20.2841 3.13576C18.1991 1.18317 15.481 2.95218e-09 12.2388 2.95218e-09C9.64684 -5.69793e-05 7.25382 0.824781 5.29283 2.21878C3.70253 3.34928 2.39825 4.86288 1.51802 6.62075C0.699287 8.25066 0.250977 10.0569 0.250977 11.999C0.250977 13.9411 0.699972 15.7661 1.51871 17.381V17.3918C2.3835 19.1062 3.64812 20.5823 5.18514 21.7076C6.52788 22.6907 8.93555 24 12.2388 24C14.1384 24 15.822 23.6502 17.3068 22.9946C18.3778 22.5217 19.3268 21.9049 20.186 21.1122C21.3213 20.0647 22.2104 18.7691 22.8173 17.2785C23.4242 15.7878 23.7488 14.1022 23.7488 12.2747C23.7488 11.4236 23.6651 10.5592 23.5232 9.77363V9.77372Z" fill="white"/>
</mask>
<g mask="url(#mask0_177_1962)">
<g filter="url(#filter0_f_177_1962)">
<path d="M0.078125 12.0803C0.0905853 13.9918 0.623862 15.964 1.43107 17.5561V17.567C2.01431 18.7233 2.81143 19.6366 3.71935 20.5415L9.20291 18.4979C8.16545 17.9597 8.00714 17.6298 7.26346 17.028C6.50348 16.2453 5.93706 15.3467 5.58431 14.2931H5.5701L5.58431 14.2822C5.35224 13.5864 5.32935 12.8479 5.32079 12.0803H0.078125Z" fill="url(#paint0_radial_177_1962)"/>
</g>
<g filter="url(#filter1_f_177_1962)">
<path d="M12.2502 -0.0874023C11.7083 1.85739 11.9155 3.74779 12.2502 4.84771C12.8761 4.84819 13.479 4.92439 14.0507 5.07619C15.3614 5.42421 16.2883 6.10964 16.8564 6.6518L20.3718 3.13569C18.2893 1.18543 15.7831 -0.0843296 12.2502 -0.0874023Z" fill="url(#paint1_radial_177_1962)"/>
</g>
<g filter="url(#filter2_f_177_1962)">
<path d="M12.2384 -0.102783C9.5799 -0.102842 7.12547 0.743172 5.11414 2.17297C4.36733 2.70385 3.682 3.31711 3.07175 3.99906C2.91188 5.53093 4.26849 7.41374 6.95501 7.39816C8.25849 5.84951 10.1863 4.84754 12.332 4.84754C12.3339 4.84754 12.3358 4.8477 12.3378 4.84771L12.2502 -0.102433C12.2462 -0.102435 12.2424 -0.102783 12.2384 -0.102783Z" fill="url(#paint2_radial_177_1962)"/>
</g>
<g filter="url(#filter3_f_177_1962)">
<path d="M21.013 12.6347L18.6401 14.2997C18.536 14.9526 18.302 15.595 17.9596 16.1806C17.5674 16.8517 17.0824 17.3626 16.5853 17.7516C15.0994 18.9146 13.368 19.1541 12.1626 19.1551C10.9168 21.3223 10.6984 22.4078 12.2503 24.1569C14.1705 24.1555 15.8729 23.8014 17.3745 23.1384C18.46 22.6592 19.4217 22.0341 20.2924 21.2307C21.4429 20.1692 22.3441 18.8561 22.9591 17.3455C23.5741 15.8349 23.903 14.1267 23.903 12.2747L21.013 12.6347Z" fill="url(#paint3_radial_177_1962)"/>
</g>
<g filter="url(#filter4_f_177_1962)">
<path d="M12.0752 9.59839V14.5626H23.4918C23.5922 13.8827 23.9243 13.003 23.9243 12.2747C23.9243 11.4235 23.8406 10.384 23.6987 9.59839H12.0752Z" fill="#3086FF"/>
</g>
<g filter="url(#filter5_f_177_1962)">
<path d="M3.12631 3.82397C2.42179 4.61129 1.81991 5.49252 1.3427 6.44555C0.523974 8.07546 0.0756836 10.057 0.0756836 11.999C0.0756836 12.0264 0.0779013 12.0532 0.0780801 12.0805C0.440668 12.7906 5.08657 12.6546 5.32075 12.0805C5.32045 12.0537 5.3175 12.0276 5.3175 12.0007C5.3175 11.2042 5.44925 10.6171 5.68941 9.89696C5.98567 9.00868 6.44956 8.1907 7.04274 7.48595C7.17721 7.3106 7.53588 6.93366 7.64052 6.70756C7.68038 6.62144 7.56815 6.5731 7.56188 6.54279C7.55486 6.50888 7.40438 6.53615 7.37067 6.51089C7.26364 6.4307 7.05169 6.38883 6.92298 6.35161C6.64789 6.27205 6.19198 6.09661 5.93875 5.91474C5.13831 5.33986 3.88915 4.65317 3.12631 3.82397Z" fill="url(#paint4_radial_177_1962)"/>
</g>
<g filter="url(#filter6_f_177_1962)">
<path d="M5.95605 6.54615C7.81219 7.69454 8.34598 5.9665 9.58006 5.42575L7.43335 0.878906C6.64367 1.2179 5.89758 1.63907 5.20532 2.13117C4.1715 2.86608 3.25855 3.76289 2.50439 4.78347L5.95605 6.54615Z" fill="url(#paint5_radial_177_1962)"/>
</g>
<g filter="url(#filter7_f_177_1962)">
<path d="M6.71164 18.1467C4.22002 19.0654 3.82994 19.0984 3.60059 20.6755C4.03887 21.1123 4.50977 21.5164 5.01018 21.8828C6.35293 22.8659 8.93579 24.1752 12.239 24.1752C12.2429 24.1752 12.2466 24.1748 12.2505 24.1748V19.0674C12.248 19.0674 12.2451 19.0676 12.2426 19.0676C11.0057 19.0676 10.0172 18.7357 9.00377 18.1587C8.75389 18.0164 8.30055 18.3984 8.07009 18.2276C7.75225 17.9921 6.98732 18.4306 6.71164 18.1467Z" fill="url(#paint6_radial_177_1962)"/>
</g>
<g opacity="0.5" filter="url(#filter8_f_177_1962)">
<path d="M10.791 18.9065V24.0863C11.2532 24.1416 11.7342 24.1752 12.2388 24.1752C12.7446 24.1752 13.2339 24.1486 13.7095 24.0999V18.9414C13.1766 19.0345 12.6747 19.0675 12.2424 19.0675C11.7444 19.0675 11.2602 19.0083 10.791 18.9065Z" fill="url(#paint7_linear_177_1962)"/>
</g>
</g>
<defs>
<filter id="filter0_f_177_1962" x="0.0369325" y="12.0391" width="9.20738" height="8.54357" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter1_f_177_1962" x="11.8758" y="-0.128595" width="8.53697" height="6.82164" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter2_f_177_1962" x="3.01789" y="-0.143976" width="9.36119" height="7.58336" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter3_f_177_1962" x="11.1155" y="12.2335" width="12.8285" height="11.9647" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter4_f_177_1962" x="12.034" y="9.5572" width="11.9315" height="5.0465" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter5_f_177_1962" x="0.0344911" y="3.78278" width="7.65563" height="8.82189" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter6_f_177_1962" x="2.21479" y="0.589306" width="7.65488" height="6.63242" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.1448" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter7_f_177_1962" x="3.55939" y="18.085" width="8.73229" height="6.13146" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<filter id="filter8_f_177_1962" x="10.7498" y="18.8653" width="3.00084" height="5.35094" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.0205962" result="effect1_foregroundBlur_177_1962"/>
</filter>
<radialGradient id="paint0_radial_177_1962" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(9.09314 20.3614) rotate(-92.3395) scale(11.9619 17.5706)">
<stop offset="0.141612" stop-color="#1ABD4D"/>
<stop offset="0.247515" stop-color="#6EC30D"/>
<stop offset="0.311547" stop-color="#8AC502"/>
<stop offset="0.366013" stop-color="#A2C600"/>
<stop offset="0.445673" stop-color="#C8C903"/>
<stop offset="0.540305" stop-color="#EBCB03"/>
<stop offset="0.615636" stop-color="#F7CD07"/>
<stop offset="0.699345" stop-color="#FDCD04"/>
<stop offset="0.771242" stop-color="#FDCE05"/>
<stop offset="0.860566" stop-color="#FFCE0A"/>
</radialGradient>
<radialGradient id="paint1_radial_177_1962" cx="0" cy="0" r="1" gradientTransform="matrix(8.29246 -2.03557e-05 -1.16554e-05 10.7093 20.043 6.3974)" gradientUnits="userSpaceOnUse">
<stop offset="0.408458" stop-color="#FB4E5A"/>
<stop offset="1" stop-color="#FF4540"/>
</radialGradient>
<radialGradient id="paint2_radial_177_1962" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.5143 -1.65299) rotate(151.02) scale(13.2813 18.0227)">
<stop offset="0.231273" stop-color="#FF4541"/>
<stop offset="0.311547" stop-color="#FF4540"/>
<stop offset="0.457516" stop-color="#FF4640"/>
<stop offset="0.540305" stop-color="#FF473F"/>
<stop offset="0.699346" stop-color="#FF5138"/>
<stop offset="0.771242" stop-color="#FF5B33"/>
<stop offset="0.860566" stop-color="#FF6C29"/>
<stop offset="1" stop-color="#FF8C18"/>
</radialGradient>
<radialGradient id="paint3_radial_177_1962" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.423 22.6036) rotate(-127.454) scale(34.6477 12.7893)">
<stop offset="0.131546" stop-color="#0CBA65"/>
<stop offset="0.209784" stop-color="#0BB86D"/>
<stop offset="0.297297" stop-color="#09B479"/>
<stop offset="0.396257" stop-color="#08AD93"/>
<stop offset="0.477124" stop-color="#0AA6A9"/>
<stop offset="0.568425" stop-color="#0D9CC6"/>
<stop offset="0.667385" stop-color="#1893DD"/>
<stop offset="0.768727" stop-color="#258BF1"/>
<stop offset="0.858506" stop-color="#3086FF"/>
</radialGradient>
<radialGradient id="paint4_radial_177_1962" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.2206 2.16411) rotate(96.6178) scale(12.9384 17.8896)">
<stop offset="0.366013" stop-color="#FF4E3A"/>
<stop offset="0.457516" stop-color="#FF8A1B"/>
<stop offset="0.540305" stop-color="#FFA312"/>
<stop offset="0.615636" stop-color="#FFB60C"/>
<stop offset="0.771242" stop-color="#FFCD0A"/>
<stop offset="0.860566" stop-color="#FECF0A"/>
<stop offset="0.915033" stop-color="#FECF08"/>
<stop offset="1" stop-color="#FDCD01"/>
</radialGradient>
<radialGradient id="paint5_radial_177_1962" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(9.12386 2.03076) rotate(132.119) scale(6.42638 18.1259)">
<stop offset="0.315904" stop-color="#FF4C3C"/>
<stop offset="0.603818" stop-color="#FF692C"/>
<stop offset="0.726837" stop-color="#FF7825"/>
<stop offset="0.884534" stop-color="#FF8D1B"/>
<stop offset="1" stop-color="#FF9F13"/>
</radialGradient>
<radialGradient id="paint6_radial_177_1962" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.5147 25.6525) rotate(-151.02) scale(13.2813 18.0227)">
<stop offset="0.231273" stop-color="#0FBC5F"/>
<stop offset="0.311547" stop-color="#0FBC5F"/>
<stop offset="0.366013" stop-color="#0FBC5E"/>
<stop offset="0.457516" stop-color="#0FBC5D"/>
<stop offset="0.540305" stop-color="#12BC58"/>
<stop offset="0.699346" stop-color="#28BF3C"/>
<stop offset="0.771242" stop-color="#38C02B"/>
<stop offset="0.860566" stop-color="#52C218"/>
<stop offset="0.915033" stop-color="#67C30F"/>
<stop offset="1" stop-color="#86C504"/>
</radialGradient>
<linearGradient id="paint7_linear_177_1962" x1="10.791" y1="21.5408" x2="13.7095" y2="21.5408" gradientUnits="userSpaceOnUse">
<stop stop-color="#0FBC5C"/>
<stop offset="1" stop-color="#0CBA65"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.77894 20.4654C2.51173 21.463 3.69316 22.1104 5.02582 22.1104L5.30822 22.1105C4.53634 22.1641 3.74075 21.9961 3.02028 21.5801C2.5196 21.2911 2.10449 20.9107 1.78385 20.4722L1.77894 20.4654ZM14.0131 2.54008C15.9387 3.65187 16.5985 6.11423 15.4867 8.03991L12.0121 14.0581L5.02582 14.0581C3.64432 14.0581 2.42534 14.7539 1.7002 15.8142L8.51321 4.01375C9.62501 2.08807 12.0874 1.42828 14.0131 2.54008Z" fill="#F8E71C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9872 14.0581L15.4793 20.1065C16.1751 21.3117 17.3999 22.021 18.6911 22.1106L5.04032 22.1104C2.81673 22.1104 1.01416 20.3079 1.01416 18.0843C1.01416 15.8607 2.81673 14.0581 5.04032 14.0581L11.9872 14.0581ZM22.9997 18.0843C22.9997 18.9754 22.7102 19.799 22.22 20.466C23.1286 19.2185 23.2741 17.5029 22.4528 16.0803L22.2993 15.8143C22.7412 16.4606 22.9997 17.2422 22.9997 18.0843Z" fill="#E3122B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.6388 4.3038L22.4378 16.0803C23.5496 18.006 22.8898 20.4683 20.9641 21.5801C19.0385 22.6919 16.5761 22.0321 15.4643 20.1064L11.992 14.0922L15.4863 8.03991C16.1727 6.85107 16.1838 5.45767 15.6388 4.3038ZM11.992 2.00002L11.9365 2.00055C10.5686 2.02328 9.24654 2.7428 8.51276 4.01375L8.34521 4.30377C8.68304 3.58862 9.23453 2.96548 9.97136 2.54008C10.6089 2.17199 11.3053 1.99809 11.992 2.00002Z" fill="#4A90E2"/>
<path d="M11.9923 10.0394C14.2117 10.0394 16.0109 8.24024 16.0109 6.02082C16.0109 3.8014 14.2117 2.0022 11.9923 2.0022C9.77283 2.0022 7.97363 3.8014 7.97363 6.02082C7.97363 8.24024 9.77283 10.0394 11.9923 10.0394Z" fill="#7ED321" stroke="#7ED321"/>
<path d="M5.01862 22.1178C7.23805 22.1178 9.03724 20.3186 9.03724 18.0992C9.03724 15.8798 7.23805 14.0806 5.01862 14.0806C2.7992 14.0806 1 15.8798 1 18.0992C1 20.3186 2.7992 22.1178 5.01862 22.1178Z" fill="#ED9A12" stroke="#ED9A12"/>
<path d="M18.9654 22.1178C21.1848 22.1178 22.984 20.3186 22.984 18.0992C22.984 15.8798 21.1848 14.0806 18.9654 14.0806C16.746 14.0806 14.9468 15.8798 14.9468 18.0992C14.9468 20.3186 16.746 22.1178 18.9654 22.1178Z" fill="#6E29AA"/>
<path d="M11.9846 7.37039C12.7258 7.37039 13.3267 6.76953 13.3267 6.02833C13.3267 5.28714 12.7258 4.68628 11.9846 4.68628C11.2434 4.68628 10.6426 5.28714 10.6426 6.02833C10.6426 6.76953 11.2434 7.37039 11.9846 7.37039Z" fill="#4A90E2"/>
<path d="M18.9666 19.449C19.7078 19.449 20.3086 18.8481 20.3086 18.1069C20.3086 17.3658 19.7078 16.7649 18.9666 16.7649C18.2254 16.7649 17.6245 17.3658 17.6245 18.1069C17.6245 18.8481 18.2254 19.449 18.9666 19.449Z" fill="#E3122B"/>
<path d="M5.01784 19.449C5.75903 19.449 6.35989 18.8481 6.35989 18.1069C6.35989 17.3658 5.75903 16.7649 5.01784 16.7649C4.27664 16.7649 3.67578 17.3658 3.67578 18.1069C3.67578 18.8481 4.27664 19.449 5.01784 19.449Z" fill="#F8E71C"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.00558 8.48309L11.8706 23.9998H16.6996L5.83455 8.48309H1.00558Z" fill="black"/>
<path d="M1 23.9998H5.83222L8.24647 20.5525L5.83036 17.1015L1 23.9998Z" fill="black"/>
<path d="M22.6373 0.000244141H17.8051L9.45453 11.9257L11.8711 15.3763L22.6373 0.000244141Z" fill="black"/>
<path d="M18.6788 23.9998H22.6373V1.7255L18.6788 7.37857V23.9998Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 470 B

View File

@@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_177_2053)">
<path d="M0 0H24V24H0V0Z" fill="#F54F35"/>
<path d="M15.2837 5.85076L15.51 6.03226C16.2791 6.72097 16.7884 7.70032 16.9554 8.71644C16.9669 8.93411 16.973 9.15202 16.9746 9.37005L16.9782 9.75775L16.9796 10.1735L16.9816 10.6049C16.9828 10.906 16.9835 11.2072 16.984 11.5082C16.9852 11.9667 16.9889 12.4252 16.9926 12.8838C16.9934 13.177 16.994 13.4701 16.9945 13.7631L16.9991 14.1759C16.9951 15.5749 16.5963 16.7825 15.6289 17.8233C15.0854 18.3284 14.5366 18.7035 13.8509 18.9851L13.5659 19.1111C12.4584 19.5117 11.142 19.3973 10.0579 18.9761C9.459 18.692 8.96467 18.3588 8.47774 17.9105C8.91691 17.37 9.36252 16.9082 9.91058 16.4776L10.2763 16.7612C10.9416 17.2338 11.6059 17.3834 12.418 17.3135C13.2491 17.1482 13.9052 16.7759 14.4479 16.1194C14.9463 15.3094 14.996 14.6601 14.9889 13.7201L14.9903 13.3055C14.9907 13.0172 14.9897 12.7291 14.9877 12.4409C14.9853 12.0015 14.9877 11.562 14.9908 11.1226C14.9905 10.8417 14.9899 10.5609 14.9889 10.2799L14.9919 9.88444C14.9802 8.92969 14.7851 8.30712 14.1942 7.55966C13.3839 6.90796 12.6294 6.57924 11.5776 6.62927C10.7027 6.77112 9.99213 7.19047 9.45494 7.89506C9.01171 8.59847 8.81923 9.32181 8.95535 10.1493C9.21697 11.0504 9.55464 11.8147 10.3882 12.2985C11.0865 12.664 11.6887 12.7192 12.4703 12.7389L12.804 12.7512C13.0733 12.761 13.3427 12.7687 13.6121 12.7761V14.6866C11.6202 14.7669 10.076 14.7647 8.49541 13.3913C7.50676 12.4007 6.90282 11.057 6.8584 9.65673C6.90544 8.47823 7.32765 7.52014 8.00013 6.56718L8.20168 6.26115C10.1133 4.24635 13.1404 4.11178 15.2837 5.85076Z" fill="#FEFBFB"/>
</g>
<defs>
<clipPath id="clip0_177_2053">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,19 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M23.6951 18.7044C23.8846 19.2501 23.8391 19.8312 23.5865 20.3364C23.4046 20.7053 23.1443 20.9907 22.826 21.2459C22.442 21.5491 21.9646 21.8067 21.3886 22.0543C20.7014 22.3474 19.8627 22.6227 19.4787 22.7238C18.4959 22.9789 17.5511 23.1406 16.5936 23.1482C15.2243 23.1608 14.0446 22.8375 13.2058 22.0114C12.7713 22.0644 12.3317 22.0947 11.8896 22.0947C11.4702 22.0947 11.0559 22.0695 10.6441 22.0189C9.80287 22.84 8.62814 23.1608 7.26393 23.1482C6.30645 23.1406 5.36161 22.9789 4.37635 22.7238C3.99487 22.6227 3.15614 22.3474 2.46898 22.0543C1.89298 21.8067 1.4155 21.5491 1.03403 21.2459C0.713189 20.9907 0.452979 20.7053 0.271084 20.3364C0.0209786 19.8312 -0.0270214 19.2501 0.164979 18.7044C-0.0118635 18.2876 -0.0573372 17.8101 0.0816102 17.2821C0.144768 17.0421 0.248347 16.8198 0.379715 16.6227C0.351926 16.5192 0.329189 16.4131 0.314031 16.2968C0.218031 15.6046 0.458031 14.9731 0.910242 14.4829C1.13256 14.2379 1.37256 14.0686 1.62266 13.96C1.43824 13.1768 1.34224 12.3709 1.34224 11.5474C1.34224 5.72168 6.06393 1 11.8896 1C13.8905 1 15.7625 1.55579 17.3591 2.52589C17.6471 2.70274 17.93 2.89221 18.2003 3.09432C18.3342 3.19537 18.4681 3.29895 18.597 3.40758C18.7283 3.51368 18.8572 3.62484 18.981 3.73853C19.3549 4.07958 19.706 4.44589 20.0269 4.83747C20.1355 4.96632 20.2391 5.10021 20.3401 5.23663C20.5448 5.50695 20.7342 5.78737 20.9086 6.07789C21.1738 6.51242 21.4062 6.96716 21.6083 7.43958C21.7422 7.75537 21.8585 8.07874 21.962 8.40968C22.1161 8.90484 22.2349 9.41516 22.3157 9.94063C22.341 10.1149 22.3637 10.2918 22.3814 10.4686C22.4168 10.8223 22.437 11.1811 22.437 11.5474C22.437 12.3608 22.341 13.1592 22.1616 13.9297C22.4395 14.0383 22.7022 14.2152 22.9473 14.4829C23.3995 14.9731 23.6395 15.6072 23.5435 16.2994C23.5283 16.4131 23.5056 16.5192 23.4778 16.6227C23.6092 16.8198 23.7128 17.0421 23.7759 17.2821C23.9149 17.8101 23.8694 18.2876 23.6951 18.7044Z" fill="white"/>
<path d="M11.8107 20.3262C16.6592 20.3262 20.5896 16.3957 20.5896 11.5473C20.5896 6.69878 16.6592 2.76831 11.8107 2.76831C6.96221 2.76831 3.03174 6.69878 3.03174 11.5473C3.03174 16.3957 6.96221 20.3262 11.8107 20.3262Z" fill="#FFD21E"/>
<path d="M20.5894 11.5473C20.5894 6.69881 16.6589 2.76834 11.8105 2.76834C6.96199 2.76834 3.03152 6.69881 3.03152 11.5473C3.03152 16.3958 6.96199 20.3262 11.8105 20.3262C16.6589 20.3262 20.5894 16.3958 20.5894 11.5473ZM2.021 11.5473C2.021 6.14071 6.40389 1.75781 11.8105 1.75781C17.217 1.75781 21.5999 6.14071 21.5999 11.5473C21.5999 16.9539 17.217 21.3368 11.8105 21.3368C6.40389 21.3368 2.021 16.9539 2.021 11.5473Z" fill="#FFAC03"/>
<path d="M14.6628 9.15775C14.9847 9.27144 15.1128 9.93332 15.4381 9.76039C16.054 9.43288 16.2879 8.66804 15.9603 8.05207C15.6328 7.43611 14.868 7.20227 14.252 7.52979C13.6361 7.8573 13.4022 8.62214 13.7297 9.2381C13.8843 9.52884 14.375 9.05612 14.6628 9.15775Z" fill="#3A3B45"/>
<path d="M8.71175 9.15775C8.3898 9.27144 8.26169 9.93332 7.93646 9.76039C7.32049 9.43288 7.08666 8.66804 7.41417 8.05207C7.74169 7.43611 8.50653 7.20227 9.12249 7.52979C9.73846 7.8573 9.97229 8.62214 9.64478 9.2381C9.49019 9.52884 8.99955 9.05612 8.71175 9.15775Z" fill="#3A3B45"/>
<path d="M11.7476 15.2203C14.2306 15.2203 15.0318 13.0065 15.0318 11.8697C15.0318 11.2789 14.6346 11.4648 13.9985 11.7798C13.4107 12.0708 12.6187 12.4719 11.7476 12.4719C9.93377 12.4719 8.46338 10.7329 8.46338 11.8697C8.46338 13.0065 9.26461 15.2203 11.7476 15.2203Z" fill="#3A3B45"/>
<path d="M11.8107 17.8001C13.0208 17.8001 14.0017 16.8191 14.0017 15.6091C14.0017 14.6665 13.4066 13.863 12.5716 13.5537C12.5409 13.5424 12.5099 13.5316 12.4785 13.5216C12.2679 13.4543 12.0436 14.178 11.8107 14.178C11.5931 14.178 11.3829 13.4497 11.1845 13.5088C10.2795 13.7782 9.61963 14.6166 9.61963 15.6091C9.61963 16.8191 10.6006 17.8001 11.8107 17.8001Z" fill="#EF4E4E"/>
<g style="mix-blend-mode:multiply">
<path d="M17.7473 10.3472C18.2008 10.3472 18.5684 9.97959 18.5684 9.52613C18.5684 9.07268 18.2008 8.70508 17.7473 8.70508C17.2939 8.70508 16.9263 9.07268 16.9263 9.52613C16.9263 9.97959 17.2939 10.3472 17.7473 10.3472Z" fill="#FFD21E"/>
</g>
<g style="mix-blend-mode:multiply">
<path d="M5.99976 10.3472C6.45322 10.3472 6.82082 9.97959 6.82082 9.52613C6.82082 9.07268 6.45322 8.70508 5.99976 8.70508C5.54631 8.70508 5.17871 9.07268 5.17871 9.52613C5.17871 9.97959 5.54631 10.3472 5.99976 10.3472Z" fill="#FFD21E"/>
</g>
<path d="M4.3103 13.1262C3.90129 13.1262 3.53574 13.2942 3.28083 13.5989C3.12319 13.7876 2.95847 14.0918 2.94508 14.5473C2.77355 14.498 2.60858 14.4705 2.45447 14.4705C2.06289 14.4705 1.70921 14.6205 1.4591 14.8931C1.13776 15.243 0.99502 15.673 1.05717 16.1032C1.08672 16.3081 1.15519 16.4918 1.2575 16.6618C1.04176 16.8364 0.882851 17.0794 0.806051 17.3717C0.745925 17.6008 0.684283 18.0781 1.00614 18.5697C0.985672 18.6018 0.966472 18.6351 0.948536 18.6692C0.75502 19.0365 0.742641 19.4516 0.91342 19.8381C1.17237 20.424 1.81582 20.8855 3.06534 21.381C3.84268 21.6892 4.55384 21.8862 4.56016 21.888C5.58786 22.1545 6.51729 22.2899 7.32192 22.2899C8.80083 22.2899 9.85961 21.837 10.469 20.9437C11.4497 19.5052 11.3095 18.1895 10.0405 16.9213C9.33818 16.2194 8.87131 15.1847 8.77405 14.9575C8.57801 14.285 8.05961 13.5375 7.19788 13.5375C7.12538 13.5375 7.05186 13.5433 6.97961 13.5547C6.60218 13.6141 6.27224 13.8313 6.03654 14.1582C5.78214 13.8419 5.53506 13.5903 5.31148 13.4483C4.97447 13.2346 4.63771 13.1262 4.3103 13.1262ZM4.3103 14.1367C4.43915 14.1367 4.59654 14.1916 4.77009 14.3017C5.30896 14.6435 6.34879 16.4309 6.7295 17.1261C6.85708 17.3591 7.0751 17.4576 7.2714 17.4576C7.66096 17.4576 7.96512 17.0703 7.30702 16.5782C6.31746 15.8377 6.66458 14.6274 7.137 14.5528C7.15771 14.5495 7.17818 14.548 7.19788 14.548C7.62736 14.548 7.81683 15.2882 7.81683 15.2882C7.81683 15.2882 8.37211 16.6828 9.32605 17.6359C10.28 18.5894 10.3293 19.3546 9.63401 20.3742C9.15982 21.0695 8.25211 21.2794 7.32192 21.2794C6.35712 21.2794 5.36807 21.0535 4.8138 20.9098C4.78651 20.9027 1.41565 19.9506 1.8426 19.1401C1.91435 19.0039 2.03258 18.9494 2.18138 18.9494C2.78264 18.9494 3.87628 19.8442 4.34643 19.8442C4.45152 19.8442 4.52555 19.7995 4.55586 19.6903C4.7562 18.9716 1.50988 18.6695 1.78348 17.6284C1.83174 17.4442 1.9626 17.3694 2.14651 17.3697C2.94104 17.3697 4.72361 18.767 5.09725 18.767C5.1258 18.767 5.14626 18.7586 5.15738 18.741C5.34458 18.4388 5.24201 18.2279 3.92251 17.4293C2.60302 16.6305 1.67687 16.15 2.20361 15.5765C2.26424 15.5103 2.35014 15.481 2.45447 15.481C3.25557 15.4813 5.14828 17.2037 5.14828 17.2037C5.14828 17.2037 5.6591 17.735 5.96807 17.735C6.03906 17.735 6.09944 17.7069 6.14037 17.6377C6.3594 17.2684 4.10593 15.5606 3.97885 14.856C3.8927 14.3785 4.03923 14.1367 4.3103 14.1367Z" fill="#FFAC03"/>
<path d="M9.63397 20.3742C10.3292 19.3546 10.28 18.5894 9.32601 17.6359C8.37208 16.6827 7.81679 15.2882 7.81679 15.2882C7.81679 15.2882 7.60938 14.4783 7.13696 14.5528C6.66454 14.6273 6.31768 15.8377 7.30724 16.5782C8.29679 17.3184 7.11018 17.8214 6.72947 17.1261C6.34875 16.4309 5.30917 14.6435 4.77006 14.3017C4.23119 13.9599 3.85174 14.1514 3.97881 14.856C4.10589 15.5606 6.35961 17.2683 6.14033 17.6379C5.92105 18.0073 5.14825 17.2037 5.14825 17.2037C5.14825 17.2037 2.73006 15.003 2.20357 15.5765C1.67709 16.1499 2.60298 16.6305 3.92248 17.4293C5.24223 18.2278 5.34454 18.4388 5.15734 18.7409C4.96989 19.0431 2.05705 16.5873 1.78345 17.6283C1.5101 18.6694 4.75616 18.9716 4.55583 19.6903C4.35549 20.4093 2.26926 18.3299 1.84256 19.1401C1.41561 19.9505 4.78648 20.9027 4.81376 20.9098C5.9026 21.1922 8.66791 21.7907 9.63397 20.3742Z" fill="#FFD21E"/>
<path d="M19.4368 13.1262C19.8458 13.1262 20.2113 13.2942 20.4662 13.5989C20.6239 13.7876 20.7886 14.0918 20.802 14.5473C20.9735 14.498 21.1385 14.4705 21.2926 14.4705C21.6842 14.4705 22.0379 14.6205 22.288 14.8931C22.6093 15.243 22.7521 15.673 22.6899 16.1032C22.6603 16.3081 22.5919 16.4918 22.4896 16.6618C22.7053 16.8364 22.8642 17.0794 22.941 17.3717C23.0011 17.6008 23.0628 18.0781 22.7409 18.5697C22.7614 18.6018 22.7806 18.6351 22.7985 18.6692C22.9921 19.0365 23.0044 19.4516 22.8337 19.8381C22.5747 20.424 21.9313 20.8855 20.6817 21.381C19.9044 21.6892 19.1932 21.8862 19.1869 21.888C18.1592 22.1545 17.2298 22.2899 16.4251 22.2899C14.9462 22.2899 13.8875 21.837 13.2781 20.9437C12.2974 19.5052 12.4376 18.1895 13.7066 16.9213C14.4089 16.2194 14.8758 15.1847 14.973 14.9575C15.1691 14.285 15.6875 13.5375 16.5492 13.5375C16.6217 13.5375 16.6952 13.5433 16.7675 13.5547C17.1449 13.6141 17.4748 13.8313 17.7105 14.1582C17.9649 13.8419 18.212 13.5903 18.4356 13.4483C18.7726 13.2346 19.1094 13.1262 19.4368 13.1262ZM19.4368 14.1367C19.3079 14.1367 19.1505 14.1916 18.977 14.3017C18.4381 14.6435 17.3983 16.4309 17.0176 17.1261C16.89 17.3591 16.672 17.4576 16.4757 17.4576C16.0861 17.4576 15.7819 17.0703 16.4401 16.5782C17.4296 15.8377 17.0825 14.6274 16.6101 14.5528C16.5894 14.5495 16.5689 14.548 16.5492 14.548C16.1197 14.548 15.9302 15.2882 15.9302 15.2882C15.9302 15.2882 15.375 16.6828 14.421 17.6359C13.4671 18.5894 13.4178 19.3546 14.1131 20.3742C14.5873 21.0695 15.495 21.2794 16.4251 21.2794C17.3899 21.2794 18.379 21.0535 18.9333 20.9098C18.9606 20.9027 22.3314 19.9506 21.9045 19.1401C21.8327 19.0039 21.7145 18.9494 21.5657 18.9494C20.9644 18.9494 19.8708 19.8442 19.4006 19.8442C19.2955 19.8442 19.2215 19.7995 19.1912 19.6903C18.9909 18.9716 22.2372 18.6695 21.9636 17.6284C21.9153 17.4442 21.7845 17.3694 21.6006 17.3697C20.806 17.3697 19.0235 18.767 18.6498 18.767C18.6213 18.767 18.6008 18.7586 18.5897 18.741C18.4025 18.4388 18.5051 18.2279 19.8246 17.4293C21.1441 16.6305 22.0702 16.15 21.5435 15.5765C21.4828 15.5103 21.3969 15.481 21.2926 15.481C20.4915 15.4813 18.5988 17.2037 18.5988 17.2037C18.5988 17.2037 18.088 17.735 17.779 17.735C17.708 17.735 17.6476 17.7069 17.6067 17.6377C17.3877 17.2684 19.6411 15.5606 19.7682 14.856C19.8544 14.3785 19.7078 14.1367 19.4368 14.1367Z" fill="#FFAC03"/>
<path d="M14.1131 20.3742C13.4179 19.3546 13.4671 18.5894 14.4211 17.6359C15.375 16.6827 15.9303 15.2882 15.9303 15.2882C15.9303 15.2882 16.1377 14.4783 16.6101 14.5528C17.0825 14.6273 17.4294 15.8377 16.4398 16.5782C15.4503 17.3184 16.6369 17.8214 17.0176 17.1261C17.3983 16.4309 18.4379 14.6435 18.977 14.3017C19.5159 13.9599 19.8953 14.1514 19.7683 14.856C19.6412 15.5606 17.3875 17.2683 17.6067 17.6379C17.826 18.0073 18.5988 17.2037 18.5988 17.2037C18.5988 17.2037 21.017 15.003 21.5435 15.5765C22.07 16.1499 21.1441 16.6305 19.8246 17.4293C18.5048 18.2278 18.4025 18.4388 18.5897 18.7409C18.7772 19.0431 21.69 16.5873 21.9636 17.6283C22.237 18.6694 18.9909 18.9716 19.1912 19.6903C19.3916 20.4093 21.4778 18.3299 21.9045 19.1401C22.3315 19.9505 18.9606 20.9027 18.9333 20.9098C17.8445 21.1922 15.0792 21.7907 14.1131 20.3742Z" fill="#FFD21E"/>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1007_325549)">
<path d="M0.193 19.5028C0.0707355 19.7959 0.00752741 20.1103 0.007 20.4278C0.007 21.7448 1.119 22.9458 2.957 23.8648C3.12479 23.9464 3.30778 23.9919 3.4942 23.9985C3.68063 24.005 3.86637 23.9725 4.03948 23.903C4.21259 23.8335 4.36924 23.7285 4.49936 23.5949C4.62948 23.4612 4.73018 23.3018 4.795 23.1269L6.844 18.1968C7.203 17.3398 7.486 16.4518 7.69 15.5448C3.895 16.1818 1.034 17.6368 0.242 19.4168L0.21 19.4928L0.193 19.5028ZM7.683 8.45585C7.47873 7.54859 7.19566 6.66088 6.837 5.80285L4.79 0.87285C4.72483 0.697958 4.62385 0.538609 4.49352 0.405012C4.36319 0.271415 4.20639 0.166517 4.03317 0.0970387C3.85994 0.0275607 3.67411 -0.00496469 3.48759 0.00154647C3.30107 0.00805764 3.11796 0.0534618 2.95 0.13485C1.112 1.05385 0 2.25585 0 3.57285C0 3.88985 0.064 4.20385 0.186 4.49685V4.50685L0.218 4.58385C1.028 6.36385 3.887 7.81785 7.683 8.45585ZM21.049 0.13585C22.887 1.05385 23.999 2.25585 23.999 3.57185C23.9942 3.88997 23.9277 4.20414 23.803 4.49685L23.776 4.55985C22.991 6.35185 20.123 7.81385 16.316 8.45585C16.52 7.54885 16.803 6.66085 17.162 5.80285L19.21 0.87285C19.2748 0.697798 19.3755 0.538256 19.5057 0.404491C19.6359 0.270727 19.7927 0.165705 19.9659 0.0961859C20.1391 0.0266671 20.325 -0.00580793 20.5115 0.000851118C20.6981 0.00751017 20.8812 0.0531558 21.049 0.13485V0.13585ZM16.327 15.5448C16.528 16.4508 16.807 17.3378 17.164 18.1948L19.212 23.1269C19.2769 23.3017 19.3777 23.461 19.5079 23.5946C19.638 23.7282 19.7946 23.8331 19.9677 23.9026C20.1408 23.972 20.3265 24.0046 20.5128 23.9981C20.6992 23.9916 20.8822 23.9462 21.05 23.8648C22.889 22.9448 24.001 21.7448 24.001 20.4278C23.9996 20.1104 23.9364 19.7962 23.815 19.5028L23.788 19.4408C23.006 17.6488 20.127 16.1848 16.327 15.5448ZM16.198 9.50485C18.893 9.08985 21.133 8.28185 22.678 7.22685L22.24 8.27985C21.258 10.6616 21.258 13.3351 22.24 15.7168L22.675 16.7648C21.128 15.7098 18.888 14.9098 16.196 14.4898L16.126 14.4798C14.7605 14.2726 13.3812 14.1696 12 14.1718C10.623 14.1698 9.248 14.2718 7.886 14.4788L7.815 14.4888C5.122 14.9018 2.882 15.7108 1.335 16.7659L1.772 15.7158C2.75404 13.3341 2.75404 10.6606 1.772 8.27885L1.335 7.22685C2.875 8.28685 5.115 9.08985 7.808 9.50485L7.879 9.51485C10.613 9.92185 13.392 9.92185 16.125 9.51485L16.196 9.50485H16.198Z" fill="#594CE9"/>
</g>
<defs>
<clipPath id="clip0_1007_325549">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,14 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.65622 11.1831V12.3535L3.74694 11.1831H3.17432V13.3949H3.78156V12.1805L4.72544 13.3949H5.26344V11.1831H4.65622Z" fill="#7F1084"/>
<path d="M7.42466 11.7211V11.1831H5.6596L5.65332 13.3949H6.26684V12.6052H7.3114V12.0955H6.26684V11.7211H7.42466Z" fill="#7F1084"/>
<path d="M7.71729 11.1831V13.3949H8.33394V11.1831H7.71729Z" fill="#7F1084"/>
<path d="M10.2216 11.1831V12.3535L9.31235 11.1831H8.73975V13.3949H9.34697V12.1805L10.2908 13.3949H10.8288V11.1831H10.2216Z" fill="#7F1084"/>
<path d="M11.2349 11.1831V13.3949H11.8515V11.1831H11.2349Z" fill="#7F1084"/>
<path d="M18.0937 11.1831V12.3535L17.1844 11.1831H16.6118V13.3949H17.219V12.1805L18.1629 13.3949H18.7009V11.1831H18.0937Z" fill="#7F1084"/>
<path d="M2.2994 12.8129V10.5979H1V11.1831H1.59779V12.8129H1V13.3949H2.89719V12.8129H2.2994Z" fill="#7F1084"/>
<path d="M14.1639 12.0861V13.3949H12.2573V11.1831H14.1734V11.6865H12.7607V12.8884H13.6574V12.4794H13.2924V12.0861H14.1639Z" fill="#7F1084"/>
<path d="M20.9884 11.6865V11.1831H19.1636V13.3949H20.9853V12.8884H19.667V11.6865H20.9884Z" fill="#7F1084"/>
<path d="M2.8971 10H2.29932V10.5978H2.8971V10Z" fill="#2EA7E0"/>
<path d="M22.0079 12.8726V12.5234H23.0713V12.0389H22.0079V11.7054H23.1813V11.1831H21.3975V13.3949H23.1971V12.8726H22.0079Z" fill="#7F1084"/>
<path d="M15.1045 12.8726V12.5234H16.168V12.0389H15.1045V11.7054H16.2781V11.1831H14.4941V13.3949H16.2938V12.8726H15.1045Z" fill="#7F1084"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="1" y="7" width="1.73937" height="1.73937" fill="#0068B5"/>
<path d="M23 7.22925H21.2574V16.2527H23V7.22925Z" fill="black"/>
<path d="M10.7294 7.69537H12.4719V10.0938H13.5611V11.4903H12.4719L12.4719 14.0147C12.4719 14.8025 13.1557 14.8443 13.5429 14.7667V16.2885C11.2342 16.2885 10.7295 15.5904 10.7294 13.6394V7.69537Z" fill="black"/>
<path d="M5.39274 10.8251C5.76863 10.4128 6.43087 9.95059 7.35313 9.95059C8.91419 9.95059 9.83993 11.2755 9.83993 12.4034V16.2527H8.16997V12.7257C8.15787 12.2721 7.86502 11.365 6.79043 11.365C6.04814 11.365 5.61535 11.8491 5.39274 12.3157V16.2527H3.65017V10.0938H5.39274V10.8251Z" fill="black"/>
<path d="M1 10.0938H2.74257V16.2527H1V10.0938Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.5438 13.7461H20.5314V13.1732C20.5313 11.3934 19.0685 9.95059 17.264 9.95059C15.4595 9.95059 13.9967 11.3934 13.9967 13.1733C13.9967 14.9531 15.4595 16.3959 17.264 16.3959C18.3229 16.3959 19.2642 15.8983 19.8601 15.1303L18.7068 14.2599C18.3739 14.689 17.8516 14.9636 17.264 14.9636C16.4647 14.9636 15.786 14.454 15.5438 13.7461ZM18.9716 12.5645C18.719 11.8754 18.0498 11.3829 17.264 11.3829C16.4782 11.3829 15.809 11.8754 15.5565 12.5645H18.9716Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,70 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_1004_325507" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="23" height="22">
<path d="M5.25735 1.80765C8.76836 6.74075 14.4316 9.45056 20.0638 8.40323C20.4621 8.32917 20.8949 8.19661 21.3453 8.02311C22.2003 7.69374 23.3199 9.03389 22.6711 9.68084C22.2417 10.1091 21.8314 10.5013 21.4636 10.8278C18.9271 13.0793 16.1266 15.1096 13.0746 16.8717C10.0032 18.6449 6.82394 20.0618 3.58453 21.1352C3.13169 21.2853 2.6047 21.4391 2.03824 21.5917C1.15372 21.8301 0.55444 20.1919 1.26764 19.617C1.64664 19.3114 1.98095 19.0005 2.24624 18.6902C5.96932 14.3363 6.29912 8.17371 3.71756 2.69665C3.60584 2.45961 3.48186 2.17153 3.35311 1.85684C2.99489 0.981288 4.0418 0.335122 4.656 1.05462C4.89915 1.33945 5.10928 1.5996 5.25735 1.80765Z" fill="white"/>
</mask>
<g mask="url(#mask0_1004_325507)">
<path d="M3.05591 -0.57488L13.0474 18.229L27.378 9.23897L17.3865 -9.56491L3.05591 -0.57488Z" fill="url(#paint0_linear_1004_325507)"/>
<path d="M3.05591 -0.57488L13.0474 18.229L-1.28325 27.219L-11.2747 8.41515L3.05591 -0.57488Z" fill="url(#paint1_linear_1004_325507)"/>
<path d="M23.0388 37.0329L13.0474 18.229L27.378 9.23897L37.3694 28.0429L23.0388 37.0329Z" fill="url(#paint2_linear_1004_325507)"/>
<path d="M23.0388 37.0329L13.0474 18.229L-1.28325 27.219L8.7082 46.0229L23.0388 37.0329Z" fill="url(#paint3_linear_1004_325507)"/>
</g>
<mask id="mask1_1004_325507" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="7" y="13" width="13" height="11">
<path d="M19.5292 13.6948C17.2058 16.5579 16.714 19.6388 17.1516 22.2781C17.1596 22.3264 17.168 22.3799 17.1765 22.4375C17.2928 23.2284 16.3598 23.7154 15.7281 23.2254C15.6959 23.2004 15.6647 23.1765 15.6349 23.1538C13.5151 21.5401 11.0144 20.326 7.68652 20.7079C9.70102 20.1175 11.7607 19.243 13.773 18.0812C15.9824 16.8056 17.9203 15.3074 19.5292 13.6948Z" fill="white"/>
</mask>
<g mask="url(#mask1_1004_325507)">
<path d="M2.9485 -0.407365L16.5913 23.2227L31.0296 14.8867L17.3868 -8.7433L2.9485 -0.407365Z" fill="url(#paint4_linear_1004_325507)"/>
<path d="M2.9485 -0.407365L16.5913 23.2227L2.15305 31.5586L-11.4898 7.92857L2.9485 -0.407365Z" fill="url(#paint5_linear_1004_325507)"/>
<path d="M30.2341 46.8527L16.5913 23.2227L31.0296 14.8867L44.6724 38.5167L30.2341 46.8527Z" fill="url(#paint6_linear_1004_325507)"/>
<path d="M30.2341 46.8527L16.5913 23.2227L2.15305 31.5586L15.7959 55.1886L30.2341 46.8527Z" fill="url(#paint7_linear_1004_325507)"/>
</g>
<defs>
<linearGradient id="paint0_linear_1004_325507" x1="13.0474" y1="18.229" x2="15.105" y2="2.23875" gradientUnits="userSpaceOnUse">
<stop stop-color="#27B2F0"/>
<stop offset="0.203234" stop-color="#26DFFB"/>
<stop offset="0.406468" stop-color="#30F5FE"/>
<stop offset="0.652506" stop-color="#F0FEFC"/>
<stop offset="0.863327" stop-color="#FBC610"/>
<stop offset="1" stop-color="#FD9C22"/>
</linearGradient>
<linearGradient id="paint1_linear_1004_325507" x1="13.0474" y1="18.229" x2="-0.935969" y2="12.7009" gradientUnits="userSpaceOnUse">
<stop stop-color="#27B2F0"/>
<stop offset="0.203234" stop-color="#26DFFB"/>
<stop offset="0.406468" stop-color="#30F5FE"/>
<stop offset="0.652506" stop-color="#F0FEFC"/>
<stop offset="0.863327" stop-color="#FBC610"/>
<stop offset="1" stop-color="#FD9C22"/>
</linearGradient>
<linearGradient id="paint2_linear_1004_325507" x1="13.0474" y1="18.229" x2="27.0307" y2="23.7571" gradientUnits="userSpaceOnUse">
<stop stop-color="#27B2F0"/>
<stop offset="0.203234" stop-color="#26DFFB"/>
<stop offset="0.406468" stop-color="#30F5FE"/>
<stop offset="0.652506" stop-color="#F0FEFC"/>
<stop offset="0.863327" stop-color="#FBC610"/>
<stop offset="1" stop-color="#FD9C22"/>
</linearGradient>
<linearGradient id="paint3_linear_1004_325507" x1="13.0474" y1="18.229" x2="10.9898" y2="34.2193" gradientUnits="userSpaceOnUse">
<stop stop-color="#27B2F0"/>
<stop offset="0.203234" stop-color="#26DFFB"/>
<stop offset="0.406468" stop-color="#30F5FE"/>
<stop offset="0.652506" stop-color="#F0FEFC"/>
<stop offset="0.863327" stop-color="#FBC610"/>
<stop offset="1" stop-color="#FD9C22"/>
</linearGradient>
<linearGradient id="paint4_linear_1004_325507" x1="16.5913" y1="23.2227" x2="16.3034" y2="18.1833" gradientUnits="userSpaceOnUse">
<stop stop-color="#1C6FFF"/>
<stop offset="1" stop-color="#24B5EF"/>
</linearGradient>
<linearGradient id="paint5_linear_1004_325507" x1="16.5913" y1="23.2227" x2="12.3711" y2="20.4536" gradientUnits="userSpaceOnUse">
<stop stop-color="#1C6FFF"/>
<stop offset="1" stop-color="#24B5EF"/>
</linearGradient>
<linearGradient id="paint6_linear_1004_325507" x1="16.5913" y1="23.2227" x2="20.8115" y2="25.9917" gradientUnits="userSpaceOnUse">
<stop stop-color="#1C6FFF"/>
<stop offset="1" stop-color="#24B5EF"/>
</linearGradient>
<linearGradient id="paint7_linear_1004_325507" x1="16.5913" y1="23.2227" x2="16.8793" y2="28.262" gradientUnits="userSpaceOnUse">
<stop stop-color="#1C6FFF"/>
<stop offset="1" stop-color="#24B5EF"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.56053 21.4486C9.07925 21.4486 11.1211 19.4068 11.1211 16.8882C11.1211 14.3696 9.07925 12.3279 6.56053 12.3279C4.04182 12.3279 2 14.3696 2 16.8882C2 19.4068 4.04182 21.4486 6.56053 21.4486Z" fill="#EB6161"/>
<path d="M22.0002 3.59473L21.9406 12.328C21.9406 17.3056 17.9464 21.3592 12.9685 21.4486L12.8789 12.3578L12.8791 3.62453C12.8791 3.02841 13.356 2.55151 13.9522 2.55151H20.9271C21.5233 2.55151 22.0002 2.9986 22.0002 3.59473Z" fill="#009191"/>
</svg>

After

Width:  |  Height:  |  Size: 564 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.7062 13.286V10.3666C20.7062 9.84532 20.7062 9.55859 20.6801 9.35006C20.6801 9.2458 20.6541 9.19366 20.6541 9.1676C20.628 9.0894 20.6019 9.03727 20.5498 8.98514C20.5237 8.98514 20.4977 8.933 20.3934 8.88087C20.211 8.75054 19.9764 8.62021 19.5332 8.35955L17.0048 6.89985C16.5617 6.63919 16.301 6.50886 16.1186 6.4046C16.0143 6.35246 15.9622 6.3264 15.9622 6.3264C15.884 6.30033 15.8058 6.30033 15.7276 6.3264C15.7015 6.3264 15.6494 6.35246 15.5712 6.4046C15.3887 6.50886 15.1281 6.63919 14.6849 6.89985L12.1565 8.35955C11.7134 8.62021 11.4528 8.75054 11.2964 8.88087C11.2182 8.933 11.166 8.98514 11.14 8.98514C11.0878 9.03727 11.0618 9.11547 11.0357 9.1676C11.0357 9.19366 11.0357 9.2458 11.0096 9.35006C11.0096 9.55859 10.9836 9.84532 10.9836 10.3666V13.286C10.9836 13.8074 10.9836 14.0941 11.0096 14.3026C11.0096 14.4069 11.0357 14.459 11.0357 14.4851C11.0618 14.5633 11.0878 14.6154 11.14 14.6675C11.166 14.6675 11.1921 14.7197 11.2964 14.7718C11.4788 14.9021 11.7134 15.0325 12.1565 15.2931L14.6849 16.7528C15.1281 17.0135 15.3887 17.1438 15.5712 17.2481C15.6755 17.3002 15.7276 17.3263 15.7276 17.3263C15.8058 17.3523 15.884 17.3523 15.9622 17.3263C15.9883 17.3263 16.0404 17.3002 16.1186 17.2481C16.301 17.1438 16.5617 17.0135 17.0048 16.7528L19.5332 15.2931C19.9764 15.0325 20.237 14.9021 20.3934 14.7718C20.4716 14.7197 20.5237 14.6675 20.5498 14.6675C20.6019 14.6154 20.628 14.5372 20.6541 14.4851C20.6541 14.459 20.6541 14.4069 20.6801 14.3026C20.7062 14.0941 20.7062 13.8074 20.7062 13.286ZM22.2702 7.42117C21.9574 7.08231 21.5403 6.82165 20.7062 6.35246L18.1778 4.89276C17.3437 4.39751 16.9006 4.13685 16.4574 4.05865C16.0665 3.98045 15.6494 3.98045 15.2584 4.05865C14.8153 4.16291 14.3982 4.39751 13.538 4.89276L11.0096 6.35246C10.1755 6.84772 9.7324 7.08231 9.44567 7.42117C9.18501 7.73396 8.97648 8.07282 8.84615 8.46381C8.71582 8.90694 8.71582 9.40219 8.71582 10.3666V13.286C8.71582 14.2765 8.71582 14.7457 8.84615 15.1889C8.97648 15.5799 9.18501 15.9448 9.44567 16.2315C9.75846 16.5704 10.1755 16.831 11.0096 17.3002L13.538 18.7599C14.3722 19.2552 14.8153 19.4898 15.2584 19.594C15.6494 19.6722 16.0665 19.6722 16.4574 19.594C16.9006 19.4898 17.3176 19.2552 18.1778 18.7599L20.7062 17.3002C21.5403 16.805 21.9834 16.5704 22.2702 16.2315C22.5308 15.9187 22.7394 15.5799 22.8697 15.1889C23 14.7457 23 14.2505 23 13.286V10.3666C23 9.37613 23 8.90694 22.8697 8.46381C22.7394 8.07282 22.5308 7.7079 22.2702 7.42117Z" fill="#2D9CDB"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9904 13.286V10.3666C12.9904 9.84532 12.9904 9.55859 12.9643 9.35006C12.9643 9.2458 12.9383 9.19366 12.9383 9.1676C12.9122 9.0894 12.8861 9.03727 12.834 8.98514C12.8079 8.98514 12.7819 8.933 12.6776 8.88087C12.4951 8.75054 12.2605 8.62021 11.8174 8.35955L9.28901 6.89985C8.84589 6.63919 8.58523 6.50886 8.40276 6.4046C8.2985 6.35246 8.24637 6.3264 8.24637 6.3264C8.16817 6.30033 8.08997 6.30033 8.01177 6.3264C7.98571 6.3264 7.93357 6.35246 7.85538 6.4046C7.67291 6.50886 7.41225 6.63919 6.96913 6.89985L4.44072 8.35955C3.9976 8.62021 3.73694 8.75054 3.58054 8.88087C3.50234 8.933 3.45021 8.98514 3.42414 8.98514C3.37201 9.03727 3.34595 9.11547 3.31988 9.1676C3.31988 9.19366 3.31988 9.2458 3.29381 9.35006C3.29381 9.55859 3.26775 9.84532 3.26775 10.3666V13.286C3.26775 13.8074 3.26775 14.0941 3.29381 14.3026C3.29381 14.4069 3.31988 14.459 3.31988 14.4851C3.34595 14.5633 3.37201 14.6154 3.42414 14.6675C3.45021 14.6675 3.47628 14.7197 3.58054 14.7718C3.763 14.9021 3.9976 15.0325 4.44072 15.2931L6.96913 16.7528C7.41225 17.0135 7.67291 17.1438 7.85538 17.2481C7.95964 17.3002 8.01177 17.3263 8.01177 17.3263C8.08997 17.3523 8.16817 17.3523 8.24637 17.3263C8.27243 17.3263 8.32457 17.3002 8.40276 17.2481C8.58523 17.1438 8.84589 17.0135 9.28901 16.7528L11.8174 15.2931C12.2605 15.0325 12.5212 14.9021 12.6776 14.7718C12.7558 14.7197 12.8079 14.6675 12.834 14.6675C12.8861 14.6154 12.9122 14.5372 12.9383 14.4851C12.9383 14.459 12.9383 14.4069 12.9643 14.3026C12.9904 14.0941 12.9904 13.8074 12.9904 13.286ZM14.5544 7.42117C14.2416 7.08231 13.8245 6.82165 12.9904 6.35246L10.462 4.89276C9.62787 4.39751 9.21081 4.13685 8.74162 4.05865C8.35063 3.98045 7.93357 3.98045 7.54258 4.05865C7.09946 4.16291 6.6824 4.39751 5.82222 4.89276L3.29381 6.35246C2.4597 6.84772 2.01658 7.08231 1.72985 7.42117C1.46919 7.73396 1.26066 8.07282 1.13033 8.46381C1 8.90694 1 9.40219 1 10.3666V13.286C1 14.2765 1 14.7457 1.13033 15.1889C1.26066 15.5799 1.46919 15.9448 1.72985 16.2315C2.04264 16.5704 2.4597 16.831 3.29381 17.3002L5.82222 18.7599C6.65634 19.2552 7.09946 19.4898 7.54258 19.594C7.93357 19.6722 8.35063 19.6722 8.74162 19.594C9.18475 19.4898 9.6018 19.2552 10.462 18.7599L12.9904 17.3002C13.8245 16.805 14.2676 16.5704 14.5544 16.2315C14.815 15.9187 15.0235 15.5799 15.1539 15.1889C15.2842 14.7457 15.2842 14.2505 15.2842 13.286V10.3666C15.2842 9.37613 15.2842 8.90694 15.1539 8.46381C15.0496 8.07282 14.8411 7.7079 14.5544 7.42117Z" fill="#2F80ED"/>
<path d="M12.0002 15.2148C12.0523 15.2409 12.1044 15.293 12.1826 15.3191L14.2679 16.5181C13.9812 16.7527 13.5902 16.9613 12.9907 17.3262L12.0002 17.8996L11.0097 17.3262C10.4101 16.9613 10.0191 16.7527 9.73242 16.5181L11.8177 15.3191C11.8959 15.267 11.948 15.2409 12.0002 15.2148Z" fill="#2F80ED"/>
<path d="M14.2679 7.13443C13.9812 6.89984 13.5902 6.69131 12.9907 6.32638L12.0002 5.75293L11.0097 6.32638C10.4101 6.69131 10.0191 6.89984 9.73242 7.13443L11.8177 8.33347C11.8698 8.35954 11.948 8.41167 12.0002 8.43773C12.0523 8.41167 12.1044 8.35954 12.1826 8.33347L14.2679 7.13443Z" fill="#2D9CDB"/>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="2" fill="url(#paint0_linear_974_321445)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.36698 4C4.22763 4 4.08963 4.02745 3.96088 4.08078C3.83213 4.13411 3.71514 4.21228 3.6166 4.31082C3.51806 4.40936 3.43989 4.52635 3.38656 4.6551C3.33323 4.78385 3.30578 4.92185 3.30578 5.06121C3.30578 5.20057 3.33323 5.33856 3.38656 5.46731C3.43989 5.59606 3.51806 5.71305 3.6166 5.81159C3.71514 5.91013 3.83213 5.9883 3.96088 6.04163C4.08963 6.09496 4.22763 6.12241 4.36698 6.12241H16.1223C16.4038 6.12241 16.6737 6.01061 16.8727 5.81159C17.0717 5.61258 17.1835 5.34266 17.1835 5.06121C17.1835 4.77976 17.0717 4.50983 16.8727 4.31082C16.6737 4.11181 16.4038 4 16.1223 4H4.36698ZM8.61264 6.77488C8.33108 6.77488 8.06105 6.88673 7.86196 7.08583C7.66287 7.28492 7.55102 7.55495 7.55102 7.83651C7.55102 8.11807 7.66287 8.38809 7.86196 8.58719C8.06105 8.78628 8.33108 8.89813 8.61264 8.89813H20.3663C20.6426 8.89039 20.905 8.77518 21.0977 8.57701C21.2904 8.37884 21.3982 8.11333 21.3982 7.83692C21.3982 7.56051 21.2904 7.295 21.0977 7.09683C20.905 6.89866 20.6426 6.78346 20.3663 6.77572L8.61264 6.77488ZM5.02029 10.6122C5.02029 10.0256 5.49527 9.5506 6.08191 9.5506H17.8364C18.1127 9.55835 18.3751 9.67355 18.5678 9.87172C18.7605 10.0699 18.8683 10.3354 18.8683 10.6118C18.8683 10.8882 18.7605 11.1537 18.5678 11.3519C18.3751 11.5501 18.1127 11.6653 17.8364 11.673H6.08191C5.4961 11.673 5.02029 11.198 5.02029 10.6122ZM3.06121 12.4896C2.77976 12.4896 2.50983 12.6015 2.31082 12.8005C2.11181 12.9995 2 13.2694 2 13.5509C2 13.8323 2.11181 14.1022 2.31082 14.3012C2.50983 14.5003 2.77976 14.6121 3.06121 14.6121H14.8165C15.0929 14.6043 15.3552 14.4891 15.5479 14.2909C15.7406 14.0928 15.8484 13.8273 15.8484 13.5509C15.8484 13.2744 15.7406 13.0089 15.5479 12.8108C15.3552 12.6126 15.0929 12.4974 14.8165 12.4896H3.06121ZM5.02029 16.3262C5.02029 15.7395 5.49527 15.2645 6.08191 15.2645H17.8364C18.1179 15.2645 18.3878 15.3763 18.5868 15.5754C18.7858 15.7744 18.8976 16.0443 18.8976 16.3257C18.8976 16.6072 18.7858 16.8771 18.5868 17.0761C18.3878 17.2751 18.1179 17.3869 17.8364 17.3869H6.08191C5.4961 17.3869 5.02029 16.912 5.02029 16.3262ZM12.8575 18.0402C12.576 18.0402 12.3061 18.1521 12.1071 18.3511C11.9081 18.5501 11.7963 18.82 11.7963 19.1015C11.7963 19.3829 11.9081 19.6528 12.1071 19.8518C12.3061 20.0509 12.576 20.1627 12.8575 20.1627H20.9388C21.2202 20.1627 21.4902 20.0509 21.6892 19.8518C21.8882 19.6528 22 19.3829 22 19.1015C22 18.82 21.8882 18.5501 21.6892 18.3511C21.4902 18.1521 21.2202 18.0402 20.9388 18.0402H12.8575Z" fill="white" fill-opacity="0.2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.36698 4C4.22763 4 4.08963 4.02745 3.96088 4.08078C3.83213 4.13411 3.71514 4.21228 3.6166 4.31082C3.51806 4.40936 3.43989 4.52635 3.38656 4.6551C3.33323 4.78385 3.30578 4.92185 3.30578 5.06121C3.30578 5.20057 3.33323 5.33856 3.38656 5.46731C3.43989 5.59606 3.51806 5.71305 3.6166 5.81159C3.71514 5.91013 3.83213 5.9883 3.96088 6.04163C4.08963 6.09496 4.22763 6.12241 4.36698 6.12241H12.9391C13.2154 6.11467 13.4778 5.99947 13.6705 5.8013C13.8632 5.60313 13.971 5.33762 13.971 5.06121C13.971 4.7848 13.8632 4.51928 13.6705 4.32111C13.4778 4.12294 13.2154 4.00774 12.9391 4H4.36698ZM8.61264 6.77488C8.33108 6.77488 8.06105 6.88673 7.86196 7.08583C7.66287 7.28492 7.55102 7.55495 7.55102 7.83651C7.55102 8.11807 7.66287 8.38809 7.86196 8.58719C8.06105 8.78628 8.33108 8.89813 8.61264 8.89813H17.1831C17.4594 8.89039 17.7218 8.77518 17.9145 8.57701C18.1072 8.37884 18.215 8.11333 18.215 7.83692C18.215 7.56051 18.1072 7.295 17.9145 7.09683C17.7218 6.89866 17.4594 6.78346 17.1831 6.77572L8.61264 6.77488ZM5.02029 10.6122C5.02029 10.0256 5.49527 9.5506 6.08191 9.5506H14.6532C14.9347 9.5506 15.2046 9.66241 15.4036 9.86142C15.6026 10.0604 15.7144 10.3304 15.7144 10.6118C15.7144 10.8933 15.6026 11.1632 15.4036 11.3622C15.2046 11.5612 14.9347 11.673 14.6532 11.673H6.08191C5.4961 11.673 5.02029 11.198 5.02029 10.6122ZM3.06121 12.4896C2.77976 12.4896 2.50983 12.6015 2.31082 12.8005C2.11181 12.9995 2 13.2694 2 13.5509C2 13.8323 2.11181 14.1022 2.31082 14.3012C2.50983 14.5003 2.77976 14.6121 3.06121 14.6121H11.6333C11.9096 14.6043 12.172 14.4891 12.3647 14.2909C12.5574 14.0928 12.6652 13.8273 12.6652 13.5509C12.6652 13.2744 12.5574 13.0089 12.3647 12.8108C12.172 12.6126 11.9096 12.4974 11.6333 12.4896H3.06121ZM5.02029 16.3262C5.02029 15.7395 5.49527 15.2645 6.08191 15.2645H14.6532C14.9347 15.2645 15.2046 15.3763 15.4036 15.5754C15.6026 15.7744 15.7144 16.0443 15.7144 16.3257C15.7144 16.6072 15.6026 16.8771 15.4036 17.0761C15.2046 17.2751 14.9347 17.3869 14.6532 17.3869H6.08191C5.4961 17.3869 5.02029 16.912 5.02029 16.3262ZM12.8575 18.0402C12.576 18.0402 12.3061 18.1521 12.1071 18.3511C11.9081 18.5501 11.7963 18.82 11.7963 19.1015C11.7963 19.3829 11.9081 19.6528 12.1071 19.8518C12.3061 20.0509 12.576 20.1627 12.8575 20.1627H17.6739C17.9554 20.1627 18.2253 20.0509 18.4243 19.8518C18.6233 19.6528 18.7351 19.3829 18.7351 19.1015C18.7351 18.82 18.6233 18.5501 18.4243 18.3511C18.2253 18.1521 17.9554 18.0402 17.6739 18.0402H12.8575Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_974_321445" x1="0.5" y1="0.5" x2="24" y2="24" gradientUnits="userSpaceOnUse">
<stop stop-color="#6D7DF2"/>
<stop offset="1" stop-color="#4E13BE"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1003_325088)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.506816 19.883C0.428692 19.8831 0.351614 19.8651 0.281598 19.8304C0.211582 19.7958 0.150522 19.7454 0.103185 19.6833C0.0558469 19.6211 0.0235119 19.5489 0.00870332 19.4721C-0.00610523 19.3954 -0.0029867 19.3163 0.0178155 19.241L4.28982 3.74504C4.33218 3.591 4.41037 3.44917 4.51801 3.33112C4.62565 3.21307 4.75969 3.12215 4.90917 3.06579C5.05866 3.00942 5.21936 2.98922 5.37814 3.00682C5.53693 3.02441 5.6893 3.07932 5.82282 3.16704L11.4448 6.85404C11.6098 6.96207 11.8026 7.01961 11.9998 7.01961C12.197 7.01961 12.3899 6.96207 12.5548 6.85404L18.1998 3.16504C18.3334 3.07754 18.4859 3.02288 18.6446 3.00552C18.8034 2.98815 18.9641 3.00858 19.1134 3.06513C19.2628 3.12169 19.3967 3.21276 19.5042 3.33092C19.6116 3.44909 19.6896 3.59099 19.7318 3.74504L23.9818 19.242C24.0025 19.3173 24.0055 19.3963 23.9905 19.473C23.9756 19.5496 23.9431 19.6217 23.8956 19.6837C23.8482 19.7456 23.7871 19.7958 23.717 19.8302C23.6469 19.8646 23.5699 19.8824 23.4918 19.882H18.0698C19.0569 18.7383 19.6 17.2778 19.5998 15.767V15.59C19.5997 14.1118 19.062 12.684 18.0868 11.573L17.3898 8.07804C17.3756 8.00506 17.3431 7.93688 17.2953 7.87993C17.2475 7.82299 17.186 7.77914 17.1166 7.75253C17.0472 7.72592 16.9721 7.71742 16.8985 7.72784C16.8249 7.73825 16.7551 7.76723 16.6958 7.81204L14.0698 9.78104C13.9775 9.85029 13.8705 9.89724 13.757 9.91823C13.6435 9.93922 13.5268 9.93368 13.4158 9.90204C12.49 9.63752 11.5086 9.63752 10.5828 9.90204C10.472 9.93368 10.3554 9.93921 10.2421 9.91822C10.1288 9.89722 10.0219 9.85027 9.92982 9.78104L7.30182 7.81004C7.24258 7.7658 7.17305 7.73738 7.09979 7.72747C7.02652 7.71756 6.95194 7.72649 6.88309 7.75341C6.81423 7.78034 6.75337 7.82436 6.70626 7.88134C6.65914 7.93831 6.62733 8.00636 6.61382 8.07904L5.93882 11.731C4.95229 12.7339 4.39953 14.0843 4.39982 15.491V15.824C4.39982 17.298 4.92682 18.724 5.88782 19.844L5.91982 19.882L0.506816 19.883Z" fill="#29E154"/>
<path d="M9.21289 16.8431H10.7329V13.2971H9.44289L9.21289 16.8431ZM14.7859 16.8431H13.2659V13.2971H14.5559L14.7859 16.8431Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_1003_325088">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_968_321238)">
<path d="M13.2188 7.96882V7.78132C10.7812 7.78132 12.9844 9.37507 13.2188 7.96882ZM14.3438 7.12507C14.6719 6.14069 16.3594 6.04694 16.5469 7.26569H16.0781C15.9375 6.56257 14.7656 6.51569 14.7656 7.78132C14.7656 8.48444 15.8438 8.90632 16.0781 8.06257H16.5469C16.2656 9.60944 13.7812 9.04694 14.3438 7.12507ZM7.5 6.37507H7.96875V6.79694C8.20312 6.23444 9.23438 6.18757 9.42188 6.84382C9.75 6.14069 11.0625 6.18757 11.0625 7.17194V8.90632H10.5469V7.31257C10.5469 6.60944 9.51562 6.60944 9.51562 7.35944V8.90632H9V7.26569C8.8853 6.82694 8.30086 6.73928 8.0625 7.12507L7.96875 7.35944V8.90632H7.5V6.37507ZM8.57812 18.5157C6.375 18.5157 5.01562 16.9688 5.01562 14.4844C5.01562 12.0001 6.375 10.5001 8.57812 10.5001C10.7812 10.5001 12.1875 12.0469 12.1875 14.4844C12.1875 16.9219 10.8281 18.5157 8.57812 18.5157ZM12.7031 8.90632C11.3438 9.23444 11.1562 7.50007 12.5625 7.45319L13.2188 7.40632V7.21882C13.2656 6.65632 12.3281 6.60944 12.1875 7.12507H11.7188C11.7205 7.00934 11.7529 6.89613 11.8125 6.79694C12.1875 6.14069 13.7344 6.14069 13.7344 7.17194V8.90632H13.2656V8.48444C13.2077 8.59107 13.1275 8.68396 13.0304 8.75676C12.9333 8.82957 12.8217 8.88058 12.7031 8.90632ZM15.8906 18.5157C14.2031 18.4219 13.0312 17.6251 12.9375 16.2188H14.0625C15.1406 19.5938 20.9062 15.9844 15.2344 14.8126C14.3438 14.6251 13.6875 14.2032 13.4062 13.6876C11.625 10.2188 18.5156 9.18757 18.7031 12.7501H17.625C17.2969 10.4532 13.0312 11.7188 14.5781 13.3126C15.2344 13.9688 16.5938 13.9219 17.5781 14.3438C19.9219 15.4219 18.7969 18.6094 15.8906 18.5157ZM8.57812 11.4844C7.07812 11.4844 6.14062 12.6563 6.14062 14.4844C6.14062 16.3126 7.07812 17.4844 8.57812 17.4844C10.0781 17.4844 11.0625 16.3594 11.0625 14.4844C11.0625 12.6094 10.125 11.4844 8.57812 11.4844Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_968_321238">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,22 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_177_2091)">
<path d="M2.5879 14.0127C2.5879 14.9291 2.78904 15.6327 3.05195 16.0584C3.39664 16.6159 3.91075 16.8521 4.43488 16.8521C5.11092 16.8521 5.72937 16.6843 6.92118 15.0359C7.87597 13.7148 9.00102 11.8603 9.75801 10.6976L11.04 8.72798C11.9305 7.36006 12.9612 5.83941 14.1431 4.80866C15.1079 3.96738 16.1486 3.5 17.196 3.5C18.9546 3.5 20.6296 4.51905 21.9116 6.43031C23.3145 8.52351 23.9956 11.16 23.9956 13.8809C23.9956 15.4983 23.6768 16.6868 23.1343 17.6257C22.6101 18.5338 21.5886 19.441 19.8701 19.441V16.8521C21.3415 16.8521 21.7088 15.5 21.7088 13.9526C21.7088 11.7476 21.1947 9.30052 20.0621 7.55203C19.2584 6.31181 18.2168 5.55396 17.0708 5.55396C15.8314 5.55396 14.8341 6.48874 13.7132 8.15545C13.1173 9.04096 12.5056 10.1201 11.8187 11.3378L11.0625 12.6773C9.54351 15.3706 9.15876 15.9841 8.39928 16.9964C7.06807 18.7692 5.93133 19.441 4.43488 19.441C2.65968 19.441 1.53712 18.6723 0.841894 17.5139C0.274361 16.57 -0.00439453 15.3314 -0.00439453 13.9201L2.5879 14.0127Z" fill="#0081FB"/>
<path d="M2.03516 6.61308C3.22363 4.78112 4.93877 3.5 6.90593 3.5C8.04518 3.5 9.17774 3.83718 10.3604 4.80283C11.654 5.85861 13.0328 7.5971 14.7529 10.4623L15.3697 11.4905C16.8586 13.971 17.7058 15.2471 18.2015 15.8489C18.8392 16.6217 19.2857 16.8521 19.8657 16.8521C21.3371 16.8521 21.7043 15.5 21.7043 13.9526L23.9912 13.8809C23.9912 15.4983 23.6724 16.6868 23.1299 17.6257C22.6057 18.5338 21.5842 19.441 19.8657 19.441C18.7974 19.441 17.851 19.209 16.8044 18.2217C15.9998 17.4638 15.0592 16.1176 14.3356 14.9074L12.1831 11.3119C11.1032 9.5075 10.1125 8.16212 9.53912 7.55284C8.92233 6.8977 8.12946 6.10649 6.8642 6.10649C5.84013 6.10649 4.97047 6.82508 4.2427 7.92426L2.03516 6.61308Z" fill="url(#paint0_linear_177_2091)"/>
<path d="M6.86861 6.10649C5.84454 6.10649 4.97488 6.82508 4.24709 7.92426C3.21802 9.47746 2.5879 11.791 2.5879 14.0127C2.5879 14.9291 2.78904 15.6327 3.05195 16.0584L0.841894 17.5139C0.274361 16.57 -0.00439453 15.3314 -0.00439453 13.9201C-0.00439453 11.3537 0.700011 8.67873 2.03956 6.61308C3.22804 4.78111 4.94316 3.5 6.91032 3.5L6.86861 6.10649Z" fill="url(#paint1_linear_177_2091)"/>
</g>
<defs>
<linearGradient id="paint0_linear_177_2091" x1="3.38795" y1="13.2649" x2="21.4426" y2="14.2616" gradientUnits="userSpaceOnUse">
<stop stop-color="#0064E1"/>
<stop offset="0.4" stop-color="#0064E1"/>
<stop offset="0.83" stop-color="#0073EE"/>
<stop offset="1" stop-color="#0082FB"/>
</linearGradient>
<linearGradient id="paint1_linear_177_2091" x1="3.75135" y1="15.1011" x2="3.75135" y2="9.00842" gradientUnits="userSpaceOnUse">
<stop stop-color="#0082FB"/>
<stop offset="1" stop-color="#0064E0"/>
</linearGradient>
<clipPath id="clip0_177_2091">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,22 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.0548 2.49074C21.0548 3.31406 20.3822 3.98149 19.5525 3.98149C18.7228 3.98149 18.0503 3.31406 18.0503 2.49074C18.0503 1.66743 18.7228 1 19.5525 1C20.3822 1 21.0548 1.66743 21.0548 2.49074Z" fill="url(#paint0_linear_1015_212408)"/>
<path d="M21.0548 2.49074C21.0548 3.31406 20.3822 3.98149 19.5525 3.98149C18.7228 3.98149 18.0503 3.31406 18.0503 2.49074C18.0503 1.66743 18.7228 1 19.5525 1C20.3822 1 21.0548 1.66743 21.0548 2.49074Z" fill="black"/>
<path d="M15.9473 3.98147C15.9473 4.80478 15.2748 5.47221 14.4451 5.47221C13.6154 5.47221 12.9429 4.80478 12.9429 3.98147C12.9429 3.15815 13.6154 2.49072 14.4451 2.49072C15.2748 2.49072 15.9473 3.15815 15.9473 3.98147Z" fill="url(#paint1_linear_1015_212408)"/>
<path d="M15.9473 3.98147C15.9473 4.80478 15.2748 5.47221 14.4451 5.47221C13.6154 5.47221 12.9429 4.80478 12.9429 3.98147C12.9429 3.15815 13.6154 2.49072 14.4451 2.49072C15.2748 2.49072 15.9473 3.15815 15.9473 3.98147Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.36806 11.0707C7.36806 13.6603 8.64858 15.953 10.6155 17.3595C11.7915 16.3135 12.5314 14.7945 12.5314 13.104V8.92791C12.5314 8.29889 12.9591 7.74908 13.5722 7.58965L21.2525 5.59254C22.1362 5.36278 23 6.02432 23 6.93078V12.0122C23 18.0359 18.0791 22.9191 12.009 22.9191H11.991C5.92085 22.9191 1 18.0359 1 12.0122V8.50531C1 7.874 1.43071 7.32276 2.04686 7.16551L5.62675 6.25188C6.50887 6.02675 7.36806 6.68783 7.36806 7.5917V11.0707ZM2.59324 12.0122C2.59324 14.1092 3.29068 16.0445 4.46793 17.6022C5.01957 18.3321 5.85979 18.8168 6.7747 18.8168C7.64565 18.8168 8.4714 18.6248 9.21139 18.2813C7.11318 16.5706 5.77482 13.9758 5.77483 11.0707V7.84658L2.59324 8.6586V12.0122Z" fill="url(#paint2_linear_1015_212408)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.36806 11.0707C7.36806 13.6603 8.64858 15.953 10.6155 17.3595C11.7915 16.3135 12.5314 14.7945 12.5314 13.104V8.92791C12.5314 8.29889 12.9591 7.74908 13.5722 7.58965L21.2525 5.59254C22.1362 5.36278 23 6.02432 23 6.93078V12.0122C23 18.0359 18.0791 22.9191 12.009 22.9191H11.991C5.92085 22.9191 1 18.0359 1 12.0122V8.50531C1 7.874 1.43071 7.32276 2.04686 7.16551L5.62675 6.25188C6.50887 6.02675 7.36806 6.68783 7.36806 7.5917V11.0707ZM2.59324 12.0122C2.59324 14.1092 3.29068 16.0445 4.46793 17.6022C5.01957 18.3321 5.85979 18.8168 6.7747 18.8168C7.64565 18.8168 8.4714 18.6248 9.21139 18.2813C7.11318 16.5706 5.77482 13.9758 5.77483 11.0707V7.84658L2.59324 8.6586V12.0122Z" fill="black"/>
<defs>
<linearGradient id="paint0_linear_1015_212408" x1="14.8" y1="7.73027" x2="13.4094" y2="20.633" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#2E2E2E"/>
</linearGradient>
<linearGradient id="paint1_linear_1015_212408" x1="14.8002" y1="7.73025" x2="13.4096" y2="20.633" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#2E2E2E"/>
</linearGradient>
<linearGradient id="paint2_linear_1015_212408" x1="14.8001" y1="7.73013" x2="13.4095" y2="20.6329" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#2E2E2E"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,9 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.9215 3C16.9812 3 17.8401 3.8343 17.8401 4.863V16.1139C17.8474 16.2863 17.9226 16.4491 18.0499 16.5681C18.1771 16.6872 18.3464 16.7531 18.5221 16.752C18.6976 16.7528 18.8667 16.6868 18.9937 16.5678C19.1207 16.4488 19.1958 16.2861 19.2032 16.1139V9.38909C19.2045 9.14562 19.2546 8.90479 19.3508 8.68035C19.4469 8.4559 19.5871 8.25225 19.7634 8.08101C19.9397 7.90977 20.1486 7.77429 20.3782 7.68232C20.6078 7.59035 20.8536 7.54369 21.1016 7.54499C21.3496 7.54369 21.5955 7.59038 21.8252 7.68241C22.0549 7.77444 22.2638 7.90999 22.4401 8.08133C22.6164 8.25266 22.7566 8.45642 22.8527 8.68097C22.9487 8.90551 22.9988 9.14644 23 9.38999V15.2949C22.999 15.4496 22.9355 15.5977 22.8235 15.7065C22.7114 15.8154 22.56 15.8761 22.4023 15.8754C22.3242 15.8759 22.2468 15.8612 22.1744 15.8323C22.102 15.8034 22.0362 15.7608 21.9806 15.7069C21.925 15.6529 21.8808 15.5888 21.8504 15.5181C21.8201 15.4474 21.8042 15.3716 21.8038 15.2949V9.38999C21.8033 9.29993 21.7847 9.21084 21.7492 9.12782C21.7136 9.04479 21.6618 8.96946 21.5966 8.90611C21.5314 8.84276 21.4541 8.79264 21.3692 8.75861C21.2842 8.72459 21.1933 8.70732 21.1016 8.70779C21.0099 8.70732 20.9189 8.72459 20.834 8.75861C20.7491 8.79264 20.6718 8.84276 20.6066 8.90611C20.5414 8.96946 20.4895 9.04479 20.454 9.12782C20.4184 9.21084 20.3999 9.29993 20.3994 9.38999V16.1148C20.3981 16.3555 20.3485 16.5937 20.2534 16.8156C20.1584 17.0375 20.0197 17.2389 19.8454 17.4082C19.6711 17.5775 19.4645 17.7115 19.2374 17.8024C19.0104 17.8934 18.7673 17.9395 18.5221 17.9382C18.2769 17.9395 18.0338 17.8934 17.8067 17.8024C17.5797 17.7115 17.3731 17.5775 17.1988 17.4082C17.0245 17.2389 16.8858 17.0375 16.7907 16.8156C16.6957 16.5937 16.6461 16.3555 16.6447 16.1148V4.8648C16.6372 4.68199 16.5576 4.5092 16.4229 4.3828C16.2882 4.2564 16.1088 4.18625 15.9224 4.1871C15.7361 4.186 15.5566 4.25593 15.4217 4.38217C15.2868 4.5084 15.207 4.68109 15.1992 4.8639L15.1983 19.1775C15.1953 19.6635 14.9959 20.1286 14.6439 20.4703C14.2919 20.8121 13.816 21.0026 13.3209 21C13.0757 21.0013 12.8326 20.9551 12.6056 20.8642C12.3785 20.7733 12.1719 20.6393 11.9976 20.47C11.8233 20.3007 11.6846 20.0993 11.5896 19.8774C11.4945 19.6555 11.4449 19.4173 11.4436 19.1766V17.436C11.4436 17.1156 11.7113 16.8555 12.0413 16.8555C12.3713 16.8555 12.6389 17.1156 12.6389 17.436V19.1766C12.6389 19.4133 12.7691 19.632 12.9799 19.7508C13.1908 19.8687 13.4511 19.8687 13.6619 19.7508C13.7654 19.6932 13.8514 19.6097 13.9113 19.5089C13.9712 19.408 14.0028 19.2933 14.0029 19.1766V4.863C14.0029 3.8343 14.8618 3 15.9215 3ZM10.7203 3C11.78 3 12.6389 3.8343 12.6389 4.863V15.2337C12.6386 15.3103 12.6228 15.3862 12.5926 15.4569C12.5623 15.5275 12.5182 15.5917 12.4627 15.6456C12.4072 15.6995 12.3414 15.7422 12.2691 15.7711C12.1967 15.8 12.1193 15.8147 12.0413 15.8142C11.9632 15.8147 11.8858 15.8 11.8134 15.7711C11.7411 15.7422 11.6753 15.6995 11.6198 15.6456C11.5643 15.5917 11.5202 15.5275 11.4899 15.4569C11.4597 15.3862 11.4439 15.3103 11.4436 15.2337V4.863C11.4424 4.67578 11.3655 4.49669 11.2299 4.36506C11.0943 4.23344 10.911 4.16004 10.7203 4.161C10.5296 4.16004 10.3464 4.23344 10.2108 4.36506C10.0751 4.49669 9.99829 4.67578 9.99708 4.863V17.4747C9.99417 17.9661 9.79268 18.4362 9.43688 18.7819C9.08108 19.1275 8.60009 19.3203 8.09958 19.3179C7.59892 19.3205 7.11769 19.1278 6.76169 18.7822C6.40569 18.4365 6.20408 17.9662 6.20117 17.4747V9.38999C6.20069 9.29993 6.18214 9.21084 6.1466 9.12782C6.11105 9.04479 6.05919 8.96946 5.99399 8.90611C5.92879 8.84276 5.85152 8.79264 5.76658 8.75861C5.68165 8.72459 5.59073 8.70732 5.499 8.70779C5.40727 8.70732 5.31635 8.72459 5.23142 8.75861C5.14648 8.79264 5.06921 8.84276 5.00401 8.90611C4.93881 8.96946 4.88695 9.04479 4.8514 9.12782C4.81586 9.21084 4.79731 9.29993 4.79683 9.38999V12.81C4.79551 13.0535 4.74536 13.2943 4.64924 13.5187C4.55312 13.7432 4.41292 13.9468 4.23663 14.1181C4.06035 14.2893 3.85143 14.4248 3.62182 14.5168C3.39221 14.6087 3.1464 14.6554 2.89842 14.6541C2.65044 14.6554 2.40462 14.6087 2.17501 14.5168C1.9454 14.4248 1.73649 14.2893 1.5602 14.1181C1.38392 13.9468 1.24371 13.7432 1.14759 13.5187C1.05147 13.2943 1.00132 13.0535 1 12.81L1 11.5698C1 11.2485 1.26767 10.9884 1.59767 10.9884C1.92767 10.9884 2.19625 11.2494 2.19625 11.5698V12.81C2.19625 13.1862 2.51067 13.4913 2.89842 13.4913C3.28617 13.4913 3.60058 13.1862 3.60058 12.81V9.38909C3.60349 8.89769 3.80499 8.42753 4.16078 8.08191C4.51658 7.73629 4.99758 7.5435 5.49808 7.54589C5.99874 7.54326 6.47998 7.73595 6.83598 8.08159C7.19197 8.42723 7.39359 8.89753 7.3965 9.38909V17.4747C7.3965 17.8518 7.71092 18.1569 8.09958 18.1569C8.48733 18.1569 8.80175 17.8518 8.80175 17.4747V4.863C8.80175 3.8343 9.66067 3 10.7203 3Z" fill="url(#paint0_linear_1003_325107)"/>
<defs>
<linearGradient id="paint0_linear_1003_325107" x1="1" y1="12" x2="23" y2="12" gradientUnits="userSpaceOnUse">
<stop stop-color="#E2167E"/>
<stop offset="1" stop-color="#FE603C"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,12 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.5701 13.7056H17.1411V17.1245H20.5701V13.7056Z" fill="#FA500F"/>
<path d="M24.0002 17.1233H13.7144V20.5423H24.0002V17.1233Z" fill="#E10500"/>
<path d="M13.7142 13.7056H10.2852V17.1245H13.7142V13.7056Z" fill="#FA500F"/>
<path d="M6.85622 13.7056H3.42725V17.1245H6.85622V13.7056Z" fill="#FA500F"/>
<path d="M10.2847 17.1233H0V20.5423H10.2847V17.1233Z" fill="#E10500"/>
<path d="M20.5712 6.86914H13.7144V10.288H20.5712V6.86914Z" fill="#FFAF00"/>
<path d="M10.2841 6.86914H3.42725V10.288H10.2841V6.86914Z" fill="#FFAF00"/>
<path d="M20.5688 10.2864H3.42725V13.7053H20.5688V10.2864Z" fill="#FF8205"/>
<path d="M20.5701 3.44995H17.1411V6.86886H20.5701V3.44995Z" fill="#FFD800"/>
<path d="M6.85622 3.44995H3.42725V6.86886H6.85622V3.44995Z" fill="#FFD800"/>
</svg>

After

Width:  |  Height:  |  Size: 865 B

View File

@@ -0,0 +1,9 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.16748 11.386H4.41117V13.6131H2.16748V11.386ZM10.8396 13.6139H13.0833V15.841H10.8396V13.6139ZM17.5706 15.841H15.3269V17.7677H19.5117V13.6139H17.5706V15.841Z" fill="#624AFF"/>
<path d="M13.0833 11.386H15.3269V13.6131H13.0833V11.386ZM2.16748 9.15894H4.41117V11.386H2.16748V9.15894Z" fill="#36CFD1"/>
<path d="M19.5117 11.386H21.7554V13.6131H19.5117V11.386Z" fill="#624AFF"/>
<path d="M19.5117 9.15894H21.7554V11.386H19.5117V9.15894Z" fill="#36CFD1"/>
<path d="M15.3271 7.23218V9.15884H17.5708V11.3859H19.5119V7.23218H15.3271Z" fill="#624AFF"/>
<path d="M8.59619 11.386H10.8399V13.6131H8.59619V11.386Z" fill="#36CFD1"/>
<path d="M6.35216 9.15884H8.59585V7.23218H4.41113V11.3859H6.35216V9.15884ZM6.35216 13.6139H4.41113V17.7676H8.59585V15.8409H6.35216V13.6139Z" fill="#624AFF"/>
</svg>

After

Width:  |  Height:  |  Size: 889 B

View File

@@ -0,0 +1,75 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1004_325132)">
<path d="M5.33654 12.6052C5.32143 12.389 5.29198 12.1726 5.2946 11.9566C5.29847 11.6371 5.36945 11.3285 5.52606 11.0436C5.64028 10.8357 5.78843 10.6525 5.96892 10.4965C6.14747 10.3421 6.3429 10.2093 6.5607 10.1123C6.7265 10.0384 6.89839 9.97835 7.08161 9.9618C7.21022 9.95018 7.34031 9.9351 7.46851 9.9423C7.71936 9.9564 7.96003 10.0193 8.1901 10.1202C8.36697 10.1977 8.53314 10.2918 8.68729 10.4066C8.82885 10.5119 8.95317 10.6335 9.05931 10.773C9.18709 10.941 9.28638 11.1239 9.34234 11.3254C9.38011 11.4615 9.41245 11.6008 9.42706 11.7406C9.44581 11.9202 9.44494 12.1017 9.4514 12.2824C9.45605 12.4126 9.45383 12.5431 9.46356 12.6728C9.48182 12.9163 9.5078 13.1588 9.59208 13.3918C9.65062 13.5536 9.72821 13.7056 9.81912 13.8557C9.75081 13.9311 9.685 14.001 9.62 14.0715C9.60327 14.0897 9.58956 14.1105 9.57368 14.1294C9.50368 14.2128 9.4334 14.296 9.36323 14.3793C9.21228 14.3214 9.06431 14.254 8.90954 14.2085C8.76117 14.1649 8.60685 14.1366 8.45315 14.1153C8.28699 14.0922 8.11878 14.0784 7.95101 14.0723C7.6943 14.0629 7.43719 14.0611 7.18026 14.0614C7.062 14.0615 6.94367 14.0732 6.82554 14.0818C6.76714 14.0861 6.70911 14.0951 6.64622 14.0975C6.61618 14.016 6.58867 13.9396 6.56599 13.8619C6.53214 13.746 6.51888 13.6224 6.42266 13.5317C6.39436 13.505 6.36746 13.475 6.3477 13.4421C6.27837 13.3265 6.21178 13.2093 6.14544 13.0921C6.09994 13.0116 6.05384 12.9394 5.96011 12.895C5.84749 12.8416 5.74732 12.7634 5.64088 12.6973C5.60632 12.6759 5.57103 12.6515 5.53249 12.6411C5.4687 12.6238 5.40201 12.6166 5.33654 12.6052Z" fill="#E95A0F"/>
<path d="M17.1081 14.0585C16.9771 14.0589 16.8461 14.0594 16.7101 14.0545C16.7086 13.9639 16.7126 13.8785 16.7151 13.7932C16.7154 13.7807 16.7116 13.7615 16.7033 13.7571C16.6945 13.7525 16.6774 13.7607 16.665 13.7657C16.6557 13.7694 16.648 13.777 16.6259 13.7925C16.6233 13.7573 16.6187 13.7331 16.6202 13.7093C16.6255 13.6292 16.6443 13.5483 16.6372 13.4694C16.6261 13.3478 16.6524 13.3145 16.5028 13.3163C16.4615 13.3168 16.4634 13.2866 16.4666 13.2597C16.472 13.2127 16.4824 13.1662 16.4858 13.1192C16.4892 13.0733 16.4866 13.0271 16.4866 12.9826C16.4588 12.9777 16.4394 12.9735 16.4199 12.9709C16.3718 12.9647 16.354 12.947 16.3647 12.8933C16.3781 12.8266 16.374 12.7567 16.3786 12.6883C16.3807 12.6579 16.3681 12.6408 16.3373 12.6378C16.2925 12.6335 16.2476 12.6266 16.2028 12.6275C16.152 12.6285 16.1463 12.6033 16.1511 12.5636C16.159 12.4975 16.1647 12.4311 16.1715 12.3648C16.175 12.3306 16.1788 12.2965 16.1835 12.2533C16.1192 12.25 16.0621 12.2448 16.005 12.2451C15.9689 12.2452 15.9487 12.2302 15.9444 12.1983C15.9316 12.1031 15.9174 12.0078 15.9117 11.912C15.9089 11.8644 15.8906 11.8514 15.8463 11.8507C15.7452 11.849 15.6442 11.8444 15.5431 11.8406C15.4642 11.8376 15.4327 11.8112 15.42 11.7355C15.4119 11.6869 15.3904 11.6526 15.3353 11.6483C15.251 11.6417 15.1664 11.6378 15.0826 11.6275C15.0028 11.6177 14.9237 11.6018 14.8446 11.5874C14.7899 11.5774 14.7356 11.5652 14.6812 11.554C14.7303 11.3103 14.8241 11.0827 14.9674 10.8788C15.164 10.599 15.4187 10.3771 15.72 10.2066C15.8926 10.1089 16.0744 10.0338 16.2687 9.98785C16.4501 9.94499 16.6348 9.92716 16.82 9.94128C17.183 9.96895 17.5152 10.0895 17.8265 10.2721C17.9993 10.3734 18.1558 10.4936 18.2868 10.6412C18.3752 10.7407 18.4524 10.8512 18.5234 10.9636C18.6407 11.1492 18.7068 11.3557 18.7478 11.5688C18.7673 11.6697 18.7785 11.7728 18.784 11.8754C18.7922 12.0303 18.7922 12.1855 18.7911 12.346C18.6008 12.4203 18.4145 12.4877 18.2297 12.5585C18.145 12.591 18.0571 12.6156 17.9928 12.6899C17.9413 12.7493 17.8767 12.7994 17.8126 12.8467C17.7047 12.9264 17.6118 13.0165 17.5394 13.1296C17.5031 13.1862 17.4533 13.2398 17.3978 13.2786C17.2741 13.3651 17.2083 13.4801 17.1842 13.6229C17.1596 13.7682 17.1335 13.9133 17.1081 14.0585Z" fill="#ED6D7B"/>
<path d="M4.46465 15.8022C4.457 15.9901 4.45558 16.1785 4.44008 16.3658C4.42158 16.5893 4.37155 16.8066 4.27897 17.0143C4.18094 17.2343 4.04272 17.4252 3.8597 17.5833C3.68461 17.7346 3.48285 17.8399 3.25706 17.9066C3.02082 17.9763 2.77987 17.9929 2.53811 17.9759C2.2901 17.9586 2.06021 17.877 1.8548 17.7348C1.63455 17.5824 1.4677 17.3853 1.33122 17.1604C1.22679 16.9883 1.15583 16.8041 1.1221 16.608C1.09662 16.4599 1.09697 16.3105 1.11771 16.16C1.14632 15.9525 1.21596 15.7597 1.31335 15.5753C1.43988 15.3356 1.61087 15.1312 1.84029 14.9793C2.01258 14.8653 2.20462 14.7916 2.41146 14.7621C2.50698 14.7485 2.60419 14.7446 2.70081 14.7403C2.82884 14.7345 2.95713 14.7343 3.08515 14.7285C3.17821 14.7242 3.27102 14.7148 3.37042 14.7107C3.38511 14.7295 3.39482 14.7447 3.4013 14.761C3.45278 14.8913 3.51647 15.0145 3.60426 15.1259C3.68863 15.233 3.76577 15.3456 3.85148 15.4516C3.89417 15.5044 3.94264 15.5573 3.9997 15.5934C4.08368 15.6464 4.17654 15.6867 4.2678 15.7279C4.33153 15.7566 4.3989 15.7777 4.46465 15.8022Z" fill="#EC663E"/>
<path d="M14.9971 7.73083C15.0384 7.41491 15.1476 7.12721 15.3536 6.87514C15.5316 6.6574 15.7459 6.48751 16.0038 6.36951C16.1635 6.29643 16.3302 6.24559 16.507 6.23413C16.6167 6.22702 16.7275 6.21732 16.8366 6.22496C17.0173 6.23761 17.1921 6.28243 17.3582 6.35529C17.5694 6.44792 17.7551 6.57587 17.9091 6.74455C18.0756 6.9268 18.1848 7.13937 18.2521 7.37413C18.311 7.57954 18.3208 7.79 18.3033 7.99883C18.2775 8.30727 18.1744 8.5927 17.9717 8.83654C17.8572 8.97423 17.7268 9.09657 17.5668 9.19388C17.5093 9.13428 17.4578 9.0755 17.4084 9.01499C17.3468 8.93939 17.2891 8.86065 17.2257 8.78653C17.1759 8.72836 17.1217 8.67355 17.0664 8.62024C17.0273 8.58256 16.9857 8.5463 16.9406 8.51588C16.8857 8.47887 16.8255 8.44947 16.7685 8.41534C16.6764 8.36016 16.5833 8.31266 16.4746 8.28899C16.342 8.2601 16.2041 8.24036 16.0866 8.16331C16.071 8.15305 16.0493 8.15065 16.0299 8.14694C15.8897 8.12009 15.7526 8.08705 15.6272 8.0145C15.5705 7.98168 15.5013 7.96996 15.442 7.94054C15.3896 7.91457 15.3464 7.8704 15.2934 7.84655C15.1969 7.80317 15.0961 7.7689 14.9971 7.73083Z" fill="#EA580E"/>
<path d="M6.71733 9.30394C6.61429 9.24357 6.50481 9.19146 6.40973 9.1209C6.26948 9.01681 6.14801 8.89175 6.05348 8.74484C5.93071 8.55407 5.83996 8.35036 5.81494 8.12463C5.80087 7.99771 5.78844 7.86899 5.79458 7.74197C5.80354 7.55664 5.84804 7.37705 5.9207 7.20353C6.01677 6.97411 6.16303 6.78096 6.35164 6.61877C6.54791 6.44998 6.77815 6.34192 7.03071 6.27542C7.24005 6.2203 7.45375 6.20983 7.66643 6.22578C7.92567 6.24522 8.16262 6.33902 8.37503 6.48592C8.56228 6.61542 8.72015 6.77356 8.8422 6.9704C8.718 7.05849 8.5957 7.14155 8.4709 7.22087C8.28473 7.33918 8.09775 7.45562 7.94773 7.61939C7.85193 7.72398 7.76039 7.8344 7.65224 7.92563C7.46863 8.08051 7.35007 8.28458 7.20512 8.46742C7.0759 8.63042 6.98008 8.8191 6.87453 8.99924C6.81677 9.09782 6.76939 9.20218 6.71733 9.30394Z" fill="#F8AB00"/>
<path d="M12.546 17.9157C12.4656 17.9332 12.3861 17.9591 12.3048 17.9662C12.1793 17.9772 12.0525 17.9815 11.9266 17.9774C11.7159 17.9705 11.5127 17.9275 11.3185 17.8431C11.1542 17.7717 11.0069 17.6788 10.8766 17.5581C10.6151 17.3159 10.4186 17.0354 10.3373 16.688C10.3215 16.6207 10.316 16.5504 10.3129 16.4811C10.3065 16.3333 10.3106 16.1848 10.2995 16.0373C10.2895 15.9046 10.2651 15.7728 10.2515 15.6358C10.2684 15.6212 10.2856 15.6138 10.2926 15.6011C10.3441 15.5078 10.4248 15.4401 10.5004 15.3672C10.5645 15.3054 10.6168 15.2316 10.6834 15.1729C10.7595 15.1056 10.8125 15.0285 10.8398 14.9328C10.8701 14.8264 10.9018 14.7204 10.9328 14.6143C11.0201 14.6332 11.1069 14.6548 11.1949 14.6704C11.2836 14.6861 11.3731 14.6979 11.4628 14.7075C11.5549 14.7173 11.6475 14.7224 11.7448 14.7352C11.757 14.9061 11.7619 15.0715 11.7722 15.2366C11.7796 15.3539 11.7874 15.4719 11.8074 15.5875C11.8338 15.7396 11.8696 15.8904 11.9063 16.0407C11.9444 16.1968 11.9501 16.3585 12.0197 16.5099C12.1303 16.7507 12.2189 17.0011 12.3277 17.2427C12.4059 17.4162 12.4638 17.5929 12.4919 17.7802C12.499 17.8269 12.5274 17.8706 12.546 17.9157Z" fill="#EA5227"/>
<path d="M12.5502 17.9155C12.5272 17.8706 12.4988 17.8269 12.4917 17.7802C12.4636 17.5929 12.4057 17.4163 12.3275 17.2427C12.2187 17.0011 12.1301 16.7507 12.0195 16.5099C11.95 16.3585 11.9442 16.1969 11.9061 16.0407C11.8694 15.8905 11.8336 15.7397 11.8072 15.5875C11.7872 15.4719 11.7794 15.3539 11.772 15.2366C11.7617 15.0715 11.7568 14.9061 11.7495 14.7359C11.8428 14.734 11.9363 14.7411 12.0295 14.739C12.18 14.7355 12.3303 14.726 12.4854 14.7241C12.4953 14.7639 12.499 14.7989 12.5059 14.8332C12.5365 14.9846 12.5662 15.1361 12.6001 15.2867C12.61 15.3304 12.6256 15.3762 12.6513 15.4124C12.7293 15.5221 12.8126 15.6285 12.8959 15.7346C12.9418 15.7931 12.9862 15.8547 13.0414 15.904C13.1355 15.9882 13.2381 16.0633 13.3362 16.1433C13.467 16.2501 13.6025 16.3483 13.7735 16.386C13.7555 16.5039 13.7474 16.6243 13.7172 16.7391C13.665 16.9371 13.5823 17.1237 13.4622 17.2937C13.32 17.4948 13.1454 17.6617 12.9217 17.7721C12.8045 17.8299 12.6773 17.8682 12.5502 17.9155Z" fill="#EA5330"/>
<path d="M22.6633 15.3872C22.7199 15.4806 22.7881 15.5693 22.8303 15.6685C22.8883 15.8048 22.9365 15.9468 22.9705 16.0905C23.0027 16.226 23.0056 16.3656 22.9922 16.507C22.977 16.666 22.9416 16.8178 22.8795 16.964C22.8166 17.1119 22.7327 17.2476 22.6274 17.3718C22.4733 17.5535 22.2874 17.6953 22.074 17.8018C21.9176 17.8799 21.7519 17.9377 21.5758 17.9568C21.4637 17.9689 21.35 17.9818 21.2379 17.9769C20.9735 17.9652 20.7233 17.8978 20.4958 17.7617C20.4295 17.722 20.366 17.6776 20.3027 17.6306C20.3607 17.5714 20.4156 17.5154 20.4737 17.4627C20.6074 17.3415 20.7426 17.2218 20.8774 17.1016C20.888 17.0921 20.9004 17.0845 20.9109 17.075C20.9865 17.0065 21.0718 16.9454 21.1348 16.8673C21.2315 16.7475 21.3533 16.6587 21.474 16.5669C21.5209 16.5311 21.5727 16.4994 21.612 16.4569C21.6759 16.3878 21.73 16.3102 21.7909 16.2383C21.8652 16.1505 21.9404 16.0633 22.019 15.9792C22.0632 15.9318 22.1169 15.8929 22.1633 15.8472C22.3245 15.6882 22.4766 15.5199 22.6633 15.3872Z" fill="#F8AA05"/>
<path d="M14.6804 11.5583C14.7355 11.5652 14.7898 11.5773 14.8445 11.5873C14.9236 11.6018 15.0027 11.6176 15.0825 11.6274C15.1663 11.6377 15.251 11.6417 15.3353 11.6483C15.3904 11.6526 15.4118 11.6868 15.42 11.7354C15.4326 11.8112 15.4642 11.8376 15.543 11.8405C15.6441 11.8444 15.7452 11.849 15.8463 11.8507C15.8906 11.8514 15.9088 11.8644 15.9117 11.912C15.9173 12.0077 15.9316 12.1031 15.9444 12.1983C15.9486 12.2301 15.9688 12.2452 16.005 12.245C16.062 12.2447 16.1191 12.25 16.1834 12.2533C16.1788 12.2964 16.1749 12.3306 16.1714 12.3647C16.1646 12.431 16.159 12.4974 16.151 12.5636C16.1462 12.6033 16.152 12.6284 16.2027 12.6274C16.2475 12.6266 16.2925 12.6335 16.3373 12.6378C16.368 12.6408 16.3807 12.6579 16.3786 12.6883C16.3739 12.7567 16.378 12.8266 16.3647 12.8933C16.354 12.947 16.3718 12.9647 16.4199 12.9709C16.4394 12.9734 16.4587 12.9776 16.4865 12.9826C16.4865 13.027 16.4892 13.0733 16.4858 13.1191C16.4823 13.1662 16.4719 13.2127 16.4665 13.2597C16.4634 13.2865 16.4615 13.3168 16.5028 13.3163C16.6523 13.3144 16.626 13.3478 16.6371 13.4694C16.6443 13.5482 16.6255 13.6292 16.6202 13.7093C16.6186 13.7331 16.6232 13.7573 16.6258 13.7924C16.6479 13.777 16.6556 13.7694 16.6649 13.7656C16.6774 13.7606 16.6945 13.7524 16.7032 13.757C16.7116 13.7614 16.7154 13.7806 16.715 13.7931C16.7126 13.8785 16.7086 13.9638 16.705 14.0537C16.5829 14.0624 16.4605 14.0633 16.3387 14.0715C16.1805 14.0822 16.0227 14.0988 15.86 14.108C15.8482 14.076 15.8347 14.0488 15.835 14.0217C15.8359 13.923 15.7863 13.8456 15.736 13.7656C15.6938 13.6987 15.6405 13.627 15.6327 13.5534C15.6211 13.443 15.5705 13.3842 15.4706 13.3518C15.4586 13.348 15.4471 13.3429 15.4356 13.3378C15.3542 13.3013 15.2663 13.2749 15.228 13.1813C15.2182 13.1572 15.1882 13.1412 15.1686 13.1205C15.142 13.0926 15.1183 13.0618 15.0901 13.0357C15.0612 13.009 15.0318 12.9789 14.9965 12.9637C14.9442 12.9412 14.8868 12.9299 14.8312 12.9149C14.7741 12.8995 14.7166 12.8854 14.6593 12.8708C14.6623 12.7338 14.6781 12.5957 14.6652 12.4602C14.6473 12.2714 14.6276 12.083 14.6374 11.8936C14.6431 11.7829 14.665 11.673 14.6804 11.5583Z" fill="#ED6876"/>
<path d="M6.71924 9.30734C6.7693 9.20223 6.81668 9.09787 6.87444 8.99929C6.97999 8.81915 7.07581 8.63047 7.20503 8.46747C7.34998 8.28462 7.46854 8.08056 7.65215 7.92567C7.7603 7.83444 7.85184 7.72402 7.94764 7.61944C8.09766 7.45567 8.28464 7.33923 8.47081 7.22091C8.59561 7.1416 8.71791 7.05854 8.84375 6.97363C8.97124 7.15144 9.05849 7.34982 9.08918 7.56532C9.11347 7.73593 9.11352 7.90982 9.11916 8.08719C9.06737 8.1044 9.01805 8.11092 8.97476 8.13026C8.90472 8.16157 8.84196 8.21005 8.77029 8.23584C8.55396 8.3137 8.4021 8.47318 8.24832 8.62647C8.16272 8.7118 8.10117 8.82054 8.03174 8.92068C7.98345 8.99032 7.92997 9.05912 7.89715 9.13577C7.85088 9.24384 7.82157 9.35882 7.78501 9.47085C7.65073 9.47141 7.51556 9.48176 7.38236 9.47033C7.16172 9.4514 6.94424 9.41121 6.74246 9.31433C6.73627 9.31136 6.72835 9.31183 6.71924 9.30734Z" fill="#F6A200"/>
<path d="M22.6629 15.3833C22.4767 15.5197 22.3246 15.6881 22.1634 15.8471C22.117 15.8928 22.0633 15.9316 22.0191 15.979C21.9405 16.0631 21.8653 16.1504 21.791 16.2381C21.7301 16.31 21.676 16.3876 21.6121 16.4567C21.5728 16.4992 21.521 16.531 21.4741 16.5667C21.3534 16.6586 21.2316 16.7473 21.1349 16.8672C21.0719 16.9453 20.9866 17.0064 20.9111 17.0748C20.9005 17.0844 20.8881 17.092 20.8775 17.1014C20.7427 17.2216 20.6075 17.3413 20.4738 17.4626C20.4157 17.5153 20.3608 17.5713 20.301 17.6273C20.068 17.4444 19.8931 17.2191 19.7715 16.952C19.8096 16.933 19.849 16.9243 19.8785 16.9027C19.9732 16.8333 20.1006 16.8134 20.1758 16.7146C20.1859 16.7012 20.2046 16.6936 20.22 16.6846C20.4147 16.57 20.6158 16.4644 20.8021 16.3381C20.9143 16.262 21.005 16.1551 21.1025 16.0592C21.1441 16.0183 21.1834 15.9733 21.2146 15.9246C21.3484 15.7156 21.4807 15.5057 21.6544 15.3249C21.7876 15.1863 21.8424 15.0113 21.8999 14.8372C22.0725 14.8817 22.2247 14.966 22.3642 15.0716C22.4795 15.1589 22.5797 15.2615 22.6629 15.3833Z" fill="#F7A80D"/>
<path d="M17.1128 14.0593C17.1332 13.9134 17.1593 13.7684 17.1839 13.6231C17.208 13.4802 17.2738 13.3652 17.3975 13.2788C17.453 13.2399 17.5028 13.1864 17.5391 13.1297C17.6114 13.0167 17.7044 12.9265 17.8122 12.8469C17.8764 12.7995 17.9409 12.7494 17.9925 12.69C18.0568 12.6158 18.1447 12.5912 18.2294 12.5587C18.4142 12.4878 18.6004 12.4204 18.79 12.3511C18.7982 12.4769 18.7972 12.6037 18.8079 12.7295C18.8272 12.9563 18.8523 13.1827 18.9359 13.3981C18.9377 13.4028 18.937 13.4085 18.9357 13.421C18.86 13.4649 18.7847 13.4989 18.7131 13.5393C18.6702 13.5635 18.6287 13.5934 18.5947 13.6283C18.5293 13.6957 18.4742 13.773 18.4064 13.8378C18.3074 13.9326 18.2671 14.0575 18.2084 14.1733C18.2062 14.1776 18.2077 14.1837 18.2074 14.189C18.1149 14.1707 18.0229 14.1499 17.9299 14.1349C17.8244 14.1179 17.7184 14.1021 17.6119 14.093C17.4475 14.0788 17.2826 14.0707 17.1128 14.0593Z" fill="#EF7A72"/>
<path d="M11.4339 14.1435C11.2124 14.0854 11.0114 13.9848 10.8272 13.8541C10.7379 13.7907 10.6589 13.7135 10.5771 13.6378C10.6095 13.6005 10.6377 13.5658 10.6708 13.5362C10.748 13.467 10.7937 13.3778 10.8429 13.2903C10.8966 13.1948 10.9555 13.1019 11.0059 13.0047C11.0346 12.9492 11.0663 12.8878 11.0678 12.8283C11.0691 12.779 11.07 12.7335 11.0959 12.693C11.1887 12.5484 11.2645 12.3954 11.3004 12.2289C11.3234 12.1222 11.3863 12.0296 11.3855 11.9122C11.3848 11.8157 11.4322 11.7188 11.4587 11.6221C11.4937 11.4949 11.539 11.3694 11.5621 11.2402C11.597 11.0452 11.618 10.8478 11.6421 10.6512C11.662 10.4893 11.6777 10.3269 11.6953 10.1648C11.7682 10.1678 11.8411 10.1709 11.919 10.1793C11.9204 10.216 11.9145 10.2473 11.9136 10.2788C11.9091 10.4296 11.9092 10.5805 11.9012 10.7311C11.8947 10.8538 11.8787 10.976 11.8676 11.0985C11.8534 11.2559 11.8406 11.4134 11.8257 11.5708C11.8155 11.6791 11.8064 11.7878 11.79 11.8953C11.7795 11.9639 11.7414 12.0296 11.7776 12.1011C11.7814 12.1086 11.773 12.1212 11.7727 12.1315C11.7703 12.2369 11.7075 12.3379 11.7488 12.4464C11.7499 12.4493 11.7484 12.4533 11.7478 12.4568C11.7173 12.6204 11.6877 12.7841 11.6558 12.9475C11.6424 13.0162 11.6238 13.0839 11.6083 13.1522C11.5919 13.224 11.5799 13.2969 11.5598 13.3675C11.5205 13.5049 11.4437 13.6362 11.4985 13.7867C11.5025 13.7977 11.501 13.8117 11.4987 13.8236C11.4775 13.9303 11.4556 14.0369 11.4339 14.1435Z" fill="#E94E3B"/>
<path d="M11.4375 14.1453C11.4554 14.0368 11.4774 13.9302 11.4985 13.8235C11.5009 13.8116 11.5023 13.7976 11.4983 13.7866C11.4435 13.6361 11.5204 13.5048 11.5596 13.3674C11.5798 13.2968 11.5918 13.2239 11.6081 13.1521C11.6237 13.0838 11.6423 13.0161 11.6557 12.9474C11.6875 12.784 11.7172 12.6203 11.7477 12.4567C11.7483 12.4532 11.7498 12.4492 11.7487 12.4463C11.7073 12.3378 11.7701 12.2368 11.7726 12.1314C11.7728 12.1211 11.7813 12.1085 11.7775 12.101C11.7413 12.0295 11.7794 11.9638 11.7898 11.8952C11.8062 11.7877 11.8154 11.679 11.8256 11.5707C11.8404 11.4133 11.8532 11.2558 11.8675 11.0984C11.8785 10.9759 11.8946 10.8537 11.901 10.731C11.909 10.5804 11.9089 10.4295 11.9134 10.2787C11.9144 10.2472 11.9202 10.2159 11.9238 10.1799C11.9822 10.1748 12.0405 10.1743 12.1039 10.1791C12.1281 10.3394 12.1241 10.4948 12.1216 10.6506C12.1199 10.7575 12.1373 10.8645 12.1409 10.9717C12.1445 11.0804 12.1405 11.1893 12.1421 11.298C12.1431 11.3587 12.1507 11.4193 12.1515 11.48C12.1521 11.5255 12.1464 11.5711 12.1439 11.6167C12.1431 11.6308 12.1424 11.645 12.1435 11.6589C12.1536 11.7797 12.164 11.9005 12.1711 12.0243C12.1628 12.1548 12.1578 12.2823 12.1525 12.4097C12.1454 12.5821 12.1357 12.7544 12.1318 12.9268C12.1298 13.0128 12.1426 13.0992 12.1406 13.1853C12.1376 13.3135 12.1267 13.4416 12.1211 13.5698C12.12 13.5954 12.12 13.6259 12.1327 13.6464C12.1798 13.7231 12.1813 13.808 12.1843 13.8918C12.1882 14.0038 12.1852 14.1161 12.1852 14.2283C12.0606 14.256 11.9364 14.2356 11.8137 14.2186C11.6887 14.2012 11.5654 14.1715 11.4375 14.1453Z" fill="#EA5043"/>
<path d="M5.33548 12.6101C5.40176 12.6167 5.46845 12.6238 5.53224 12.6411C5.57078 12.6516 5.60607 12.6759 5.64063 12.6974C5.74707 12.7634 5.84724 12.8416 5.95986 12.895C6.05359 12.9394 6.09969 13.0117 6.14519 13.0921C6.21153 13.2093 6.27812 13.3265 6.34745 13.4421C6.36721 13.475 6.39412 13.5051 6.42241 13.5317C6.51863 13.6224 6.53189 13.746 6.56574 13.862C6.58842 13.9397 6.61593 14.016 6.64139 14.0969C6.32041 14.129 5.99915 14.1562 5.6875 14.2586C5.67459 14.2341 5.66795 14.2123 5.65734 14.1924C5.60945 14.1027 5.58434 13.9994 5.49461 13.9344C5.46726 13.9145 5.43903 13.8938 5.41785 13.8683C5.32683 13.7586 5.2324 13.653 5.10449 13.5819C5.15267 13.46 5.20577 13.3397 5.24772 13.2158C5.29571 13.074 5.32096 12.9272 5.32393 12.7771C5.325 12.723 5.33094 12.669 5.33548 12.6101Z" fill="#EB5D19"/>
<path d="M11.69 10.1639C11.6772 10.3267 11.6615 10.4891 11.6417 10.651C11.6176 10.8477 11.5965 11.045 11.5616 11.24C11.5385 11.3692 11.4933 11.4947 11.4583 11.622C11.4317 11.7186 11.3843 11.8155 11.385 11.912C11.3858 12.0294 11.3229 12.122 11.2999 12.2287C11.2641 12.3952 11.1882 12.5482 11.0954 12.6928C11.0695 12.7333 11.0687 12.7788 11.0674 12.8282C11.0658 12.8876 11.0342 12.949 11.0054 13.0046C10.955 13.1017 10.8961 13.1946 10.8424 13.2901C10.7932 13.3776 10.7475 13.4668 10.6703 13.536C10.6373 13.5656 10.609 13.6004 10.5752 13.6343C10.4423 13.5218 10.3457 13.3832 10.2561 13.2388C10.1732 13.1053 10.1114 12.9631 10.064 12.8101C10.2088 12.7369 10.3457 12.6627 10.4485 12.5413C10.4564 12.532 10.4696 12.5273 10.4781 12.5185C10.5328 12.4611 10.5926 12.4072 10.6398 12.3443C10.7067 12.2554 10.7581 12.1552 10.8272 12.0681C10.9168 11.9554 10.976 11.8277 11.0453 11.7021C11.0938 11.6955 11.1186 11.668 11.1337 11.629C11.1495 11.5879 11.1625 11.5451 11.1839 11.5069C11.2318 11.4214 11.2889 11.3406 11.3332 11.2535C11.3697 11.1817 11.3932 11.1036 11.4225 11.0283C11.4849 10.8682 11.5018 10.6965 11.5589 10.5337C11.5992 10.4187 11.5931 10.2882 11.6077 10.1646C11.6335 10.1641 11.6593 10.1636 11.69 10.1639Z" fill="#E94C32"/>
<path d="M21.8962 14.8353C21.8424 15.0114 21.7876 15.1863 21.6545 15.3249C21.4807 15.5057 21.3484 15.7156 21.2147 15.9246C21.1835 15.9733 21.1441 16.0183 21.1025 16.0593C21.0051 16.1552 20.9143 16.262 20.8021 16.3381C20.6158 16.4645 20.4148 16.5701 20.2201 16.6846C20.2046 16.6937 20.1859 16.7013 20.1758 16.7146C20.1006 16.8135 19.9732 16.8333 19.8785 16.9027C19.849 16.9243 19.8097 16.9331 19.771 16.9482C19.7338 16.8439 19.6956 16.7402 19.669 16.6338C19.6523 16.5671 19.653 16.4963 19.6509 16.4224C19.6717 16.4141 19.6876 16.4111 19.7033 16.4072C19.8756 16.3634 20.0462 16.3219 20.1805 16.1914C20.2834 16.0913 20.4024 16.0069 20.513 15.9142C20.58 15.8582 20.6549 15.8075 20.7086 15.7409C20.8699 15.5407 21.0231 15.3343 21.1781 15.1294C21.2067 15.0916 21.2381 15.0522 21.2525 15.0087C21.2817 14.9204 21.3001 14.8288 21.323 14.7385C21.5179 14.7415 21.7078 14.7723 21.8962 14.8353Z" fill="#F7A617"/>
<path d="M13.7744 16.3814C13.6026 16.3482 13.4671 16.25 13.3363 16.1432C13.2383 16.0632 13.1356 15.9881 13.0415 15.904C12.9863 15.8546 12.9419 15.793 12.896 15.7345C12.8127 15.6284 12.7294 15.5221 12.6514 15.4123C12.6257 15.3761 12.6101 15.3303 12.6003 15.2867C12.5663 15.136 12.5366 14.9845 12.5061 14.8332C12.4991 14.7988 12.4954 14.7638 12.4902 14.7247C12.6561 14.7015 12.8221 14.6826 12.9957 14.665C13.025 14.7256 13.0488 14.7842 13.0679 14.8443C13.0995 14.9439 13.1526 15.0268 13.2316 15.0996C13.3085 15.1704 13.3765 15.2516 13.4402 15.3343C13.5437 15.4689 13.6908 15.5367 13.8421 15.6004C13.8307 15.6794 13.8157 15.7581 13.8087 15.8375C13.7983 15.9561 13.7936 16.0751 13.7864 16.1939C13.7827 16.2549 13.779 16.3159 13.7744 16.3814Z" fill="#EA553A"/>
<path d="M13.6676 13.4764C13.624 13.5307 13.5839 13.5882 13.5361 13.6388C13.3963 13.7868 13.235 13.909 13.0471 14.0056C13.0126 13.945 12.9855 13.8857 12.9579 13.8224C12.9217 13.6858 12.8897 13.5523 12.8494 13.4212C12.7993 13.2584 12.734 13.1006 12.7258 12.9268C12.7224 12.8538 12.7119 12.775 12.6483 12.7181C12.6369 12.7079 12.6342 12.6857 12.6324 12.6686C12.6169 12.5273 12.6031 12.3858 12.5878 12.2445C12.5818 12.1888 12.5836 12.1295 12.5637 12.0786C12.5243 11.9777 12.5142 11.8742 12.5127 11.7689C12.5117 11.7041 12.5243 11.6388 12.5212 11.5741C12.5139 11.4225 12.502 11.271 12.4896 11.1196C12.4824 11.0323 12.4684 10.9455 12.4617 10.8582C12.4567 10.793 12.4586 10.7273 12.4605 10.6648C12.471 10.7267 12.4723 10.7872 12.487 10.8444C12.5089 10.9292 12.5439 11.0107 12.5668 11.0953C12.6019 11.2252 12.5836 11.3631 12.64 11.492C12.687 11.5992 12.7096 11.7165 12.746 11.8283C12.7703 11.9029 12.8132 11.974 12.8236 12.0499C12.8358 12.1388 12.89 12.1983 12.9366 12.2698C12.944 12.3102 12.9518 12.3461 12.9587 12.3822C12.9773 12.48 12.993 12.5763 13.0512 12.6646C13.1208 12.7702 13.1748 12.8857 13.2357 12.9968C13.2795 13.0766 13.3032 13.1675 13.3765 13.2311C13.4661 13.3089 13.5538 13.3889 13.6429 13.4675C13.6489 13.4728 13.6593 13.4735 13.6676 13.4764Z" fill="#EA5453"/>
<path d="M14.9959 7.7356C15.0957 7.76902 15.1965 7.80329 15.293 7.84667C15.3461 7.87052 15.3893 7.91469 15.4416 7.94066C15.501 7.97008 15.5702 7.9818 15.6269 8.01462C15.7523 8.08717 15.8893 8.12021 16.0295 8.14706C16.0489 8.15077 16.0707 8.15317 16.0863 8.16343C16.2038 8.24048 16.3417 8.26022 16.4743 8.28911C16.5829 8.31278 16.6761 8.36028 16.7682 8.41546C16.8252 8.44959 16.8854 8.47899 16.9403 8.516C16.9853 8.54642 17.027 8.58268 17.0661 8.62036C17.1213 8.67367 17.1756 8.72848 17.2253 8.78665C17.2887 8.86077 17.3464 8.93951 17.4081 9.01511C17.4574 9.07562 17.509 9.1344 17.563 9.1955C17.454 9.25715 17.3444 9.32297 17.2284 9.37543C17.1446 9.41332 17.0524 9.43345 16.9595 9.45687C16.9282 9.3816 16.9012 9.31095 16.8742 9.24032C16.8655 9.21748 16.8607 9.192 16.847 9.17239C16.7975 9.10124 16.7412 9.03435 16.6944 8.96162C16.6218 8.84877 16.5274 8.7606 16.4106 8.69215C16.3087 8.63242 16.2105 8.56658 16.1095 8.50539C16.0394 8.46294 15.969 8.42037 15.8954 8.38427C15.8396 8.3569 15.7744 8.34673 15.7206 8.31663C15.5334 8.21189 15.338 8.12668 15.1322 8.06423C15.0842 8.04969 15.0347 8.04016 14.9858 8.02832C14.9889 7.93229 14.992 7.83626 14.9959 7.7356Z" fill="#EA5B15"/>
<path d="M12.9584 13.8265C12.9856 13.8857 13.0127 13.9449 13.0433 14.0059C12.8795 14.1043 12.6982 14.1652 12.5076 14.197C12.4045 14.2141 12.2993 14.2192 12.1901 14.229C12.1851 14.1161 12.1881 14.0038 12.1842 13.8917C12.1812 13.8079 12.1797 13.723 12.1326 13.6464C12.12 13.6258 12.1199 13.5953 12.1211 13.5697C12.1266 13.4415 12.1376 13.3134 12.1405 13.1852C12.1425 13.0991 12.1297 13.0128 12.1317 12.9267C12.1357 12.7543 12.1453 12.582 12.1525 12.4096C12.1577 12.2822 12.1627 12.1548 12.174 12.0266C12.2347 12.1348 12.2898 12.2435 12.3431 12.3529C12.3554 12.378 12.3713 12.407 12.3686 12.4324C12.3519 12.5898 12.4327 12.7175 12.5098 12.8395C12.6188 13.012 12.6886 13.1957 12.7312 13.3913C12.7561 13.5055 12.7827 13.6185 12.8614 13.7117C12.8938 13.7499 12.9261 13.7882 12.9584 13.8265Z" fill="#EA504B"/>
<path d="M21.3202 14.7348C21.3001 14.8287 21.2816 14.9204 21.2524 15.0086C21.238 15.0522 21.2066 15.0916 21.1781 15.1293C21.023 15.3342 20.8698 15.5407 20.7085 15.7408C20.6548 15.8074 20.5799 15.8581 20.513 15.9142C20.4023 16.0068 20.2834 16.0912 20.1804 16.1913C20.0462 16.3219 19.8755 16.3634 19.7032 16.4071C19.6876 16.4111 19.6717 16.414 19.6515 16.4176C19.6395 16.2367 19.6318 16.0557 19.6289 15.8701C19.6427 15.8644 19.6527 15.8656 19.6604 15.862C19.7758 15.8081 19.8869 15.7445 20.0153 15.721C20.0337 15.7177 20.0513 15.7045 20.0668 15.6928C20.1649 15.6186 20.263 15.5443 20.3598 15.4685C20.4142 15.426 20.482 15.39 20.5165 15.3349C20.6394 15.1384 20.76 14.9392 20.8108 14.7097C20.9417 14.7162 21.0725 14.7229 21.2034 14.729C21.2414 14.7307 21.2795 14.7304 21.3202 14.7348Z" fill="#F6A320"/>
<path d="M4.46846 15.7999C4.39903 15.7778 4.33166 15.7568 4.26793 15.728C4.17668 15.6869 4.08381 15.6465 3.99983 15.5935C3.94277 15.5575 3.8943 15.5045 3.85161 15.4517C3.7659 15.3457 3.68876 15.2331 3.60439 15.126C3.5166 15.0146 3.45291 14.8914 3.40143 14.7612C3.39495 14.7448 3.38524 14.7296 3.37549 14.7104C3.44998 14.6934 3.52575 14.6783 3.6021 14.6668C3.80742 14.6358 3.99889 14.566 4.18735 14.4775C4.19494 14.487 4.19703 14.4941 4.20142 14.4993C4.26622 14.577 4.33062 14.6551 4.39661 14.7318C4.44169 14.7843 4.48439 14.8401 4.53669 14.8849C4.59844 14.9378 4.6694 14.9805 4.73636 15.0277C4.63903 15.2006 4.55751 15.38 4.51097 15.5726C4.49312 15.6464 4.4848 15.7224 4.46846 15.7999Z" fill="#EC6333"/>
<path d="M7.79004 9.47151C7.82155 9.35874 7.85085 9.24376 7.89713 9.13569C7.92994 9.05904 7.98343 8.99025 8.03171 8.9206C8.10115 8.82046 8.16269 8.71172 8.2483 8.62639C8.40208 8.4731 8.55394 8.31362 8.77026 8.23577C8.84194 8.20997 8.9047 8.16149 8.97473 8.13019C9.01802 8.11084 9.06734 8.10432 9.11835 8.09204C9.13955 8.2891 9.15373 8.48655 9.20882 8.6834C9.04052 8.76763 8.89458 8.87553 8.76816 9.00194C8.65471 9.11539 8.56004 9.24737 8.46307 9.37548C8.42781 9.42208 8.40984 9.48112 8.38398 9.53449C8.19009 9.49215 7.99445 9.46549 7.79004 9.47151Z" fill="#F49700"/>
<path d="M12.958 13.8225C12.9261 13.7883 12.8938 13.75 12.8614 13.7118C12.7827 13.6186 12.7561 13.5056 12.7312 13.3914C12.6886 13.1958 12.6188 13.0121 12.5098 12.8396C12.4327 12.7176 12.3519 12.5899 12.3686 12.4325C12.3713 12.4071 12.3554 12.3781 12.3431 12.353C12.2898 12.2436 12.2347 12.1349 12.1772 12.0236C12.1639 11.9005 12.1535 11.7798 12.1435 11.659C12.1423 11.645 12.143 11.6308 12.1438 11.6168C12.1463 11.5712 12.152 11.5255 12.1514 11.48C12.1507 11.4193 12.143 11.3587 12.1421 11.2981C12.1404 11.1893 12.1444 11.0804 12.1408 10.9717C12.1372 10.8646 12.1198 10.7575 12.1215 10.6507C12.124 10.4948 12.1281 10.3394 12.1089 10.1798C12.2109 10.1713 12.313 10.1673 12.4199 10.1684C12.4357 10.3363 12.4466 10.4992 12.4574 10.662C12.4586 10.7274 12.4567 10.7931 12.4617 10.8583C12.4684 10.9456 12.4825 11.0324 12.4897 11.1197C12.5021 11.2711 12.5139 11.4226 12.5212 11.5742C12.5244 11.6389 12.5118 11.7041 12.5127 11.769C12.5143 11.8743 12.5243 11.9778 12.5638 12.0787C12.5837 12.1296 12.5818 12.1889 12.5879 12.2446C12.6031 12.3859 12.617 12.5274 12.6324 12.6686C12.6343 12.6858 12.637 12.708 12.6484 12.7182C12.712 12.7751 12.7224 12.8539 12.7258 12.9269C12.734 13.1007 12.7994 13.2585 12.8495 13.4213C12.8898 13.5524 12.9218 13.6859 12.958 13.8225Z" fill="#EA544C"/>
<path d="M14.1222 12.032C14.1359 12.3013 14.104 12.5647 14.0115 12.8244C13.9178 12.7725 13.8135 12.7319 13.7462 12.6588C13.6652 12.5708 13.5945 12.4736 13.5102 12.3858C13.4176 12.2894 13.3279 12.1848 13.2805 12.0554C13.2746 12.0393 13.2621 12.0255 13.2523 12.0069C13.2021 11.9087 13.1684 11.81 13.1656 11.698C13.1565 11.622 13.1524 11.5499 13.1372 11.48C13.1131 11.369 13.0759 11.2624 13.0598 11.1476C13.0325 10.952 12.9814 10.7599 13.0016 10.5598C13.0042 10.534 12.9998 10.5072 12.9964 10.4812C12.9806 10.358 12.964 10.2349 12.9478 10.1117C12.9774 10.1077 13.0071 10.1037 13.0413 10.1046C13.0603 10.1979 13.0734 10.2864 13.0897 10.3744C13.1095 10.481 13.1293 10.5876 13.1543 10.6931C13.1656 10.7407 13.1974 10.7842 13.2058 10.8319C13.2254 10.9421 13.2574 11.0469 13.3068 11.148C13.3386 11.2129 13.3587 11.283 13.3885 11.3489C13.4197 11.4178 13.4567 11.4843 13.4903 11.5523C13.5313 11.6352 13.5738 11.7117 13.6657 11.7587C13.7476 11.8007 13.815 11.8689 13.8942 11.9172C13.9665 11.9613 14.0459 11.9942 14.1222 12.032Z" fill="#EC5C61"/>
<path d="M13.4238 10.0271C13.624 9.97555 13.8183 9.9081 14.0117 9.82568C14.0468 9.86145 14.0737 9.8973 14.1067 9.9267C14.1321 9.94937 14.166 9.98054 14.1945 9.97898C14.2776 9.97442 14.3292 10.0075 14.3831 10.0662C14.4433 10.1318 14.5218 10.1815 14.5924 10.2381C14.5367 10.3145 14.4785 10.3893 14.4256 10.4675C14.2764 10.6878 14.1752 10.9269 14.1339 11.1889C14.1279 11.2264 14.1199 11.2637 14.1081 11.3049C13.9528 11.2367 13.8204 11.146 13.7516 10.9884C13.7398 10.9613 13.7233 10.936 13.7084 10.9103C13.69 10.8785 13.6695 10.8477 13.6524 10.8153C13.6352 10.7828 13.6206 10.7489 13.6056 10.7153C13.5885 10.6769 13.5674 10.6393 13.5569 10.5991C13.5432 10.5468 13.55 10.4868 13.5273 10.4397C13.4638 10.308 13.4459 10.1675 13.4238 10.0271Z" fill="#ED676F"/>
<path d="M14.6583 12.8755C14.7163 12.8855 14.7738 12.8996 14.8309 12.915C14.8865 12.93 14.9439 12.9413 14.9962 12.9638C15.0314 12.979 15.0609 13.0091 15.0897 13.0358C15.118 13.0619 15.1417 13.0927 15.1682 13.1206C15.1879 13.1413 15.2179 13.1573 15.2277 13.1814C15.2659 13.275 15.3538 13.3015 15.4353 13.3379C15.4467 13.343 15.4583 13.3481 15.4703 13.352C15.5702 13.3843 15.6208 13.4431 15.6324 13.5535C15.6402 13.6271 15.6935 13.6988 15.7356 13.7657C15.786 13.8457 15.8356 13.9231 15.8347 14.0219C15.8344 14.0489 15.8478 14.0761 15.8551 14.1074C15.6388 14.1345 15.4217 14.153 15.206 14.2039C15.1611 14.1186 15.1216 14.0375 15.0797 13.9575C15.0676 13.9345 15.0522 13.9113 15.0328 13.8941C14.9528 13.823 14.8709 13.7538 14.7891 13.6846C14.7269 13.632 14.6646 13.5793 14.6006 13.5288C14.5703 13.505 14.5359 13.4862 14.5034 13.4651C14.546 13.33 14.5912 13.1957 14.6299 13.0596C14.6463 13.0017 14.6488 12.94 14.6583 12.8755Z" fill="#ED656E"/>
<path d="M13.4192 10.0271C13.446 10.1676 13.4638 10.3081 13.5273 10.4397C13.5501 10.4869 13.5433 10.5468 13.557 10.5992C13.5675 10.6393 13.5886 10.6769 13.6057 10.7154C13.6206 10.749 13.6353 10.7828 13.6525 10.8154C13.6696 10.8478 13.69 10.8785 13.7085 10.9103C13.7234 10.9361 13.7399 10.9613 13.7517 10.9884C13.8205 11.1461 13.9529 11.2368 14.1072 11.3093C14.1079 11.3637 14.1017 11.4176 14.1025 11.4714C14.1043 11.6064 14.1086 11.7413 14.1132 11.8762C14.1148 11.9249 14.1199 11.9735 14.1226 12.027C14.0456 11.9941 13.9661 11.9612 13.8938 11.9171C13.8147 11.8688 13.7473 11.8006 13.6653 11.7586C13.5735 11.7116 13.531 11.635 13.49 11.5521C13.4564 11.4842 13.4193 11.4177 13.3881 11.3487C13.3583 11.2829 13.3382 11.2127 13.3065 11.1479C13.257 11.0468 13.2251 10.9419 13.2055 10.8317C13.1971 10.784 13.1653 10.7406 13.154 10.693C13.129 10.5875 13.1091 10.4808 13.0894 10.3742C13.0731 10.2863 13.06 10.1977 13.0454 10.1052C13.1581 10.079 13.2709 10.0573 13.3836 10.0353C13.394 10.0332 13.4042 10.0298 13.4192 10.0271Z" fill="#EC6168"/>
<path d="M11.0414 11.7027C10.976 11.8278 10.9168 11.9555 10.8273 12.0683C10.7582 12.1553 10.7068 12.2556 10.6399 12.3445C10.5926 12.4073 10.5328 12.4612 10.4781 12.5186C10.4696 12.5275 10.4564 12.5322 10.4486 12.5414C10.3458 12.6629 10.2089 12.7371 10.0635 12.8061C10.0176 12.6905 9.9879 12.5709 9.98504 12.4461C9.98105 12.2724 9.9778 12.0986 9.97944 11.92C10.0605 11.8893 10.1368 11.8648 10.2118 11.8367C10.2308 11.8296 10.2456 11.8112 10.2619 11.7976C10.3354 11.7366 10.4018 11.6635 10.4842 11.6177C10.5683 11.5709 10.6409 11.521 10.6883 11.4383C10.6951 11.4264 10.7067 11.4163 10.718 11.4078C10.7964 11.349 10.8551 11.2749 10.9021 11.1907C10.9095 11.1775 10.9293 11.1708 10.9468 11.1626C10.9777 11.1775 11.0042 11.1933 11.0327 11.2039C11.0752 11.2198 11.0805 11.2456 11.0636 11.2829C11.0476 11.3182 11.0345 11.3547 11.0193 11.3902C11.0057 11.4219 11.0145 11.4459 11.0455 11.4597C11.0761 11.4734 11.0796 11.4931 11.0653 11.5192C11.041 11.5636 11.0163 11.6077 10.9901 11.6551C11.0059 11.6698 11.0236 11.6862 11.0414 11.7027Z" fill="#E94C28"/>
<path d="M13.2526 12.0107C13.262 12.0255 13.2745 12.0393 13.2804 12.0553C13.3278 12.1847 13.4175 12.2894 13.5101 12.3858C13.5944 12.4736 13.6651 12.5708 13.7461 12.6588C13.8134 12.7319 13.9177 12.7725 14.0094 12.828C13.9433 13.065 13.8278 13.2787 13.6712 13.4751C13.6595 13.4737 13.6491 13.473 13.6431 13.4676C13.554 13.3891 13.4663 13.3091 13.3766 13.2313C13.3034 13.1676 13.2797 13.0768 13.2359 12.9969C13.1749 12.8858 13.121 12.7704 13.0513 12.6648C12.9931 12.5765 12.9775 12.4802 12.9588 12.3823C12.952 12.3463 12.9442 12.3104 12.9399 12.2671C12.9359 12.2001 12.9287 12.1404 12.9209 12.0754C12.9454 12.0907 12.9677 12.1045 12.99 12.1183C12.9946 12.116 12.9993 12.1136 13.004 12.1112C12.996 12.055 12.9879 11.9989 12.9806 11.9478C13.0206 11.9528 13.0521 11.9567 13.0836 11.9606C13.0836 11.9293 13.0836 11.898 13.0836 11.8699C13.141 11.9177 13.1968 11.9642 13.2526 12.0107Z" fill="#EB5659"/>
<path d="M20.806 14.709C20.76 14.9392 20.6393 15.1385 20.5164 15.3349C20.4819 15.3901 20.4141 15.4261 20.3598 15.4686C20.2629 15.5443 20.1649 15.6186 20.0667 15.6928C20.0512 15.7045 20.0336 15.7177 20.0152 15.7211C19.8868 15.7446 19.7757 15.8082 19.6603 15.862C19.6526 15.8656 19.6426 15.8645 19.6295 15.8656C19.5957 15.7164 19.566 15.5671 19.5396 15.412C19.5901 15.3893 19.6414 15.3787 19.6841 15.354C19.7449 15.3187 19.8073 15.2802 19.8547 15.2302C19.9413 15.1389 20.0118 15.033 20.0993 14.9426C20.1923 14.8466 20.2503 14.7341 20.2989 14.6143C20.4663 14.6456 20.6337 14.6769 20.806 14.709Z" fill="#F5A02D"/>
<path d="M13.2521 12.0068C13.1967 11.9642 13.141 11.9177 13.0836 11.8698C13.0836 11.8979 13.0836 11.9292 13.0836 11.9606C13.0521 11.9566 13.0206 11.9527 12.9806 11.9477C12.9879 11.9988 12.9959 12.055 13.0039 12.1111C12.9993 12.1135 12.9946 12.1159 12.9899 12.1183C12.9677 12.1045 12.9454 12.0906 12.9209 12.0754C12.9287 12.1403 12.9358 12.2 12.9399 12.2626C12.8902 12.1984 12.8359 12.1389 12.8237 12.05C12.8133 11.9742 12.7704 11.903 12.7462 11.8284C12.7098 11.7166 12.6871 11.5994 12.6402 11.4921C12.5838 11.3633 12.602 11.2253 12.5669 11.0954C12.544 11.0108 12.509 10.9293 12.4871 10.8445C12.4724 10.7873 12.4711 10.7268 12.4607 10.6649C12.4466 10.4992 12.4357 10.3364 12.4248 10.1691C12.5232 10.1571 12.6217 10.1496 12.7251 10.147C12.7481 10.2784 12.7648 10.4051 12.7847 10.5313C12.7984 10.6175 12.8156 10.7031 12.8329 10.7887C12.8482 10.8641 12.8655 10.9391 12.8824 11.0142C12.8985 11.0854 12.8854 11.1629 12.9325 11.2275C12.9914 11.3082 13.0107 11.4029 13.0357 11.4966C13.0569 11.5764 13.0989 11.648 13.1654 11.7027C13.1682 11.8099 13.202 11.9086 13.2521 12.0068Z" fill="#EB5A57"/>
<path d="M10.9287 14.6124C10.9013 14.7204 10.8696 14.8263 10.8394 14.9327C10.8121 15.0285 10.7591 15.1056 10.6829 15.1728C10.6164 15.2316 10.564 15.3053 10.5 15.3671C10.4244 15.4401 10.3437 15.5077 10.2922 15.601C10.2851 15.6138 10.268 15.6211 10.2518 15.6314C10.2258 15.5473 10.2071 15.4616 10.1803 15.3784C10.1209 15.1944 10.0452 15.0176 9.92529 14.8598C10.0063 14.7827 10.0859 14.7114 10.1608 14.6358C10.1955 14.6008 10.2211 14.5574 10.2512 14.5181C10.2897 14.4678 10.3286 14.4178 10.3673 14.3677C10.4711 14.4184 10.5734 14.4723 10.6791 14.519C10.7588 14.5542 10.8428 14.5804 10.9287 14.6124Z" fill="#EA541C"/>
<path d="M14.9852 8.03271C15.0348 8.04004 15.0844 8.04957 15.1323 8.06412C15.3382 8.12657 15.5336 8.21178 15.7208 8.31652C15.7746 8.34661 15.8398 8.35679 15.8955 8.38416C15.9691 8.42025 16.0396 8.46282 16.1097 8.50527C16.2107 8.56647 16.3088 8.6323 16.4107 8.69203C16.5275 8.76048 16.6219 8.84865 16.6946 8.96151C16.7414 9.03423 16.7976 9.10113 16.8472 9.17228C16.8608 9.19189 16.8656 9.21737 16.8744 9.2402C16.9014 9.31083 16.9284 9.38149 16.9554 9.45612C16.8282 9.47475 16.7008 9.48939 16.5684 9.49899C16.5604 9.47676 16.5576 9.45953 16.5543 9.44239C16.52 9.26125 16.4013 9.12209 16.3035 8.97358C16.2705 8.92356 16.2187 8.883 16.1691 8.84622C16.0674 8.77065 15.9622 8.69931 15.8567 8.62862C15.7842 8.58005 15.7117 8.53038 15.6342 8.49055C15.5465 8.44552 15.4547 8.40718 15.362 8.37276C15.2344 8.32534 15.1042 8.28432 14.9751 8.24056C14.9782 8.17278 14.9813 8.105 14.9852 8.03271Z" fill="#EB5D19"/>
<path d="M14.9742 8.24512C15.1041 8.2844 15.2343 8.32542 15.3619 8.37284C15.4546 8.40726 15.5464 8.4456 15.6341 8.49062C15.7116 8.53045 15.7841 8.58013 15.8566 8.62869C15.9621 8.69938 16.0673 8.77073 16.169 8.8463C16.2186 8.88308 16.2704 8.92364 16.3034 8.97366C16.4012 9.12217 16.5199 9.26133 16.5542 9.44246C16.5575 9.45961 16.5603 9.47684 16.5634 9.49835C16.4177 9.49605 16.272 9.48944 16.1216 9.47793C16.0896 9.37512 16.0715 9.27701 15.9878 9.2002C15.8181 9.04462 15.6567 8.88053 15.4915 8.72027C15.484 8.71302 15.4738 8.708 15.4641 8.70346C15.2929 8.62326 15.1215 8.54331 14.9502 8.4633C14.9579 8.39207 14.9656 8.32083 14.9742 8.24512Z" fill="#EB5E24"/>
<path d="M10.9437 11.161C10.9297 11.1707 10.9099 11.1774 10.9025 11.1907C10.8554 11.2749 10.7968 11.349 10.7184 11.4077C10.707 11.4162 10.6955 11.4264 10.6886 11.4383C10.6413 11.521 10.5686 11.5708 10.4845 11.6176C10.4022 11.6635 10.3358 11.7365 10.2623 11.7975C10.2459 11.8111 10.2312 11.8295 10.2121 11.8366C10.1372 11.8647 10.0608 11.8892 9.98058 11.915C9.97919 11.7966 9.98278 11.6782 9.98469 11.5597C9.98502 11.5396 9.97816 11.5194 9.97973 11.4947C10.1292 11.4761 10.2366 11.3936 10.3422 11.3072C10.3725 11.2823 10.4083 11.263 10.4351 11.2351C10.542 11.1237 10.6465 11.01 10.7515 10.8968C10.7683 10.8786 10.7887 10.8607 10.7975 10.8388C10.8592 10.6847 10.9226 10.5311 10.9765 10.3744C11.0072 10.2851 11.0209 10.1902 11.0422 10.0979C11.0971 10.1055 11.152 10.1131 11.2114 10.1258C11.2015 10.2211 11.1863 10.311 11.1728 10.4012C11.1465 10.577 11.1092 10.7499 11.0422 10.9158C11.0092 10.9975 10.9765 11.0793 10.9437 11.161Z" fill="#E9511F"/>
<path d="M13.8454 15.5981C13.6905 15.5366 13.5435 15.4688 13.4399 15.3342C13.3763 15.2515 13.3082 15.1703 13.2314 15.0995C13.1523 15.0267 13.0992 14.9437 13.0676 14.8441C13.0486 14.7841 13.0247 14.7255 12.9995 14.6632C13.164 14.6207 13.3286 14.5716 13.4892 14.4983C13.5959 14.6288 13.698 14.7559 13.7981 14.8844C13.8644 14.9695 13.941 15.0411 14.0456 15.0795C13.9649 15.2332 13.8974 15.3919 13.8552 15.56C13.8522 15.5718 13.851 15.5839 13.8454 15.5981Z" fill="#EA5741"/>
<path d="M10.9473 11.1627C10.9766 11.0794 11.0093 10.9976 11.0423 10.916C11.1092 10.7501 11.1466 10.5771 11.1729 10.4013C11.1863 10.3112 11.2016 10.2212 11.216 10.1267C11.2986 10.1301 11.3812 10.1377 11.4638 10.1458C11.5092 10.1503 11.5545 10.1556 11.604 10.1627C11.5935 10.2884 11.5997 10.4189 11.5593 10.5339C11.5022 10.6967 11.4853 10.8684 11.423 11.0286C11.3936 11.1038 11.3702 11.1819 11.3336 11.2537C11.2893 11.3408 11.2322 11.4216 11.1843 11.5071C11.1629 11.5453 11.15 11.5881 11.1341 11.6292C11.1191 11.6683 11.0942 11.6957 11.0458 11.7023C11.024 11.6863 11.0063 11.6699 10.9905 11.6552C11.0167 11.6078 11.0414 11.5636 11.0657 11.5193C11.08 11.4931 11.0765 11.4734 11.046 11.4598C11.0149 11.446 11.0061 11.422 11.0197 11.3903C11.0349 11.3547 11.048 11.3182 11.064 11.283C11.081 11.2456 11.0757 11.2198 11.0331 11.204C11.0046 11.1934 10.9781 11.1776 10.9473 11.1627Z" fill="#EA522A"/>
<path d="M5.10123 13.5835C5.2325 13.6529 5.32693 13.7585 5.41795 13.8682C5.43913 13.8938 5.46736 13.9145 5.4947 13.9343C5.58444 13.9993 5.60954 14.1026 5.65744 14.1923C5.66805 14.2122 5.67469 14.2341 5.68331 14.2591C5.6055 14.2986 5.52395 14.3282 5.4504 14.3708C5.34578 14.4315 5.24704 14.5018 5.14083 14.5662C5.10372 14.5266 5.07297 14.4875 5.03916 14.4511C4.92725 14.3307 4.81425 14.2113 4.70166 14.0915C4.83081 13.9684 4.94527 13.8337 5.03988 13.6834C5.06015 13.6512 5.07858 13.618 5.10123 13.5835Z" fill="#EB5E24"/>
<path d="M10.3657 14.3642C10.3286 14.4177 10.2897 14.4677 10.2512 14.518C10.2211 14.5573 10.1955 14.6007 10.1609 14.6356C10.0859 14.7112 10.0064 14.7826 9.92507 14.8561C9.78106 14.6683 9.60468 14.5193 9.40036 14.4007C9.38981 14.3946 9.37784 14.3908 9.36475 14.3826C9.43314 14.2959 9.50342 14.2127 9.57341 14.1293C9.5893 14.1104 9.60301 14.0896 9.61974 14.0714C9.68474 14.0009 9.75055 13.931 9.81944 13.8594C9.87291 13.9161 9.92421 13.9734 9.97281 14.0328C10.0787 14.1623 10.2104 14.2618 10.3523 14.35C10.3568 14.3528 10.3602 14.3572 10.3657 14.3642Z" fill="#E95514"/>
<path d="M4.69821 14.093C4.81411 14.2114 4.92712 14.3309 5.03903 14.4512C5.07283 14.4876 5.10359 14.5267 5.13731 14.5678C4.99698 14.6912 4.86995 14.8242 4.76812 14.9788C4.75861 14.9933 4.75112 15.009 4.73932 15.0259C4.66897 14.9805 4.59802 14.9378 4.53626 14.8849C4.48396 14.8401 4.44127 14.7843 4.39618 14.7318C4.3302 14.6551 4.2658 14.577 4.201 14.4993C4.19661 14.494 4.19452 14.487 4.19092 14.477C4.37321 14.3654 4.54575 14.2447 4.69821 14.093Z" fill="#EB5F2D"/>
<path d="M8.38818 9.53538C8.40984 9.48118 8.42781 9.42214 8.46307 9.37554C8.56004 9.24743 8.65471 9.11545 8.76816 9.002C8.89458 8.87559 9.04052 8.76769 9.20932 8.68774C9.26239 8.81131 9.31191 8.93636 9.3582 9.06571C9.29548 9.10909 9.23277 9.14433 9.17747 9.1884C9.12941 9.2267 9.08899 9.27433 9.04653 9.31904C8.9883 9.38033 8.92869 9.44067 8.87465 9.50537C8.83186 9.5566 8.79656 9.61378 8.75794 9.66832C8.63609 9.62428 8.51424 9.58025 8.38818 9.53538Z" fill="#F28D00"/>
<path d="M18.2099 14.1922C18.2078 14.1836 18.2064 14.1775 18.2086 14.1732C18.2673 14.0574 18.3076 13.9325 18.4066 13.8378C18.4744 13.773 18.5294 13.6956 18.5949 13.6283C18.6288 13.5933 18.6704 13.5634 18.7133 13.5392C18.7848 13.4988 18.8602 13.4648 18.9361 13.425C18.9554 13.4593 18.9714 13.4973 18.99 13.5339C19.0341 13.6203 19.0794 13.706 19.1233 13.7993C19.1084 13.8202 19.095 13.8343 19.0804 13.8471C18.995 13.9222 18.9027 13.9911 18.8255 14.0735C18.7496 14.1545 18.6888 14.2489 18.6214 14.3374C18.485 14.2901 18.3486 14.2427 18.2099 14.1922Z" fill="#F08369"/>
<path d="M18.6235 14.3406C18.689 14.249 18.7497 14.1545 18.8257 14.0736C18.9029 13.9912 18.9952 13.9223 19.0806 13.8472C19.0952 13.8344 19.1086 13.8203 19.1241 13.803C19.2303 13.92 19.3342 14.0414 19.4399 14.1612C19.4606 14.1846 19.4881 14.2023 19.5125 14.2291C19.442 14.3087 19.3712 14.3814 19.3011 14.4548C19.234 14.5251 19.1675 14.5961 19.1007 14.6667C18.9595 14.5349 18.8013 14.4271 18.6235 14.3406Z" fill="#F18B5E"/>
<path d="M20.2946 14.6136C20.2503 14.7341 20.1923 14.8467 20.0993 14.9427C20.0118 15.0331 19.9413 15.139 19.8547 15.2303C19.8073 15.2803 19.7449 15.3188 19.6841 15.354C19.6414 15.3788 19.5901 15.3894 19.539 15.4079C19.4922 15.3025 19.4491 15.1955 19.4072 15.0814C19.4589 15.0349 19.5153 15.0009 19.5584 14.955C19.6384 14.8698 19.7119 14.7787 19.7857 14.6881C19.839 14.6226 19.8883 14.554 19.9395 14.4868C20.0564 14.5288 20.1734 14.5708 20.2946 14.6136Z" fill="#F49C3A"/>
<path d="M8.76123 9.67094C8.79699 9.61379 8.83228 9.55661 8.87507 9.50539C8.92911 9.44068 8.98872 9.38035 9.04695 9.31905C9.08942 9.27434 9.12984 9.22672 9.1779 9.18841C9.2332 9.14434 9.29591 9.1091 9.35908 9.06958C9.44608 9.19394 9.5294 9.31874 9.6127 9.45027C9.55963 9.51647 9.50731 9.57659 9.45336 9.63527C9.36244 9.73416 9.27048 9.83214 9.17896 9.9305C9.05139 9.8284 8.91286 9.74312 8.76123 9.67094Z" fill="#F08000"/>
<path d="M9.18018 9.93371C9.27002 9.83214 9.36198 9.73416 9.4529 9.63527C9.50685 9.57658 9.55917 9.51647 9.61371 9.45361C9.69135 9.51973 9.765 9.5921 9.84448 9.65777C9.90317 9.70627 9.96946 9.74604 10.0354 9.79497C9.97539 9.87846 9.91971 9.96401 9.84748 10.0331C9.75076 10.1257 9.64123 10.2055 9.53719 10.2908C9.47508 10.2208 9.4158 10.1482 9.34994 10.0818C9.29812 10.0295 9.23818 9.98493 9.18018 9.93371Z" fill="#ED6E04"/>
<path d="M11.0394 10.0942C11.0205 10.1902 11.0068 10.2851 10.9761 10.3743C10.9223 10.5311 10.8588 10.6847 10.7971 10.8388C10.7884 10.8606 10.768 10.8786 10.7511 10.8968C10.6462 11.01 10.5416 11.1236 10.4347 11.2351C10.4079 11.263 10.3721 11.2823 10.3418 11.3071C10.2362 11.3935 10.1289 11.4761 9.98011 11.4902C9.96079 11.3869 9.94583 11.2836 9.93555 11.1759C10.0699 11.1137 10.1995 11.0559 10.329 10.9978C10.3354 10.995 10.3404 10.9892 10.3457 10.9844C10.4331 10.9027 10.5227 10.8231 10.6072 10.7385C10.6545 10.6911 10.7074 10.6414 10.7334 10.5825C10.8057 10.4187 10.8972 10.2607 10.9215 10.0796C10.96 10.0832 10.9985 10.0869 11.0394 10.0942Z" fill="#EA541C"/>
<path d="M19.9362 14.4849C19.8886 14.5538 19.8392 14.6224 19.7859 14.6879C19.7121 14.7785 19.6386 14.8696 19.5586 14.9548C19.5155 15.0007 19.4591 15.0347 19.407 15.0773C19.3195 14.9344 19.2277 14.7923 19.1021 14.6697C19.1673 14.5959 19.2338 14.525 19.3009 14.4547C19.371 14.3813 19.4418 14.3085 19.5138 14.2322C19.6545 14.3136 19.7936 14.3984 19.9362 14.4849Z" fill="#F3944D"/>
<path d="M14.5004 13.467C14.5362 13.4862 14.5706 13.505 14.6008 13.5289C14.6648 13.5794 14.7271 13.632 14.7894 13.6846C14.8712 13.7538 14.953 13.823 15.033 13.8941C15.0524 13.9113 15.0679 13.9345 15.08 13.9575C15.1218 14.0375 15.1614 14.1186 15.2019 14.2032C15.0846 14.2528 14.9674 14.2985 14.8458 14.3411C14.7605 14.2421 14.6796 14.1461 14.5982 14.0505C14.5764 14.0248 14.5536 13.9999 14.5308 13.9751C14.4922 13.9333 14.4553 13.8897 14.4138 13.8509C14.3858 13.8247 14.3511 13.8054 14.3193 13.783C14.3786 13.6783 14.4379 13.5737 14.5004 13.467Z" fill="#EC6168"/>
<path d="M15.7138 9.53461C15.6103 9.57114 15.5068 9.60765 15.4034 9.64431C15.4002 9.64545 15.3976 9.64821 15.3904 9.64712C15.2698 9.44516 15.096 9.30136 14.9087 9.17079C14.8622 9.13839 14.8134 9.10924 14.7656 9.07859C14.7985 8.9932 14.8314 8.90781 14.8691 8.81836C14.9786 8.86157 15.085 8.90573 15.1873 8.95756C15.2308 8.97962 15.2668 9.01665 15.3044 9.04886C15.3379 9.07755 15.3669 9.11142 15.4016 9.13856C15.4464 9.17364 15.5082 9.19532 15.5391 9.23872C15.6053 9.33193 15.6564 9.43536 15.7138 9.53461Z" fill="#EC663E"/>
<path d="M14.316 13.7847C14.3511 13.8054 14.3858 13.8247 14.4138 13.8509C14.4554 13.8897 14.4923 13.9333 14.5308 13.9752C14.5536 14 14.5764 14.0248 14.5983 14.0505C14.6796 14.1461 14.7605 14.2421 14.842 14.3416C14.6998 14.4142 14.5664 14.4967 14.4419 14.5981C14.2959 14.4387 14.1548 14.2811 14.0137 14.1234C14.1026 14.0249 14.1917 13.9265 14.2804 13.8277C14.2921 13.8147 14.3019 13.8001 14.316 13.7847Z" fill="#EB5E5B"/>
<path d="M10.5407 9.99463C10.6047 10.0089 10.6687 10.0232 10.7347 10.0455C10.7259 10.1014 10.7054 10.1495 10.706 10.1973C10.7073 10.3191 10.6574 10.4138 10.5673 10.4932C10.5447 10.5131 10.5275 10.5387 10.5056 10.5595C10.4234 10.6379 10.3403 10.7154 10.2572 10.7928C10.2524 10.7973 10.244 10.798 10.2375 10.8009C10.1535 10.8376 10.0696 10.8743 9.98573 10.9112C9.9498 10.927 9.91403 10.9431 9.87818 10.9591C9.85308 10.8945 9.82798 10.8298 9.80615 10.7608C9.88936 10.7094 9.9757 10.6701 10.0477 10.6135C10.1533 10.5304 10.2539 10.4397 10.3466 10.3432C10.4077 10.2795 10.4847 10.2228 10.5013 10.1257C10.5089 10.0811 10.5272 10.0383 10.5407 9.99463Z" fill="#EA580E"/>
<path d="M9.87744 10.9635C9.914 10.9434 9.94977 10.9272 9.9857 10.9114C10.0696 10.8745 10.1535 10.8378 10.2374 10.8011C10.244 10.7982 10.2524 10.7975 10.2572 10.793C10.3403 10.7156 10.4233 10.6381 10.5056 10.5598C10.5274 10.5389 10.5447 10.5133 10.5673 10.4934C10.6574 10.414 10.7073 10.3193 10.7059 10.1975C10.7054 10.1497 10.7259 10.1016 10.7369 10.0493C10.7961 10.0553 10.855 10.0655 10.9178 10.0778C10.8976 10.2609 10.806 10.4189 10.7337 10.5827C10.7077 10.6416 10.6548 10.6912 10.6075 10.7387C10.523 10.8232 10.4334 10.9029 10.346 10.9845C10.3407 10.9894 10.3357 10.9952 10.3294 10.998C10.1999 11.0561 10.0702 11.1138 9.93652 11.1717C9.91392 11.1037 9.89532 11.0357 9.87744 10.9635Z" fill="#E95514"/>
<path d="M9.53809 10.2946C9.64154 10.2055 9.75107 10.1257 9.8478 10.0332C9.92002 9.96405 9.9757 9.8785 10.0392 9.79663C10.1402 9.83928 10.2407 9.88557 10.343 9.93925C10.298 10.0143 10.2557 10.0856 10.2032 10.1488C10.1402 10.2247 10.0713 10.2966 9.99992 10.3652C9.91291 10.4487 9.8206 10.527 9.73058 10.6076C9.66661 10.5046 9.60264 10.4015 9.53809 10.2946Z" fill="#EB620B"/>
<path d="M14.0473 15.0762C13.9411 15.0411 13.8645 14.9696 13.7981 14.8845C13.698 14.7559 13.596 14.6288 13.4932 14.4977C13.5868 14.4347 13.6821 14.3749 13.7846 14.3164C13.8022 14.3273 13.8133 14.3363 13.8228 14.3468C13.9195 14.4546 14.0149 14.5636 14.1132 14.6701C14.1537 14.714 14.2002 14.7528 14.244 14.7939C14.179 14.8869 14.114 14.9799 14.0473 15.0762Z" fill="#EA544C"/>
<path d="M15.7183 9.53513C15.6566 9.43521 15.6055 9.33178 15.5392 9.23857C15.5084 9.19517 15.4466 9.17349 15.4018 9.13841C15.3671 9.11127 15.3381 9.0774 15.3046 9.04871C15.267 9.0165 15.231 8.97947 15.1875 8.95741C15.0852 8.90558 14.9788 8.86142 14.8701 8.81406C14.883 8.75627 14.8998 8.69859 14.9225 8.6377C15.0523 8.68733 15.1862 8.72542 15.2979 8.79659C15.4529 8.89539 15.6138 8.99255 15.7291 9.14133C15.7551 9.17488 15.7849 9.20586 15.815 9.23609C15.8864 9.30792 15.9255 9.39461 15.9426 9.49194C15.8693 9.50657 15.796 9.52119 15.7183 9.53513Z" fill="#EC6333"/>
<path d="M13.1655 11.6979C13.099 11.6479 13.057 11.5764 13.0358 11.4966C13.0108 11.4029 12.9915 11.3082 12.9326 11.2275C12.8855 11.1629 12.8987 11.0854 12.8826 11.0142C12.8656 10.9391 12.8483 10.8641 12.833 10.7886C12.8157 10.7031 12.7985 10.6175 12.7848 10.5313C12.7649 10.4051 12.7482 10.2784 12.73 10.1476C12.7995 10.1325 12.8691 10.1215 12.9433 10.1111C12.964 10.2348 12.9806 10.3579 12.9964 10.4811C12.9997 10.5071 13.0042 10.5339 13.0016 10.5597C12.9813 10.7598 13.0324 10.9519 13.0598 11.1475C13.0759 11.2623 13.113 11.3689 13.1371 11.4799C13.1523 11.5498 13.1565 11.6219 13.1655 11.6979Z" fill="#EB5E5B"/>
<path d="M14.7626 9.08032C14.8137 9.10913 14.8626 9.13829 14.9091 9.17068C15.0964 9.30125 15.2702 9.44505 15.3869 9.64757C15.2995 9.69775 15.2116 9.74428 15.1165 9.78958C14.9898 9.62034 14.8371 9.48676 14.6603 9.37872C14.6427 9.36801 14.6215 9.363 14.6021 9.35535C14.6274 9.31444 14.654 9.27417 14.6778 9.23245C14.7062 9.18301 14.7322 9.13231 14.7626 9.08032Z" fill="#EC644B"/>
<path d="M15.9474 9.49271C15.9253 9.39466 15.8863 9.30797 15.8148 9.23614C15.7847 9.20591 15.7549 9.17493 15.7289 9.14138C15.6137 8.9926 15.4528 8.89544 15.2977 8.79664C15.186 8.72547 15.0521 8.68738 14.9243 8.63403C14.9279 8.57832 14.9353 8.52312 14.9464 8.46558C15.1214 8.54324 15.2928 8.6232 15.464 8.70339C15.4737 8.70793 15.484 8.71295 15.4914 8.7202C15.6566 8.88046 15.818 9.04455 15.9877 9.20013C16.0714 9.27694 16.0895 9.37505 16.1167 9.47714C16.0619 9.48535 16.0071 9.48939 15.9474 9.49271Z" fill="#EB5F2D"/>
<path d="M9.73242 10.6107C9.82072 10.527 9.91304 10.4487 10.0001 10.3651C10.0715 10.2965 10.1403 10.2247 10.2033 10.1487C10.2558 10.0855 10.2981 10.0143 10.3451 9.94263C10.4076 9.95684 10.4699 9.97503 10.5365 9.994C10.5273 10.0384 10.509 10.0813 10.5014 10.1259C10.4848 10.223 10.4078 10.2796 10.3467 10.3433C10.254 10.4399 10.1534 10.5306 10.0478 10.6136C9.97579 10.6703 9.88945 10.7096 9.80577 10.7571C9.7794 10.7096 9.75677 10.6617 9.73242 10.6107Z" fill="#E95A0F"/>
<path d="M14.5981 9.35571C14.6216 9.36302 14.6428 9.36802 14.6603 9.37873C14.8372 9.48678 14.9898 9.62035 15.1126 9.78999C15.0346 9.85091 14.9532 9.9102 14.8669 9.96767C14.8543 9.9541 14.8485 9.94022 14.8384 9.93092C14.6983 9.80241 14.5576 9.67453 14.417 9.5465C14.4686 9.49336 14.5204 9.44039 14.5717 9.3869C14.5804 9.37777 14.5867 9.3664 14.5981 9.35571Z" fill="#EB5E5B"/>
<path d="M14.2475 14.7926C14.2004 14.753 14.1539 14.7142 14.1133 14.6703C14.0151 14.5638 13.9197 14.4548 13.8229 14.347C13.8135 14.3365 13.8023 14.3275 13.7886 14.3162C13.8592 14.2519 13.9332 14.1892 14.0104 14.125C14.1548 14.2811 14.2959 14.4388 14.4386 14.5997C14.3771 14.6657 14.314 14.7284 14.2475 14.7926Z" fill="#EB5A57"/>
<path d="M14.4132 9.5481C14.5571 9.67471 14.6979 9.80259 14.838 9.9311C14.8481 9.9404 14.8538 9.95428 14.863 9.96942C14.8164 10.0149 14.7683 10.0569 14.7131 10.0978C14.6673 10.0654 14.6313 10.0304 14.5896 10.0037C14.455 9.91725 14.3403 9.80964 14.2319 9.69469C14.2913 9.6463 14.3506 9.59791 14.4132 9.5481Z" fill="#EC6168"/>
<path d="M14.2285 9.69507C14.3407 9.80949 14.4554 9.9171 14.59 10.0035C14.6317 10.0302 14.6678 10.0653 14.7097 10.0981C14.6752 10.1447 14.6373 10.1899 14.5961 10.2366C14.5222 10.1815 14.4437 10.1319 14.3834 10.0663C14.3296 10.0076 14.2779 9.97448 14.1949 9.97903C14.1664 9.9806 14.1325 9.94943 14.1071 9.92676C14.0741 9.89736 14.0472 9.86151 14.0161 9.82515C14.0846 9.77978 14.1546 9.73768 14.2285 9.69507Z" fill="#ED656E"/>
</g>
<defs>
<clipPath id="clip0_1004_325132">
<rect width="22" height="12" fill="white" transform="translate(1 6)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.738 5.77611C19.901 5.56711 20.044 5.37611 20.195 5.19111C20.265 5.10411 20.259 5.03811 20.191 4.94711C19.536 4.08611 19.474 3.13011 19.851 2.16011C20.134 1.43011 20.76 1.08811 21.525 1.01511C22.002 0.970106 22.47 1.01911 22.904 1.25111C23.474 1.55611 23.806 2.02111 23.914 2.66311C24 3.17511 23.984 3.67511 23.839 4.17111C23.582 5.04911 22.951 5.50411 22.086 5.61911C21.368 5.71511 20.64 5.72711 19.916 5.77611C19.86 5.78011 19.803 5.77611 19.738 5.77611Z" fill="#027AFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.962 1.84399H13.636L10.211 9.65399H5.369V1.87799H1.5V22H5.37V13.523H12.194C12.7704 13.523 13.3349 13.3582 13.8208 13.0482C14.3068 12.7382 14.694 12.2957 14.937 11.773V22H18.807V13.523C18.8071 12.5454 18.4371 11.6039 17.7716 10.8879C17.106 10.1718 16.194 9.73423 15.219 9.66299V9.65299H13.094C13.606 9.47807 14.0765 9.19956 14.4762 8.83482C14.8759 8.47008 15.1961 8.02693 15.417 7.53299L17.962 1.84399Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,19 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22.1542 15.9784C21.6904 17.1911 21.0561 18.2875 20.2136 19.2436C18.0338 21.7149 15.2874 22.9625 11.9902 23.0001C11.982 22.9998 11.9742 22.9965 11.9682 22.9909C11.962 22.9854 11.9578 22.978 11.9563 22.9698C11.9548 22.9621 11.9557 22.9541 11.959 22.9469C11.9624 22.9391 11.9686 22.9329 11.9764 22.9295C13.7053 22.2154 15.1426 21.1209 16.216 19.5937C16.9327 18.5808 17.4395 17.4348 17.7065 16.2231C17.9055 15.3248 18.009 14.431 17.965 13.5263C17.921 12.5931 17.8257 12.0587 17.5214 11.175C17.1675 10.1484 16.6826 9.19501 16.0299 8.34343C15.2205 7.28559 14.3103 6.62925 13.3716 5.796C12.4595 4.98933 11.3641 3.39157 12.4008 2.35481C12.7528 2.00281 13.3148 1.81398 14.0857 1.78556C16.3572 1.70306 18.6791 3.28524 20.133 4.95083C20.8205 5.73916 21.398 6.599 21.8426 7.55142C22.2881 8.50568 22.5887 9.4966 22.7391 10.5269C22.861 11.3657 22.8463 11.8479 22.8234 12.6949C22.7882 13.8194 22.5619 14.9297 22.1542 15.9784Z" fill="url(#paint0_linear_1004_325486)"/>
<path d="M11.8715 1.00917C11.8776 1.01471 11.8817 1.02211 11.8832 1.03023C11.8847 1.03835 11.8835 1.04673 11.8797 1.05408C11.8763 1.06132 11.8704 1.06714 11.8632 1.07058C10.1334 1.78467 8.69611 2.87918 7.62269 4.40635C6.90592 5.41951 6.39914 6.56585 6.13218 7.77787C5.93326 8.67529 5.82968 9.56996 5.87276 10.4738C5.91768 11.407 6.01393 11.9414 6.31826 12.8251C6.67118 13.8517 7.1561 14.8051 7.80877 15.6557C8.61819 16.7136 9.52845 17.3717 10.4671 18.2041C11.3792 19.0108 12.4746 20.6076 11.4379 21.6443C11.085 21.9973 10.5239 22.1861 9.75303 22.2145C7.48152 22.2961 5.15959 20.7148 3.70575 19.0483C3.01825 18.26 2.44075 17.4011 1.99616 16.4477C1.55311 15.5052 1.25104 14.5026 1.09966 13.4722C0.977738 12.6344 0.992405 12.1522 1.01624 11.3052C1.04741 10.1823 1.27657 9.09054 1.68541 8.0217C2.14741 6.80894 2.78266 5.71169 3.62508 4.75652C5.80401 2.28517 8.55127 1.03667 11.8485 1C11.8568 1 11.866 1.00367 11.8715 1.00917Z" fill="url(#paint1_linear_1004_325486)"/>
<path d="M8.99413 11.911L11.2446 11.262L11.9046 8.98867C11.9083 8.97605 11.9161 8.96502 11.9268 8.95724C11.9374 8.94945 11.9503 8.94536 11.9635 8.94556C11.9766 8.94577 11.9894 8.95027 11.9998 8.95838C12.0101 8.9665 12.0176 8.97778 12.021 8.99051L12.5526 11.0622C13.264 11.4628 14.0652 11.7543 14.9562 11.9385C14.963 11.9405 14.9693 11.9441 14.9745 11.9489C14.9797 11.9538 14.9837 11.9598 14.9862 11.9665C14.9887 11.9731 14.9896 11.9803 14.9888 11.9874C14.9881 11.9945 14.9857 12.0013 14.9818 12.0073C14.9765 12.0152 14.9688 12.0213 14.9598 12.0247L12.7763 12.6746C12.7528 12.6816 12.7314 12.6943 12.714 12.7116C12.6965 12.7289 12.6836 12.7502 12.6764 12.7736L12.0164 15.014C12.015 15.0206 12.0115 15.0266 12.0063 15.0311C12.0012 15.0356 11.9948 15.0382 11.988 15.0387C11.9811 15.039 11.9743 15.037 11.9686 15.033C11.963 15.029 11.9588 15.0233 11.9568 15.0167L11.3032 12.8213C11.2955 12.7932 11.2806 12.7677 11.2601 12.7471C11.2395 12.7265 11.2139 12.7116 11.1859 12.7039L8.99504 12.0577C8.98322 12.0542 8.97242 12.0479 8.96354 12.0393C8.95466 12.0308 8.94796 12.0202 8.94401 12.0086C8.94005 11.9969 8.93896 11.9844 8.94083 11.9722C8.94269 11.96 8.94745 11.9485 8.95471 11.9385C8.96458 11.9254 8.97839 11.9157 8.99413 11.911Z" fill="url(#paint2_linear_1004_325486)"/>
<defs>
<linearGradient id="paint0_linear_1004_325486" x1="17.3976" y1="1.78281" x2="17.3976" y2="23.0001" gradientUnits="userSpaceOnUse">
<stop stop-color="#F85EAD"/>
<stop offset="1" stop-color="#FD75FD"/>
</linearGradient>
<linearGradient id="paint1_linear_1004_325486" x1="6.4411" y1="1" x2="6.4411" y2="22.2173" gradientUnits="userSpaceOnUse">
<stop offset="0.332" stop-color="#11F5EF"/>
<stop offset="1" stop-color="#C738FB"/>
</linearGradient>
<linearGradient id="paint2_linear_1004_325486" x1="11.9641" y1="8.94376" x2="11.9641" y2="15.0387" gradientUnits="userSpaceOnUse">
<stop offset="0.332" stop-color="#11F5EF"/>
<stop offset="1" stop-color="#C738FB"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -0,0 +1,16 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1004_325499)">
<path d="M22.9763 11.8991H21.6223C21.5911 11.6544 21.5211 11.4865 21.4122 11.3955C21.3032 11.2988 21.1813 11.2504 21.0464 11.2504C20.8182 11.2504 20.6444 11.3585 20.5251 11.5747C20.4109 11.791 20.3539 12.1068 20.3539 12.5222C20.3539 12.9319 20.4135 13.2448 20.5328 13.4611C20.6573 13.6773 20.8415 13.7854 21.0853 13.7854C21.2306 13.7854 21.3499 13.7399 21.4433 13.6488C21.5419 13.5521 21.6119 13.4127 21.6534 13.2306H22.9996C22.9114 13.8167 22.6883 14.2549 22.3304 14.5451C21.9776 14.8353 21.5522 14.9804 21.0542 14.9804C20.6288 14.9804 20.2605 14.8808 19.9492 14.6816C19.638 14.4768 19.3967 14.1923 19.2255 13.8281C19.0543 13.4639 18.9688 13.0286 18.9688 12.5222C18.9688 11.9987 19.0543 11.5548 19.2255 11.1906C19.4019 10.8208 19.6458 10.5391 19.957 10.3456C20.2683 10.1522 20.6314 10.0554 21.0464 10.0554C21.3784 10.0554 21.6819 10.1237 21.9569 10.2603C22.2318 10.3968 22.4575 10.6017 22.6339 10.8748C22.8154 11.148 22.9296 11.4894 22.9763 11.8991Z" fill="black"/>
<path d="M17.4746 15.0001L17.4798 10.4288H18.8468L18.8402 15.0001H17.4746ZM17.4767 10.0318L17.4768 9.01021L18.842 9.00928V10.0318H17.4767Z" fill="black"/>
<path d="M10.9575 14.9887L10.9507 10.2134H12.3424V14.9887H10.9575ZM12.3424 12.2581H12.0206C12.0474 11.7491 12.1278 11.3337 12.2619 11.012C12.396 10.6843 12.5703 10.4445 12.7848 10.2924C12.9993 10.1344 13.2433 10.0554 13.5168 10.0554C13.7635 10.0554 13.9888 10.1198 14.1926 10.2485C14.3963 10.3713 14.5572 10.5615 14.6752 10.8189C14.7932 11.0763 14.8522 11.4039 14.8522 11.8018V14.988H13.4539L13.4605 12.1089C13.4605 11.9158 13.4417 11.7608 13.4042 11.6438C13.3667 11.5209 13.3104 11.4303 13.2353 11.3718C13.1602 11.3133 13.069 11.284 12.9618 11.284C12.8706 11.284 12.7875 11.3074 12.7124 11.3542C12.6373 11.401 12.573 11.4683 12.5193 11.556C12.4657 11.638 12.4228 11.7403 12.3906 11.8632C12.3585 11.9802 12.3424 12.1118 12.3424 12.2581ZM14.8522 12.2581H14.3213C14.3481 11.7491 14.4339 11.3337 14.5787 11.012C14.7235 10.6843 14.9139 10.4445 15.1498 10.2924C15.3912 10.1344 15.662 10.0554 15.9623 10.0554C16.2251 10.0554 16.4611 10.1198 16.6702 10.2485C16.8847 10.3713 17.0537 10.5615 17.177 10.8189C17.3004 11.0763 17.362 11.4039 17.362 11.8018L17.3687 14.988H15.9704V12.1089C15.9704 11.9158 15.9516 11.7608 15.914 11.6438C15.8765 11.5209 15.8202 11.4303 15.7451 11.3718C15.6701 11.3133 15.5789 11.284 15.4716 11.284C15.3805 11.284 15.2973 11.3074 15.2222 11.3542C15.1472 11.401 15.0828 11.4683 15.0292 11.556C14.9755 11.638 14.9326 11.7403 14.9005 11.8632C14.8683 11.9802 14.8522 12.1118 14.8522 12.2581Z" fill="black"/>
<path d="M8.72448 14.9804C8.28661 14.9804 7.90867 14.8808 7.5907 14.6816C7.27791 14.4825 7.03294 14.2008 6.8557 13.8366C6.68366 13.4668 6.59766 13.0286 6.59766 12.5222C6.59766 11.9987 6.68627 11.5548 6.86351 11.1906C7.04075 10.8208 7.28834 10.5391 7.60633 10.3456C7.92432 10.1522 8.29702 10.0554 8.72448 10.0554C9.15715 10.0554 9.53246 10.1578 9.85045 10.3627C10.1684 10.5619 10.4134 10.8464 10.5855 11.2162C10.7575 11.5804 10.8435 12.0157 10.8435 12.5222C10.8435 13.0457 10.7549 13.4895 10.5776 13.8537C10.4056 14.2179 10.1606 14.4967 9.84263 14.6902C9.52464 14.8836 9.15192 14.9804 8.72448 14.9804ZM8.72448 13.7854C8.95906 13.7854 9.13889 13.6773 9.26401 13.4611C9.38911 13.2448 9.45168 12.9319 9.45168 12.5222C9.45168 12.1068 9.38911 11.791 9.26401 11.5747C9.13889 11.3585 8.95906 11.2504 8.72448 11.2504C8.48468 11.2504 8.30224 11.3585 8.17714 11.5747C8.05202 11.791 7.98948 12.1068 7.98948 12.5222C7.98948 12.9319 8.05202 13.2448 8.17714 13.4611C8.30224 13.6773 8.48468 13.7854 8.72448 13.7854Z" fill="black"/>
<path d="M5.11914 9H6.51004V14.9879H5.11914V9Z" fill="black"/>
<path d="M3.69472 9C3.82159 9.988 4.36226 10.8306 5.11918 11.3145L5.1192 14.9879C5.11015 14.9879 5.10103 14.9878 5.09188 14.9878C4.78546 14.0921 3.87203 12.3456 2.40969 11.8259L2.3374 11.8015V9H3.69472Z" fill="black"/>
<path d="M1 11.8015H2.39091V14.9881H1V11.8015Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_1004_325499">
<rect width="22" height="6" fill="white" transform="translate(1 9)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.20243 9.47412V8.12187C9.33198 8.11352 9.46154 8.10518 9.59109 8.10518C13.1862 7.98831 15.5425 11.2938 15.5425 11.2938C15.5425 11.2938 13 14.9332 10.2713 14.9332C9.90688 14.9332 9.55061 14.8748 9.21053 14.7579V10.6511C10.6113 10.8264 10.8947 11.4608 11.7287 12.9048L13.5992 11.2855C13.5992 11.2855 12.2308 9.44073 9.93117 9.44073C9.68826 9.43239 9.44534 9.44908 9.20243 9.47412ZM9.20243 5V7.02003L9.59109 6.99499C14.587 6.8197 17.8502 11.2187 17.8502 11.2187C17.8502 11.2187 14.1093 15.9099 10.2146 15.9099C9.87449 15.9099 9.54251 15.8765 9.21053 15.818V17.0701C9.48583 17.1035 9.76923 17.1285 10.0445 17.1285C13.6721 17.1285 16.2955 15.217 18.8381 12.9633C19.2591 13.3139 20.9838 14.1569 21.3401 14.5242C18.9271 16.611 13.2996 18.2888 10.1093 18.2888C9.80162 18.2888 9.51012 18.2721 9.21862 18.2387V20H23V5L9.20243 5ZM9.20243 14.7579V15.8264C5.8502 15.2087 4.91903 11.611 4.91903 11.611C4.91903 11.611 6.53036 9.77462 9.20243 9.47412V10.6427H9.19433C7.79352 10.4674 6.69231 11.8197 6.69231 11.8197C6.69231 11.8197 7.31579 14.0985 9.20243 14.7579ZM3.25101 11.4608C3.25101 11.4608 5.23482 8.43907 9.21053 8.12187V7.02003C4.80567 7.38731 1 11.227 1 11.227C1 11.227 3.15385 17.6544 9.20243 18.2387V17.0701C4.76518 16.5025 3.25101 11.4608 3.25101 11.4608Z" fill="#76B900"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

9
packages/ui/icons/o3.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

Some files were not shown because too many files have changed in this diff Show More