@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,61 +1,58 @@
1
+ import { useTranslation } from 'react-i18next'
2
+
3
+ import { StyledText } from '../../atoms/StyledText/StyledText'
1
4
  import { COLORS } from '../../helix-design-system'
2
5
  import { Icon } from '../../icons'
3
- import { Btn, Text } from '../../primitives'
6
+ import { Btn } from '../../primitives'
4
7
  import { TYPOGRAPHY } from '../../ui-style-constants'
5
8
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
6
9
  import {
7
- COLUMN_3_X_ADJUSTMENT,
10
+ COLUMN_DEFAULT_X_ADJUSTMENT,
8
11
  CONFIG_STYLE_EDITABLE,
9
12
  CONFIG_STYLE_READ_ONLY,
10
13
  CONFIG_STYLE_SELECTED,
11
14
  FIXTURE_HEIGHT,
12
- STAGING_AREA_FIXTURE_WIDTH,
15
+ LARGE_SINGLE_ITEM_SLOT_WIDTH,
13
16
  Y_ADJUSTMENT,
14
17
  } from './constants'
15
18
 
16
19
  import type {
17
- CutoutFixtureId,
20
+ AddressableAreaNamesWithFakes,
21
+ CutoutFixtureIdsWithFakes,
18
22
  CutoutId,
19
23
  DeckDefinition,
20
24
  } from '@opentrons/shared-data'
21
25
 
