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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/cssModuleSideEffect.ts +22 -0
  2. package/lib/assets/localization/en/index.d.ts +12 -0
  3. package/lib/assets/localization/index.d.ts +12 -0
  4. package/lib/atoms/AnimationVideo/index.d.ts +13 -0
  5. package/lib/atoms/InlineNotification/index.d.ts +1 -1
  6. package/lib/atoms/ListButton/ListButtonChildren/index.d.ts +0 -1
  7. package/lib/atoms/StyledText/PlaceholderStyledText.d.ts +14 -0
  8. package/lib/atoms/StyledText/index.d.ts +1 -0
  9. package/lib/atoms/buttons/BasicButton.d.ts +12 -0
  10. package/lib/atoms/buttons/index.d.ts +1 -0
  11. package/lib/atoms/index.d.ts +1 -0
  12. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +10 -8
  13. package/lib/hardware-sim/Deck/FlexTrash.d.ts +4 -1
  14. package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +3 -2
  15. package/lib/hardware-sim/Deck/RobotCoordsForeignDiv.d.ts +6 -5
  16. package/lib/hardware-sim/Deck/RobotCoordsForeignObject.d.ts +8 -5
  17. package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +11 -1
  18. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +30 -14
  19. package/lib/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.d.ts +1 -0
  20. package/lib/hardware-sim/Deck/resolveLabwareLocation.d.ts +20 -0
  21. package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderItem.d.ts +11 -0
  22. package/lib/hardware-sim/DeckConfigurator/EmptyConfigItem.d.ts +11 -0
  23. package/lib/hardware-sim/DeckConfigurator/FlexStackerItem.d.ts +12 -0
  24. package/lib/hardware-sim/DeckConfigurator/HeaterShakerItem.d.ts +11 -0
  25. package/lib/hardware-sim/DeckConfigurator/MagneticBlockItem.d.ts +12 -0
  26. package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigItem.d.ts +11 -0
  27. package/lib/hardware-sim/DeckConfigurator/{StaticFixture.d.ts → StaticItem.d.ts} +1 -1
  28. package/lib/hardware-sim/DeckConfigurator/TemperatureModuleItem.d.ts +11 -0
  29. package/lib/hardware-sim/DeckConfigurator/ThermocyclerItem.d.ts +11 -0
  30. package/lib/hardware-sim/DeckConfigurator/TrashBinConfigItem.d.ts +11 -0
  31. package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigItem.d.ts +11 -0
  32. package/lib/hardware-sim/DeckConfigurator/constants.d.ts +5 -8
  33. package/lib/hardware-sim/DeckConfigurator/index.d.ts +4 -3
  34. package/lib/hardware-sim/Labware/CalibrationBlockRender.d.ts +15 -0
  35. package/lib/hardware-sim/Labware/Labware.d.ts +7 -8
  36. package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +2 -2
  37. package/lib/hardware-sim/Labware/LabwareRender.d.ts +46 -5
  38. package/lib/hardware-sim/Labware/index.d.ts +1 -0
  39. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +3 -4
  40. package/lib/hardware-sim/Labware/labwareInternals/LabwareOutline.d.ts +20 -9
  41. package/lib/hardware-sim/Labware/labwareInternals/LabwareWellLabels.d.ts +2 -2
  42. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +2 -2
  43. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +2 -2
  44. package/lib/hardware-sim/Labware/labwareInternals/StyledWells.d.ts +2 -2
  45. package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -2
  46. package/lib/hardware-sim/Labware/labwareInternals/WellLabels.d.ts +2 -2
  47. package/lib/hardware-sim/Module/index.d.ts +24 -2
  48. package/lib/hardware-sim/Pipette/PipetteRender.d.ts +2 -2
  49. package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.d.ts +5 -3
  50. package/lib/hocs/withStyleProps.d.ts +26 -0
  51. package/lib/hooks/useConditionalConfirm.d.ts +4 -0
  52. package/lib/icons/Icon.d.ts +7 -7
  53. package/lib/icons/ModuleIcon.d.ts +4 -3
  54. package/lib/instrument/index.d.ts +0 -2
  55. package/lib/legacy-hardware-sim/index.d.ts +0 -1
  56. package/lib/lists/index.d.ts +0 -1
  57. package/lib/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.d.ts +1 -0
  58. package/lib/molecules/CustomizeExpandButton/index.d.ts +29 -0
  59. package/lib/molecules/DeckInfoLabel/index.d.ts +8 -16
  60. package/lib/molecules/index.d.ts +2 -1
  61. package/lib/organisms/CommandText/index.d.ts +2 -2
  62. package/lib/organisms/CommandText/useCommandTextString/index.d.ts +2 -2
  63. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.d.ts +2 -2
  64. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +3 -3
  65. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareName.d.ts +2 -2
  66. package/lib/organisms/FixtureOption/index.d.ts +2 -2
  67. package/lib/organisms/ProtocolDeck/index.d.ts +10 -0
  68. package/lib/organisms/ProtocolTimelineScrubber/CommandItem.d.ts +2 -2
  69. package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +2 -2
  70. package/lib/organisms/index.d.ts +1 -0
  71. package/lib/primitives/ForeignObject.d.ts +8 -18
  72. package/lib/primitives/style-props.d.ts +1 -1
  73. package/lib/structure/index.d.ts +2 -3
  74. package/package.json +6 -3
  75. package/src/alerts/alerts.module.css +2 -2
  76. package/src/assets/localization/en/deck_configuration.json +12 -0
  77. package/src/assets/localization/en/index.ts +2 -0
  78. package/src/assets/localization/en/protocol_command_text.json +1 -1
  79. package/src/atoms/AnimationVideo/__tests__/AnimationVideo.test.tsx +40 -0
  80. package/src/atoms/AnimationVideo/index.tsx +44 -0
  81. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +0 -3
  82. package/src/atoms/CheckboxField/index.tsx +1 -1
  83. package/src/atoms/InlineNotification/index.tsx +86 -70
  84. package/src/atoms/ListButton/ListButton.stories.tsx +21 -7
  85. package/src/atoms/ListButton/ListButtonChildren/index.ts +0 -1
  86. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +2 -2
  87. package/src/atoms/MenuList/OverflowBtn.tsx +39 -41
  88. package/src/atoms/Snackbar/Snackbar.stories.tsx +59 -23
  89. package/src/atoms/Snackbar/index.tsx +48 -38
  90. package/src/atoms/StyledText/PlaceholderStyledText.tsx +46 -0
  91. package/src/atoms/StyledText/index.ts +1 -0
  92. package/src/atoms/StyledText/placeholderstyledtext.module.css +25 -0
  93. package/src/atoms/buttons/BasicButton.tsx +100 -0
  94. package/src/atoms/buttons/SecondaryButton.tsx +5 -2
  95. package/src/atoms/buttons/__tests__/BasicButton.test.tsx +87 -0
  96. package/src/atoms/buttons/buttons.stories.tsx +91 -55
  97. package/src/atoms/buttons/index.ts +1 -0
  98. package/src/atoms/index.ts +1 -0
  99. package/src/buttons/buttons.module.css +92 -92
  100. package/src/controls/styles.module.css +15 -15
  101. package/src/forms/Select.module.css +23 -23
  102. package/src/forms/forms.module.css +38 -37
  103. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +7 -7
  104. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +98 -61
  105. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +22 -28
  106. package/src/hardware-sim/BaseDeck/basedeck.module.css +20 -0
  107. package/src/hardware-sim/Deck/FlexTrash.tsx +50 -30
  108. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +2 -2
  109. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +122 -156
  110. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +35 -27
  111. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +32 -29
  112. package/src/hardware-sim/Deck/RobotCoordsText.tsx +12 -11
  113. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +74 -54
  114. package/src/hardware-sim/Deck/SlotLabels.tsx +51 -51
  115. package/src/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.ts +138 -0
  116. package/src/hardware-sim/Deck/deck.module.css +54 -0
  117. package/src/hardware-sim/Deck/resolveLabwareLocation.ts +154 -0
  118. package/src/hardware-sim/DeckConfigurator/{FlexStackerFixture.tsx → AbsorbanceReaderItem.tsx} +34 -31
  119. package/src/hardware-sim/DeckConfigurator/{EmptyConfigFixture.tsx → EmptyConfigItem.tsx} +72 -44
  120. package/src/hardware-sim/DeckConfigurator/{AbsorbanceReaderFixture.tsx → FlexStackerItem.tsx} +46 -27
  121. package/src/hardware-sim/DeckConfigurator/{HeaterShakerFixture.tsx → HeaterShakerItem.tsx} +40 -28
  122. package/src/hardware-sim/DeckConfigurator/{MagneticBlockFixture.tsx → MagneticBlockItem.tsx} +41 -58
  123. package/src/hardware-sim/DeckConfigurator/{StagingAreaConfigFixture.tsx → StagingAreaConfigItem.tsx} +41 -23
  124. package/src/hardware-sim/DeckConfigurator/{StaticFixture.tsx → StaticItem.tsx} +16 -9
  125. package/src/hardware-sim/DeckConfigurator/{TemperatureModuleFixture.tsx → TemperatureModuleItem.tsx} +42 -26
  126. package/src/hardware-sim/DeckConfigurator/{ThermocyclerFixture.tsx → ThermocyclerItem.tsx} +31 -21
  127. package/src/hardware-sim/DeckConfigurator/{TrashBinConfigFixture.tsx → TrashBinConfigItem.tsx} +42 -27
  128. package/src/hardware-sim/DeckConfigurator/{WasteChuteConfigFixture.tsx → WasteChuteConfigItem.tsx} +38 -27
  129. package/src/hardware-sim/DeckConfigurator/constants.ts +5 -9
  130. package/src/hardware-sim/DeckConfigurator/index.tsx +236 -206
  131. package/src/hardware-sim/Labware/CalibrationBlockRender.stories.tsx +49 -0
  132. package/src/hardware-sim/Labware/CalibrationBlockRender.tsx +172 -0
  133. package/src/hardware-sim/Labware/Labware.tsx +30 -15
  134. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +2 -2
  135. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +36 -21
  136. package/src/hardware-sim/Labware/LabwareRender.tsx +70 -15
  137. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +9 -4
  138. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +14 -5
  139. package/src/hardware-sim/Labware/index.ts +1 -0
  140. package/src/hardware-sim/Labware/labware.module.css +8 -0
  141. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +3 -4
  142. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +48 -23
  143. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +3 -3
  144. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +2 -2
  145. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +2 -2
  146. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +2 -2
  147. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +1 -2
  148. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +10 -11
  149. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +2 -2
  150. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +2 -2
  151. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +2 -2
  152. package/src/hardware-sim/Module/Module.stories.tsx +45 -15
  153. package/src/hardware-sim/Module/Thermocycler/index.tsx +2 -2
  154. package/src/hardware-sim/Module/index.tsx +41 -18
  155. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +2 -2
  156. package/src/hardware-sim/Pipette/PipetteRender.tsx +5 -7
  157. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +2 -2
  158. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +15 -14
  159. package/src/hardware-sim/RobotCoordinateSpace/robotcoordinatespace.module.css +3 -0
  160. package/src/hocs/withStyleProps.ts +53 -0
  161. package/src/hooks/useConditionalConfirm.ts +15 -5
  162. package/src/icons/Icon.tsx +38 -29
  163. package/src/icons/ModuleIcon.tsx +5 -3
  164. package/src/icons/icon-data.ts +26 -2
  165. package/src/icons/icon.module.css +10 -0
  166. package/src/index.module.css +1 -0
  167. package/src/instrument/InstrumentDiagram.tsx +0 -2
  168. package/src/instrument/PipetteSelect.module.css +3 -3
  169. package/src/instrument/index.ts +0 -2
  170. package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +5 -5
  171. package/src/legacy-hardware-sim/ModuleItem.module.css +19 -19
  172. package/src/legacy-hardware-sim/index.ts +0 -1
  173. package/src/lists/index.ts +0 -1
  174. package/src/lists/lists.module.css +23 -23
  175. package/src/modals/modals.module.css +55 -55
  176. package/src/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.tsx +88 -0
  177. package/src/molecules/CustomizeExpandButton/index.tsx +189 -0
  178. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +10 -6
  179. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +15 -11
  180. package/src/molecules/DeckInfoLabel/deckinfolabel.module.css +42 -0
  181. package/src/molecules/DeckInfoLabel/index.tsx +36 -62
  182. package/src/molecules/DropdownMenu/index.tsx +17 -13
  183. package/src/molecules/InfoScreen/index.tsx +6 -2
  184. package/src/molecules/ReleaseNotes/styles.module.css +15 -15
  185. package/src/molecules/index.ts +2 -1
  186. package/src/nav/SidePanel.module.css +6 -6
  187. package/src/organisms/CommandText/__tests__/CommandText.test.tsx +12 -12
  188. package/src/organisms/CommandText/index.tsx +2 -2
  189. package/src/organisms/CommandText/useCommandTextString/index.ts +2 -2
  190. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +4 -4
  191. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +3 -3
  192. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +2 -4
  193. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts +19 -3
  194. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +19 -10
  195. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +9 -9
  196. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +3 -3
  197. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareName.ts +2 -2
  198. package/src/organisms/DeckLabelSet/index.tsx +1 -3
  199. package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +0 -2
  200. package/src/organisms/FixtureOption/index.tsx +42 -71
  201. package/src/organisms/ProtocolDeck/index.tsx +118 -0
  202. package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +2 -2
  203. package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +1 -1
  204. package/src/organisms/ProtocolTimelineScrubber/utils.ts +3 -3
  205. package/src/organisms/index.ts +1 -0
  206. package/src/primitives/ForeignObject.tsx +20 -61
  207. package/src/primitives/style-props.ts +1 -0
  208. package/src/slotmap/styles.module.css +1 -1
  209. package/src/structure/Pill.module.css +1 -1
  210. package/src/structure/Splash.module.css +1 -1
  211. package/src/structure/index.ts +2 -4
  212. package/src/structure/structure.module.css +11 -11
  213. package/src/styles/colors.module.css +1 -0
  214. package/src/styles/global.css +179 -0
  215. package/src/styles/index.module.css +1 -1
  216. package/src/styles/typography.module.css +1 -0
  217. package/src/testing/utils/renderWithProviders.tsx +3 -6
  218. package/src/tooltips/tooltips.module.css +14 -14
  219. package/vite.config.mts +6 -3
  220. package/lib/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.d.ts +0 -14
  221. package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.d.ts +0 -10
  222. package/lib/hardware-sim/DeckConfigurator/EmptyConfigFixture.d.ts +0 -8
  223. package/lib/hardware-sim/DeckConfigurator/FlexStackerFixture.d.ts +0 -11
  224. package/lib/hardware-sim/DeckConfigurator/HeaterShakerFixture.d.ts +0 -10
  225. package/lib/hardware-sim/DeckConfigurator/MagneticBlockFixture.d.ts +0 -11
  226. package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.d.ts +0 -10
  227. package/lib/hardware-sim/DeckConfigurator/TemperatureModuleFixture.d.ts +0 -10
  228. package/lib/hardware-sim/DeckConfigurator/ThermocyclerFixture.d.ts +0 -10
  229. package/lib/hardware-sim/DeckConfigurator/TrashBinConfigFixture.d.ts +0 -10
  230. package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.d.ts +0 -11
  231. package/lib/hardware-sim/utils.d.ts +0 -3
  232. package/lib/instrument/InstrumentGroup.d.ts +0 -11
  233. package/lib/instrument/InstrumentInfo.d.ts +0 -18
  234. package/lib/legacy-hardware-sim/ModuleItem.d.ts +0 -17
  235. package/lib/lists/TitledList.d.ts +0 -44
  236. package/lib/structure/Card.d.ts +0 -18
  237. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +0 -109
  238. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +0 -28
  239. package/src/hardware-sim/utils.ts +0 -18
  240. package/src/instrument/InstrumentDiagram.stories.tsx +0 -43
  241. package/src/instrument/InstrumentGroup.stories.tsx +0 -89
  242. package/src/instrument/InstrumentGroup.tsx +0 -35
  243. package/src/instrument/InstrumentInfo.tsx +0 -106
  244. package/src/instrument/__tests__/InstrumentInfo.test.tsx +0 -58
  245. package/src/instrument/instrument.module.css +0 -45
  246. package/src/legacy-hardware-sim/ModuleItem.tsx +0 -145
  247. package/src/lists/TitledList.tsx +0 -154
  248. package/src/structure/Card.stories.tsx +0 -29
  249. package/src/structure/Card.tsx +0 -65
  250. /package/lib/atoms/{ListButton/__tests__/ListButtonRadioButton.test.d.ts → AnimationVideo/__tests__/AnimationVideo.test.d.ts} +0 -0
  251. /package/lib/{instrument/__tests__/InstrumentInfo.test.d.ts → atoms/buttons/__tests__/BasicButton.test.d.ts} +0 -0
