From 8f3d135caac393cf1aeec5e2a0831e6efc012f73 Mon Sep 17 00:00:00 2001 From: nikec <43032218+niikeec@users.noreply.github.com> Date: Wed, 29 Mar 2023 12:54:02 +0200 Subject: [PATCH] [Desktop] Fix menu colors and arrow highlighting (#639) * [Desktop] Context Menu cleanup * [Desktop] Update dropdown with new menu changes * [UI] Change dark menu line color * [Desktop] remove menu animate prop and make it a default * Remove duplicate classes --- .../Layout/Sidebar/LibrariesDropdown.tsx | 5 +- packages/ui/src/ContextMenu.tsx | 88 +++++++++-------- packages/ui/src/DropdownMenu.tsx | 99 ++++++------------- packages/ui/style/colors.scss | 6 +- 4 files changed, 79 insertions(+), 119 deletions(-) diff --git a/interface/app/$libraryId/Layout/Sidebar/LibrariesDropdown.tsx b/interface/app/$libraryId/Layout/Sidebar/LibrariesDropdown.tsx index 855f8e61b..153308630 100644 --- a/interface/app/$libraryId/Layout/Sidebar/LibrariesDropdown.tsx +++ b/interface/app/$libraryId/Layout/Sidebar/LibrariesDropdown.tsx @@ -27,9 +27,8 @@ export default () => { } // we override the sidebar dropdown item's hover styles // because the dark style clashes with the sidebar - className="dark:bg-sidebar-box dark:border-sidebar-line dark:divide-menu-selected/30 mt-1 shadow-none" + className="dark:bg-sidebar-box dark:border-sidebar-line dark:divide-menu-selected/30 data-[side=bottom]:slide-in-from-top-2 mt-1 shadow-none" alignToTrigger - animate > {libraries.data?.map((lib) => ( { {lib.config.name} ))} - + ) => { +const Root = ({ trigger, children, className, ...props }: ContextMenuProps) => { return ( {trigger} - + {children} @@ -30,16 +30,12 @@ const Root = ({ trigger, children, className, ...props }: PropsWithChildren ( ); -export const contextSubMenuTriggerClassNames = - "[&[data-state='open']_div]:bg-accent text-menu-ink py-[3px] focus:outline-none [&[data-state='open']_div]:text-white"; - const SubMenu = ({ label, icon, @@ -48,33 +44,37 @@ const SubMenu = ({ }: RadixCM.MenuSubContentProps & ContextMenuItemProps) => { return ( - - + + - + ); }; -export const contextMenuItemStyles = cva( +const contextMenuItemStyles = cva( [ - 'flex flex-1 flex-row items-center justify-start overflow-hidden', - 'space-x-2 px-2 py-[3px]', - 'cursor-default rounded', - 'focus:outline-none' + 'flex h-[26px] items-center space-x-2 overflow-hidden rounded px-2', + 'text-ink text-sm', + 'group-radix-highlighted:text-white dark:group-radix-highlighted:text-ink', + 'group-radix-disabled:text-ink/50 group-radix-disabled:pointer-events-none', + 'group-radix-state-open:bg-accent group-radix-state-open:text-white dark:group-radix-state-open:text-ink' ], { variants: { variant: { - default: 'hover:bg-accent focus:bg-accent hover:text-white', + default: 'group-radix-highlighted:bg-accent', danger: [ 'text-red-600 dark:text-red-400', - 'hover:text-white focus:text-white', - 'hover:bg-red-500 focus:bg-red-500' + 'group-radix-highlighted:text-white', + 'group-radix-highlighted:bg-red-500' ] } }, @@ -92,6 +92,8 @@ export interface ContextMenuItemProps extends VariantProps { return ( - -
- {children ? children : } -
+ + ); }; -const DivItem = ({ variant, ...props }: ContextMenuItemProps) => ( -
- +export const ContextMenuDivItem = ({ + variant, + children, + className, + ...props +}: PropsWithChildren) => ( +
+ {children || }
); -export const ItemInternals = ({ - icon, - label, - rightArrow, - keybind, - iconProps -}: ContextMenuItemProps) => { +const ItemInternals = ({ icon, label, rightArrow, keybind, iconProps }: ContextMenuItemProps) => { const ItemIcon = icon; + return ( <> {ItemIcon && } - {label &&

{label}

} + {label && {label}} {keybind && ( - + {keybind} )} {rightArrow && ( - <> -
- - + )} ); diff --git a/packages/ui/src/DropdownMenu.tsx b/packages/ui/src/DropdownMenu.tsx index 9340f51f8..f049b9f8b 100644 --- a/packages/ui/src/DropdownMenu.tsx +++ b/packages/ui/src/DropdownMenu.tsx @@ -3,21 +3,17 @@ import clsx from 'clsx'; import React, { PropsWithChildren, Suspense, useCallback, useRef, useState } from 'react'; import { Link } from 'react-router-dom'; import { + ContextMenuDivItem, ContextMenuItemProps, - ItemInternals, - contextMenuClasses, - contextMenuItemStyles, - contextMenuSeparatorClassNames, - contextSubMenuTriggerClassNames + contextMenuClassNames, + contextMenuItemClassNames, + contextMenuSeparatorClassNames } from './ContextMenu'; -interface DropdownMenuProps - extends RadixDM.MenuContentProps, - Pick { +interface DropdownMenuProps extends RadixDM.MenuContentProps { trigger: React.ReactNode; triggerClassName?: string; alignToTrigger?: boolean; - animate?: boolean; } const Root = ({ @@ -27,8 +23,6 @@ const Root = ({ asChild = true, triggerClassName, alignToTrigger, - onOpenChange, - animate, ...props }: PropsWithChildren) => { const [width, setWidth] = useState(); @@ -38,28 +32,19 @@ const Root = ({ }, []); return ( - + {trigger} -
-
- - {children} - -
+ + {children} +
); @@ -77,29 +62,19 @@ const SubMenu = ({ }: RadixDM.MenuSubContentProps & ContextMenuItemProps) => { return ( - -
- -
+ + - +
); }; -interface DropdownItemProps extends ContextMenuItemProps, RadixDM.MenuItemProps { +interface DropdownItemProps extends ContextMenuItemProps { to?: string; selected?: boolean; } @@ -116,39 +91,23 @@ const Item = ({ selected, to, ...props -}: DropdownItemProps) => { +}: DropdownItemProps & RadixDM.MenuItemProps) => { const ref = useRef(null); return ( - + {to ? ( - ref.current?.click()} - > - {children ? ( - {children} - ) : ( - - )} + ref.current?.click()}> + ) : ( -
- {children || } -
+ )}
); diff --git a/packages/ui/style/colors.scss b/packages/ui/style/colors.scss index 5c83a35de..24e548534 100644 --- a/packages/ui/style/colors.scss +++ b/packages/ui/style/colors.scss @@ -37,7 +37,7 @@ --color-app-frame: var(--dark-hue), 15%, 25%; // menu --color-menu: var(--dark-hue), 25%, 5%; - --color-menu-line: var(--dark-hue), 15%, 7%; + --color-menu-line: var(--dark-hue), 15%, 11%; --color-menu-ink: var(--dark-hue), 5%, 100%; --color-menu-faint: var(--dark-hue), 5%, 80%; --color-menu-hover: var(--dark-hue), 15%, 30%; @@ -81,8 +81,8 @@ --color-app-shade: var(--light-hue), 15%, 50%; --color-app-frame: 0, 0%, 100%; // menu - --color-menu: var(--light-hue), 16%, 0%; - --color-menu-line: var(--light-hue), 5%, 18%; + --color-menu: var(--light-hue), 5%, 100%; + --color-menu-line: var(--light-hue), 5%, 95%; --color-menu-ink: var(--light-hue), 5%, 100%; --color-menu-faint: var(--light-hue), 5%, 80%; --color-menu-hover: var(--light-hue), 15%, 20%;