UNPKG

mirador

Version:

An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.

88 lines (81 loc) 2.56 kB
import PropTypes from 'prop-types'; import { styled } from '@mui/material/styles'; import classNames from 'classnames'; import AppBar from '@mui/material/AppBar'; import Toolbar from '@mui/material/Toolbar'; import { useTranslation } from 'react-i18next'; import WorkspaceAddButton from '../containers/WorkspaceAddButton'; import WorkspaceControlPanelButtons from '../containers/WorkspaceControlPanelButtons'; import Branding from '../containers/Branding'; import ns from '../config/css-ns'; const Root = styled(AppBar, { name: 'WorkspaceControlPanel', slot: 'root' })(({ ownerState, theme }) => ({ display: 'flex', height: 64, padding: theme.spacing(1), paddingBottom: 0, position: 'relative', [theme.breakpoints.up('sm')]: { height: 'auto', width: ownerState.variant === 'wide' ? 'auto' : 64, }, ...(ownerState.variant === 'wide' && { width: 'auto', }), })); const StyledToolbar = styled(Toolbar, { name: 'WorkspaceControlPanel', slot: 'toolbar' })(({ theme }) => ({ display: 'flex', flexGrow: 1, justifyContent: 'space-between', [theme.breakpoints.up('sm')]: { flexDirection: 'column', justifyContent: 'flex-start', minHeight: 0, }, })); const StyledWorkspaceButtons = styled('div', { name: 'WorkspaceControlPanel', slot: 'buttonArea' })(({ theme }) => ({ [theme.breakpoints.up('sm')]: { display: 'flex', flexDirection: 'column', gap: theme.spacing(2), marginBottom: theme.spacing(1), marginTop: theme.spacing(1), }, })); const StyledBranding = styled(Branding, { name: 'WorkspaceControlPanel', slot: 'branding' })(({ theme }) => ({ [theme.breakpoints.up('xs')]: { display: 'none', }, [theme.breakpoints.up('sm')]: { display: 'flex', }, })); /** * Provides the panel responsible for controlling the entire workspace */ export function WorkspaceControlPanel({ variant = 'default', ...rest }) { const { t } = useTranslation(); return ( <Root ownerState={{ t, variant, ...rest }} className={classNames(ns('workspace-control-panel'))} color="default" enableColorOnDark position="absolute" component="nav" aria-label={t('workspaceNavigation')} > <StyledToolbar disableGutters > <WorkspaceAddButton /> <StyledWorkspaceButtons> <WorkspaceControlPanelButtons /> </StyledWorkspaceButtons> </StyledToolbar> <StyledBranding variant={variant} /> </Root> ); } WorkspaceControlPanel.propTypes = { variant: PropTypes.oneOf(['default', 'wide']), };