@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.
Files changed (251) hide show
  1. package/cssModuleSideEffect.ts +22 -0
  2. package/lib/assets/localization/en/index.d.ts +12 -0
  3. package/lib/assets/localization/index.d.ts +12 -0
  4. package/lib/atoms/AnimationVideo/index.d.ts +13 -0
  5. package/lib/atoms/InlineNotification/index.d.ts +1 -1
  6. package/lib/atoms/ListButton/ListButtonChildren/index.d.ts +0 -1
  7. package/lib/atoms/StyledText/PlaceholderStyledText.d.ts +14 -0
  8. package/lib/atoms/StyledText/index.d.ts +1 -0
  9. package/lib/atoms/buttons/BasicButton.d.ts +12 -0
  10. package/lib/atoms/buttons/index.d.ts +1 -0
  11. package/lib/atoms/index.d.ts +1 -0
  12. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +10 -8
  13. package/lib/hardware-sim/Deck/FlexTrash.d.ts +4 -1
  14. package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +3 -2
  15. package/lib/hardware-sim/Deck/RobotCoordsForeignDiv.d.ts +6 -5
  16. package/lib/hardware-sim/Deck/RobotCoordsForeignObject.d.ts +8 -5
  17. package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +11 -1
  18. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +30 -14
  19. package/lib/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.d.ts +1 -0
  20. package/lib/hardware-sim/Deck/resolveLabwareLocation.d.ts +20 -0
  21. package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderItem.d.ts +11 -0
  22. package/lib/hardware-sim/DeckConfigurator/EmptyConfigItem.d.ts +11 -0
  23. package/lib/hardware-sim/DeckConfigurator/FlexStackerItem.d.ts +12 -0
  24. package/lib/hardware-sim/DeckConfigurator/HeaterShakerItem.d.ts +11 -0
  25. package/lib/hardware-sim/DeckConfigurator/MagneticBlockItem.d.ts +12 -0
  26. package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigItem.d.ts +11 -0
  27. package/lib/hardware-sim/DeckConfigurator/{StaticFixture.d.ts → StaticItem.d.ts} +1 -1
  28. package/lib/hardware-sim/DeckConfigurator/TemperatureModuleItem.d.ts +11 -0
  29. package/lib/hardware-sim/DeckConfigurator/ThermocyclerItem.d.ts +11 -0
  30. package/lib/hardware-sim/DeckConfigurator/TrashBinConfigItem.d.ts +11 -0
  31. package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigItem.d.ts +11 -0
  32. package/lib/hardware-sim/DeckConfigurator/constants.d.ts +5 -8
  33. package/lib/hardware-sim/DeckConfigurator/index.d.ts +4 -3
  34. package/lib/hardware-sim/Labware/CalibrationBlockRender.d.ts +15 -0
  35. package/lib/hardware-sim/Labware/Labware.d.ts +7 -8
  36. package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +2 -2
  37. package/lib/hardware-sim/Labware/LabwareRender.d.ts +46 -5
  38. package/lib/hardware-sim/Labware/index.d.ts +1 -0
  39. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +3 -4
  40. package/lib/hardware-sim/Labware/labwareInternals/LabwareOutline.d.ts +20 -9
  41. package/lib/hardware-sim/Labware/labwareInternals/LabwareWellLabels.d.ts +2 -2
  42. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +2 -2
  43. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +2 -2
  44. package/lib/hardware-sim/Labware/labwareInternals/StyledWells.d.ts +2 -2
  45. package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -2
  46. package/lib/hardware-sim/Labware/labwareInternals/WellLabels.d.ts +2 -2
  47. package/lib/hardware-sim/Module/index.d.ts +24 -2
  48. package/lib/hardware-sim/Pipette/PipetteRender.d.ts +2 -2
  49. package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.d.ts +5 -3
  50. package/lib/hocs/withStyleProps.d.ts +26 -0
  51. package/lib/hooks/useConditionalConfirm.d.ts +4 -0
  52. package/lib/icons/Icon.d.ts +7 -7
  53. package/lib/icons/ModuleIcon.d.ts +4 -3
  54. package/lib/instrument/index.d.ts +0 -2
  55. package/lib/legacy-hardware-sim/index.d.ts +0 -1
  56. package/lib/lists/index.d.ts +0 -1
  57. package/lib/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.d.ts +1 -0
  58. package/lib/molecules/CustomizeExpandButton/index.d.ts +29 -0
  59. package/lib/molecules/DeckInfoLabel/index.d.ts +8 -16
  60. package/lib/molecules/index.d.ts +2 -1
  61. package/lib/organisms/CommandText/index.d.ts +2 -2
  62. package/lib/organisms/CommandText/useCommandTextString/index.d.ts +2 -2
  63. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.d.ts +2 -2
  64. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +3 -3
  65. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareName.d.ts +2 -2
  66. package/lib/organisms/FixtureOption/index.d.ts +2 -2
  67. package/lib/organisms/ProtocolDeck/index.d.ts +10 -0
  68. package/lib/organisms/ProtocolTimelineScrubber/CommandItem.d.ts +2 -2
  69. package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +2 -2
  70. package/lib/organisms/index.d.ts +1 -0
  71. package/lib/primitives/ForeignObject.d.ts +8 -18
  72. package/lib/primitives/style-props.d.ts +1 -1
  73. package/lib/structure/index.d.ts +2 -3
  74. package/package.json +6 -3
  75. package/src/alerts/alerts.module.css +2 -2
  76. package/src/assets/localization/en/deck_configuration.json +12 -0
  77. package/src/assets/localization/en/index.ts +2 -0
  78. package/src/assets/localization/en/protocol_command_text.json +1 -1
  79. package/src/atoms/AnimationVideo/__tests__/AnimationVideo.test.tsx +40 -0
  80. package/src/atoms/AnimationVideo/index.tsx +44 -0
  81. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +0 -3
  82. package/src/atoms/CheckboxField/index.tsx +1 -1
  83. package/src/atoms/InlineNotification/index.tsx +86 -70
  84. package/src/atoms/ListButton/ListButton.stories.tsx +21 -7
  85. package/src/atoms/ListButton/ListButtonChildren/index.ts +0 -1
  86. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +2 -2
  87. package/src/atoms/MenuList/OverflowBtn.tsx +39 -41
  88. package/src/atoms/Snackbar/Snackbar.stories.tsx +59 -23
  89. package/src/atoms/Snackbar/index.tsx +48 -38
  90. package/src/atoms/StyledText/PlaceholderStyledText.tsx +46 -0
  91. package/src/atoms/StyledText/index.ts +1 -0
  92. package/src/atoms/StyledText/placeholderstyledtext.module.css +25 -0
  93. package/src/atoms/buttons/BasicButton.tsx +100 -0
  94. package/src/atoms/buttons/SecondaryButton.tsx +5 -2
  95. package/src/atoms/buttons/__tests__/BasicButton.test.tsx +87 -0
  96. package/src/atoms/buttons/buttons.stories.tsx +91 -55
  97. package/src/atoms/buttons/index.ts +1 -0
  98. package/src/atoms/index.ts +1 -0
  99. package/src/buttons/buttons.module.css +92 -92
  100. package/src/controls/styles.module.css +15 -15
  101. package/src/forms/Select.module.css +23 -23
  102. package/src/forms/forms.module.css +38 -37
  103. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +7 -7
  104. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +98 -61
  105. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +22 -28
  106. package/src/hardware-sim/BaseDeck/basedeck.module.css +20 -0
  107. package/src/hardware-sim/Deck/FlexTrash.tsx +50 -30
  108. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +2 -2
  109. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +122 -156
  110. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +35 -27
  111. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +32 -29
  112. package/src/hardware-sim/Deck/RobotCoordsText.tsx +12 -11
  113. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +74 -54
  114. package/src/hardware-sim/Deck/SlotLabels.tsx +51 -51
  115. package/src/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.ts +138 -0
  116. package/src/hardware-sim/Deck/deck.module.css +54 -0
  117. package/src/hardware-sim/Deck/resolveLabwareLocation.ts +154 -0
  118. package/src/hardware-sim/DeckConfigurator/{FlexStackerFixture.tsx → AbsorbanceReaderItem.tsx} +34 -31
  119. package/src/hardware-sim/DeckConfigurator/{EmptyConfigFixture.tsx → EmptyConfigItem.tsx} +72 -44
  120. package/src/hardware-sim/DeckConfigurator/{AbsorbanceReaderFixture.tsx → FlexStackerItem.tsx} +46 -27
  121. package/src/hardware-sim/DeckConfigurator/{HeaterShakerFixture.tsx → HeaterShakerItem.tsx} +40 -28
  122. package/src/hardware-sim/DeckConfigurator/{MagneticBlockFixture.tsx → MagneticBlockItem.tsx} +41 -58
  123. package/src/hardware-sim/DeckConfigurator/{StagingAreaConfigFixture.tsx → StagingAreaConfigItem.tsx} +41 -23
  124. package/src/hardware-sim/DeckConfigurator/{StaticFixture.tsx → StaticItem.tsx} +16 -9
  125. package/src/hardware-sim/DeckConfigurator/{TemperatureModuleFixture.tsx → TemperatureModuleItem.tsx} +42 -26
  126. package/src/hardware-sim/DeckConfigurator/{ThermocyclerFixture.tsx → ThermocyclerItem.tsx} +31 -21
  127. package/src/hardware-sim/DeckConfigurator/{TrashBinConfigFixture.tsx → TrashBinConfigItem.tsx} +42 -27
  128. package/src/hardware-sim/DeckConfigurator/{WasteChuteConfigFixture.tsx → WasteChuteConfigItem.tsx} +38 -27
  129. package/src/hardware-sim/DeckConfigurator/constants.ts +5 -9
  130. package/src/hardware-sim/DeckConfigurator/index.tsx +236 -206
  131. package/src/hardware-sim/Labware/CalibrationBlockRender.stories.tsx +49 -0
  132. package/src/hardware-sim/Labware/CalibrationBlockRender.tsx +172 -0
  133. package/src/hardware-sim/Labware/Labware.tsx +30 -15
  134. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +2 -2
  135. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +36 -21
  136. package/src/hardware-sim/Labware/LabwareRender.tsx +70 -15
  137. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +9 -4
  138. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +14 -5
  139. package/src/hardware-sim/Labware/index.ts +1 -0
  140. package/src/hardware-sim/Labware/labware.module.css +8 -0
  141. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +3 -4
  142. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +48 -23
  143. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +3 -3
  144. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +2 -2
  145. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +2 -2
  146. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +2 -2
  147. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +1 -2
  148. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +10 -11
  149. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +2 -2
  150. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +2 -2
  151. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +2 -2
  152. package/src/hardware-sim/Module/Module.stories.tsx +45 -15
  153. package/src/hardware-sim/Module/Thermocycler/index.tsx +2 -2
  154. package/src/hardware-sim/Module/index.tsx +41 -18
  155. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +2 -2
  156. package/src/hardware-sim/Pipette/PipetteRender.tsx +5 -7
  157. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +2 -2
  158. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +15 -14
  159. package/src/hardware-sim/RobotCoordinateSpace/robotcoordinatespace.module.css +3 -0
  160. package/src/hocs/withStyleProps.ts +53 -0
  161. package/src/hooks/useConditionalConfirm.ts +15 -5
  162. package/src/icons/Icon.tsx +38 -29
  163. package/src/icons/ModuleIcon.tsx +5 -3
  164. package/src/icons/icon-data.ts +26 -2
  165. package/src/icons/icon.module.css +10 -0
  166. package/src/index.module.css +1 -0
  167. package/src/instrument/InstrumentDiagram.tsx +0 -2
  168. package/src/instrument/PipetteSelect.module.css +3 -3
  169. package/src/instrument/index.ts +0 -2
  170. package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +5 -5
  171. package/src/legacy-hardware-sim/ModuleItem.module.css +19 -19
  172. package/src/legacy-hardware-sim/index.ts +0 -1
  173. package/src/lists/index.ts +0 -1
  174. package/src/lists/lists.module.css +23 -23
  175. package/src/modals/modals.module.css +55 -55
  176. package/src/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.tsx +88 -0
  177. package/src/molecules/CustomizeExpandButton/index.tsx +189 -0
  178. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +10 -6
  179. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +15 -11
  180. package/src/molecules/DeckInfoLabel/deckinfolabel.module.css +42 -0
  181. package/src/molecules/DeckInfoLabel/index.tsx +36 -62
  182. package/src/molecules/DropdownMenu/index.tsx +17 -13
  183. package/src/molecules/InfoScreen/index.tsx +6 -2
  184. package/src/molecules/ReleaseNotes/styles.module.css +15 -15
  185. package/src/molecules/index.ts +2 -1
  186. package/src/nav/SidePanel.module.css +6 -6
  187. package/src/organisms/CommandText/__tests__/CommandText.test.tsx +12 -12
  188. package/src/organisms/CommandText/index.tsx +2 -2
  189. package/src/organisms/CommandText/useCommandTextString/index.ts +2 -2
  190. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +4 -4
  191. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +3 -3
  192. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +2 -4
  193. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts +19 -3
  194. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +19 -10
  195. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +9 -9
  196. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +3 -3
  197. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareName.ts +2 -2
  198. package/src/organisms/DeckLabelSet/index.tsx +1 -3
  199. package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +0 -2
  200. package/src/organisms/FixtureOption/index.tsx +42 -71
  201. package/src/organisms/ProtocolDeck/index.tsx +118 -0
  202. package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +2 -2
  203. package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +1 -1
  204. package/src/organisms/ProtocolTimelineScrubber/utils.ts +3 -3
  205. package/src/organisms/index.ts +1 -0
  206. package/src/primitives/ForeignObject.tsx +20 -61
  207. package/src/primitives/style-props.ts +1 -0
  208. package/src/slotmap/styles.module.css +1 -1
  209. package/src/structure/Pill.module.css +1 -1
  210. package/src/structure/Splash.module.css +1 -1
  211. package/src/structure/index.ts +2 -4
  212. package/src/structure/structure.module.css +11 -11
  213. package/src/styles/colors.module.css +1 -0
  214. package/src/styles/global.css +179 -0
  215. package/src/styles/index.module.css +1 -1
  216. package/src/styles/typography.module.css +1 -0
  217. package/src/testing/utils/renderWithProviders.tsx +3 -6
  218. package/src/tooltips/tooltips.module.css +14 -14
  219. package/vite.config.mts +6 -3
  220. package/lib/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.d.ts +0 -14
  221. package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.d.ts +0 -10
  222. package/lib/hardware-sim/DeckConfigurator/EmptyConfigFixture.d.ts +0 -8
  223. package/lib/hardware-sim/DeckConfigurator/FlexStackerFixture.d.ts +0 -11
  224. package/lib/hardware-sim/DeckConfigurator/HeaterShakerFixture.d.ts +0 -10
  225. package/lib/hardware-sim/DeckConfigurator/MagneticBlockFixture.d.ts +0 -11
  226. package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.d.ts +0 -10
  227. package/lib/hardware-sim/DeckConfigurator/TemperatureModuleFixture.d.ts +0 -10
  228. package/lib/hardware-sim/DeckConfigurator/ThermocyclerFixture.d.ts +0 -10
  229. package/lib/hardware-sim/DeckConfigurator/TrashBinConfigFixture.d.ts +0 -10
  230. package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.d.ts +0 -11
  231. package/lib/hardware-sim/utils.d.ts +0 -3
  232. package/lib/instrument/InstrumentGroup.d.ts +0 -11
  233. package/lib/instrument/InstrumentInfo.d.ts +0 -18
  234. package/lib/legacy-hardware-sim/ModuleItem.d.ts +0 -17
  235. package/lib/lists/TitledList.d.ts +0 -44
  236. package/lib/structure/Card.d.ts +0 -18
  237. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +0 -109
  238. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +0 -28
  239. package/src/hardware-sim/utils.ts +0 -18
  240. package/src/instrument/InstrumentDiagram.stories.tsx +0 -43
  241. package/src/instrument/InstrumentGroup.stories.tsx +0 -89
  242. package/src/instrument/InstrumentGroup.tsx +0 -35
  243. package/src/instrument/InstrumentInfo.tsx +0 -106
  244. package/src/instrument/__tests__/InstrumentInfo.test.tsx +0 -58
  245. package/src/instrument/instrument.module.css +0 -45
  246. package/src/legacy-hardware-sim/ModuleItem.tsx +0 -145
  247. package/src/lists/TitledList.tsx +0 -154
  248. package/src/structure/Card.stories.tsx +0 -29
  249. package/src/structure/Card.tsx +0 -65
  250. /package/lib/atoms/{ListButton/__tests__/ListButtonRadioButton.test.d.ts → AnimationVideo/__tests__/AnimationVideo.test.d.ts} +0 -0
  251. /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 { LabwareDefinition2, LabwareWell } from '@opentrons/shared-data'
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: LabwareDefinition2
27
- /** Opional Prop for labware on heater shakers sitting on right side of the deck */
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
- * a refactor of the legacy LabwareRender component intended to provide predictable styling
79
- * initial use in ODD well selection component with ODD-specific well label styling
80
- * consider adding additional styled wells props if used elsewhere
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.cornerOffsetFromSlot
107
+ const cornerOffsetFromSlot = getSchema2CornerOffsetFromSlot(definition)
102
108
  const labwareLoadName = definition.parameters.loadName
