@opentrons/components 0.1.6-alpha.9 → 0.1.7-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 (748) hide show
  1. package/README.md +1 -1
  2. package/lib/alerts/AlertItem.d.ts +3 -3
  3. package/lib/assets/localization/en/index.d.ts +104 -0
  4. package/lib/assets/localization/index.d.ts +188 -0
  5. package/lib/assets/localization/zh/index.d.ts +82 -0
  6. package/lib/atoms/Checkbox/index.d.ts +3 -2
  7. package/lib/atoms/CheckboxField/index.d.ts +4 -4
  8. package/lib/atoms/Divider/index.d.ts +2 -2
  9. package/lib/atoms/InputField/index.d.ts +10 -10
  10. package/lib/atoms/ListButton/ListButtonChildren/ListButtonAccordion.d.ts +2 -2
  11. package/lib/atoms/ListButton/ListButtonChildren/ListButtonAccordionContainer.d.ts +2 -2
  12. package/lib/atoms/ListButton/index.d.ts +4 -3
  13. package/lib/atoms/ListItem/ListItemChildren/ListItemCustomize.d.ts +2 -2
  14. package/lib/atoms/ListItem/ListItemChildren/ListItemDescriptor.d.ts +1 -0
  15. package/lib/atoms/ListItem/index.d.ts +3 -3
  16. package/lib/atoms/ListTable/index.d.ts +6 -0
  17. package/lib/atoms/MenuList/OverflowBtn.d.ts +3 -3
  18. package/lib/atoms/MenuList/index.d.ts +3 -3
  19. package/lib/atoms/StyledText/LegacyStyledText.d.ts +3 -3
  20. package/lib/atoms/StyledText/StyledText.d.ts +7 -3
  21. package/lib/atoms/SubListTable/index.d.ts +6 -0
  22. package/lib/atoms/Tag/index.d.ts +2 -1
  23. package/lib/atoms/Tooltip/index.d.ts +2 -2
  24. package/lib/atoms/buttons/LargeButton.d.ts +2 -2
  25. package/lib/atoms/buttons/RadioButton.d.ts +9 -4
  26. package/lib/atoms/buttons/SecondaryButton.d.ts +1 -0
  27. package/lib/atoms/buttons/TertiaryButton.d.ts +3 -0
  28. package/lib/atoms/buttons/index.d.ts +1 -0
  29. package/lib/atoms/index.d.ts +2 -0
  30. package/lib/buttons/Button.d.ts +4 -4
  31. package/lib/controls/ControlInfo.d.ts +2 -2
  32. package/lib/controls/LabeledButton.d.ts +2 -2
  33. package/lib/controls/LabeledCheckbox.d.ts +3 -3
  34. package/lib/controls/LabeledControl.d.ts +3 -3
  35. package/lib/controls/LabeledRadioGroup.d.ts +2 -2
  36. package/lib/controls/LabeledToggle.d.ts +2 -2
  37. package/lib/controls/StackedLabeledControl.d.ts +3 -3
  38. package/lib/controls/index.d.ts +0 -1
  39. package/lib/forms/DeprecatedCheckboxField.d.ts +3 -3
  40. package/lib/forms/FormGroup.d.ts +2 -2
  41. package/lib/forms/LegacyInputField.d.ts +6 -6
  42. package/lib/forms/RadioGroup.d.ts +4 -4
  43. package/lib/forms/SelectField.d.ts +3 -3
  44. package/lib/forms/ToggleField.d.ts +2 -2
  45. package/lib/forms/index.d.ts +0 -1
  46. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +6 -6
  47. package/lib/hardware-sim/BaseDeck/SingleSlotFixture.d.ts +4 -4
  48. package/lib/hardware-sim/BaseDeck/SlotBase.d.ts +2 -2
  49. package/lib/hardware-sim/BaseDeck/SlotClip.d.ts +2 -2
  50. package/lib/hardware-sim/BaseDeck/StagingAreaFixture.d.ts +4 -4
  51. package/lib/hardware-sim/BaseDeck/WasteChuteFixture.d.ts +12 -3
  52. package/lib/hardware-sim/BaseDeck/WasteChuteStagingAreaFixture.d.ts +7 -4
  53. package/lib/hardware-sim/Deck/DeckFromLayers.d.ts +1 -0
  54. package/lib/hardware-sim/Deck/FlexTrash.d.ts +6 -1
  55. package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +2 -2
  56. package/lib/hardware-sim/Deck/OT2Layers.d.ts +5 -1
  57. package/lib/hardware-sim/Deck/RobotCoordsForeignDiv.d.ts +5 -3
  58. package/lib/hardware-sim/Deck/RobotCoordsForeignObject.d.ts +4 -4
  59. package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +4 -3
  60. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +2 -2
  61. package/lib/hardware-sim/Deck/__mocks__/getDeckDefinitions.d.ts +1 -1
  62. package/lib/hardware-sim/DeckConfigurator/FlexStackerFixture.d.ts +11 -0
  63. package/lib/hardware-sim/DeckConfigurator/index.d.ts +3 -3
  64. package/lib/hardware-sim/DeckSlotLocation/index.d.ts +4 -4
  65. package/lib/hardware-sim/Labware/Labware.d.ts +2 -2
  66. package/lib/hardware-sim/Labware/LabwareRender.d.ts +2 -2
  67. package/lib/hardware-sim/Labware/LabwareStackRender.d.ts +2 -2
  68. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +3 -3
  69. package/lib/hardware-sim/Labware/labwareInternals/LabwareWellLabels.d.ts +2 -2
  70. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +2 -2
  71. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +3 -3
  72. package/lib/hardware-sim/Labware/labwareInternals/StyledWells.d.ts +5 -5
  73. package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +5 -5
  74. package/lib/hardware-sim/Labware/labwareInternals/WellLabels.d.ts +2 -2
  75. package/lib/hardware-sim/Labware/labwareInternals/types.d.ts +2 -2
  76. package/lib/hardware-sim/Module/ModuleTag.d.ts +2 -2
  77. package/lib/hardware-sim/Module/index.d.ts +4 -4
  78. package/lib/hardware-sim/ProtocolDeck/LabwareInfo.d.ts +2 -2
  79. package/lib/hardware-sim/ProtocolDeck/index.d.ts +4 -7
  80. package/lib/hardware-sim/ProtocolDeck/utils/index.d.ts +1 -0
  81. package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.d.ts +2 -2
  82. package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.d.ts +2 -2
  83. package/lib/hooks/index.d.ts +0 -1
  84. package/lib/hooks/useMenuHandleClickOutside.d.ts +3 -3
  85. package/lib/i18n.d.ts +14 -0
  86. package/lib/icons/Icon.d.ts +2 -2
  87. package/lib/icons/ModuleIcon.d.ts +1 -1
  88. package/lib/instrument/InstrumentInfo.d.ts +2 -2
  89. package/lib/interaction-enhancers/ClickOutside.d.ts +4 -3
  90. package/lib/interaction-enhancers/HandleKeypress.d.ts +4 -3
  91. package/lib/lists/SidePanelGroup.d.ts +2 -2
  92. package/lib/lists/TitledList.d.ts +8 -8
  93. package/lib/modals/AlertModal.d.ts +3 -3
  94. package/lib/modals/LegacyModal.d.ts +4 -4
  95. package/lib/modals/Modal.d.ts +7 -5
  96. package/lib/modals/ModalHeader.d.ts +5 -4
  97. package/lib/modals/ModalShell.d.ts +5 -5
  98. package/lib/modals/Overlay.d.ts +3 -3
  99. package/lib/modals/SpinnerModalPage.d.ts +2 -2
  100. package/lib/molecules/Banner/index.d.ts +4 -4
  101. package/lib/molecules/DeckInfoLabel/index.d.ts +3 -3
  102. package/lib/molecules/DeckLabel/index.d.ts +2 -1
  103. package/lib/molecules/DropdownMenu/index.d.ts +22 -6
  104. package/lib/molecules/InfoScreen/index.d.ts +3 -1
  105. package/lib/molecules/ListAccordion/index.d.ts +11 -0
  106. package/lib/molecules/ReleaseNotes/index.d.ts +5 -0
  107. package/lib/molecules/Tabs/index.d.ts +1 -0
  108. package/lib/molecules/TextListTableContent/__tests__/TextListTableContent.test.d.ts +1 -0
  109. package/lib/molecules/TextListTableContent/index.d.ts +8 -0
  110. package/lib/molecules/index.d.ts +3 -0
  111. package/lib/nav/SidePanel.d.ts +2 -2
  112. package/lib/organisms/CommandText/__tests__/CommandText.test.d.ts +1 -0
  113. package/lib/organisms/CommandText/fixtures/index.d.ts +2 -0
  114. package/lib/organisms/CommandText/index.d.ts +26 -0
  115. package/lib/organisms/CommandText/useCommandTextString/index.d.ts +30 -0
  116. package/lib/organisms/CommandText/useCommandTextString/utils/__tests__/formatDuration.test.d.ts +1 -0
  117. package/lib/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.d.ts +1 -0
  118. package/lib/organisms/CommandText/useCommandTextString/utils/__tests__/getLabwareDisplayLocation.test.d.ts +1 -0
  119. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.d.ts +1 -0
  120. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.d.ts +12 -0
  121. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getCommentCommandText.d.ts +3 -0
  122. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getConfigureForVolumeCommandText.d.ts +3 -0
  123. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getConfigureNozzleLayoutCommandText.d.ts +3 -0
  124. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getCustomCommandText.d.ts +3 -0
  125. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getDelayCommandText.d.ts +3 -0
  126. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getDirectTranslationCommandText.d.ts +11 -0
  127. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.d.ts +9 -0
  128. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getHSShakeSpeedCommandText.d.ts +3 -0
  129. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getLiquidProbeCommandText.d.ts +5 -0
  130. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getLoadCommandText.d.ts +2 -0
  131. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveLabwareCommandText.d.ts +3 -0
  132. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveRelativeCommandText.d.ts +3 -0
  133. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToAddressableAreaCommandText.d.ts +3 -0
  134. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToAddressableAreaForDropTipCommandText.d.ts +3 -0
  135. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToCoordinatesCommandText.d.ts +3 -0
  136. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToSlotCommandText.d.ts +3 -0
  137. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.d.ts +3 -0
  138. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.d.ts +2 -0
  139. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getPrepareToAspirateCommandText.d.ts +3 -0
  140. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getRailLightsCommandText.d.ts +8 -0
  141. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.d.ts +13 -0
  142. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunProfileCommandText.d.ts +4 -0
  143. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.d.ts +12 -0
  144. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getUnknownCommandText.d.ts +2 -0
  145. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getWaitForDurationCommandText.d.ts +3 -0
  146. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getWaitForResumeCommandText.d.ts +3 -0
  147. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/index.d.ts +26 -0
  148. package/lib/organisms/CommandText/useCommandTextString/utils/formatDuration.d.ts +8 -0
  149. package/lib/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.d.ts +3 -0
  150. package/lib/organisms/CommandText/useCommandTextString/utils/getFinalAddressableAreaCmd.d.ts +8 -0
  151. package/lib/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.d.ts +12 -0
  152. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.d.ts +2 -0
  153. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.d.ts +15 -0
  154. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +37 -0
  155. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareName.d.ts +8 -0
  156. package/lib/organisms/CommandText/useCommandTextString/utils/getLiquidDisplayName.d.ts +2 -0
  157. package/lib/organisms/CommandText/useCommandTextString/utils/getLoadedLabware.d.ts +3 -0
  158. package/lib/organisms/CommandText/useCommandTextString/utils/getLoadedModule.d.ts +3 -0
  159. package/lib/organisms/CommandText/useCommandTextString/utils/getModuleDisplayLocation.d.ts +2 -0
  160. package/lib/organisms/CommandText/useCommandTextString/utils/getModuleModel.d.ts +3 -0
  161. package/lib/organisms/CommandText/useCommandTextString/utils/getPipetteNameOnMount.d.ts +4 -0
  162. package/lib/organisms/CommandText/useCommandTextString/utils/getWellRange.d.ts +8 -0
  163. package/lib/organisms/CommandText/useCommandTextString/utils/helpers.d.ts +1 -0
  164. package/lib/organisms/CommandText/useCommandTextString/utils/index.d.ts +10 -0
  165. package/lib/organisms/CommandText/useCommandTextString/utils/types.d.ts +8 -0
  166. package/lib/organisms/DeckLabelSet/index.d.ts +3 -2
  167. package/lib/organisms/ProtocolTimelineScrubber/CommandItem.d.ts +12 -0
  168. package/lib/organisms/ProtocolTimelineScrubber/PipetteVisuals.d.ts +25 -0
  169. package/lib/organisms/ProtocolTimelineScrubber/index.d.ts +10 -0
  170. package/lib/organisms/ProtocolTimelineScrubber/types.d.ts +2 -0
  171. package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +23 -0
  172. package/lib/organisms/Toolbox/index.d.ts +5 -8
  173. package/lib/organisms/index.d.ts +2 -1
  174. package/lib/primitives/style-props.d.ts +4 -1
  175. package/lib/primitives/types.d.ts +2 -1
  176. package/lib/structure/Card.d.ts +3 -3
  177. package/lib/structure/LabeledValue.d.ts +3 -3
  178. package/lib/structure/Pill.d.ts +2 -2
  179. package/lib/structure/TitleBar.d.ts +4 -4
  180. package/lib/testing/utils/renderWithProviders.d.ts +3 -3
  181. package/lib/tooltips/DeprecatedTooltip.d.ts +6 -6
  182. package/lib/tooltips/HoverTooltip.d.ts +4 -3
  183. package/lib/tooltips/LegacyTooltip.d.ts +5 -6
  184. package/lib/tooltips/types.d.ts +4 -4
  185. package/lib/ui-style-constants/animation.d.ts +1 -0
  186. package/lib/ui-style-constants/index.d.ts +1 -0
  187. package/package.json +7 -3
  188. package/src/__mocks__/file.js +10 -0
  189. package/src/__tests__/utils.test.ts +27 -0
  190. package/src/alerts/AlertItem.stories.tsx +49 -0
  191. package/src/alerts/AlertItem.tsx +85 -0
  192. package/src/alerts/alerts.module.css +103 -0
  193. package/src/alerts/index.ts +3 -0
  194. package/src/assets/localization/en/index.ts +8 -0
  195. package/src/assets/localization/en/protocol_command_text.json +102 -0
  196. package/src/assets/localization/index.ts +7 -0
  197. package/src/assets/localization/zh/index.ts +8 -0
  198. package/src/assets/localization/zh/protocol_command_text.json +80 -0
  199. package/src/atoms/Checkbox/Checkbox.stories.tsx +24 -0
  200. package/src/atoms/Checkbox/__tests__/Checkbox.test.tsx +56 -0
  201. package/src/atoms/Checkbox/index.tsx +133 -0
  202. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +30 -0
  203. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +142 -0
  204. package/src/atoms/CheckboxField/index.tsx +172 -0
  205. package/src/atoms/Chip/Chip.stories.tsx +66 -0
  206. package/src/atoms/Chip/__tests__/Chip.test.tsx +430 -0
  207. package/src/atoms/Chip/index.tsx +172 -0
  208. package/src/atoms/Divider/index.tsx +16 -0
  209. package/src/atoms/InputField/InputField.stories.tsx +77 -0
  210. package/src/atoms/InputField/__tests__/InputField.test.tsx +64 -0
  211. package/src/atoms/InputField/index.tsx +384 -0
  212. package/src/atoms/ListButton/ListButton.stories.tsx +140 -0
  213. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordion.tsx +66 -0
  214. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordionContainer.tsx +24 -0
  215. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +108 -0
  216. package/src/atoms/ListButton/ListButtonChildren/index.ts +3 -0
  217. package/src/atoms/ListButton/__tests__/ListButton.test.tsx +53 -0
  218. package/src/atoms/ListButton/__tests__/ListButtonAccordion.test.tsx +36 -0
  219. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +28 -0
  220. package/src/atoms/ListButton/index.tsx +131 -0
  221. package/src/atoms/ListItem/ListItem.stories.tsx +126 -0
  222. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +78 -0
  223. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +42 -0
  224. package/src/atoms/ListItem/ListItemChildren/index.ts +2 -0
  225. package/src/atoms/ListItem/__tests__/ListItem.test.tsx +102 -0
  226. package/src/atoms/ListItem/index.tsx +106 -0
  227. package/src/atoms/ListTable/ListTable.stories.tsx +70 -0
  228. package/src/atoms/ListTable/__tests__/ListTable.test.tsx +81 -0
  229. package/src/atoms/ListTable/index.tsx +92 -0
  230. package/src/atoms/MenuList/MenuItem.stories.tsx +30 -0
  231. package/src/atoms/MenuList/MenuItem.tsx +55 -0
  232. package/src/atoms/MenuList/MenuList.stories.tsx +31 -0
  233. package/src/atoms/MenuList/OverflowBtn.stories.tsx +17 -0
  234. package/src/atoms/MenuList/OverflowBtn.tsx +78 -0
  235. package/src/atoms/MenuList/__tests__/MenuItem.test.tsx +51 -0
  236. package/src/atoms/MenuList/__tests__/MenuList.test.tsx +37 -0
  237. package/src/atoms/MenuList/__tests__/OverflowBtn.test.tsx +34 -0
  238. package/src/atoms/MenuList/index.tsx +50 -0
  239. package/src/atoms/Snackbar/Snackbar.stories.tsx +67 -0
  240. package/src/atoms/Snackbar/__tests__/Snackbar.test.tsx +74 -0
  241. package/src/atoms/Snackbar/index.tsx +91 -0
  242. package/src/atoms/StepMeter/index.tsx +53 -0
  243. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +106 -0
  244. package/src/atoms/StyledText/LegacyStyledText.tsx +95 -0
  245. package/src/atoms/StyledText/StyledText.stories.tsx +46 -0
  246. package/src/atoms/StyledText/StyledText.tsx +332 -0
  247. package/src/atoms/StyledText/index.ts +2 -0
  248. package/src/atoms/SubListTable/SubListTable.stories.tsx +72 -0
  249. package/src/atoms/SubListTable/__tests__/SubListTable.test.tsx +81 -0
  250. package/src/atoms/SubListTable/index.tsx +71 -0
  251. package/src/atoms/Tag/Tag.stories.tsx +49 -0
  252. package/src/atoms/Tag/__tests__/Tag.test.tsx +56 -0
  253. package/src/atoms/Tag/index.tsx +115 -0
  254. package/src/atoms/Toast/ODDToast.stories.tsx +68 -0
  255. package/src/atoms/Toast/Toast.stories.tsx +64 -0
  256. package/src/atoms/Toast/__tests__/ODDToast.test.tsx +179 -0
  257. package/src/atoms/Toast/__tests__/Toast.test.tsx +175 -0
  258. package/src/atoms/Toast/index.tsx +439 -0
  259. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +39 -0
  260. package/src/atoms/ToggleGroup/__tests__/ToggleGroup.test.tsx +29 -0
  261. package/src/atoms/ToggleGroup/index.tsx +90 -0
  262. package/src/atoms/Tooltip/Tooltip.stories.tsx +99 -0
  263. package/src/atoms/Tooltip/__tests__/Tooltip.test.tsx +79 -0
  264. package/src/atoms/Tooltip/index.tsx +37 -0
  265. package/src/atoms/buttons/AlertPrimaryButton.tsx +26 -0
  266. package/src/atoms/buttons/AltPrimaryButton.tsx +31 -0
  267. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +36 -0
  268. package/src/atoms/buttons/EmptySelectorButton.tsx +82 -0
  269. package/src/atoms/buttons/LargeButton.stories.tsx +106 -0
  270. package/src/atoms/buttons/LargeButton.tsx +322 -0
  271. package/src/atoms/buttons/PrimaryButton.tsx +36 -0
  272. package/src/atoms/buttons/RadioButton.stories.tsx +108 -0
  273. package/src/atoms/buttons/RadioButton.tsx +268 -0
  274. package/src/atoms/buttons/SecondaryButton.tsx +88 -0
  275. package/src/atoms/buttons/TertiaryButton.tsx +88 -0
  276. package/src/atoms/buttons/__tests__/AlertPrimaryButton.test.tsx +48 -0
  277. package/src/atoms/buttons/__tests__/AltPrimaryButton.test.tsx +58 -0
  278. package/src/atoms/buttons/__tests__/EmptySelectorButton.test.tsx +43 -0
  279. package/src/atoms/buttons/__tests__/LargeButton.test.tsx +92 -0
  280. package/src/atoms/buttons/__tests__/PrimaryButton.test.tsx +65 -0
  281. package/src/atoms/buttons/__tests__/RadioButton.test.tsx +105 -0
  282. package/src/atoms/buttons/__tests__/SecondaryButton.test.tsx +55 -0
  283. package/src/atoms/buttons/buttons.stories.tsx +78 -0
  284. package/src/atoms/buttons/index.ts +7 -0
  285. package/src/atoms/index.ts +22 -0
  286. package/src/barrel.ts +10 -0
  287. package/src/buttons/Button.tsx +96 -0
  288. package/src/buttons/DeprecatedPrimaryButton.tsx +24 -0
  289. package/src/buttons/FlatButton.tsx +21 -0
  290. package/src/buttons/IconButton.tsx +37 -0
  291. package/src/buttons/OutlineButton.tsx +24 -0
  292. package/src/buttons/buttons.module.css +428 -0
  293. package/src/buttons/index.ts +7 -0
  294. package/src/controls/ControlInfo.tsx +13 -0
  295. package/src/controls/LabeledButton.tsx +28 -0
  296. package/src/controls/LabeledCheckbox.tsx +36 -0
  297. package/src/controls/LabeledControl.tsx +24 -0
  298. package/src/controls/LabeledRadioGroup.tsx +26 -0
  299. package/src/controls/LabeledToggle.tsx +35 -0
  300. package/src/controls/StackedLabeledControl.tsx +28 -0
  301. package/src/controls/ToggleButton.tsx +25 -0
  302. package/src/controls/index.ts +9 -0
  303. package/src/controls/styles.module.css +103 -0
  304. package/src/forms/DeprecatedCheckboxField.stories.tsx +31 -0
  305. package/src/forms/DeprecatedCheckboxField.tsx +95 -0
  306. package/src/forms/FormGroup.stories.tsx +31 -0
  307. package/src/forms/FormGroup.tsx +54 -0
  308. package/src/forms/InputField.stories.tsx +41 -0
  309. package/src/forms/LegacyInputField.tsx +129 -0
  310. package/src/forms/RadioGroup.stories.tsx +44 -0
  311. package/src/forms/RadioGroup.tsx +88 -0
  312. package/src/forms/Select.module.css +118 -0
  313. package/src/forms/Select.stories.tsx +117 -0
  314. package/src/forms/Select.tsx +132 -0
  315. package/src/forms/SelectField.module.css +16 -0
  316. package/src/forms/SelectField.tsx +94 -0
  317. package/src/forms/ToggleField.stories.tsx +31 -0
  318. package/src/forms/ToggleField.tsx +60 -0
  319. package/src/forms/__tests__/DeprecatedCheckboxField.test.tsx +5 -0
  320. package/src/forms/__tests__/InputField.test.tsx +5 -0
  321. package/src/forms/__tests__/Select.test.tsx +5 -0
  322. package/src/forms/__tests__/SelectField.test.tsx +5 -0
  323. package/src/forms/__tests__/ToggleField.test.tsx +5 -0
  324. package/src/forms/forms.module.css +239 -0
  325. package/src/forms/index.ts +7 -0
  326. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +94 -0
  327. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +428 -0
  328. package/src/hardware-sim/BaseDeck/SingleSlotFixture.tsx +198 -0
  329. package/src/hardware-sim/BaseDeck/SlotBase.tsx +5 -0
  330. package/src/hardware-sim/BaseDeck/SlotClip.tsx +15 -0
  331. package/src/hardware-sim/BaseDeck/StagingAreaFixture.tsx +113 -0
  332. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +158 -0
  333. package/src/hardware-sim/BaseDeck/WasteChuteStagingAreaFixture.tsx +73 -0
  334. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +165 -0
  335. package/src/hardware-sim/BaseDeck/index.ts +5 -0
  336. package/src/hardware-sim/Deck/DeckFromLayers.tsx +60 -0
  337. package/src/hardware-sim/Deck/FlexTrash.tsx +147 -0
  338. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +97 -0
  339. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +287 -0
  340. package/src/hardware-sim/Deck/OT2Layers.tsx +160 -0
  341. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +51 -0
  342. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +43 -0
  343. package/src/hardware-sim/Deck/RobotCoordsText.tsx +33 -0
  344. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +98 -0
  345. package/src/hardware-sim/Deck/SlotLabels.tsx +111 -0
  346. package/src/hardware-sim/Deck/__mocks__/getDeckDefinitions.ts +29 -0
  347. package/src/hardware-sim/Deck/constants.ts +12 -0
  348. package/src/hardware-sim/Deck/index.tsx +8 -0
  349. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +91 -0
  350. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +110 -0
  351. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +131 -0
  352. package/src/hardware-sim/DeckConfigurator/FlexStackerFixture.tsx +99 -0
  353. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +102 -0
  354. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +130 -0
  355. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +89 -0
  356. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +54 -0
  357. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +103 -0
  358. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +89 -0
  359. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +99 -0
  360. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +96 -0
  361. package/src/hardware-sim/DeckConfigurator/constants.ts +81 -0
  362. package/src/hardware-sim/DeckConfigurator/index.tsx +305 -0
  363. package/src/hardware-sim/DeckSlotLocation/index.tsx +88 -0
  364. package/src/hardware-sim/Labware/Labware.tsx +175 -0
  365. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96DeepWellAdapter.tsx +23 -0
  366. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96FlatBottomAdapter.tsx +7 -0
  367. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAluminumFlatBottomPlate.tsx +13 -0
  368. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx +100 -0
  369. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsFlex96TiprackAdapter.tsx +13 -0
  370. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx +83 -0
  371. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsUniversalFlatAdapter.tsx +13 -0
  372. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +73 -0
  373. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +96 -0
  374. package/src/hardware-sim/Labware/LabwareRender.tsx +174 -0
  375. package/src/hardware-sim/Labware/LabwareStackRender.tsx +273 -0
  376. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +43 -0
  377. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +54 -0
  378. package/src/hardware-sim/Labware/index.ts +6 -0
  379. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +41 -0
  380. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +133 -0
  381. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +119 -0
  382. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +122 -0
  383. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +40 -0
  384. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +79 -0
  385. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +75 -0
  386. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +123 -0
  387. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +66 -0
  388. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +31 -0
  389. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +91 -0
  390. package/src/hardware-sim/Labware/labwareInternals/index.ts +8 -0
  391. package/src/hardware-sim/Labware/labwareInternals/types.ts +18 -0
  392. package/src/hardware-sim/Module/HeaterShaker.tsx +83 -0
  393. package/src/hardware-sim/Module/MagneticBlock.tsx +49 -0
  394. package/src/hardware-sim/Module/MagneticModule.tsx +51 -0
  395. package/src/hardware-sim/Module/Module.stories.tsx +90 -0
  396. package/src/hardware-sim/Module/ModuleTag.tsx +39 -0
  397. package/src/hardware-sim/Module/PlateReader.tsx +208 -0
  398. package/src/hardware-sim/Module/Temperature.tsx +54 -0
  399. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +248 -0
  400. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN2.tsx +286 -0
  401. package/src/hardware-sim/Module/Thermocycler/index.tsx +49 -0
  402. package/src/hardware-sim/Module/index.tsx +223 -0
  403. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +23 -0
  404. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +53 -0
  405. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +71 -0
  406. package/src/hardware-sim/Pipette/PipetteRender.tsx +86 -0
  407. package/src/hardware-sim/Pipette/__tests__/EightEmanatingNozzles.test.tsx +16 -0
  408. package/src/hardware-sim/Pipette/__tests__/EmanatingNozzle.test.tsx +68 -0
  409. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +99 -0
  410. package/src/hardware-sim/Pipette/constants.ts +10 -0
  411. package/src/hardware-sim/Pipette/index.ts +1 -0
  412. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +69 -0
  413. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +25 -0
  414. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +47145 -0
  415. package/src/hardware-sim/ProtocolDeck/index.tsx +85 -0
  416. package/src/hardware-sim/ProtocolDeck/types.ts +6 -0
  417. package/src/hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.ts +158 -0
  418. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +33 -0
  419. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +321 -0
  420. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +43 -0
  421. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +129 -0
  422. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +29 -0
  423. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +30 -0
  424. package/src/hardware-sim/ProtocolDeck/utils/index.ts +4 -0
  425. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +29 -0
  426. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +51 -0
  427. package/src/hardware-sim/RobotCoordinateSpace/index.ts +2 -0
  428. package/src/hardware-sim/index.ts +11 -0
  429. package/src/hardware-sim/utils.ts +18 -0
  430. package/src/helix-design-system/borders.ts +32 -0
  431. package/src/helix-design-system/colors.ts +100 -0
  432. package/src/helix-design-system/index.ts +4 -0
  433. package/src/helix-design-system/product/index.ts +1 -0
  434. package/src/helix-design-system/product/typography.ts +151 -0
  435. package/src/helix-design-system/style.ts +2 -0
  436. package/src/hooks/__tests__/useConditionalConfirm.test.tsx +5 -0
  437. package/src/hooks/__tests__/useDrag.test.ts +46 -0
  438. package/src/hooks/__tests__/useInterval.test.tsx +5 -0
  439. package/src/hooks/__tests__/useLongPress.test.ts +25 -0
  440. package/src/hooks/__tests__/useMountEffect.test.tsx +5 -0
  441. package/src/hooks/__tests__/usePrevious.test.tsx +5 -0
  442. package/src/hooks/__tests__/useScrolling.test.tsx +46 -0
  443. package/src/hooks/__tests__/useSwipe.test.tsx +26 -0
  444. package/src/hooks/__tests__/useTimeout.test.tsx +5 -0
  445. package/src/hooks/__tests__/useToggle.test.tsx +5 -0
  446. package/src/hooks/index.ts +14 -0
  447. package/src/hooks/useConditionalConfirm.ts +70 -0
  448. package/src/hooks/useDrag.ts +90 -0
  449. package/src/hooks/useInterval.ts +37 -0
  450. package/src/hooks/useLongPress.ts +83 -0
  451. package/src/hooks/useMenuHandleClickOutside.tsx +46 -0
  452. package/src/hooks/useMountEffect.ts +12 -0
  453. package/src/hooks/usePrevious.ts +19 -0
  454. package/src/hooks/useScrolling.ts +33 -0
  455. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +55 -0
  456. package/src/hooks/useSelectDeckLocation/index.tsx +331 -0
  457. package/src/hooks/useSwipe.ts +86 -0
  458. package/src/hooks/useTimeout.ts +33 -0
  459. package/src/hooks/useToggle.ts +27 -0
  460. package/src/i18n.ts +61 -0
  461. package/src/icons/Icon.stories.tsx +44 -0
  462. package/src/icons/Icon.tsx +79 -0
  463. package/src/icons/IconList.stories.tsx +108 -0
  464. package/src/icons/ModuleIcon.tsx +51 -0
  465. package/src/icons/NotificationIcon.tsx +41 -0
  466. package/src/icons/icon-data.ts +821 -0
  467. package/src/icons/index.ts +6 -0
  468. package/src/images/index.ts +1 -0
  469. package/src/images/labware/index.ts +1 -0
  470. package/src/images/labware/measurement-guide/images/depth/depth-plate-flat@3x.png +0 -0
  471. package/src/images/labware/measurement-guide/images/depth/depth-plate-round@3x.png +0 -0
  472. package/src/images/labware/measurement-guide/images/depth/depth-plate-v@3x.png +0 -0
  473. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-flat@3x.png +0 -0
  474. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-round@3x.png +0 -0
  475. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-v@3x.png +0 -0
  476. package/src/images/labware/measurement-guide/images/depth/length-tip-rack@3x.png +0 -0
  477. package/src/images/labware/measurement-guide/images/dimensions/footprint@3x.png +0 -0
  478. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-plate@3x.png +0 -0
  479. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-tubes@3x.png +0 -0
  480. package/src/images/labware/measurement-guide/images/dimensions/height-plate-and-reservoir@3x.png +0 -0
  481. package/src/images/labware/measurement-guide/images/dimensions/height-tip-rack@3x.png +0 -0
  482. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack-irregular@3x.png +0 -0
  483. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack@3x.png +0 -0
  484. package/src/images/labware/measurement-guide/images/offset/offset-reservoir@3x.png +0 -0
  485. package/src/images/labware/measurement-guide/images/offset/offset-well-circular@3x.png +0 -0
  486. package/src/images/labware/measurement-guide/images/offset/offset-well-rectangular@3x.png +0 -0
  487. package/src/images/labware/measurement-guide/images/shape/shape-circular@3x.png +0 -0
  488. package/src/images/labware/measurement-guide/images/shape/shape-rectangular@3x.png +0 -0
  489. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir-multi-row@3x.png +0 -0
  490. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir@3x.png +0 -0
  491. package/src/images/labware/measurement-guide/images/spacing/spacing-well-circular@3x.png +0 -0
  492. package/src/images/labware/measurement-guide/images/spacing/spacing-well-rectangular@3x.png +0 -0
  493. package/src/images/labware/measurement-guide/index.ts +272 -0
  494. package/src/index.module.css +9 -0
  495. package/src/index.ts +41 -0
  496. package/src/instrument/InstrumentDiagram.stories.tsx +42 -0
  497. package/src/instrument/InstrumentDiagram.tsx +58 -0
  498. package/src/instrument/InstrumentGroup.stories.tsx +88 -0
  499. package/src/instrument/InstrumentGroup.tsx +35 -0
  500. package/src/instrument/InstrumentInfo.tsx +106 -0
  501. package/src/instrument/PipetteSelect.module.css +14 -0
  502. package/src/instrument/PipetteSelect.stories.tsx +40 -0
  503. package/src/instrument/PipetteSelect.tsx +170 -0
  504. package/src/instrument/__tests__/InstrumentInfo.test.tsx +56 -0
  505. package/src/instrument/__tests__/PipetteSelect.test.tsx +4 -0
  506. package/src/instrument/eight-channel-flex.png +0 -0
  507. package/src/instrument/index.ts +4 -0
  508. package/src/instrument/instrument.module.css +45 -0
  509. package/src/instrument/multi-channel_GEN1_800px.png +0 -0
  510. package/src/instrument/multi-channel_GEN2_800px.png +0 -0
  511. package/src/instrument/ninety-six-channel-gen1.png +0 -0
  512. package/src/instrument/pipetteGEN2Multi.png +0 -0
  513. package/src/instrument/pipetteGEN2Single.png +0 -0
  514. package/src/instrument/pipetteMulti.png +0 -0
  515. package/src/instrument/pipetteSingle.png +0 -0
  516. package/src/instrument/single-channel-flex.png +0 -0
  517. package/src/instrument/single-channel_GEN2_800px.png +0 -0
  518. package/src/instrument/single_channel_GEN1_800px.png +0 -0
  519. package/src/interaction-enhancers/ClickOutside.ts +58 -0
  520. package/src/interaction-enhancers/HandleKeypress.tsx +71 -0
  521. package/src/interaction-enhancers/__tests__/useHover.test.tsx +4 -0
  522. package/src/interaction-enhancers/index.ts +4 -0
  523. package/src/interaction-enhancers/useHover.ts +84 -0
  524. package/src/interaction-enhancers/useOnClickOutside.ts +42 -0
  525. package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +20 -0
  526. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +22 -0
  527. package/src/legacy-hardware-sim/ModuleItem.module.css +98 -0
  528. package/src/legacy-hardware-sim/ModuleItem.tsx +145 -0
  529. package/src/legacy-hardware-sim/index.ts +2 -0
  530. package/src/lists/SidePanelGroup.tsx +48 -0
  531. package/src/lists/TitledList.tsx +155 -0
  532. package/src/lists/index.ts +3 -0
  533. package/src/lists/lists.module.css +171 -0
  534. package/src/modals/AlertModal.tsx +89 -0
  535. package/src/modals/ContinueModal.tsx +32 -0
  536. package/src/modals/LegacyModal.tsx +61 -0
  537. package/src/modals/Modal.stories.tsx +45 -0
  538. package/src/modals/Modal.tsx +101 -0
  539. package/src/modals/ModalHeader.tsx +110 -0
  540. package/src/modals/ModalShell.tsx +157 -0
  541. package/src/modals/Overlay.tsx +39 -0
  542. package/src/modals/SpinnerModal.tsx +35 -0
  543. package/src/modals/SpinnerModalPage.tsx +29 -0
  544. package/src/modals/__tests__/Modal.test.tsx +66 -0
  545. package/src/modals/__tests__/ModalHeader.test.tsx +69 -0
  546. package/src/modals/__tests__/ModalShell.test.tsx +46 -0
  547. package/src/modals/index.ts +10 -0
  548. package/src/modals/modals.module.css +275 -0
  549. package/src/molecules/Banner/Banner.stories.tsx +51 -0
  550. package/src/molecules/Banner/__tests__/Banner.test.tsx +95 -0
  551. package/src/molecules/Banner/index.tsx +148 -0
  552. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +65 -0
  553. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +50 -0
  554. package/src/molecules/DeckInfoLabel/index.tsx +95 -0
  555. package/src/molecules/DeckLabel/DeckLabel.stories.tsx +31 -0
  556. package/src/molecules/DeckLabel/__tests__/DeckLabel.test.tsx +71 -0
  557. package/src/molecules/DeckLabel/index.tsx +82 -0
  558. package/src/molecules/DropdownMenu/DropdownMenu.stories.tsx +30 -0
  559. package/src/molecules/DropdownMenu/__tests__/DropdownMenu.test.tsx +86 -0
  560. package/src/molecules/DropdownMenu/index.tsx +432 -0
  561. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +50 -0
  562. package/src/molecules/InfoScreen/__tests__/InfoScreen.test.tsx +57 -0
  563. package/src/molecules/InfoScreen/index.tsx +54 -0
  564. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +53 -0
  565. package/src/molecules/LiquidIcon/__tests__/LiquidIcon.test.tsx +51 -0
  566. package/src/molecules/LiquidIcon/index.tsx +68 -0
  567. package/src/molecules/ListAccordion/ListAccordion.stories.tsx +128 -0
  568. package/src/molecules/ListAccordion/__tests__/ListAccordion.test.tsx +123 -0
  569. package/src/molecules/ListAccordion/index.tsx +182 -0
  570. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +172 -0
  571. package/src/molecules/ParametersTable/__tests__/ParametersTable.test.tsx +126 -0
  572. package/src/molecules/ParametersTable/index.tsx +198 -0
  573. package/src/molecules/ReleaseNotes/index.tsx +70 -0
  574. package/src/molecules/ReleaseNotes/styles.module.css +66 -0
  575. package/src/molecules/Tabs/Tabs.stories.tsx +74 -0
  576. package/src/molecules/Tabs/__tests__/Tabs.test.tsx +91 -0
  577. package/src/molecules/Tabs/index.tsx +115 -0
  578. package/src/molecules/TextListTableContent/TextListTableContent.stories.tsx +114 -0
  579. package/src/molecules/TextListTableContent/__tests__/TextListTableContent.test.tsx +44 -0
  580. package/src/molecules/TextListTableContent/index.tsx +45 -0
  581. package/src/molecules/index.ts +11 -0
  582. package/src/nav/SidePanel.module.css +34 -0
  583. package/src/nav/SidePanel.stories.tsx +29 -0
  584. package/src/nav/SidePanel.tsx +22 -0
  585. package/src/nav/index.ts +2 -0
  586. package/src/organisms/CommandText/CommandText.stories.tsx +78 -0
  587. package/src/organisms/CommandText/__tests__/CommandText.test.tsx +1670 -0
  588. package/src/organisms/CommandText/fixtures/index.ts +4 -0
  589. package/src/organisms/CommandText/fixtures/mockRobotSideAnalysis.json +6609 -0
  590. package/src/organisms/CommandText/index.tsx +278 -0
  591. package/src/organisms/CommandText/useCommandTextString/index.ts +315 -0
  592. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/formatDuration.test.tsx +92 -0
  593. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +130 -0
  594. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getLabwareDisplayLocation.test.tsx +185 -0
  595. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +187 -0
  596. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts +53 -0
  597. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getCommentCommandText.ts +10 -0
  598. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getConfigureForVolumeCommandText.ts +21 -0
  599. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getConfigureNozzleLayoutCommandText.ts +29 -0
  600. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getCustomCommandText.ts +16 -0
  601. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getDelayCommandText.ts +20 -0
  602. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getDirectTranslationCommandText.ts +44 -0
  603. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +32 -0
  604. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getHSShakeSpeedCommandText.ts +11 -0
  605. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts +60 -0
  606. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLoadCommandText.ts +172 -0
  607. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveLabwareCommandText.ts +108 -0
  608. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveRelativeCommandText.ts +11 -0
  609. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToAddressableAreaCommandText.ts +19 -0
  610. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToAddressableAreaForDropTipCommandText.ts +19 -0
  611. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToCoordinatesCommandText.ts +11 -0
  612. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToSlotCommandText.ts +11 -0
  613. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts +46 -0
  614. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +196 -0
  615. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPrepareToAspirateCommandText.ts +20 -0
  616. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getRailLightsCommandText.ts +15 -0
  617. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts +67 -0
  618. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts +29 -0
  619. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.ts +49 -0
  620. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getUnknownCommandText.ts +5 -0
  621. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getWaitForDurationCommandText.ts +11 -0
  622. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getWaitForResumeCommandText.ts +11 -0
  623. package/src/organisms/CommandText/useCommandTextString/utils/commandText/index.ts +26 -0
  624. package/src/organisms/CommandText/useCommandTextString/utils/formatDuration.ts +44 -0
  625. package/src/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.ts +62 -0
  626. package/src/organisms/CommandText/useCommandTextString/utils/getFinalAddressableAreaCmd.ts +20 -0
  627. package/src/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.ts +46 -0
  628. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +59 -0
  629. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.tsx +140 -0
  630. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +271 -0
  631. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareName.ts +41 -0
  632. package/src/organisms/CommandText/useCommandTextString/utils/getLiquidDisplayName.ts +10 -0
  633. package/src/organisms/CommandText/useCommandTextString/utils/getLoadedLabware.tsx +12 -0
  634. package/src/organisms/CommandText/useCommandTextString/utils/getLoadedModule.ts +12 -0
  635. package/src/organisms/CommandText/useCommandTextString/utils/getModuleDisplayLocation.ts +10 -0
  636. package/src/organisms/CommandText/useCommandTextString/utils/getModuleModel.ts +11 -0
  637. package/src/organisms/CommandText/useCommandTextString/utils/getPipetteNameOnMount.ts +20 -0
  638. package/src/organisms/CommandText/useCommandTextString/utils/getWellRange.ts +64 -0
  639. package/src/organisms/CommandText/useCommandTextString/utils/helpers.ts +15 -0
  640. package/src/organisms/CommandText/useCommandTextString/utils/index.ts +10 -0
  641. package/src/organisms/CommandText/useCommandTextString/utils/types.ts +19 -0
  642. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +49 -0
  643. package/src/organisms/DeckLabelSet/__tests__/DeckLabelSet.test.tsx +52 -0
  644. package/src/organisms/DeckLabelSet/index.tsx +93 -0
  645. package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +113 -0
  646. package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +211 -0
  647. package/src/organisms/ProtocolTimelineScrubber/index.tsx +335 -0
  648. package/src/organisms/ProtocolTimelineScrubber/types.ts +6 -0
  649. package/src/organisms/ProtocolTimelineScrubber/utils.ts +157 -0
  650. package/src/organisms/Toolbox/Toolbox.stories.tsx +33 -0
  651. package/src/organisms/Toolbox/__tests__/Toolbox.test.tsx +36 -0
  652. package/src/organisms/Toolbox/index.tsx +148 -0
  653. package/src/organisms/index.ts +4 -0
  654. package/src/primitives/Box.stories.tsx +25 -0
  655. package/src/primitives/Box.tsx +17 -0
  656. package/src/primitives/Btn.stories.tsx +105 -0
  657. package/src/primitives/Btn.tsx +268 -0
  658. package/src/primitives/Flex.stories.tsx +50 -0
  659. package/src/primitives/Flex.tsx +17 -0
  660. package/src/primitives/ForeignObject.tsx +69 -0
  661. package/src/primitives/Link.stories.tsx +27 -0
  662. package/src/primitives/Link.tsx +33 -0
  663. package/src/primitives/README.md +188 -0
  664. package/src/primitives/Svg.stories.tsx +36 -0
  665. package/src/primitives/Svg.tsx +69 -0
  666. package/src/primitives/Text.stories.tsx +17 -0
  667. package/src/primitives/Text.tsx +18 -0
  668. package/src/primitives/__tests__/Box.test.tsx +4 -0
  669. package/src/primitives/__tests__/Btn.test.tsx +4 -0
  670. package/src/primitives/__tests__/Flex.test.tsx +4 -0
  671. package/src/primitives/__tests__/Link.test.tsx +4 -0
  672. package/src/primitives/__tests__/Svg.test.tsx +4 -0
  673. package/src/primitives/__tests__/Text.test.tsx +4 -0
  674. package/src/primitives/__tests__/primitives.test.tsx +4 -0
  675. package/src/primitives/__tests__/style-props.test.tsx +4 -0
  676. package/src/primitives/index.ts +10 -0
  677. package/src/primitives/style-props.ts +199 -0
  678. package/src/primitives/types.ts +120 -0
  679. package/src/robot-types.ts +4 -0
  680. package/src/slotmap/OT2SlotMap.tsx +73 -0
  681. package/src/slotmap/__tests__/OT2SlotMap.test.tsx +4 -0
  682. package/src/slotmap/index.ts +1 -0
  683. package/src/slotmap/styles.module.css +18 -0
  684. package/src/structure/Card.stories.tsx +28 -0
  685. package/src/structure/Card.tsx +63 -0
  686. package/src/structure/LabeledValue.stories.tsx +17 -0
  687. package/src/structure/LabeledValue.tsx +31 -0
  688. package/src/structure/Pill.module.css +16 -0
  689. package/src/structure/Pill.tsx +43 -0
  690. package/src/structure/Splash.module.css +16 -0
  691. package/src/structure/Splash.stories.tsx +24 -0
  692. package/src/structure/Splash.tsx +22 -0
  693. package/src/structure/TitleBar.stories.tsx +42 -0
  694. package/src/structure/TitleBar.tsx +80 -0
  695. package/src/structure/index.ts +7 -0
  696. package/src/structure/structure.module.css +114 -0
  697. package/src/styles/borders.module.css +20 -0
  698. package/src/styles/borders.ts +16 -0
  699. package/src/styles/colors.module.css +57 -0
  700. package/src/styles/colors.ts +58 -0
  701. package/src/styles/cursor.ts +12 -0
  702. package/src/styles/flexbox.ts +39 -0
  703. package/src/styles/index.module.css +8 -0
  704. package/src/styles/index.ts +8 -0
  705. package/src/styles/layout.ts +31 -0
  706. package/src/styles/position.ts +5 -0
  707. package/src/styles/spacing.ts +11 -0
  708. package/src/styles/typography.module.css +22 -0
  709. package/src/styles/typography.ts +90 -0
  710. package/src/testing/utils/index.ts +2 -0
  711. package/src/testing/utils/matchers.ts +31 -0
  712. package/src/testing/utils/renderWithProviders.tsx +59 -0
  713. package/src/tooltips/DeprecatedTooltip.tsx +111 -0
  714. package/src/tooltips/HoverTooltip.tsx +84 -0
  715. package/src/tooltips/LegacyTooltip.stories.tsx +98 -0
  716. package/src/tooltips/LegacyTooltip.tsx +151 -0
  717. package/src/tooltips/__tests__/Tooltip.test.tsx +4 -0
  718. package/src/tooltips/__tests__/useHoverTooltip.test.tsx +4 -0
  719. package/src/tooltips/__tests__/usePopper.test.tsx +4 -0
  720. package/src/tooltips/__tests__/useTooltip.test.tsx +4 -0
  721. package/src/tooltips/constants.ts +28 -0
  722. package/src/tooltips/index.ts +10 -0
  723. package/src/tooltips/styles.ts +20 -0
  724. package/src/tooltips/tooltips.module.css +72 -0
  725. package/src/tooltips/types.ts +73 -0
  726. package/src/tooltips/useHoverTooltip.ts +47 -0
  727. package/src/tooltips/usePopper.ts +87 -0
  728. package/src/tooltips/useTooltip.ts +100 -0
  729. package/src/ui-style-constants/animation.ts +1 -0
  730. package/src/ui-style-constants/index.ts +5 -0
  731. package/src/ui-style-constants/responsiveness.ts +15 -0
  732. package/src/ui-style-constants/spacing.ts +18 -0
  733. package/src/ui-style-constants/typography.ts +258 -0
  734. package/src/ui-style-constants/viewport.ts +18 -0
  735. package/src/utils.ts +56 -0
  736. package/tsconfig-data.json +13 -0
  737. package/tsconfig.json +6 -0
  738. package/vite.config.mts +7 -10
  739. package/lib/controls/LabeledSelect.d.ts +0 -9
  740. package/lib/forms/DropdownField.d.ts +0 -38
  741. package/lib/hooks/useIdle.d.ts +0 -11
  742. package/lib/index.cjs +0 -732
  743. package/lib/index.mjs +0 -36563
  744. package/lib/organisms/EndUserAgreementFooter/index.d.ts +0 -1
  745. package/lib/style.css +0 -1
  746. /package/lib/{forms/__tests__/DropdownField.test.d.ts → atoms/ListTable/__tests__/ListTable.test.d.ts} +0 -0
  747. /package/lib/{hooks/__tests__/useIdle.test.d.ts → atoms/SubListTable/__tests__/SubListTable.test.d.ts} +0 -0
  748. /package/lib/{organisms/EndUserAgreementFooter/__tests__/EndUserAgreementFooter.test.d.ts → molecules/ListAccordion/__tests__/ListAccordion.test.d.ts} +0 -0
