| 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> |
| ); |
| } |
|
|