@lunit/oui 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/presentations/Accordion/Accordion.js +2 -2
- package/dist/presentations/AnalysisBar/AnalysisBar.js +5 -4
- package/dist/presentations/AnalysisBar/AnalysisBar.styled.js +1 -1
- package/dist/presentations/AnalysisBar/AnalysisBar.types.d.ts +1 -1
- package/dist/presentations/Preview/Preview.js +1 -1
- package/dist/presentations/Preview/Preview.types.d.ts +1 -1
- package/dist/presentations/ToggleControl/ToggleControl.js +3 -3
- package/dist/presentations/ToggleControl/ToggleControl.types.d.ts +31 -0
- package/dist/presentations/ToggleControlGroup/ToggleControlGroup.js +1 -1
- package/package.json +1 -1
|
@@ -10,11 +10,11 @@ import { FreeText } from '../FreeText';
|
|
|
10
10
|
import { Statistic } from '../Statistic';
|
|
11
11
|
import { Score } from '../Score';
|
|
12
12
|
const Accordion = ({ componentType = 'accordion', MuiAccordionProps, AccordionDetailsProps, AccordionSummaryProps, size = 'medium', tooltip = [], title, items, metrics, isOpen, onChange, }) => {
|
|
13
|
-
return (_jsxs(BaseAccordion, { ...MuiAccordionProps, expanded: isOpen, onChange: onChange, sx: { alignItems: 'center' }, children: [_jsxs(BaseAccordionSummary, { expandIcon: _jsx(ArrowDown, { sx: { fill: theme.palette.neutralGrey[40] } }), ...AccordionSummaryProps, children: [!!tooltip.length && (_jsx(Tooltip, { arrow: true, size: "large", title: _jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: tooltip.map((item) => (_jsxs(Box, { children: [item.componentType === 'freeText' && (_jsx(FreeText, { componentType: item.componentType, size: item.size, content: item.content })), item.componentType === 'statistic' && (_jsx(Statistic, { componentType: item.componentType, title: item.title, size: item.size, layout: item.layout, symbol: item.symbol, color: item.color }))] }, uuidV4()))) }), children: _jsx(Box, { sx: {
|
|
13
|
+
return (_jsxs(BaseAccordion, { ...MuiAccordionProps, expanded: isOpen, onChange: onChange, sx: { alignItems: 'center' }, children: [_jsxs(BaseAccordionSummary, { expandIcon: _jsx(ArrowDown, { sx: { fill: theme.palette.neutralGrey[40] } }), ...AccordionSummaryProps, children: [!!tooltip.length && (_jsx(Tooltip, { arrow: true, size: "large", onClick: (event) => event.stopPropagation(), title: _jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '8px' }, onClick: (event) => event.stopPropagation(), children: tooltip.map((item) => (_jsxs(Box, { children: [item.componentType === 'freeText' && (_jsx(FreeText, { componentType: item.componentType, size: item.size, content: item.content })), item.componentType === 'statistic' && (_jsx(Statistic, { componentType: item.componentType, title: item.title, size: item.size, layout: item.layout, symbol: item.symbol, color: item.color }))] }, uuidV4()))) }), children: _jsx(Box, { sx: {
|
|
14
14
|
marginRight: size.includes('small') ? '4px' : '6px',
|
|
15
15
|
display: 'flex',
|
|
16
16
|
alignItems: 'center',
|
|
17
|
-
}, children: _jsx(Information, {}) }) })), _jsx(PresentationTypography, { size: size, children: title }), metrics && (_jsx(PresentationTypography, { size: size, children: _jsxs(Box, { sx: { marginLeft: '4px' }, children: [": ", metrics] }) }))] }), _jsx(BaseAccordionDetails, { ...AccordionDetailsProps, sx: { display: 'flex', flexDirection: 'column', gap: '
|
|
17
|
+
}, children: _jsx(Information, {}) }) })), _jsx(PresentationTypography, { size: size, children: title }), metrics && (_jsx(PresentationTypography, { size: size, children: _jsxs(Box, { sx: { marginLeft: '4px' }, children: [": ", metrics] }) }))] }), _jsx(BaseAccordionDetails, { ...AccordionDetailsProps, sx: { display: 'flex', flexDirection: 'column', gap: '14px' }, children: items.map((item) => {
|
|
18
18
|
return (_jsxs(_Fragment, { children: [item.componentType === 'statistic' && _jsx(Statistic, { ...item }), item.componentType === 'freeText' && _jsx(FreeText, { ...item }), item.componentType === 'score' && _jsx(Score, { ...item })] }));
|
|
19
19
|
}) })] }));
|
|
20
20
|
};
|
|
@@ -17,10 +17,11 @@ const Segments = ({ segments, adjustForOnePercent }) => {
|
|
|
17
17
|
return (_jsx(GraphSegment, { color: segment.color, width: adjustForOnePercent ? adjustBarSegmentWidth(segment.width) : segment.width }, i));
|
|
18
18
|
}) }));
|
|
19
19
|
};
|
|
20
|
-
const AnalysisBar = ({ componentType = 'analysisBar', expressionValue, caption, expressionLevels, segments, isDimmed = false, }) => {
|
|
20
|
+
const AnalysisBar = ({ componentType = 'analysisBar', expressionValue, caption, expressionLevels = [], segments, isDimmed = false, }) => {
|
|
21
21
|
const hasAdjustedOnePercentSegment = segments?.[0].width === 1;
|
|
22
|
-
return (_jsxs(AnalysisBarOuter, { className: "analysis-bar", isDimmed: isDimmed, children: [_jsxs(AnalysisBarSegmentContainer, { children: [expressionValue && (_jsx(GraphScoreIndicator, { adjustForOnePercent: hasAdjustedOnePercentSegment, value: expressionValue, isJet: segments?.[0].color === 'jet' })), _jsx(Segments, { segments: segments, adjustForOnePercent: hasAdjustedOnePercentSegment })] }), _jsxs(AxisLabels, { children: [expressionLevels.
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
return (_jsxs(AnalysisBarOuter, { className: "analysis-bar", isDimmed: isDimmed, children: [_jsxs(AnalysisBarSegmentContainer, { children: [expressionValue && (_jsx(GraphScoreIndicator, { adjustForOnePercent: hasAdjustedOnePercentSegment, value: expressionValue, isJet: segments?.[0].color === 'jet' })), _jsx(Segments, { segments: segments, adjustForOnePercent: hasAdjustedOnePercentSegment })] }), (expressionLevels.length > 0 || caption) && (_jsxs(AxisLabels, { children: [expressionLevels.length > 0 &&
|
|
23
|
+
expressionLevels.map((val, i) => {
|
|
24
|
+
return (_jsx(GraphAxisLabel, { label: val, adjustForOnePercent: hasAdjustedOnePercentSegment, leftPos: parseStringValToNumber(val) }, i));
|
|
25
|
+
}), caption && (_jsx(GraphAxisLabel, { label: caption, adjustForOnePercent: hasAdjustedOnePercentSegment, leftPos: 50 }))] }))] }));
|
|
25
26
|
};
|
|
26
27
|
export default AnalysisBar;
|
|
@@ -48,7 +48,7 @@ export const GraphScoreIndicator = ({ value, adjustForOnePercent, isJet, }) => {
|
|
|
48
48
|
return (_jsxs(GraphScoreIndicatorContainer, { className: "analysis-bar-score-indicator", sx: {
|
|
49
49
|
left: `${leftPos}%`,
|
|
50
50
|
transform: isJet ? 'translateX(-50%) translateY(8px)' : 'translateX(-50%)',
|
|
51
|
-
}, children: [_jsx(Typography, { variant: "small_body_sb1", sx: { textAlign: 'center' }, children: value }), _jsx(GraphScoreIndicatorPip, {})] }));
|
|
51
|
+
}, isJet: isJet, children: [_jsx(Typography, { variant: "small_body_sb1", sx: { textAlign: 'center' }, children: value }), _jsx(GraphScoreIndicatorPip, {})] }));
|
|
52
52
|
};
|
|
53
53
|
const GraphAxisLabelContainer = styled('span')(() => {
|
|
54
54
|
return {
|
|
@@ -13,6 +13,6 @@ import { FreeText } from '../FreeText';
|
|
|
13
13
|
import { Threshold } from '../Threshold';
|
|
14
14
|
import { Histogram } from '../Histogram';
|
|
15
15
|
const Preview = ({ visualizationControls = [], analysisSummary = [] }) => {
|
|
16
|
-
return (_jsxs(Container, { children: [_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px' }, children: visualizationControls.map((item) => (_jsxs(Box, { children: [item.componentType === 'toggle' && (_jsx(ToggleControl, { ...item, onChange: () => { } }, uuidV4())), item.componentType === 'toggleGroup' && (_jsx(ToggleControlGroup, { ...item, onChange: () => { } }, uuidV4())), item.componentType === 'analysisBar' && (_jsx(AnalysisBar, { ...item }, uuidV4()))] }, uuidV4()))) }), _jsx(HorizonDivider, { componentType: "divider" }), _jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px' }, children: [_jsx(FreeText, { componentType: "freeText", size: "
|
|
16
|
+
return (_jsxs(Container, { children: [_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px' }, children: visualizationControls.map((item) => (_jsxs(Box, { children: [item.componentType === 'toggle' && (_jsx(ToggleControl, { ...item, onChange: () => { } }, uuidV4())), item.componentType === 'toggleGroup' && (_jsx(ToggleControlGroup, { ...item, onChange: () => { } }, uuidV4())), item.componentType === 'analysisBar' && (_jsx(AnalysisBar, { ...item }, uuidV4()))] }, uuidV4()))) }), _jsx(HorizonDivider, { componentType: "divider" }), _jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px' }, children: [_jsx(FreeText, { componentType: "freeText", size: "medium-bold", content: "Analysis Summary" }), analysisSummary.map((item) => (_jsxs(Box, { children: [item.componentType === 'accordion' && (_jsx(Accordion, { ...item }, uuidV4())), item.componentType === 'analysisBar' && (_jsx(AnalysisBar, { ...item }, uuidV4())), item.componentType === 'statistic' && (_jsx(Statistic, { ...item }, uuidV4())), item.componentType === 'score' && (_jsx(Score, { ...item }, uuidV4())), item.componentType === 'freeText' && (_jsx(FreeText, { ...item }, uuidV4())), item.componentType === 'threshold' && (_jsx(Threshold, { ...item }, uuidV4())), item.componentType === 'histogram' && (_jsx(Histogram, { ...item }, uuidV4()))] }, uuidV4())))] })] }));
|
|
17
17
|
};
|
|
18
18
|
export default Preview;
|
|
@@ -9,6 +9,6 @@ import { ThresholdProps } from '../Threshold';
|
|
|
9
9
|
import { HistogramProps } from '../Histogram';
|
|
10
10
|
interface PreviewProps {
|
|
11
11
|
visualizationControls: (ToggleControlProps | ToggleControlGroupProps | AnalysisBarProps)[];
|
|
12
|
-
analysisSummary: (AccordionProps | StatisticProps | ScoreProps | FreeTextProps | ThresholdProps | HistogramProps)[];
|
|
12
|
+
analysisSummary: (AccordionProps | AnalysisBarProps | StatisticProps | ScoreProps | FreeTextProps | ThresholdProps | HistogramProps)[];
|
|
13
13
|
}
|
|
14
14
|
export type { PreviewProps };
|
|
@@ -10,15 +10,15 @@ import { FreeText } from '../FreeText';
|
|
|
10
10
|
import { Statistic } from '../Statistic';
|
|
11
11
|
import { Tooltip } from '../../components';
|
|
12
12
|
import { Information } from '../../icons';
|
|
13
|
-
const ToggleControl = ({ componentType = 'toggle', title, size = 'medium', symbol, tooltip = [], content = [], color, isParent = false, disabled = false, bar, checked, isDimmed = false, onChange, }) => {
|
|
13
|
+
const ToggleControl = ({ componentType = 'toggle', title, size = 'medium', symbol, tooltip = [], content = [], color, isParent = false, disabled = false, bar, checked = true, isDimmed = false, onChange, }) => {
|
|
14
14
|
const [isChecked, setIsChecked] = useState(checked);
|
|
15
15
|
const handleChange = (event) => {
|
|
16
16
|
setIsChecked(event.target.checked);
|
|
17
17
|
onChange && onChange(event);
|
|
18
18
|
};
|
|
19
|
-
return (_jsxs(ToggleControlOuter, { "data-toggle-name": `toggle-control-${title?.replace(/\s/g, '-')}`, hasBar: !!bar, style: { marginBottom: isParent ? '4px' : '0' }, children: [_jsxs(ToggleControlContainer, { className: "toggle-inner-container", size: size, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: '6px' }, className: "toggle-label", children: [!!tooltip.length && (_jsx(Tooltip, { arrow: true, size: "large", title: _jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: tooltip.map((item) => (_jsxs(Box, { children: [item.componentType === 'freeText' && (_jsx(FreeText, { componentType: item.componentType, size: item.size, content: item.content })), item.componentType === 'statistic' && (_jsx(Statistic, { componentType: item.componentType, title: item.title, size: item.size, layout: item.layout, symbol: item.symbol, color: item.color }))] }, uuidV4()))) }), children: _jsx(Box, { sx: {
|
|
19
|
+
return (_jsxs(ToggleControlOuter, { "data-toggle-name": `toggle-control-${title?.replace(/\s/g, '-')}`, hasBar: !!bar || !!content.length, style: { marginBottom: isParent ? '4px' : '0' }, children: [_jsxs(ToggleControlContainer, { className: "toggle-inner-container", size: size, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: '6px' }, className: "toggle-label", children: [!!tooltip.length && (_jsx(Tooltip, { arrow: true, size: "large", title: _jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: tooltip.map((item) => (_jsxs(Box, { children: [item.componentType === 'freeText' && (_jsx(FreeText, { componentType: item.componentType, size: item.size, content: item.content })), item.componentType === 'statistic' && (_jsx(Statistic, { componentType: item.componentType, title: item.title, size: item.size, layout: item.layout, symbol: item.symbol, color: item.color }))] }, uuidV4()))) }), children: _jsx(Box, { sx: {
|
|
20
20
|
display: 'flex',
|
|
21
21
|
alignItems: 'center',
|
|
22
|
-
}, children: _jsx(Information, {}) }) })), symbol && (_jsx(PresentationSymbolIcon, { symbol: symbol, color: color, isDimmed: isDimmed || !
|
|
22
|
+
}, children: _jsx(Information, {}) }) })), symbol && (_jsx(PresentationSymbolIcon, { symbol: symbol, color: color, isDimmed: isDimmed || !isChecked })), _jsx(PresentationTypography, { size: size, isDimmed: isDimmed || !isChecked, children: title })] }), _jsx(StyledToggle, { disabled: disabled, checked: isChecked, onChange: handleChange })] }), content.length > 0 && (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: content.map((item) => (_jsx(Statistic, { ...item, isDimmed: isDimmed || !isChecked }))) }, uuidV4())), bar && (_jsx(Box, { sx: { padding: '0 8px', fontSize: '14px', lineHeight: '8px' }, children: _jsx(AnalysisBar, { isDimmed: isDimmed || !isChecked, componentType: bar.componentType, expressionValue: bar.expressionValue, expressionLevels: bar.expressionLevels, caption: bar.caption, segments: bar.segments }) }))] }));
|
|
23
23
|
};
|
|
24
24
|
export default ToggleControl;
|
|
@@ -14,9 +14,40 @@ export interface ToggleControlSpec {
|
|
|
14
14
|
content?: StatisticProps[];
|
|
15
15
|
bar?: AnalysisBarProps;
|
|
16
16
|
}
|
|
17
|
+
interface PixelAnnotationSpec {
|
|
18
|
+
url: string;
|
|
19
|
+
bbox: number[];
|
|
20
|
+
mpp: {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
interface CellAnnotationSpec {
|
|
26
|
+
name: string;
|
|
27
|
+
}
|
|
28
|
+
interface GridAnnotationSpec {
|
|
29
|
+
name: string;
|
|
30
|
+
}
|
|
31
|
+
interface CutOffLabelProps {
|
|
32
|
+
color: string;
|
|
33
|
+
labelIndex: number;
|
|
34
|
+
}
|
|
35
|
+
interface TargetSpec {
|
|
36
|
+
visualizationType: string;
|
|
37
|
+
annotationId?: string;
|
|
38
|
+
annotation: PixelAnnotationSpec | CellAnnotationSpec | GridAnnotationSpec | string;
|
|
39
|
+
label?: string;
|
|
40
|
+
labelId?: string;
|
|
41
|
+
labels?: (string | CutOffLabelProps)[];
|
|
42
|
+
color?: string;
|
|
43
|
+
colors?: string[];
|
|
44
|
+
}
|
|
17
45
|
export interface ToggleControlProps extends ToggleControlSpec {
|
|
18
46
|
isParent?: boolean;
|
|
19
47
|
isDimmed?: boolean;
|
|
20
48
|
disabled?: boolean;
|
|
49
|
+
target?: TargetSpec;
|
|
50
|
+
isMaster?: boolean;
|
|
21
51
|
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
22
52
|
}
|
|
53
|
+
export {};
|
|
@@ -52,7 +52,7 @@ const ToggleControlGroup = ({ componentType = 'toggleGroup', size = 'medium', ti
|
|
|
52
52
|
return (_jsx(ToggleControl, { componentType: "toggle", title: child.title, size: size, tooltip: child.tooltip, symbol: child.symbol, color: child.color, isDimmed: !toggleChecked, checked: childrenChecked[index], disabled: !toggleChecked, onChange: (event) => {
|
|
53
53
|
behavior === 'multi' ? handleMultiChange(index) : handleExclusiveChange(index, event);
|
|
54
54
|
child.onChange(event);
|
|
55
|
-
} }, uuidV4()));
|
|
55
|
+
}, bar: child.bar }, uuidV4()));
|
|
56
56
|
})] }));
|
|
57
57
|
};
|
|
58
58
|
export default ToggleControlGroup;
|
package/package.json
CHANGED