@@ -1,53 +1,48 @@
1
1
  import {
2
- ABSORBANCE_READER_V1_FIXTURE,
2
+ filterAAByAreaType,
3
3
  FLEX_ROBOT_TYPE,
4
- FLEX_STACKER_FIXTURES,
5
- FLEX_STACKER_V1_FIXTURE,
6
4
  getDeckDefFromRobotType,
7
- HEATERSHAKER_MODULE_V1_FIXTURE,
8
- MAGNETIC_BLOCK_V1_FIXTURE,
9
- SINGLE_SLOT_FIXTURES,
10
- STAGING_AREA_RIGHT_SLOT_FIXTURE,
5
+ replaceFixtureToFakeFixtureAndTransformCutoutFixturesToAA,
11
6
  STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
12
- TEMPERATURE_MODULE_V2_FIXTURE,
13
7
  THERMOCYCLER_MODULE_CUTOUTS,
14
- THERMOCYCLER_V2_FRONT_FIXTURE,
15
- TRASH_BIN_ADAPTER_FIXTURE,
16
- WASTE_CHUTE_ONLY_FIXTURES,
17
- WASTE_CHUTE_STAGING_AREA_FIXTURES,
18
8
  } from '@opentrons/shared-data'
19
9
 
20
10
  import { COLORS } from '../../helix-design-system'
