Compare commits

...
44 changed files with 926 additions and 217 deletions

No files matched your search

+24
View File
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.12.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.12...@ohif/extension-cornerstone@2.12.13) (2022-06-30)
**Note:** Version bump only for package @ohif/extension-cornerstone
## [2.12.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.11...@ohif/extension-cornerstone@2.12.12) (2022-06-29)
**Note:** Version bump only for package @ohif/extension-cornerstone
## [2.12.11](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.10...@ohif/extension-cornerstone@2.12.11) (2022-06-14)
**Note:** Version bump only for package @ohif/extension-cornerstone
## [2.12.10](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.9...@ohif/extension-cornerstone@2.12.10) (2022-04-05) ## [2.12.10](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.9...@ohif/extension-cornerstone@2.12.10) (2022-04-05)
**Note:** Version bump only for package @ohif/extension-cornerstone **Note:** Version bump only for package @ohif/extension-cornerstone
+3 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-cornerstone", "name": "@ohif/extension-cornerstone",
"version": "2.12.10", "version": "2.12.13",
"description": "OHIF extension for Cornerstone", "description": "OHIF extension for Cornerstone",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@@ -44,7 +44,8 @@
"react-dom": "^16.8.6", "react-dom": "^16.8.6",
"react-redux": "^6.0.0", "react-redux": "^6.0.0",
"react-resize-detector": "^3.4.0", "react-resize-detector": "^3.4.0",
"redux": "^4.0.1" "redux": "^4.0.1",
"styled-components": "^5.3.5"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.5.5", "@babel/runtime": "^7.5.5",
@@ -237,11 +237,21 @@ class OHIFCornerstoneViewport extends Component {
} }
}; };
const warningsOverlay = props => { const overlay = props => {
const displaySet = this.props.viewportData.displaySet;
let filteredSRLabels;
if (displaySet.SRLabels && displaySet.SRLabels.length !== 0) {
filteredSRLabels = displaySet.SRLabels.filter(
SRLabel =>
SRLabel.ReferencedSOPInstanceUID === displaySet.SOPInstanceUID
);
}
return ( return (
<OHIFCornerstoneViewportOverlay <OHIFCornerstoneViewportOverlay
{...props} {...props}
inconsistencyWarnings={inconsistencyWarnings} inconsistencyWarnings={inconsistencyWarnings}
SRLabels={filteredSRLabels}
/> />
); );
}; };
@@ -254,7 +264,7 @@ class OHIFCornerstoneViewport extends Component {
imageIdIndex={currentImageIdIndex} imageIdIndex={currentImageIdIndex}
onNewImageDebounced={newImageHandler} onNewImageDebounced={newImageHandler}
onNewImageDebounceTime={300} onNewImageDebounceTime={300}
viewportOverlayComponent={warningsOverlay} viewportOverlayComponent={overlay}
stackPrefetch={this.props.stackPrefetch} stackPrefetch={this.props.stackPrefetch}
isStackPrefetchEnabled={this.props.isStackPrefetchEnabled} isStackPrefetchEnabled={this.props.isStackPrefetchEnabled}
// ~~ Connected (From REDUX) // ~~ Connected (From REDUX)
@@ -33,6 +33,10 @@
bottom: 140px; bottom: 140px;
left: 20px; left: 20px;
} }
.OHIFCornerstoneViewportOverlay .bottom-left3 {
bottom: 110px;
left: -20px;
}
.OHIFCornerstoneViewportOverlay .bottom-right { .OHIFCornerstoneViewportOverlay .bottom-right {
bottom: 20px; bottom: 20px;
right: 20px; right: 20px;
@@ -1,5 +1,6 @@
import { PureComponent } from 'react'; import { PureComponent } from 'react';
import React from 'react'; import React from 'react';
import styled from 'styled-components';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import cornerstone from 'cornerstone-core'; import cornerstone from 'cornerstone-core';
import './OHIFCornerstoneViewportOverlay.css'; import './OHIFCornerstoneViewportOverlay.css';
@@ -9,13 +10,27 @@ import {
formatDICOMDate, formatDICOMDate,
formatDICOMTime, formatDICOMTime,
formatPN, formatPN,
getCompression getCompression,
} from '../utils/formatStudy'; } from '../utils/formatStudy';
import classNames from 'classnames'; import classNames from 'classnames';
import { Icon } from '@ohif/ui/src/elements/Icon'; import { Icon } from '@ohif/ui/src/elements/Icon';
import { Tooltip } from '@ohif/ui/src/components/tooltip'; import { Tooltip } from '@ohif/ui/src/components/tooltip';
import { OverlayTrigger } from '@ohif/ui/src/components/overlayTrigger'; import { OverlayTrigger } from '@ohif/ui/src/components/overlayTrigger';
const Button = styled.button`
color: white;
padding: 2px 7px;
border-radius: 10px;
outline: 0;
text-transform: none;
margin: 2px 2px;
cursor: pointer;
&:disabled {
cursor: default;
opacity: 0.9;
}
`;
class OHIFCornerstoneViewportOverlay extends PureComponent { class OHIFCornerstoneViewportOverlay extends PureComponent {
static propTypes = { static propTypes = {
scale: PropTypes.number.isRequired, scale: PropTypes.number.isRequired,
@@ -30,11 +45,19 @@ class OHIFCornerstoneViewportOverlay extends PureComponent {
imageId: PropTypes.string.isRequired, imageId: PropTypes.string.isRequired,
imageIndex: PropTypes.number.isRequired, imageIndex: PropTypes.number.isRequired,
stackSize: PropTypes.number.isRequired, stackSize: PropTypes.number.isRequired,
inconsistencyWarnings: PropTypes.array.isRequired inconsistencyWarnings: PropTypes.array,
SRLabels: PropTypes.array,
}; };
render() { render() {
const { imageId, scale, windowWidth, windowCenter, inconsistencyWarnings } = this.props; const {
imageId,
scale,
windowWidth,
windowCenter,
inconsistencyWarnings,
SRLabels,
} = this.props;
if (!imageId) { if (!imageId) {
return null; return null;
@@ -72,8 +95,11 @@ class OHIFCornerstoneViewportOverlay extends PureComponent {
const { imageIndex, stackSize } = this.props; const { imageIndex, stackSize } = this.props;
const inconsistencyWarningsOn = inconsistencyWarnings && inconsistencyWarnings.length !== 0 ? true : false; const inconsistencyWarningsOn =
const getWarningContent = (warningList) => { inconsistencyWarnings && inconsistencyWarnings.length !== 0
? true
: false;
const getWarningContent = warningList => {
if (Array.isArray(warningList)) { if (Array.isArray(warningList)) {
const listedWarnings = warningList.map((warn, index) => { const listedWarnings = warningList.map((warn, index) => {
return <li key={index}>{warn}</li>; return <li key={index}>{warn}</li>;
@@ -86,33 +112,100 @@ class OHIFCornerstoneViewportOverlay extends PureComponent {
}; };
const getWarningInfo = (seriesNumber, inconsistencyWarnings) => { const getWarningInfo = (seriesNumber, inconsistencyWarnings) => {
return( return (
<React.Fragment> <React.Fragment>
{inconsistencyWarnings.length != 0 ? ( {inconsistencyWarnings.length != 0 ? (
<OverlayTrigger <OverlayTrigger
key={seriesNumber} key={seriesNumber}
placement="left" placement="left"
overlay={ overlay={
<Tooltip <Tooltip
placement="left" placement="left"
className="in tooltip-warning" className="in tooltip-warning"
id="tooltip-left" id="tooltip-left"
> >
<div className="warningTitle">Series Inconsistencies</div> <div className="warningTitle">Series Inconsistencies</div>
<div className="warningContent">{getWarningContent(inconsistencyWarnings)}</div> <div className="warningContent">
</Tooltip> {getWarningContent(inconsistencyWarnings)}
} </div>
> </Tooltip>
<div className={classNames('warning')}> }
<span className="warning-icon"> >
<Icon name="exclamation-triangle" /> <div className={classNames('warning')}>
</span> <span className="warning-icon">
</div> <Icon name="exclamation-triangle" />
</OverlayTrigger> </span>
) : ( </div>
<React.Fragment></React.Fragment> </OverlayTrigger>
) : (
<React.Fragment></React.Fragment>
)} )}
</React.Fragment> </React.Fragment>
);
};
const SRLabelsOn = SRLabels && SRLabels.length !== 0 ? true : false;
/**/
const getSRLabelsContent = SRLabels => {
if (Array.isArray(SRLabels)) {
const listedSRLabels = SRLabels.map((SRLabel, index) => {
const color = SRLabel.labels.color;
return (
SRLabel.labels.visible && (
<OverlayTrigger
key={index}
placement="top"
overlay={
<Tooltip
placement="top"
className="in tooltip-warning"
id="tooltip-top"
>
<div className="warningTitle">
{' '}
Coding scheme designators{' '}
</div>
<div className="warningContent">
{SRLabel.labels.labelCodingSchemeDesignator +
' : ' +
SRLabel.labels.valueCodingSchemeDesignator}
</div>
</Tooltip>
}
>
<div style={{ display: 'inline-block' }}>
<Button
style={{
backgroundColor: color,
}}
disabled={true}
key={index}
>
{SRLabel.labels.label + ' : ' + SRLabel.labels.value}
</Button>
</div>
</OverlayTrigger>
)
);
});
return <ol>{listedSRLabels}</ol>;
} else {
return <React.Fragment></React.Fragment>;
}
};
const getSRLabelsInfo = SRLabels => {
return (
<React.Fragment>
{SRLabels.length != 0 ? (
getSRLabelsContent(SRLabels)
) : (
<React.Fragment></React.Fragment>
)}
</React.Fragment>
); );
}; };
@@ -134,7 +227,14 @@ class OHIFCornerstoneViewportOverlay extends PureComponent {
<div className="compressionIndicator">{compression}</div> <div className="compressionIndicator">{compression}</div>
</div> </div>
<div className="bottom-left2 warning"> <div className="bottom-left2 warning">
<div>{inconsistencyWarningsOn ? getWarningInfo(seriesNumber, inconsistencyWarnings) : ''}</div> <div>
{inconsistencyWarningsOn
? getWarningInfo(seriesNumber, inconsistencyWarnings)
: ''}
</div>
</div>
<div className="bottom-left3 warning">
<div>{SRLabelsOn ? getSRLabelsInfo(SRLabels) : ''}</div>
</div> </div>
<div className="bottom-left overlay-element"> <div className="bottom-left overlay-element">
<div>{seriesNumber >= 0 ? `Ser: ${seriesNumber}` : ''}</div> <div>{seriesNumber >= 0 ? `Ser: ${seriesNumber}` : ''}</div>
@@ -97,6 +97,8 @@ export default class DICOMSRDisplayTool extends BaseTool {
const renderableDataForGraphicType = renderableData[GraphicType]; const renderableDataForGraphicType = renderableData[GraphicType];
switch (GraphicType) { switch (GraphicType) {
case SCOORD_TYPES.TEXT:
break;
case SCOORD_TYPES.POINT: case SCOORD_TYPES.POINT:
this.renderPoint(renderableDataForGraphicType, eventData, options); this.renderPoint(renderableDataForGraphicType, eventData, options);
break; break;
@@ -167,20 +169,22 @@ export default class DICOMSRDisplayTool extends BaseTool {
return data.handles.textBox.anchorPoints; return data.handles.textBox.anchorPoints;
} }
draw(context, context => { if (data.handles.textBox.anchorPoints.length !== 0) {
drawLinkedTextBox( draw(context, context => {
context, drawLinkedTextBox(
element, context,
data.handles.textBox, element,
text, data.handles.textBox,
data.handles, text,
textBoxAnchorPoints, data.handles,
color, textBoxAnchorPoints,
lineWidth, color,
0, lineWidth,
true 0,
); true
}); );
});
}
} }
// TOOD -> text boxes may overlap with other annotations at the moment. // TOOD -> text boxes may overlap with other annotations at the moment.
@@ -230,7 +234,6 @@ export default class DICOMSRDisplayTool extends BaseTool {
const { element, image } = eventData; const { element, image } = eventData;
const { rows, columns } = image; const { rows, columns } = image;
const context = getNewContext(eventData.canvasContext.canvas); const context = getNewContext(eventData.canvasContext.canvas);
const { color, lineWidth } = options; const { color, lineWidth } = options;
// Find a suitable length for the image size. // Find a suitable length for the image size.
@@ -332,6 +335,8 @@ function _getTextBoxAnchorPointsForRenderableData(renderableData, eventData) {
const renderableDataForGraphicType = renderableData[GraphicType]; const renderableDataForGraphicType = renderableData[GraphicType];
switch (GraphicType) { switch (GraphicType) {
case SCOORD_TYPES.TEXT:
break;
case SCOORD_TYPES.POINT: case SCOORD_TYPES.POINT:
renderableDataForGraphicType.forEach(points => { renderableDataForGraphicType.forEach(points => {
anchorPoints = [...anchorPoints, ...points]; anchorPoints = [...anchorPoints, ...points];
@@ -405,7 +410,7 @@ function _getBoundingBoxFromAnchorPoints(anchorPoints) {
minX = x; minX = x;
} }
if (y > maxX) { if (y > maxY) {
maxY = y; maxY = y;
} else if (y < minY) { } else if (y < minY) {
minY = y; minY = y;
@@ -1,4 +1,5 @@
export default { export default {
TEXT: 'TEXT',
POINT: 'POINT', POINT: 'POINT',
MULTIPOINT: 'MULTIPOINT', MULTIPOINT: 'MULTIPOINT',
POLYLINE: 'POLYLINE', POLYLINE: 'POLYLINE',
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.3.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.3.2...@ohif/extension-debugging@0.3.3) (2022-06-30)
**Note:** Version bump only for package @ohif/extension-debugging
## [0.3.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.3.1...@ohif/extension-debugging@0.3.2) (2022-03-10) ## [0.3.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.3.1...@ohif/extension-debugging@0.3.2) (2022-03-10)
**Note:** Version bump only for package @ohif/extension-debugging **Note:** Version bump only for package @ohif/extension-debugging
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-debugging", "name": "@ohif/extension-debugging",
"version": "0.3.2", "version": "0.3.3",
"description": "OHIF extension for debugging.", "description": "OHIF extension for debugging.",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
+33 -48
View File
@@ -89,10 +89,10 @@ const DubugReportModal = ({
Object.keys(viewportSpecificData).forEach(viewportIndex => { Object.keys(viewportSpecificData).forEach(viewportIndex => {
const displaySet = viewportSpecificData[viewportIndex]; const displaySet = viewportSpecificData[viewportIndex];
const [ const [referencedDisplaySetsRef] = _getReferencedSeriesInstanceUIDsString(
referencedDisplaySetsRef, displaySet,
referencedDisplaySetsCount, 'SEG'
] = _getReferencedSeriesInstanceUIDsString(displaySet, 'SEG'); );
const [row, column] = _viewportIndexToViewportPosition( const [row, column] = _viewportIndexToViewportPosition(
viewportIndex, viewportIndex,
@@ -106,10 +106,27 @@ const DubugReportModal = ({
Object.keys(viewportSpecificData).forEach(viewportIndex => { Object.keys(viewportSpecificData).forEach(viewportIndex => {
const displaySet = viewportSpecificData[viewportIndex]; const displaySet = viewportSpecificData[viewportIndex];
const [ const [referencedDisplaySetsRef] = _getReferencedSeriesInstanceUIDsString(
referencedDisplaySetsRef, displaySet,
referencedDisplaySetsCount, 'RTSTRUCT'
] = _getReferencedSeriesInstanceUIDsString(displaySet, 'RTSTRUCT'); );
const [row, column] = _viewportIndexToViewportPosition(
viewportIndex,
numColumns
);
body += `[${row},${column}]\t${referencedDisplaySetsRef}\n`;
});
body += '== ReferencedSRSeriesInstanceUIDs ==\n';
Object.keys(viewportSpecificData).forEach(viewportIndex => {
const displaySet = viewportSpecificData[viewportIndex];
const [referencedDisplaySetsRef] = _getReferencedSeriesInstanceUIDsString(
displaySet,
'SR'
);
const [row, column] = _viewportIndexToViewportPosition( const [row, column] = _viewportIndexToViewportPosition(
viewportIndex, viewportIndex,
@@ -261,11 +278,15 @@ const getLayout = viewports => {
<tr> <tr>
<th>ReferencedSEGSeriesInstanceUIDs</th> <th>ReferencedSEGSeriesInstanceUIDs</th>
</tr> </tr>
{getReferencedSEGSeriesInstanceUIDsPerRow(viewports)} {getReferencedSeriesInstanceUIDsPerRow(viewports, 'SEG')}
<tr> <tr>
<th>ReferencedRTSTRUCTSeriesInstanceUIDs</th> <th>ReferencedRTSTRUCTSeriesInstanceUIDs</th>
</tr> </tr>
{getReferencedRTSTRUCTSeriesInstanceUIDsPerRow(viewports)} {getReferencedSeriesInstanceUIDsPerRow(viewports, 'RTSTRUCT')}
<tr>
<th>ReferencedSRSeriesInstanceUIDs</th>
</tr>
{getReferencedSeriesInstanceUIDsPerRow(viewports, 'SR')}
</React.Fragment> </React.Fragment>
); );
}; };
@@ -351,7 +372,7 @@ const _getReferencedSeriesInstanceUIDsString = (displaySet, Modality) => {
return [referencedDisplaySetsRef, referencedDisplaySetsCount]; return [referencedDisplaySetsRef, referencedDisplaySetsCount];
}; };
const getReferencedSEGSeriesInstanceUIDsPerRow = viewports => { const getReferencedSeriesInstanceUIDsPerRow = (viewports, Modality) => {
const { viewportSpecificData, numColumns } = viewports; const { viewportSpecificData, numColumns } = viewports;
// NOTE viewportSpecificData is actually an object with numerical keys. // NOTE viewportSpecificData is actually an object with numerical keys.
@@ -360,43 +381,7 @@ const getReferencedSEGSeriesInstanceUIDsPerRow = viewports => {
const [ const [
referencedDisplaySetsRef, referencedDisplaySetsRef,
referencedDisplaySetsCount, referencedDisplaySetsCount,
] = _getReferencedSeriesInstanceUIDsString(displaySet, 'SEG'); ] = _getReferencedSeriesInstanceUIDsString(displaySet, Modality);
const [row, column] = _viewportIndexToViewportPosition(
viewportIndex,
numColumns
);
if (referencedDisplaySetsCount > 1) {
return (
<tr>
<td>{`[${row},${column}]`}</td>
<td className="debug-overflowText-border">
{referencedDisplaySetsRef}
</td>
</tr>
);
} else {
return (
<tr>
<td>{`[${row},${column}]`}</td>
<td className="debug-overflowText">{referencedDisplaySetsRef}</td>
</tr>
);
}
});
};
const getReferencedRTSTRUCTSeriesInstanceUIDsPerRow = viewports => {
const { viewportSpecificData, numColumns } = viewports;
// NOTE viewportSpecificData is actually an object with numerical keys.
return Object.keys(viewportSpecificData).map(viewportIndex => {
const displaySet = viewportSpecificData[viewportIndex];
const [
referencedDisplaySetsRef,
referencedDisplaySetsCount,
] = _getReferencedSeriesInstanceUIDsString(displaySet, 'RTSTRUCT');
const [row, column] = _viewportIndexToViewportPosition( const [row, column] = _viewportIndexToViewportPosition(
viewportIndex, viewportIndex,
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.3.22](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.21...@ohif/extension-dicom-html@1.3.22) (2022-06-30)
**Note:** Version bump only for package @ohif/extension-dicom-html
## [1.3.21](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.20...@ohif/extension-dicom-html@1.3.21) (2022-04-05) ## [1.3.21](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.20...@ohif/extension-dicom-html@1.3.21) (2022-04-05)
**Note:** Version bump only for package @ohif/extension-dicom-html **Note:** Version bump only for package @ohif/extension-dicom-html
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-dicom-html", "name": "@ohif/extension-dicom-html",
"version": "1.3.21", "version": "1.3.22",
"description": "OHIF extension for rendering structured reports to HTML", "description": "OHIF extension for rendering structured reports to HTML",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@@ -1,4 +1,4 @@
import { MODULE_TYPES, utils } from '@ohif/core'; import { MODULE_TYPES, utils, metadata } from '@ohif/core';
// TODO: Should probably use dcmjs for this // TODO: Should probably use dcmjs for this
const SOP_CLASS_UIDS = { const SOP_CLASS_UIDS = {
@@ -10,7 +10,7 @@ const SOP_CLASS_UIDS = {
MAMMOGRAPHY_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.50', MAMMOGRAPHY_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.50',
CHEST_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.65', CHEST_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.65',
X_RAY_RADIATION_DOSE_SR: '1.2.840.10008.5.1.4.1.1.88.67', X_RAY_RADIATION_DOSE_SR: '1.2.840.10008.5.1.4.1.1.88.67',
ACQUISITION_CONTEXT_SR_STORAGE: '1.2.840.10008.5.1.4.1.1.88.71' ACQUISITION_CONTEXT_SR_STORAGE: '1.2.840.10008.5.1.4.1.1.88.71',
}; };
const sopClassUIDs = Object.values(SOP_CLASS_UIDS); const sopClassUIDs = Object.values(SOP_CLASS_UIDS);
@@ -32,7 +32,7 @@ const OHIFDicomHtmlSopClassHandler = {
SeriesTime, SeriesTime,
} = metadata; } = metadata;
return { const srDisplaySet = {
plugin: 'html', plugin: 'html',
Modality: 'SR', Modality: 'SR',
displaySetInstanceUID: utils.guid(), displaySetInstanceUID: utils.guid(),
@@ -49,7 +49,15 @@ const OHIFDicomHtmlSopClassHandler = {
authorizationHeaders, authorizationHeaders,
sopClassUids: sopClassUIDs, sopClassUids: sopClassUIDs,
images: series._instances, images: series._instances,
isDerived: true,
referencedDisplaySets: [],
}; };
srDisplaySet.getSourceDisplaySet = function() {
return srDisplaySet.referencedDisplaySets;
};
return srDisplaySet;
}, },
}; };
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.2.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-lesion-tracker@0.2.1...@ohif/extension-lesion-tracker@0.2.2) (2022-06-29)
**Note:** Version bump only for package @ohif/extension-lesion-tracker
## [0.2.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-lesion-tracker@0.2.0...@ohif/extension-lesion-tracker@0.2.1) (2020-09-03) ## [0.2.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-lesion-tracker@0.2.0...@ohif/extension-lesion-tracker@0.2.1) (2020-09-03)
**Note:** Version bump only for package @ohif/extension-lesion-tracker **Note:** Version bump only for package @ohif/extension-lesion-tracker
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-lesion-tracker", "name": "@ohif/extension-lesion-tracker",
"version": "0.2.1", "version": "0.2.2",
"description": "OHIF extension for Lesion Tracker", "description": "OHIF extension for Lesion Tracker",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@@ -76,13 +76,13 @@ const additionalFindings = [
const currentCollections = [ const currentCollections = [
{ {
selectorAction: () => { }, selectorAction: () => {},
maxMeasurements: 3, maxMeasurements: 3,
groupName: 'Measurements', groupName: 'Measurements',
measurements: measurements, measurements: measurements,
}, },
{ {
selectorAction: () => { }, selectorAction: () => {},
groupName: 'Additional Findings', groupName: 'Additional Findings',
measurements: additionalFindings, measurements: additionalFindings,
}, },
@@ -90,13 +90,13 @@ const currentCollections = [
const comparisonColletions = [ const comparisonColletions = [
{ {
selectorAction: () => { }, selectorAction: () => {},
maxMeasurements: 3, maxMeasurements: 3,
groupName: 'Measurements', groupName: 'Measurements',
measurements: measurements, measurements: measurements,
}, },
{ {
selectorAction: () => { }, selectorAction: () => {},
groupName: 'Additional Findings', groupName: 'Additional Findings',
measurements: additionalFindings, measurements: additionalFindings,
}, },
@@ -128,7 +128,7 @@ const comparisonTimepoints = [
{ {
key: 'Comparison', key: 'Comparison',
date: '15-Jun-18', date: '15-Jun-18',
} },
]; ];
const MeasurementComparisonTable = () => { const MeasurementComparisonTable = () => {
@@ -138,8 +138,8 @@ const MeasurementComparisonTable = () => {
timepoints={comparisonTimepoints} timepoints={comparisonTimepoints}
overallWarnings={overallWarnings} overallWarnings={overallWarnings}
measurementCollection={comparisonCollections} measurementCollection={comparisonCollections}
onRelabelClick={() => { }} onRelabelClick={() => {}}
onEditDescriptionClick={() => { }} onEditDescriptionClick={() => {}}
/> />
<div className="generate-report"> <div className="generate-report">
<button className="btn btn-primary">Generate Report</button> <button className="btn btn-primary">Generate Report</button>
+32
View File
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.12.27](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.26...@ohif/extension-vtk@1.12.27) (2022-06-30)
**Note:** Version bump only for package @ohif/extension-vtk
## [1.12.26](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.25...@ohif/extension-vtk@1.12.26) (2022-06-29)
**Note:** Version bump only for package @ohif/extension-vtk
## [1.12.25](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.24...@ohif/extension-vtk@1.12.25) (2022-06-28)
**Note:** Version bump only for package @ohif/extension-vtk
## [1.12.24](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.23...@ohif/extension-vtk@1.12.24) (2022-06-14)
**Note:** Version bump only for package @ohif/extension-vtk
## [1.12.23](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.22...@ohif/extension-vtk@1.12.23) (2022-04-22) ## [1.12.23](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.22...@ohif/extension-vtk@1.12.23) (2022-04-22)
**Note:** Version bump only for package @ohif/extension-vtk **Note:** Version bump only for package @ohif/extension-vtk
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/extension-vtk", "name": "@ohif/extension-vtk",
"version": "1.12.23", "version": "1.12.27",
"description": "OHIF extension for VTK.js", "description": "OHIF extension for VTK.js",
"author": "OHIF", "author": "OHIF",
"license": "MIT", "license": "MIT",
@@ -53,8 +53,8 @@
"react-vtkjs-viewport": "^0.14.4" "react-vtkjs-viewport": "^0.14.4"
}, },
"devDependencies": { "devDependencies": {
"@ohif/core": "^2.16.18", "@ohif/core": "^2.16.22",
"@ohif/ui": "^1.10.8", "@ohif/ui": "^1.10.9",
"cornerstone-tools": "^6.0.6", "cornerstone-tools": "^6.0.6",
"cornerstone-wado-image-loader": "^4.1.0", "cornerstone-wado-image-loader": "^4.1.0",
"dicom-parser": "^1.8.11", "dicom-parser": "^1.8.11",
+1
View File
@@ -99,6 +99,7 @@
"shader-loader": "^1.3.1", "shader-loader": "^1.3.1",
"start-server-and-test": "^1.10.0", "start-server-and-test": "^1.10.0",
"style-loader": "^1.0.0", "style-loader": "^1.0.0",
"styled-components": "^5.3.5",
"stylelint": "^10.1.0", "stylelint": "^10.1.0",
"stylelint-config-recommended": "^2.2.0", "stylelint-config-recommended": "^2.2.0",
"stylus": "^0.54.5", "stylus": "^0.54.5",
+35
View File
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.16.22](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.21...@ohif/core@2.16.22) (2022-06-30)
**Note:** Version bump only for package @ohif/core
## [2.16.21](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.20...@ohif/core@2.16.21) (2022-06-29)
**Note:** Version bump only for package @ohif/core
## [2.16.20](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.19...@ohif/core@2.16.20) (2022-06-28)
### Bug Fixes
* Re IDC2797, fix double parsing of SR qualitative annotations ([#2830](https://github.com/OHIF/Viewers/issues/2830)) ([9f813e0](https://github.com/OHIF/Viewers/commit/9f813e0ea08f0aada8efab9ef6228ad90dd1758d))
## [2.16.19](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.18...@ohif/core@2.16.19) (2022-06-14)
**Note:** Version bump only for package @ohif/core
## [2.16.18](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.17...@ohif/core@2.16.18) (2022-04-22) ## [2.16.18](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.17...@ohif/core@2.16.18) (2022-04-22)
**Note:** Version bump only for package @ohif/core **Note:** Version bump only for package @ohif/core
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/core", "name": "@ohif/core",
"version": "2.16.18", "version": "2.16.22",
"description": "Generic business logic for web-based medical imaging applications", "description": "Generic business logic for web-based medical imaging applications",
"author": "OHIF Core Team", "author": "OHIF Core Team",
"license": "MIT", "license": "MIT",
@@ -1,4 +1,5 @@
export default { export default {
TEXT: 'TEXT',
POINT: 'POINT', POINT: 'POINT',
MULTIPOINT: 'MULTIPOINT', MULTIPOINT: 'MULTIPOINT',
POLYLINE: 'POLYLINE', POLYLINE: 'POLYLINE',
@@ -18,7 +18,7 @@ const parseSCOORD3D = ({ servicesManager, displaySets }) => {
const { ContentSequence } = firstInstance; const { ContentSequence } = firstInstance;
srDisplaySet.referencedImages = getReferencedImagesList(ContentSequence); srDisplaySet.referencedImages = getReferencedImagesList(ContentSequence);
srDisplaySet.measurements = getMeasurements(ContentSequence, srDisplaySet); srDisplaySet.measurements = getMeasurements(ContentSequence);
const mappings = MeasurementService.getSourceMappings( const mappings = MeasurementService.getSourceMappings(
'CornerstoneTools', 'CornerstoneTools',
'4' '4'
@@ -127,10 +127,11 @@ const checkIfCanAddMeasurementsToDisplaySet = (
const imageIds = images.map(i => i.getImageId()); const imageIds = images.map(i => i.getImageId());
const SOPInstanceUIDs = images.map(i => i.SOPInstanceUID); const SOPInstanceUIDs = images.map(i => i.SOPInstanceUID);
imageDisplaySet.SRLabels = [];
const colors = new Map();
measurements.forEach(measurement => { measurements.forEach(measurement => {
const { coords } = measurement; const { coords } = measurement;
coords.forEach((coord, index) => {
coords.forEach(coord => {
if (coord.ReferencedSOPSequence !== undefined) { if (coord.ReferencedSOPSequence !== undefined) {
const imageIndex = SOPInstanceUIDs.findIndex( const imageIndex = SOPInstanceUIDs.findIndex(
SOPInstanceUID => SOPInstanceUID =>
@@ -138,14 +139,50 @@ const checkIfCanAddMeasurementsToDisplaySet = (
coord.ReferencedSOPSequence.ReferencedSOPInstanceUID coord.ReferencedSOPSequence.ReferencedSOPInstanceUID
); );
if (imageIndex > -1) { if (imageIndex > -1) {
if (!srDisplaySet.referencedDisplaySets.includes(imageDisplaySet)) {
srDisplaySet.referencedDisplaySets.push(imageDisplaySet);
}
const imageId = imageIds[imageIndex]; const imageId = imageIds[imageIndex];
const imageMetadata = images[imageIndex].getData().metadata; const imageMetadata = images[imageIndex].getData().metadata;
addMeasurement(
measurement, if (coord.GraphicType === 'TEXT') {
imageId, const key =
imageMetadata, measurement.labels[index].label + measurement.labels[index].value;
imageDisplaySet.displaySetInstanceUID let color = colors.get(key);
); if (!color) {
// random dark color
color =
'hsla(' + Math.floor(Math.random() * 360) + ', 70%, 30%, 1)';
colors.set(key, color);
}
measurement.labels[index].color = color;
measurement.isSRText = true;
measurement.labels[index].visible = true;
imageDisplaySet.SRLabels.push({
ReferencedSOPInstanceUID:
coord.ReferencedSOPSequence.ReferencedSOPInstanceUID,
labels: measurement.labels[index],
});
if (index === 0) {
addMeasurement(
measurement,
imageId,
imageMetadata,
imageDisplaySet.displaySetInstanceUID
);
}
} else {
addMeasurement(
measurement,
imageId,
imageMetadata,
imageDisplaySet.displaySetInstanceUID
);
}
} }
} }
}); });
@@ -26,8 +26,10 @@ export default function addMeasurement(
const measurementData = { const measurementData = {
TrackingUniqueIdentifier: measurement.TrackingUniqueIdentifier, TrackingUniqueIdentifier: measurement.TrackingUniqueIdentifier,
TrackingIdentifier: measurement.TrackingIdentifier,
renderableData: {}, renderableData: {},
labels: measurement.labels, labels: measurement.labels,
isSRText: measurement.isSRText,
}; };
measurement.coords.forEach(coord => { measurement.coords.forEach(coord => {
@@ -1,22 +1,14 @@
const getCoordsFromSCOORDOrSCOORD3D = (graphicItem, displaySet) => { const getCoordsFromSCOORDOrSCOORD3D = graphicItem => {
const { ValueType, RelationshipType, GraphicType, GraphicData } = graphicItem; const { ValueType, GraphicType, GraphicData } = graphicItem;
// if (RelationshipType !== RELATIONSHIP_TYPE.INFERRED_FROM) {
// console.warn(
// `Relationshiptype === ${RelationshipType}. Cannot deal with NON TID-1400 SCOORD group with RelationshipType !== "INFERRED FROM."`
// );
// return;
// }
const coords = { ValueType, GraphicType, GraphicData }; const coords = { ValueType, GraphicType, GraphicData };
// ContentSequence has length of 1 as RelationshipType === 'INFERRED FROM'
if (ValueType === 'SCOORD') { if (ValueType === 'SCOORD') {
const { ReferencedSOPSequence } = graphicItem.ContentSequence; const { ReferencedSOPSequence } = graphicItem.ContentSequence;
coords.ReferencedSOPSequence = ReferencedSOPSequence; coords.ReferencedSOPSequence = ReferencedSOPSequence;
} else if (ValueType === 'SCOORD3D') { } else if (ValueType === 'SCOORD3D') {
if (graphicItem.ReferencedFrameOfReferenceUID) { if (graphicItem.ReferencedFrameOfReferenceUID) {
coords.ReferencedFrameOfReferenceSequence = graphicItem.ReferencedFrameOfReferenceUID; coords.ReferencedFrameOfReferenceSequence =
graphicItem.ReferencedFrameOfReferenceUID;
} else if (graphicItem.ContentSequence) { } else if (graphicItem.ContentSequence) {
const { const {
ReferencedFrameOfReferenceSequence, ReferencedFrameOfReferenceSequence,
@@ -3,10 +3,7 @@ import getSequenceAsArray from './getSequenceAsArray';
import getMergedContentSequencesByTrackingUniqueIdentifiers from './getMergedContentSequencesByTrackingUniqueIdentifiers'; import getMergedContentSequencesByTrackingUniqueIdentifiers from './getMergedContentSequencesByTrackingUniqueIdentifiers';
import processMeasurement from './processMeasurement'; import processMeasurement from './processMeasurement';
const getMeasurements = ( const getMeasurements = ImagingMeasurementReportContentSequence => {
ImagingMeasurementReportContentSequence,
displaySet
) => {
const ImagingMeasurements = ImagingMeasurementReportContentSequence.find( const ImagingMeasurements = ImagingMeasurementReportContentSequence.find(
item => item =>
item.ConceptNameCodeSequence.CodeValue === item.ConceptNameCodeSequence.CodeValue ===
@@ -21,25 +18,19 @@ const getMeasurements = (
CodeNameCodeSequenceValues.MeasurementGroup CodeNameCodeSequenceValues.MeasurementGroup
); );
const mergedContentSequencesByTrackingUniqueIdentifiers = getMergedContentSequencesByTrackingUniqueIdentifiers( /* const mergedContentSequencesByTrackingUniqueIdentifiers = getMergedContentSequencesByTrackingUniqueIdentifiers(
MeasurementGroups MeasurementGroups
); );*/
let measurements = []; let measurements = [];
Object.keys(mergedContentSequencesByTrackingUniqueIdentifiers).forEach( MeasurementGroups.forEach(MeasurementGroup => {
trackingUniqueIdentifier => { const contentSequence = MeasurementGroup.ContentSequence;
const mergedContentSequence = const measurement = processMeasurement(contentSequence);
mergedContentSequencesByTrackingUniqueIdentifiers[ if (measurement) {
trackingUniqueIdentifier measurements.push(measurement);
];
const measurement = processMeasurement(mergedContentSequence, displaySet);
if (measurement) {
measurements.push(measurement);
}
} }
); });
return measurements; return measurements;
}; };
@@ -57,6 +57,10 @@ const getRenderableData = (
// https://dicom.innolitics.com/ciods/procedure-log/sr-document-content/00700023 // https://dicom.innolitics.com/ciods/procedure-log/sr-document-content/00700023
switch (GraphicType) { switch (GraphicType) {
case SCOORD_TYPES.TEXT:
renderableData = [{ x: GraphicData[0], y: GraphicData[1] }];
break;
case SCOORD_TYPES.POINT: case SCOORD_TYPES.POINT:
renderableData = []; renderableData = [];
@@ -1,16 +1,16 @@
import processTID1410Measurement from './processTID1410Measurement'; import processTID1410Measurement from './processTID1410Measurement';
import processNonGeometricallyDefinedMeasurement from './processNonGeometricallyDefinedMeasurement'; import processNonGeometricallyDefinedMeasurement from './processNonGeometricallyDefinedMeasurement';
const processMeasurement = (mergedContentSequence, displaySet) => { const processMeasurement = contentSequence => {
if ( if (
mergedContentSequence.some( contentSequence.some(
group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D' group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D'
) )
) { ) {
return processTID1410Measurement(mergedContentSequence, displaySet); return processTID1410Measurement(contentSequence);
} }
return processNonGeometricallyDefinedMeasurement(mergedContentSequence); return processNonGeometricallyDefinedMeasurement(contentSequence);
}; };
export default processMeasurement; export default processMeasurement;
@@ -1,31 +1,40 @@
import getLabelFromMeasuredValueSequence from './getLabelFromMeasuredValueSequence'; import getLabelFromMeasuredValueSequence from './getLabelFromMeasuredValueSequence';
import getCoordsFromSCOORDOrSCOORD3D from './getCoordsFromSCOORDOrSCOORD3D'; import getCoordsFromSCOORDOrSCOORD3D from './getCoordsFromSCOORDOrSCOORD3D';
import { CodeNameCodeSequenceValues, CodingSchemeDesignators } from '../enums'; import { CodeNameCodeSequenceValues, CodingSchemeDesignators } from '../enums';
import SCOORD_TYPES from '../constants/scoordTypes';
const CORNERSTONE_FREETEXT_CODE_VALUE = 'CORNERSTONEFREETEXT'; const CORNERSTONE_FREETEXT_CODE_VALUE = 'CORNERSTONEFREETEXT';
const processNonGeometricallyDefinedMeasurement = mergedContentSequence => { const processNonGeometricallyDefinedMeasurement = contentSequence => {
const NUMContentItems = mergedContentSequence.filter( const NUMContentItems = contentSequence.filter(
group => group.ValueType === 'NUM' group => group.ValueType === 'NUM'
); );
const UIDREFContentItem = mergedContentSequence.find( const CODEContentItems = contentSequence.filter(
group => group.ValueType === 'CODE'
);
const UIDREFContentItem = contentSequence.find(
group => group.ValueType === 'UIDREF' group => group.ValueType === 'UIDREF'
); );
const TrackingIdentifierContentItem = mergedContentSequence.find( const IMAGEContentItem = contentSequence.find(
group => group.ValueType === 'IMAGE'
);
const TrackingIdentifierContentItem = contentSequence.find(
item => item =>
item.ConceptNameCodeSequence.CodeValue === item.ConceptNameCodeSequence.CodeValue ===
CodeNameCodeSequenceValues.TrackingIdentifier CodeNameCodeSequenceValues.TrackingIdentifier
); );
const Finding = mergedContentSequence.find( const Finding = contentSequence.find(
item => item =>
item.ConceptNameCodeSequence.CodeValue === item.ConceptNameCodeSequence.CodeValue ===
CodeNameCodeSequenceValues.Finding CodeNameCodeSequenceValues.Finding
); );
const FindingSites = mergedContentSequence.filter( const FindingSites = contentSequence.filter(
item => item =>
item.ConceptNameCodeSequence.CodingSchemeDesignator === item.ConceptNameCodeSequence.CodingSchemeDesignator ===
CodingSchemeDesignators.SRT && CodingSchemeDesignators.SRT &&
@@ -111,6 +120,37 @@ const processNonGeometricallyDefinedMeasurement = mergedContentSequence => {
} }
}); });
if (NUMContentItems.length === 0 && IMAGEContentItem) {
CODEContentItems.forEach(item => {
const { ConceptCodeSequence, ConceptNameCodeSequence } = item;
if (!ConceptCodeSequence || !ConceptNameCodeSequence) {
console.warn(`Graphic missing, skipping annotation.`);
return;
}
const GraphicData = [0, 0];
const GraphicType = SCOORD_TYPES.TEXT;
const { ValueType } = item;
const ReferencedSOPSequence = IMAGEContentItem.ReferencedSOPSequence;
const coord = {
ValueType,
GraphicType,
GraphicData,
ReferencedSOPSequence,
};
measurement.coords.push(coord);
measurement.labels.push({
label: ConceptNameCodeSequence.CodeMeaning,
labelCodingSchemeDesignator:
ConceptNameCodeSequence.CodingSchemeDesignator,
value: ConceptCodeSequence.CodeMeaning,
valueCodingSchemeDesignator: ConceptCodeSequence.CodingSchemeDesignator,
});
});
}
return measurement; return measurement;
}; };
@@ -5,14 +5,14 @@ import { RELATIONSHIP_TYPE, CodeNameCodeSequenceValues } from '../enums';
/** /**
* TID 1410 Planar ROI Measurements and Qualitative Evaluations. * TID 1410 Planar ROI Measurements and Qualitative Evaluations.
* *
* @param {*} mergedContentSequence * @param {*} contentSequence
* @returns * @returns
*/ */
const processTID1410Measurement = (mergedContentSequence, displaySet) => { const processTID1410Measurement = contentSequence => {
// Need to deal with TID 1410 style measurements, which will have a SCOORD or SCOORD3D at the top level, // Need to deal with TID 1410 style measurements, which will have a SCOORD or SCOORD3D at the top level,
// And non-geometric representations where each NUM has "INFERRED FROM" SCOORD/SCOORD3D // And non-geometric representations where each NUM has "INFERRED FROM" SCOORD/SCOORD3D
const graphicItem = mergedContentSequence.find( const graphicItem = contentSequence.find(
group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D' group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D'
); );
@@ -23,24 +23,24 @@ const processTID1410Measurement = (mergedContentSequence, displaySet) => {
return; return;
} }
const UIDREFContentItem = mergedContentSequence.find( const UIDREFContentItem = contentSequence.find(
group => group.ValueType === 'UIDREF' group => group.ValueType === 'UIDREF'
); );
const TrackingIdentifierContentItem = mergedContentSequence.find( const TrackingIdentifierContentItem = contentSequence.find(
item => item =>
item.ConceptNameCodeSequence.CodeValue === item.ConceptNameCodeSequence.CodeValue ===
CodeNameCodeSequenceValues.TrackingIdentifier CodeNameCodeSequenceValues.TrackingIdentifier
); );
const NUMContentItems = mergedContentSequence.filter( const NUMContentItems = contentSequence.filter(
group => group.ValueType === 'NUM' group => group.ValueType === 'NUM'
); );
const measurement = { const measurement = {
loaded: false, loaded: false,
labels: [], labels: [],
coords: [getCoordsFromSCOORDOrSCOORD3D(graphicItem, displaySet)], coords: [getCoordsFromSCOORDOrSCOORD3D(graphicItem)],
TrackingUniqueIdentifier: UIDREFContentItem.UID, TrackingUniqueIdentifier: UIDREFContentItem.UID,
TrackingIdentifier: TrackingIdentifierContentItem.TextValue, TrackingIdentifier: TrackingIdentifierContentItem.TextValue,
}; };
@@ -350,6 +350,19 @@ class StudyMetadata extends Metadata {
referencedSeriesInstanceUID referencedSeriesInstanceUID
); );
} else { } else {
const filteredReferencedDisplaySets = displaySet.referencedDisplaySets.filter(
referencedDisplaySet =>
referencedDisplaySet.SeriesInstanceUID ===
referencedSeriesInstanceUID
);
if (
filteredReferencedDisplaySets &&
filteredReferencedDisplaySets.length !== 0
) {
return true;
}
return false; return false;
} }
} }
@@ -6,7 +6,8 @@ export const dicomSRDisplayTool = {
options: { options: {
measurementTable: { measurementTable: {
displayFunction: data => { displayFunction: data => {
return `(SR) ${data.lesionNamingNumber || return `(SR) ${data.TrackingIdentifier ||
data.lesionNamingNumber ||
data.measurementNumber || data.measurementNumber ||
data.text || data.text ||
''}`; ''}`;
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.10.9](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.8...@ohif/ui@1.10.9) (2022-06-29)
**Note:** Version bump only for package @ohif/ui
## [1.10.8](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.7...@ohif/ui@1.10.8) (2022-04-06) ## [1.10.8](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.7...@ohif/ui@1.10.8) (2022-04-06)
**Note:** Version bump only for package @ohif/ui **Note:** Version bump only for package @ohif/ui
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/ui", "name": "@ohif/ui",
"version": "1.10.8", "version": "1.10.9",
"description": "A set of React components for Medical Imaging Viewers", "description": "A set of React components for Medical Imaging Viewers",
"author": "OHIF Contributors", "author": "OHIF Contributors",
"license": "MIT", "license": "MIT",
@@ -9,6 +9,14 @@ import { TableListItem } from './../tableList/TableListItem.js';
import './MeasurementTableItem.styl'; import './MeasurementTableItem.styl';
const ColoredCircle = ({ color }) => {
return <div className="item-color" style={{ backgroundColor: color }}></div>;
};
ColoredCircle.propTypes = {
color: PropTypes.string.isRequired,
};
class MeasurementTableItem extends Component { class MeasurementTableItem extends Component {
static propTypes = { static propTypes = {
measurementData: PropTypes.object.isRequired, measurementData: PropTypes.object.isRequired,
@@ -21,6 +29,14 @@ class MeasurementTableItem extends Component {
t: PropTypes.func, t: PropTypes.func,
}; };
constructor(props) {
super(props);
this.state = {
collapsed: true,
visible: true,
};
}
render() { render() {
const { const {
warningTitle = '', warningTitle = '',
@@ -93,27 +109,113 @@ class MeasurementTableItem extends Component {
actionButtons.push(deleteButton); actionButtons.push(deleteButton);
} }
return ( if (
<TableListItem this.props.measurementData.isSRText === true &&
itemKey={this.props.measurementData.measurementNumber} this.props.measurementData.labels &&
itemClass={`measurementItem ${this.props.itemClass} ${hasWarningClass}`} this.props.measurementData.labels.length > 0
itemIndex={this.props.itemIndex} ) {
onItemClick={this.onItemClick} return (
> <React.Fragment>
<div> <TableListItem
<div className="measurementLocation"> key={this.props.measurementData.measurementNumber}
{this.props.t(this.props.measurementData.label, { itemKey={this.props.measurementData.measurementNumber}
keySeparator: '>', itemClass={`measurementItem ${this.props.itemClass} ${hasWarningClass}`}
nsSeparator: '|', itemIndex={this.props.itemIndex}
onItemClick={this.onItemClick}
>
<div>
<div className="measurementLocation">
{this.props.t(this.props.measurementData.label, {
keySeparator: '>',
nsSeparator: '|',
})}
</div>
</div>
<div className="icons">
<div className="displayTexts">{this.getDataDisplayText()}</div>
<Icon
className={`eye-icon`}
name={this.state.visible ? 'eye' : 'eye-closed'}
width="20px"
height="20px"
onClick={() => {
this.props.measurementData.labels.forEach(label => {
label.visible = !this.state.visible;
});
this.setState({
visible: !this.state.visible,
});
}}
/>
<Icon
className={`angle-double-${
this.state.collapsed ? 'down' : 'up'
}`}
name={`angle-double-${this.state.collapsed ? 'down' : 'up'}`}
width="20px"
height="20px"
onClick={() => {
this.setState({
collapsed: !this.state.collapsed,
});
}}
/>
</div>
</TableListItem>
{this.state.collapsed &&
this.props.measurementData.labels.map((SRLabel, index) => {
return (
<TableListItem
key={index}
itemKey={index}
itemMeta={<ColoredCircle color={SRLabel.color} />}
itemMetaClass="item-color-section"
onItemClick={this.onItemClick}
>
<div>
<div className="icons">
<span>{SRLabel.label + ' : ' + SRLabel.value}</span>
<Icon
className={`eye-icon`}
name={SRLabel.visible ? 'eye' : 'eye-closed'}
width="20px"
height="20px"
onClick={() => {
SRLabel.visible = !SRLabel.visible;
}}
/>
</div>
</div>
</TableListItem>
);
})} })}
</React.Fragment>
);
} else {
return (
<TableListItem
key={this.props.measurementData.measurementNumber}
itemKey={this.props.measurementData.measurementNumber}
itemClass={`measurementItem ${this.props.itemClass} ${hasWarningClass}`}
itemIndex={this.props.itemIndex}
onItemClick={this.onItemClick}
>
<div>
<div className="measurementLocation">
{this.props.t(this.props.measurementData.label, {
keySeparator: '>',
nsSeparator: '|',
})}
</div>
<div className="displayTexts">{this.getDataDisplayText()}</div>
{!this.props.measurementData.isReadOnly && (
<div className="rowActions">{actionButtons}</div>
)}
</div> </div>
<div className="displayTexts">{this.getDataDisplayText()}</div> </TableListItem>
{!this.props.measurementData.isReadOnly && ( );
<div className="rowActions">{actionButtons}</div> }
)}
</div>
</TableListItem>
);
}; };
onItemClick = event => { onItemClick = event => {
@@ -1,4 +1,16 @@
.measurementItem .measurementItem
.item-color-section
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
.item-color
margin-top: 8px;
border-radius: 100%;
width: 20px;
height: 20px;
.rowActions .rowActions
margin-left: -1px; margin-left: -1px;
background-color: var(--ui-gray-darker) background-color: var(--ui-gray-darker)
@@ -63,3 +75,16 @@
width: 22px; width: 22px;
height: 20px; height: 20px;
pointer-events: inherit; pointer-events: inherit;
.icons
display: flex;
align-items: center;
border-radius: 5px;
.icons .eye-icon
margin-left: 100px;
margin-right: -5px;
.icons .angle-double-down
.icons .angle-double-up
margin-left: 15px;
margin-right: -5px;
@@ -12,16 +12,13 @@ export class TableListItem extends Component {
itemIndex: PropTypes.number, itemIndex: PropTypes.number,
itemMeta: PropTypes.node, itemMeta: PropTypes.node,
itemMetaClass: PropTypes.string, itemMetaClass: PropTypes.string,
itemKey: PropTypes.oneOfType([ itemKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
PropTypes.string,
PropTypes.number,
]),
onItemClick: PropTypes.func.isRequired, onItemClick: PropTypes.func.isRequired,
}; };
static defaultProps = { static defaultProps = {
itemMeta: null, itemMeta: null,
itemMetaClass: '' itemMetaClass: '',
}; };
render() { render() {
+32
View File
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [4.12.30](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.29...@ohif/viewer@4.12.30) (2022-06-30)
**Note:** Version bump only for package @ohif/viewer
## [4.12.29](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.28...@ohif/viewer@4.12.29) (2022-06-29)
**Note:** Version bump only for package @ohif/viewer
## [4.12.28](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.27...@ohif/viewer@4.12.28) (2022-06-28)
**Note:** Version bump only for package @ohif/viewer
## [4.12.27](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.26...@ohif/viewer@4.12.27) (2022-06-14)
**Note:** Version bump only for package @ohif/viewer
## [4.12.26](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.25...@ohif/viewer@4.12.26) (2022-04-22) ## [4.12.26](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.25...@ohif/viewer@4.12.26) (2022-04-22)
**Note:** Version bump only for package @ohif/viewer **Note:** Version bump only for package @ohif/viewer
+8 -8
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ohif/viewer", "name": "@ohif/viewer",
"version": "4.12.26", "version": "4.12.30",
"description": "OHIF Viewer", "description": "OHIF Viewer",
"author": "OHIF Contributors", "author": "OHIF Contributors",
"license": "MIT", "license": "MIT",
@@ -47,18 +47,18 @@
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.5.5", "@babel/runtime": "^7.5.5",
"@ohif/core": "^2.16.18", "@ohif/core": "^2.16.22",
"@ohif/extension-cornerstone": "^2.12.10", "@ohif/extension-cornerstone": "^2.12.13",
"@ohif/extension-debugging": "^0.3.2", "@ohif/extension-debugging": "^0.3.3",
"@ohif/extension-dicom-html": "^1.3.21", "@ohif/extension-dicom-html": "^1.3.22",
"@ohif/extension-dicom-microscopy": "^0.52.0", "@ohif/extension-dicom-microscopy": "^0.52.0",
"@ohif/extension-dicom-pdf": "^1.1.2", "@ohif/extension-dicom-pdf": "^1.1.2",
"@ohif/extension-dicom-rt": "^0.7.11", "@ohif/extension-dicom-rt": "^0.7.11",
"@ohif/extension-dicom-segmentation": "^0.7.11", "@ohif/extension-dicom-segmentation": "^0.7.11",
"@ohif/extension-lesion-tracker": "^0.2.1", "@ohif/extension-lesion-tracker": "^0.2.2",
"@ohif/extension-vtk": "^1.12.23", "@ohif/extension-vtk": "^1.12.27",
"@ohif/i18n": "^0.53.0", "@ohif/i18n": "^0.53.0",
"@ohif/ui": "^1.10.8", "@ohif/ui": "^1.10.9",
"@tanem/react-nprogress": "^1.1.25", "@tanem/react-nprogress": "^1.1.25",
"classnames": "^2.2.6", "classnames": "^2.2.6",
"core-js": "^3.2.1", "core-js": "^3.2.1",
@@ -122,6 +122,7 @@ function convertMeasurementsToTableData(toolCollections, timepoints) {
Object.keys(toolCollections).forEach(toolId => { Object.keys(toolCollections).forEach(toolId => {
const toolMeasurements = toolCollections[toolId]; const toolMeasurements = toolCollections[toolId];
const tool = tools.find(tool => tool.id === toolId); const tool = tools.find(tool => tool.id === toolId);
const { displayFunction } = tool.options.measurementTable; const { displayFunction } = tool.options.measurementTable;
@@ -131,12 +132,13 @@ function convertMeasurementsToTableData(toolCollections, timepoints) {
Object.keys(groupedMeasurements).forEach(groupedMeasurementsIndex => { Object.keys(groupedMeasurements).forEach(groupedMeasurementsIndex => {
const measurementNumberList = const measurementNumberList =
groupedMeasurements[groupedMeasurementsIndex]; groupedMeasurements[groupedMeasurementsIndex];
const measurementData = measurementNumberList[0]; const measurementData = measurementNumberList[0];
const { const {
measurementNumber, measurementNumber,
lesionNamingNumber, lesionNamingNumber,
toolType, toolType,
isReadOnly isReadOnly,
} = measurementData; } = measurementData;
const measurementId = measurementData._id; const measurementId = measurementData._id;
@@ -150,6 +152,8 @@ function convertMeasurementsToTableData(toolCollections, timepoints) {
const tableMeasurement = { const tableMeasurement = {
itemNumber: lesionNamingNumber, itemNumber: lesionNamingNumber,
label: getMeasurementText(measurementData), label: getMeasurementText(measurementData),
labels: measurementData.labels,
isSRText: measurementData.isSRText,
measurementId, measurementId,
measurementNumber, measurementNumber,
lesionNamingNumber, lesionNamingNumber,
@@ -48,7 +48,7 @@ const mapDispatchToProps = (dispatch, ownProps) => {
); );
document.dispatchEvent(selectionFired); document.dispatchEvent(selectionFired);
}); });
} else { } else if (Modality !== 'SR') {
displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata); displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata);
} }
@@ -262,7 +262,11 @@ class Viewer extends Component {
const { currentTimepointId } = this; const { currentTimepointId } = this;
this.timepointApi.retrieveTimepoints({ PatientID }); this.timepointApi.retrieveTimepoints({ PatientID });
this.measurementApi.retrieveMeasurements(PatientID, [currentTimepointId]); this.measurementApi
.retrieveMeasurements(PatientID, [currentTimepointId])
.then(() => {
this._updateThumbnails();
});
} }
} }
@@ -608,9 +612,30 @@ const _isDisplaySetActive = function(
if ( if (
displaySet.Modality !== 'SEG' && displaySet.Modality !== 'SEG' &&
displaySet.Modality !== 'RTSTRUCT' && displaySet.Modality !== 'RTSTRUCT' &&
displaySet.Modality !== 'RTDOSE' displaySet.Modality !== 'RTDOSE' &&
displaySet.Modality !== 'SR'
) { ) {
active = activeDisplaySetInstanceUID === displaySetInstanceUID; active = activeDisplaySetInstanceUID === displaySetInstanceUID;
} else if (displaySet.Modality === 'SR') {
active = activeDisplaySetInstanceUID === displaySetInstanceUID;
if (!active && displaySet.getSourceDisplaySet) {
const referencedDisplaySet = displaySet.getSourceDisplaySet(
studies,
false
);
if (referencedDisplaySet && referencedDisplaySet.length !== 0) {
for (let i = 0; i < referencedDisplaySet.length; i++) {
if (
referencedDisplaySet[i].displaySetInstanceUID ===
activeDisplaySetInstanceUID
) {
active = true;
break;
}
}
}
}
} else if (displaySet.getSourceDisplaySet) { } else if (displaySet.getSourceDisplaySet) {
if (displaySet.Modality === 'SEG') { if (displaySet.Modality === 'SEG') {
const { referencedDisplaySet } = displaySet.getSourceDisplaySet( const { referencedDisplaySet } = displaySet.getSourceDisplaySet(
@@ -661,10 +686,9 @@ const _mapStudiesToThumbnails = function(studies, activeDisplaySetInstanceUID) {
let altImageText; let altImageText;
if (displaySet.Modality && displaySet.Modality === 'SEG') { if (displaySet.Modality && displaySet.Modality === 'SEG') {
// TODO: We want to replace this with a thumbnail showing
// the segmentation map on the image, but this is easier
// and better than what we have right now.
altImageText = 'SEG'; altImageText = 'SEG';
} else if (displaySet.Modality && displaySet.Modality === 'SR') {
altImageText = 'SR';
} else if (displaySet.images && displaySet.images.length) { } else if (displaySet.images && displaySet.images.length) {
const imageIndex = Math.floor(displaySet.images.length / 2); const imageIndex = Math.floor(displaySet.images.length / 2);
imageId = displaySet.images[imageIndex].getImageId(); imageId = displaySet.images[imageIndex].getImageId();
@@ -173,7 +173,7 @@ class ViewerMain extends Component {
); );
document.dispatchEvent(selectionFired); document.dispatchEvent(selectionFired);
}); });
} else { } else if (Modality !== 'SR') {
displaySet = displaySet.getSourceDisplaySet(this.props.studies); displaySet = displaySet.getSourceDisplaySet(this.props.studies);
} }
+209 -3
View File
@@ -9,6 +9,13 @@
dependencies: dependencies:
"@babel/highlight" "^7.0.0" "@babel/highlight" "^7.0.0"
"@babel/code-frame@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
dependencies:
"@babel/highlight" "^7.16.7"
"@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.5.0", "@babel/core@^7.5.5": "@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.5.0", "@babel/core@^7.5.5":
version "7.6.4" version "7.6.4"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff"
@@ -29,6 +36,15 @@
semver "^5.4.1" semver "^5.4.1"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/generator@^7.18.2":
version "7.18.2"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d"
integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==
dependencies:
"@babel/types" "^7.18.2"
"@jridgewell/gen-mapping" "^0.3.0"
jsesc "^2.5.1"
"@babel/generator@^7.4.0": "@babel/generator@^7.4.0":
version "7.8.8" version "7.8.8"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e"
@@ -56,6 +72,13 @@
dependencies: dependencies:
"@babel/types" "^7.0.0" "@babel/types" "^7.0.0"
"@babel/helper-annotate-as-pure@^7.16.0":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
dependencies:
"@babel/types" "^7.16.7"
"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
@@ -102,6 +125,11 @@
"@babel/types" "^7.5.5" "@babel/types" "^7.5.5"
lodash "^4.17.13" lodash "^4.17.13"
"@babel/helper-environment-visitor@^7.18.2":
version "7.18.2"
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd"
integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==
"@babel/helper-explode-assignable-expression@^7.1.0": "@babel/helper-explode-assignable-expression@^7.1.0":
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
@@ -119,6 +147,14 @@
"@babel/template" "^7.1.0" "@babel/template" "^7.1.0"
"@babel/types" "^7.0.0" "@babel/types" "^7.0.0"
"@babel/helper-function-name@^7.17.9":
version "7.17.9"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12"
integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==
dependencies:
"@babel/template" "^7.16.7"
"@babel/types" "^7.17.0"
"@babel/helper-get-function-arity@^7.0.0": "@babel/helper-get-function-arity@^7.0.0":
version "7.0.0" version "7.0.0"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
@@ -126,6 +162,13 @@
dependencies: dependencies:
"@babel/types" "^7.0.0" "@babel/types" "^7.0.0"
"@babel/helper-hoist-variables@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
dependencies:
"@babel/types" "^7.16.7"
"@babel/helper-hoist-variables@^7.4.4": "@babel/helper-hoist-variables@^7.4.4":
version "7.4.4" version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
@@ -147,6 +190,13 @@
dependencies: dependencies:
"@babel/types" "^7.0.0" "@babel/types" "^7.0.0"
"@babel/helper-module-imports@^7.16.0":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
dependencies:
"@babel/types" "^7.16.7"
"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": "@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
version "7.5.5" version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
@@ -207,6 +257,13 @@
"@babel/template" "^7.1.0" "@babel/template" "^7.1.0"
"@babel/types" "^7.0.0" "@babel/types" "^7.0.0"
"@babel/helper-split-export-declaration@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
dependencies:
"@babel/types" "^7.16.7"
"@babel/helper-split-export-declaration@^7.4.4": "@babel/helper-split-export-declaration@^7.4.4":
version "7.4.4" version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
@@ -214,6 +271,11 @@
dependencies: dependencies:
"@babel/types" "^7.4.4" "@babel/types" "^7.4.4"
"@babel/helper-validator-identifier@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
"@babel/helper-validator-identifier@^7.9.5": "@babel/helper-validator-identifier@^7.9.5":
version "7.9.5" version "7.9.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
@@ -247,11 +309,25 @@
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/highlight@^7.16.7":
version "7.17.12"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351"
integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==
dependencies:
"@babel/helper-validator-identifier" "^7.16.7"
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3": "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3":
version "7.8.8" version "7.8.8"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4"
integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA== integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==
"@babel/parser@^7.16.7", "@babel/parser@^7.18.5":
version "7.18.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c"
integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==
"@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4":
version "7.6.4" version "7.6.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81"
@@ -736,6 +812,15 @@
"@babel/parser" "^7.6.0" "@babel/parser" "^7.6.0"
"@babel/types" "^7.6.0" "@babel/types" "^7.6.0"
"@babel/template@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
dependencies:
"@babel/code-frame" "^7.16.7"
"@babel/parser" "^7.16.7"
"@babel/types" "^7.16.7"
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3":
version "7.6.3" version "7.6.3"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9"
@@ -751,6 +836,22 @@
globals "^11.1.0" globals "^11.1.0"
lodash "^4.17.13" lodash "^4.17.13"
"@babel/traverse@^7.4.5":
version "7.18.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd"
integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==
dependencies:
"@babel/code-frame" "^7.16.7"
"@babel/generator" "^7.18.2"
"@babel/helper-environment-visitor" "^7.18.2"
"@babel/helper-function-name" "^7.17.9"
"@babel/helper-hoist-variables" "^7.16.7"
"@babel/helper-split-export-declaration" "^7.16.7"
"@babel/parser" "^7.18.5"
"@babel/types" "^7.18.4"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3":
version "7.6.3" version "7.6.3"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09"
@@ -760,6 +861,14 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4":
version "7.18.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354"
integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==
dependencies:
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
"@babel/types@^7.8.7": "@babel/types@^7.8.7":
version "7.9.5" version "7.9.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444"
@@ -882,11 +991,23 @@
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
"@emotion/is-prop-valid@^1.1.0":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz#f0907a416368cf8df9e410117068e20fe87c0a3a"
integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==
dependencies:
"@emotion/memoize" "^0.7.4"
"@emotion/memoize@0.7.4": "@emotion/memoize@0.7.4":
version "0.7.4" version "0.7.4"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
"@emotion/memoize@^0.7.4":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": "@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
version "0.11.16" version "0.11.16"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
@@ -903,12 +1024,12 @@
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
"@emotion/stylis@0.8.5": "@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4":
version "0.8.5" version "0.8.5"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
"@emotion/unitless@0.7.5": "@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.4":
version "0.7.5" version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
@@ -1213,6 +1334,38 @@
"@types/istanbul-reports" "^1.1.1" "@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0" "@types/yargs" "^13.0.0"
"@jridgewell/gen-mapping@^0.3.0":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9"
integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==
dependencies:
"@jridgewell/set-array" "^1.0.0"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/resolve-uri@^3.0.3":
version "3.0.7"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe"
integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==
"@jridgewell/set-array@^1.0.0":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea"
integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.13"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c"
integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==
"@jridgewell/trace-mapping@^0.3.9":
version "0.3.13"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea"
integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==
dependencies:
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@js.properties/properties@0.4.0": "@js.properties/properties@0.4.0":
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/@js.properties/properties/-/properties-0.4.0.tgz#3f98b784ab6fe9b31fd3c1637fedbfa2ff320185" resolved "https://registry.yarnpkg.com/@js.properties/properties/-/properties-0.4.0.tgz#3f98b784ab6fe9b31fd3c1637fedbfa2ff320185"
@@ -3454,6 +3607,17 @@ babel-plugin-module-resolver@^3.2.0:
reselect "^3.0.1" reselect "^3.0.1"
resolve "^1.4.0" resolve "^1.4.0"
"babel-plugin-styled-components@>= 1.12.0":
version "2.0.7"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086"
integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.16.0"
"@babel/helper-module-imports" "^7.16.0"
babel-plugin-syntax-jsx "^6.18.0"
lodash "^4.17.11"
picomatch "^2.3.0"
babel-plugin-syntax-jsx@^6.18.0: babel-plugin-syntax-jsx@^6.18.0:
version "6.18.0" version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
@@ -4045,6 +4209,11 @@ camelcase@^5.0.0, camelcase@^5.3.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
camelize@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==
caniuse-api@^3.0.0: caniuse-api@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
@@ -5096,6 +5265,11 @@ css-blank-pseudo@^0.1.4:
dependencies: dependencies:
postcss "^7.0.5" postcss "^7.0.5"
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
css-color-names@0.0.4, css-color-names@^0.0.4: css-color-names@0.0.4, css-color-names@^0.0.4:
version "0.0.4" version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
@@ -5174,6 +5348,15 @@ css-select@^2.0.0:
domutils "^1.7.0" domutils "^1.7.0"
nth-check "^1.0.2" nth-check "^1.0.2"
css-to-react-native@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756"
integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==
dependencies:
camelize "^1.0.0"
css-color-keywords "^1.0.0"
postcss-value-parser "^4.0.2"
css-tree@1.0.0-alpha.29: css-tree@1.0.0-alpha.29:
version "1.0.0-alpha.29" version "1.0.0-alpha.29"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
@@ -7864,6 +8047,13 @@ hoist-non-react-statics@^2.3.1:
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
hoist-non-react-statics@^3.0.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
dependencies:
react-is "^16.7.0"
hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
@@ -11810,7 +12000,7 @@ picomatch@^2.0.4, picomatch@^2.0.5:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6"
integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==
picomatch@^2.2.1, picomatch@^2.2.3: picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
@@ -15204,6 +15394,22 @@ style-search@^0.1.0:
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
styled-components@^5.3.5:
version "5.3.5"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.5.tgz#a750a398d01f1ca73af16a241dec3da6deae5ec4"
integrity sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/traverse" "^7.4.5"
"@emotion/is-prop-valid" "^1.1.0"
"@emotion/stylis" "^0.8.4"
"@emotion/unitless" "^0.7.4"
babel-plugin-styled-components ">= 1.12.0"
css-to-react-native "^3.0.0"
hoist-non-react-statics "^3.0.0"
shallowequal "^1.1.0"
supports-color "^5.5.0"
stylehacks@^4.0.0: stylehacks@^4.0.0:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"