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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/README.md +0 -1
  2. package/cssModuleSideEffect.ts +22 -0
  3. package/lib/assets/localization/en/index.d.ts +26 -0
  4. package/lib/assets/localization/index.d.ts +26 -0
  5. package/lib/atoms/AnimationVideo/index.d.ts +13 -0
  6. package/lib/atoms/Chip/index.d.ts +2 -0
  7. package/lib/atoms/InlineNotification/index.d.ts +18 -0
  8. package/lib/atoms/ListButton/ListButtonChildren/index.d.ts +0 -1
  9. package/lib/atoms/ListButton/index.d.ts +5 -0
  10. package/lib/atoms/ListItem/ListItemChildren/ListItemDescriptor.d.ts +4 -0
  11. package/lib/atoms/StyledText/PlaceholderStyledText.d.ts +14 -0
  12. package/lib/atoms/StyledText/StyledText.d.ts +1 -1
  13. package/lib/atoms/StyledText/index.d.ts +1 -0
  14. package/lib/atoms/Tag/index.d.ts +4 -1
  15. package/lib/atoms/Toast/index.d.ts +1 -1
  16. package/lib/atoms/Tooltip/index.d.ts +1 -1
  17. package/lib/atoms/buttons/BasicButton.d.ts +12 -0
  18. package/lib/atoms/buttons/LargeButton.d.ts +1 -1
  19. package/lib/atoms/buttons/RadioButton.d.ts +29 -1
  20. package/lib/atoms/buttons/index.d.ts +1 -0
  21. package/lib/atoms/index.d.ts +4 -2
  22. package/lib/buttons/Button.d.ts +1 -1
  23. package/lib/controls/ToggleButton.d.ts +8 -2
  24. package/lib/controls/index.d.ts +0 -1
  25. package/lib/forms/DeprecatedCheckboxField.d.ts +1 -1
  26. package/lib/forms/SelectField.d.ts +1 -1
  27. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +19 -5
  28. package/lib/hardware-sim/BaseDeck/WasteChuteFixture.d.ts +1 -1
  29. package/lib/hardware-sim/Deck/FlexTrash.d.ts +4 -1
  30. package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +3 -2
  31. package/lib/hardware-sim/Deck/RobotCoordsForeignDiv.d.ts +6 -5
  32. package/lib/hardware-sim/Deck/RobotCoordsForeignObject.d.ts +8 -5
  33. package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +11 -1
  34. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +30 -14
  35. package/lib/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.d.ts +1 -0
  36. package/lib/hardware-sim/Deck/resolveLabwareLocation.d.ts +20 -0
  37. package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderItem.d.ts +11 -0
  38. package/lib/hardware-sim/DeckConfigurator/EmptyConfigItem.d.ts +11 -0
  39. package/lib/hardware-sim/DeckConfigurator/FlexStackerItem.d.ts +12 -0
  40. package/lib/hardware-sim/DeckConfigurator/HeaterShakerItem.d.ts +11 -0
  41. package/lib/hardware-sim/DeckConfigurator/MagneticBlockItem.d.ts +12 -0
  42. package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigItem.d.ts +11 -0
  43. package/lib/hardware-sim/DeckConfigurator/{StaticFixture.d.ts → StaticItem.d.ts} +1 -1
  44. package/lib/hardware-sim/DeckConfigurator/TemperatureModuleItem.d.ts +11 -0
  45. package/lib/hardware-sim/DeckConfigurator/ThermocyclerItem.d.ts +11 -0
  46. package/lib/hardware-sim/DeckConfigurator/TrashBinConfigItem.d.ts +11 -0
  47. package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigItem.d.ts +11 -0
  48. package/lib/hardware-sim/DeckConfigurator/constants.d.ts +5 -8
  49. package/lib/hardware-sim/DeckConfigurator/index.d.ts +4 -3
  50. package/lib/hardware-sim/Labware/CalibrationBlockRender.d.ts +15 -0
  51. package/lib/hardware-sim/Labware/Labware.d.ts +8 -9
  52. package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +4 -4
  53. package/lib/hardware-sim/Labware/LabwareRender.d.ts +47 -6
  54. package/lib/hardware-sim/Labware/index.d.ts +1 -1
  55. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +3 -4
  56. package/lib/hardware-sim/Labware/labwareInternals/LabwareOutline.d.ts +20 -9
  57. package/lib/hardware-sim/Labware/labwareInternals/LabwareWellLabels.d.ts +2 -2
  58. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +3 -3
  59. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +3 -3
  60. package/lib/hardware-sim/Labware/labwareInternals/StyledWells.d.ts +2 -2
  61. package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -2
  62. package/lib/hardware-sim/Labware/labwareInternals/WellLabels.d.ts +2 -2
  63. package/lib/hardware-sim/Labware/labwareInternals/getTiprackBackgroundColor.d.ts +1 -0
  64. package/lib/hardware-sim/Module/FlexStacker.d.ts +1 -0
  65. package/lib/hardware-sim/Module/index.d.ts +25 -3
  66. package/lib/hardware-sim/Pipette/PipetteRender.d.ts +2 -2
  67. package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.d.ts +5 -3
  68. package/lib/hardware-sim/index.d.ts +0 -2
  69. package/lib/helix-design-system/colors.d.ts +2 -1
  70. package/lib/hocs/withStyleProps.d.ts +26 -0
  71. package/lib/hooks/useConditionalConfirm.d.ts +4 -0
  72. package/lib/hooks/useSwipe.d.ts +1 -1
  73. package/lib/icons/Icon.d.ts +7 -7
  74. package/lib/icons/ModuleIcon.d.ts +5 -4
  75. package/lib/icons/NotificationIcon.d.ts +1 -1
  76. package/lib/instrument/InstrumentDiagram.d.ts +1 -1
  77. package/lib/instrument/index.d.ts +0 -3
  78. package/lib/legacy-hardware-sim/index.d.ts +0 -1
  79. package/lib/lists/index.d.ts +0 -1
  80. package/lib/molecules/Banner/index.d.ts +1 -1
  81. package/lib/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.d.ts +1 -0
  82. package/lib/molecules/CustomizeExpandButton/index.d.ts +29 -0
  83. package/lib/molecules/DeckInfoLabel/index.d.ts +8 -16
  84. package/lib/molecules/DropdownMenu/index.d.ts +1 -1
  85. package/lib/molecules/LiquidIcon/index.d.ts +2 -2
  86. package/lib/molecules/index.d.ts +2 -1
  87. package/lib/organisms/CommandText/index.d.ts +2 -2
  88. package/lib/organisms/CommandText/useCommandTextString/index.d.ts +3 -3
  89. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getFlexStackerCommandText.test.d.ts +1 -0
  90. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getRobotCommandText.test.d.ts +1 -0
  91. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.d.ts +1 -1
  92. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.d.ts +6 -3
  93. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getRobotCommandText.d.ts +4 -0
  94. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.d.ts +1 -1
  95. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/index.d.ts +2 -0
  96. package/lib/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.d.ts +1 -1
  97. package/lib/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.d.ts +1 -1
  98. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.d.ts +2 -2
  99. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.d.ts +1 -1
  100. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +3 -3
  101. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareName.d.ts +2 -2
  102. package/lib/organisms/DeckLabelSet/index.d.ts +1 -0
  103. package/lib/organisms/FixtureOption/__tests__/FixtureOption.test.d.ts +1 -0
  104. package/lib/organisms/FixtureOption/index.d.ts +10 -0
  105. package/lib/{hardware-sim → organisms}/ProtocolDeck/index.d.ts +2 -3
  106. package/lib/organisms/ProtocolTimelineScrubber/CommandItem.d.ts +2 -2
  107. package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +3 -3
  108. package/lib/organisms/index.d.ts +2 -0
  109. package/lib/primitives/ForeignObject.d.ts +8 -18
  110. package/lib/primitives/Link.d.ts +1 -1
  111. package/lib/primitives/Svg.d.ts +1 -1
  112. package/lib/primitives/style-props.d.ts +2 -2
  113. package/lib/primitives/types.d.ts +1 -1
  114. package/lib/structure/index.d.ts +2 -3
  115. package/lib/testing/utils/renderWithProviders.d.ts +2 -2
  116. package/lib/tooltips/LegacyTooltip.d.ts +1 -1
  117. package/lib/tooltips/types.d.ts +2 -2
  118. package/package.json +6 -4
  119. package/src/Components.mdx +12 -0
  120. package/src/__tests__/utils.test.ts +2 -1
  121. package/src/alerts/AlertItem.stories.tsx +2 -2
  122. package/src/alerts/AlertItem.tsx +2 -1
  123. package/src/alerts/alerts.module.css +2 -2
  124. package/src/assets/localization/en/deck_configuration.json +12 -0
  125. package/src/assets/localization/en/index.ts +2 -0
  126. package/src/assets/localization/en/protocol_command_text.json +15 -1
  127. package/src/atoms/AnimationVideo/__tests__/AnimationVideo.test.tsx +40 -0
  128. package/src/atoms/AnimationVideo/index.tsx +44 -0
  129. package/src/atoms/Checkbox/Checkbox.stories.tsx +1 -1
  130. package/src/atoms/Checkbox/__tests__/Checkbox.test.tsx +4 -2
  131. package/src/atoms/Checkbox/index.tsx +3 -2
  132. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +3 -2
  133. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +21 -38
  134. package/src/atoms/CheckboxField/index.tsx +81 -70
  135. package/src/atoms/Chip/Chip.stories.tsx +3 -2
  136. package/src/atoms/Chip/__tests__/Chip.test.tsx +41 -3
  137. package/src/atoms/Chip/index.tsx +76 -50
  138. package/src/atoms/InlineNotification/InlineNotification.stories.tsx +107 -0
  139. package/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx +66 -0
  140. package/src/atoms/InlineNotification/index.tsx +213 -0
  141. package/src/atoms/InputField/InputField.stories.tsx +3 -0
  142. package/src/atoms/InputField/__tests__/InputField.test.tsx +4 -3
  143. package/src/atoms/InputField/index.tsx +4 -4
  144. package/src/atoms/ListButton/ListButton.stories.tsx +24 -8
  145. package/src/atoms/ListButton/ListButtonChildren/index.ts +0 -1
  146. package/src/atoms/ListButton/__tests__/ListButton.test.tsx +5 -3
  147. package/src/atoms/ListButton/__tests__/ListButtonAccordion.test.tsx +2 -2
  148. package/src/atoms/ListButton/index.tsx +57 -41
  149. package/src/atoms/ListItem/ListItem.stories.tsx +7 -5
  150. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +21 -15
  151. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +6 -2
  152. package/src/atoms/ListItem/__tests__/ListItem.test.tsx +5 -3
  153. package/src/atoms/ListItem/index.tsx +3 -2
  154. package/src/atoms/ListTable/ListTable.stories.tsx +1 -1
  155. package/src/atoms/ListTable/__tests__/ListTable.test.tsx +2 -2
  156. package/src/atoms/ListTable/index.tsx +4 -4
  157. package/src/atoms/MenuList/MenuItem.stories.tsx +1 -1
  158. package/src/atoms/MenuList/MenuItem.tsx +4 -1
  159. package/src/atoms/MenuList/MenuList.stories.tsx +1 -0
  160. package/src/atoms/MenuList/OverflowBtn.tsx +40 -42
  161. package/src/atoms/MenuList/__tests__/MenuItem.test.tsx +2 -3
  162. package/src/atoms/MenuList/__tests__/MenuList.test.tsx +2 -2
  163. package/src/atoms/MenuList/__tests__/OverflowBtn.test.tsx +1 -1
  164. package/src/atoms/MenuList/index.tsx +2 -2
  165. package/src/atoms/Snackbar/Snackbar.stories.tsx +60 -22
  166. package/src/atoms/Snackbar/__tests__/Snackbar.test.tsx +6 -3
  167. package/src/atoms/Snackbar/index.tsx +51 -40
  168. package/src/atoms/StepMeter/__tests__/StepMeter.test.tsx +45 -0
  169. package/src/atoms/StepMeter/index.tsx +33 -24
  170. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +2 -1
  171. package/src/atoms/StyledText/LegacyStyledText.tsx +3 -2
  172. package/src/atoms/StyledText/PlaceholderStyledText.tsx +46 -0
  173. package/src/atoms/StyledText/StyledText.stories.tsx +3 -2
  174. package/src/atoms/StyledText/StyledText.tsx +4 -3
  175. package/src/atoms/StyledText/index.ts +1 -0
  176. package/src/atoms/StyledText/placeholderstyledtext.module.css +25 -0
  177. package/src/atoms/SubListTable/SubListTable.stories.tsx +1 -1
  178. package/src/atoms/SubListTable/__tests__/SubListTable.test.tsx +2 -2
  179. package/src/atoms/SubListTable/index.tsx +4 -4
  180. package/src/atoms/Tag/Tag.stories.tsx +2 -1
  181. package/src/atoms/Tag/__tests__/Tag.test.tsx +2 -1
  182. package/src/atoms/Tag/index.tsx +53 -35
  183. package/src/atoms/Toast/ODDToast.stories.tsx +18 -8
  184. package/src/atoms/Toast/Toast.stories.tsx +3 -2
  185. package/src/atoms/Toast/__tests__/ODDToast.test.tsx +5 -2
  186. package/src/atoms/Toast/__tests__/Toast.test.tsx +5 -2
  187. package/src/atoms/Toast/index.tsx +75 -80
  188. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +2 -0
  189. package/src/atoms/ToggleGroup/__tests__/ToggleGroup.test.tsx +2 -1
  190. package/src/atoms/ToggleGroup/index.tsx +2 -1
  191. package/src/atoms/Tooltip/Tooltip.stories.tsx +6 -5
  192. package/src/atoms/Tooltip/__tests__/Tooltip.test.tsx +6 -5
  193. package/src/atoms/Tooltip/index.tsx +3 -3
  194. package/src/atoms/buttons/AlertPrimaryButton.tsx +2 -1
  195. package/src/atoms/buttons/AltPrimaryButton.tsx +1 -1
  196. package/src/atoms/buttons/BasicButton.tsx +100 -0
  197. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +1 -0
  198. package/src/atoms/buttons/EmptySelectorButton.tsx +10 -3
  199. package/src/atoms/buttons/LargeButton.stories.tsx +2 -2
  200. package/src/atoms/buttons/LargeButton.tsx +5 -5
  201. package/src/atoms/buttons/PrimaryButton.tsx +7 -3
  202. package/src/atoms/buttons/RadioButton.stories.tsx +2 -1
  203. package/src/atoms/buttons/RadioButton.tsx +102 -43
  204. package/src/atoms/buttons/SecondaryButton.tsx +18 -9
  205. package/src/atoms/buttons/TertiaryButton.tsx +1 -0
  206. package/src/atoms/buttons/__tests__/AlertPrimaryButton.test.tsx +5 -4
  207. package/src/atoms/buttons/__tests__/AltPrimaryButton.test.tsx +6 -4
  208. package/src/atoms/buttons/__tests__/BasicButton.test.tsx +87 -0
  209. package/src/atoms/buttons/__tests__/EmptySelectorButton.test.tsx +4 -2
  210. package/src/atoms/buttons/__tests__/LargeButton.test.tsx +4 -2
  211. package/src/atoms/buttons/__tests__/PrimaryButton.test.tsx +7 -5
  212. package/src/atoms/buttons/__tests__/RadioButton.test.tsx +17 -3
  213. package/src/atoms/buttons/__tests__/SecondaryButton.test.tsx +6 -5
  214. package/src/atoms/buttons/buttons.stories.tsx +92 -56
  215. package/src/atoms/buttons/index.ts +1 -0
  216. package/src/atoms/index.ts +4 -2
  217. package/src/buttons/Button.tsx +2 -3
  218. package/src/buttons/IconButton.tsx +1 -2
  219. package/src/buttons/buttons.module.css +92 -92
  220. package/src/controls/LabeledRadioGroup.tsx +1 -1
  221. package/src/controls/ToggleButton.tsx +62 -18
  222. package/src/controls/index.ts +0 -1
  223. package/src/controls/styles.module.css +15 -15
  224. package/src/forms/DeprecatedCheckboxField.stories.tsx +1 -1
  225. package/src/forms/DeprecatedCheckboxField.tsx +3 -3
  226. package/src/forms/FormGroup.stories.tsx +3 -4
  227. package/src/forms/FormGroup.tsx +1 -0
  228. package/src/forms/InputField.stories.tsx +2 -1
  229. package/src/forms/LegacyInputField.tsx +1 -0
  230. package/src/forms/RadioGroup.stories.tsx +2 -1
  231. package/src/forms/RadioGroup.tsx +1 -0
  232. package/src/forms/Select.module.css +23 -23
  233. package/src/forms/Select.stories.tsx +2 -3
  234. package/src/forms/Select.tsx +3 -3
  235. package/src/forms/SelectField.tsx +1 -1
  236. package/src/forms/ToggleField.stories.tsx +1 -1
  237. package/src/forms/ToggleField.tsx +2 -2
  238. package/src/forms/forms.module.css +38 -37
  239. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +8 -8
  240. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +164 -27
  241. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +26 -32
  242. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +2 -2
  243. package/src/hardware-sim/BaseDeck/basedeck.module.css +20 -0
  244. package/src/hardware-sim/Deck/DeckFromLayers.tsx +6 -5
  245. package/src/hardware-sim/Deck/FlexTrash.tsx +51 -30
  246. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +6 -5
  247. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +129 -163
  248. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +35 -27
  249. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +33 -29
  250. package/src/hardware-sim/Deck/RobotCoordsText.tsx +12 -11
  251. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +76 -54
  252. package/src/hardware-sim/Deck/SlotLabels.tsx +53 -51
  253. package/src/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.ts +138 -0
  254. package/src/hardware-sim/Deck/deck.module.css +54 -0
  255. package/src/hardware-sim/Deck/resolveLabwareLocation.ts +154 -0
  256. package/src/hardware-sim/DeckConfigurator/{FlexStackerFixture.tsx → AbsorbanceReaderItem.tsx} +36 -33
  257. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +2 -3
  258. package/src/hardware-sim/DeckConfigurator/{EmptyConfigFixture.tsx → EmptyConfigItem.tsx} +73 -44
  259. package/src/hardware-sim/DeckConfigurator/{AbsorbanceReaderFixture.tsx → FlexStackerItem.tsx} +48 -29
  260. package/src/hardware-sim/DeckConfigurator/{HeaterShakerFixture.tsx → HeaterShakerItem.tsx} +42 -30
  261. package/src/hardware-sim/DeckConfigurator/{MagneticBlockFixture.tsx → MagneticBlockItem.tsx} +44 -61
  262. package/src/hardware-sim/DeckConfigurator/{StagingAreaConfigFixture.tsx → StagingAreaConfigItem.tsx} +42 -24
  263. package/src/hardware-sim/DeckConfigurator/{StaticFixture.tsx → StaticItem.tsx} +16 -9
  264. package/src/hardware-sim/DeckConfigurator/{TemperatureModuleFixture.tsx → TemperatureModuleItem.tsx} +44 -28
  265. package/src/hardware-sim/DeckConfigurator/{ThermocyclerFixture.tsx → ThermocyclerItem.tsx} +34 -24
  266. package/src/hardware-sim/DeckConfigurator/{TrashBinConfigFixture.tsx → TrashBinConfigItem.tsx} +44 -29
  267. package/src/hardware-sim/DeckConfigurator/{WasteChuteConfigFixture.tsx → WasteChuteConfigItem.tsx} +40 -29
  268. package/src/hardware-sim/DeckConfigurator/constants.ts +5 -9
  269. package/src/hardware-sim/DeckConfigurator/index.tsx +240 -197
  270. package/src/hardware-sim/Labware/CalibrationBlockRender.stories.tsx +49 -0
  271. package/src/hardware-sim/Labware/CalibrationBlockRender.tsx +172 -0
  272. package/src/hardware-sim/Labware/Labware.tsx +35 -22
  273. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +7 -6
  274. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +40 -26
  275. package/src/hardware-sim/Labware/LabwareRender.tsx +77 -23
  276. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +15 -6
  277. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +20 -7
  278. package/src/hardware-sim/Labware/index.ts +1 -1
  279. package/src/hardware-sim/Labware/labware.module.css +8 -0
  280. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +4 -4
  281. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +54 -24
  282. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +5 -4
  283. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +7 -7
  284. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +5 -4
  285. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +4 -3
  286. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +5 -3
  287. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +12 -12
  288. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +6 -3
  289. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +7 -3
  290. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +8 -4
  291. package/src/hardware-sim/Labware/labwareInternals/getTiprackBackgroundColor.ts +32 -0
  292. package/src/hardware-sim/Module/FlexStacker.tsx +54 -0
  293. package/src/hardware-sim/Module/Module.stories.tsx +49 -18
  294. package/src/hardware-sim/Module/ModuleTag.tsx +3 -3
  295. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +1 -0
  296. package/src/hardware-sim/Module/Thermocycler/index.tsx +4 -4
  297. package/src/hardware-sim/Module/index.tsx +55 -25
  298. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +1 -0
  299. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +2 -1
  300. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +6 -4
  301. package/src/hardware-sim/Pipette/PipetteRender.tsx +12 -12
  302. package/src/hardware-sim/Pipette/__tests__/EightEmanatingNozzles.test.tsx +2 -1
  303. package/src/hardware-sim/Pipette/__tests__/EmanatingNozzle.test.tsx +4 -3
  304. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +11 -9
  305. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +16 -14
  306. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +1 -0
  307. package/src/hardware-sim/RobotCoordinateSpace/robotcoordinatespace.module.css +3 -0
  308. package/src/hardware-sim/index.ts +0 -2
  309. package/src/helix-design-system/colors.ts +2 -1
  310. package/src/hocs/withStyleProps.ts +53 -0
  311. package/src/hooks/__tests__/useDrag.test.ts +3 -1
  312. package/src/hooks/__tests__/useLongPress.test.ts +2 -1
  313. package/src/hooks/__tests__/useScrolling.test.tsx +3 -2
  314. package/src/hooks/__tests__/useSwipe.test.tsx +2 -1
  315. package/src/hooks/useConditionalConfirm.ts +15 -5
  316. package/src/hooks/useDrag.ts +2 -1
  317. package/src/hooks/useInterval.ts +1 -0
  318. package/src/hooks/useLongPress.ts +2 -1
  319. package/src/hooks/useMenuHandleClickOutside.tsx +1 -0
  320. package/src/hooks/useMountEffect.ts +2 -0
  321. package/src/hooks/useScrolling.ts +1 -1
  322. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +3 -1
  323. package/src/hooks/useSelectDeckLocation/index.tsx +8 -6
  324. package/src/hooks/useSwipe.ts +3 -2
  325. package/src/i18n.ts +4 -2
  326. package/src/icons/Icon.stories.tsx +2 -1
  327. package/src/icons/Icon.tsx +38 -29
  328. package/src/icons/IconList.stories.tsx +9 -8
  329. package/src/icons/ModuleIcon.tsx +13 -10
  330. package/src/icons/NotificationIcon.tsx +1 -1
  331. package/src/icons/icon-data.ts +29 -0
  332. package/src/icons/icon.module.css +10 -0
  333. package/src/index.module.css +1 -0
  334. package/src/instrument/InstrumentDiagram.tsx +9 -10
  335. package/src/instrument/PipetteSelect.module.css +3 -3
  336. package/src/instrument/index.ts +0 -3
  337. package/src/interaction-enhancers/ClickOutside.ts +1 -0
  338. package/src/interaction-enhancers/HandleKeypress.tsx +1 -0
  339. package/src/interaction-enhancers/__tests__/useHover.test.tsx +1 -0
  340. package/src/interaction-enhancers/useHover.ts +1 -1
  341. package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +5 -5
  342. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +1 -0
  343. package/src/legacy-hardware-sim/ModuleItem.module.css +19 -19
  344. package/src/legacy-hardware-sim/index.ts +0 -1
  345. package/src/lists/SidePanelGroup.tsx +1 -1
  346. package/src/lists/index.ts +0 -1
  347. package/src/lists/lists.module.css +23 -23
  348. package/src/modals/LegacyModal.tsx +2 -2
  349. package/src/modals/Modal.stories.tsx +1 -1
  350. package/src/modals/Modal.tsx +1 -1
  351. package/src/modals/ModalHeader.tsx +2 -2
  352. package/src/modals/ModalShell.tsx +3 -2
  353. package/src/modals/SpinnerModal.tsx +2 -2
  354. package/src/modals/SpinnerModalPage.tsx +1 -1
  355. package/src/modals/__tests__/Modal.test.tsx +4 -2
  356. package/src/modals/__tests__/ModalHeader.test.tsx +5 -3
  357. package/src/modals/__tests__/ModalShell.test.tsx +3 -1
  358. package/src/modals/modals.module.css +55 -55
  359. package/src/molecules/Banner/Banner.stories.tsx +1 -1
  360. package/src/molecules/Banner/__tests__/Banner.test.tsx +2 -2
  361. package/src/molecules/Banner/index.tsx +5 -4
  362. package/src/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.tsx +88 -0
  363. package/src/molecules/CustomizeExpandButton/index.tsx +189 -0
  364. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +10 -6
  365. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +17 -13
  366. package/src/molecules/DeckInfoLabel/deckinfolabel.module.css +42 -0
  367. package/src/molecules/DeckInfoLabel/index.tsx +36 -62
  368. package/src/molecules/DeckLabel/__tests__/DeckLabel.test.tsx +3 -3
  369. package/src/molecules/DeckLabel/index.tsx +5 -3
  370. package/src/molecules/DropdownMenu/__tests__/DropdownMenu.test.tsx +3 -3
  371. package/src/molecules/DropdownMenu/index.tsx +21 -14
  372. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +2 -1
  373. package/src/molecules/InfoScreen/__tests__/InfoScreen.test.tsx +3 -3
  374. package/src/molecules/InfoScreen/index.tsx +7 -3
  375. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +3 -2
  376. package/src/molecules/LiquidIcon/__tests__/LiquidIcon.test.tsx +4 -4
  377. package/src/molecules/LiquidIcon/index.tsx +16 -10
  378. package/src/molecules/ListAccordion/ListAccordion.stories.tsx +3 -3
  379. package/src/molecules/ListAccordion/__tests__/ListAccordion.test.tsx +3 -3
  380. package/src/molecules/ListAccordion/index.tsx +6 -6
  381. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +1 -0
  382. package/src/molecules/ParametersTable/__tests__/ParametersTable.test.tsx +3 -2
  383. package/src/molecules/ParametersTable/index.tsx +9 -7
  384. package/src/molecules/ReleaseNotes/index.tsx +1 -1
  385. package/src/molecules/ReleaseNotes/styles.module.css +15 -15
  386. package/src/molecules/Tabs/Tabs.stories.tsx +3 -1
  387. package/src/molecules/Tabs/__tests__/Tabs.test.tsx +3 -2
  388. package/src/molecules/Tabs/index.tsx +4 -3
  389. package/src/molecules/TextListTableContent/TextListTableContent.stories.tsx +1 -1
  390. package/src/molecules/TextListTableContent/__tests__/TextListTableContent.test.tsx +2 -2
  391. package/src/molecules/TextListTableContent/index.tsx +2 -2
  392. package/src/molecules/index.ts +2 -1
  393. package/src/nav/SidePanel.module.css +6 -6
  394. package/src/nav/SidePanel.stories.tsx +4 -3
  395. package/src/organisms/CommandText/CommandText.stories.tsx +3 -2
  396. package/src/organisms/CommandText/__tests__/CommandText.test.tsx +19 -18
  397. package/src/organisms/CommandText/fixtures/index.ts +1 -0
  398. package/src/organisms/CommandText/index.tsx +6 -4
  399. package/src/organisms/CommandText/useCommandTextString/index.ts +29 -6
  400. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/formatDuration.test.tsx +2 -1
  401. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +8 -5
  402. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getLabwareDisplayLocation.test.tsx +6 -5
  403. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getFlexStackerCommandText.test.tsx +179 -0
  404. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +13 -12
  405. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getRobotCommandText.test.tsx +118 -0
  406. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts +1 -1
  407. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +140 -6
  408. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts +1 -0
  409. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLoadCommandText.ts +4 -3
  410. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts +19 -3
  411. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +24 -14
  412. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getRobotCommandText.ts +87 -0
  413. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts +3 -2
  414. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts +1 -0
  415. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.ts +4 -4
  416. package/src/organisms/CommandText/useCommandTextString/utils/commandText/index.ts +2 -0
  417. package/src/organisms/CommandText/useCommandTextString/utils/formatDuration.ts +2 -0
  418. package/src/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.ts +1 -1
  419. package/src/organisms/CommandText/useCommandTextString/utils/getFinalAddressableAreaCmd.ts +2 -0
  420. package/src/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.ts +2 -2
  421. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +10 -10
  422. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.tsx +38 -15
  423. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +21 -12
  424. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareName.ts +2 -2
  425. package/src/organisms/CommandText/useCommandTextString/utils/getModuleDisplayLocation.ts +1 -0
  426. package/src/organisms/CommandText/useCommandTextString/utils/getModuleModel.ts +1 -0
  427. package/src/organisms/CommandText/useCommandTextString/utils/getWellRange.ts +2 -1
  428. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +1 -2
  429. package/src/organisms/DeckLabelSet/__tests__/DeckLabelSet.test.tsx +3 -3
  430. package/src/organisms/DeckLabelSet/index.tsx +56 -25
  431. package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +40 -0
  432. package/src/organisms/FixtureOption/index.tsx +63 -0
  433. package/src/organisms/ProtocolDeck/index.tsx +118 -0
  434. package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +8 -6
  435. package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +5 -3
  436. package/src/organisms/ProtocolTimelineScrubber/index.tsx +22 -45
  437. package/src/organisms/ProtocolTimelineScrubber/utils.ts +9 -6
  438. package/src/organisms/Toolbox/Toolbox.stories.tsx +1 -0
  439. package/src/organisms/Toolbox/__tests__/Toolbox.test.tsx +2 -1
  440. package/src/organisms/Toolbox/index.tsx +3 -2
  441. package/src/organisms/index.ts +2 -0
  442. package/src/primitives/Box.stories.tsx +1 -1
  443. package/src/primitives/Box.tsx +1 -1
  444. package/src/primitives/Btn.stories.tsx +8 -8
  445. package/src/primitives/Btn.tsx +2 -3
  446. package/src/primitives/Flex.stories.tsx +3 -3
  447. package/src/primitives/Flex.tsx +1 -1
  448. package/src/primitives/ForeignObject.tsx +20 -61
  449. package/src/primitives/Link.tsx +2 -2
  450. package/src/primitives/README.md +7 -16
  451. package/src/primitives/Svg.stories.tsx +2 -2
  452. package/src/primitives/Svg.tsx +2 -2
  453. package/src/primitives/Text.stories.tsx +2 -2
  454. package/src/primitives/Text.tsx +1 -1
  455. package/src/primitives/__tests__/Box.test.tsx +1 -0
  456. package/src/primitives/__tests__/Btn.test.tsx +1 -0
  457. package/src/primitives/__tests__/Flex.test.tsx +1 -0
  458. package/src/primitives/__tests__/Link.test.tsx +1 -0
  459. package/src/primitives/__tests__/Svg.test.tsx +1 -0
  460. package/src/primitives/__tests__/Text.test.tsx +1 -0
  461. package/src/primitives/__tests__/primitives.test.tsx +1 -0
  462. package/src/primitives/__tests__/style-props.test.tsx +1 -0
  463. package/src/primitives/style-props.ts +2 -2
  464. package/src/primitives/types.ts +1 -1
  465. package/src/slotmap/OT2SlotMap.tsx +1 -0
  466. package/src/slotmap/__tests__/OT2SlotMap.test.tsx +1 -0
  467. package/src/slotmap/styles.module.css +1 -1
  468. package/src/structure/LabeledValue.stories.tsx +2 -2
  469. package/src/structure/Pill.module.css +1 -1
  470. package/src/structure/Splash.module.css +1 -1
  471. package/src/structure/Splash.stories.tsx +4 -3
  472. package/src/structure/TitleBar.stories.tsx +4 -3
  473. package/src/structure/index.ts +2 -4
  474. package/src/structure/structure.module.css +11 -11
  475. package/src/styles/colors.module.css +1 -0
  476. package/src/styles/global.css +179 -0
  477. package/src/styles/index.module.css +1 -1
  478. package/src/styles/typography.module.css +1 -0
  479. package/src/testing/utils/matchers.ts +1 -0
  480. package/src/testing/utils/renderWithProviders.tsx +6 -9
  481. package/src/tooltips/DeprecatedTooltip.tsx +2 -1
  482. package/src/tooltips/LegacyTooltip.stories.tsx +10 -9
  483. package/src/tooltips/LegacyTooltip.tsx +5 -5
  484. package/src/tooltips/__tests__/Tooltip.test.tsx +1 -0
  485. package/src/tooltips/__tests__/useHoverTooltip.test.tsx +1 -0
  486. package/src/tooltips/__tests__/usePopper.test.tsx +1 -0
  487. package/src/tooltips/__tests__/useTooltip.test.tsx +1 -0
  488. package/src/tooltips/tooltips.module.css +14 -14
  489. package/src/tooltips/types.ts +2 -4
  490. package/src/tooltips/usePopper.ts +4 -4
  491. package/src/tooltips/useTooltip.ts +4 -3
  492. package/src/ui-style-constants/typography.ts +1 -0
  493. package/vite.config.mts +11 -4
  494. package/lib/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.d.ts +0 -14
  495. package/lib/controls/LabeledToggle.d.ts +0 -11
  496. package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.d.ts +0 -10
  497. package/lib/hardware-sim/DeckConfigurator/EmptyConfigFixture.d.ts +0 -8
  498. package/lib/hardware-sim/DeckConfigurator/FlexStackerFixture.d.ts +0 -11
  499. package/lib/hardware-sim/DeckConfigurator/HeaterShakerFixture.d.ts +0 -10
  500. package/lib/hardware-sim/DeckConfigurator/MagneticBlockFixture.d.ts +0 -11
  501. package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.d.ts +0 -10
  502. package/lib/hardware-sim/DeckConfigurator/TemperatureModuleFixture.d.ts +0 -10
  503. package/lib/hardware-sim/DeckConfigurator/ThermocyclerFixture.d.ts +0 -10
  504. package/lib/hardware-sim/DeckConfigurator/TrashBinConfigFixture.d.ts +0 -10
  505. package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.d.ts +0 -11
  506. package/lib/hardware-sim/Labware/LabwareStackRender.d.ts +0 -20
  507. package/lib/hardware-sim/ProtocolDeck/LabwareInfo.d.ts +0 -6
  508. package/lib/hardware-sim/ProtocolDeck/types.d.ts +0 -8
  509. package/lib/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.d.ts +0 -5
  510. package/lib/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.d.ts +0 -12
  511. package/lib/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.d.ts +0 -3
  512. package/lib/hardware-sim/ProtocolDeck/utils/getModulesInSlots.d.ts +0 -10
  513. package/lib/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.d.ts +0 -2
  514. package/lib/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.d.ts +0 -4
  515. package/lib/hardware-sim/ProtocolDeck/utils/index.d.ts +0 -4
  516. package/lib/hardware-sim/utils.d.ts +0 -3
  517. package/lib/instrument/InstrumentGroup.d.ts +0 -11
  518. package/lib/instrument/InstrumentInfo.d.ts +0 -18
  519. package/lib/instrument/PipetteSelect.d.ts +0 -20
  520. package/lib/legacy-hardware-sim/ModuleItem.d.ts +0 -17
  521. package/lib/lists/TitledList.d.ts +0 -44
  522. package/lib/structure/Card.d.ts +0 -18
  523. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +0 -108
  524. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +0 -28
  525. package/src/controls/LabeledToggle.tsx +0 -35
  526. package/src/hardware-sim/Labware/LabwareStackRender.tsx +0 -273
  527. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +0 -69
  528. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +0 -25
  529. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +0 -47145
  530. package/src/hardware-sim/ProtocolDeck/index.tsx +0 -85
  531. package/src/hardware-sim/ProtocolDeck/types.ts +0 -6
  532. package/src/hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.ts +0 -158
  533. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +0 -33
  534. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +0 -321
  535. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +0 -43
  536. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +0 -129
  537. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +0 -29
  538. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +0 -30
  539. package/src/hardware-sim/ProtocolDeck/utils/index.ts +0 -4
  540. package/src/hardware-sim/utils.ts +0 -18
  541. package/src/instrument/InstrumentDiagram.stories.tsx +0 -42
  542. package/src/instrument/InstrumentGroup.stories.tsx +0 -88
  543. package/src/instrument/InstrumentGroup.tsx +0 -35
  544. package/src/instrument/InstrumentInfo.tsx +0 -106
  545. package/src/instrument/PipetteSelect.stories.tsx +0 -40
  546. package/src/instrument/PipetteSelect.tsx +0 -170
  547. package/src/instrument/__tests__/InstrumentInfo.test.tsx +0 -56
  548. package/src/instrument/__tests__/PipetteSelect.test.tsx +0 -4
  549. package/src/instrument/instrument.module.css +0 -45
  550. package/src/legacy-hardware-sim/ModuleItem.tsx +0 -145
  551. package/src/lists/TitledList.tsx +0 -155
  552. package/src/structure/Card.stories.tsx +0 -28
  553. package/src/structure/Card.tsx +0 -63
  554. /package/lib/atoms/{ListButton/__tests__/ListButtonRadioButton.test.d.ts → AnimationVideo/__tests__/AnimationVideo.test.d.ts} +0 -0
  555. /package/lib/{hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.d.ts → atoms/InlineNotification/__tests__/InlineNotification.test.d.ts} +0 -0
  556. /package/lib/{instrument/__tests__/InstrumentInfo.test.d.ts → atoms/StepMeter/__tests__/StepMeter.test.d.ts} +0 -0
  557. /package/lib/{instrument/__tests__/PipetteSelect.test.d.ts → atoms/buttons/__tests__/BasicButton.test.d.ts} +0 -0