21
- import { SingleSlotFixture } from '../BaseDeck/SingleSlotFixture'
22
11
  import { SlotLabels } from '../Deck'
23
12
  import { RobotCoordinateSpace } from '../RobotCoordinateSpace'
24
- import { AbsorbanceReaderFixture } from './AbsorbanceReaderFixture'
25
- import { EmptyConfigFixture } from './EmptyConfigFixture'
26
- import { FlexStackerFixture } from './FlexStackerFixture'
27
- import { HeaterShakerFixture } from './HeaterShakerFixture'
28
- import { MagneticBlockFixture } from './MagneticBlockFixture'
29
- import { StagingAreaConfigFixture } from './StagingAreaConfigFixture'
30
- import { StaticFixture } from './StaticFixture'
31
- import { TemperatureModuleFixture } from './TemperatureModuleFixture'
32
- import { ThermocyclerFixture } from './ThermocyclerFixture'
33
- import { TrashBinConfigFixture } from './TrashBinConfigFixture'
34
- import { WasteChuteConfigFixture } from './WasteChuteConfigFixture'
13
+ import { AbsorbanceReaderItem } from './AbsorbanceReaderItem'
14
+ import { EmptyConfigItem } from './EmptyConfigItem'
15
+ import { FlexStackerItem } from './FlexStackerItem'
16
+ import { HeaterShakerItem } from './HeaterShakerItem'
17
+ import { MagneticBlockItem } from './MagneticBlockItem'
18
+ import { StagingAreaConfigItem } from './StagingAreaConfigItem'
19
+ import { StaticItem } from './StaticItem'
20
+ import { TemperatureModuleItem } from './TemperatureModuleItem'
21
+ import { ThermocyclerItem } from './ThermocyclerItem'
22
+ import { TrashBinConfigItem } from './TrashBinConfigItem'
23
+ import { WasteChuteConfigFixture } from './WasteChuteConfigItem'
35
24
 
