@opentrons/components 0.1.7-alpha.0 → 0.1.7-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/README.md +0 -1
  2. package/lib/assets/localization/en/index.d.ts +14 -0
  3. package/lib/assets/localization/index.d.ts +14 -0
  4. package/lib/atoms/Chip/index.d.ts +2 -0
  5. package/lib/atoms/InlineNotification/index.d.ts +18 -0
  6. package/lib/atoms/ListButton/index.d.ts +5 -0
  7. package/lib/atoms/ListItem/ListItemChildren/ListItemDescriptor.d.ts +4 -0
  8. package/lib/atoms/StyledText/StyledText.d.ts +1 -1
  9. package/lib/atoms/Tag/index.d.ts +4 -1
  10. package/lib/atoms/Toast/index.d.ts +1 -1
  11. package/lib/atoms/Tooltip/index.d.ts +1 -1
  12. package/lib/atoms/buttons/LargeButton.d.ts +1 -1
  13. package/lib/atoms/buttons/RadioButton.d.ts +29 -1
  14. package/lib/atoms/index.d.ts +3 -2
  15. package/lib/buttons/Button.d.ts +1 -1
  16. package/lib/controls/ToggleButton.d.ts +8 -2
  17. package/lib/controls/index.d.ts +0 -1
  18. package/lib/forms/DeprecatedCheckboxField.d.ts +1 -1
  19. package/lib/forms/SelectField.d.ts +1 -1
  20. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +13 -1
  21. package/lib/hardware-sim/BaseDeck/WasteChuteFixture.d.ts +1 -1
  22. package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +1 -1
  23. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +1 -1
  24. package/lib/hardware-sim/Labware/Labware.d.ts +2 -2
  25. package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +2 -2
  26. package/lib/hardware-sim/Labware/LabwareRender.d.ts +2 -2
  27. package/lib/hardware-sim/Labware/index.d.ts +0 -1
  28. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +1 -1
  29. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +1 -1
  30. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +1 -1
  31. package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -1
  32. package/lib/hardware-sim/Labware/labwareInternals/getTiprackBackgroundColor.d.ts +1 -0
  33. package/lib/hardware-sim/Module/FlexStacker.d.ts +1 -0
  34. package/lib/hardware-sim/Module/index.d.ts +1 -1
  35. package/lib/hardware-sim/index.d.ts +0 -2
  36. package/lib/helix-design-system/colors.d.ts +2 -1
  37. package/lib/hooks/useSwipe.d.ts +1 -1
  38. package/lib/icons/ModuleIcon.d.ts +1 -1
  39. package/lib/icons/NotificationIcon.d.ts +1 -1
  40. package/lib/instrument/InstrumentDiagram.d.ts +1 -1
  41. package/lib/instrument/index.d.ts +0 -1
  42. package/lib/legacy-hardware-sim/ModuleItem.d.ts +1 -1
  43. package/lib/molecules/Banner/index.d.ts +1 -1
  44. package/lib/molecules/DropdownMenu/index.d.ts +1 -1
  45. package/lib/molecules/LiquidIcon/index.d.ts +2 -2
  46. package/lib/organisms/CommandText/useCommandTextString/index.d.ts +2 -2
  47. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getFlexStackerCommandText.test.d.ts +1 -0
  48. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getRobotCommandText.test.d.ts +1 -0
  49. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.d.ts +1 -1
  50. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.d.ts +6 -3
  51. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getRobotCommandText.d.ts +4 -0
  52. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.d.ts +1 -1
  53. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/index.d.ts +2 -0
  54. package/lib/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.d.ts +1 -1
  55. package/lib/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.d.ts +1 -1
  56. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.d.ts +1 -1
  57. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +1 -1
  58. package/lib/organisms/DeckLabelSet/index.d.ts +1 -0
  59. package/lib/organisms/FixtureOption/__tests__/FixtureOption.test.d.ts +1 -0
  60. package/lib/organisms/FixtureOption/index.d.ts +10 -0
  61. package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +1 -1
  62. package/lib/organisms/index.d.ts +1 -0
  63. package/lib/primitives/ForeignObject.d.ts +1 -1
  64. package/lib/primitives/Link.d.ts +1 -1
  65. package/lib/primitives/Svg.d.ts +1 -1
  66. package/lib/primitives/style-props.d.ts +2 -2
  67. package/lib/primitives/types.d.ts +1 -1
  68. package/lib/testing/utils/renderWithProviders.d.ts +2 -2
  69. package/lib/tooltips/LegacyTooltip.d.ts +1 -1
  70. package/lib/tooltips/types.d.ts +2 -2
  71. package/package.json +2 -3
  72. package/src/Components.mdx +12 -0
  73. package/src/__tests__/utils.test.ts +2 -1
  74. package/src/alerts/AlertItem.stories.tsx +2 -2
  75. package/src/alerts/AlertItem.tsx +2 -1
  76. package/src/assets/localization/en/protocol_command_text.json +14 -0
  77. package/src/atoms/Checkbox/Checkbox.stories.tsx +1 -1
  78. package/src/atoms/Checkbox/__tests__/Checkbox.test.tsx +4 -2
  79. package/src/atoms/Checkbox/index.tsx +3 -2
  80. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +3 -2
  81. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +21 -35
  82. package/src/atoms/CheckboxField/index.tsx +81 -70
  83. package/src/atoms/Chip/Chip.stories.tsx +3 -2
  84. package/src/atoms/Chip/__tests__/Chip.test.tsx +41 -3
  85. package/src/atoms/Chip/index.tsx +76 -50
  86. package/src/atoms/InlineNotification/InlineNotification.stories.tsx +107 -0
  87. package/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx +66 -0
  88. package/src/atoms/InlineNotification/index.tsx +197 -0
  89. package/src/atoms/InputField/InputField.stories.tsx +3 -0
  90. package/src/atoms/InputField/__tests__/InputField.test.tsx +4 -3
  91. package/src/atoms/InputField/index.tsx +4 -4
  92. package/src/atoms/ListButton/ListButton.stories.tsx +4 -2
  93. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +3 -2
  94. package/src/atoms/ListButton/__tests__/ListButton.test.tsx +5 -3
  95. package/src/atoms/ListButton/__tests__/ListButtonAccordion.test.tsx +2 -2
  96. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +2 -2
  97. package/src/atoms/ListButton/index.tsx +57 -41
  98. package/src/atoms/ListItem/ListItem.stories.tsx +7 -5
  99. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +21 -15
  100. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +4 -0
  101. package/src/atoms/ListItem/__tests__/ListItem.test.tsx +5 -3
  102. package/src/atoms/ListItem/index.tsx +3 -2
  103. package/src/atoms/ListTable/ListTable.stories.tsx +1 -1
  104. package/src/atoms/ListTable/__tests__/ListTable.test.tsx +2 -2
  105. package/src/atoms/ListTable/index.tsx +4 -4
  106. package/src/atoms/MenuList/MenuItem.stories.tsx +1 -1
  107. package/src/atoms/MenuList/MenuItem.tsx +4 -1
  108. package/src/atoms/MenuList/MenuList.stories.tsx +1 -0
  109. package/src/atoms/MenuList/OverflowBtn.tsx +1 -1
  110. package/src/atoms/MenuList/__tests__/MenuItem.test.tsx +2 -3
  111. package/src/atoms/MenuList/__tests__/MenuList.test.tsx +2 -2
  112. package/src/atoms/MenuList/__tests__/OverflowBtn.test.tsx +1 -1
  113. package/src/atoms/MenuList/index.tsx +2 -2
  114. package/src/atoms/Snackbar/Snackbar.stories.tsx +4 -2
  115. package/src/atoms/Snackbar/__tests__/Snackbar.test.tsx +6 -3
  116. package/src/atoms/Snackbar/index.tsx +3 -2
  117. package/src/atoms/StepMeter/__tests__/StepMeter.test.tsx +45 -0
  118. package/src/atoms/StepMeter/index.tsx +33 -24
  119. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +2 -1
  120. package/src/atoms/StyledText/LegacyStyledText.tsx +3 -2
  121. package/src/atoms/StyledText/StyledText.stories.tsx +3 -2
  122. package/src/atoms/StyledText/StyledText.tsx +4 -3
  123. package/src/atoms/SubListTable/SubListTable.stories.tsx +1 -1
  124. package/src/atoms/SubListTable/__tests__/SubListTable.test.tsx +2 -2
  125. package/src/atoms/SubListTable/index.tsx +4 -4
  126. package/src/atoms/Tag/Tag.stories.tsx +2 -1
  127. package/src/atoms/Tag/__tests__/Tag.test.tsx +2 -1
  128. package/src/atoms/Tag/index.tsx +53 -35
  129. package/src/atoms/Toast/ODDToast.stories.tsx +18 -8
  130. package/src/atoms/Toast/Toast.stories.tsx +3 -2
  131. package/src/atoms/Toast/__tests__/ODDToast.test.tsx +5 -2
  132. package/src/atoms/Toast/__tests__/Toast.test.tsx +5 -2
  133. package/src/atoms/Toast/index.tsx +75 -80
  134. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +2 -0
  135. package/src/atoms/ToggleGroup/__tests__/ToggleGroup.test.tsx +2 -1
  136. package/src/atoms/ToggleGroup/index.tsx +2 -1
  137. package/src/atoms/Tooltip/Tooltip.stories.tsx +6 -5
  138. package/src/atoms/Tooltip/__tests__/Tooltip.test.tsx +6 -5
  139. package/src/atoms/Tooltip/index.tsx +3 -3
  140. package/src/atoms/buttons/AlertPrimaryButton.tsx +2 -1
  141. package/src/atoms/buttons/AltPrimaryButton.tsx +1 -1
  142. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +1 -0
  143. package/src/atoms/buttons/EmptySelectorButton.tsx +10 -3
  144. package/src/atoms/buttons/LargeButton.stories.tsx +2 -2
  145. package/src/atoms/buttons/LargeButton.tsx +5 -5
  146. package/src/atoms/buttons/PrimaryButton.tsx +7 -3
  147. package/src/atoms/buttons/RadioButton.stories.tsx +2 -1
  148. package/src/atoms/buttons/RadioButton.tsx +102 -43
  149. package/src/atoms/buttons/SecondaryButton.tsx +13 -7
  150. package/src/atoms/buttons/TertiaryButton.tsx +1 -0
  151. package/src/atoms/buttons/__tests__/AlertPrimaryButton.test.tsx +5 -4
  152. package/src/atoms/buttons/__tests__/AltPrimaryButton.test.tsx +6 -4
  153. package/src/atoms/buttons/__tests__/EmptySelectorButton.test.tsx +4 -2
  154. package/src/atoms/buttons/__tests__/LargeButton.test.tsx +4 -2
  155. package/src/atoms/buttons/__tests__/PrimaryButton.test.tsx +7 -5
  156. package/src/atoms/buttons/__tests__/RadioButton.test.tsx +17 -3
  157. package/src/atoms/buttons/__tests__/SecondaryButton.test.tsx +6 -5
  158. package/src/atoms/buttons/buttons.stories.tsx +6 -6
  159. package/src/atoms/index.ts +3 -2
  160. package/src/buttons/Button.tsx +2 -3
  161. package/src/buttons/IconButton.tsx +1 -2
  162. package/src/controls/LabeledRadioGroup.tsx +1 -1
  163. package/src/controls/ToggleButton.tsx +62 -18
  164. package/src/controls/index.ts +0 -1
  165. package/src/forms/DeprecatedCheckboxField.stories.tsx +1 -1
  166. package/src/forms/DeprecatedCheckboxField.tsx +3 -3
  167. package/src/forms/FormGroup.stories.tsx +3 -4
  168. package/src/forms/FormGroup.tsx +1 -0
  169. package/src/forms/InputField.stories.tsx +2 -1
  170. package/src/forms/LegacyInputField.tsx +1 -0
  171. package/src/forms/RadioGroup.stories.tsx +2 -1
  172. package/src/forms/RadioGroup.tsx +1 -0
  173. package/src/forms/Select.stories.tsx +2 -3
  174. package/src/forms/Select.tsx +3 -3
  175. package/src/forms/SelectField.tsx +1 -1
  176. package/src/forms/ToggleField.stories.tsx +1 -1
  177. package/src/forms/ToggleField.tsx +2 -2
  178. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +1 -1
  179. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +121 -21
  180. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +5 -5
  181. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +2 -2
  182. package/src/hardware-sim/Deck/DeckFromLayers.tsx +6 -5
  183. package/src/hardware-sim/Deck/FlexTrash.tsx +2 -1
  184. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +4 -3
  185. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +12 -12
  186. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +1 -0
  187. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +3 -1
  188. package/src/hardware-sim/Deck/SlotLabels.tsx +2 -0
  189. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +2 -2
  190. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +2 -3
  191. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +4 -3
  192. package/src/hardware-sim/DeckConfigurator/FlexStackerFixture.tsx +2 -2
  193. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +3 -3
  194. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +6 -6
  195. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +1 -1
  196. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +2 -2
  197. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +3 -3
  198. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +4 -4
  199. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +3 -3
  200. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +3 -3
  201. package/src/hardware-sim/DeckConfigurator/index.tsx +29 -16
  202. package/src/hardware-sim/Labware/Labware.tsx +5 -7
  203. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +5 -4
  204. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +4 -5
  205. package/src/hardware-sim/Labware/LabwareRender.tsx +8 -9
  206. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +6 -2
  207. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +6 -2
  208. package/src/hardware-sim/Labware/index.ts +0 -1
  209. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +2 -1
  210. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +9 -4
  211. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +2 -1
  212. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +5 -5
  213. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +3 -2
  214. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +2 -1
  215. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +5 -2
  216. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +2 -1
  217. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +4 -1
  218. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +5 -1
  219. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +6 -2
  220. package/src/hardware-sim/Labware/labwareInternals/getTiprackBackgroundColor.ts +32 -0
  221. package/src/hardware-sim/Module/FlexStacker.tsx +54 -0
  222. package/src/hardware-sim/Module/Module.stories.tsx +4 -3
  223. package/src/hardware-sim/Module/ModuleTag.tsx +3 -3
  224. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +1 -0
  225. package/src/hardware-sim/Module/Thermocycler/index.tsx +3 -3
  226. package/src/hardware-sim/Module/index.tsx +14 -7
  227. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +1 -0
  228. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +2 -1
  229. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +4 -2
  230. package/src/hardware-sim/Pipette/PipetteRender.tsx +7 -5
  231. package/src/hardware-sim/Pipette/__tests__/EightEmanatingNozzles.test.tsx +2 -1
  232. package/src/hardware-sim/Pipette/__tests__/EmanatingNozzle.test.tsx +4 -3
  233. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +9 -7
  234. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +2 -1
  235. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +1 -0
  236. package/src/hardware-sim/index.ts +0 -2
  237. package/src/helix-design-system/colors.ts +2 -1
  238. package/src/hooks/__tests__/useDrag.test.ts +3 -1
  239. package/src/hooks/__tests__/useLongPress.test.ts +2 -1
  240. package/src/hooks/__tests__/useScrolling.test.tsx +3 -2
  241. package/src/hooks/__tests__/useSwipe.test.tsx +2 -1
  242. package/src/hooks/useDrag.ts +2 -1
  243. package/src/hooks/useInterval.ts +1 -0
  244. package/src/hooks/useLongPress.ts +2 -1
  245. package/src/hooks/useMenuHandleClickOutside.tsx +1 -0
  246. package/src/hooks/useMountEffect.ts +2 -0
  247. package/src/hooks/useScrolling.ts +1 -1
  248. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +3 -1
  249. package/src/hooks/useSelectDeckLocation/index.tsx +8 -6
  250. package/src/hooks/useSwipe.ts +3 -2
  251. package/src/i18n.ts +4 -2
  252. package/src/icons/Icon.stories.tsx +2 -1
  253. package/src/icons/Icon.tsx +1 -1
  254. package/src/icons/IconList.stories.tsx +9 -8
  255. package/src/icons/ModuleIcon.tsx +8 -7
  256. package/src/icons/NotificationIcon.tsx +1 -1
  257. package/src/icons/icon-data.ts +5 -0
  258. package/src/instrument/InstrumentDiagram.stories.tsx +3 -2
  259. package/src/instrument/InstrumentDiagram.tsx +9 -8
  260. package/src/instrument/InstrumentGroup.stories.tsx +4 -3
  261. package/src/instrument/InstrumentGroup.tsx +1 -1
  262. package/src/instrument/InstrumentInfo.tsx +4 -4
  263. package/src/instrument/__tests__/InstrumentInfo.test.tsx +5 -3
  264. package/src/instrument/index.ts +0 -1
  265. package/src/interaction-enhancers/ClickOutside.ts +1 -0
  266. package/src/interaction-enhancers/HandleKeypress.tsx +1 -0
  267. package/src/interaction-enhancers/__tests__/useHover.test.tsx +1 -0
  268. package/src/interaction-enhancers/useHover.ts +1 -1
  269. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +1 -0
  270. package/src/legacy-hardware-sim/ModuleItem.tsx +2 -2
  271. package/src/lists/SidePanelGroup.tsx +1 -1
  272. package/src/lists/TitledList.tsx +2 -3
  273. package/src/modals/LegacyModal.tsx +2 -2
  274. package/src/modals/Modal.stories.tsx +1 -1
  275. package/src/modals/Modal.tsx +1 -1
  276. package/src/modals/ModalHeader.tsx +2 -2
  277. package/src/modals/ModalShell.tsx +3 -2
  278. package/src/modals/SpinnerModal.tsx +2 -2
  279. package/src/modals/SpinnerModalPage.tsx +1 -1
  280. package/src/modals/__tests__/Modal.test.tsx +4 -2
  281. package/src/modals/__tests__/ModalHeader.test.tsx +5 -3
  282. package/src/modals/__tests__/ModalShell.test.tsx +3 -1
  283. package/src/molecules/Banner/Banner.stories.tsx +1 -1
  284. package/src/molecules/Banner/__tests__/Banner.test.tsx +2 -2
  285. package/src/molecules/Banner/index.tsx +5 -4
  286. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +1 -1
  287. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +4 -4
  288. package/src/molecules/DeckLabel/__tests__/DeckLabel.test.tsx +3 -3
  289. package/src/molecules/DeckLabel/index.tsx +5 -3
  290. package/src/molecules/DropdownMenu/__tests__/DropdownMenu.test.tsx +3 -3
  291. package/src/molecules/DropdownMenu/index.tsx +5 -2
  292. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +2 -1
  293. package/src/molecules/InfoScreen/__tests__/InfoScreen.test.tsx +3 -3
  294. package/src/molecules/InfoScreen/index.tsx +2 -2
  295. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +3 -2
  296. package/src/molecules/LiquidIcon/__tests__/LiquidIcon.test.tsx +4 -4
  297. package/src/molecules/LiquidIcon/index.tsx +16 -10
  298. package/src/molecules/ListAccordion/ListAccordion.stories.tsx +3 -3
  299. package/src/molecules/ListAccordion/__tests__/ListAccordion.test.tsx +3 -3
  300. package/src/molecules/ListAccordion/index.tsx +6 -6
  301. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +1 -0
  302. package/src/molecules/ParametersTable/__tests__/ParametersTable.test.tsx +3 -2
  303. package/src/molecules/ParametersTable/index.tsx +9 -7
  304. package/src/molecules/ReleaseNotes/index.tsx +1 -1
  305. package/src/molecules/Tabs/Tabs.stories.tsx +3 -1
  306. package/src/molecules/Tabs/__tests__/Tabs.test.tsx +3 -2
  307. package/src/molecules/Tabs/index.tsx +4 -3
  308. package/src/molecules/TextListTableContent/TextListTableContent.stories.tsx +1 -1
  309. package/src/molecules/TextListTableContent/__tests__/TextListTableContent.test.tsx +2 -2
  310. package/src/molecules/TextListTableContent/index.tsx +2 -2
  311. package/src/nav/SidePanel.stories.tsx +4 -3
  312. package/src/organisms/CommandText/CommandText.stories.tsx +3 -2
  313. package/src/organisms/CommandText/__tests__/CommandText.test.tsx +7 -6
  314. package/src/organisms/CommandText/fixtures/index.ts +1 -0
  315. package/src/organisms/CommandText/index.tsx +4 -2
  316. package/src/organisms/CommandText/useCommandTextString/index.ts +28 -5
  317. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/formatDuration.test.tsx +2 -1
  318. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +4 -1
  319. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getLabwareDisplayLocation.test.tsx +6 -5
  320. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getFlexStackerCommandText.test.tsx +179 -0
  321. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +10 -9
  322. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getRobotCommandText.test.tsx +118 -0
  323. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts +1 -1
  324. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +142 -6
  325. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts +1 -0
  326. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLoadCommandText.ts +4 -3
  327. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +5 -4
  328. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getRobotCommandText.ts +87 -0
  329. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts +3 -2
  330. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts +1 -0
  331. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.ts +4 -4
  332. package/src/organisms/CommandText/useCommandTextString/utils/commandText/index.ts +2 -0
  333. package/src/organisms/CommandText/useCommandTextString/utils/formatDuration.ts +2 -0
  334. package/src/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.ts +1 -1
  335. package/src/organisms/CommandText/useCommandTextString/utils/getFinalAddressableAreaCmd.ts +2 -0
  336. package/src/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.ts +2 -2
  337. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +1 -1
  338. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.tsx +38 -15
  339. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +18 -9
  340. package/src/organisms/CommandText/useCommandTextString/utils/getModuleDisplayLocation.ts +1 -0
  341. package/src/organisms/CommandText/useCommandTextString/utils/getModuleModel.ts +1 -0
  342. package/src/organisms/CommandText/useCommandTextString/utils/getWellRange.ts +2 -1
  343. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +1 -2
  344. package/src/organisms/DeckLabelSet/__tests__/DeckLabelSet.test.tsx +3 -3
  345. package/src/organisms/DeckLabelSet/index.tsx +55 -22
  346. package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +42 -0
  347. package/src/organisms/FixtureOption/index.tsx +92 -0
  348. package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +6 -4
  349. package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +4 -2
  350. package/src/organisms/ProtocolTimelineScrubber/index.tsx +22 -45
  351. package/src/organisms/ProtocolTimelineScrubber/utils.ts +6 -3
  352. package/src/organisms/Toolbox/Toolbox.stories.tsx +1 -0
  353. package/src/organisms/Toolbox/__tests__/Toolbox.test.tsx +2 -1
  354. package/src/organisms/Toolbox/index.tsx +3 -2
  355. package/src/organisms/index.ts +1 -0
  356. package/src/primitives/Box.stories.tsx +1 -1
  357. package/src/primitives/Box.tsx +1 -1
  358. package/src/primitives/Btn.stories.tsx +8 -8
  359. package/src/primitives/Btn.tsx +2 -3
  360. package/src/primitives/Flex.stories.tsx +3 -3
  361. package/src/primitives/Flex.tsx +1 -1
  362. package/src/primitives/ForeignObject.tsx +2 -2
  363. package/src/primitives/Link.tsx +2 -2
  364. package/src/primitives/README.md +7 -16
  365. package/src/primitives/Svg.stories.tsx +2 -2
  366. package/src/primitives/Svg.tsx +2 -2
  367. package/src/primitives/Text.stories.tsx +2 -2
  368. package/src/primitives/Text.tsx +1 -1
  369. package/src/primitives/__tests__/Box.test.tsx +1 -0
  370. package/src/primitives/__tests__/Btn.test.tsx +1 -0
  371. package/src/primitives/__tests__/Flex.test.tsx +1 -0
  372. package/src/primitives/__tests__/Link.test.tsx +1 -0
  373. package/src/primitives/__tests__/Svg.test.tsx +1 -0
  374. package/src/primitives/__tests__/Text.test.tsx +1 -0
  375. package/src/primitives/__tests__/primitives.test.tsx +1 -0
  376. package/src/primitives/__tests__/style-props.test.tsx +1 -0
  377. package/src/primitives/style-props.ts +1 -2
  378. package/src/primitives/types.ts +1 -1
  379. package/src/slotmap/OT2SlotMap.tsx +1 -0
  380. package/src/slotmap/__tests__/OT2SlotMap.test.tsx +1 -0
  381. package/src/structure/Card.stories.tsx +4 -3
  382. package/src/structure/Card.tsx +3 -1
  383. package/src/structure/LabeledValue.stories.tsx +2 -2
  384. package/src/structure/Splash.stories.tsx +4 -3
  385. package/src/structure/TitleBar.stories.tsx +4 -3
  386. package/src/testing/utils/matchers.ts +1 -0
  387. package/src/testing/utils/renderWithProviders.tsx +4 -4
  388. package/src/tooltips/DeprecatedTooltip.tsx +2 -1
  389. package/src/tooltips/LegacyTooltip.stories.tsx +10 -9
  390. package/src/tooltips/LegacyTooltip.tsx +5 -5
  391. package/src/tooltips/__tests__/Tooltip.test.tsx +1 -0
  392. package/src/tooltips/__tests__/useHoverTooltip.test.tsx +1 -0
  393. package/src/tooltips/__tests__/usePopper.test.tsx +1 -0
  394. package/src/tooltips/__tests__/useTooltip.test.tsx +1 -0
  395. package/src/tooltips/types.ts +2 -4
  396. package/src/tooltips/usePopper.ts +4 -4
  397. package/src/tooltips/useTooltip.ts +4 -3
  398. package/src/ui-style-constants/typography.ts +1 -0
  399. package/vite.config.mts +5 -1
  400. package/lib/controls/LabeledToggle.d.ts +0 -11
  401. package/lib/hardware-sim/Labware/LabwareStackRender.d.ts +0 -20
  402. package/lib/hardware-sim/ProtocolDeck/LabwareInfo.d.ts +0 -6
  403. package/lib/hardware-sim/ProtocolDeck/index.d.ts +0 -11
  404. package/lib/hardware-sim/ProtocolDeck/types.d.ts +0 -8
  405. package/lib/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.d.ts +0 -5
  406. package/lib/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.d.ts +0 -12
  407. package/lib/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.d.ts +0 -3
  408. package/lib/hardware-sim/ProtocolDeck/utils/getModulesInSlots.d.ts +0 -10
  409. package/lib/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.d.ts +0 -2
  410. package/lib/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.d.ts +0 -4
  411. package/lib/hardware-sim/ProtocolDeck/utils/index.d.ts +0 -4
  412. package/lib/instrument/PipetteSelect.d.ts +0 -20
  413. package/src/controls/LabeledToggle.tsx +0 -35
  414. package/src/hardware-sim/Labware/LabwareStackRender.tsx +0 -273
  415. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +0 -69
  416. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +0 -25
  417. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +0 -47145
  418. package/src/hardware-sim/ProtocolDeck/index.tsx +0 -85
  419. package/src/hardware-sim/ProtocolDeck/types.ts +0 -6
  420. package/src/hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.ts +0 -158
  421. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +0 -33
  422. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +0 -321
  423. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +0 -43
  424. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +0 -129
  425. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +0 -29
  426. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +0 -30
  427. package/src/hardware-sim/ProtocolDeck/utils/index.ts +0 -4
  428. package/src/instrument/PipetteSelect.stories.tsx +0 -40
  429. package/src/instrument/PipetteSelect.tsx +0 -170
  430. package/src/instrument/__tests__/PipetteSelect.test.tsx +0 -4
  431. /package/lib/{hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.d.ts → atoms/InlineNotification/__tests__/InlineNotification.test.d.ts} +0 -0
  432. /package/lib/{instrument/__tests__/PipetteSelect.test.d.ts → atoms/StepMeter/__tests__/StepMeter.test.d.ts} +0 -0