@@ -1,143 +1,41 @@
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 {
6
+ computeLabwareOrigin,
5
7
  getDeckDefFromRobotType,
6
- getModuleDef2,
7
- getPositionFromSlotId,
8
+ getLabwareViewBox,
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 { resolveLabwareLocation } from './resolveLabwareLocation'
14
15
 
16
+ import type { PropsWithChildren, ReactNode } from 'react'
15
17
  import type {
18
+ DeckConfiguration,
19
+ DeckDefinition,
20
+ LabwareDefinition,
21
+ LabwareLocation,
16
22
  LoadedLabware,
17
23
  LoadedModule,
18
- Coordinates,
19
- LabwareDefinition2,
20
- LabwareLocation,
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
- const getModulePosition = (
30
- deckDef: DeckDefinition,
31
- moduleId: string,
32
- loadedModules: LoadedModule[]
33
- ): Coordinates | null => {
34
- const loadedModule = loadedModules.find(m => m.id === moduleId)
35
- if (loadedModule == null) return null
36
- const modSlot = deckDef.locations.addressableAreas.find(
37
- s => s.id === loadedModule.location.slotName
38
- )
39
- if (modSlot == null) return null
40
-
41
- const modPosition = getPositionFromSlotId(modSlot.id, deckDef)
42
- if (modPosition == null) return null
43
- const [modX, modY] = modPosition
44
-
45
- const deckSpecificAffineTransform =
46
- getModuleDef2(loadedModule.model).slotTransforms?.[deckDef.otId]?.[
47
- modSlot.id
48
- ]?.labwareOffset ?? IDENTITY_AFFINE_TRANSFORM
49
- const [[labwareX], [labwareY], [labwareZ]] = multiplyMatrices(
50
- [[modX], [modY], [1], [1]],
51
- deckSpecificAffineTransform
52
- )
53
- return { x: labwareX, y: labwareY, z: labwareZ }
54
- }
55
-
56
- function getLabwareCoordinates({
57
- deckDef,
58
- location,
59
- loadedModules,
60
- loadedLabware,
61
- }: {
62
- deckDef: DeckDefinition
63
- location: LabwareLocation
64
- loadedModules: LoadedModule[]
65
- loadedLabware: LoadedLabware[]
66
- }): Coordinates | null {
67
- if (location === 'offDeck' || location === 'systemLocation') {
68
- return null
69
- } else if ('labwareId' in location) {
70
- const loadedAdapter = loadedLabware.find(l => l.id === location.labwareId)
71
- if (loadedAdapter == null) return null
72
- const loadedAdapterLocation = loadedAdapter.location
73
-
74
- if (
75
- loadedAdapterLocation === 'offDeck' ||
76
- loadedAdapterLocation === 'systemLocation' ||
77
- 'labwareId' in loadedAdapterLocation
78
- )
79
- return null
80
- // adapter on module
81
- if ('moduleId' in loadedAdapterLocation) {
82
- return getModulePosition(
83
- deckDef,
84
- loadedAdapterLocation.moduleId,
85
- loadedModules
86
- )
87
- }
88
-
89
- // adapter on deck
90
- const loadedAdapterSlotPosition = getPositionFromSlotId(
91
- 'slotName' in loadedAdapterLocation
92
- ? loadedAdapterLocation.slotName
93
- : loadedAdapterLocation.addressableAreaName,
94
- deckDef
95
- )
96
- return loadedAdapterSlotPosition != null
97
- ? {
98
- x: loadedAdapterSlotPosition[0],
99
- y: loadedAdapterSlotPosition[1],
100
- z: loadedAdapterSlotPosition[2],
101
- }
102
- : null
103
- } else if ('addressableAreaName' in location) {
104
- const slotCoordinateTuple = getPositionFromSlotId(
105
- location.addressableAreaName,
106
- deckDef
107
- )
108
- return slotCoordinateTuple != null
109
- ? {
110
- x: slotCoordinateTuple[0],
111
- y: slotCoordinateTuple[1],
112
- z: slotCoordinateTuple[2],
113
- }
114
- : null
115
- } else if ('slotName' in location) {
116
- const slotCoordinateTuple = getPositionFromSlotId(
117
- location.slotName,
118
- deckDef
119
- )
120
- return slotCoordinateTuple != null
121
- ? {
122
- x: slotCoordinateTuple[0],
123
- y: slotCoordinateTuple[1],
124
- z: slotCoordinateTuple[2],
125
- }
126
- : null
127
- } else {
128
- return getModulePosition(deckDef, location.moduleId, loadedModules)
129
- }
130
- }
131
-
132
29
  const SPLASH_Y_BUFFER_MM = 10
133
30
 
134
31
  interface MoveLabwareOnDeckProps extends StyleProps {
135
32
  robotType: RobotType
136
- movedLabwareDef: LabwareDefinition2
33
+ movedLabwareDef: LabwareDefinition
137
34
  initialLabwareLocation: LabwareLocation
138
35
  finalLabwareLocation: LabwareLocation
139
36
  loadedModules: LoadedModule[]
140
37
  loadedLabware: LoadedLabware[]
38
+ labwareDefinitions: LabwareDefinition[]
141
39
  deckConfig: DeckConfiguration
142
40
  backgroundItems?: ReactNode
143
41
  deckFill?: string
@@ -149,6 +47,7 @@ export function MoveLabwareOnDeck(
149
47
  robotType,
150
48
  movedLabwareDef,
151
49
  loadedLabware,
50
+ labwareDefinitions,
152
51
  initialLabwareLocation,
153
52
  finalLabwareLocation,
154
53
  loadedModules,
@@ -158,48 +57,67 @@ export function MoveLabwareOnDeck(
158
57
  } = props
159
58
  const deckDef = useMemo(() => getDeckDefFromRobotType(robotType), [robotType])
160
59
 
161
- const initialSlotId =
162
- initialLabwareLocation === 'offDeck' ||
163
- initialLabwareLocation === 'systemLocation' ||
164
- !('slotName' in initialLabwareLocation)
165
- ? deckDef.locations.addressableAreas[1].id
166
- : initialLabwareLocation.slotName
167
-
168
- const slotPosition = getPositionFromSlotId(initialSlotId, deckDef) ?? [
169
- 0,
170
- 0,
171
- 0,
172
- ]
60
+ const initialResolvedLocation = resolveLabwareLocation({
61
+ deckDef,
62
+ targetLabwareDef: movedLabwareDef,
63
+ targetLabwareLocation: initialLabwareLocation,
64
+ loadedModules,
65
+ otherLoadedLabware: loadedLabware,
66
+ otherLabwareDefinitions: labwareDefinitions,
67
+ })
68
+ const finalResolvedLocation = resolveLabwareLocation({
69
+ deckDef,
70
+ targetLabwareDef: movedLabwareDef,
71
+ targetLabwareLocation: finalLabwareLocation,
72
+ loadedModules,
73
+ otherLoadedLabware: loadedLabware,
74
+ otherLabwareDefinitions: labwareDefinitions,
75
+ })
173
76
 
174
- const offDeckPosition = {
175
- x: slotPosition[0],
176
- y:
177
- deckDef.cornerOffsetFromOrigin[1] -
178
- movedLabwareDef.dimensions.xDimension -
179
- SPLASH_Y_BUFFER_MM,
180
- }
181
- const initialPosition =
182
- getLabwareCoordinates({
183
- deckDef,
184
- location: initialLabwareLocation,
185
- loadedModules,
186
- loadedLabware,
187
- }) ?? offDeckPosition
188
- const finalPosition =
189
- getLabwareCoordinates({
190
- deckDef,
191
- location: finalLabwareLocation,
192
- loadedModules,
193
- loadedLabware,
194
- }) ?? offDeckPosition
77
+ const initialCoordinates =
78
+ initialResolvedLocation === 'error' || initialResolvedLocation === 'offDeck'
79
+ ? initialResolvedLocation
80
+ : computeLabwareOrigin(initialResolvedLocation) ?? 'error'
81
+ const finalCoordinates =
82
+ finalResolvedLocation === 'error' || finalResolvedLocation === 'offDeck'
83
+ ? finalResolvedLocation
84
+ : computeLabwareOrigin(finalResolvedLocation) ?? 'error'
85
+
86
+ const referenceForOffDeckCoordinates = (() => {
87
+ if (initialCoordinates !== 'error' && initialCoordinates !== 'offDeck') {
88
+ return initialCoordinates
89
+ } else if (finalCoordinates !== 'error' && finalCoordinates !== 'offDeck') {
90
+ return finalCoordinates
91
+ } else {
92
+ return { x: 0, y: 0, z: 0 }
93
+ }
94
+ })()
95
+ const offDeckCoordinates = getOffDeckCoordinates(
96
+ deckDef,
97
+ movedLabwareDef,
98
+ referenceForOffDeckCoordinates,
99
+ SPLASH_Y_BUFFER_MM
100
+ )
195
101
 
196
- const shouldReset = usePositionChangeReset(initialPosition, finalPosition)
102
+ const animationInitialCoordinates =
103
+ initialCoordinates !== 'error' && initialCoordinates !== 'offDeck'
104
+ ? initialCoordinates
105
+ : offDeckCoordinates
106
+ const animationFinalCoordinates =
107
+ finalCoordinates !== 'error' && finalCoordinates !== 'offDeck'
108
+ ? finalCoordinates
109
+ : offDeckCoordinates
110
+
111
+ const shouldReset = usePositionChangeReset(
112
+ animationInitialCoordinates,
113
+ animationFinalCoordinates
114
+ )
197
115
 
198
116
  const springProps = useSpring({
199
117
  reset: shouldReset,
200
118
  config: { duration: 1000, easing: easings.easeInOutSine },
201
119
  from: {
202
- ...initialPosition,
120
+ ...animationInitialCoordinates,
203
121
  splashOpacity: 0,
204
122
  deckOpacity: 0,
205
123
  },
@@ -207,7 +125,7 @@ export function MoveLabwareOnDeck(
207
125
  { deckOpacity: 1 },
208
126
  { splashOpacity: 1 },
209
127
  { splashOpacity: 0 },
210
- { ...finalPosition },
128
+ { ...animationFinalCoordinates },
211
129
  { splashOpacity: 1 },
212
130
  { splashOpacity: 0 },
213
131
  { deckOpacity: 0 },
@@ -215,10 +133,6 @@ export function MoveLabwareOnDeck(
215
133
  loop: true,
216
134
  })
217
135
 
218
- if (deckDef == null) {
219
- return null
220
- }
221
-
222
136
  return (
223
137
  <BaseDeck
224
138
  deckConfig={deckConfig}
@@ -231,11 +145,13 @@ export function MoveLabwareOnDeck(
231
145
  >
232
146
  {backgroundItems}
233
147
  <AnimatedG style={{ x: springProps.x, y: springProps.y }}>
234
- <g
235
- transform={`translate(${movedLabwareDef.cornerOffsetFromSlot.x}, ${movedLabwareDef.cornerOffsetFromSlot.y})`}
236
- >
237
- <LabwareRender definition={movedLabwareDef} highlight={true} />
238
- <AnimatedG style={{ opacity: springProps.splashOpacity }}>
148
+ <LabwareRender
149
+ definition={movedLabwareDef}
150
+ positioningMode="passThrough"
151
+ highlight={true}
152
+ />
153
+ <AnimatedG style={{ opacity: springProps.splashOpacity }}>
154
+ <AlignSplashToLabware labwareDefinition={movedLabwareDef}>
239
155
  <path
240
156
  d="M158.027 111.537L154.651 108.186M145.875 113L145.875 109.253M161 99.3038L156.864 99.3038M11.9733 10.461L15.3495 13.8128M24.1255 9L24.1254 12.747M9 22.6962L13.1357 22.6962"
241
157
  stroke={COLORS.blue50}
@@ -243,13 +159,38 @@ export function MoveLabwareOnDeck(
243
159
  strokeLinecap="round"
244
160
  transform="scale(.97, -1) translate(-19, -104)"
245
161
  />
246
- </AnimatedG>
247
- </g>
162
+ </AlignSplashToLabware>
163
+ </AnimatedG>
248
164
  </AnimatedG>
249
165
  </BaseDeck>
250
166
  )
251
167
  }
252
168
 
169
+ /**
170
+ * Returns the coordinates of a location beyond the bounds of the deck.
171
+ *
172
+ * @param onDeckCoordinates - The coordinates of the labware when it's on-deck. The
173
+ * off-deck location is chosen to be vertically aligned with this, so the animation
174
+ * goes straight up or down.
175
+ */
176
+ function getOffDeckCoordinates(
177
+ deckDefinition: DeckDefinition,
178
+ labwareDefinition: LabwareDefinition,
179
+ onDeckCoordinates: Vector3D,
180
+ extraMargin: number
181
+ ): Vector3D {
182
+ const labwareViewBox = getLabwareViewBox(labwareDefinition)
183
+ const labwareOriginToLabwareMaxY =
184
+ labwareViewBox.minY + labwareViewBox.yDimension
185
+ const margin = labwareOriginToLabwareMaxY + extraMargin
186
+ const deckMinY = deckDefinition.cornerOffsetFromOrigin[1]
187
+ const y = deckMinY - margin - labwareOriginToLabwareMaxY
188
+ return {
189
+ ...onDeckCoordinates,
190
+ y,
191
+ }
192
+ }
193
+
253
194
  function usePositionChangeReset(
254
195
  initialPosition: { x: number; y: number },
255
196
  finalPosition: { x: number; y: number }
@@ -281,6 +222,31 @@ function usePositionChangeReset(
281
222
 
282
223
  return shouldReset
283
224
  }
225
+
226
+ /**
227
+ * The splash SVG is made for its origin to be placed at the -x,-y corner of a labware
228
+ * (or the slot that the labware is in). If this component is placed at the labware
229
+ * origin and the splash is placed inside this component, it will align the splash
230
+ * accordingly.
231
+ */
232
+ function AlignSplashToLabware(
233
+ props: PropsWithChildren<{ labwareDefinition: LabwareDefinition }>
234
+ ): JSX.Element {
235
+ const { labwareDefinition, children } = props
236
+ const labwareViewBox = getLabwareViewBox(labwareDefinition)
237
+ const labwareOriginToFrontLeftCorner = {
238
+ x: labwareViewBox.minX,
239
+ y: labwareViewBox.minY,
240
+ }
241
+ return (
242
+ <g
243
+ transform={`translate(${labwareOriginToFrontLeftCorner.x} ${labwareOriginToFrontLeftCorner.y})`}
244
+ >
245
+ {children}
246
+ </g>
247
+ )
248
+ }
249
+
284
250
  /**
285
251
  * These animated components needs to be split out because react-spring and styled-components don't play nice
286
252
  * @see https://github.com/pmndrs/react-spring/issues/1515 */
@@ -1,7 +1,9 @@
1
- import { Box } from '../../primitives'
1
+ import { withStyleProps } from '../../hocs/withStyleProps'
2
2
 
3
- import type { ComponentProps, ReactNode } from 'react'
3
+ import type { HTMLAttributes, ReactNode } from 'react'
4
+ import type { StyleProps } from '../../primitives'
4
5
 
6
+ export type PositionType = 'absolute' | 'relative' | 'fixed'
5
7
  export interface RobotCoordsForeignDivProps {
6
8
  width?: string | number
7
9
  height?: string | number
@@ -9,43 +11,49 @@ export interface RobotCoordsForeignDivProps {
9
11
  y?: string | number
10
12
  children?: ReactNode
11
13
  outerProps?: any
12
- innerDivProps?: ComponentProps<typeof Box>
14
+ innerDivProps?: StyleProps
15
+ innerDivEvents?: HTMLAttributes<HTMLDivElement>
13
16
  transformWithSVG?: boolean
14
17
  extraTransform?: string
15
- /** optional data-testid to test foreignObjects in cypress */
16
18
  dataTestId?: string
17
19
  }
18
20
 
19
- export const RobotCoordsForeignDiv = (
20
- props: RobotCoordsForeignDivProps
21
- ): JSX.Element => {
22
- const {
23
- children,
24
- x = 0,
25
- y = 0,
26
- height = '100%',
27
- width = '100%',
28
- outerProps,
29
- innerDivProps,
30
- transformWithSVG = false,
31
- extraTransform = '',
32
- dataTestId = '',
33
- } = props
21
+ const StyledDiv = withStyleProps('div' as any)
22
+
23
+ export const RobotCoordsForeignDiv = ({
24
+ children,
25
+ x = 0,
26
+ y = 0,
27
+ height = '100%',
28
+ width = '100%',
29
+ outerProps,
30
+ innerDivProps = {},
31
+ transformWithSVG = false,
32
+ extraTransform = '',
33
+ dataTestId = '',
34
+ innerDivEvents,
35
+ }: RobotCoordsForeignDivProps): JSX.Element => {
36
+ const svgTransform = `scale(1, -1) ${extraTransform}`
34
37
 
35
- const transform = `scale(1, -1) ${extraTransform}`
36
38
  return (
37
39
  <foreignObject
38
40
  data-testid={dataTestId}
39
- {...{ x, y, height, width, ...outerProps }}
40
- transform={transformWithSVG ? transform : extraTransform}
41
+ x={x}
42
+ y={y}
43
+ height={height}
44
+ width={width}
45
+ transform={transformWithSVG ? svgTransform : extraTransform}
46
+ {...outerProps}
41
47
  >
42
- <Box
43
- style={transformWithSVG ? {} : { transform }}
44
- xmlns="http://www.w3.org/1999/xhtml"
45
- {...innerDivProps}
48
+ <StyledDiv
49
+ {...innerDivEvents}
50
+ style={{
51
+ ...innerDivProps,
52
+ ...(transformWithSVG ? { transform: svgTransform } : {}),
53
+ }}
46
54
  >
47
55
  {children}
48
- </Box>
56
+ </StyledDiv>
49
57
  </foreignObject>
50
58
  )
51
59
  }
@@ -1,7 +1,13 @@
1
- import { css } from 'styled-components'
2
- import { Flex, ForeignObject } from '../../primitives'
1
+ import { withStyleProps } from '../../hocs/withStyleProps'
2
+ import { ForeignObject } from '../../primitives'
3
+ import styles from './deck.module.css'
3
4
 
4
- import type { ComponentProps, ReactNode } from 'react'
5
+ import type { HTMLAttributes, ReactNode } from 'react'
6
+ import type { StyleProps } from '../../primitives'
7
+
8
+ export type FlexDirection = 'column' | 'row'
9
+
10
+ const StyledDiv = withStyleProps('div' as any)
5
11
 
6
12
  export interface RobotCoordsForeignObjectProps {
7
13
  width: string | number
@@ -9,35 +15,33 @@ export interface RobotCoordsForeignObjectProps {
9
15
  x: string | number
10
16
  y: string | number
11
17
  children?: ReactNode
12
- foreignObjectProps?: ComponentProps<typeof ForeignObject>
13
- flexProps?: ComponentProps<typeof Flex>
18
+ foreignObjectProps?: StyleProps
19
+ foreignObjectEvents?: HTMLAttributes<HTMLDivElement>
20
+ flexProps?: StyleProps
21
+ flexEvents?: HTMLAttributes<HTMLDivElement>
14
22
  }
15
-
16
- export const RobotCoordsForeignObject = (
17
- props: RobotCoordsForeignObjectProps
18
- ): JSX.Element => {
19
- const {
20
- children,
21
- x,
22
- y,
23
- height,
24
- width,
25
- foreignObjectProps = {},
26
- flexProps = {},
27
- } = props
28
-
23
+ export const RobotCoordsForeignObject = ({
24
+ children,
25
+ x,
26
+ y,
27
+ height,
28
+ width,
29
+ foreignObjectEvents,
30
+ foreignObjectProps = {},
31
+ flexProps,
32
+ flexEvents = {},
33
+ }: RobotCoordsForeignObjectProps): JSX.Element => {
29
34
  return (
30
- <ForeignObject {...{ x, y, height, width }}>
31
- <Flex
32
- height="100%"
33
- width="100%"
34
- css={css`
35
- transform: scale(1, -1);
36
- `}
37
- {...foreignObjectProps}
35
+ <ForeignObject x={x} y={y} height={height} width={width}>
36
+ <StyledDiv
37
+ className={styles.robot_coords_foreign_object_container}
38
+ {...foreignObjectEvents}
39
+ style={foreignObjectProps}
38
40
  >
39
- <Flex {...flexProps}>{children}</Flex>
40
- </Flex>
41
+ <StyledDiv {...flexEvents} style={flexProps}>
42
+ {children}
43
+ </StyledDiv>
44
+ </StyledDiv>
41
45
  </ForeignObject>
42
46
  )
43
47
  }
@@ -1,16 +1,23 @@
1
- import { css } from 'styled-components'
2
-
3
1
  import type { ComponentProps, ReactNode } from 'react'
4
2
 
5
3
  export interface RobotCoordsTextProps extends ComponentProps<'text'> {
6
4
  x: number
5
+ /** The y-coordinate of the text baseline, in the Opentrons robot orientation, so +y is towards the top of the screen. */
7
6
  y: number
8
7
  children?: ReactNode
9
8
  canHighlight?: boolean
10
9
  }
11
10
 
12
- /** SVG text reflected to use take robot coordinates as props */
13
- // TODO: Ian 2019-05-07 reconcile this with Brian's version
11
+ /**
12
+ * SVG text positioned with Opentrons robot coordinates.
13
+ *
14
+ * This should be used inside a wrapper like RobotWorkSpace that sets up a transformation
15
+ * to orient the SVG with the Opentrons coordinate convention, with +y towards the
16
+ * top of the screen.
17
+ *
18
+ * This component surgically undoes the wrapper's transformation so the child text is
19
+ * displayed right-side-up.
20
+ */
14
21
  export function RobotCoordsText(props: RobotCoordsTextProps): JSX.Element {
15
22
  const { x, y, children, canHighlight = true, ...additionalProps } = props
16
23
  return (
@@ -19,13 +26,7 @@ export function RobotCoordsText(props: RobotCoordsTextProps): JSX.Element {
19
26
  x={x}
20
27
  y={-1 * y}
21
28
  transform="scale(1, -1)"
22
- css={
23
- !canHighlight
24
- ? css`
25
- user-select: none;
26
- `
27
- : undefined
28
- }
29
+ style={{ userSelect: !canHighlight ? 'none' : undefined }}
29
30
  >
30
31
  {children}
31
32
  </text>