@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,55 @@
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 {
7
12
  COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH,
8
13
  COLUMN_1_X_ADJUSTMENT,
9
- COLUMN_2_SINGLE_SLOT_FIXTURE_WIDTH,
10
- COLUMN_2_X_ADJUSTMENT,
11
- COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH,
12
- COLUMN_3_X_ADJUSTMENT,
14
+ COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH,
15
+ COLUMN_DEFAULT_X_ADJUSTMENT,
13
16
  CONFIG_STYLE_EDITABLE,
14
17
  CONFIG_STYLE_READ_ONLY,
15
18
  CONFIG_STYLE_SELECTED,
16
19
  FIXTURE_HEIGHT,
17
- STAGING_AREA_FIXTURE_WIDTH,
18
20
  Y_ADJUSTMENT,
19
21
  } from './constants'
20
22
 
21
23
  import type {
22
- CutoutFixtureId,
24
+ AddressableAreaNamesWithFakes,
25
+ CutoutFixtureIdsWithFakes,
23
26
  CutoutId,
24
27
  DeckDefinition,
25
28
  } from '@opentrons/shared-data'
26
29
 
27
- interface MagneticBlockFixtureProps {
30
+ interface MagneticBlockItemProps {
28
31
  deckDefinition: DeckDefinition
29
32
  fixtureLocation: CutoutId
30
- cutoutFixtureId: CutoutFixtureId
33
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
34
+ addressableAreaId: AddressableAreaNamesWithFakes
31
35
  handleClickRemove?: (
32
36
  fixtureLocation: CutoutId,
33
- cutoutFixtureId: CutoutFixtureId
37
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
38
+ addressableAreaId: AddressableAreaNamesWithFakes
34
39
  ) => void
35
40
  hasStagingArea?: boolean
36
41
  selected?: boolean
37
42
  }
38
43
 
39
- const MAGNETIC_BLOCK_FIXTURE_DISPLAY_NAME = 'Mag Block'
40
- const STAGING_AREA_WITH_MAGNETIC_BLOCK_DISPLAY_NAME = 'Mag + staging'
44
+ export function MagneticBlockItem(props: MagneticBlockItemProps): JSX.Element {
45
+ const { t } = useTranslation('deck_configuration')
41
46
 
42
- export function MagneticBlockFixture(
43
- props: MagneticBlockFixtureProps
44
- ): JSX.Element {
45
47
  const {
46
48
  deckDefinition,
47
49
  fixtureLocation,
48
50
  handleClickRemove,
49
51
  cutoutFixtureId,
50
- hasStagingArea,
52
+ addressableAreaId,
51
53
  selected = false,
52
54
  } = props
53
55
 
@@ -62,44 +64,23 @@ export function MagneticBlockFixture(
62
64
  */
63
65
  const [xSlotPosition = 0, ySlotPosition = 0] =
64
66
  standardSlotCutout?.position ?? []
65
- let x = xSlotPosition
66
- let width = 0
67
- let displayName = hasStagingArea
68
- ? STAGING_AREA_WITH_MAGNETIC_BLOCK_DISPLAY_NAME
69
- : MAGNETIC_BLOCK_FIXTURE_DISPLAY_NAME
70
- switch (fixtureLocation) {
71
- case 'cutoutA1':
72
- case 'cutoutB1':
73
- case 'cutoutC1':
74
- case 'cutoutD1': {
75
- x = xSlotPosition + COLUMN_1_X_ADJUSTMENT
76
- width = COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH
77
- break
78
- }
79
- case 'cutoutA2':
80
- case 'cutoutB2':
81
- case 'cutoutC2':
82
- case 'cutoutD2': {
83
- x = xSlotPosition + COLUMN_2_X_ADJUSTMENT
84
- width = COLUMN_2_SINGLE_SLOT_FIXTURE_WIDTH
85
- displayName = 'Mag'
86
- break
87
- }
88
- case 'cutoutA3':
89
- case 'cutoutB3':
90
- case 'cutoutC3':
91
- case 'cutoutD3': {
92
- x = xSlotPosition + COLUMN_3_X_ADJUSTMENT
93
- width = hasStagingArea
94
- ? STAGING_AREA_FIXTURE_WIDTH
95
- : COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH
96
- break
97
- }
98
- }
67
+ const x =
68
+ xSlotPosition +
69
+ (SINGLE_LEFT_CUTOUTS.includes(fixtureLocation)
70
+ ? COLUMN_1_X_ADJUSTMENT
71
+ : COLUMN_DEFAULT_X_ADJUSTMENT)
72
+ const width = SINGLE_LEFT_CUTOUTS.includes(fixtureLocation)
73
+ ? COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH
74
+ : COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH
99
75
 
100
76
  const y = ySlotPosition + Y_ADJUSTMENT
101
77
 
102
78
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
79
+ const handleRemoveClick = (): void => {
80
+ if (handleClickRemove != null) {
81
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
82
+ }
83
+ }
103
84
  return (
104
85
  <RobotCoordsForeignObject
105
86
  width={width}
@@ -112,15 +93,17 @@ export function MagneticBlockFixture(
112
93
  <Btn
113
94
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
114
95
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
115
- onClick={
116
- handleClickRemove != null
117
- ? () => {
118
- handleClickRemove(fixtureLocation, cutoutFixtureId)
119
- }
120
- : () => {}
121
- }
96
+ onClick={handleRemoveClick}
97
+ height="100%"
98
+ data-testid={addressableAreaId}
122
99
  >
123
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>{displayName}</Text>
100
+ <StyledText
101
+ oddStyle="smallBodyTextSemiBold"
102
+ desktopStyle="bodyDefaultSemiBold"
103
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
104
+ >
105
+ {t('mag_block')}
106
+ </StyledText>
124
107
  {handleClickRemove != null ? (
125
108
  <Icon name="remove" color={COLORS.white} size="2rem" />
126
109
  ) : null}
@@ -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,
13
+ COLUMN_DEFAULT_X_ADJUSTMENT,
8
14
  CONFIG_STYLE_EDITABLE,
9
15
  CONFIG_STYLE_READ_ONLY,
10
16
  CONFIG_STYLE_SELECTED,
11
17
  FIXTURE_HEIGHT,
12
- STAGING_AREA_DISPLAY_NAME,
13
- STAGING_AREA_FIXTURE_WIDTH,
14
18
  Y_ADJUSTMENT,
15
19
  } from './constants'
16
20
 
17
21
  import type {
18
- CutoutFixtureId,
22
+ AddressableAreaNamesWithFakes,
23
+ CutoutFixtureIdsWithFakes,
19
24
  CutoutId,
20
25
  DeckDefinition,
21
26
  } from '@opentrons/shared-data'
22
27
 
23
- interface StagingAreaConfigFixtureProps {
28
+ interface StagingAreaConfigItemProps {
24
29
  deckDefinition: DeckDefinition
25
30
  fixtureLocation: CutoutId
26
- cutoutFixtureId: CutoutFixtureId
31
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
32
+ addressableAreaId: AddressableAreaNamesWithFakes
27
33
  handleClickRemove?: (
28
34
  fixtureLocation: CutoutId,
29
- cutoutFixtureId: CutoutFixtureId
35
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
36
+ addressableAreaId: AddressableAreaNamesWithFakes
30
37
  ) => void
31
38
  selected?: boolean
32
39
  }
33
40
 
34
- export function StagingAreaConfigFixture(
35
- props: StagingAreaConfigFixtureProps
41
+ export function StagingAreaConfigItem(
42
+ props: StagingAreaConfigItemProps
36
43
  ): JSX.Element {
44
+ const { t } = useTranslation('deck_configuration')
45
+
37
46
  const {
38
47
  deckDefinition,
39
48
  handleClickRemove,
40
49
  fixtureLocation,
41
50
  cutoutFixtureId,
51
+ addressableAreaId,
42
52
  selected = false,
43
53
  } = props
44
54
 
45
55
  const stagingAreaCutout = deckDefinition.locations.cutouts.find(
46
56
  cutout => cutout.id === fixtureLocation
47
57
  )
48
-
58
+ const offsetVector = getAALocationForCutoutAndFixtureId(
59
+ addressableAreaId,
60
+ deckDefinition
61
+ )
49
62
  /**
50
63
  * deck definition cutout position is the position of the single slot located within that cutout
51
64
  * so, to get the position of the cutout itself we must add an adjustment to the slot position
@@ -53,13 +66,18 @@ export function StagingAreaConfigFixture(
53
66
  const [xSlotPosition = 0, ySlotPosition = 0] =
54
67
  stagingAreaCutout?.position ?? []
55
68
 
56
- const x = xSlotPosition + COLUMN_3_X_ADJUSTMENT
69
+ const x = xSlotPosition + COLUMN_DEFAULT_X_ADJUSTMENT + offsetVector[0]
57
70
  const y = ySlotPosition + Y_ADJUSTMENT
58
71
 
59
72
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
73
+ const handleRemoveClick = (): void => {
74
+ if (handleClickRemove != null) {
75
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
76
+ }
77
+ }
60
78
  return (
61
79
  <RobotCoordsForeignObject
62
- width={STAGING_AREA_FIXTURE_WIDTH}
80
+ width={COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH}
63
81
  height={FIXTURE_HEIGHT}
64
82
  x={x}
65
83
  y={y}
@@ -69,17 +87,17 @@ export function StagingAreaConfigFixture(
69
87
  <Btn
70
88
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
71
89
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
72
- onClick={
73
- handleClickRemove != null
74
- ? () => {
75
- handleClickRemove(fixtureLocation, cutoutFixtureId)
76
- }
77
- : () => {}
78
- }
90
+ onClick={handleRemoveClick}
91
+ height="100%"
79
92
  >
80
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>
81
- {STAGING_AREA_DISPLAY_NAME}
82
- </Text>
93
+ <StyledText
94
+ oddStyle="smallBodyTextSemiBold"
95
+ desktopStyle="bodyDefaultSemiBold"
96
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
97
+ >
98
+ {t('staging_area')}
99
+ </StyledText>
100
+
83
101
  {handleClickRemove != null ? (
84
102
  <Icon name="remove" color={COLORS.white} size="2rem" />
85
103
  ) : null}
@@ -1,9 +1,10 @@
1
- import { Btn, Text } from '../../primitives'
1
+ import { StyledText } from '../../atoms/StyledText/StyledText'
2
+ import { Box } from '../../primitives'
2
3
  import { TYPOGRAPHY } from '../../ui-style-constants'
3
4
  import { RobotCoordsForeignObject } from '../Deck/RobotCoordsForeignObject'
4
5
  import {
5
- COLUMN_2_SINGLE_SLOT_FIXTURE_WIDTH,
6
- COLUMN_2_X_ADJUSTMENT,
6
+ COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH,
7
+ COLUMN_DEFAULT_X_ADJUSTMENT,
7
8
  CONFIG_STYLE_READ_ONLY,
8
9
  FIXTURE_HEIGHT,
9
10
  Y_ADJUSTMENT,
@@ -22,7 +23,7 @@ interface StaticFixtureProps {
22
23
  * config map
23
24
  */
24
25
 
25
- export function StaticFixture(props: StaticFixtureProps): JSX.Element {
26
+ export function StaticItem(props: StaticFixtureProps): JSX.Element {
26
27
  const { deckDefinition, fixtureLocation, label } = props
27
28
 
28
29
  const staticCutout = deckDefinition.locations.cutouts.find(
@@ -35,20 +36,26 @@ export function StaticFixture(props: StaticFixtureProps): JSX.Element {
35
36
  */
36
37
  const [xSlotPosition = 0, ySlotPosition = 0] = staticCutout?.position ?? []
37
38
  const y = ySlotPosition + Y_ADJUSTMENT
38
- const x = xSlotPosition + COLUMN_2_X_ADJUSTMENT
39
+ const x = xSlotPosition + COLUMN_DEFAULT_X_ADJUSTMENT
39
40
 
40
41
  return (
41
42
  <RobotCoordsForeignObject
42
- width={COLUMN_2_SINGLE_SLOT_FIXTURE_WIDTH}
43
+ width={COLUMN_DEFAULT_SINGLE_SLOT_FIXTURE_WIDTH}
43
44
  height={FIXTURE_HEIGHT}
44
45
  x={x}
45
46
  y={y}
46
47
  flexProps={{ flex: '1' }}
47
48
  foreignObjectProps={{ flex: '1' }}
48
49
  >
49
- <Btn css={CONFIG_STYLE_READ_ONLY} cursor={'default'} onClick={() => {}}>
50
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>{label}</Text>
51
- </Btn>
50
+ <Box css={CONFIG_STYLE_READ_ONLY} height="100%" cursor="default">
51
+ <StyledText
52
+ oddStyle="smallBodyTextSemiBold"
53
+ desktopStyle="bodyDefaultSemiBold"
54
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
55
+ >
56
+ {label}
57
+ </StyledText>
58
+ </Box>
52
59
  </RobotCoordsForeignObject>
53
60
  )
54
61
  }
@@ -1,48 +1,58 @@
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_X_ADJUSTMENT,
10
15
  CONFIG_STYLE_EDITABLE,
11
16
  CONFIG_STYLE_READ_ONLY,
12
17
  CONFIG_STYLE_SELECTED,
13
18
  FIXTURE_HEIGHT,
19
+ LARGE_SINGLE_ITEM_SLOT_WIDTH,
14
20
  Y_ADJUSTMENT,
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 HeaterShakerFixture, consider consolidating?
24
31
 
25
- const TEMPERATURE_MODULE_FIXTURE_DISPLAY_NAME = 'Temperature'
26
-
27
32
  interface TemperatureModuleFixtureProps {
28
33
  deckDefinition: DeckDefinition
29
34
  fixtureLocation: CutoutId
30
- cutoutFixtureId: CutoutFixtureId
35
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
36
+ addressableAreaId: AddressableAreaNamesWithFakes
31
37
  handleClickRemove?: (
32
38
  fixtureLocation: CutoutId,
33
- cutoutFixtureId: CutoutFixtureId
39
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
40
+ addressableAreaId: AddressableAreaNamesWithFakes
34
41
  ) => void
35
42
  selected?: boolean
36
43
  }
37
44
 
38
- export function TemperatureModuleFixture(
45
+ export function TemperatureModuleItem(
39
46
  props: TemperatureModuleFixtureProps
40
47
  ): JSX.Element {
48
+ const { t } = useTranslation('deck_configuration')
49
+
41
50
  const {
42
51
  deckDefinition,
43
52
  handleClickRemove,
44
53
  fixtureLocation,
45
54
  cutoutFixtureId,
55
+ addressableAreaId,
46
56
  selected = false,
47
57
  } = props
48
58
 
@@ -57,23 +67,28 @@ export function TemperatureModuleFixture(
57
67
  */
58
68
  const [xSlotPosition = 0, ySlotPosition = 0] = cutoutDef?.position ?? []
59
69
 
60
- const isColumnOne =
61
- fixtureLocation === 'cutoutA1' ||
62
- fixtureLocation === 'cutoutB1' ||
63
- fixtureLocation === 'cutoutC1' ||
64
- fixtureLocation === 'cutoutD1'
70
+ const isColumnOne = SINGLE_LEFT_CUTOUTS.includes(fixtureLocation)
65
71
  const xAdjustment = isColumnOne
66
72
  ? COLUMN_1_X_ADJUSTMENT
67
- : COLUMN_3_X_ADJUSTMENT
73
+ : COLUMN_DEFAULT_X_ADJUSTMENT
68
74
  const x = xSlotPosition + xAdjustment
69
75
 
70
76
  const y = ySlotPosition + Y_ADJUSTMENT
71
77
 
72
78
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
73
79
 
80
+ const handleRemoveClick = (): void => {
81
+ if (handleClickRemove != null) {
82
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
83
+ }
84
+ }
74
85
  return (
75
86
  <RobotCoordsForeignObject
76
- width={COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH}
87
+ width={
88
+ isColumnOne
89
+ ? COLUMN_1_SINGLE_SLOT_FIXTURE_WIDTH
90
+ : LARGE_SINGLE_ITEM_SLOT_WIDTH
91
+ }
77
92
  height={FIXTURE_HEIGHT}
78
93
  x={x}
79
94
  y={y}
@@ -83,17 +98,18 @@ export function TemperatureModuleFixture(
83
98
  <Btn
84
99
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
85
100
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
86
- onClick={
87
- handleClickRemove != null
88
- ? () => {
89
- handleClickRemove(fixtureLocation, cutoutFixtureId)
90
- }
91
- : () => {}
92
- }
101
+ onClick={handleRemoveClick}
102
+ height="100%"
103
+ data-testid={addressableAreaId}
93
104
  >
94
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>
95
- {TEMPERATURE_MODULE_FIXTURE_DISPLAY_NAME}
96
- </Text>
105
+ <StyledText
106
+ oddStyle="smallBodyTextSemiBold"
107
+ desktopStyle="bodyDefaultSemiBold"
108
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
109
+ >
110
+ {t('temperature')}
111
+ </StyledText>
112
+
97
113
  {handleClickRemove != null ? (
98
114
  <Icon name="remove" color={COLORS.white} size="2rem" />
99
115
  ) : null}
@@ -1,45 +1,50 @@
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
10
  COLUMN_1_X_ADJUSTMENT,
8
- COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH,
9
11
  CONFIG_STYLE_EDITABLE,
10
12
  CONFIG_STYLE_READ_ONLY,
11
13
  CONFIG_STYLE_SELECTED,
12
14
  THERMOCYCLER_FIXTURE_HEIGHT,
15
+ THERMOCYCLER_FIXTURE_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 ThermocyclerFixtureProps {
26
+ interface ThermocyclerItemProps {
23
27
  deckDefinition: DeckDefinition
24
28
  fixtureLocation: CutoutId
25
- cutoutFixtureId: CutoutFixtureId
29
+ cutoutFixtureId: CutoutFixtureIdsWithFakes
30
+ addressableAreaId: AddressableAreaNamesWithFakes
26
31
  handleClickRemove?: (
27
32
  fixtureLocation: CutoutId,
28
- cutoutFixtureId: CutoutFixtureId
33
+ cutoutFixtureId: CutoutFixtureIdsWithFakes,
34
+ addressableAreaId: AddressableAreaNamesWithFakes
29
35
  ) => void
30
36
  selected?: boolean
31
37
  }
32
38
 
33
- const THERMOCYCLER_FIXTURE_DISPLAY_NAME = 'Thermocycler'
39
+ export function ThermocyclerItem(props: ThermocyclerItemProps): JSX.Element {
40
+ const { t } = useTranslation('deck_configuration')
34
41
 
35
- export function ThermocyclerFixture(
36
- props: ThermocyclerFixtureProps
37
- ): JSX.Element {
38
42
  const {
39
43
  deckDefinition,
40
44
  handleClickRemove,
41
45
  fixtureLocation,
42
46
  cutoutFixtureId,
47
+ addressableAreaId,
43
48
  selected = false,
44
49
  } = props
45
50
 
@@ -57,9 +62,14 @@ export function ThermocyclerFixture(
57
62
  const y = ySlotPosition + Y_ADJUSTMENT
58
63
 
59
64
  const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
65
+ const handleRemoveClick = (): void => {
66
+ if (handleClickRemove != null) {
67
+ handleClickRemove(fixtureLocation, cutoutFixtureId, addressableAreaId)
68
+ }
69
+ }
60
70
  return (
61
71
  <RobotCoordsForeignObject
62
- width={COLUMN_3_SINGLE_SLOT_FIXTURE_WIDTH}
72
+ width={THERMOCYCLER_FIXTURE_WIDTH}
63
73
  height={THERMOCYCLER_FIXTURE_HEIGHT}
64
74
  x={x}
65
75
  y={y}
@@ -69,17 +79,17 @@ export function ThermocyclerFixture(
69
79
  <Btn
70
80
  css={handleClickRemove != null ? editableStyle : CONFIG_STYLE_READ_ONLY}
71
81
  cursor={handleClickRemove != null ? 'pointer' : 'default'}
72
- onClick={
73
- handleClickRemove != null
74
- ? () => {
75
- handleClickRemove(fixtureLocation, cutoutFixtureId)
76
- }
77
- : () => {}
78
- }
82
+ onClick={handleRemoveClick}
83
+ height="100%"
79
84
  >
80
- <Text css={TYPOGRAPHY.smallBodyTextSemiBold}>
81
- {THERMOCYCLER_FIXTURE_DISPLAY_NAME}
82
- </Text>
85
+ <StyledText
86
+ oddStyle="smallBodyTextSemiBold"
87
+ desktopStyle="bodyDefaultSemiBold"
88
+ css={TYPOGRAPHY.smallBodyTextSemiBold}
89
+ >
90
+ {t('thermocycler')}
91
+ </StyledText>
92
+
83
93
  {handleClickRemove != null ? (
84
94
  <Icon name="remove" color={COLORS.white} size="2rem" />
85
95
  ) : null}