feat: Toolbar Header
This commit is contained in:
parent
f8bbee22b7
commit
b3dff5ddee
@ -35,6 +35,7 @@
|
|||||||
"test:e2e:dist": "lerna run test:e2e:dist --stream",
|
"test:e2e:dist": "lerna run test:e2e:dist --stream",
|
||||||
"test:e2e:serve": "lerna run test:e2e:serve --stream",
|
"test:e2e:serve": "lerna run test:e2e:serve --stream",
|
||||||
"see-changed": "lerna changed",
|
"see-changed": "lerna changed",
|
||||||
|
"docs:preview": "lerna run docs:preview --stream",
|
||||||
"docs:publish": "chmod +x ./build-and-publish-docs.sh && ./build-and-publish-docs.sh",
|
"docs:publish": "chmod +x ./build-and-publish-docs.sh && ./build-and-publish-docs.sh",
|
||||||
"release": "yarn run lerna:version && yarn run lerna:publish",
|
"release": "yarn run lerna:version && yarn run lerna:publish",
|
||||||
"lerna:version": "npx lerna version prerelease --force-publish",
|
"lerna:version": "npx lerna version prerelease --force-publish",
|
||||||
|
|||||||
3
platform/ui/src/assets/icons/chevron-left.svg
Normal file
3
platform/ui/src/assets/icons/chevron-left.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
|
||||||
|
<path fill="currentColor" fill-rule="evenodd" d="M10 13L5 7.737 5.7 7 10 11.526 14.3 7 15 7.737z" transform="rotate(90 10 10)"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 224 B |
6
platform/ui/src/assets/icons/tool-zoom.svg
Normal file
6
platform/ui/src/assets/icons/tool-zoom.svg
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="136pt" version="1.1" viewBox="-1 0 136 136.21852" width="136pt">
|
||||||
|
|
||||||
|
<path fill="currentColor" d="M 93.148438 80.832031 C 109.5 57.742188 104.03125 25.769531 80.941406 9.421875 C 57.851562 -6.925781 25.878906 -1.460938 9.53125 21.632812 C -6.816406 44.722656 -1.351562 76.691406 21.742188 93.039062 C 38.222656 104.707031 60.011719 105.605469 77.394531 95.339844 L 115.164062 132.882812 C 119.242188 137.175781 126.027344 137.347656 130.320312 133.269531 C 134.613281 129.195312 134.785156 122.410156 130.710938 118.117188 C 130.582031 117.980469 130.457031 117.855469 130.320312 117.726562 Z M 51.308594 84.332031 C 33.0625 84.335938 18.269531 69.554688 18.257812 51.308594 C 18.253906 33.0625 33.035156 18.269531 51.285156 18.261719 C 69.507812 18.253906 84.292969 33.011719 84.328125 51.234375 C 84.359375 69.484375 69.585938 84.300781 51.332031 84.332031 C 51.324219 84.332031 51.320312 84.332031 51.308594 84.332031 Z M 51.308594 84.332031 " style=" stroke:none;fill-rule:nonzero;fill-opacity:1;" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
@ -6,6 +6,7 @@ import seriesInactive from './../../assets/icons/series-inactive.svg';
|
|||||||
import calendar from './../../assets/icons/calendar.svg';
|
import calendar from './../../assets/icons/calendar.svg';
|
||||||
import cancel from './../../assets/icons/cancel.svg';
|
import cancel from './../../assets/icons/cancel.svg';
|
||||||
import chevronDown from './../../assets/icons/chevron-down.svg';
|
import chevronDown from './../../assets/icons/chevron-down.svg';
|
||||||
|
import chevronLeft from './../../assets/icons/chevron-left.svg';
|
||||||
import chevronRight from './../../assets/icons/chevron-right.svg';
|
import chevronRight from './../../assets/icons/chevron-right.svg';
|
||||||
import infoLink from './../../assets/icons/info-link.svg';
|
import infoLink from './../../assets/icons/info-link.svg';
|
||||||
import launchArrow from './../../assets/icons/launch-arrow.svg';
|
import launchArrow from './../../assets/icons/launch-arrow.svg';
|
||||||
@ -18,6 +19,9 @@ import sorting from './../../assets/icons/sorting.svg';
|
|||||||
import sortingActiveDown from './../../assets/icons/sorting-active-down.svg';
|
import sortingActiveDown from './../../assets/icons/sorting-active-down.svg';
|
||||||
import sortingActiveUp from './../../assets/icons/sorting-active-up.svg';
|
import sortingActiveUp from './../../assets/icons/sorting-active-up.svg';
|
||||||
|
|
||||||
|
/** Tools */
|
||||||
|
import toolZoom from './../../assets/icons/tool-zoom.svg';
|
||||||
|
|
||||||
const ICONS = {
|
const ICONS = {
|
||||||
'arrow-down': arrowDown,
|
'arrow-down': arrowDown,
|
||||||
'series-active': seriesActive,
|
'series-active': seriesActive,
|
||||||
@ -25,6 +29,7 @@ const ICONS = {
|
|||||||
calendar: calendar,
|
calendar: calendar,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
'chevron-down': chevronDown,
|
'chevron-down': chevronDown,
|
||||||
|
'chevron-left': chevronLeft,
|
||||||
'chevron-right': chevronRight,
|
'chevron-right': chevronRight,
|
||||||
'info-link': infoLink,
|
'info-link': infoLink,
|
||||||
'launch-arrow': launchArrow,
|
'launch-arrow': launchArrow,
|
||||||
@ -36,6 +41,9 @@ const ICONS = {
|
|||||||
'sorting-active-down': sortingActiveDown,
|
'sorting-active-down': sortingActiveDown,
|
||||||
'sorting-active-up': sortingActiveUp,
|
'sorting-active-up': sortingActiveUp,
|
||||||
sorting: sorting,
|
sorting: sorting,
|
||||||
|
|
||||||
|
/** Tools */
|
||||||
|
'tool-zoom': toolZoom,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -87,6 +87,7 @@ const IconButton = ({
|
|||||||
disabled = defaults.disabled,
|
disabled = defaults.disabled,
|
||||||
type = defaults.type,
|
type = defaults.type,
|
||||||
fullWidth = defaults.fullWidth,
|
fullWidth = defaults.fullWidth,
|
||||||
|
onClick,
|
||||||
className,
|
className,
|
||||||
...rest
|
...rest
|
||||||
}) => {
|
}) => {
|
||||||
@ -94,8 +95,8 @@ const IconButton = ({
|
|||||||
|
|
||||||
const handleOnClick = (e) => {
|
const handleOnClick = (e) => {
|
||||||
buttonElement.current.blur();
|
buttonElement.current.blur();
|
||||||
if (rest.onClick) {
|
if (onClick) {
|
||||||
rest.onClick(e);
|
onClick(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -138,6 +139,7 @@ IconButton.propTypes = {
|
|||||||
disabled: PropTypes.bool,
|
disabled: PropTypes.bool,
|
||||||
type: PropTypes.string,
|
type: PropTypes.string,
|
||||||
className: PropTypes.node,
|
className: PropTypes.node,
|
||||||
|
onClick: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default IconButton;
|
export default IconButton;
|
||||||
|
|||||||
@ -39,7 +39,7 @@ export const Sidebar = React.forwardRef((props, ref) => {
|
|||||||
'Data Display',
|
'Data Display',
|
||||||
'Other',
|
'Other',
|
||||||
],
|
],
|
||||||
Examples: ['Views'],
|
Examples: ['Study List', 'Toolbar Header'],
|
||||||
System: ['Colors'],
|
System: ['Colors'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import tailwindConfig from '../../../tailwind.config';
|
import tailwindConfig from '../../../tailwind.config';
|
||||||
|
|
||||||
@ -8,7 +9,6 @@ const BackgroundColor = ({ color }) => {
|
|||||||
const { colors } = tailwindConfig.theme;
|
const { colors } = tailwindConfig.theme;
|
||||||
return colors[currentColor[0]][currentColor[1]];
|
return colors[currentColor[0]][currentColor[1]];
|
||||||
};
|
};
|
||||||
console.log(tailwindConfig);
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={classnames(
|
className={classnames(
|
||||||
@ -21,4 +21,8 @@ const BackgroundColor = ({ color }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BackgroundColor.propTypes = {
|
||||||
|
color: PropTypes.string,
|
||||||
|
};
|
||||||
|
|
||||||
export default BackgroundColor;
|
export default BackgroundColor;
|
||||||
@ -1,11 +1,10 @@
|
|||||||
---
|
---
|
||||||
name: Study List
|
name: Study List
|
||||||
menu: Views
|
route: examples/studyList
|
||||||
route: views/studyList
|
|
||||||
---
|
---
|
||||||
|
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { Playground, Props } from 'docz';
|
import { Playground } from 'docz';
|
||||||
import {
|
import {
|
||||||
StudyList,
|
StudyList,
|
||||||
utils,
|
utils,
|
||||||
@ -27,17 +26,10 @@ import { getMockedStudies } from '../../utils/';
|
|||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
# StudyList
|
# Study List
|
||||||
|
|
||||||
Description...
|
This example shows you how you can build a Study List page using the available
|
||||||
|
components.
|
||||||
## Import
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import { StudyList } from '@ohif/ui';
|
|
||||||
```
|
|
||||||
|
|
||||||
## StudyList
|
|
||||||
|
|
||||||
<Playground>
|
<Playground>
|
||||||
{() => {
|
{() => {
|
||||||
|
|||||||
174
platform/ui/src/views/ToolbarHeader/ToolbarHeader.mdx
Normal file
174
platform/ui/src/views/ToolbarHeader/ToolbarHeader.mdx
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
---
|
||||||
|
name: Toolbar Header
|
||||||
|
route: examples/toolbarHeader
|
||||||
|
---
|
||||||
|
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { Playground } from 'docz';
|
||||||
|
import classnames from 'classnames';
|
||||||
|
import { NavBar, Typography, Svg, Icon, IconButton } from '@ohif/ui';
|
||||||
|
|
||||||
|
# Toolbar Header
|
||||||
|
|
||||||
|
This example shows you how you can build a Study List page using the available
|
||||||
|
components.
|
||||||
|
|
||||||
|
## Basic usage
|
||||||
|
|
||||||
|
<Playground>
|
||||||
|
{() => {
|
||||||
|
const [activeTool, setActiveTool] = useState('Zoom');
|
||||||
|
const [showTooltip, setShowTooltip] = useState('Zoom');
|
||||||
|
const tools = [
|
||||||
|
{
|
||||||
|
id: 'Zoom',
|
||||||
|
label: 'Zoom',
|
||||||
|
icon: 'tool-zoom',
|
||||||
|
type: null,
|
||||||
|
commandName: 'setToolActive',
|
||||||
|
commandOptions: { toolName: 'Zoom' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Wwwc',
|
||||||
|
label: 'Levels',
|
||||||
|
icon: 'tool-zoom',
|
||||||
|
type: null,
|
||||||
|
commandName: 'setToolActive',
|
||||||
|
commandOptions: { toolName: 'Wwwc' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Pan',
|
||||||
|
label: 'Pan',
|
||||||
|
icon: 'tool-zoom',
|
||||||
|
type: null,
|
||||||
|
commandName: 'setToolActive',
|
||||||
|
commandOptions: { toolName: 'Pan' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Wwwc',
|
||||||
|
label: 'Levels',
|
||||||
|
icon: 'tool-zoom',
|
||||||
|
type: null,
|
||||||
|
commandName: 'setToolActive',
|
||||||
|
commandOptions: { toolName: 'Wwwc' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Wwwc',
|
||||||
|
label: 'Levels',
|
||||||
|
icon: 'tool-zoom',
|
||||||
|
type: null,
|
||||||
|
commandName: 'setToolActive',
|
||||||
|
commandOptions: { toolName: 'Wwwc' },
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const collapsedTools = [
|
||||||
|
{
|
||||||
|
id: 'Zoom',
|
||||||
|
label: 'Zoom',
|
||||||
|
icon: 'tool-zoom',
|
||||||
|
type: null,
|
||||||
|
commandName: 'setToolActive',
|
||||||
|
commandOptions: { toolName: 'Zoom' },
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const renderToolbar = () => {
|
||||||
|
return tools.map((tool, i) => {
|
||||||
|
const isActive = activeTool === tool.id;
|
||||||
|
const shouldShowTooltip = showTooltip === tool.id;
|
||||||
|
return (
|
||||||
|
<div className="relative flex justify-center">
|
||||||
|
<IconButton
|
||||||
|
variant={isActive ? 'contained' : 'text'}
|
||||||
|
className={classnames('mx-1', {
|
||||||
|
'text-black': isActive,
|
||||||
|
'text-common-bright hover:bg-primary-dark hover:text-primary-light': !isActive,
|
||||||
|
})}
|
||||||
|
onClick={(e) => {
|
||||||
|
setActiveTool(tool.id);
|
||||||
|
}}
|
||||||
|
onMouseOver={() => setShowTooltip(tool.id)}
|
||||||
|
onMouseOut={() => setShowTooltip(null)}
|
||||||
|
key={tool.id}
|
||||||
|
>
|
||||||
|
<Icon name="tool-zoom" />
|
||||||
|
</IconButton>
|
||||||
|
<div
|
||||||
|
class={classnames(
|
||||||
|
'absolute bg-primary-dark border border-secondary-main text-white text-base rounded py-1 px-4 inset-x-auto top-full mt-2 transition duration-300',
|
||||||
|
{
|
||||||
|
'visible opacity-1': shouldShowTooltip,
|
||||||
|
'invisible opacity-0': !shouldShowTooltip,
|
||||||
|
}
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{tool.label}
|
||||||
|
<svg
|
||||||
|
class="absolute text-primary-dark h-2 w-full left-0 top-full transform scale-150"
|
||||||
|
style={{ top: -8 }}
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M24 22h-24l12-20z"
|
||||||
|
style={{ stroke: '#373D9A', strokeWidth: 1 }}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div className="pb-10">
|
||||||
|
<NavBar className="justify-between border-b-4 border-black">
|
||||||
|
<div className="flex flex-1 justify-between">
|
||||||
|
<div className="flex items-center">
|
||||||
|
<div className="mx-3 inline-flex items-center">
|
||||||
|
<Icon
|
||||||
|
name="chevron-left"
|
||||||
|
className="text-primary-main w-10 h-10 cursor-pointer transition duration-300 transform hover:scale-125"
|
||||||
|
onClick={() => alert('Navigate to previous page')}
|
||||||
|
/>
|
||||||
|
<a href="#" className="ml-4">
|
||||||
|
<Svg name="logo-ohif" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center">
|
||||||
|
<div className="flex items-center">
|
||||||
|
{renderToolbar()}
|
||||||
|
<span
|
||||||
|
className="w-1 border-l py-4 mx-2"
|
||||||
|
style={{ borderColor: '#354A6D' }}
|
||||||
|
/>
|
||||||
|
<button>BUTTON</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center">
|
||||||
|
<span className="mr-3 text-common-light text-lg">
|
||||||
|
FOR INVESTIGATIONAL USE ONLY
|
||||||
|
</span>
|
||||||
|
<IconButton
|
||||||
|
variant="text"
|
||||||
|
color="inherit"
|
||||||
|
className="text-primary-active"
|
||||||
|
onClick={() => {}}
|
||||||
|
>
|
||||||
|
<React.Fragment>
|
||||||
|
<Icon name="settings" /> <Icon name="chevron-down" />
|
||||||
|
</React.Fragment>
|
||||||
|
</IconButton>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</NavBar>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
</Playground>
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
<Props of={NavBar} />
|
||||||
@ -313,6 +313,7 @@ module.exports = {
|
|||||||
inset: {
|
inset: {
|
||||||
'0': '0',
|
'0': '0',
|
||||||
auto: 'auto',
|
auto: 'auto',
|
||||||
|
full: '100%',
|
||||||
},
|
},
|
||||||
letterSpacing: {
|
letterSpacing: {
|
||||||
tighter: '-0.05em',
|
tighter: '-0.05em',
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user