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