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.
78 lines (72 loc) • 2.22 kB
JSX
import PropTypes from 'prop-types';
import { styled, lighten, darken } from '@mui/material/styles';
import { useTranslation } from 'react-i18next';
import ErrorDialog from '../containers/ErrorDialog';
import WorkspaceControlPanel from '../containers/WorkspaceControlPanel';
import Workspace from '../containers/Workspace';
import WorkspaceAdd from '../containers/WorkspaceAdd';
import BackgroundPluginArea from '../containers/BackgroundPluginArea';
import ns from '../config/css-ns';
const Root = styled('div', { name: 'WorkspaceArea', slot: 'root' })(({ theme }) => ({
background: darken(theme.palette.shades.light, 0.1),
...theme.applyStyles('dark', {
background: lighten(theme.palette.shades.light, 0.1),
}),
bottom: 0,
display: 'flex',
flexDirection: 'column',
left: 0,
position: 'absolute',
right: 0,
top: 0,
[theme.breakpoints.up('sm')]: {
flexDirection: 'row',
},
}));
const ViewerArea = styled('main', { name: 'WorkspaceArea', slot: 'viewer' })(() => ({
flexGrow: 1,
position: 'relative',
}));
/**
* This is the top level Mirador component.
* @prop {Object} manifests
*/
export function WorkspaceArea({
areaRef = null,
controlPanelVariant = undefined,
isWorkspaceAddVisible = false,
isWorkspaceControlPanelVisible,
lang = undefined,
}) {
const { t } = useTranslation();
const ownerState = arguments[0]; // eslint-disable-line prefer-rest-params
return (
<Root ownerState={ownerState}>
{
isWorkspaceControlPanelVisible
&& <WorkspaceControlPanel variant={controlPanelVariant} />
}
<ViewerArea
className={ns('viewer')}
lang={lang}
aria-label={t('workspace')}
{...(areaRef ? { ref: areaRef } : {})}
>
{
isWorkspaceAddVisible
? <WorkspaceAdd />
: <Workspace />
}
<ErrorDialog />
<BackgroundPluginArea />
</ViewerArea>
</Root>
);
}
WorkspaceArea.propTypes = {
areaRef: PropTypes.shape({ current: PropTypes.instanceOf(Element) }),
controlPanelVariant: PropTypes.string,
isWorkspaceAddVisible: PropTypes.bool,
isWorkspaceControlPanelVisible: PropTypes.bool.isRequired,
lang: PropTypes.string,
};