import React, {ReactNode, forwardRef, ButtonHTMLAttributes} from 'react' import {IconElement, Icon, IconScale} from '../data/icon' import {themeMiddleware, Theme} from '../style/themeContext' import {FontSize, Spacing, TransitionDuration, ZIndex, BorderRadius} from '../style/helpers' import {styled} from '@karma.run/react' const ToolbarElement = styled('div', () => ({ _className: process.env.NODE_ENV !== 'production' ? 'Toolbar' : undefined, pointerEvents: 'none', display: 'flex', justifyContent: 'center', alignItems: 'center', position: 'sticky', top: 60 + Spacing.ExtraSmall, // TODO: Don't hardcode NavigationBar height into the toolbar, move all the position sticky stuff into own component zIndex: ZIndex.Default })) interface ToolbarContentStyleProps { readonly fadeOut: boolean } const ToolbarContent = styled( 'div', ({theme}) => ({ _className: process.env.NODE_ENV !== 'production' ? 'ToolbarContent' : undefined, pointerEvents: 'auto', padding: Spacing.Tiny, backgroundColor: theme.colors.white, borderRadius: BorderRadius.Small, transitionProperty: 'opacity', transitionDuration: TransitionDuration.Fast }), themeMiddleware ) const ToolbarInnerContent = styled( 'div', ({fadeOut}: ToolbarContentStyleProps & {theme: Theme}) => ({ _className: process.env.NODE_ENV !== 'production' ? 'ToolbarInnerContent' : undefined, display: 'flex', opacity: fadeOut ? 0.5 : 1, transitionProperty: 'opacity', transitionDuration: TransitionDuration.Fast }), themeMiddleware ) export interface ToolbarProps { readonly fadeOut?: boolean readonly children?: ReactNode } export function Toolbar({fadeOut = false, children}: ToolbarProps) { return ( {children} ) } export interface ToolbarButtonProps extends ButtonHTMLAttributes { readonly icon: IconElement readonly active?: boolean } interface ToolbarButtonElementStyleProps { readonly isActive?: boolean readonly theme: Theme } export const ToolbarButtonElement = styled( 'button', ({isActive, theme}: ToolbarButtonElementStyleProps) => ({ fill: isActive ? theme.colors.action : theme.colors.dark, fontSize: FontSize.Medium, cursor: 'pointer', border: 'none', borderRadius: BorderRadius.Tiny, backgroundColor: 'transparent', padding: Spacing.ExtraTiny, ':hover': { backgroundColor: theme.colors.grayLight }, ':focus': { outline: 'none', backgroundColor: theme.colors.grayLight } }), themeMiddleware ) export const ToolbarButton = forwardRef( function ToolbarButton({icon, active, ...props}, ref) { return ( ) } ) export const ToolbarDivider = styled( 'div', ({theme}) => ({ _className: process.env.NODE_ENV !== 'production' ? 'Divider' : undefined, width: '1px', alignSelf: 'stretch', marginLeft: Spacing.ExtraSmall, marginRight: Spacing.ExtraSmall, marginTop: Spacing.ExtraTiny, marginBottom: Spacing.ExtraTiny, backgroundColor: theme.colors.grayLight }), themeMiddleware )