| import { useStore } from '@nanostores/react'; | |
| import useViewport from '~/lib/hooks'; | |
| import { chatStore } from '~/lib/stores/chat'; | |
| import { workbenchStore } from '~/lib/stores/workbench'; | |
| import { classNames } from '~/utils/classNames'; | |
| interface HeaderActionButtonsProps {} | |
| export function HeaderActionButtons({}: HeaderActionButtonsProps) { | |
| const showWorkbench = useStore(workbenchStore.showWorkbench); | |
| const { showChat } = useStore(chatStore); | |
| const isSmallViewport = useViewport(1024); | |
| const canHideChat = showWorkbench || !showChat; | |
| return ( | |
| <div className="flex"> | |
| <div className="flex border border-bolt-elements-borderColor rounded-md overflow-hidden"> | |
| <Button | |
| active={showChat} | |
| disabled={!canHideChat || isSmallViewport} // expand button is disabled on mobile as it's not needed | |
| onClick={() => { | |
| if (canHideChat) { | |
| chatStore.setKey('showChat', !showChat); | |
| } | |
| }} | |
| > | |
| <div className="i-bolt:chat text-sm" /> | |
| </Button> | |
| <div className="w-[1px] bg-bolt-elements-borderColor" /> | |
| <Button | |
| active={showWorkbench} | |
| onClick={() => { | |
| if (showWorkbench && !showChat) { | |
| chatStore.setKey('showChat', true); | |
| } | |
| workbenchStore.showWorkbench.set(!showWorkbench); | |
| }} | |
| > | |
| <div className="i-ph:code-bold" /> | |
| </Button> | |
| </div> | |
| </div> | |
| ); | |
| } | |
| interface ButtonProps { | |
| active?: boolean; | |
| disabled?: boolean; | |
| children?: any; | |
| onClick?: VoidFunction; | |
| } | |
| function Button({ active = false, disabled = false, children, onClick }: ButtonProps) { | |
| return ( | |
| <button | |
| className={classNames('flex items-center p-1.5', { | |
| 'bg-bolt-elements-item-backgroundDefault hover:bg-bolt-elements-item-backgroundActive text-bolt-elements-textTertiary hover:text-bolt-elements-textPrimary': | |
| !active, | |
| 'bg-bolt-elements-item-backgroundAccent text-bolt-elements-item-contentAccent': active && !disabled, | |
| 'bg-bolt-elements-item-backgroundDefault text-alpha-gray-20 dark:text-alpha-white-20 cursor-not-allowed': | |
| disabled, | |
| })} | |
| onClick={onClick} | |
| > | |
| {children} | |
| </button> | |
| ); | |
| } | |