From bcd66a693f901e9d7eee35735a2276113599a493 Mon Sep 17 00:00:00 2001 From: chessjoe Date: Tue, 14 Jan 2025 16:28:38 +0800 Subject: [PATCH] feat(system-prompt-dropdown): enhance dropdown functionality and styling - Refactored SystemPromptDropdown to utilize MenuItem and Transition components for improved dropdown behavior and animations. - Updated dropdown item layout for better readability and user interaction, including an index display for system presets. - Enhanced styling for the dropdown button and items to improve visual consistency and accessibility. - Integrated mouse event handling to maintain dropdown visibility, ensuring a smoother user experience. --- src/components/system-prompt-dropdown.tsx | 129 ++++++++++++---------- 1 file changed, 72 insertions(+), 57 deletions(-) diff --git a/src/components/system-prompt-dropdown.tsx b/src/components/system-prompt-dropdown.tsx index 61d071b..8b50112 100644 --- a/src/components/system-prompt-dropdown.tsx +++ b/src/components/system-prompt-dropdown.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState } from 'react'; -import { Menu, MenuButton, MenuItems } from '@headlessui/react'; +import React, { Fragment, useEffect, useState } from 'react'; +import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'; import { ChevronDownIcon } from '@heroicons/react/20/solid'; import { StorageManager, SystemPresetInterface } from '../utils/StorageManager'; import { ToolPreview } from './tool-preview'; @@ -77,10 +77,9 @@ export default function SystemPromptDropdown({ className }: SystemPromptDropdown return (
- + setIsOpen(true)} onMouseLeave={e => { const target = e.currentTarget; @@ -93,58 +92,74 @@ export default function SystemPromptDropdown({ className }: SystemPromptDropdown {selectedPreset === 'system-init' || !selectedPreset ? 'System Prompt' : selectedPreset} - { - setIsOpen(true); - }} - onMouseLeave={() => { - setIsOpen(false); - }}> -
- {systemPresets.map(preset => { - const isSelected = selectedPreset === preset.name; - return ( -
{ - e.stopPropagation(); - e.preventDefault(); - handleSystemPresetClick(preset); - }} - onMouseEnter={e => { - showToolPreview(e.currentTarget, preset.hbs); - }} - onMouseLeave={() => { - hideToolPreview(); - }}> - - {preset.name} - {isSelected && ( - - - - )} - -
- ); - })} -
-
+ {isOpen && ( + + { + setIsOpen(true); + }} + onMouseLeave={() => { + setIsOpen(false); + }}> +
+ {systemPresets.map((preset, index) => { + const isSelected = selectedPreset === preset.name; + return ( + + {({ active }) => ( + + )} + + ); + })} +
+
+
+ )}
{showPreview && }