22
- interface FlexStackerFixtureProps {
26
+ interface AbsorbanceReaderItemProps {
23
27
  deckDefinition: DeckDefinition
24
28
  fixtureLocation: CutoutId
25
- cutoutFixtureId: CutoutFixtureId
26
- hasWasteChute: boolean
29
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
30
+ addressableAreaId: AddressableAreaNamesWithFakes
27
31
  handleClickRemove?: (
28
32
  fixtureLocation: CutoutId,
29
- cutoutFixtureId: CutoutFixtureId
33
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
34
+ addressableAreaId: AddressableAreaNamesWithFakes
30
35
  ) => void
31
36
  selected?: boolean
32
37
  }
33
38
 
34
- const FLEX_STACKER_FIXTURE_DISPLAY_NAME = 'Stacker'
35
- const FLEX_STACKER_WASTE_CHUTE_DISPLAY_NAME = 'Stacker + Waste chute'
36
- const FLEX_STACKER_MAG_BLOCK_DISPLAY_NAME = 'Stacker + Mag Block'
37
-
38
- export function FlexStackerFixture(
39
- props: FlexStackerFixtureProps
39
+ export function AbsorbanceReaderItem(
40
+ props: AbsorbanceReaderItemProps
40
41
  ): JSX.Element {
42
+ const { t } = useTranslation('deck_configuration')
43
+
41
44
  const {
42
45
  deckDefinition,
43
46
  handleClickRemove,
44
47
  fixtureLocation,
45
48
  cutoutFixtureId,
46
- hasWasteChute,
49
+ addressableAreaId,
47
50
  selected = false,
48
51
  } = props
49
52
 
50
53
  const cutoutDef = deckDefinition.locations.cutouts.find(
51
54
  cutout => cutout.id === fixtureLocation
52
55
  )
53
- let displayName = FLEX_STACKER_FIXTURE_DISPLAY_NAME
54
- if (hasWasteChute) {
55
- displayName = FLEX_STACKER_WASTE_CHUTE_DISPLAY_NAME
56
- } else if (cutoutFixtureId === 'flexStackerModuleV1WithMagneticBlockV1') {
57
- displayName = FLEX_STACKER_MAG_BLOCK_DISPLAY_NAME
58
- }
59
56
 
60
57
  /**
61
58
  * deck definition cutout position is the position of the single slot located within that cutout
@@ -64,14 +61,19 @@ export function FlexStackerFixture(
64
61
  */
65
62
  const [xSlotPosition = 0, ySlotPosition = 0] = cutoutDef?.position ?? []
66
63
 
67
- const x = xSlotPosition + COLUMN_3_X_ADJUSTMENT
64
+ const x = xSlotPosition + COLUMN_DEFAULT_X_ADJUSTMENT
68
65
 
69
66
  const y = ySlotPosition + Y_ADJUSTMENT
70
67
 
71
68
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
69
+ const handleRemoveClick = (): void => {
70
+ if (handleClickRemove != null) {
71
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
72
+ }
73
+ }
72
74
  return (
73
75
  <RobotCoordsForeignObject
74
- width={STAGING_AREA_FIXTURE_WIDTH}
76
+ width={LARGE_SINGLE_ITEM_SLOT_WIDTH}
75
77
  height={FIXTURE_HEIGHT}
76
78
  x={x}
77
79
  y={y}
@@ -81,15 +83,16 @@ export function FlexStackerFixture(
81
83
  <Btn
82
84
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
83
85
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
84
- onClick={
85
- handleClickRemove != null
86
- ? () => {
87
- handleClickRemove(fixtureLocation, cutoutFixtureId)
88
- }
89
- : () => {}
90
- }
86
+ onClick={handleRemoveClick}
87
+ height="100%"
91
88
  >
92
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>{displayName}</Text>
89
+ <StyledText
90
+ oddStyle="smallBodyTextSemiBold"
91
+ desktopStyle="bodyDefaultSemiBold"
92
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
93
+ >
94
+ {t('absorbance')}
95
+ </StyledText>
93
96
  {handleClickRemove != null ? (
94
97
  <Icon name="remove" color={COLORS.white} size="2rem" />
95
98
  ) : null}
@@ -1,39 +1,67 @@
1
1
  import { css } from 'styled-components'
2
2
 
3
+ import {
4
+ getAALocationForCutoutAndFixtureId,
5
+ isModuleAllowedOnAA,
6
+ SINGLE_LEFT_CUTOUTS,
7
+ } from '@opentrons/shared-data'
8
+
3
9
  import { BORDERS, COLORS } from '../../helix-design-system'
4
10
  import { Icon } from '../../icons'
5
11
  import { Btn } from '../../primitives'
6
- import { ALIGN_CENTER, DISPLAY_FLEX, JUSTIFY_CENTER } from '../../styles'
12
+ import {
13
+ ALIGN_CENTER,
14
+ DISPLAY_FLEX,
15
+ JUSTIFY_CENTER,
16
+ SPACING_4,
17
+ } from '../../styles'
7
18
  import { RESPONSIVENESS } from '../../ui-style-constants'
8
19
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
9
20
  import {
10
21
  COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH,
11
22
  COLUMN_1_X_ADJUSTMENT,
12
- COLUMN_2_SINGLE_SLOT_FIXTURE_WIDTH,
13
- COLUMN_2_X_ADJUSTMENT,
14
- COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH,
15
- COLUMN_3_X_ADJUSTMENT,
23
+ COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH,
24
+ COLUMN_DEFAULT_X_ADJUSTMENT,
16
25
  FIXTURE_HEIGHT,
17
26
  Y_ADJUSTMENT,
18
27
  } from './constants'
19
28
 
20
- import type { CutoutId, DeckDefinition } from '@opentrons/shared-data'
29
+ import type {
30
+ AddressableAreaNamesWithFakes,
31
+ CutoutId,
32
+ DeckDefinition,
33
+ ModuleModel,
34
+ } from '@opentrons/shared-data'
21
35
 
22
- interface EmptyConfigFixtureProps {
36
+ interface EmptyConfigItemProps {
23
37
  deckDefinition: DeckDefinition
24
38
  fixtureLocation: CutoutId
25
- handleClickAdd: (fixtureLocation: CutoutId) => void
39
+ addressableAreaId: AddressableAreaNamesWithFakes
40
+ editableCutoutIds: CutoutId[]
41
+ moduleModel?: ModuleModel
42
+ handleClickAdd: (
43
+ fixtureLocation: CutoutId,
44
+ addressableArea: AddressableAreaNamesWithFakes
45
+ ) => void
26
46
  }
27
47
 
28
- export function EmptyConfigFixture(
29
- props: EmptyConfigFixtureProps
30
- ): JSX.Element {
31
- const { deckDefinition, handleClickAdd, fixtureLocation } = props
48
+ export function EmptyConfigItem(props: EmptyConfigItemProps): JSX.Element {
49
+ const {
50
+ deckDefinition,
51
+ handleClickAdd,
52
+ fixtureLocation,
53
+ addressableAreaId,
54
+ editableCutoutIds,
55
+ moduleModel,
56
+ } = props
32
57
 
33
58
  const standardSlotCutout = deckDefinition.locations.cutouts.find(
34
59
  cutout => cutout.id === fixtureLocation
35
60
  )
36
61
 
62
+ const isAllowedOnSlot = moduleModel
63
+ ? isModuleAllowedOnAA(fixtureLocation, addressableAreaId, moduleModel)
64
+ : true
37
65
  /**
38
66
  * deck definition cutout position is the position of the single slot located within that cutout
39
67
  * so, to get the position of the cutout itself we must add an adjustment to the slot position
@@ -41,37 +69,25 @@ export function EmptyConfigFixture(
41
69
  */
42
70
  const [xSlotPosition = 0, ySlotPosition = 0] =
43
71
  standardSlotCutout?.position ?? []
44
- let x = xSlotPosition
45
- let width = 0
46
- switch (fixtureLocation) {
47
- case 'cutoutA1':
48
- case 'cutoutB1':
49
- case 'cutoutC1':
50
- case 'cutoutD1': {
51
- x = xSlotPosition + COLUMN_1_X_ADJUSTMENT
52
- width = COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH
53
- break
54
- }
55
- case 'cutoutA2':
56
- case 'cutoutB2':
57
- case 'cutoutC2':
58
- case 'cutoutD2': {
59
- x = xSlotPosition + COLUMN_2_X_ADJUSTMENT
60
- width = COLUMN_2_SINGLE_SLOT_FIXTURE_WIDTH
61
- break
62
- }
63
- case 'cutoutA3':
64
- case 'cutoutB3':
65
- case 'cutoutC3':
66
- case 'cutoutD3': {
67
- x = xSlotPosition + COLUMN_3_X_ADJUSTMENT
68
- width = COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH
69
- break
70
- }
71
- }
72
+ const offsetVector = getAALocationForCutoutAndFixtureId(
73
+ addressableAreaId,
74
+ deckDefinition
75
+ )
72
76
 
77
+ const x =
78
+ xSlotPosition +
79
+ (SINGLE_LEFT_CUTOUTS.includes(fixtureLocation)
80
+ ? COLUMN_1_X_ADJUSTMENT
81
+ : COLUMN_DEFAULT_X_ADJUSTMENT) +
82
+ offsetVector[0]
83
+ const width = SINGLE_LEFT_CUTOUTS.includes(fixtureLocation)
84
+ ? COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH
85
+ : COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH
73
86
  const y = ySlotPosition + Y_ADJUSTMENT
74
87
 
88
+ const disableButton =
89
+ !editableCutoutIds.includes(fixtureLocation) || !isAllowedOnSlot
90
+
75
91
  return (
76
92
  <RobotCoordsForeignObject
77
93
  width={width}
@@ -84,11 +100,15 @@ export function EmptyConfigFixture(
84
100
  <Btn
85
101
  css={EMPTY_CONFIG_STYLE}
86
102
  onClick={() => {
87
- handleClickAdd(fixtureLocation)
103
+ handleClickAdd(fixtureLocation, addressableAreaId)
88
104
  }}
89
- data-testid={fixtureLocation}
105
+ height="100%"
106
+ data-testid={addressableAreaId}
107
+ disabled={disableButton}
90
108
  >
91
- <Icon name="add" color={COLORS.blue50} size="2rem" />
109
+ {!disableButton && (
110
+ <Icon name="add-circle" color={COLORS.blue50} size={SPACING_4} />
111
+ )}
92
112
  </Btn>
93
113
  </RobotCoordsForeignObject>
94
114
  )
@@ -99,7 +119,7 @@ const EMPTY_CONFIG_STYLE = css`
99
119
  align-items: ${ALIGN_CENTER};
100
120
  justify-content: ${JUSTIFY_CENTER};
101
121
  background-color: ${COLORS.blue30};
102
- border: 3px dashed ${COLORS.blue50};
122
+ border: 4px dashed ${COLORS.blue50};
103
123
  border-radius: ${BORDERS.borderRadius4};
104
124
  width: 100%;
105
125
 
@@ -121,6 +141,14 @@ const EMPTY_CONFIG_STYLE = css`
121
141
  background-color: ${COLORS.blue35};
122
142
  }
123
143
 
144
+ &:disabled,
145
+ &.disabled {
146
+ background-color: ${COLORS.grey35};
147
+ color: ${COLORS.grey35};
148
+ box-shadow: none;
149
+ border-color: transparent;
150
+ }
151
+
124
152
  &:focus-visible {
125
153
  border: 3px solid ${COLORS.blue50};
126
154
  background-color: ${COLORS.blue35};
@@ -1,51 +1,64 @@
1
+ import { useTranslation } from 'react-i18next'
2
+
3
+ import { getAALocationForCutoutAndFixtureId } from '@opentrons/shared-data'
4
+
5
+ import { StyledText } from '../../atoms/StyledText/StyledText'
1
6
  import { COLORS } from '../../helix-design-system'
2
7
  import { Icon } from '../../icons'
3
- import { Btn, Text } from '../../primitives'
8
+ import { Btn } from '../../primitives'
4
9
  import { TYPOGRAPHY } from '../../ui-style-constants'
5
10
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
6
11
  import {
7
- COLUMN_3_X_ADJUSTMENT,
12
+ COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH,
8
13
  CONFIG_STYLE_EDITABLE,
9
14
  CONFIG_STYLE_READ_ONLY,
10
15
  CONFIG_STYLE_SELECTED,
11
16
  FIXTURE_HEIGHT,
12
- STAGING_AREA_FIXTURE_WIDTH,
17
+ STACKER_X_ADJUSTMENT,
13
18
  Y_ADJUSTMENT,
14
19
  } from './constants'
15
20
 
16
21
  import type {
17
- CutoutFixtureId,
22
+ AddressableAreaNamesWithFakes,
23
+ CutoutFixtureIdsWithFakes,
18
24
  CutoutId,
25
+ DeckCutout,
19
26
  DeckDefinition,
20
27
  } from '@opentrons/shared-data'
21
28
 
22
- interface AbsorbanceReaderFixtureProps {
29
+ interface FlexStackerItemProps {
23
30
  deckDefinition: DeckDefinition
24
31
  fixtureLocation: CutoutId
25
- cutoutFixtureId: CutoutFixtureId
32
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
33
+ addressableAreaId: AddressableAreaNamesWithFakes
34
+ hasWasteChute: boolean
26
35
  handleClickRemove?: (
27
36
  fixtureLocation: CutoutId,
28
- cutoutFixtureId: CutoutFixtureId
37
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
38
+ addressableAreaId: AddressableAreaNamesWithFakes
29
39
  ) => void
30
40
  selected?: boolean
31
41
  }
32
42
 
33
- const ABSORBANCE_READER_FIXTURE_DISPLAY_NAME = 'Absorbance'
34
-
35
- export function AbsorbanceReaderFixture(
36
- props: AbsorbanceReaderFixtureProps
37
- ): JSX.Element {
43
+ export function FlexStackerItem(props: FlexStackerItemProps): JSX.Element {
38
44
  const {
39
45
  deckDefinition,
40
46
  handleClickRemove,
41
47
  fixtureLocation,
42
48
  cutoutFixtureId,
49
+ hasWasteChute,
50
+ addressableAreaId,
43
51
  selected = false,
44
52
  } = props
45
53
 
54
+ const { t } = useTranslation('deck_configuration')
46
55
  const cutoutDef = deckDefinition.locations.cutouts.find(
47
- cutout => cutout.id === fixtureLocation
56
+ (cutout: DeckCutout) => cutout.id === fixtureLocation
48
57
  )
58
+ let displayName = t('flex_stacker_display_name')
59
+ if (hasWasteChute) {
60
+ displayName = t('flex_stacker_waste_chute_display_name')
61
+ }
49
62
 
50
63
  /**
51
64
  * deck definition cutout position is the position of the single slot located within that cutout
@@ -53,15 +66,22 @@ export function AbsorbanceReaderFixture(
53
66
  * the adjustment for x is different for right side/left side
54
67
  */
55
68
  const [xSlotPosition = 0, ySlotPosition = 0] = cutoutDef?.position ?? []
56
-
57
- const x = xSlotPosition + COLUMN_3_X_ADJUSTMENT
58
-
69
+ const offsetVector = getAALocationForCutoutAndFixtureId(
70
+ addressableAreaId,
71
+ deckDefinition
72
+ )
59
73
  const y = ySlotPosition + Y_ADJUSTMENT
74
+ const x = xSlotPosition + offsetVector[0] + STACKER_X_ADJUSTMENT
60
75
 
61
76
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
77
+ const handleRemoveClick = (): void => {
78
+ if (handleClickRemove != null) {
79
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
80
+ }
81
+ }
62
82
  return (
63
83
  <RobotCoordsForeignObject
64
- width={STAGING_AREA_FIXTURE_WIDTH}
84
+ width={COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH}
65
85
  height={FIXTURE_HEIGHT}
66
86
  x={x}
67
87
  y={y}
@@ -71,17 +91,16 @@ export function AbsorbanceReaderFixture(
71
91
  <Btn
72
92
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
73
93
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
74
- onClick={
75
- handleClickRemove != null
76
- ? () => {
77
- handleClickRemove(fixtureLocation, cutoutFixtureId)
78
- }
79
- : () => {}
80
- }
94
+ onClick={handleRemoveClick}
95
+ height="100%"
81
96
  >
82
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>
83
- {ABSORBANCE_READER_FIXTURE_DISPLAY_NAME}
84
- </Text>
97
+ <StyledText
98
+ oddStyle="smallBodyTextSemiBold"
99
+ desktopStyle="bodyDefaultSemiBold"
100
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
101
+ >
102
+ {displayName}
103
+ </StyledText>
85
104
  {handleClickRemove != null ? (
86
105
  <Icon name="remove" color={COLORS.white} size="2rem" />
87
106
  ) : null}
@@ -1,12 +1,18 @@
1
+ import { useTranslation } from 'react-i18next'
2
+
3
+ import { SINGLE_LEFT_CUTOUTS } from '@opentrons/shared-data'
4
+
5
+ import { StyledText } from '../../atoms/StyledText/StyledText'
1
6
  import { COLORS } from '../../helix-design-system'
2
7
  import { Icon } from '../../icons'
3
- import { Btn, Text } from '../../primitives'
8
+ import { Btn } from '../../primitives'
4
9
  import { TYPOGRAPHY } from '../../ui-style-constants'
5
10
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
6
11
  import {
12
+ COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH,
7
13
  COLUMN_1_X_ADJUSTMENT,
8
- COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH,
9
- COLUMN_3_X_ADJUSTMENT,
14
+ COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH,
15
+ COLUMN_DEFAULT_X_ADJUSTMENT,
10
16
  CONFIG_STYLE_EDITABLE,
11
17
  CONFIG_STYLE_READ_ONLY,
12
18
  CONFIG_STYLE_SELECTED,
@@ -15,34 +21,36 @@ import {
15
21
  } from './constants'
16
22
 
17
23
  import type {
18
- CutoutFixtureId,
24
+ AddressableAreaNamesWithFakes,
25
+ CutoutFixtureIdsWithFakes,
19
26
  CutoutId,
20
27
  DeckDefinition,
21
28
  } from '@opentrons/shared-data'
22
29
 
23
30
  // TODO(BC, 2024-03-21): This component is almost identical to TemperatureModuleFixture, consider consolidating?
24
31
 
25
- interface HeaterShakerFixtureProps {
32
+ interface HeaterShakerItemProps {
26
33
  deckDefinition: DeckDefinition
27
34
  fixtureLocation: CutoutId
28
- cutoutFixtureId: CutoutFixtureId
35
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
36
+ addressableAreaId: AddressableAreaNamesWithFakes
29
37
  handleClickRemove?: (
30
38
  fixtureLocation: CutoutId,
31
- cutoutFixtureId: CutoutFixtureId
39
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
40
+ addressableAreaId: AddressableAreaNamesWithFakes
32
41
  ) => void
33
42
  selected?: boolean
34
43
  }
35
44
 
36
- const HEATER_SHAKER_MODULE_FIXTURE_DISPLAY_NAME = 'Heater-Shaker'
45
+ export function HeaterShakerItem(props: HeaterShakerItemProps): JSX.Element {
46
+ const { t } = useTranslation('deck_configuration')
37
47
 
38
- export function HeaterShakerFixture(
39
- props: HeaterShakerFixtureProps
40
- ): JSX.Element {
41
48
  const {
42
49
  deckDefinition,
43
50
  handleClickRemove,
44
51
  fixtureLocation,
45
52
  cutoutFixtureId,
53
+ addressableAreaId,
46
54
  selected = false,
47
55
  } = props
48
56
 
@@ -57,22 +65,27 @@ export function HeaterShakerFixture(
57
65
  */
58
66
  const [xSlotPosition = 0, ySlotPosition = 0] = cutoutDef?.position ?? []
59
67
 
60
- const isColumnOne =
61
- fixtureLocation === 'cutoutA1' ||
62
- fixtureLocation === 'cutoutB1' ||
63
- fixtureLocation === 'cutoutC1' ||
64
- fixtureLocation === 'cutoutD1'
68
+ const isColumnOne = SINGLE_LEFT_CUTOUTS.includes(fixtureLocation)
65
69
  const xAdjustment = isColumnOne
66
70
  ? COLUMN_1_X_ADJUSTMENT
67
- : COLUMN_3_X_ADJUSTMENT
71
+ : COLUMN_DEFAULT_X_ADJUSTMENT
68
72
  const x = xSlotPosition + xAdjustment
69
73
 
70
74
  const y = ySlotPosition + Y_ADJUSTMENT
71
75
 
72
76
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
77
+ const handleRemoveClick = (): void => {
78
+ if (handleClickRemove != null) {
79
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
80
+ }
81
+ }
73
82
  return (
74
83
  <RobotCoordsForeignObject
75
- width={COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH}
84
+ width={
85
+ isColumnOne
86
+ ? COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH
87
+ : COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH
88
+ }
76
89
  height={FIXTURE_HEIGHT}
77
90
  x={x}
78
91
  y={y}
@@ -82,17 +95,16 @@ export function HeaterShakerFixture(
82
95
  <Btn
83
96
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
84
97
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
85
- onClick={
86
- handleClickRemove != null
87
- ? () => {
88
- handleClickRemove(fixtureLocation, cutoutFixtureId)
89
- }
90
- : () => {}
91
- }
98
+ onClick={handleRemoveClick}
99
+ height="100%"
92
100
  >
93
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>
94
- {HEATER_SHAKER_MODULE_FIXTURE_DISPLAY_NAME}
95
- </Text>
101
+ <StyledText
102
+ oddStyle="smallBodyTextSemiBold"
103
+ desktopStyle="bodyDefaultSemiBold"
104
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
105
+ >
106
+ {t('heater_Shaker')}
107
+ </StyledText>
96
108
  {handleClickRemove != null ? (
97
109
  <Icon name="remove" color={COLORS.white} size="2rem" />
98
110
  ) : null}