@@ -1,25 +1,69 @@
1
- // reusable toggle button with on off styling for connect to robot and opt in/out
2
- import cx from 'classnames'
3
- import { IconButton } from '../buttons'
4
- import styles from './styles.module.css'
1
+ import { css } from 'styled-components'
5
2
 
6
- import type { ButtonProps } from '../buttons'
3
+ import { COLORS } from '../helix-design-system'
4
+ import { Icon } from '../icons'
5
+ import { Btn, Flex } from '../primitives'
7
6
 
8
- export interface ToggleButtonProps extends ButtonProps {
7
+ import type { MouseEvent } from 'react'
8
+ import type { StyleProps } from '../primitives'
9
+
10
+ const TOGGLE_DISABLED_STYLES = css`
11
+ color: ${COLORS.grey50};
12
+
13
+ &:hover {
14
+ color: ${COLORS.grey55};
15
+ }
16
+
17
+ &:focus-visible {
18
+ box-shadow: 0 0 0 3px ${COLORS.yellow50};
19
+ }
20
+
21
+ &:disabled {
22
+ color: ${COLORS.grey30};
23
+ }
24
+ `
25
+
26
+ const TOGGLE_ENABLED_STYLES = css`
27
+ color: ${COLORS.blue50};
28
+
29
+ &:hover {
30
+ color: ${COLORS.blue55};
31
+ }
32
+
33
+ &:focus-visible {
34
+ box-shadow: 0 0 0 3px ${COLORS.yellow50};
35
+ }
36
+
37
+ &:disabled {
38
+ color: ${COLORS.grey30};
39
+ }
40
+ `
41
+
42
+ interface ToggleButtonProps extends StyleProps {
9
43
  toggledOn: boolean
44
+ label?: string | null
45
+ disabled?: boolean | null
46
+ id?: string
47
+ onClick?: (e: MouseEvent) => void
10
48
  }
11
49
 
12
50
  export function ToggleButton(props: ToggleButtonProps): JSX.Element {
13
- // TODO(mc, 2020-02-04): destructuring `name` to avoid flow error
14
- // ButtonProps::name conflicts with IconProps::name, and IconButton
15
- // has `name` prop to pass to Icon. IconButton will need to be redone
16
- const { toggledOn, name, ...buttonProps } = props
17
- const className = cx(styles.robot_item_icon, props.className, {
18
- [styles.toggled_on]: toggledOn,
19
- [styles.toggled_off]: !toggledOn,
20
- })
21
-
22
- const toggleIcon = toggledOn ? 'ot-toggle-switch-on' : 'ot-toggle-switch-off'
23
-
24
- return <IconButton {...buttonProps} name={toggleIcon} className={className} />
51
+ const { label, toggledOn, disabled, size, ...buttonProps } = props
52
+ const iconName = toggledOn ? 'ot-toggle-input-on' : 'ot-toggle-input-off'
53
+
54
+ return (
55
+ <Btn
56
+ disabled={disabled ?? false}
57
+ role="switch"
58
+ aria-label={label}
59
+ aria-checked={toggledOn}
60
+ size={size ?? '2rem'}
61
+ css={props.toggledOn ? TOGGLE_ENABLED_STYLES : TOGGLE_DISABLED_STYLES}
62
+ {...buttonProps}
63
+ >
64
+ <Flex>
65
+ <Icon name={iconName} size="2rem" />
66
+ </Flex>
67
+ </Btn>
68
+ )
25
69
  }
@@ -3,7 +3,6 @@
3
3
  // belong in the please-refactor-these-to-use-primitives-and-styled-components
4
4
  // category). We should move them all.
5
5
  export * from './ToggleButton'
6
- export * from './LabeledToggle'
7
6
  export * from './LabeledButton'
8
7
  export * from './LabeledCheckbox'
9
8
  export * from './LabeledRadioGroup'
@@ -2,7 +2,7 @@ import * as React from 'react'
2
2
 
3
3
  import { DeprecatedCheckboxField as DeprecatedCheckboxComponent } from './DeprecatedCheckboxField'
4
4
 
5
- import type { Story, Meta } from '@storybook/react'
5
+ import type { Meta, Story } from '@storybook/react'
6
6
 
7
7
  export default {
8
8
  title: 'Library/Molecules/Forms/Deprecated Checkbox Field',
@@ -1,10 +1,10 @@
1
1
  import cx from 'classnames'
2
- import { Icon } from '../icons'
3
-
4
- import type { ComponentProps, ChangeEventHandler } from 'react'
5
2
 
3
+ import { Icon } from '../icons'
6
4
  import styles from './forms.module.css'
7
5
 
6
+ import type { ChangeEventHandler, ComponentProps } from 'react'
7
+
8
8
  /**
9
9
  * Checkbox Field Properties.
10
10
  */
@@ -1,9 +1,8 @@
1
- import type * as React from 'react'
2
-
3
- import { FormGroup as FormGroupComponent } from './FormGroup'
4
1
  import { DeprecatedCheckboxField } from './DeprecatedCheckboxField.stories'
2
+ import { FormGroup as FormGroupComponent } from './FormGroup'
5
3
 
6
- import type { Story, Meta } from '@storybook/react'
4
+ import type { Meta, Story } from '@storybook/react'
5
+ import type * as React from 'react'
7
6
 
8
7
  export default {
9
8
  title: 'Library/Molecules/Forms/Form Group',
@@ -1,4 +1,5 @@
1
1
  import cx from 'classnames'
2
+
2
3
  import { Icon } from '../icons'
3
4
  import styles from './forms.module.css'
4
5
 
@@ -1,9 +1,10 @@
1
1
  import * as React from 'react'
2
+
2
3
  import { Box, SIZE_6 } from '@opentrons/components'
3
4
 
4
5
  import { LegacyInputField as InputFieldComponent } from './LegacyInputField'
5
6
 
6
- import type { Story, Meta } from '@storybook/react'
7
+ import type { Meta, Story } from '@storybook/react'
7
8
 
8
9
  export default {
9
10
  title: 'Library/Molecules/Forms/Input Field',
@@ -1,4 +1,5 @@
1
1
  import cx from 'classnames'
2
+
2
3
  import { Icon } from '../icons'
3
4
  import styles from './forms.module.css'
4
5
 
@@ -1,9 +1,10 @@
1
1
  import * as React from 'react'
2
+
2
3
  import { Box, SIZE_6 } from '@opentrons/components'
3
4
 
4
5
  import { RadioGroup as RadioGroupComponent } from './RadioGroup'
5
6
 
6
- import type { Story, Meta } from '@storybook/react'
7
+ import type { Meta, Story } from '@storybook/react'
7
8
 
8
9
  export default {
9
10
  title: 'Library/Molecules/Forms/Radio Group',
@@ -1,4 +1,5 @@
1
1
  import cx from 'classnames'
2
+
2
3
  import { Icon } from '../icons'
3
4
  import styles from './forms.module.css'
4
5
 
@@ -1,9 +1,8 @@
1
- import type * as React from 'react'
2
-
3
1
  import { Select } from './Select'
4
2
  import styles from './Select.module.css'
5
3
 
6
- import type { Story, Meta } from '@storybook/react'
4
+ import type { Meta, Story } from '@storybook/react'
5
+ import type * as React from 'react'
7
6
 
8
7
  export default {
9
8
  title: 'Library/Molecules/Forms/Select',
@@ -1,15 +1,15 @@
1
1
  import ReactSelect, { components as reactSelectComponents } from 'react-select'
2
-
3
2
  import cx from 'classnames'
4
3
 
5
4
  import { Icon } from '../icons'
6
5
  import styles from './Select.module.css'
6
+
7
7
  import type {
8
+ CSSObjectWithLabel,
8
9
  DropdownIndicatorProps,
9
- Props as ReactSelectProps,
10
10
  MenuProps,
11
+ Props as ReactSelectProps,
11
12
  StylesConfig,
12
- CSSObjectWithLabel,
13
13
  } from 'react-select'
14
14
  import type { POSITION_ABSOLUTE, POSITION_FIXED } from '../styles'
15
15
 
@@ -6,8 +6,8 @@ import styles from './SelectField.module.css'
6
6
 
7
7
  import type { ReactNode } from 'react'
8
8
  import type { ActionMeta, MultiValue, SingleValue } from 'react-select'
9
- import type { SelectProps } from './Select'
10
9
  import type { SelectOption } from '.'
10
+ import type { SelectProps } from './Select'
11
11
 
12
12
  export interface SelectFieldProps {
13
13
  /** optional HTML id for container */
@@ -2,7 +2,7 @@ import * as React from 'react'
2
2
 
3
3
  import { ToggleField as ToggleFieldComponent } from './ToggleField'
4
4
 
5
- import type { Story, Meta } from '@storybook/react'
5
+ import type { Meta, Story } from '@storybook/react'
6
6
 
7
7
  const Template: Story<
8
8
  React.ComponentProps<typeof ToggleFieldComponent>
@@ -1,10 +1,10 @@
1
1
  import cx from 'classnames'
2
+
2
3
  import { Icon } from '../icons'
4
+ import styles from './forms.module.css'
3
5
 
4
6
  import type { ChangeEvent } from 'react'
5
7
 
6
- import styles from './forms.module.css'
7
-
8
8
  export interface ToggleFieldProps {
9
9
  /** change handler */
10
10
  onChange: (event: ChangeEvent<HTMLInputElement>) => unknown
@@ -1,4 +1,3 @@
1
- import type * as React from 'react'
2
1
  import {
3
2
  fixture96Plate,
4
3
  fixtureTiprack1000ul,
@@ -17,6 +16,7 @@ import {
17
16
  import { BaseDeck as BaseDeckComponent } from './BaseDeck'
18
17
 
19
18
  import type { Meta, StoryObj } from '@storybook/react'
19
+ import type * as React from 'react'
20
20
  import type {
21
21
  DeckConfiguration,
22
22
  LabwareDefinition2,
@@ -1,40 +1,42 @@
1
1
  import { Fragment } from 'react'
2
+ import partition from 'lodash/partition'
3
+
2
4
  import {
5
+ FLEX_STACKER_MODULE_TYPE,
3
6
  getDeckDefFromRobotType,
4
7
  getModuleDef2,
8
+ getModuleType,
5
9
  getPositionFromSlotId,
10
+ HEATERSHAKER_MODULE_V1,
6
11
  inferModuleOrientationFromXCoordinate,
7
- OT2_ROBOT_TYPE,
12
+ MODULE_FIXTURES_BY_MODEL,
8
13
  MOVABLE_TRASH_CUTOUTS,
14
+ OT2_ROBOT_TYPE,
9
15
  SINGLE_SLOT_FIXTURES,
10
16
  STAGING_AREA_CUTOUTS,
11
17
  STAGING_AREA_RIGHT_SLOT_FIXTURE,
18
+ STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
12
19
  TRASH_BIN_ADAPTER_FIXTURE,
13
20
  WASTE_CHUTE_CUTOUT,
14
21
  WASTE_CHUTE_ONLY_FIXTURES,
15
22
  WASTE_CHUTE_STAGING_AREA_FIXTURES,
16
- HEATERSHAKER_MODULE_V1,
17
- MODULE_FIXTURES_BY_MODEL,
18
- STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
19
23
  } from '@opentrons/shared-data'
20
24
 
25
+ import { COLORS } from '../../helix-design-system'
21
26
  import { DeckInfoLabel } from '../../molecules/DeckInfoLabel'
22
- import { RobotCoordinateSpace } from '../RobotCoordinateSpace'
23
- import { Module } from '../Module'
24
- import { LabwareRender } from '../Labware'
25
- import { FlexTrash } from '../Deck/FlexTrash'
27
+ import { SlotLabels } from '../Deck'
26
28
  import { DeckFromLayers } from '../Deck/DeckFromLayers'
29
+ import { FlexTrash } from '../Deck/FlexTrash'
27
30
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
28
- import { SlotLabels } from '../Deck'
29
- import { COLORS } from '../../helix-design-system'
30
-
31
+ import { LabwareRender } from '../Labware'
32
+ import { Module } from '../Module'
33
+ import { RobotCoordinateSpace } from '../RobotCoordinateSpace'
31
34
  import { SingleSlotFixture } from './SingleSlotFixture'
32
35
  import { StagingAreaFixture } from './StagingAreaFixture'
33
36
  import { WasteChuteFixture } from './WasteChuteFixture'
34
37
  import { WasteChuteStagingAreaFixture } from './WasteChuteStagingAreaFixture'
35
38
 
36
39
  import type { ComponentProps, ReactNode } from 'react'
37
- import type { Svg } from '../../primitives'
38
40
  import type {
39
41
  CutoutFixtureId,
40
42
  DeckConfiguration,
@@ -44,9 +46,10 @@ import type {
44
46
  ModuleModel,
45
47
  RobotType,
46
48
  } from '@opentrons/shared-data'
49
+ import type { Svg } from '../../primitives'
47
50
  import type { TrashCutoutId } from '../Deck/FlexTrash'
48
- import type { StagingAreaLocation } from './StagingAreaFixture'
49
51
  import type { WellFill, WellGroup } from '../Labware'
52
+ import type { StagingAreaLocation } from './StagingAreaFixture'
50
53
 
51
54
  export interface LabwareOnDeck {
52
55
  labwareLocation: LabwareLocation
@@ -73,7 +76,22 @@ export interface ModuleOnDeck {
73
76
  highlightLabware?: boolean
74
77
  highlightShadowLabware?: boolean
75
78
  stacked?: boolean
79
+ hopperLabware?: HopperLabwareProps
80
+ }
81
+ export interface HopperLabwareProps {
82
+ hopperLabwareDef: LabwareDefinition2 | null
83
+ hopperLabwareWellFill: WellFill
84
+ hopperOnLabwareClick: () => void
85
+ hopperHighlightLabware: boolean
86
+ hopperStacked: boolean
76
87
  }
88
+
89
+ // these ugly consts are unfortunately necessary as the hopper location exists
90
+ // outside of our deck definition so the render doesn't follow our normal conventions
91
+ export const STACKER_MODULE_Y_OFFSET = -6
92
+ export const STACKER_HOPPER_LABWARE_X_OFFSET = 178.5
93
+ export const STACKER_HOPPER_LABWARE_Y_OFFSET = 7
94
+ export const STACKER_DECK_VIEW_BOX_EXPANSION = 220
77
95
  interface BaseDeckProps {
78
96
  deckConfig: DeckConfiguration
79
97
  robotType: RobotType
@@ -149,9 +167,20 @@ export function BaseDeck(props: BaseDeckProps): JSX.Element {
149
167
  fixture.cutoutId === WASTE_CHUTE_CUTOUT
150
168
  )
151
169
 
170
+ const [singleLocationModules, stackerModules] = partition(
171
+ modulesOnDeck,
172
+ module => getModuleType(module.moduleModel) !== FLEX_STACKER_MODULE_TYPE
173
+ )
174
+
152
175
  return (
153
176
  <RobotCoordinateSpace
154
- viewBox={`${deckDef.cornerOffsetFromOrigin[0]} ${deckDef.cornerOffsetFromOrigin[1]} ${deckDef.dimensions[0]} ${deckDef.dimensions[1]}`}
177
+ viewBox={`${deckDef.cornerOffsetFromOrigin[0]} ${
178
+ deckDef.cornerOffsetFromOrigin[1]
179
+ } ${
180
+ stackerModules.length > 0
181
+ ? deckDef.dimensions[0] + STACKER_DECK_VIEW_BOX_EXPANSION
182
+ : deckDef.dimensions[0]
183
+ } ${deckDef.dimensions[1]}`}
155
184
  animated={animatedSVG}
156
185
  {...svgProps}
157
186
  >
@@ -170,7 +199,9 @@ export function BaseDeck(props: BaseDeckProps): JSX.Element {
170
199
  stagingAreaFixtures.length > 0 ||
171
200
  wasteChuteStagingAreaFixtures.length > 0 ||
172
201
  modulesOnDeck.findIndex(
173
- module => module.moduleModel === 'absorbanceReaderV1'
202
+ module =>
203
+ module.moduleModel === 'absorbanceReaderV1' ||
204
+ module.moduleModel === 'flexStackerModuleV1'
174
205
  ) >= 0
175
206
  }
176
207
  />
@@ -245,7 +276,7 @@ export function BaseDeck(props: BaseDeckProps): JSX.Element {
245
276
  )}
246
277
  <>
247
278
  {/* render modules, nested labware, and overlays */}
248
- {modulesOnDeck.map(
279
+ {singleLocationModules.map(
249
280
  ({
250
281
  moduleModel,
251
282
  moduleLocation,
@@ -294,6 +325,68 @@ export function BaseDeck(props: BaseDeckProps): JSX.Element {
294
325
  ) : null
295
326
  }
296
327
  )}
328
+ {stackerModules.map(
329
+ ({
330
+ moduleModel,
331
+ moduleLocation,
332
+ nestedLabwareDef,
333
+ nestedLabwareWellFill,
334
+ innerProps,
335
+ moduleChildren,
336
+ onLabwareClick,
337
+ highlightLabware,
338
+ highlightShadowLabware,
339
+ }) => {
340
+ const stackerSlotName = getStackerLocationFromSlot(
341
+ moduleLocation.slotName
342
+ )
343
+ const slotPosition = getPositionFromSlotId(stackerSlotName, deckDef)
344
+ const moduleDef = getModuleDef2(moduleModel)
345
+ return slotPosition != null ? (
346
+ <>
347
+ <StagingAreaFixture
348
+ cutoutId={
349
+ `cutout${moduleLocation.slotName}` as StagingAreaLocation
350
+ }
351
+ deckDefinition={deckDef}
352
+ slotClipColor={darkFill}
353
+ fixtureBaseColor={lightFill}
354
+ />
355
+ <Module
356
+ key={`${moduleModel} ${moduleLocation.slotName}`}
357
+ def={moduleDef}
358
+ x={slotPosition[0]}
359
+ y={slotPosition[1] + STACKER_MODULE_Y_OFFSET}
360
+ orientation={inferModuleOrientationFromXCoordinate(
361
+ slotPosition[0]
362
+ )}
363
+ innerProps={innerProps}
364
+ >
365
+ {nestedLabwareDef != null ? (
366
+ <g
367
+ cursor={onLabwareClick != null ? 'pointer' : ''}
368
+ transform={`translate(${STACKER_HOPPER_LABWARE_X_OFFSET}, ${STACKER_HOPPER_LABWARE_Y_OFFSET})`}
369
+ >
370
+ <LabwareRender
371
+ definition={nestedLabwareDef}
372
+ onLabwareClick={onLabwareClick}
373
+ wellFill={nestedLabwareWellFill}
374
+ shouldRotateAdapterOrientation={
375
+ inferModuleOrientationFromXCoordinate(
376
+ slotPosition[0]
377
+ ) === 'left' && moduleModel === HEATERSHAKER_MODULE_V1
378
+ }
379
+ highlight={highlightLabware}
380
+ highlightShadow={highlightShadowLabware}
381
+ />
382
+ </g>
383
+ ) : null}
384
+ {moduleChildren}
385
+ </Module>
386
+ </>
387
+ ) : null
388
+ }
389
+ )}
297
390
  {/* render non-module labware and overlays */}
298
391
  {labwareOnDeck.map(
299
392
  ({
@@ -344,17 +437,20 @@ export function BaseDeck(props: BaseDeckProps): JSX.Element {
344
437
  {/* render stacked badge on module labware */}
345
438
  {modulesOnDeck.map(
346
439
  ({ moduleModel, moduleLocation, stacked = false }) => {
440
+ const moduleDef = getModuleDef2(moduleModel)
347
441
  const slotPosition = getPositionFromSlotId(
348
- moduleLocation.slotName,
442
+ moduleDef.moduleType === FLEX_STACKER_MODULE_TYPE
443
+ ? getStackerLocationFromSlot(moduleLocation.slotName)
444
+ : moduleLocation.slotName,
349
445
  deckDef
350
446
  )
351
- const moduleDef = getModuleDef2(moduleModel)
352
-
353
- const {
447
+ let {
354
448
  x: nestedLabwareOffsetX,
355
449
  y: nestedLabwareOffsetY,
356
450
  } = moduleDef.labwareOffset
357
-
451
+ if (moduleDef.moduleType === FLEX_STACKER_MODULE_TYPE) {
452
+ nestedLabwareOffsetX += STACKER_HOPPER_LABWARE_X_OFFSET
453
+ }
358
454
  // labwareOffset values are more accurate than our SVG renderings, so ignore any deviations under a certain threshold
359
455
  const clampedLabwareOffsetX =
360
456
  Math.abs(nestedLabwareOffsetX) > LABWARE_OFFSET_DISPLAY_THRESHOLD
@@ -426,3 +522,7 @@ function StackedBadge(): JSX.Element {
426
522
  </RobotCoordsForeignObject>
427
523
  )
428
524
  }
525
+
526
+ function getStackerLocationFromSlot(slotName: string): string {
527
+ return `${slotName.charAt(0)}4`
528
+ }
@@ -1,4 +1,6 @@
1
+ import { COLORS } from '../../helix-design-system'
1
2
  import { Icon } from '../../icons'
3
+ import { DeckLabelSet } from '../../organisms'
2
4
  import { Flex, Text } from '../../primitives'
3
5
  import {
4
6
  ALIGN_CENTER,
@@ -6,18 +8,16 @@ import {
6
8
  JUSTIFY_CENTER,
7
9
  TEXT_ALIGN_CENTER,
8
10
  } from '../../styles'
9
- import { DeckLabelSet } from '../../organisms'
10
11
  import { SPACING, TYPOGRAPHY } from '../../ui-style-constants'
11
- import { COLORS } from '../../helix-design-system'
12
12
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
13
13
  import { SlotBase } from './SlotBase'
14
+
15
+ import type { SVGProps } from 'react'
14
16
  import type {
15
- WASTE_CHUTE_CUTOUT,
16
17
  DeckDefinition,
17
18
  ModuleType,
19
+ WASTE_CHUTE_CUTOUT,
18
20
  } from '@opentrons/shared-data'
19
-
20
- import type { SVGProps } from 'react'
21
21
  import type { DeckLabelProps } from '../../molecules'
22
22
 
23
23
  const WASTE_CHUTE_WIDTH = 130
@@ -1,9 +1,9 @@
1
1
  import {
2
- SINGLE_LEFT_SLOT_FIXTURE,
3
2
  SINGLE_CENTER_SLOT_FIXTURE,
4
- TRASH_BIN_ADAPTER_FIXTURE,
3
+ SINGLE_LEFT_SLOT_FIXTURE,
5
4
  SINGLE_RIGHT_SLOT_FIXTURE,
6
5
  STAGING_AREA_RIGHT_SLOT_FIXTURE,
6
+ TRASH_BIN_ADAPTER_FIXTURE,
7
7
  WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
8
8
  } from '@opentrons/shared-data'
9
9
 
@@ -1,17 +1,18 @@
1
1
  import { OT2_ROBOT_TYPE } from '@opentrons/shared-data'
2
+
3
+ import { ALL_OT2_DECK_LAYERS } from './constants'
2
4
  import {
5
+ CalibrationMarkings,
6
+ DoorStops,
3
7
  FixedBase,
4
8
  FixedTrash,
5
- DoorStops,
6
9
  MetalFrame,
7
10
  RemovableDeckOutline,
8
- SlotRidges,
9
- SlotNumbers,
10
- CalibrationMarkings,
11
11
  RemovalHandle,
12
12
  ScrewHoles,
13
+ SlotNumbers,
14
+ SlotRidges,
13
15
  } from './OT2Layers'
14
- import { ALL_OT2_DECK_LAYERS } from './constants'
15
16
 
16
17
  import type { RobotType } from '@opentrons/shared-data'
17
18
 
@@ -3,12 +3,13 @@ import {
3
3
  getDeckDefFromRobotType,
4
4
  opentrons1Trash3200MlFixedV1 as trashLabwareDef,
5
5
  } from '@opentrons/shared-data'
6
+
7
+ import { BORDERS, COLORS } from '../../helix-design-system'
6
8
  import { Icon } from '../../icons'
7
9
  import { DeckLabelSet } from '../../organisms'
8
10
  import { Flex, Text } from '../../primitives'
9
11
  import { ALIGN_CENTER, JUSTIFY_CENTER } from '../../styles'
10
12
  import { SPACING, TYPOGRAPHY } from '../../ui-style-constants'
11
- import { COLORS, BORDERS } from '../../helix-design-system'
12
13
  import { RobotCoordsForeignObject } from './RobotCoordsForeignObject'
13
14
 
14
15
  import type { RobotType } from '@opentrons/shared-data'
@@ -1,4 +1,3 @@
1
- import type * as React from 'react'
2
1
  import {
3
2
  fixture96Plate,
4
3
  FLEX_ROBOT_TYPE,
@@ -7,14 +6,16 @@ import {
7
6
  SINGLE_RIGHT_SLOT_FIXTURE,
8
7
  STAGING_AREA_RIGHT_SLOT_FIXTURE,
9
8
  } from '@opentrons/shared-data'
9
+
10
10
  import { MoveLabwareOnDeck as MoveLabwareOnDeckComponent } from './MoveLabwareOnDeck'
11
+
12
+ import type { Meta, StoryObj } from '@storybook/react'
13
+ import type * as React from 'react'
11
14
  import type {
12
15
  DeckConfiguration,
13
16
  LabwareDefinition2,
14
17
  } from '@opentrons/shared-data'
15
18
 
16
- import type { Meta, StoryObj } from '@storybook/react'
17
-
18
19
  const meta: Meta<React.ComponentProps<typeof MoveLabwareOnDeckComponent>> = {
19
20
  component: MoveLabwareOnDeckComponent,
20
21
  title: 'Library/Molecules/Simulation/MoveLabwareOnDeck',
@@ -1,36 +1,36 @@
1
1
  import { useLayoutEffect, useMemo, useRef, useState } from 'react'
2
+ import { animated, easings, useSpring } from '@react-spring/web'
2
3
  import styled from 'styled-components'
3
- import { animated, useSpring, easings } from '@react-spring/web'
4
+
4
5
  import {
5
6
  getDeckDefFromRobotType,
6
7
  getModuleDef2,
7
8
  getPositionFromSlotId,
8
9
  } from '@opentrons/shared-data'
9
- import { LabwareRender } from '../Labware'
10
10
 
11
11
  import { COLORS } from '../../helix-design-system'
12
- import { IDENTITY_AFFINE_TRANSFORM, multiplyMatrices } from '../utils'
13
12
  import { BaseDeck } from '../BaseDeck'
13
+ import { LabwareRender } from '../Labware'
14
+ import { IDENTITY_AFFINE_TRANSFORM, multiplyMatrices } from '../utils'
14
15
 
16
+ import type { ReactNode } from 'react'
15
17
  import type {
16
- LoadedLabware,
17
- LoadedModule,
18
- Coordinates,
18
+ DeckConfiguration,
19
+ DeckDefinition,
19
20
  LabwareDefinition2,
20
21
  LabwareLocation,
22
+ LoadedLabware,
23
+ LoadedModule,
21
24
  RobotType,
22
- DeckDefinition,
23
- DeckConfiguration,
25
+ Vector3D,
24
26
  } from '@opentrons/shared-data'
25
-
26
- import type { ReactNode } from 'react'
27
27
  import type { StyleProps } from '../../primitives'
28
28
 
29
29
  const getModulePosition = (
30
30
  deckDef: DeckDefinition,
31
31
  moduleId: string,
32
32
  loadedModules: LoadedModule[]
33
- ): Coordinates | null => {
33
+ ): Vector3D | null => {
34
34
  const loadedModule = loadedModules.find(m => m.id === moduleId)
35
35
  if (loadedModule == null) return null
36
36
  const modSlot = deckDef.locations.addressableAreas.find(
@@ -63,7 +63,7 @@ function getLabwareCoordinates({
63
63
  location: LabwareLocation
64
64
  loadedModules: LoadedModule[]
65
65
  loadedLabware: LoadedLabware[]
66
- }): Coordinates | null {
66
+ }): Vector3D | null {
67
67
  if (location === 'offDeck' || location === 'systemLocation') {
68
68
  return null
69
69
  } else if ('labwareId' in location) {
@@ -1,4 +1,5 @@
1
1
  import { css } from 'styled-components'
2
+
2
3
  import { Flex, ForeignObject } from '../../primitives'
3
4
 
4
5
  import type { ComponentProps, ReactNode } from 'react'