@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
@@ -58,9 +58,12 @@ export const getPipettingCommandText = ({
58
58
  })
59
59
  : null
60
60
 
61
+ const volume = formatCmdParamDecimal(command, 'volume')
62
+ const flowRate = formatCmdParamDecimal(command, 'flowRate')
63
+ const pushOutVolume = formatCmdParamDecimal(command, 'pushOut')
64
+
61
65
  switch (command?.commandType) {
62
66
  case 'aspirate': {
63
- const { volume, flowRate } = command.params
64
67
  return t('aspirate', {
65
68
  well_name: wellName,
66
69
  labware: labwareName,
@@ -70,15 +73,14 @@ export const getPipettingCommandText = ({
70
73
  })
71
74
  }
72
75
  case 'dispense': {
73
- const { volume, flowRate, pushOut } = command.params
74
- return pushOut != null
76
+ return pushOutVolume != null
75
77
  ? t('dispense_push_out', {
76
78
  well_name: wellName,
77
79
  labware: labwareName,
78
80
  labware_location: displayLocation,
79
81
  volume,
80
82
  flow_rate: flowRate,
81
- push_out_volume: pushOut,
83
+ push_out_volume: pushOutVolume,
82
84
  })
83
85
  : t('dispense', {
84
86
  well_name: wellName,
@@ -89,7 +91,6 @@ export const getPipettingCommandText = ({
89
91
  })
90
92
  }
91
93
  case 'blowout': {
92
- const { flowRate } = command.params
93
94
  return t('blowout', {
94
95
  well_name: wellName,
95
96
  labware: labwareName,
@@ -155,19 +156,15 @@ export const getPipettingCommandText = ({
155
156
  }
156
157
  }
157
158
  case 'dispenseInPlace': {
158
- const { volume, flowRate } = command.params
159
159
  return t('dispense_in_place', { volume, flow_rate: flowRate })
160
160
  }
161
161
  case 'blowOutInPlace': {
162
- const { flowRate } = command.params
163
162
  return t('blowout_in_place', { flow_rate: flowRate })
164
163
  }
165
164
  case 'aspirateInPlace': {
166
- const { flowRate, volume } = command.params
167
165
  return t('aspirate_in_place', { volume, flow_rate: flowRate })
168
166
  }
169
167
  case 'airGapInPlace': {
170
- const { volume } = command.params
171
168
  return t('air_gap_in_place', { volume })
172
169
  }
173
170
  case 'sealPipetteToTip': {
@@ -183,7 +180,6 @@ export const getPipettingCommandText = ({
183
180
  })
184
181
  }
185
182
  case 'pressureDispense': {
186
- const { flowRate, volume } = command.params
187
183
  return t('pressurizing_to_dispense', { volume, flow_rate: flowRate })
188
184
  }
189
185
  default: {
@@ -195,3 +191,16 @@ export const getPipettingCommandText = ({
195
191
  }
196
192
  }
197
193
  }
194
+
195
+ // Format the given command param to two decimals if it exists and can be cast as a number.
196
+ const formatCmdParamDecimal = (
197
+ command: RunTimeCommand | null | undefined,
198
+ paramName: string
199
+ ): string | null =>
200
+ command?.params &&
201
+ paramName in command.params &&
202
+ command.params[paramName as keyof typeof command.params] != null
203
+ ? Number(command.params[paramName as keyof typeof command.params]).toFixed(
204
+ 2
205
+ )
206
+ : null
@@ -1,7 +1,7 @@
1
1
  import { getLabwareDefURI } from '@opentrons/shared-data'
2
2
 
3
3
  import type {
4
- LabwareDefinition2,
4
+ LabwareDefinition,
5
5
  LoadLabwareRunTimeCommand,
6
6
  LoadLidRunTimeCommand,
7
7
  RunTimeCommand,
@@ -10,8 +10,8 @@ import type {
10
10
  // Note: This is an O(n) operation.
11
11
  export function getLabwareDefinitionsFromCommands(
12
12
  commands: RunTimeCommand[]
13
- ): LabwareDefinition2[] {
14
- return commands.reduce<LabwareDefinition2[]>(
13
+ ): LabwareDefinition[] {
14
+ return commands.reduce<LabwareDefinition[]>(
15
15
  (acc, command) => [
16
16
  ...getLabwareDefinitionFromCommand(command, acc),
17
17
  ...acc,
@@ -21,11 +21,11 @@ export function getLabwareDefinitionsFromCommands(
21
21
  }
22
22
 
23
23
  function getNewLabwareDefinitions(
24
- newDefinitions: Array<LabwareDefinition2 | null | undefined>,
25
- knownDefinitions: LabwareDefinition2[]
26
- ): LabwareDefinition2[] {
24
+ newDefinitions: Array<LabwareDefinition | null | undefined>,
25
+ knownDefinitions: LabwareDefinition[]
26
+ ): LabwareDefinition[] {
27
27
  return newDefinitions.filter(
28
- (maybeNewDef): maybeNewDef is LabwareDefinition2 =>
28
+ (maybeNewDef): maybeNewDef is LabwareDefinition =>
29
29
  maybeNewDef != null &&
30
30
  !knownDefinitions.some(
31
31
  knownDef => getLabwareDefURI(knownDef) === getLabwareDefURI(maybeNewDef)
@@ -40,8 +40,8 @@ const isLoadCommand = (
40
40
 
41
41
  function getLabwareDefinitionFromCommand(
42
42
  command: RunTimeCommand,
43
- known: LabwareDefinition2[]
44
- ): LabwareDefinition2[] {
43
+ known: LabwareDefinition[]
44
+ ): LabwareDefinition[] {
45
45
  if (isLoadCommand(command)) {
46
46
  return getNewLabwareDefinitions([command.result?.definition], known)
47
47
  }
@@ -15,7 +15,7 @@ import { getModuleModel } from './getModuleModel'
15
15
  import type {
16
16
  AddressableAreaName,
17
17
  CutoutId,
18
- LabwareDefinition2,
18
+ LabwareDefinition,
19
19
  LabwareLocation,
20
20
  LabwareLocationSequence,
21
21
  ModuleModel,
@@ -49,11 +49,11 @@ export interface SequenceSlotOnlyParams extends SequenceBaseParams {
49
49
  detailLevel: 'slot-only'
50
50
  }
51
51
  export interface LocationFullParams extends BaseParams {
52
- allRunDefs: LabwareDefinition2[]
52
+ allRunDefs: LabwareDefinition[]
53
53
  detailLevel?: 'full'
54
54
  }
55
55
  export interface SequenceFullParams extends SequenceBaseParams {
56
- allRunDefs: LabwareDefinition2[]
56
+ allRunDefs: LabwareDefinition[]
57
57
  detailLevel?: 'full'
58
58
  }
59
59
 
@@ -2,7 +2,7 @@ import { getLabwareDefURI, getLabwareDisplayName } from '@opentrons/shared-data'
2
2
 
3
3
  import { getLoadedLabware } from './getLoadedLabware'
4
4
 
5
- import type { LabwareDefinition2 } from '@opentrons/shared-data'
5
+ import type { LabwareDefinition } from '@opentrons/shared-data'
6
6
  import type { LoadedLabwares } from './types'
7
7
 
8
8
  const FIXED_TRASH_DEF_URIS = [
@@ -13,7 +13,7 @@ const FIXED_TRASH_DEF_URIS = [
13
13
  const LID_STACK_OBJECT_LOADNAME = 'protocol_engine_lid_stack_object'
14
14
 
15
15
  export interface GetLabwareNameParams {
16
- allRunDefs: LabwareDefinition2[]
16
+ allRunDefs: LabwareDefinition[]
17
17
  loadedLabwares: LoadedLabwares
18
18
  labwareId: string
19
19
  }
@@ -41,9 +41,7 @@ const DeckLabelSetComponent = (
41
41
  x={x}
42
42
  y={y}
43
43
  innerDivProps={{
44
- style: {
45
- transform: `rotate(180deg) scaleX(-1) scaleY(${invert ? '-1' : '1'})`,
46
- },
44
+ transform: `rotate(180deg) scaleX(-1) scaleY(${invert ? '-1' : '1'})`,
47
45
  }}
48
46
  >
49
47
  <Box position={POSITION_RELATIVE} width="100%" height="100%">
@@ -18,7 +18,6 @@ describe('FixtureOption', () => {
18
18
  onClickHandler: vi.fn(),
19
19
  optionName: 'mockOption',
20
20
  buttonText: 'mockText',
21
- isOnDevice: false,
22
21
  }
23
22
  render(props)
24
23
  screen.getByText('mockOption')
@@ -31,7 +30,6 @@ describe('FixtureOption', () => {
31
30
  onClickHandler: vi.fn(),
32
31
  optionName: 'mockOption',
33
32
  buttonText: 'mockText',
34
- isOnDevice: true,
35
33
  }
36
34
  render(props)
37
35
  screen.getByText('mockOption')
@@ -1,92 +1,63 @@
1
- import styled from 'styled-components'
2
-
3
1
  import { TertiaryButton } from '../../atoms/buttons'
2
+ import { ListItem } from '../../atoms/ListItem/index'
4
3
  import { StyledText } from '../../atoms/StyledText'
5
- import { BORDERS, COLORS } from '../../helix-design-system'
6
- import { Btn, Flex } from '../../primitives'
4
+ import { Flex } from '../../primitives'
7
5
  import {
8
6
  ALIGN_CENTER,
9
- CURSOR_DEFAULT,
10
- DIRECTION_ROW,
11
- DISPLAY_FLEX,
7
+ JUSTIFY_FLEX_END,
12
8
  JUSTIFY_SPACE_BETWEEN,
13
9
  } from '../../styles'
14
- import { SPACING, TYPOGRAPHY } from '../../ui-style-constants'
10
+ import { SPACING } from '../../ui-style-constants'
15
11
 
16
12
  import type { MouseEventHandler } from 'react'
17
13
 
18
14
  interface FixtureOptionProps {
19
15
  onClickHandler: MouseEventHandler
16
+ secondaryOnClickHandler?: MouseEventHandler
20
17
  optionName: string
18
+ secondaryButtonText?: string
21
19
  buttonText: string
22
- isOnDevice: boolean
23
20
  }
24
21
  export function FixtureOption(props: FixtureOptionProps): JSX.Element {
25
- const { onClickHandler, optionName, buttonText, isOnDevice } = props
26
- return isOnDevice ? (
27
- <FixtureButtonODD onClick={onClickHandler}>
28
- <StyledText
29
- oddStyle="bodyTextRegular"
30
- fontWeight={TYPOGRAPHY.fontWeightSemiBold}
31
- >
32
- {optionName}
33
- </StyledText>
34
- <StyledText oddStyle="bodyTextRegular">{buttonText}</StyledText>
35
- </FixtureButtonODD>
36
- ) : (
37
- <Flex
38
- flexDirection={DIRECTION_ROW}
22
+ const {
23
+ onClickHandler,
24
+ optionName,
25
+ buttonText,
26
+ secondaryOnClickHandler,
27
+ secondaryButtonText,
28
+ } = props
29
+ return (
30
+ <ListItem
31
+ type="default"
32
+ padding={`${SPACING.spacing16} ${SPACING.spacing24}`}
39
33
  alignItems={ALIGN_CENTER}
40
34
  justifyContent={JUSTIFY_SPACE_BETWEEN}
41
- padding={`${SPACING.spacing8} ${SPACING.spacing16}`}
42
- backgroundColor={COLORS.grey20}
43
- borderRadius={BORDERS.borderRadius4}
44
35
  >
45
- <StyledText desktopStyle="bodyDefaultSemiBold">{optionName}</StyledText>
46
- <TertiaryButton
47
- buttonType="primary"
48
- onClick={onClickHandler}
49
- data-testid={optionName}
36
+ <StyledText
37
+ desktopStyle="bodyDefaultSemiBold"
38
+ oddStyle="bodyTextSemiBold"
50
39
  >
51
- {buttonText}
52
- </TertiaryButton>
53
- </Flex>
40
+ {optionName}
41
+ </StyledText>
42
+ <Flex gridGap={SPACING.spacing4} justifyContent={JUSTIFY_FLEX_END}>
43
+ {secondaryOnClickHandler !== null &&
44
+ secondaryButtonText !== undefined ? (
45
+ <TertiaryButton
46
+ buttonType="secondary"
47
+ onClick={secondaryOnClickHandler}
48
+ data-testid={optionName}
49
+ >
50
+ {secondaryButtonText}
51
+ </TertiaryButton>
52
+ ) : null}
53
+ <TertiaryButton
54
+ buttonType="primary"
55
+ onClick={onClickHandler}
56
+ data-testid={optionName}
57
+ >
58
+ {buttonText}
59
+ </TertiaryButton>
60
+ </Flex>
61
+ </ListItem>
54
62
  )
55
63
  }
56
-
57
- export const FixtureButtonODD = styled(Btn)`
58
- display: ${DISPLAY_FLEX};
59
- background-color: ${COLORS.grey35};
60
- justify-content: ${JUSTIFY_SPACE_BETWEEN};
61
- flex-direction: ${DIRECTION_ROW};
62
- align-items: ${ALIGN_CENTER};
63
- cursor: ${CURSOR_DEFAULT};
64
- border-radius: ${BORDERS.borderRadius16};
65
- box-shadow: none;
66
- padding: ${SPACING.spacing16} ${SPACING.spacing24};
67
-
68
- &:focus {
69
- background-color: ${COLORS.grey40};
70
- box-shadow: none;
71
- }
72
-
73
- &:hover {
74
- border: none;
75
- box-shadow: none;
76
- background-color: ${COLORS.grey35};
77
- }
78
-
79
- &:focus-visible {
80
- box-shadow: 0 0 0 ${SPACING.spacing4} ${COLORS.blue50};
81
- background-color: ${COLORS.grey35};
82
- }
83
-
84
- &:active {
85
- background-color: ${COLORS.grey40};
86
- }
87
-
88
- &:disabled {
89
- background-color: ${COLORS.grey35};
90
- color: ${COLORS.grey50};
91
- }
92
- `
@@ -0,0 +1,118 @@
1
+ import { useMemo } from 'react'
2
+
3
+ import {
4
+ FLEX_ROBOT_TYPE,
5
+ getLabwareDefinitionsByURIForProtocol,
6
+ getLabwareInfoByLiquidId,
7
+ getLabwareOnDeck,
8
+ getSimplestDeckConfigForProtocol,
9
+ getStackedItemsOnStartingDeck,
10
+ getStacksOnModules,
11
+ getStandardDeckViewLayerBlockList,
12
+ getTopLabwareFromStack,
13
+ getWellFillFromLabwareId,
14
+ } from '@opentrons/shared-data'
15
+
16
+ import { BaseDeck } from '../../hardware-sim/BaseDeck'
17
+
18
+ import type { ComponentProps } from 'react'
19
+ import type {
20
+ CompletedProtocolAnalysis,
21
+ ProtocolAnalysisOutput,
22
+ } from '@opentrons/shared-data'
23
+ import type { LabwareOnDeck } from '../../hardware-sim/BaseDeck'
24
+
25
+ interface ProtocolDeckProps {
26
+ protocolAnalysis: CompletedProtocolAnalysis | ProtocolAnalysisOutput | null
27
+ /** extra props to pass through to BaseDeck component */
28
+ baseDeckProps?: Partial<ComponentProps<typeof BaseDeck>>
29
+ }
30
+
31
+ export function ProtocolDeck(props: ProtocolDeckProps): JSX.Element | null {
32
+ const { protocolAnalysis, baseDeckProps } = props
33
+ const startingDeck = useMemo(
34
+ () =>
35
+ getStackedItemsOnStartingDeck(
36
+ protocolAnalysis?.commands ?? [],
37
+ protocolAnalysis?.labware ?? [],
38
+ protocolAnalysis?.modules ?? []
39
+ ),
40
+ [protocolAnalysis]
41
+ )
42
+ const labwareDefinitionsByURI = useMemo(
43
+ () =>
44
+ getLabwareDefinitionsByURIForProtocol(protocolAnalysis?.commands ?? []),
45
+ [protocolAnalysis]
46
+ )
47
+ if (protocolAnalysis == null || (protocolAnalysis?.errors ?? []).length > 0)
48
+ return null
49
+
50
+ const robotType = protocolAnalysis.robotType ?? FLEX_ROBOT_TYPE
51
+ const deckConfig = getSimplestDeckConfigForProtocol(protocolAnalysis)
52
+ const labwareByLiquidId = getLabwareInfoByLiquidId(protocolAnalysis.commands)
53
+
54
+ const modulesOnDeck = Object.entries(getStacksOnModules(startingDeck)).map(
55
+ ([slotName, { allItemsInStack: stackedItems, moduleInStack: module }]) => {
56
+ const topLabwareInfo = getTopLabwareFromStack(stackedItems)
57
+ const topLabwareDefinition =
58
+ topLabwareInfo != null
59
+ ? labwareDefinitionsByURI[topLabwareInfo.definitionUri]
60
+ : null
61
+
62
+ return {
63
+ moduleModel: module.moduleModel,
64
+ moduleLocation: { slotName: module.moduleSlotName },
65
+ nestedLabwareDef: topLabwareDefinition,
66
+ nestedLabwareWellFill:
67
+ topLabwareInfo != null
68
+ ? getWellFillFromLabwareId(
69
+ topLabwareInfo.labwareId,
70
+ protocolAnalysis.liquids,
71
+ labwareByLiquidId
72
+ )
73
+ : undefined,
74
+ }
75
+ }
76
+ )
77
+
78
+ const labwareOnDeck: Array<LabwareOnDeck | null> = Object.entries(
79
+ getLabwareOnDeck(startingDeck)
80
+ ).map(([slotName, stackedItems]) => {
81
+ const topLabwareInfo = getTopLabwareFromStack(stackedItems)
82
+ const topLabwareDefinition =
83
+ topLabwareInfo != null
84
+ ? labwareDefinitionsByURI[topLabwareInfo.definitionUri]
85
+ : null
86
+ return topLabwareDefinition != null && topLabwareInfo != null
87
+ ? {
88
+ definition: topLabwareDefinition,
89
+ labwareLocation: { slotName },
90
+ wellFill: getWellFillFromLabwareId(
91
+ topLabwareInfo.labwareId,
92
+ protocolAnalysis.liquids,
93
+ labwareByLiquidId
94
+ ),
95
+ }
96
+ : null
97
+ })
98
+ const labwareOnDeckFiltered: LabwareOnDeck[] = labwareOnDeck.filter(
99
+ (labware): labware is LabwareOnDeck => labware != null
100
+ )
101
+
102
+ return (
103
+ <BaseDeck
104
+ deckConfig={deckConfig}
105
+ deckLayerBlocklist={getStandardDeckViewLayerBlockList(robotType)}
106
+ robotType={robotType}
107
+ labwareOnDeck={labwareOnDeckFiltered}
108
+ modulesOnDeck={modulesOnDeck}
109
+ {...{
110
+ svgProps: {
111
+ 'aria-label': 'protocol deck map',
112
+ ...(baseDeckProps?.svgProps ?? {}),
113
+ },
114
+ ...baseDeckProps,
115
+ }}
116
+ />
117
+ )
118
+ }
@@ -11,7 +11,7 @@ import { getCommandTextData } from './utils'
11
11
 
12
12
  import type {
13
13
  CompletedProtocolAnalysis,
14
- LabwareDefinition2,
14
+ LabwareDefinition,
15
15
  ProtocolAnalysisOutput,
16
16
  RobotType,
17
17
  RunTimeCommand,
@@ -24,7 +24,7 @@ interface CommandItemProps {
24
24
  setCurrentCommandIndex: (index: number) => void
25
25
  analysis: CompletedProtocolAnalysis | ProtocolAnalysisOutput
26
26
  robotType: RobotType
27
- allRunDefs: LabwareDefinition2[]
27
+ allRunDefs: LabwareDefinition[]
28
28
  }
29
29
  export function CommandItem({
30
30
  index,
@@ -60,7 +60,7 @@ export function PipetteMountViz(
60
60
  ) : null}
61
61
  {pipetteEntity != null && pipetteId != null ? (
62
62
  <PipetteSideView
63
- allNozzlesHaveTips={timelineFrame.tipState.pipettes[pipetteId]}
63
+ allNozzlesHaveTips={timelineFrame.tipState.pipettes[pipetteId].hasTip}
64
64
  allNozzleTipContents={Object.values(
65
65
  timelineFrame.liquidState.pipettes[pipetteId]
66
66
  )}
@@ -8,7 +8,7 @@ import { COLORS } from '../../helix-design-system'
8
8
 
9
9
  import type {
10
10
  CompletedProtocolAnalysis,
11
- LabwareDefinition2,
11
+ LabwareDefinition,
12
12
  ProtocolAnalysisOutput,
13
13
  RunTimeCommand,
14
14
  } from '@opentrons/shared-data'
@@ -41,7 +41,7 @@ export type ContentsByWell = {
41
41
 
42
42
  const MIXED_WELL_COLOR = COLORS.grey50
43
43
 
44
- function getAllWellsForLabware(def: LabwareDefinition2): string[] {
44
+ function getAllWellsForLabware(def: LabwareDefinition): string[] {
45
45
  return Object.keys(def.wells)
46
46
  }
47
47
 
@@ -64,7 +64,7 @@ function _wellContentsForWell(
64
64
 
65
65
  export function _wellContentsForLabware(
66
66
  labwareLiquids: SingleLabwareLiquidState,
67
- labwareDef: LabwareDefinition2
67
+ labwareDef: LabwareDefinition
68
68
  ): ContentsByWell {
69
69
  const allWellsForContainer = getAllWellsForLabware(labwareDef)
70
70
  return reduce(
@@ -3,3 +3,4 @@ export * from './Toolbox'
3
3
  export * from './ProtocolTimelineScrubber'
4
4
  export * from './CommandText'
5
5
  export * from './FixtureOption'
6
+ export * from './ProtocolDeck'
@@ -1,69 +1,28 @@
1
- import styled from 'styled-components'
1
+ import type { ReactElement, ReactNode } from 'react'
2
2
 
3
- import { isntStyleProp, styleProps } from './style-props'
4
-
5
- import type { ComponentProps } from 'react'
6
- import type { PrimitiveComponent, StyleProps } from './types'
7
-
8
- export interface ForeignObjectProps extends StyleProps {
9
- /** attach a width attribute to the <svg> element */
10
- svgWidth?: string | number
11
- /** attach a height attribute to the <svg> element */
12
- svgHeight?: string | number
13
- /**
14
- * internal helper prop to remap width style-prop to CSS
15
- * @internal
16
- */
17
- _cssWidth?: string | number
18
- /**
19
- * internal helper prop to remap height style-prop to CSS
20
- * @internal
21
- */
22
- _cssHeight?: string | number
3
+ export interface ForeignObjectProps {
4
+ width: string | number
5
+ height: string | number
6
+ x: string | number
7
+ y: string | number
8
+ children?: ReactNode
23
9
  }
24
10
 
25
- const SVG_PROPS = ['x', 'y', 'svgWidth', 'svgHeight', '_cssWidth', '_cssHeight']
26
-
27
11
  /**
28
12
  * Foreign Object styled atomic component
29
- *
30
13
  * @component
31
14
  */
32
- export const ForeignObject: PrimitiveComponent<
33
- 'foreignObject',
34
- ForeignObjectProps
35
- > = styled.foreignObject
36
- .withConfig({
37
- shouldForwardProp: p => {
38
- return (
39
- // do not forward style-props or Svg-props to the underlying <svg>
40
- (isntStyleProp(p) && !SVG_PROPS.includes(p)) ||
41
- // unlike other components; allow x, y, width, and height to be forwarded
42
- p === 'width' ||
43
- p === 'height' ||
44
- p === 'x' ||
45
- p === 'y'
46
- )
47
- },
48
- })
49
- .attrs(
50
- (props: ForeignObjectProps): ComponentProps<PrimitiveComponent<'svg'>> => ({
51
- // map the explicit svgWidth/Height props to width/height attrs
52
- width: props.svgWidth,
53
- height: props.svgHeight,
54
- // map width and height style props to internal style props
55
- _cssWidth: props.width,
56
- _cssHeight: props.height,
57
- })
58
- )`
59
- ${(props: Partial<ForeignObjectProps>) => {
60
- const { width, height, ...otherProps } = props
61
15
 
62
- // replace width and height attrs with internal style props
63
- return styleProps({
64
- ...otherProps,
65
- width: otherProps._cssWidth,
66
- height: otherProps._cssHeight,
67
- })
68
- }}
69
- `
16
+ export const ForeignObject = ({
17
+ width,
18
+ height,
19
+ x,
20
+ y,
21
+ children,
22
+ }: ForeignObjectProps): ReactElement => {
23
+ return (
24
+ <foreignObject x={x} y={y} width={width} height={height}>
25
+ {children}
26
+ </foreignObject>
27
+ )
28
+ }
@@ -64,6 +64,7 @@ const FLEXBOX_PROPS = [
64
64
 
65
65
  const GRID_PROPS = [
66
66
  'columnGap',
67
+ 'rowGap',
67
68
  'gridGap',
68
69
  'gridTemplateAreas',
69
70
  'gridTemplateRows',
@@ -1,8 +1,8 @@
1
1
  @import '../index.module.css';
2
2
 
3
3
  .slot_rect {
4
- stroke: var(--c-med-gray);
5
4
  fill: none;
5
+ stroke: var(--c-med-gray);
6
6
  }
7
7
 
8
8
  .slot_occupied {
@@ -1,9 +1,9 @@
1
1
  @import '../index.module.css';
2
2
 
3
3
  .pill {
4
+ padding: 0.5em;
4
5
  border-radius: var(--bd-radius-pill);
5
6
  color: var(--c-white);
6
- padding: 0.5em;
7
7
  }
8
8
 
9
9
  .pill:empty::before {
@@ -10,7 +10,7 @@
10
10
  position: absolute;
11
11
  top: 50%;
12
12
  left: 50%;
13
- transform: translate(-50%, -50%);
14
13
  max-height: 100%;
14
+ transform: translate(-50%, -50%);
15
15
  }
16
16
  }
@@ -1,7 +1,5 @@
1
1
  // structure components
2
-
3
- export * from './TitleBar'
4
- export * from './Card'
5
- export * from './Splash'
6
2
  export * from './LabeledValue'
7
3
  export * from './Pill'
4
+ export * from './Splash'
5
+ export * from './TitleBar'