@opentrons/components 0.1.7-alpha.1 → 0.2.0-alpha.0
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/cssModuleSideEffect.ts +22 -0
- package/lib/assets/localization/en/index.d.ts +12 -0
- package/lib/assets/localization/index.d.ts +12 -0
- package/lib/atoms/AnimationVideo/index.d.ts +13 -0
- package/lib/atoms/InlineNotification/index.d.ts +1 -1
- package/lib/atoms/ListButton/ListButtonChildren/index.d.ts +0 -1
- package/lib/atoms/StyledText/PlaceholderStyledText.d.ts +14 -0
- package/lib/atoms/StyledText/index.d.ts +1 -0
- package/lib/atoms/buttons/BasicButton.d.ts +12 -0
- package/lib/atoms/buttons/index.d.ts +1 -0
- package/lib/atoms/index.d.ts +1 -0
- package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +10 -8
- package/lib/hardware-sim/Deck/FlexTrash.d.ts +4 -1
- package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +3 -2
- package/lib/hardware-sim/Deck/RobotCoordsForeignDiv.d.ts +6 -5
- package/lib/hardware-sim/Deck/RobotCoordsForeignObject.d.ts +8 -5
- package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +11 -1
- package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +30 -14
- package/lib/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.d.ts +1 -0
- package/lib/hardware-sim/Deck/resolveLabwareLocation.d.ts +20 -0
- package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/EmptyConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/FlexStackerItem.d.ts +12 -0
- package/lib/hardware-sim/DeckConfigurator/HeaterShakerItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/MagneticBlockItem.d.ts +12 -0
- package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/{StaticFixture.d.ts → StaticItem.d.ts} +1 -1
- package/lib/hardware-sim/DeckConfigurator/TemperatureModuleItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/ThermocyclerItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/TrashBinConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/constants.d.ts +5 -8
- package/lib/hardware-sim/DeckConfigurator/index.d.ts +4 -3
- package/lib/hardware-sim/Labware/CalibrationBlockRender.d.ts +15 -0
- package/lib/hardware-sim/Labware/Labware.d.ts +7 -8
- package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +2 -2
- package/lib/hardware-sim/Labware/LabwareRender.d.ts +46 -5
- package/lib/hardware-sim/Labware/index.d.ts +1 -0
- package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +3 -4
- package/lib/hardware-sim/Labware/labwareInternals/LabwareOutline.d.ts +20 -9
- package/lib/hardware-sim/Labware/labwareInternals/LabwareWellLabels.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/StyledWells.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -2
- package/lib/hardware-sim/Labware/labwareInternals/WellLabels.d.ts +2 -2
- package/lib/hardware-sim/Module/index.d.ts +24 -2
- package/lib/hardware-sim/Pipette/PipetteRender.d.ts +2 -2
- package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.d.ts +5 -3
- package/lib/hocs/withStyleProps.d.ts +26 -0
- package/lib/hooks/useConditionalConfirm.d.ts +4 -0
- package/lib/icons/Icon.d.ts +7 -7
- package/lib/icons/ModuleIcon.d.ts +4 -3
- package/lib/instrument/index.d.ts +0 -2
- package/lib/legacy-hardware-sim/index.d.ts +0 -1
- package/lib/lists/index.d.ts +0 -1
- package/lib/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.d.ts +1 -0
- package/lib/molecules/CustomizeExpandButton/index.d.ts +29 -0
- package/lib/molecules/DeckInfoLabel/index.d.ts +8 -16
- package/lib/molecules/index.d.ts +2 -1
- package/lib/organisms/CommandText/index.d.ts +2 -2
- package/lib/organisms/CommandText/useCommandTextString/index.d.ts +2 -2
- package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.d.ts +2 -2
- package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +3 -3
- package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareName.d.ts +2 -2
- package/lib/organisms/FixtureOption/index.d.ts +2 -2
- package/lib/organisms/ProtocolDeck/index.d.ts +10 -0
- package/lib/organisms/ProtocolTimelineScrubber/CommandItem.d.ts +2 -2
- package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +2 -2
- package/lib/organisms/index.d.ts +1 -0
- package/lib/primitives/ForeignObject.d.ts +8 -18
- package/lib/primitives/style-props.d.ts +1 -1
- package/lib/structure/index.d.ts +2 -3
- package/package.json +6 -3
- package/src/alerts/alerts.module.css +2 -2
- package/src/assets/localization/en/deck_configuration.json +12 -0
- package/src/assets/localization/en/index.ts +2 -0
- package/src/assets/localization/en/protocol_command_text.json +1 -1
- package/src/atoms/AnimationVideo/__tests__/AnimationVideo.test.tsx +40 -0
- package/src/atoms/AnimationVideo/index.tsx +44 -0
- package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +0 -3
- package/src/atoms/CheckboxField/index.tsx +1 -1
- package/src/atoms/InlineNotification/index.tsx +86 -70
- package/src/atoms/ListButton/ListButton.stories.tsx +21 -7
- package/src/atoms/ListButton/ListButtonChildren/index.ts +0 -1
- package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +2 -2
- package/src/atoms/MenuList/OverflowBtn.tsx +39 -41
- package/src/atoms/Snackbar/Snackbar.stories.tsx +59 -23
- package/src/atoms/Snackbar/index.tsx +48 -38
- package/src/atoms/StyledText/PlaceholderStyledText.tsx +46 -0
- package/src/atoms/StyledText/index.ts +1 -0
- package/src/atoms/StyledText/placeholderstyledtext.module.css +25 -0
- package/src/atoms/buttons/BasicButton.tsx +100 -0
- package/src/atoms/buttons/SecondaryButton.tsx +5 -2
- package/src/atoms/buttons/__tests__/BasicButton.test.tsx +87 -0
- package/src/atoms/buttons/buttons.stories.tsx +91 -55
- package/src/atoms/buttons/index.ts +1 -0
- package/src/atoms/index.ts +1 -0
- package/src/buttons/buttons.module.css +92 -92
- package/src/controls/styles.module.css +15 -15
- package/src/forms/Select.module.css +23 -23
- package/src/forms/forms.module.css +38 -37
- package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +7 -7
- package/src/hardware-sim/BaseDeck/BaseDeck.tsx +98 -61
- package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +22 -28
- package/src/hardware-sim/BaseDeck/basedeck.module.css +20 -0
- package/src/hardware-sim/Deck/FlexTrash.tsx +50 -30
- package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +2 -2
- package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +122 -156
- package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +35 -27
- package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +32 -29
- package/src/hardware-sim/Deck/RobotCoordsText.tsx +12 -11
- package/src/hardware-sim/Deck/RobotWorkSpace.tsx +74 -54
- package/src/hardware-sim/Deck/SlotLabels.tsx +51 -51
- package/src/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.ts +138 -0
- package/src/hardware-sim/Deck/deck.module.css +54 -0
- package/src/hardware-sim/Deck/resolveLabwareLocation.ts +154 -0
- package/src/hardware-sim/DeckConfigurator/{FlexStackerFixture.tsx → AbsorbanceReaderItem.tsx} +34 -31
- package/src/hardware-sim/DeckConfigurator/{EmptyConfigFixture.tsx → EmptyConfigItem.tsx} +72 -44
- package/src/hardware-sim/DeckConfigurator/{AbsorbanceReaderFixture.tsx → FlexStackerItem.tsx} +46 -27
- package/src/hardware-sim/DeckConfigurator/{HeaterShakerFixture.tsx → HeaterShakerItem.tsx} +40 -28
- package/src/hardware-sim/DeckConfigurator/{MagneticBlockFixture.tsx → MagneticBlockItem.tsx} +41 -58
- package/src/hardware-sim/DeckConfigurator/{StagingAreaConfigFixture.tsx → StagingAreaConfigItem.tsx} +41 -23
- package/src/hardware-sim/DeckConfigurator/{StaticFixture.tsx → StaticItem.tsx} +16 -9
- package/src/hardware-sim/DeckConfigurator/{TemperatureModuleFixture.tsx → TemperatureModuleItem.tsx} +42 -26
- package/src/hardware-sim/DeckConfigurator/{ThermocyclerFixture.tsx → ThermocyclerItem.tsx} +31 -21
- package/src/hardware-sim/DeckConfigurator/{TrashBinConfigFixture.tsx → TrashBinConfigItem.tsx} +42 -27
- package/src/hardware-sim/DeckConfigurator/{WasteChuteConfigFixture.tsx → WasteChuteConfigItem.tsx} +38 -27
- package/src/hardware-sim/DeckConfigurator/constants.ts +5 -9
- package/src/hardware-sim/DeckConfigurator/index.tsx +236 -206
- package/src/hardware-sim/Labware/CalibrationBlockRender.stories.tsx +49 -0
- package/src/hardware-sim/Labware/CalibrationBlockRender.tsx +172 -0
- package/src/hardware-sim/Labware/Labware.tsx +30 -15
- package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +2 -2
- package/src/hardware-sim/Labware/LabwareRender.stories.tsx +36 -21
- package/src/hardware-sim/Labware/LabwareRender.tsx +70 -15
- package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +9 -4
- package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +14 -5
- package/src/hardware-sim/Labware/index.ts +1 -0
- package/src/hardware-sim/Labware/labware.module.css +8 -0
- package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +3 -4
- package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +48 -23
- package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +3 -3
- package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/Well.tsx +1 -2
- package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +10 -11
- package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +2 -2
- package/src/hardware-sim/Module/Module.stories.tsx +45 -15
- package/src/hardware-sim/Module/Thermocycler/index.tsx +2 -2
- package/src/hardware-sim/Module/index.tsx +41 -18
- package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +2 -2
- package/src/hardware-sim/Pipette/PipetteRender.tsx +5 -7
- package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +2 -2
- package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +15 -14
- package/src/hardware-sim/RobotCoordinateSpace/robotcoordinatespace.module.css +3 -0
- package/src/hocs/withStyleProps.ts +53 -0
- package/src/hooks/useConditionalConfirm.ts +15 -5
- package/src/icons/Icon.tsx +38 -29
- package/src/icons/ModuleIcon.tsx +5 -3
- package/src/icons/icon-data.ts +26 -2
- package/src/icons/icon.module.css +10 -0
- package/src/index.module.css +1 -0
- package/src/instrument/InstrumentDiagram.tsx +0 -2
- package/src/instrument/PipetteSelect.module.css +3 -3
- package/src/instrument/index.ts +0 -2
- package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +5 -5
- package/src/legacy-hardware-sim/ModuleItem.module.css +19 -19
- package/src/legacy-hardware-sim/index.ts +0 -1
- package/src/lists/index.ts +0 -1
- package/src/lists/lists.module.css +23 -23
- package/src/modals/modals.module.css +55 -55
- package/src/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.tsx +88 -0
- package/src/molecules/CustomizeExpandButton/index.tsx +189 -0
- package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +10 -6
- package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +15 -11
- package/src/molecules/DeckInfoLabel/deckinfolabel.module.css +42 -0
- package/src/molecules/DeckInfoLabel/index.tsx +36 -62
- package/src/molecules/DropdownMenu/index.tsx +17 -13
- package/src/molecules/InfoScreen/index.tsx +6 -2
- package/src/molecules/ReleaseNotes/styles.module.css +15 -15
- package/src/molecules/index.ts +2 -1
- package/src/nav/SidePanel.module.css +6 -6
- package/src/organisms/CommandText/__tests__/CommandText.test.tsx +12 -12
- package/src/organisms/CommandText/index.tsx +2 -2
- package/src/organisms/CommandText/useCommandTextString/index.ts +2 -2
- package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +4 -4
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +3 -3
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +2 -4
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts +19 -3
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +19 -10
- package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +9 -9
- package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +3 -3
- package/src/organisms/CommandText/useCommandTextString/utils/getLabwareName.ts +2 -2
- package/src/organisms/DeckLabelSet/index.tsx +1 -3
- package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +0 -2
- package/src/organisms/FixtureOption/index.tsx +42 -71
- package/src/organisms/ProtocolDeck/index.tsx +118 -0
- package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +2 -2
- package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +1 -1
- package/src/organisms/ProtocolTimelineScrubber/utils.ts +3 -3
- package/src/organisms/index.ts +1 -0
- package/src/primitives/ForeignObject.tsx +20 -61
- package/src/primitives/style-props.ts +1 -0
- package/src/slotmap/styles.module.css +1 -1
- package/src/structure/Pill.module.css +1 -1
- package/src/structure/Splash.module.css +1 -1
- package/src/structure/index.ts +2 -4
- package/src/structure/structure.module.css +11 -11
- package/src/styles/colors.module.css +1 -0
- package/src/styles/global.css +179 -0
- package/src/styles/index.module.css +1 -1
- package/src/styles/typography.module.css +1 -0
- package/src/testing/utils/renderWithProviders.tsx +3 -6
- package/src/tooltips/tooltips.module.css +14 -14
- package/vite.config.mts +6 -3
- package/lib/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.d.ts +0 -14
- package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/EmptyConfigFixture.d.ts +0 -8
- package/lib/hardware-sim/DeckConfigurator/FlexStackerFixture.d.ts +0 -11
- package/lib/hardware-sim/DeckConfigurator/HeaterShakerFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/MagneticBlockFixture.d.ts +0 -11
- package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/TemperatureModuleFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/ThermocyclerFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/TrashBinConfigFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.d.ts +0 -11
- package/lib/hardware-sim/utils.d.ts +0 -3
- package/lib/instrument/InstrumentGroup.d.ts +0 -11
- package/lib/instrument/InstrumentInfo.d.ts +0 -18
- package/lib/legacy-hardware-sim/ModuleItem.d.ts +0 -17
- package/lib/lists/TitledList.d.ts +0 -44
- package/lib/structure/Card.d.ts +0 -18
- package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +0 -109
- package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +0 -28
- package/src/hardware-sim/utils.ts +0 -18
- package/src/instrument/InstrumentDiagram.stories.tsx +0 -43
- package/src/instrument/InstrumentGroup.stories.tsx +0 -89
- package/src/instrument/InstrumentGroup.tsx +0 -35
- package/src/instrument/InstrumentInfo.tsx +0 -106
- package/src/instrument/__tests__/InstrumentInfo.test.tsx +0 -58
- package/src/instrument/instrument.module.css +0 -45
- package/src/legacy-hardware-sim/ModuleItem.tsx +0 -145
- package/src/lists/TitledList.tsx +0 -154
- package/src/structure/Card.stories.tsx +0 -29
- package/src/structure/Card.tsx +0 -65
- /package/lib/atoms/{ListButton/__tests__/ListButtonRadioButton.test.d.ts → AnimationVideo/__tests__/AnimationVideo.test.d.ts} +0 -0
- /package/lib/{instrument/__tests__/InstrumentInfo.test.d.ts → atoms/buttons/__tests__/BasicButton.test.d.ts} +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { getLabwareViewBox } from '@opentrons/shared-data'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
C_MED_DARK_GRAY,
|
|
5
|
+
C_MED_GRAY,
|
|
6
|
+
C_MED_LIGHT_GRAY,
|
|
7
|
+
FONT_WEIGHT_SEMIBOLD,
|
|
8
|
+
RobotCoordsText,
|
|
9
|
+
TYPOGRAPHY,
|
|
10
|
+
} from '../..'
|
|
11
|
+
|
|
12
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
13
|
+
|
|
14
|
+
// These strings match what's physically etched on the calibration block,
|
|
15
|
+
// so they probably shouldn't be localized.
|
|
16
|
+
const SHORT = 'SHORT'
|
|
17
|
+
const TALL = 'TALL'
|
|
18
|
+
|
|
19
|
+
const TEXT_MARGIN = 5
|
|
20
|
+
|
|
21
|
+
interface CalibrationBlockRenderProps {
|
|
22
|
+
/**
|
|
23
|
+
* Must be a calibration block definition, e.g.
|
|
24
|
+
* opentrons_calibrationblock_short_side_left or ..._short_side_right.
|
|
25
|
+
*/
|
|
26
|
+
labwareDef: LabwareDefinition
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Render a top-down view of an OT-2 calibration block. This displays features specific
|
|
31
|
+
* to calibration blocks, which the more general <Labware> component doesn't know
|
|
32
|
+
* about.
|
|
33
|
+
*/
|
|
34
|
+
export function CalibrationBlockRender(
|
|
35
|
+
props: CalibrationBlockRenderProps
|
|
36
|
+
): JSX.Element | null {
|
|
37
|
+
const { labwareDef } = props
|
|
38
|
+
const { minX, minY, xDimension, yDimension } = getLabwareViewBox(labwareDef)
|
|
39
|
+
const textLeftX = minX + TEXT_MARGIN
|
|
40
|
+
const textRightX = minX + xDimension - TEXT_MARGIN
|
|
41
|
+
const textY = minY + yDimension / 2
|
|
42
|
+
|
|
43
|
+
switch (labwareDef.parameters.loadName) {
|
|
44
|
+
case 'opentrons_calibrationblock_short_side_right': {
|
|
45
|
+
return (
|
|
46
|
+
<>
|
|
47
|
+
<rect
|
|
48
|
+
width={xDimension}
|
|
49
|
+
height={yDimension}
|
|
50
|
+
rx="10"
|
|
51
|
+
ry="10"
|
|
52
|
+
x={minX}
|
|
53
|
+
y={minY}
|
|
54
|
+
fill={C_MED_DARK_GRAY}
|
|
55
|
+
/>
|
|
56
|
+
<rect
|
|
57
|
+
width={xDimension / 2}
|
|
58
|
+
height={yDimension}
|
|
59
|
+
rx="10"
|
|
60
|
+
ry="10"
|
|
61
|
+
x={minX}
|
|
62
|
+
y={minY}
|
|
63
|
+
fill={C_MED_GRAY}
|
|
64
|
+
/>
|
|
65
|
+
<g
|
|
66
|
+
transform={`rotate(
|
|
67
|
+
270,
|
|
68
|
+
${textLeftX},
|
|
69
|
+
${textY}
|
|
70
|
+
)`}
|
|
71
|
+
>
|
|
72
|
+
<RobotCoordsText
|
|
73
|
+
x={textLeftX}
|
|
74
|
+
y={textY}
|
|
75
|
+
textAnchor="middle"
|
|
76
|
+
fill={C_MED_LIGHT_GRAY}
|
|
77
|
+
fontSize={TYPOGRAPHY.fontSizeCaption}
|
|
78
|
+
fontWeight={FONT_WEIGHT_SEMIBOLD}
|
|
79
|
+
>
|
|
80
|
+
{TALL}
|
|
81
|
+
</RobotCoordsText>
|
|
82
|
+
</g>
|
|
83
|
+
<g
|
|
84
|
+
transform={`rotate(
|
|
85
|
+
90,
|
|
86
|
+
${textRightX},
|
|
87
|
+
${textY}
|
|
88
|
+
)`}
|
|
89
|
+
>
|
|
90
|
+
<RobotCoordsText
|
|
91
|
+
x={textRightX}
|
|
92
|
+
y={textY}
|
|
93
|
+
textAnchor="middle"
|
|
94
|
+
fill={C_MED_LIGHT_GRAY}
|
|
95
|
+
fontSize={TYPOGRAPHY.fontSizeCaption}
|
|
96
|
+
fontWeight={FONT_WEIGHT_SEMIBOLD}
|
|
97
|
+
>
|
|
98
|
+
{SHORT}
|
|
99
|
+
</RobotCoordsText>
|
|
100
|
+
</g>
|
|
101
|
+
</>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
case 'opentrons_calibrationblock_short_side_left': {
|
|
105
|
+
return (
|
|
106
|
+
<>
|
|
107
|
+
<rect
|
|
108
|
+
width={xDimension}
|
|
109
|
+
height={yDimension}
|
|
110
|
+
rx="10"
|
|
111
|
+
ry="10"
|
|
112
|
+
x={minX}
|
|
113
|
+
y={minY}
|
|
114
|
+
fill={C_MED_DARK_GRAY}
|
|
115
|
+
/>
|
|
116
|
+
<rect
|
|
117
|
+
width={xDimension / 2}
|
|
118
|
+
height={yDimension}
|
|
119
|
+
rx="10"
|
|
120
|
+
ry="10"
|
|
121
|
+
x={minX + xDimension / 2}
|
|
122
|
+
y={minY}
|
|
123
|
+
fill={C_MED_GRAY}
|
|
124
|
+
/>
|
|
125
|
+
<g
|
|
126
|
+
transform={`rotate(
|
|
127
|
+
270,
|
|
128
|
+
${textLeftX},
|
|
129
|
+
${textY}
|
|
130
|
+
)`}
|
|
131
|
+
>
|
|
132
|
+
<RobotCoordsText
|
|
133
|
+
x={textLeftX}
|
|
134
|
+
y={textY}
|
|
135
|
+
textAnchor="middle"
|
|
136
|
+
fill={C_MED_LIGHT_GRAY}
|
|
137
|
+
fontSize={TYPOGRAPHY.fontSizeCaption}
|
|
138
|
+
fontWeight={FONT_WEIGHT_SEMIBOLD}
|
|
139
|
+
>
|
|
140
|
+
{SHORT}
|
|
141
|
+
</RobotCoordsText>
|
|
142
|
+
</g>
|
|
143
|
+
<g
|
|
144
|
+
transform={`rotate(
|
|
145
|
+
90,
|
|
146
|
+
${textRightX},
|
|
147
|
+
${textY}
|
|
148
|
+
)`}
|
|
149
|
+
>
|
|
150
|
+
<RobotCoordsText
|
|
151
|
+
x={textRightX}
|
|
152
|
+
y={textY}
|
|
153
|
+
textAnchor="middle"
|
|
154
|
+
fill={C_MED_LIGHT_GRAY}
|
|
155
|
+
fontSize={TYPOGRAPHY.fontSizeCaption}
|
|
156
|
+
fontWeight={FONT_WEIGHT_SEMIBOLD}
|
|
157
|
+
>
|
|
158
|
+
{TALL}
|
|
159
|
+
</RobotCoordsText>
|
|
160
|
+
</g>
|
|
161
|
+
</>
|
|
162
|
+
)
|
|
163
|
+
}
|
|
164
|
+
default: {
|
|
165
|
+
// should never reach this case
|
|
166
|
+
console.warn(
|
|
167
|
+
'<CalibrationBlockRender> given a non-calibration-block labware definition. Rendering nothing.'
|
|
168
|
+
)
|
|
169
|
+
return null
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
@@ -2,6 +2,11 @@ import { Fragment, memo } from 'react'
|
|
|
2
2
|
import map from 'lodash/map'
|
|
3
3
|
import styled from 'styled-components'
|
|
4
4
|
|
|
5
|
+
import {
|
|
6
|
+
getSchema2CornerOffsetFromSlot,
|
|
7
|
+
getSchema2Dimensions,
|
|
8
|
+
} from '@opentrons/shared-data'
|
|
9
|
+
|
|
5
10
|
import { COLORS } from '../../helix-design-system'
|
|
6
11
|
import { LabwareAdapter, labwareAdapterLoadNames } from './LabwareAdapter'
|
|
7
12
|
import {
|
|
@@ -12,7 +17,7 @@ import {
|
|
|
12
17
|
} from './labwareInternals'
|
|
13
18
|
|
|
14
19
|
import type { RefObject } from 'react'
|
|
15
|
-
import type {
|
|
20
|
+
import type { LabwareDefinition, LabwareWell } from '@opentrons/shared-data'
|
|
16
21
|
import type { LabwareAdapterLoadName } from './LabwareAdapter'
|
|
17
22
|
import type {
|
|
18
23
|
HighlightedWellLabels,
|
|
@@ -23,8 +28,10 @@ import type {
|
|
|
23
28
|
|
|
24
29
|
export interface LabwareProps {
|
|
25
30
|
/** Labware definition to render */
|
|
26
|
-
definition:
|
|
27
|
-
|
|
31
|
+
definition: LabwareDefinition
|
|
32
|
+
/* See docs on LabwareRender. */
|
|
33
|
+
positioningMode: 'passThrough' | 'offsetInSlot'
|
|
34
|
+
/** See docs on LabwareRender. */
|
|
28
35
|
shouldRotateAdapterOrientation?: boolean
|
|
29
36
|
/** boolean to show well labels */
|
|
30
37
|
showLabels?: boolean
|
|
@@ -75,15 +82,14 @@ const LabwareDetailGroup = styled.g`
|
|
|
75
82
|
`
|
|
76
83
|
|
|
77
84
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* @param props
|
|
82
|
-
* @returns
|
|
85
|
+
* Similar to the LabwareRender component, but with ODD-specific styling.
|
|
86
|
+
*
|
|
87
|
+
* For example, hiding the outline of the labware for certain ODD flows.
|
|
83
88
|
*/
|
|
84
89
|
export const Labware = (props: LabwareProps): JSX.Element => {
|
|
85
90
|
const {
|
|
86
91
|
definition,
|
|
92
|
+
positioningMode,
|
|
87
93
|
gRef,
|
|
88
94
|
hideOutline = false,
|
|
89
95
|
highlight,
|
|
@@ -98,23 +104,28 @@ export const Labware = (props: LabwareProps): JSX.Element => {
|
|
|
98
104
|
wellStroke = {},
|
|
99
105
|
} = props
|
|
100
106
|
|
|
101
|
-
const cornerOffsetFromSlot = definition
|
|
107
|
+
const cornerOffsetFromSlot = getSchema2CornerOffsetFromSlot(definition)
|
|
102
108
|
const labwareLoadName = definition.parameters.loadName
|
|
109
|
+
const isAdapter = labwareAdapterLoadNames.includes(labwareLoadName)
|
|
103
110
|
|
|
104
|
-
if (
|
|
111
|
+
if (isAdapter) {
|
|
105
112
|
const { shouldRotateAdapterOrientation = false } = props
|
|
106
|
-
const { xDimension, yDimension } = definition
|
|
113
|
+
const { xDimension, yDimension } = getSchema2Dimensions(definition)
|
|
107
114
|
|
|
108
115
|
return (
|
|
109
116
|
<g
|
|
110
117
|
transform={
|
|
111
|
-
shouldRotateAdapterOrientation
|
|
118
|
+
positioningMode === 'offsetInSlot' && shouldRotateAdapterOrientation
|
|
112
119
|
? `rotate(180, ${xDimension / 2}, ${yDimension / 2})`
|
|
113
|
-
:
|
|
120
|
+
: undefined
|
|
114
121
|
}
|
|
115
122
|
>
|
|
116
123
|
<g
|
|
117
|
-
transform={
|
|
124
|
+
transform={
|
|
125
|
+
positioningMode === 'offsetInSlot'
|
|
126
|
+
? `translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`
|
|
127
|
+
: undefined
|
|
128
|
+
}
|
|
118
129
|
ref={gRef}
|
|
119
130
|
>
|
|
120
131
|
<LabwareAdapter
|
|
@@ -129,7 +140,11 @@ export const Labware = (props: LabwareProps): JSX.Element => {
|
|
|
129
140
|
|
|
130
141
|
return (
|
|
131
142
|
<g
|
|
132
|
-
transform={
|
|
143
|
+
transform={
|
|
144
|
+
positioningMode === 'offsetInSlot'
|
|
145
|
+
? `translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`
|
|
146
|
+
: undefined
|
|
147
|
+
}
|
|
133
148
|
ref={gRef}
|
|
134
149
|
>
|
|
135
150
|
<g onClick={onLabwareClick}>
|
|
@@ -8,7 +8,7 @@ import { OpentronsFlex96TiprackAdapter } from './OpentronsFlex96TiprackAdapter'
|
|
|
8
8
|
import { OpentronsToughPCRAutoSealingLid } from './OpentronsToughPCRAutoSealingLid'
|
|
9
9
|
import { OpentronsUniversalFlatAdapter } from './OpentronsUniversalFlatAdapter'
|
|
10
10
|
|
|
11
|
-
import type {
|
|
11
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
12
12
|
|
|
13
13
|
const LABWARE_ADAPTER_LOADNAME_PATHS = {
|
|
14
14
|
opentrons_96_deep_well_adapter: Opentrons96DeepWellAdapter,
|
|
@@ -27,7 +27,7 @@ export const labwareAdapterLoadNames = Object.keys(
|
|
|
27
27
|
|
|
28
28
|
export interface LabwareAdapterProps {
|
|
29
29
|
labwareLoadName: LabwareAdapterLoadName
|
|
30
|
-
definition?:
|
|
30
|
+
definition?: LabwareDefinition
|
|
31
31
|
highlight?: boolean
|
|
32
32
|
highlightShadow?: boolean
|
|
33
33
|
}
|
|
@@ -12,23 +12,23 @@ import { LabwareRender } from './LabwareRender'
|
|
|
12
12
|
|
|
13
13
|
import type { Meta, Story } from '@storybook/react'
|
|
14
14
|
import type * as React from 'react'
|
|
15
|
-
import type {
|
|
15
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
16
16
|
|
|
17
|
-
const fixture96Plate = _fixture96Plate as
|
|
18
|
-
const fixture24Tuberack = _fixture24Tuberack as
|
|
19
|
-
const fixture12Trough = _fixture12Trough as
|
|
17
|
+
const fixture96Plate = _fixture96Plate as LabwareDefinition
|
|
18
|
+
const fixture24Tuberack = _fixture24Tuberack as LabwareDefinition
|
|
19
|
+
const fixture12Trough = _fixture12Trough as LabwareDefinition
|
|
20
20
|
|
|
21
|
-
const fixtureTiprack10 = _fixtureTiprack10ul as
|
|
22
|
-
const fixtureTiprack300 = _fixtureTiprack300ul as
|
|
23
|
-
const fixtureTiprack1000 = _fixtureTiprack1000ul as
|
|
21
|
+
const fixtureTiprack10 = _fixtureTiprack10ul as LabwareDefinition
|
|
22
|
+
const fixtureTiprack300 = _fixtureTiprack300ul as LabwareDefinition
|
|
23
|
+
const fixtureTiprack1000 = _fixtureTiprack1000ul as LabwareDefinition
|
|
24
24
|
|
|
25
|
-
const labwareDefMap: Record<string,
|
|
25
|
+
const labwareDefMap: Record<string, LabwareDefinition> = {
|
|
26
26
|
[fixture96Plate.metadata.displayName]: fixture96Plate,
|
|
27
27
|
[fixture24Tuberack.metadata.displayName]: fixture24Tuberack,
|
|
28
28
|
[fixture12Trough.metadata.displayName]: fixture12Trough,
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
const tipRackDefMap: Record<string,
|
|
31
|
+
const tipRackDefMap: Record<string, LabwareDefinition> = {
|
|
32
32
|
[fixtureTiprack10.metadata.displayName]: fixtureTiprack10,
|
|
33
33
|
[fixtureTiprack300.metadata.displayName]: fixtureTiprack300,
|
|
34
34
|
[fixtureTiprack1000.metadata.displayName]: fixtureTiprack1000,
|
|
@@ -51,24 +51,34 @@ const Template: Story<React.ComponentProps<typeof LabwareRender>> = ({
|
|
|
51
51
|
definition,
|
|
52
52
|
...args
|
|
53
53
|
}) => {
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
// Ensure we have a valid definition
|
|
55
|
+
const resolvedDef = definition || fixture96Plate
|
|
56
|
+
return (
|
|
57
|
+
<LabwareRender
|
|
58
|
+
definition={resolvedDef}
|
|
59
|
+
positioningMode="passThrough"
|
|
60
|
+
{...args}
|
|
61
|
+
/>
|
|
62
|
+
)
|
|
58
63
|
}
|
|
64
|
+
|
|
59
65
|
export const Basic = Template.bind({})
|
|
60
66
|
Basic.argTypes = {
|
|
61
67
|
definition: {
|
|
62
68
|
control: {
|
|
63
69
|
type: 'select',
|
|
64
|
-
options: Object.keys(labwareDefMap)
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
options: Object.keys(labwareDefMap),
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
positioningMode: {
|
|
74
|
+
control: {
|
|
75
|
+
type: 'select',
|
|
76
|
+
options: ['passThrough', 'offsetInSlot'],
|
|
67
77
|
},
|
|
68
|
-
defaultValue: fixture96Plate.metadata.displayName,
|
|
69
78
|
},
|
|
70
79
|
}
|
|
71
80
|
Basic.args = {
|
|
81
|
+
definition: fixture96Plate,
|
|
72
82
|
wellLabelOption: 'SHOW_LABEL_INSIDE',
|
|
73
83
|
highlightedWells: { A1: null, A2: null },
|
|
74
84
|
wellFill: { A1: 'maroon', A2: 'lavender' },
|
|
@@ -80,14 +90,19 @@ TipRack.argTypes = {
|
|
|
80
90
|
definition: {
|
|
81
91
|
control: {
|
|
82
92
|
type: 'select',
|
|
83
|
-
options: Object.keys(tipRackDefMap)
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
options: Object.keys(tipRackDefMap),
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
positioningMode: {
|
|
97
|
+
control: {
|
|
98
|
+
type: 'select',
|
|
99
|
+
options: ['passThrough', 'offsetInSlot'],
|
|
86
100
|
},
|
|
87
|
-
defaultValue: fixtureTiprack10.metadata.displayName,
|
|
88
101
|
},
|
|
89
102
|
}
|
|
90
103
|
TipRack.args = {
|
|
104
|
+
definition: fixtureTiprack10,
|
|
105
|
+
positioningMode: 'passThrough',
|
|
91
106
|
wellLabelOption: 'SHOW_LABEL_INSIDE',
|
|
92
107
|
highlightedWells: { A1: null, A2: null },
|
|
93
108
|
missingTips: { C3: null, D4: null },
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getSchema2CornerOffsetFromSlot,
|
|
3
|
+
getSchema2Dimensions,
|
|
4
|
+
} from '@opentrons/shared-data'
|
|
5
|
+
|
|
1
6
|
import { LabwareAdapter, labwareAdapterLoadNames } from './LabwareAdapter'
|
|
2
7
|
import {
|
|
3
8
|
FilledWells,
|
|
@@ -7,9 +12,8 @@ import {
|
|
|
7
12
|
WellLabels,
|
|
8
13
|
} from './labwareInternals'
|
|
9
14
|
|
|
10
|
-
import type { CSSProperties } from '
|
|
11
|
-
import type {
|
|
12
|
-
import type { LabwareDefinition2 } from '@opentrons/shared-data'
|
|
15
|
+
import type { CSSProperties, RefObject } from 'react'
|
|
16
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
13
17
|
import type { LabwareAdapterLoadName } from './LabwareAdapter'
|
|
14
18
|
import type {
|
|
15
19
|
HighlightedWellLabels,
|
|
@@ -28,8 +32,52 @@ export type WellLabelOption = keyof typeof WELL_LABEL_OPTIONS
|
|
|
28
32
|
|
|
29
33
|
export interface LabwareRenderProps {
|
|
30
34
|
/** Labware definition to render */
|
|
31
|
-
definition:
|
|
32
|
-
/**
|
|
35
|
+
definition: LabwareDefinition
|
|
36
|
+
/**
|
|
37
|
+
* How the rendered labware should be positioned. Use `passThrough` for new code.
|
|
38
|
+
*
|
|
39
|
+
* `passThrough` -
|
|
40
|
+
* The origin of the labware will be at the SVG origin. Beware that what
|
|
41
|
+
* "the origin of the labware" corresponds to, physically, is not consistent across
|
|
42
|
+
* labware. e.g. do not assume that it's always the labware's front-left corner.
|
|
43
|
+
*
|
|
44
|
+
* To render a labware on its own, use the `getLabwareViewBox()` util from
|
|
45
|
+
* shared-data to compute the SVG's viewBox around that origin.
|
|
46
|
+
*
|
|
47
|
+
* To render a labware aligned to something like a deck slot or module, wrap this
|
|
48
|
+
* component in an SVG transform. Use a util like shared-data's
|
|
49
|
+
* `getDeckSlotOriginToLabwareOrigin()` to compute it.
|
|
50
|
+
*
|
|
51
|
+
* `offsetInSlot` -
|
|
52
|
+
* The SVG origin will be treated as the origin of the slot enclosing the labware.
|
|
53
|
+
* The labware will be offset from that origin according to the labware def's
|
|
54
|
+
* cornerOffsetFromSlot.
|
|
55
|
+
*
|
|
56
|
+
* To render a labware on its own, set the SVG viewBox's origin to
|
|
57
|
+
* definition.cornerOffsetFromSlot.
|
|
58
|
+
*
|
|
59
|
+
* To render a labware aligned to something like a deck slot or module, wrap this
|
|
60
|
+
* component in an SVG transform that places the origin of this component at the
|
|
61
|
+
* origin of the slot.
|
|
62
|
+
*
|
|
63
|
+
* This is deprecated because it relies on labware schema 2's slot-centric ideas of
|
|
64
|
+
* how labware are positioned. It's also clunky when rendering a labware on its
|
|
65
|
+
* own.
|
|
66
|
+
*/
|
|
67
|
+
// todo(mm, 2025-06-09):
|
|
68
|
+
// Remove uses of offsetInSlot mode as we're able, and delete it when none are left.
|
|
69
|
+
positioningMode: 'passThrough' | 'offsetInSlot'
|
|
70
|
+
/**
|
|
71
|
+
* Special handling for opentrons_universal_flat_adapter. Unlike other labware,
|
|
72
|
+
* it rotates to match the underlying module, and that rotation actually matters
|
|
73
|
+
* because it's asymmetrical.
|
|
74
|
+
*
|
|
75
|
+
* This should be true if this is that adapter and we're on the left side of the deck,
|
|
76
|
+
* and false otherwise.
|
|
77
|
+
*
|
|
78
|
+
* Ignored if positioningMode is passThrough, in which case it's the caller's
|
|
79
|
+
* responsibility to do this rotation.
|
|
80
|
+
*/
|
|
33
81
|
shouldRotateAdapterOrientation?: boolean
|
|
34
82
|
/** option to show well labels inside or outside of labware outline */
|
|
35
83
|
wellLabelOption?: WellLabelOption
|
|
@@ -64,28 +112,31 @@ export interface LabwareRenderProps {
|
|
|
64
112
|
}
|
|
65
113
|
|
|
66
114
|
export const LabwareRender = (props: LabwareRenderProps): JSX.Element => {
|
|
67
|
-
const { gRef, definition } = props
|
|
115
|
+
const { gRef, definition, positioningMode } = props
|
|
68
116
|
|
|
69
|
-
const cornerOffsetFromSlot = definition
|
|
117
|
+
const cornerOffsetFromSlot = getSchema2CornerOffsetFromSlot(definition)
|
|
70
118
|
const labwareLoadName = definition.parameters.loadName
|
|
119
|
+
const isAdapter = labwareAdapterLoadNames.includes(labwareLoadName)
|
|
71
120
|
|
|
72
|
-
if (
|
|
121
|
+
if (isAdapter) {
|
|
73
122
|
const { shouldRotateAdapterOrientation } = props
|
|
74
|
-
const { xDimension, yDimension } =
|
|
123
|
+
const { xDimension, yDimension } = getSchema2Dimensions(definition)
|
|
75
124
|
|
|
76
125
|
return (
|
|
77
126
|
<g
|
|
78
127
|
transform={
|
|
79
|
-
shouldRotateAdapterOrientation
|
|
128
|
+
positioningMode === 'offsetInSlot' && shouldRotateAdapterOrientation
|
|
80
129
|
? `rotate(180, ${xDimension / 2}, ${yDimension / 2})`
|
|
81
|
-
:
|
|
130
|
+
: undefined
|
|
82
131
|
}
|
|
83
132
|
>
|
|
84
133
|
<g
|
|
85
134
|
transform={
|
|
86
|
-
|
|
87
|
-
?
|
|
88
|
-
|
|
135
|
+
positioningMode === 'offsetInSlot'
|
|
136
|
+
? shouldRotateAdapterOrientation
|
|
137
|
+
? `translate(${-cornerOffsetFromSlot.x}, ${-cornerOffsetFromSlot.y})`
|
|
138
|
+
: `translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`
|
|
139
|
+
: undefined
|
|
89
140
|
}
|
|
90
141
|
ref={gRef}
|
|
91
142
|
onClick={props.onLabwareClick}
|
|
@@ -102,7 +153,11 @@ export const LabwareRender = (props: LabwareRenderProps): JSX.Element => {
|
|
|
102
153
|
}
|
|
103
154
|
return (
|
|
104
155
|
<g
|
|
105
|
-
transform={
|
|
156
|
+
transform={
|
|
157
|
+
positioningMode === 'offsetInSlot'
|
|
158
|
+
? `translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`
|
|
159
|
+
: undefined
|
|
160
|
+
}
|
|
106
161
|
ref={gRef}
|
|
107
162
|
>
|
|
108
163
|
<StaticLabware
|
|
@@ -11,11 +11,12 @@ import {
|
|
|
11
11
|
LabwareWellLabelsComponent as LabwareWellLabels,
|
|
12
12
|
} from '../labwareInternals'
|
|
13
13
|
|
|
14
|
-
import type {
|
|
14
|
+
import type { ComponentProps } from 'react'
|
|
15
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
15
16
|
|
|
16
17
|
vi.mock('../labwareInternals')
|
|
17
18
|
|
|
18
|
-
const troughFixture12 = fixture12Trough as
|
|
19
|
+
const troughFixture12 = fixture12Trough as LabwareDefinition
|
|
19
20
|
|
|
20
21
|
describe('Labware', () => {
|
|
21
22
|
beforeEach(() => {
|
|
@@ -23,7 +24,10 @@ describe('Labware', () => {
|
|
|
23
24
|
})
|
|
24
25
|
|
|
25
26
|
it('should render a labware outline', () => {
|
|
26
|
-
const props = {
|
|
27
|
+
const props: ComponentProps<typeof Labware> = {
|
|
28
|
+
definition: troughFixture12,
|
|
29
|
+
positioningMode: 'passThrough',
|
|
30
|
+
}
|
|
27
31
|
render(
|
|
28
32
|
<svg>
|
|
29
33
|
<Labware {...props} />
|
|
@@ -32,8 +36,9 @@ describe('Labware', () => {
|
|
|
32
36
|
screen.getByText('mock labware outline')
|
|
33
37
|
})
|
|
34
38
|
it('should render well labels', () => {
|
|
35
|
-
const props = {
|
|
39
|
+
const props: ComponentProps<typeof Labware> = {
|
|
36
40
|
definition: troughFixture12,
|
|
41
|
+
positioningMode: 'passThrough',
|
|
37
42
|
showLabels: true,
|
|
38
43
|
}
|
|
39
44
|
vi.mocked(LabwareWellLabels).mockReturnValue(<div>mock well labels</div>)
|
|
@@ -12,11 +12,12 @@ import {
|
|
|
12
12
|
} from '../labwareInternals'
|
|
13
13
|
import { LabwareRender, WELL_LABEL_OPTIONS } from '../LabwareRender'
|
|
14
14
|
|
|
15
|
-
import type {
|
|
15
|
+
import type { ComponentProps } from 'react'
|
|
16
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
16
17
|
|
|
17
18
|
vi.mock('../labwareInternals')
|
|
18
19
|
|
|
19
|
-
const troughFixture12 = fixture12Trough as
|
|
20
|
+
const troughFixture12 = fixture12Trough as LabwareDefinition
|
|
20
21
|
|
|
21
22
|
describe('LabwareRender', () => {
|
|
22
23
|
beforeEach(() => {
|
|
@@ -24,7 +25,10 @@ describe('LabwareRender', () => {
|
|
|
24
25
|
})
|
|
25
26
|
|
|
26
27
|
it('should render a static labware component', () => {
|
|
27
|
-
const props = {
|
|
28
|
+
const props: ComponentProps<typeof LabwareRender> = {
|
|
29
|
+
definition: troughFixture12,
|
|
30
|
+
positioningMode: 'passThrough',
|
|
31
|
+
}
|
|
28
32
|
render(
|
|
29
33
|
<svg>
|
|
30
34
|
<LabwareRender {...props} />
|
|
@@ -33,7 +37,11 @@ describe('LabwareRender', () => {
|
|
|
33
37
|
screen.getByText('mock static labware')
|
|
34
38
|
})
|
|
35
39
|
it('should render stroked wells', () => {
|
|
36
|
-
const props
|
|
40
|
+
const props: ComponentProps<typeof LabwareRender> = {
|
|
41
|
+
definition: troughFixture12,
|
|
42
|
+
positioningMode: 'passThrough',
|
|
43
|
+
wellStroke: { A1: 'blue' },
|
|
44
|
+
}
|
|
37
45
|
vi.mocked(StrokedWells).mockReturnValue(<div>mock stroked wells</div>)
|
|
38
46
|
render(
|
|
39
47
|
<svg>
|
|
@@ -43,8 +51,9 @@ describe('LabwareRender', () => {
|
|
|
43
51
|
screen.getByText('mock stroked wells')
|
|
44
52
|
})
|
|
45
53
|
it('should render well labels', () => {
|
|
46
|
-
const props = {
|
|
54
|
+
const props: ComponentProps<typeof LabwareRender> = {
|
|
47
55
|
definition: troughFixture12,
|
|
56
|
+
positioningMode: 'passThrough',
|
|
48
57
|
wellLabelOption: WELL_LABEL_OPTIONS.SHOW_LABEL_INSIDE,
|
|
49
58
|
}
|
|
50
59
|
vi.mocked(WellLabels).mockReturnValue(<div>mock well labels</div>)
|
|
@@ -4,12 +4,11 @@ import map from 'lodash/map'
|
|
|
4
4
|
import { COLORS } from '../../../helix-design-system'
|
|
5
5
|
import { Well } from './Well'
|
|
6
6
|
|
|
7
|
-
import type { CSSProperties } from '
|
|
8
|
-
import type {
|
|
9
|
-
import type { LabwareDefinition2 } from '@opentrons/shared-data'
|
|
7
|
+
import type { CSSProperties, MemoExoticComponent, ReactNode } from 'react'
|
|
8
|
+
import type { LabwareDefinition } from '@opentrons/shared-data'
|
|
10
9
|
|
|
11
10
|
export interface FilledWellsProps {
|
|
12
|
-
definition:
|
|
11
|
+
definition: LabwareDefinition
|
|
13
12
|
fillByWell: Record<string, CSSProperties['fill']>
|
|
14
13
|
strokeColor?: string
|
|
15
14
|
}
|