@@ -0,0 +1,1670 @@
1
+ import { it, expect, describe } from 'vitest'
2
+ import { screen } from '@testing-library/react'
3
+
4
+ import {
5
+ FLEX_ROBOT_TYPE,
6
+ OT2_ROBOT_TYPE,
7
+ GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA,
8
+ } from '@opentrons/shared-data'
9
+ import { i18n } from '../../../i18n'
10
+ import { renderWithProviders } from '../../../testing/utils'
11
+ import { CommandText } from '../index'
12
+
13
+ import type {
14
+ AspirateInPlaceRunTimeCommand,
15
+ BlowoutInPlaceRunTimeCommand,
16
+ BlowoutRunTimeCommand,
17
+ CompletedProtocolAnalysis,
18
+ ConfigureForVolumeRunTimeCommand,
19
+ DispenseInPlaceRunTimeCommand,
20
+ DispenseRunTimeCommand,
21
+ DropTipInPlaceRunTimeCommand,
22
+ DropTipRunTimeCommand,
23
+ LabwareDefinition2,
24
+ LoadLabwareRunTimeCommand,
25
+ LoadLiquidRunTimeCommand,
26
+ MoveToAddressableAreaRunTimeCommand,
27
+ MoveToWellRunTimeCommand,
28
+ PrepareToAspirateRunTimeCommand,
29
+ RunTimeCommand,
30
+ MoveToAddressableAreaForDropTipRunTimeCommand,
31
+ LoadLiquidClassRunTimeCommand,
32
+ } from '@opentrons/shared-data'
33
+ import type { CommandTextData } from '../../ProtocolTimelineScrubber'
34
+ import { getCommandTextData } from '../../ProtocolTimelineScrubber/utils'
35
+ import { mockRobotSideAnalysis } from '../fixtures'
36
+
37
+ const mockCommandTextData: CommandTextData = {
38
+ commands: mockRobotSideAnalysis.commands,
39
+ pipettes: mockRobotSideAnalysis.pipettes,
40
+ labware: mockRobotSideAnalysis.labware,
41
+ modules: mockRobotSideAnalysis.modules,
42
+ liquids: mockRobotSideAnalysis.liquids,
43
+ }
44
+
45
+ describe('CommandText', () => {
46
+ it('renders correct text for aspirate', () => {
47
+ const command = mockCommandTextData.commands.find(
48
+ c => c.commandType === 'aspirate'
49
+ )
50
+ expect(command).not.toBeUndefined()
51
+ if (command != null) {
52
+ renderWithProviders(
53
+ <CommandText
54
+ allRunDefs={[]}
55
+ commandTextData={mockCommandTextData}
56
+ robotType={FLEX_ROBOT_TYPE}
57
+ command={command}
58
+ />,
59
+ { i18nInstance: i18n }
60
+ )
61
+ screen.getByText(
62
+ 'Aspirating 100 µL from well A1 of NEST 1 Well Reservoir 195 mL in Slot 5 at 150 µL/sec'
63
+ )
64
+ }
65
+ })
66
+ it('renders correct text for dispense without pushOut', () => {
67
+ const command = mockCommandTextData.commands.find(
68
+ c => c.commandType === 'dispense'
69
+ )
70
+ expect(command).not.toBeUndefined()
71
+ if (command != null) {
72
+ renderWithProviders(
73
+ <CommandText
74
+ allRunDefs={[]}
75
+ commandTextData={mockCommandTextData}
76
+ robotType={FLEX_ROBOT_TYPE}
77
+ command={command}
78
+ />,
79
+ { i18nInstance: i18n }
80
+ )
81
+ screen.getByText(
82
+ 'Dispensing 100 µL into well A1 of NEST 96 Well Plate 100 µL PCR Full Skirt (1) in Magnetic Module GEN2 in Slot 1 at 300 µL/sec'
83
+ )
84
+ }
85
+ })
86
+ it('renders correct text for dispense with pushOut', () => {
87
+ const command = mockCommandTextData.commands.find(
88
+ c => c.commandType === 'dispense'
89
+ )
90
+ const pushOutDispenseCommand = {
91
+ ...command,
92
+ params: {
93
+ ...command?.params,
94
+ pushOut: 10,
95
+ },
96
+ } as DispenseRunTimeCommand
97
+ expect(pushOutDispenseCommand).not.toBeUndefined()
98
+ if (pushOutDispenseCommand != null) {
99
+ renderWithProviders(
100
+ <CommandText
101
+ allRunDefs={[]}
102
+ commandTextData={mockCommandTextData}
103
+ robotType={FLEX_ROBOT_TYPE}
104
+ command={pushOutDispenseCommand}
105
+ />,
106
+ { i18nInstance: i18n }
107
+ )
108
+ screen.getByText(
109
+ 'Dispensing 100 µL into well A1 of NEST 96 Well Plate 100 µL PCR Full Skirt (1) in Magnetic Module GEN2 in Slot 1 at 300 µL/sec and pushing out 10 µL'
110
+ )
111
+ }
112
+ })
113
+ it('renders correct text for dispenseInPlace', () => {
114
+ renderWithProviders(
115
+ <CommandText
116
+ allRunDefs={[]}
117
+ commandTextData={mockCommandTextData}
118
+ robotType={FLEX_ROBOT_TYPE}
119
+ command={
120
+ {
121
+ commandType: 'dispenseInPlace',
122
+ params: {
123
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
124
+ flowRate: 300,
125
+ volume: 50,
126
+ },
127
+ } as DispenseInPlaceRunTimeCommand
128
+ }
129
+ />,
130
+ { i18nInstance: i18n }
131
+ )
132
+ screen.getByText('Dispensing 50 µL in place at 300 µL/sec')
133
+ })
134
+ it('renders correct text for blowout', () => {
135
+ const dispenseCommand = mockCommandTextData.commands.find(
136
+ c => c.commandType === 'dispense'
137
+ )
138
+ const blowoutCommand = {
139
+ ...dispenseCommand,
140
+ commandType: 'blowout',
141
+ } as BlowoutRunTimeCommand
142
+ expect(blowoutCommand).not.toBeUndefined()
143
+ if (blowoutCommand != null) {
144
+ renderWithProviders(
145
+ <CommandText
146
+ allRunDefs={[]}
147
+ commandTextData={mockCommandTextData}
148
+ robotType={FLEX_ROBOT_TYPE}
149
+ command={blowoutCommand}
150
+ />,
151
+ { i18nInstance: i18n }
152
+ )
153
+ screen.getByText(
154
+ 'Blowing out at well A1 of NEST 96 Well Plate 100 µL PCR Full Skirt (1) in Magnetic Module GEN2 in Slot 1 at 300 µL/sec'
155
+ )
156
+ }
157
+ })
158
+ it('renders correct text for blowOutInPlace', () => {
159
+ renderWithProviders(
160
+ <CommandText
161
+ allRunDefs={[]}
162
+ commandTextData={mockCommandTextData}
163
+ robotType={FLEX_ROBOT_TYPE}
164
+ command={
165
+ {
166
+ commandType: 'blowOutInPlace',
167
+ params: {
168
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
169
+ flowRate: 300,
170
+ },
171
+ } as BlowoutInPlaceRunTimeCommand
172
+ }
173
+ />,
174
+ { i18nInstance: i18n }
175
+ )
176
+ screen.getByText('Blowing out in place at 300 µL/sec')
177
+ })
178
+ it('renders correct text for aspirateInPlace', () => {
179
+ renderWithProviders(
180
+ <CommandText
181
+ allRunDefs={[]}
182
+ commandTextData={mockCommandTextData}
183
+ robotType={FLEX_ROBOT_TYPE}
184
+ command={
185
+ {
186
+ commandType: 'aspirateInPlace',
187
+ params: {
188
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
189
+ flowRate: 300,
190
+ volume: 10,
191
+ },
192
+ } as AspirateInPlaceRunTimeCommand
193
+ }
194
+ />,
195
+ { i18nInstance: i18n }
196
+ )
197
+ screen.getByText('Aspirating 10 µL in place at 300 µL/sec')
198
+ })
199
+ it('renders correct text for moveToWell', () => {
200
+ const dispenseCommand = mockCommandTextData.commands.find(
201
+ c => c.commandType === 'aspirate'
202
+ )
203
+ const moveToWellCommand = {
204
+ ...dispenseCommand,
205
+ commandType: 'moveToWell',
206
+ } as MoveToWellRunTimeCommand
207
+ expect(moveToWellCommand).not.toBeUndefined()
208
+ if (moveToWellCommand != null) {
209
+ renderWithProviders(
210
+ <CommandText
211
+ allRunDefs={[]}
212
+ commandTextData={mockCommandTextData}
213
+ robotType={FLEX_ROBOT_TYPE}
214
+ command={moveToWellCommand}
215
+ />,
216
+ { i18nInstance: i18n }
217
+ )
218
+ screen.getByText(
219
+ 'Moving to well A1 of NEST 1 Well Reservoir 195 mL in Slot 5'
220
+ )
221
+ }
222
+ })
223
+ it('renders correct text for labware involving an addressable area slot', () => {
224
+ renderWithProviders(
225
+ <CommandText
226
+ allRunDefs={[]}
227
+ command={{
228
+ commandType: 'moveLabware',
229
+ params: {
230
+ strategy: 'usingGripper',
231
+ labwareId: mockCommandTextData.labware[2].id,
232
+ newLocation: { addressableAreaName: '5' },
233
+ },
234
+ id: 'def456',
235
+ result: { offsetId: 'fake_offset_id' },
236
+ status: 'queued',
237
+ error: null,
238
+ createdAt: 'fake_timestamp',
239
+ startedAt: null,
240
+ completedAt: null,
241
+ }}
242
+ commandTextData={mockCommandTextData}
243
+ robotType={FLEX_ROBOT_TYPE}
244
+ />,
245
+ {
246
+ i18nInstance: i18n,
247
+ }
248
+ )
249
+ screen.getByText(
250
+ 'Moving Opentrons 96 Tip Rack 300 µL using gripper from Slot 9 to Slot 5'
251
+ )
252
+ })
253
+ it('renders correct text for moveToAddressableArea for Waste Chutes', () => {
254
+ renderWithProviders(
255
+ <CommandText
256
+ allRunDefs={[]}
257
+ commandTextData={mockCommandTextData}
258
+ robotType={FLEX_ROBOT_TYPE}
259
+ command={
260
+ {
261
+ id: 'aca688ed-4916-496d-aae8-ca0e6e56c47b',
262
+ commandType: 'moveToAddressableArea',
263
+ params: {
264
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
265
+ addressableAreaName: '1ChannelWasteChute',
266
+ },
267
+ } as MoveToAddressableAreaRunTimeCommand
268
+ }
269
+ />,
270
+ { i18nInstance: i18n }
271
+ )
272
+ screen.getByText('Moving to Waste Chute')
273
+ })
274
+ it('renders correct text for moveToAddressableArea for Fixed Trash', () => {
275
+ renderWithProviders(
276
+ <CommandText
277
+ allRunDefs={[]}
278
+ commandTextData={mockCommandTextData}
279
+ robotType={OT2_ROBOT_TYPE}
280
+ command={
281
+ {
282
+ id: 'aca688ed-4916-496d-aae8-ca0e6e56c47c',
283
+ commandType: 'moveToAddressableArea',
284
+ params: {
285
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
286
+ addressableAreaName: 'fixedTrash',
287
+ },
288
+ } as MoveToAddressableAreaRunTimeCommand
289
+ }
290
+ />,
291
+ { i18nInstance: i18n }
292
+ )
293
+ screen.getByText('Moving to Fixed Trash')
294
+ })
295
+ it('renders correct text for moveToAddressableArea for Trash Bins', () => {
296
+ renderWithProviders(
297
+ <CommandText
298
+ allRunDefs={[]}
299
+ commandTextData={mockCommandTextData}
300
+ robotType={OT2_ROBOT_TYPE}
301
+ command={
302
+ {
303
+ id: 'aca688ed-4916-496d-aae8-ca0e6e56c47d',
304
+ commandType: 'moveToAddressableArea',
305
+ params: {
306
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
307
+ addressableAreaName: 'movableTrashD3',
308
+ },
309
+ } as MoveToAddressableAreaRunTimeCommand
310
+ }
311
+ />,
312
+ { i18nInstance: i18n }
313
+ )
314
+ screen.getByText('Moving to Trash Bin in D3')
315
+ })
316
+ it('renders correct text for moveToAddressableAreaForDropTip for Trash Bin', () => {
317
+ renderWithProviders(
318
+ <CommandText
319
+ allRunDefs={[]}
320
+ commandTextData={mockCommandTextData}
321
+ robotType={OT2_ROBOT_TYPE}
322
+ command={
323
+ {
324
+ id: 'aca688ed-4916-496d-aae8-ca0e6e56c47d',
325
+ commandType: 'moveToAddressableAreaForDropTip',
326
+ params: {
327
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
328
+ addressableAreaName: 'movableTrashD3',
329
+ alternateDropLocation: true,
330
+ },
331
+ } as MoveToAddressableAreaForDropTipRunTimeCommand
332
+ }
333
+ />,
334
+ { i18nInstance: i18n }
335
+ )
336
+ screen.getByText('Moving to Trash Bin in D3')
337
+ })
338
+ it('renders correct text for moveToAddressableArea for slots', () => {
339
+ renderWithProviders(
340
+ <CommandText
341
+ allRunDefs={[]}
342
+ commandTextData={mockCommandTextData}
343
+ robotType={OT2_ROBOT_TYPE}
344
+ command={
345
+ {
346
+ id: 'aca688ed-4916-496d-aae8-ca0e6e56c47e',
347
+ commandType: 'moveToAddressableArea',
348
+ params: {
349
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
350
+ addressableAreaName: 'D3',
351
+ },
352
+ } as MoveToAddressableAreaRunTimeCommand
353
+ }
354
+ />,
355
+ { i18nInstance: i18n }
356
+ )
357
+ screen.getByText('Moving to D3')
358
+ })
359
+ it('renders correct text for configureForVolume', () => {
360
+ const command = {
361
+ commandType: 'configureForVolume',
362
+ params: {
363
+ volume: 1,
364
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
365
+ },
366
+ } as ConfigureForVolumeRunTimeCommand
367
+
368
+ renderWithProviders(
369
+ <CommandText
370
+ allRunDefs={[]}
371
+ commandTextData={mockCommandTextData}
372
+ robotType={FLEX_ROBOT_TYPE}
373
+ command={command}
374
+ />,
375
+ { i18nInstance: i18n }
376
+ )
377
+ screen.getByText('Configure P300 Single-Channel GEN1 to aspirate 1 µL')
378
+ })
379
+ it('renders correct text for prepareToAspirate', () => {
380
+ const command = {
381
+ commandType: 'prepareToAspirate',
382
+ params: {
383
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
384
+ },
385
+ } as PrepareToAspirateRunTimeCommand
386
+
387
+ renderWithProviders(
388
+ <CommandText
389
+ allRunDefs={[]}
390
+ commandTextData={mockCommandTextData}
391
+ robotType={FLEX_ROBOT_TYPE}
392
+ command={command}
393
+ />,
394
+ { i18nInstance: i18n }
395
+ )
396
+ screen.getByText('Preparing P300 Single-Channel GEN1 to aspirate')
397
+ })
398
+ it('renders correct text for dropTip', () => {
399
+ const command = mockCommandTextData.commands.find(
400
+ c => c.commandType === 'dropTip'
401
+ )
402
+ expect(command).not.toBeUndefined()
403
+ if (command != null) {
404
+ renderWithProviders(
405
+ <CommandText
406
+ allRunDefs={[]}
407
+ commandTextData={mockCommandTextData}
408
+ robotType={FLEX_ROBOT_TYPE}
409
+ command={command}
410
+ />,
411
+ { i18nInstance: i18n }
412
+ )
413
+ screen.getByText('Dropping tip in A1 of Fixed Trash')
414
+ }
415
+ })
416
+ it('renders correct text for dropTip into a labware', () => {
417
+ renderWithProviders(
418
+ <CommandText
419
+ allRunDefs={[]}
420
+ commandTextData={mockCommandTextData}
421
+ robotType={FLEX_ROBOT_TYPE}
422
+ command={
423
+ {
424
+ commandType: 'dropTip',
425
+ params: {
426
+ labwareId: 'b2a40c9d-31b0-4f27-ad4a-c92ced91204d',
427
+ wellName: 'A1',
428
+ wellLocation: { origin: 'top', offset: { x: 0, y: 0, z: 0 } },
429
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
430
+ },
431
+ } as DropTipRunTimeCommand
432
+ }
433
+ />,
434
+ { i18nInstance: i18n }
435
+ )
436
+ screen.getByText(
437
+ 'Returning tip to A1 of Opentrons 96 Tip Rack 300 µL in Slot 9'
438
+ )
439
+ })
440
+ it('renders correct text for dropTipInPlace', () => {
441
+ renderWithProviders(
442
+ <CommandText
443
+ allRunDefs={[]}
444
+ commandTextData={mockCommandTextData}
445
+ robotType={FLEX_ROBOT_TYPE}
446
+ command={
447
+ {
448
+ commandType: 'dropTipInPlace',
449
+ params: {
450
+ pipetteId: 'f6d1c83c-9d1b-4d0d-9de3-e6d649739cfb',
451
+ },
452
+ } as DropTipInPlaceRunTimeCommand
453
+ }
454
+ />,
455
+ { i18nInstance: i18n }
456
+ )
457
+ screen.getByText('Dropping tip in D3')
458
+ })
459
+ it('renders correct text for pickUpTip', () => {
460
+ const command = mockCommandTextData.commands.find(
461
+ c => c.commandType === 'pickUpTip'
462
+ )
463
+ expect(command).not.toBeUndefined()
464
+ if (command != null) {
465
+ renderWithProviders(
466
+ <CommandText
467
+ allRunDefs={[]}
468
+ commandTextData={mockCommandTextData}
469
+ robotType={FLEX_ROBOT_TYPE}
470
+ command={command}
471
+ />,
472
+ { i18nInstance: i18n }
473
+ )
474
+ screen.getByText(
475
+ 'Picking up tip(s) from A1 of Opentrons 96 Tip Rack 300 µL in Slot 9'
476
+ )
477
+ }
478
+ })
479
+ it('renders correct text for loadPipette', () => {
480
+ const command = mockCommandTextData.commands.find(
481
+ c => c.commandType === 'loadPipette'
482
+ )
483
+ expect(command).not.toBeNull()
484
+ if (command != null) {
485
+ renderWithProviders(
486
+ <CommandText
487
+ allRunDefs={[]}
488
+ commandTextData={mockCommandTextData}
489
+ robotType={FLEX_ROBOT_TYPE}
490
+ command={command}
491
+ />,
492
+ { i18nInstance: i18n }
493
+ )
494
+ screen.getByText('Load P300 Single-Channel GEN1 in Left Mount')
495
+ }
496
+ })
497
+ it('renders correct text for loadModule', () => {
498
+ const command = mockCommandTextData.commands.find(
499
+ c => c.commandType === 'loadModule'
500
+ )
501
+ expect(command).not.toBeNull()
502
+ if (command != null) {
503
+ renderWithProviders(
504
+ <CommandText
505
+ allRunDefs={[]}
506
+ commandTextData={mockCommandTextData}
507
+ robotType={FLEX_ROBOT_TYPE}
508
+ command={command}
509
+ />,
510
+ { i18nInstance: i18n }
511
+ )
512
+ screen.getByText('Load Magnetic Module GEN2 in Slot 1')
513
+ }
514
+ })
515
+ it('renders correct text for loadLabware that is category adapter in slot', () => {
516
+ const loadLabwareCommands = mockCommandTextData.commands.filter(
517
+ c => c.commandType === 'loadLabware'
518
+ )
519
+ const loadLabwareCommand = loadLabwareCommands[0]
520
+ renderWithProviders(
521
+ <CommandText
522
+ allRunDefs={[]}
523
+ commandTextData={mockCommandTextData}
524
+ robotType={FLEX_ROBOT_TYPE}
525
+ command={loadLabwareCommand}
526
+ />,
527
+ { i18nInstance: i18n }
528
+ )
529
+ screen.getByText('Load Opentrons 96 Flat Bottom Adapter in Slot 2')
530
+ })
531
+ it('renders correct text for loadLabware in slot', () => {
532
+ const loadLabwareCommands = mockCommandTextData.commands.filter(
533
+ c => c.commandType === 'loadLabware'
534
+ )
535
+ const loadTipRackCommand = loadLabwareCommands[2]
536
+ renderWithProviders(
537
+ <CommandText
538
+ allRunDefs={[]}
539
+ commandTextData={mockCommandTextData}
540
+ robotType={FLEX_ROBOT_TYPE}
541
+ command={loadTipRackCommand}
542
+ />,
543
+ { i18nInstance: i18n }
544
+ )
545
+ screen.getByText('Load Opentrons 96 Tip Rack 300 µL in Slot 9')
546
+ })
547
+ it('renders correct text for loadLabware in module', () => {
548
+ const loadLabwareCommands = mockCommandTextData.commands.filter(
549
+ c => c.commandType === 'loadLabware'
550
+ )
551
+ const loadOnModuleCommand = loadLabwareCommands[3]
552
+ renderWithProviders(
553
+ <CommandText
554
+ allRunDefs={[]}
555
+ commandTextData={mockCommandTextData}
556
+ robotType={FLEX_ROBOT_TYPE}
557
+ command={loadOnModuleCommand}
558
+ />,
559
+ { i18nInstance: i18n }
560
+ )
561
+ screen.getByText(
562
+ 'Load NEST 96 Well Plate 100 µL PCR Full Skirt (1) in Magnetic Module GEN2 in Slot 1'
563
+ )
564
+ })
565
+ it('renders correct text for loadLabware in adapter', () => {
566
+ const flatBottomAdapterCommand = mockCommandTextData.commands.find(
567
+ c =>
568
+ c.commandType === 'loadLabware' &&
569
+ c.params.loadName === 'opentrons_96_flat_bottom_adapter'
570
+ )
571
+
572
+ renderWithProviders(
573
+ <CommandText
574
+ allRunDefs={[flatBottomAdapterCommand?.result.definition]}
575
+ command={{
576
+ commandType: 'loadLabware',
577
+ params: {
578
+ version: 1,
579
+ namespace: 'opentrons',
580
+ loadName: 'labwareMock',
581
+ location: {
582
+ labwareId:
583
+ '29444782-bdc8-4ad8-92fe-5e28872e85e5:opentrons/opentrons_96_flat_bottom_adapter/1',
584
+ },
585
+ },
586
+ id: 'def456',
587
+ result: {
588
+ labwareId: 'mockId',
589
+ definition: {
590
+ metadata: { displayName: 'mock displayName' },
591
+ } as LabwareDefinition2,
592
+ offset: { x: 0, y: 0, z: 0 },
593
+ },
594
+ status: 'queued',
595
+ error: null,
596
+ createdAt: 'fake_timestamp',
597
+ startedAt: null,
598
+ completedAt: null,
599
+ }}
600
+ commandTextData={mockCommandTextData}
601
+ robotType={FLEX_ROBOT_TYPE}
602
+ />,
603
+ {
604
+ i18nInstance: i18n,
605
+ }
606
+ )
607
+ screen.getByText(
608
+ 'Load mock displayName on Opentrons 96 Flat Bottom Adapter in Slot 2'
609
+ )
610
+ })
611
+ it('renders correct text for loadLabware off deck', () => {
612
+ const loadLabwareCommands = mockCommandTextData.commands.filter(
613
+ c => c.commandType === 'loadLabware'
614
+ )
615
+ const loadOffDeckCommand = {
616
+ ...loadLabwareCommands[4],
617
+ params: {
618
+ ...loadLabwareCommands[4].params,
619
+ location: 'offDeck',
620
+ },
621
+ } as LoadLabwareRunTimeCommand
622
+ renderWithProviders(
623
+ <CommandText
624
+ allRunDefs={[]}
625
+ commandTextData={mockCommandTextData}
626
+ robotType={FLEX_ROBOT_TYPE}
627
+ command={loadOffDeckCommand}
628
+ />,
629
+ { i18nInstance: i18n }
630
+ )
631
+ screen.getByText(
632
+ 'Load NEST 96 Well Plate 100 µL PCR Full Skirt (2) off deck'
633
+ )
634
+ })
635
+ it('renders correct text for reloadLabware', () => {
636
+ const reloadLabwareCommand = mockCommandTextData.commands.find(
637
+ c => c.commandType === 'reloadLabware'
638
+ )
639
+ expect(reloadLabwareCommand).not.toBeUndefined()
640
+ if (reloadLabwareCommand != null) {
641
+ renderWithProviders(
642
+ <CommandText
643
+ allRunDefs={[]}
644
+ commandTextData={mockCommandTextData}
645
+ robotType={FLEX_ROBOT_TYPE}
646
+ command={reloadLabwareCommand}
647
+ />,
648
+ { i18nInstance: i18n }
649
+ )
650
+ }
651
+ screen.getByText('Reloading NEST 96 Well Plate 100 µL PCR Full Skirt (1)')
652
+ })
653
+ it('renders correct text for loadLiquid', () => {
654
+ const loadLabwareCommands = mockCommandTextData.commands.filter(
655
+ c => c.commandType === 'loadLabware'
656
+ )
657
+ const liquidId = 'zxcvbn'
658
+ const labwareId = 'uytrew'
659
+ const loadLiquidCommand = {
660
+ ...loadLabwareCommands[1],
661
+ commandType: 'loadLiquid',
662
+ params: { liquidId, labwareId },
663
+ } as LoadLiquidRunTimeCommand
664
+ const analysisWithLiquids = {
665
+ ...mockCommandTextData,
666
+ liquids: [
667
+ {
668
+ id: 'zxcvbn',
669
+ displayName: 'Water',
670
+ description: 'wet',
671
+ displayColor: '#0000ff',
672
+ },
673
+ ],
674
+ labware: [
675
+ {
676
+ id: labwareId,
677
+ loadName: 'fake_loadname',
678
+ definitionUri: 'fake_uri',
679
+ location: 'offDeck' as const,
680
+ displayName: 'fakeDisplayName',
681
+ },
682
+ ],
683
+ }
684
+ renderWithProviders(
685
+ <CommandText
686
+ allRunDefs={[]}
687
+ commandTextData={getCommandTextData(
688
+ analysisWithLiquids as CompletedProtocolAnalysis
689
+ )}
690
+ robotType={FLEX_ROBOT_TYPE}
691
+ command={loadLiquidCommand}
692
+ />,
693
+ { i18nInstance: i18n }
694
+ )
695
+ screen.getByText('Load Water into fakeDisplayName')
696
+ })
697
+ it('renders correct text for loadLiquidClass', () => {
698
+ renderWithProviders(
699
+ <CommandText
700
+ allRunDefs={[]}
701
+ commandTextData={mockCommandTextData} // not relevant for loading liquid class
702
+ robotType={FLEX_ROBOT_TYPE}
703
+ command={
704
+ mockRobotSideAnalysis.commands.find(
705
+ c => c.commandType === 'loadLiquidClass'
706
+ ) as LoadLiquidClassRunTimeCommand
707
+ }
708
+ />,
709
+ { i18nInstance: i18n }
710
+ )
711
+ screen.getByText('Loading Volatile Liquid Class')
712
+ })
713
+ it('renders correct text for temperatureModule/setTargetTemperature', () => {
714
+ const mockTemp = 20
715
+ renderWithProviders(
716
+ <CommandText
717
+ allRunDefs={[]}
718
+ command={{
719
+ commandType: 'temperatureModule/setTargetTemperature',
720
+ params: { celsius: mockTemp, moduleId: 'abc123' },
721
+ id: 'def456',
722
+ result: {},
723
+ status: 'queued',
724
+ error: null,
725
+ createdAt: 'fake_timestamp',
726
+ startedAt: null,
727
+ completedAt: null,
728
+ }}
729
+ commandTextData={mockCommandTextData}
730
+ robotType={FLEX_ROBOT_TYPE}
731
+ />,
732
+ {
733
+ i18nInstance: i18n,
734
+ }
735
+ )
736
+ screen.getByText(
737
+ 'Setting Temperature Module to 20°C (rounded to nearest integer)'
738
+ )
739
+ })
740
+ it('renders correct text for temperatureModule/waitForTemperature with target temp', () => {
741
+ const mockTemp = 20
742
+ renderWithProviders(
743
+ <CommandText
744
+ allRunDefs={[]}
745
+ command={{
746
+ commandType: 'temperatureModule/waitForTemperature',
747
+ params: { celsius: mockTemp, moduleId: 'abc123' },
748
+ id: 'def456',
749
+ result: {},
750
+ status: 'queued',
751
+ error: null,
752
+ createdAt: 'fake_timestamp',
753
+ startedAt: null,
754
+ completedAt: null,
755
+ }}
756
+ commandTextData={mockCommandTextData}
757
+ robotType={FLEX_ROBOT_TYPE}
758
+ />,
759
+ {
760
+ i18nInstance: i18n,
761
+ }
762
+ )
763
+ screen.getByText('Waiting for Temperature Module to reach 20°C')
764
+ })
765
+ it('renders correct text for temperatureModule/waitForTemperature with no specified temp', () => {
766
+ renderWithProviders(
767
+ <CommandText
768
+ allRunDefs={[]}
769
+ command={{
770
+ commandType: 'temperatureModule/waitForTemperature',
771
+ params: { moduleId: 'abc123' },
772
+ id: 'def456',
773
+ result: {},
774
+ status: 'queued',
775
+ error: null,
776
+ createdAt: 'fake_timestamp',
777
+ startedAt: null,
778
+ completedAt: null,
779
+ }}
780
+ commandTextData={mockCommandTextData}
781
+ robotType={FLEX_ROBOT_TYPE}
782
+ />,
783
+ {
784
+ i18nInstance: i18n,
785
+ }
786
+ )
787
+ screen.getByText(
788
+ 'Waiting for Temperature Module to reach target temperature'
789
+ )
790
+ })
791
+ it('renders correct text for thermocycler/setTargetBlockTemperature', () => {
792
+ const mockTemp = 20
793
+ renderWithProviders(
794
+ <CommandText
795
+ allRunDefs={[]}
796
+ command={{
797
+ commandType: 'thermocycler/setTargetBlockTemperature',
798
+ params: { celsius: mockTemp, moduleId: 'abc123' },
799
+ id: 'def456',
800
+ result: {},
801
+ status: 'queued',
802
+ error: null,
803
+ createdAt: 'fake_timestamp',
804
+ startedAt: null,
805
+ completedAt: null,
806
+ }}
807
+ commandTextData={mockCommandTextData}
808
+ robotType={FLEX_ROBOT_TYPE}
809
+ />,
810
+ {
811
+ i18nInstance: i18n,
812
+ }
813
+ )
814
+ screen.getByText(
815
+ 'Setting Thermocycler block temperature to 20°C with hold time of 0 seconds after target reached'
816
+ )
817
+ })
818
+ it('renders correct text for thermocycler/setTargetLidTemperature', () => {
819
+ const mockTemp = 20
820
+ renderWithProviders(
821
+ <CommandText
822
+ allRunDefs={[]}
823
+ command={{
824
+ commandType: 'thermocycler/setTargetLidTemperature',
825
+ params: { celsius: mockTemp, moduleId: 'abc123' },
826
+ id: 'def456',
827
+ result: {},
828
+ status: 'queued',
829
+ error: null,
830
+ createdAt: 'fake_timestamp',
831
+ startedAt: null,
832
+ completedAt: null,
833
+ }}
834
+ commandTextData={mockCommandTextData}
835
+ robotType={FLEX_ROBOT_TYPE}
836
+ />,
837
+ {
838
+ i18nInstance: i18n,
839
+ }
840
+ )
841
+ screen.getByText('Setting Thermocycler lid temperature to 20°C')
842
+ })
843
+ it('renders correct text for heaterShaker/setTargetTemperature', () => {
844
+ const mockTemp = 20
845
+ renderWithProviders(
846
+ <CommandText
847
+ allRunDefs={[]}
848
+ command={{
849
+ commandType: 'heaterShaker/setTargetTemperature',
850
+ params: { celsius: mockTemp, moduleId: 'abc123' },
851
+ id: 'def456',
852
+ result: {},
853
+ status: 'queued',
854
+ error: null,
855
+ createdAt: 'fake_timestamp',
856
+ startedAt: null,
857
+ completedAt: null,
858
+ }}
859
+ commandTextData={mockCommandTextData}
860
+ robotType={FLEX_ROBOT_TYPE}
861
+ />,
862
+ {
863
+ i18nInstance: i18n,
864
+ }
865
+ )
866
+ screen.getByText('Setting Target Temperature of Heater-Shaker to 20°C')
867
+ })
868
+ it('renders correct text for thermocycler/runProfile on Desktop', () => {
869
+ const mockProfileSteps = [
870
+ { holdSeconds: 10, celsius: 20 },
871
+ { holdSeconds: 30, celsius: 40 },
872
+ ]
873
+ renderWithProviders(
874
+ <CommandText
875
+ allRunDefs={[]}
876
+ command={{
877
+ commandType: 'thermocycler/runProfile',
878
+ params: { profile: mockProfileSteps, moduleId: 'abc123' },
879
+ id: 'def456',
880
+ result: {},
881
+ status: 'queued',
882
+ error: null,
883
+ createdAt: 'fake_timestamp',
884
+ startedAt: null,
885
+ completedAt: null,
886
+ }}
887
+ commandTextData={mockCommandTextData}
888
+ robotType={FLEX_ROBOT_TYPE}
889
+ />,
890
+ {
891
+ i18nInstance: i18n,
892
+ }
893
+ )
894
+ screen.getByText('Running thermocycler profile with 2 steps:')
895
+ screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s')
896
+ screen.getByText('Temperature: 40°C, hold time: 0h 00m 30s')
897
+ })
898
+ it('renders correct text for thermocycler/runProfile on ODD', () => {
899
+ const mockProfileSteps = [
900
+ { holdSeconds: 10, celsius: 20 },
901
+ { holdSeconds: 30, celsius: 40 },
902
+ ]
903
+ renderWithProviders(
904
+ <CommandText
905
+ allRunDefs={[]}
906
+ command={{
907
+ commandType: 'thermocycler/runProfile',
908
+ params: { profile: mockProfileSteps, moduleId: 'abc123' },
909
+ id: 'def456',
910
+ result: {},
911
+ status: 'queued',
912
+ error: null,
913
+ createdAt: 'fake_timestamp',
914
+ startedAt: null,
915
+ completedAt: null,
916
+ }}
917
+ commandTextData={mockCommandTextData}
918
+ robotType={FLEX_ROBOT_TYPE}
919
+ isOnDevice={true}
920
+ />,
921
+ {
922
+ i18nInstance: i18n,
923
+ }
924
+ )
925
+ screen.getByText('Running thermocycler profile with 2 steps:')
926
+ screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s')
927
+ expect(
928
+ screen.queryByText('Temperature: 40°C, hold time: 0h 00m 30s')
929
+ ).not.toBeInTheDocument()
930
+ })
931
+ it('renders correct text for thermocycler/runExtendedProfile on Desktop', () => {
932
+ const mockProfileSteps = [
933
+ { holdSeconds: 10, celsius: 20 },
934
+ {
935
+ repetitions: 10,
936
+ steps: [
937
+ { holdSeconds: 15, celsius: 10 },
938
+ { holdSeconds: 12, celsius: 11 },
939
+ ],
940
+ },
941
+ { holdSeconds: 30, celsius: 40 },
942
+ {
943
+ repetitions: 9,
944
+ steps: [
945
+ { holdSeconds: 13000, celsius: 12 },
946
+ { holdSeconds: 14, celsius: 13 },
947
+ ],
948
+ },
949
+ ]
950
+ renderWithProviders(
951
+ <CommandText
952
+ allRunDefs={[]}
953
+ command={{
954
+ commandType: 'thermocycler/runExtendedProfile',
955
+ params: { profileElements: mockProfileSteps, moduleId: 'abc123' },
956
+ id: 'def456',
957
+ result: {},
958
+ status: 'queued',
959
+ error: null,
960
+ createdAt: 'fake_timestamp',
961
+ startedAt: null,
962
+ completedAt: null,
963
+ }}
964
+ commandTextData={mockCommandTextData}
965
+ robotType={FLEX_ROBOT_TYPE}
966
+ />,
967
+ {
968
+ i18nInstance: i18n,
969
+ }
970
+ )
971
+ screen.getByText(
972
+ 'Running thermocycler profile with 4 total steps and cycles:'
973
+ )
974
+ screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s')
975
+ screen.getByText('10 repetitions of the following steps:')
976
+ screen.getByText('Temperature: 10°C, hold time: 0h 00m 15s')
977
+ screen.getByText('Temperature: 11°C, hold time: 0h 00m 12s')
978
+ screen.getByText('Temperature: 40°C, hold time: 0h 00m 30s')
979
+ screen.getByText('9 repetitions of the following steps:')
980
+ screen.getByText('Temperature: 12°C, hold time: 3h 36m 40s')
981
+ screen.getByText('Temperature: 13°C, hold time: 0h 00m 14s')
982
+ })
983
+ it('renders correct text for thermocycler/runExtendedProfile on ODD', () => {
984
+ const mockProfileSteps = [
985
+ { holdSeconds: 10, celsius: 20 },
986
+ {
987
+ repetitions: 10,
988
+ steps: [
989
+ { holdSeconds: 15, celsius: 10 },
990
+ { holdSeconds: 12, celsius: 11 },
991
+ ],
992
+ },
993
+ { holdSeconds: 30, celsius: 40 },
994
+ {
995
+ repetitions: 9,
996
+ steps: [
997
+ { holdSeconds: 13, celsius: 12 },
998
+ { holdSeconds: 14, celsius: 13 },
999
+ ],
1000
+ },
1001
+ ]
1002
+ renderWithProviders(
1003
+ <CommandText
1004
+ allRunDefs={[]}
1005
+ command={{
1006
+ commandType: 'thermocycler/runExtendedProfile',
1007
+ params: { profileElements: mockProfileSteps, moduleId: 'abc123' },
1008
+ id: 'def456',
1009
+ result: {},
1010
+ status: 'queued',
1011
+ error: null,
1012
+ createdAt: 'fake_timestamp',
1013
+ startedAt: null,
1014
+ completedAt: null,
1015
+ }}
1016
+ commandTextData={mockCommandTextData}
1017
+ robotType={FLEX_ROBOT_TYPE}
1018
+ isOnDevice={true}
1019
+ />,
1020
+ {
1021
+ i18nInstance: i18n,
1022
+ }
1023
+ )
1024
+ screen.getByText(
1025
+ 'Running thermocycler profile with 4 total steps and cycles:'
1026
+ )
1027
+ screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s')
1028
+
1029
+ expect(
1030
+ screen.queryByText('10 repetitions of the following steps:')
1031
+ ).not.toBeInTheDocument()
1032
+ expect(
1033
+ screen.queryByText('Temperature: 10°C, hold time: 0h 00m 15s')
1034
+ ).not.toBeInTheDocument()
1035
+ expect(
1036
+ screen.queryByText('Temperature: 11°C, hold time: 0h 00m 12s')
1037
+ ).not.toBeInTheDocument()
1038
+ expect(
1039
+ screen.queryByText('Temperature: 40°C, hold time: 0h 00m 30s')
1040
+ ).not.toBeInTheDocument()
1041
+ expect(
1042
+ screen.queryByText('9 repetitions of the following steps:')
1043
+ ).not.toBeInTheDocument()
1044
+ expect(
1045
+ screen.queryByText('Temperature: 12°C, hold time: 0h 00m 13s')
1046
+ ).not.toBeInTheDocument()
1047
+ expect(
1048
+ screen.queryByText('Temperature: 13°C, hold time: 0h 00m 14s')
1049
+ ).not.toBeInTheDocument()
1050
+ })
1051
+ it('renders correct text for heaterShaker/setAndWaitForShakeSpeed', () => {
1052
+ renderWithProviders(
1053
+ <CommandText
1054
+ allRunDefs={[]}
1055
+ command={{
1056
+ commandType: 'heaterShaker/setAndWaitForShakeSpeed',
1057
+ params: { rpm: 1000, moduleId: 'abc123' },
1058
+ id: 'def456',
1059
+ result: {},
1060
+ status: 'queued',
1061
+ error: null,
1062
+ createdAt: 'fake_timestamp',
1063
+ startedAt: null,
1064
+ completedAt: null,
1065
+ }}
1066
+ commandTextData={mockCommandTextData}
1067
+ robotType={FLEX_ROBOT_TYPE}
1068
+ />,
1069
+ {
1070
+ i18nInstance: i18n,
1071
+ }
1072
+ )
1073
+ screen.getByText(
1074
+ 'Setting Heater-Shaker to shake at 1000 rpm and waiting until reached'
1075
+ )
1076
+ })
1077
+ it('renders correct text for moveToSlot', () => {
1078
+ renderWithProviders(
1079
+ <CommandText
1080
+ allRunDefs={[]}
1081
+ command={{
1082
+ commandType: 'moveToSlot',
1083
+ params: { slotName: '1', pipetteId: 'asdfgh' },
1084
+ id: 'def456',
1085
+ result: {},
1086
+ status: 'queued',
1087
+ error: null,
1088
+ createdAt: 'fake_timestamp',
1089
+ startedAt: null,
1090
+ completedAt: null,
1091
+ }}
1092
+ commandTextData={mockCommandTextData}
1093
+ robotType={FLEX_ROBOT_TYPE}
1094
+ />,
1095
+ {
1096
+ i18nInstance: i18n,
1097
+ }
1098
+ )
1099
+ screen.getByText('Moving to Slot 1')
1100
+ })
1101
+ it('renders correct text for moveRelative', () => {
1102
+ renderWithProviders(
1103
+ <CommandText
1104
+ allRunDefs={[]}
1105
+ command={{
1106
+ commandType: 'moveRelative',
1107
+ params: { pipetteId: 'asdfgh', axis: 'x', distance: 10 },
1108
+ id: 'def456',
1109
+ result: { position: { x: 1, y: 2, z: 3 } },
1110
+ status: 'queued',
1111
+ error: null,
1112
+ createdAt: 'fake_timestamp',
1113
+ startedAt: null,
1114
+ completedAt: null,
1115
+ }}
1116
+ commandTextData={mockCommandTextData}
1117
+ robotType={FLEX_ROBOT_TYPE}
1118
+ />,
1119
+ {
1120
+ i18nInstance: i18n,
1121
+ }
1122
+ )
1123
+ screen.getByText('Moving 10 mm along x axis')
1124
+ })
1125
+ it('renders correct text for moveToCoordinates', () => {
1126
+ renderWithProviders(
1127
+ <CommandText
1128
+ allRunDefs={[]}
1129
+ command={{
1130
+ commandType: 'moveToCoordinates',
1131
+ params: { pipetteId: 'asdfgh', coordinates: { x: 1, y: 2, z: 3 } },
1132
+ id: 'def456',
1133
+ result: { position: { x: 1, y: 2, z: 3 } },
1134
+ status: 'queued',
1135
+ error: null,
1136
+ createdAt: 'fake_timestamp',
1137
+ startedAt: null,
1138
+ completedAt: null,
1139
+ }}
1140
+ commandTextData={mockCommandTextData}
1141
+ robotType={FLEX_ROBOT_TYPE}
1142
+ />,
1143
+ {
1144
+ i18nInstance: i18n,
1145
+ }
1146
+ )
1147
+ screen.getByText('Moving to (X: 1, Y: 2, Z: 3)')
1148
+ })
1149
+ it('renders correct text for commands with no parsed params', () => {
1150
+ const expectedCopyByCommandType: {
1151
+ [commandType in RunTimeCommand['commandType']]?: string
1152
+ } = {
1153
+ home: 'Homing all gantry, pipette, and plunger axes',
1154
+ savePosition: 'Saving position',
1155
+ touchTip: 'Touching tip',
1156
+ 'magneticModule/engage': 'Engaging Magnetic Module',
1157
+ 'magneticModule/disengage': 'Disengaging Magnetic Module',
1158
+ 'temperatureModule/deactivate': 'Deactivating Temperature Module',
1159
+ 'thermocycler/waitForBlockTemperature':
1160
+ 'Waiting for Thermocycler block to reach target temperature and holding for specified time',
1161
+ 'thermocycler/waitForLidTemperature':
1162
+ 'Waiting for Thermocycler lid to reach target temperature',
1163
+ 'thermocycler/openLid': 'Opening Thermocycler lid',
1164
+ 'thermocycler/closeLid': 'Closing Thermocycler lid',
1165
+ 'thermocycler/deactivateBlock': 'Deactivating Thermocycler block',
1166
+ 'thermocycler/deactivateLid': 'Deactivating Thermocycler lid',
1167
+ 'thermocycler/awaitProfileComplete':
1168
+ 'Waiting for Thermocycler profile to complete',
1169
+ 'heaterShaker/deactivateHeater': 'Deactivating heater',
1170
+ 'heaterShaker/openLabwareLatch': 'Unlatching labware on Heater-Shaker',
1171
+ 'heaterShaker/closeLabwareLatch': 'Latching labware on Heater-Shaker',
1172
+ 'heaterShaker/deactivateShaker': 'Deactivating shaker',
1173
+ 'heaterShaker/waitForTemperature':
1174
+ 'Waiting for Heater-Shaker to reach target temperature',
1175
+ } as const
1176
+ Object.entries(expectedCopyByCommandType).forEach(
1177
+ ([commandType, expectedCopy]) => {
1178
+ renderWithProviders(
1179
+ <CommandText
1180
+ allRunDefs={[]}
1181
+ command={
1182
+ {
1183
+ commandType,
1184
+ params: {},
1185
+ id: 'def456',
1186
+ result: {},
1187
+ status: 'queued',
1188
+ error: null,
1189
+ createdAt: 'fake_timestamp',
1190
+ startedAt: null,
1191
+ completedAt: null,
1192
+ } as RunTimeCommand
1193
+ }
1194
+ commandTextData={mockCommandTextData}
1195
+ robotType={FLEX_ROBOT_TYPE}
1196
+ />,
1197
+ {
1198
+ i18nInstance: i18n,
1199
+ }
1200
+ )
1201
+ expect(expectedCopy).not.toBeUndefined()
1202
+ if (expectedCopy != null) screen.getByText(expectedCopy)
1203
+ }
1204
+ )
1205
+ })
1206
+ it('renders correct text for waitForDuration', () => {
1207
+ renderWithProviders(
1208
+ <CommandText
1209
+ allRunDefs={[]}
1210
+ command={{
1211
+ commandType: 'waitForDuration',
1212
+ params: { seconds: 42, message: 'THIS IS A MESSAGE' },
1213
+ id: 'def456',
1214
+ result: {},
1215
+ status: 'queued',
1216
+ error: null,
1217
+ createdAt: 'fake_timestamp',
1218
+ startedAt: null,
1219
+ completedAt: null,
1220
+ }}
1221
+ commandTextData={mockCommandTextData}
1222
+ robotType={FLEX_ROBOT_TYPE}
1223
+ />,
1224
+ {
1225
+ i18nInstance: i18n,
1226
+ }
1227
+ )
1228
+ screen.getByText('Pausing for 42 seconds. THIS IS A MESSAGE')
1229
+ })
1230
+ it('renders correct text for legacy pause with message', () => {
1231
+ renderWithProviders(
1232
+ <CommandText
1233
+ allRunDefs={[]}
1234
+ command={{
1235
+ commandType: 'pause',
1236
+ params: { message: 'THIS IS A MESSAGE' },
1237
+ id: 'def456',
1238
+ result: {},
1239
+ status: 'queued',
1240
+ error: null,
1241
+ createdAt: 'fake_timestamp',
1242
+ startedAt: null,
1243
+ completedAt: null,
1244
+ }}
1245
+ commandTextData={mockCommandTextData}
1246
+ robotType={FLEX_ROBOT_TYPE}
1247
+ />,
1248
+ {
1249
+ i18nInstance: i18n,
1250
+ }
1251
+ )
1252
+ screen.getByText('THIS IS A MESSAGE')
1253
+ })
1254
+ it('renders correct text for legacy pause without message', () => {
1255
+ renderWithProviders(
1256
+ <CommandText
1257
+ allRunDefs={[]}
1258
+ command={{
1259
+ commandType: 'pause',
1260
+ params: {},
1261
+ id: 'def456',
1262
+ result: {},
1263
+ status: 'queued',
1264
+ error: null,
1265
+ createdAt: 'fake_timestamp',
1266
+ startedAt: null,
1267
+ completedAt: null,
1268
+ }}
1269
+ commandTextData={mockCommandTextData}
1270
+ robotType={FLEX_ROBOT_TYPE}
1271
+ />,
1272
+ {
1273
+ i18nInstance: i18n,
1274
+ }
1275
+ )
1276
+ screen.getByText('Pausing protocol')
1277
+ })
1278
+ it('renders correct text for waitForResume with message', () => {
1279
+ renderWithProviders(
1280
+ <CommandText
1281
+ allRunDefs={[]}
1282
+ command={{
1283
+ commandType: 'waitForResume',
1284
+ params: { message: 'THIS IS A MESSAGE' },
1285
+ id: 'def456',
1286
+ result: {},
1287
+ status: 'queued',
1288
+ error: null,
1289
+ createdAt: 'fake_timestamp',
1290
+ startedAt: null,
1291
+ completedAt: null,
1292
+ }}
1293
+ commandTextData={mockCommandTextData}
1294
+ robotType={FLEX_ROBOT_TYPE}
1295
+ />,
1296
+ {
1297
+ i18nInstance: i18n,
1298
+ }
1299
+ )
1300
+ screen.getByText('THIS IS A MESSAGE')
1301
+ })
1302
+ it('renders correct text for waitForResume without message', () => {
1303
+ renderWithProviders(
1304
+ <CommandText
1305
+ allRunDefs={[]}
1306
+ command={{
1307
+ commandType: 'waitForResume',
1308
+ params: {},
1309
+ id: 'def456',
1310
+ result: {},
1311
+ status: 'queued',
1312
+ error: null,
1313
+ createdAt: 'fake_timestamp',
1314
+ startedAt: null,
1315
+ completedAt: null,
1316
+ }}
1317
+ commandTextData={mockCommandTextData}
1318
+ robotType={FLEX_ROBOT_TYPE}
1319
+ />,
1320
+ {
1321
+ i18nInstance: i18n,
1322
+ }
1323
+ )
1324
+ screen.getByText('Pausing protocol')
1325
+ })
1326
+ it('renders correct text for legacy delay with time', () => {
1327
+ renderWithProviders(
1328
+ <CommandText
1329
+ allRunDefs={[]}
1330
+ command={{
1331
+ commandType: 'delay',
1332
+ params: { seconds: 42, message: 'THIS IS A MESSAGE' },
1333
+ id: 'def456',
1334
+ result: {},
1335
+ status: 'queued',
1336
+ error: null,
1337
+ createdAt: 'fake_timestamp',
1338
+ startedAt: null,
1339
+ completedAt: null,
1340
+ }}
1341
+ commandTextData={mockCommandTextData}
1342
+ robotType={FLEX_ROBOT_TYPE}
1343
+ />,
1344
+ {
1345
+ i18nInstance: i18n,
1346
+ }
1347
+ )
1348
+ screen.getByText('Pausing for 42 seconds. THIS IS A MESSAGE')
1349
+ })
1350
+ it('renders correct text for legacy delay wait for resume with message', () => {
1351
+ renderWithProviders(
1352
+ <CommandText
1353
+ allRunDefs={[]}
1354
+ command={{
1355
+ commandType: 'delay',
1356
+ params: { waitForResume: true, message: 'THIS IS A MESSAGE' },
1357
+ id: 'def456',
1358
+ result: {},
1359
+ status: 'queued',
1360
+ error: null,
1361
+ createdAt: 'fake_timestamp',
1362
+ startedAt: null,
1363
+ completedAt: null,
1364
+ }}
1365
+ commandTextData={mockCommandTextData}
1366
+ robotType={FLEX_ROBOT_TYPE}
1367
+ />,
1368
+ {
1369
+ i18nInstance: i18n,
1370
+ }
1371
+ )
1372
+ screen.getByText('THIS IS A MESSAGE')
1373
+ })
1374
+ it('renders correct text for legacy delay wait for resume without message', () => {
1375
+ renderWithProviders(
1376
+ <CommandText
1377
+ allRunDefs={[]}
1378
+ command={{
1379
+ commandType: 'delay',
1380
+ params: { waitForResume: true },
1381
+ id: 'def456',
1382
+ result: {},
1383
+ status: 'queued',
1384
+ error: null,
1385
+ createdAt: 'fake_timestamp',
1386
+ startedAt: null,
1387
+ completedAt: null,
1388
+ }}
1389
+ commandTextData={mockCommandTextData}
1390
+ robotType={FLEX_ROBOT_TYPE}
1391
+ />,
1392
+ {
1393
+ i18nInstance: i18n,
1394
+ }
1395
+ )
1396
+ screen.getByText('Pausing protocol')
1397
+ })
1398
+ it('renders correct text for comment', () => {
1399
+ renderWithProviders(
1400
+ <CommandText
1401
+ allRunDefs={[]}
1402
+ command={{
1403
+ commandType: 'comment',
1404
+ params: { message: 'THIS IS A MESSAGE' },
1405
+ id: 'def456',
1406
+ result: {},
1407
+ status: 'queued',
1408
+ error: null,
1409
+ createdAt: 'fake_timestamp',
1410
+ startedAt: null,
1411
+ completedAt: null,
1412
+ }}
1413
+ commandTextData={mockCommandTextData}
1414
+ robotType={FLEX_ROBOT_TYPE}
1415
+ />,
1416
+ {
1417
+ i18nInstance: i18n,
1418
+ }
1419
+ )
1420
+ screen.getByText('THIS IS A MESSAGE')
1421
+ })
1422
+ it('renders correct text for custom command type with legacy command text', () => {
1423
+ renderWithProviders(
1424
+ <CommandText
1425
+ allRunDefs={[]}
1426
+ command={{
1427
+ commandType: 'custom',
1428
+ params: { legacyCommandText: 'SOME LEGACY COMMAND' },
1429
+ id: 'def456',
1430
+ result: {},
1431
+ status: 'queued',
1432
+ error: null,
1433
+ createdAt: 'fake_timestamp',
1434
+ startedAt: null,
1435
+ completedAt: null,
1436
+ }}
1437
+ commandTextData={mockCommandTextData}
1438
+ robotType={FLEX_ROBOT_TYPE}
1439
+ />,
1440
+ {
1441
+ i18nInstance: i18n,
1442
+ }
1443
+ )
1444
+ screen.getByText('SOME LEGACY COMMAND')
1445
+ })
1446
+ it('renders correct text for custom command type with arbitrary params', () => {
1447
+ renderWithProviders(
1448
+ <CommandText
1449
+ allRunDefs={[]}
1450
+ command={{
1451
+ commandType: 'custom',
1452
+ params: {
1453
+ thunderBolts: true,
1454
+ lightning: 'yup',
1455
+ veryVeryFrightening: 1,
1456
+ },
1457
+ id: 'def456',
1458
+ result: {},
1459
+ status: 'queued',
1460
+ error: null,
1461
+ createdAt: 'fake_timestamp',
1462
+ startedAt: null,
1463
+ completedAt: null,
1464
+ }}
1465
+ commandTextData={mockCommandTextData}
1466
+ robotType={FLEX_ROBOT_TYPE}
1467
+ />,
1468
+ {
1469
+ i18nInstance: i18n,
1470
+ }
1471
+ )
1472
+ screen.getByText(
1473
+ 'custom: {"thunderBolts":true,"lightning":"yup","veryVeryFrightening":1}'
1474
+ )
1475
+ })
1476
+ it('renders correct text for move labware manually off deck', () => {
1477
+ renderWithProviders(
1478
+ <CommandText
1479
+ allRunDefs={[]}
1480
+ command={{
1481
+ commandType: 'moveLabware',
1482
+ params: {
1483
+ strategy: 'manualMoveWithPause',
1484
+ labwareId: mockCommandTextData.labware[2].id,
1485
+ newLocation: 'offDeck',
1486
+ },
1487
+ id: 'def456',
1488
+ result: { offsetId: 'fake_offset_id' },
1489
+ status: 'queued',
1490
+ error: null,
1491
+ createdAt: 'fake_timestamp',
1492
+ startedAt: null,
1493
+ completedAt: null,
1494
+ }}
1495
+ commandTextData={mockCommandTextData}
1496
+ robotType={FLEX_ROBOT_TYPE}
1497
+ />,
1498
+ {
1499
+ i18nInstance: i18n,
1500
+ }
1501
+ )
1502
+ screen.getByText(
1503
+ 'Manually move Opentrons 96 Tip Rack 300 µL from Slot 9 to off deck'
1504
+ )
1505
+ })
1506
+ it('renders correct text for move labware manually to module', () => {
1507
+ renderWithProviders(
1508
+ <CommandText
1509
+ allRunDefs={[]}
1510
+ command={{
1511
+ commandType: 'moveLabware',
1512
+ params: {
1513
+ strategy: 'manualMoveWithPause',
1514
+ labwareId: mockCommandTextData.labware[3].id,
1515
+ newLocation: { slotName: 'A3' },
1516
+ },
1517
+ id: 'def456',
1518
+ result: { offsetId: 'fake_offset_id' },
1519
+ status: 'queued',
1520
+ error: null,
1521
+ createdAt: 'fake_timestamp',
1522
+ startedAt: null,
1523
+ completedAt: null,
1524
+ }}
1525
+ commandTextData={mockCommandTextData}
1526
+ robotType={FLEX_ROBOT_TYPE}
1527
+ />,
1528
+ {
1529
+ i18nInstance: i18n,
1530
+ }
1531
+ )
1532
+ screen.getByText(
1533
+ 'Manually move NEST 96 Well Plate 100 µL PCR Full Skirt (1) from Magnetic Module GEN2 in Slot 1 to Slot A3'
1534
+ )
1535
+ })
1536
+ it('renders correct text for move labware with gripper off deck', () => {
1537
+ renderWithProviders(
1538
+ <CommandText
1539
+ allRunDefs={[]}
1540
+ command={{
1541
+ commandType: 'moveLabware',
1542
+ params: {
1543
+ strategy: 'usingGripper',
1544
+ labwareId: mockCommandTextData.labware[2].id,
1545
+ newLocation: 'offDeck',
1546
+ },
1547
+ id: 'def456',
1548
+ result: { offsetId: 'fake_offset_id' },
1549
+ status: 'queued',
1550
+ error: null,
1551
+ createdAt: 'fake_timestamp',
1552
+ startedAt: null,
1553
+ completedAt: null,
1554
+ }}
1555
+ commandTextData={mockCommandTextData}
1556
+ robotType={FLEX_ROBOT_TYPE}
1557
+ />,
1558
+ {
1559
+ i18nInstance: i18n,
1560
+ }
1561
+ )
1562
+ screen.getByText(
1563
+ 'Moving Opentrons 96 Tip Rack 300 µL using gripper from Slot 9 to off deck'
1564
+ )
1565
+ })
1566
+ it('renders correct text for move labware with gripper to waste chute', () => {
1567
+ renderWithProviders(
1568
+ <CommandText
1569
+ allRunDefs={[]}
1570
+ command={{
1571
+ commandType: 'moveLabware',
1572
+ params: {
1573
+ strategy: 'usingGripper',
1574
+ labwareId: mockCommandTextData.labware[2].id,
1575
+ newLocation: {
1576
+ addressableAreaName: GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA,
1577
+ },
1578
+ },
1579
+ id: 'def456',
1580
+ result: { offsetId: 'fake_offset_id' },
1581
+ status: 'queued',
1582
+ error: null,
1583
+ createdAt: 'fake_timestamp',
1584
+ startedAt: null,
1585
+ completedAt: null,
1586
+ }}
1587
+ commandTextData={mockCommandTextData}
1588
+ robotType={FLEX_ROBOT_TYPE}
1589
+ />,
1590
+ {
1591
+ i18nInstance: i18n,
1592
+ }
1593
+ )
1594
+ screen.getByText(
1595
+ 'Moving Opentrons 96 Tip Rack 300 µL using gripper from Slot 9 to Waste Chute'
1596
+ )
1597
+ })
1598
+ it('renders correct text for move labware with gripper to module', () => {
1599
+ renderWithProviders(
1600
+ <CommandText
1601
+ allRunDefs={[]}
1602
+ command={{
1603
+ commandType: 'moveLabware',
1604
+ params: {
1605
+ strategy: 'usingGripper',
1606
+ labwareId: mockCommandTextData.labware[3].id,
1607
+ newLocation: { moduleId: mockCommandTextData.modules[0].id },
1608
+ },
1609
+ id: 'def456',
1610
+ result: { offsetId: 'fake_offset_id' },
1611
+ status: 'queued',
1612
+ error: null,
1613
+ createdAt: 'fake_timestamp',
1614
+ startedAt: null,
1615
+ completedAt: null,
1616
+ }}
1617
+ commandTextData={mockCommandTextData}
1618
+ robotType={FLEX_ROBOT_TYPE}
1619
+ />,
1620
+ {
1621
+ i18nInstance: i18n,
1622
+ }
1623
+ )
1624
+ screen.getByText(
1625
+ 'Moving NEST 96 Well Plate 100 µL PCR Full Skirt (1) using gripper from Magnetic Module GEN2 in Slot 1 to Magnetic Module GEN2 in Slot 1'
1626
+ )
1627
+ })
1628
+
1629
+ it('renders correct text for liquidProbe', () => {
1630
+ const command = mockCommandTextData.commands.find(
1631
+ c => c.commandType === 'liquidProbe'
1632
+ )
1633
+ expect(command).not.toBeUndefined()
1634
+ if (command != null) {
1635
+ renderWithProviders(
1636
+ <CommandText
1637
+ allRunDefs={[]}
1638
+ commandTextData={mockCommandTextData}
1639
+ robotType={FLEX_ROBOT_TYPE}
1640
+ command={command}
1641
+ />,
1642
+ { i18nInstance: i18n }
1643
+ )
1644
+ screen.getByText(
1645
+ 'Detecting liquid presence in well A1 of Opentrons 96 Tip Rack 300 µL in Slot 9'
1646
+ )
1647
+ }
1648
+ })
1649
+
1650
+ it('renders correct text for tryLiquidProbe', () => {
1651
+ const command = mockCommandTextData.commands.find(
1652
+ c => c.commandType === 'tryLiquidProbe'
1653
+ )
1654
+ expect(command).not.toBeUndefined()
1655
+ if (command != null) {
1656
+ renderWithProviders(
1657
+ <CommandText
1658
+ allRunDefs={[]}
1659
+ commandTextData={mockCommandTextData}
1660
+ robotType={FLEX_ROBOT_TYPE}
1661
+ command={command}
1662
+ />,
1663
+ { i18nInstance: i18n }
1664
+ )
1665
+ screen.getByText(
1666
+ 'Detecting liquid presence in well A1 of Opentrons 96 Tip Rack 300 µL in Slot 9'
1667
+ )
1668
+ }
1669
+ })
1670
+ })