109
+ const isAdapter = labwareAdapterLoadNames.includes(labwareLoadName)
103
110
 
104
- if (labwareAdapterLoadNames.includes(labwareLoadName)) {
111
+ if (isAdapter) {
105
112
  const { shouldRotateAdapterOrientation = false } = props
106
- const { xDimension, yDimension } = definition.dimensions
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
- : 'rotate(0, 0, 0)'
120
+ : undefined
114
121
  }
115
122
  >
116
123
  <g
117
- transform={`translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`}
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={`translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`}
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 { LabwareDefinition2 } from '@opentrons/shared-data'
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?: LabwareDefinition2
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 { LabwareDefinition2 } from '@opentrons/shared-data'
15
+ import type { LabwareDefinition } from '@opentrons/shared-data'
16
16
 
17
- const fixture96Plate = _fixture96Plate as LabwareDefinition2
18
- const fixture24Tuberack = _fixture24Tuberack as LabwareDefinition2
19
- const fixture12Trough = _fixture12Trough as LabwareDefinition2
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 LabwareDefinition2
22
- const fixtureTiprack300 = _fixtureTiprack300ul as LabwareDefinition2
23
- const fixtureTiprack1000 = _fixtureTiprack1000ul as LabwareDefinition2
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, LabwareDefinition2> = {
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, LabwareDefinition2> = {
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
- const displayName: unknown = definition
55
- const allLabwareMap = { ...labwareDefMap, ...tipRackDefMap }
56
- const resolvedDef: typeof definition = allLabwareMap[displayName as string]
57
- return <LabwareRender definition={resolvedDef} {...args} />
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).map(
65
- d => labwareDefMap[d].metadata.displayName
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).map(
84
- d => tipRackDefMap[d].metadata.displayName
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 'styled-components'
11
- import type { RefObject } from 'react'
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: LabwareDefinition2
32
- /** Opional Prop for labware on heater shakers sitting on right side of the deck */
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.cornerOffsetFromSlot
117
+ const cornerOffsetFromSlot = getSchema2CornerOffsetFromSlot(definition)
70
118
  const labwareLoadName = definition.parameters.loadName
119
+ const isAdapter = labwareAdapterLoadNames.includes(labwareLoadName)
71
120
 
72
- if (labwareAdapterLoadNames.includes(labwareLoadName)) {
121
+ if (isAdapter) {
73
122
  const { shouldRotateAdapterOrientation } = props
74
- const { xDimension, yDimension } = props.definition.dimensions
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
- : 'rotate(0, 0, 0)'
130
+ : undefined
82
131
  }
83
132
  >
84
133
  <g
85
134
  transform={
86
- shouldRotateAdapterOrientation
87
- ? `translate(${-cornerOffsetFromSlot.x}, ${-cornerOffsetFromSlot.y})`
88
- : `translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`
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={`translate(${cornerOffsetFromSlot.x}, ${cornerOffsetFromSlot.y})`}
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 { LabwareDefinition2 } from '@opentrons/shared-data'
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 LabwareDefinition2
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 = { definition: troughFixture12 }
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 { LabwareDefinition2 } from '@opentrons/shared-data'
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 LabwareDefinition2
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 = { definition: troughFixture12 }
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 = { definition: troughFixture12, wellStroke: { A1: 'blue' } }
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>)
@@ -1,4 +1,5 @@
1
1
  export * from './labwareInternals/index'
2
+ export * from './CalibrationBlockRender'
2
3
  export * from './LabwareRender'
3
4
  export * from './Labware'
4
5
 
@@ -0,0 +1,8 @@
1
+ .adapter_render {
2
+ transition: transform 0.3s ease;
3
+ }
4
+
5
+ .rotated {
6
+ transform: rotate(180deg); /* fallback in case CSS vars not set */
7
+ transform-origin: var(--cx) var(--cy);
8
+ }
@@ -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 'styled-components'
8
- import type { MemoExoticComponent, ReactNode } from 'react'
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: LabwareDefinition2
11
+ definition: LabwareDefinition
13
12
  fillByWell: Record<string, CSSProperties['fill']>
14
13
  strokeColor?: string
15
14
  }