36
25
  import type { ReactNode } from 'react'
37
26
  import type {
38
- CutoutFixtureId,
27
+ AddressableAreaNamesWithFakes,
28
+ CutoutFixtureIdsWithFakes,
39
29
  CutoutId,
40
30
  DeckConfiguration,
31
+ ModuleModel,
41
32
  } from '@opentrons/shared-data'
42
33
 
43
34
  export * from './constants'
44
35
 
45
36
  interface DeckConfiguratorProps {
46
37
  deckConfig: DeckConfiguration
47
- handleClickAdd: (cutoutId: CutoutId) => void
38
+ handleClickAdd: (
39
+ cutoutId: CutoutId,
40
+ addressableAreaId: AddressableAreaNamesWithFakes
41
+ ) => void
48
42
  handleClickRemove: (
49
43
  cutoutId: CutoutId,
50
- cutoutFixtureId: CutoutFixtureId
44
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
45
+ addressableAreaId: AddressableAreaNamesWithFakes
51
46
  ) => void
52
47
  lightFill?: string
53
48
  darkFill?: string
@@ -57,6 +52,7 @@ interface DeckConfiguratorProps {
57
52
  additionalStaticFixtures?: Array<{ location: CutoutId; label: string }>
58
53
  height?: string
59
54
  selectedCutoutId?: CutoutId
55
+ moduleModel?: ModuleModel
60
56
  }
61
57
 
62
58
  export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element {
@@ -67,60 +63,76 @@ export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element {
67
63
  additionalStaticFixtures,
68
64
  children,
69
65
  selectedCutoutId,
70
- lightFill = COLORS.grey35,
71
66
  darkFill = COLORS.black90,
72
67
  editableCutoutIds = deckConfig.map(({ cutoutId }) => cutoutId),
73
- showExpansion = true,
74
68
  height = '455px',
69
+ moduleModel,
75
70
  } = props
71
+
76
72
  const deckDef = getDeckDefFromRobotType(FLEX_ROBOT_TYPE)
77
73
 
78
- const stagingAreaFixtures = deckConfig.filter(
79
- ({ cutoutFixtureId }) => cutoutFixtureId === STAGING_AREA_RIGHT_SLOT_FIXTURE
74
+ const deckConfigWithAA = replaceFixtureToFakeFixtureAndTransformCutoutFixturesToAA(
75
+ deckConfig
80
76
  )
81
- const wasteChuteFixtures = deckConfig.filter(
82
- ({ cutoutFixtureId }) =>
83
- cutoutFixtureId != null &&
84
- WASTE_CHUTE_ONLY_FIXTURES.includes(cutoutFixtureId)
85
- )
86
- const wasteChuteStagingAreaFixtures = deckConfig.filter(
87
- ({ cutoutFixtureId }) =>
88
- cutoutFixtureId != null &&
89
- WASTE_CHUTE_STAGING_AREA_FIXTURES.includes(cutoutFixtureId)
77
+
78
+ const stagingAreaItems = filterAAByAreaType(
79
+ deckConfigWithAA,
80
+ deckDef,
81
+ 'stagingSlot'
90
82
  )
91
- const emptyCutouts = deckConfig.filter(
92
- ({ cutoutFixtureId, cutoutId }) =>
93
- editableCutoutIds.includes(cutoutId) &&
94
- cutoutFixtureId != null &&
95
- SINGLE_SLOT_FIXTURES.includes(cutoutFixtureId)
83
+
84
+ const wasteChuteItems = filterAAByAreaType(
85
+ deckConfigWithAA,
86
+ deckDef,
87
+ 'wasteChute'
96
88
  )
97
- const trashBinFixtures = deckConfig.filter(
98
- ({ cutoutFixtureId }) => cutoutFixtureId === TRASH_BIN_ADAPTER_FIXTURE
89
+ const fakeStagingItems = filterAAByAreaType(
90
+ deckConfigWithAA,
91
+ deckDef,
92
+ 'fakeStagingSlot'
99
93
  )
100
- const thermocyclerFixtures = deckConfig.filter(
101
- ({ cutoutFixtureId }) => cutoutFixtureId === THERMOCYCLER_V2_FRONT_FIXTURE
94
+
95
+ const emptySlotLikeItems = filterAAByAreaType(
96
+ deckConfigWithAA,
97
+ deckDef,
98
+ 'slot'
99
+ ).concat(fakeStagingItems)
100
+
101
+ const trashBinItems = filterAAByAreaType(
102
+ deckConfigWithAA,
103
+ deckDef,
104
+ 'movableTrash'
102
105
  )
103
- const heaterShakerFixtures = deckConfig.filter(
104
- ({ cutoutFixtureId }) => cutoutFixtureId === HEATERSHAKER_MODULE_V1_FIXTURE
106
+ const thermocyclerItems = filterAAByAreaType(
107
+ deckConfigWithAA,
108
+ deckDef,
109
+ 'thermocycler'
105
110
  )
106
- const temperatureModuleFixtures = deckConfig.filter(
107
- ({ cutoutFixtureId }) => cutoutFixtureId === TEMPERATURE_MODULE_V2_FIXTURE
111
+ const heaterShakerItems = filterAAByAreaType(
112
+ deckConfigWithAA,
113
+ deckDef,
114
+ 'heaterShaker'
108
115
  )
109
- const magneticBlockFixtures = deckConfig.filter(({ cutoutFixtureId }) =>
110
- ([
111
- MAGNETIC_BLOCK_V1_FIXTURE,
112
- STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
113
- ] as CutoutFixtureId[]).includes(cutoutFixtureId)
116
+ const temperatureModuleItems = filterAAByAreaType(
117
+ deckConfigWithAA,
118
+ deckDef,
119
+ 'temperatureModule'
114
120
  )
115
- const absorbanceReaderFixtures = deckConfig.filter(
116
- ({ cutoutFixtureId }) => cutoutFixtureId === ABSORBANCE_READER_V1_FIXTURE
121
+ const magneticBlockItems = filterAAByAreaType(
122
+ deckConfigWithAA,
123
+ deckDef,
124
+ 'magneticBlock'
117
125
  )
118
- const magneticBlockStagingAreaFixtures = deckConfig.filter(
119
- ({ cutoutFixtureId }) =>
120
- cutoutFixtureId === STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE
126
+ const absorbanceReaderItems = filterAAByAreaType(
127
+ deckConfigWithAA,
128
+ deckDef,
129
+ 'absorbanceReader'
121
130
  )
122
- const flexStackerFixtures = deckConfig.filter(({ cutoutFixtureId }) =>
123
- FLEX_STACKER_FIXTURES.includes(cutoutFixtureId)
131
+
132
+ const flexStackerItems = filterAAByAreaType(
133
+ deckConfigWithAA,
134
+ deckDef,
135
+ 'flexStacker'
124
136
  )
125
137
 
126
138
  return (
@@ -128,128 +140,72 @@ export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element {
128
140
  height={height}
129
141
  viewBox={`${deckDef.cornerOffsetFromOrigin[0]} ${deckDef.cornerOffsetFromOrigin[1]} ${deckDef.dimensions[0]} ${deckDef.dimensions[1]}`}
130
142
  >
131
- {deckDef.locations.cutouts.map(cutout => (
132
- // give the outside of the base fixture svgs a stroke for extra spacing
133
- <g key={cutout.id} stroke={COLORS.white} strokeWidth="4">
134
- <SingleSlotFixture
135
- data-testid={cutout.id}
136
- cutoutId={cutout.id}
143
+ {stagingAreaItems.map(
144
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
145
+ <StagingAreaConfigItem
146
+ data-testid={cutoutId}
147
+ key={addressableAreaId}
137
148
  deckDefinition={deckDef}
138
- slotClipColor={COLORS.transparent}
139
- fixtureBaseColor={lightFill}
140
- showExpansion={showExpansion}
149
+ handleClickRemove={
150
+ editableCutoutIds.includes(cutoutId)
151
+ ? handleClickRemove
152
+ : undefined
153
+ }
154
+ fixtureLocation={cutoutId}
155
+ cutoutFixtureId={cutoutFixtureId}
156
+ addressableAreaId={addressableAreaId}
157
+ selected={cutoutId === selectedCutoutId}
141
158
  />
142
- </g>
143
- ))}
144
- {stagingAreaFixtures.map(({ cutoutId, cutoutFixtureId }) => (
145
- <StagingAreaConfigFixture
146
- data-testid={cutoutId}
147
- key={cutoutId}
148
- deckDefinition={deckDef}
149
- handleClickRemove={
150
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
151
- }
152
- fixtureLocation={cutoutId}
153
- cutoutFixtureId={cutoutFixtureId}
154
- selected={cutoutId === selectedCutoutId}
155
- />
156
- ))}
157
- {emptyCutouts.map(({ cutoutId }) => (
158
- <EmptyConfigFixture
159
- data-testid={cutoutId}
160
- key={cutoutId}
159
+ )
160
+ )}
161
+ {emptySlotLikeItems.map(({ cutoutId, addressableAreaId }) => (
162
+ <EmptyConfigItem
163
+ data-testid={addressableAreaId}
164
+ editableCutoutIds={editableCutoutIds ?? []}
165
+ key={addressableAreaId}
166
+ addressableAreaId={addressableAreaId}
161
167
  deckDefinition={deckDef}
162
168
  handleClickAdd={handleClickAdd}
163
169
  fixtureLocation={cutoutId}
170
+ moduleModel={moduleModel}
164
171
  />
165
172
  ))}
166
- {wasteChuteFixtures.map(({ cutoutId, cutoutFixtureId }) => (
167
- <WasteChuteConfigFixture
168
- data-testid={cutoutId}
169
- key={cutoutId}
170
- deckDefinition={deckDef}
171
- handleClickRemove={
172
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
173
- }
174
- fixtureLocation={cutoutId}
175
- cutoutFixtureId={cutoutFixtureId}
176
- selected={cutoutId === selectedCutoutId}
177
- />
178
- ))}
179
- {wasteChuteStagingAreaFixtures.map(({ cutoutId, cutoutFixtureId }) => (
180
- <WasteChuteConfigFixture
181
- data-testid={cutoutId}
182
- key={cutoutId}
183
- deckDefinition={deckDef}
184
- handleClickRemove={
185
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
186
- }
187
- fixtureLocation={cutoutId}
188
- cutoutFixtureId={cutoutFixtureId}
189
- selected={cutoutId === selectedCutoutId}
190
- hasStagingAreas
191
- />
192
- ))}
193
- {trashBinFixtures.map(({ cutoutId, cutoutFixtureId }) => (
194
- <TrashBinConfigFixture
195
- data-testid={cutoutId}
196
- key={cutoutId}
197
- deckDefinition={deckDef}
198
- handleClickRemove={
199
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
200
- }
201
- fixtureLocation={cutoutId}
202
- cutoutFixtureId={cutoutFixtureId}
203
- selected={cutoutId === selectedCutoutId}
204
- />
205
- ))}
206
- {temperatureModuleFixtures.map(({ cutoutId, cutoutFixtureId }) => (
207
- <TemperatureModuleFixture
208
- data-testid={cutoutId}
209
- key={cutoutId}
210
- deckDefinition={deckDef}
211
- handleClickRemove={
212
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
213
- }
214
- fixtureLocation={cutoutId}
215
- cutoutFixtureId={cutoutFixtureId}
216
- selected={cutoutId === selectedCutoutId}
217
- />
218
- ))}
219
- {heaterShakerFixtures.map(({ cutoutId, cutoutFixtureId }) => (
220
- <HeaterShakerFixture
221
- data-testid={cutoutId}
222
- key={cutoutId}
223
- deckDefinition={deckDef}
224
- handleClickRemove={
225
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
226
- }
227
- fixtureLocation={cutoutId}
228
- cutoutFixtureId={cutoutFixtureId}
229
- selected={cutoutId === selectedCutoutId}
230
- />
231
- ))}
232
- {magneticBlockFixtures.map(({ cutoutId, cutoutFixtureId }) => (
233
- <MagneticBlockFixture
173
+ {wasteChuteItems.map(
174
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
175
+ <WasteChuteConfigFixture
176
+ data-testid={cutoutId}
177
+ key={addressableAreaId}
178
+ deckDefinition={deckDef}
179
+ handleClickRemove={
180
+ editableCutoutIds.includes(cutoutId)
181
+ ? handleClickRemove
182
+ : undefined
183
+ }
184
+ fixtureLocation={cutoutId}
185
+ cutoutFixtureId={cutoutFixtureId}
186
+ selected={cutoutId === selectedCutoutId}
187
+ />
188
+ )
189
+ )}
190
+ {trashBinItems.map(({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
191
+ <TrashBinConfigItem
234
192
  data-testid={cutoutId}
235
- key={cutoutId}
193
+ key={addressableAreaId}
236
194
  deckDefinition={deckDef}
237
195
  handleClickRemove={
238
196
  editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
239
197
  }
240
198
  fixtureLocation={cutoutId}
241
199
  cutoutFixtureId={cutoutFixtureId}
200
+ addressableAreaId={addressableAreaId}
242
201
  selected={cutoutId === selectedCutoutId}
243
- hasStagingArea={
244
- cutoutFixtureId === STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE
245
- }
246
202
  />
247
203
  ))}
248
- {thermocyclerFixtures.map(({ cutoutId, cutoutFixtureId }) => {
249
- return (
250
- <ThermocyclerFixture
204
+ {temperatureModuleItems.map(
205
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
206
+ <TemperatureModuleItem
251
207
  data-testid={cutoutId}
252
- key={cutoutId}
208
+ key={addressableAreaId}
253
209
  deckDefinition={deckDef}
254
210
  handleClickRemove={
255
211
  editableCutoutIds.includes(cutoutId)
@@ -258,43 +214,117 @@ export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element {
258
214
  }
259
215
  fixtureLocation={cutoutId}
260
216
  cutoutFixtureId={cutoutFixtureId}
261
- selected={
262
- selectedCutoutId != null &&
263
- THERMOCYCLER_MODULE_CUTOUTS.includes(selectedCutoutId) &&
264
- THERMOCYCLER_MODULE_CUTOUTS.includes(cutoutId)
217
+ addressableAreaId={addressableAreaId}
218
+ selected={cutoutId === selectedCutoutId}
219
+ />
220
+ )
221
+ )}
222
+ {heaterShakerItems.map(
223
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
224
+ <HeaterShakerItem
225
+ data-testid={cutoutId}
226
+ key={addressableAreaId}
227
+ deckDefinition={deckDef}
228
+ handleClickRemove={
229
+ editableCutoutIds.includes(cutoutId)
230
+ ? handleClickRemove
231
+ : undefined
265
232
  }
233
+ fixtureLocation={cutoutId}
234
+ cutoutFixtureId={cutoutFixtureId}
235
+ addressableAreaId={addressableAreaId}
236
+ selected={cutoutId === selectedCutoutId}
266
237
  />
267
238
  )
268
- })}
269
- {absorbanceReaderFixtures.map(({ cutoutId, cutoutFixtureId }) => (
270
- <AbsorbanceReaderFixture
271
- data-testid={cutoutId}
272
- key={cutoutId}
273
- deckDefinition={deckDef}
274
- handleClickRemove={
275
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
276
- }
277
- fixtureLocation={cutoutId}
278
- cutoutFixtureId={cutoutFixtureId}
279
- selected={cutoutId === selectedCutoutId}
280
- />
281
- ))}
282
- {flexStackerFixtures.map(({ cutoutId, cutoutFixtureId }) => (
283
- <FlexStackerFixture
284
- data-testid={cutoutId}
285
- key={cutoutId}
286
- deckDefinition={deckDef}
287
- handleClickRemove={
288
- editableCutoutIds.includes(cutoutId) ? handleClickRemove : undefined
289
- }
290
- fixtureLocation={cutoutId}
291
- cutoutFixtureId={cutoutFixtureId}
292
- hasWasteChute={cutoutFixtureId !== FLEX_STACKER_V1_FIXTURE}
293
- selected={cutoutId === selectedCutoutId}
294
- />
295
- ))}
239
+ )}
240
+ {magneticBlockItems.map(
241
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
242
+ <MagneticBlockItem
243
+ data-testid={cutoutId}
244
+ key={addressableAreaId}
245
+ deckDefinition={deckDef}
246
+ handleClickRemove={
247
+ editableCutoutIds.includes(cutoutId)
248
+ ? handleClickRemove
249
+ : undefined
250
+ }
251
+ fixtureLocation={cutoutId}
252
+ cutoutFixtureId={cutoutFixtureId}
253
+ addressableAreaId={addressableAreaId}
254
+ selected={cutoutId === selectedCutoutId}
255
+ hasStagingArea={
256
+ cutoutFixtureId ===
257
+ STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE
258
+ }
259
+ />
260
+ )
261
+ )}
262
+ {thermocyclerItems.map(
263
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => {
264
+ return (
265
+ <ThermocyclerItem
266
+ data-testid={cutoutId}
267
+ key={addressableAreaId}
268
+ deckDefinition={deckDef}
269
+ handleClickRemove={
270
+ editableCutoutIds.includes(cutoutId)
271
+ ? handleClickRemove
272
+ : undefined
273
+ }
274
+ fixtureLocation={cutoutId}
275
+ cutoutFixtureId={cutoutFixtureId}
276
+ addressableAreaId={addressableAreaId}
277
+ selected={
278
+ selectedCutoutId != null &&
279
+ THERMOCYCLER_MODULE_CUTOUTS.includes(selectedCutoutId) &&
280
+ THERMOCYCLER_MODULE_CUTOUTS.includes(cutoutId)
281
+ }
282
+ />
283
+ )
284
+ }
285
+ )}
286
+ {absorbanceReaderItems.map(
287
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
288
+ <AbsorbanceReaderItem
289
+ data-testid={cutoutId}
290
+ key={addressableAreaId}
291
+ deckDefinition={deckDef}
292
+ handleClickRemove={
293
+ editableCutoutIds.includes(cutoutId)
294
+ ? handleClickRemove
295
+ : undefined
296
+ }
297
+ fixtureLocation={cutoutId}
298
+ cutoutFixtureId={cutoutFixtureId}
299
+ addressableAreaId={addressableAreaId}
300
+ selected={cutoutId === selectedCutoutId}
301
+ />
302
+ )
303
+ )}
304
+ {flexStackerItems.map(
305
+ ({ cutoutId, cutoutFixtureId, addressableAreaId }) => (
306
+ <FlexStackerItem
307
+ data-testid={cutoutId}
308
+ key={addressableAreaId}
309
+ deckDefinition={deckDef}
310
+ handleClickRemove={
311
+ editableCutoutIds.includes(cutoutId)
312
+ ? handleClickRemove
313
+ : undefined
314
+ }
315
+ fixtureLocation={cutoutId}
316
+ cutoutFixtureId={cutoutFixtureId}
317
+ hasWasteChute={[
318
+ 'wasteChuteRightAdapterCovered',
319
+ 'wasteChuteRightAdapterNoCover',
320
+ ].includes(cutoutFixtureId)}
321
+ selected={cutoutId === selectedCutoutId}
322
+ addressableAreaId={addressableAreaId}
323
+ />
324
+ )
325
+ )}
296
326
  {additionalStaticFixtures?.map(staticFixture => (
297
- <StaticFixture
327
+ <StaticItem
298
328
  data-testid={staticFixture.location}
299
329
  key={staticFixture.location}
300
330
  deckDefinition={deckDef}
@@ -302,14 +332,14 @@ export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element {
302
332
  fixtureLocation={staticFixture.location}
303
333
  />
304
334
  ))}
335
+ */
305
336
  <SlotLabels
306
337
  robotType={FLEX_ROBOT_TYPE}
307
338
  color={darkFill}
308
339
  show4thColumn={
309
- stagingAreaFixtures.length > 0 ||
310
- wasteChuteStagingAreaFixtures.length > 0 ||
311
- magneticBlockStagingAreaFixtures.length > 0 ||
312
- absorbanceReaderFixtures.length > 0
340
+ stagingAreaItems.length > 0 ||
341
+ absorbanceReaderItems.length > 0 ||
342
+ flexStackerItems.length > 0
313
343
  }
314
344
  />
315
345
  {children}
@@ -0,0 +1,49 @@
1
+ import { getAllDefinitions, getLabwareViewBox } from '@opentrons/shared-data'
2
+
3
+ import { RobotWorkSpace } from '../Deck'
4
+ import { CalibrationBlockRender } from './CalibrationBlockRender'
5
+
6
+ import type { Meta, StoryObj } from '@storybook/react'
7
+
8
+ const LOAD_NAMES = [
9
+ 'opentrons_calibrationblock_short_side_left',
10
+ 'opentrons_calibrationblock_short_side_right',
11
+ ]
12
+ const DEFS_BY_URI = Object.fromEntries(
13
+ Object.entries(getAllDefinitions()).filter(([uri, def]) =>
14
+ LOAD_NAMES.includes(def.parameters.loadName)
15
+ )
16
+ )
17
+
18
+ const meta: Meta<typeof CalibrationBlockRender> = {
19
+ title: 'Library/Molecules/Simulation/CalibrationBlockRender',
20
+ component: CalibrationBlockRender,
21
+ decorators: [
22
+ (Story, context) => {
23
+ const { labwareDef } = context.args
24
+ const { minX, minY, xDimension, yDimension } = getLabwareViewBox(
25
+ labwareDef
26
+ )
27
+ const viewBox = `${minX} ${minY} ${xDimension} ${yDimension}`
28
+
29
+ return (
30
+ <RobotWorkSpace viewBox={viewBox}>{() => <Story />}</RobotWorkSpace>
31
+ )
32
+ },
33
+ ],
34
+ }
35
+
36
+ export default meta
37
+ type Story = StoryObj<typeof meta>
38
+
39
+ export const Primary: Story = {
40
+ args: {
41
+ labwareDef: Object.keys(DEFS_BY_URI)[0],
42
+ },
43
+ argTypes: {
44
+ labwareDef: {
45
+ options: Object.keys(DEFS_BY_URI),
46
+ mapping: DEFS_BY_URI,
47
+ },
48
+ },
49
+ }