mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* UI customizations: new features Fixes #2905 * colors for graphs * introduce env variable * colors for topbar, stats, selected state and tabs * fix build * fix validator * refactor link.primary.hover color token * refactor selected colors * update styles for switch and fix some color tokens * change color for selectable controls * icon color tokens refactoring * UI customizations: new features Fixes #2905 * test for common components * tweaks * migrate from color-mode-hex cookie to color-theme cookie * clean up * update screenshots * more screenshot updates * update default color of chart line * update envs for mega eth
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import { Icon } from '@chakra-ui/react';
|
|
import React from 'react';
|
|
|
|
import type { TabItem } from './types';
|
|
|
|
import DotsIcon from 'icons/dots.svg';
|
|
|
|
import { IconButton } from '../../chakra/icon-button';
|
|
import type { IconButtonProps } from '../../chakra/icon-button';
|
|
import { PopoverBody, PopoverCloseTriggerWrapper, PopoverContent, PopoverRoot, PopoverTrigger } from '../../chakra/popover';
|
|
import { TabsCounter, TabsTrigger } from '../../chakra/tabs';
|
|
import { getTabValue } from './utils';
|
|
|
|
interface Props extends IconButtonProps {
|
|
tabs: Array<TabItem>;
|
|
tabsCut: number;
|
|
isActive: boolean;
|
|
}
|
|
|
|
const AdaptiveTabsMenu = ({ tabs, tabsCut, isActive, ...props }: Props, ref: React.Ref<HTMLButtonElement>) => {
|
|
|
|
return (
|
|
<PopoverRoot positioning={{ placement: 'bottom-end' }}>
|
|
<PopoverTrigger>
|
|
<IconButton
|
|
// we use "div" so the :last-of-type pseudo-class targets the last tab and not the menu trigger
|
|
as="div"
|
|
variant="plain"
|
|
color="tabs.solid.fg"
|
|
_hover={{
|
|
color: 'hover',
|
|
}}
|
|
_expanded={{
|
|
color: 'selected.control.text',
|
|
bg: 'selected.control.bg',
|
|
}}
|
|
ref={ ref }
|
|
expanded={ isActive }
|
|
px="18px"
|
|
aria-label="Open tabs menu"
|
|
{ ...props }
|
|
>
|
|
<Icon boxSize={ 5 }><DotsIcon/></Icon>
|
|
</IconButton>
|
|
</PopoverTrigger>
|
|
<PopoverContent>
|
|
<PopoverBody display="flex" flexDir="column" rowGap={ 2 } px={ 0 }>
|
|
{ tabs.slice(tabsCut).map((tab) => {
|
|
const value = getTabValue(tab);
|
|
|
|
return (
|
|
<PopoverCloseTriggerWrapper key={ value }>
|
|
<TabsTrigger
|
|
className="group"
|
|
value={ value }
|
|
w="100%"
|
|
py="5px"
|
|
borderRadius="none"
|
|
fontWeight="normal"
|
|
color="tabs.solid.fg"
|
|
_hover={{
|
|
bg: 'selected.control.bg',
|
|
}}
|
|
>
|
|
{ typeof tab.title === 'function' ? tab.title() : tab.title }
|
|
<TabsCounter count={ tab.count }/>
|
|
</TabsTrigger>
|
|
</PopoverCloseTriggerWrapper>
|
|
);
|
|
}) }
|
|
</PopoverBody>
|
|
</PopoverContent>
|
|
</PopoverRoot>
|
|
);
|
|
};
|
|
|
|
export default React.memo(React.forwardRef(AdaptiveTabsMenu));
|