@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.
- package/cssModuleSideEffect.ts +22 -0
- package/lib/assets/localization/en/index.d.ts +12 -0
- package/lib/assets/localization/index.d.ts +12 -0
- package/lib/atoms/AnimationVideo/index.d.ts +13 -0
- package/lib/atoms/InlineNotification/index.d.ts +1 -1
- package/lib/atoms/ListButton/ListButtonChildren/index.d.ts +0 -1
- package/lib/atoms/StyledText/PlaceholderStyledText.d.ts +14 -0
- package/lib/atoms/StyledText/index.d.ts +1 -0
- package/lib/atoms/buttons/BasicButton.d.ts +12 -0
- package/lib/atoms/buttons/index.d.ts +1 -0
- package/lib/atoms/index.d.ts +1 -0
- package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +10 -8
- package/lib/hardware-sim/Deck/FlexTrash.d.ts +4 -1
- package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +3 -2
- package/lib/hardware-sim/Deck/RobotCoordsForeignDiv.d.ts +6 -5
- package/lib/hardware-sim/Deck/RobotCoordsForeignObject.d.ts +8 -5
- package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +11 -1
- package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +30 -14
- package/lib/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.d.ts +1 -0
- package/lib/hardware-sim/Deck/resolveLabwareLocation.d.ts +20 -0
- package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/EmptyConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/FlexStackerItem.d.ts +12 -0
- package/lib/hardware-sim/DeckConfigurator/HeaterShakerItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/MagneticBlockItem.d.ts +12 -0
- package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/{StaticFixture.d.ts → StaticItem.d.ts} +1 -1
- package/lib/hardware-sim/DeckConfigurator/TemperatureModuleItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/ThermocyclerItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/TrashBinConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigItem.d.ts +11 -0
- package/lib/hardware-sim/DeckConfigurator/constants.d.ts +5 -8
- package/lib/hardware-sim/DeckConfigurator/index.d.ts +4 -3
- package/lib/hardware-sim/Labware/CalibrationBlockRender.d.ts +15 -0
- package/lib/hardware-sim/Labware/Labware.d.ts +7 -8
- package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +2 -2
- package/lib/hardware-sim/Labware/LabwareRender.d.ts +46 -5
- package/lib/hardware-sim/Labware/index.d.ts +1 -0
- package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +3 -4
- package/lib/hardware-sim/Labware/labwareInternals/LabwareOutline.d.ts +20 -9
- package/lib/hardware-sim/Labware/labwareInternals/LabwareWellLabels.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/StyledWells.d.ts +2 -2
- package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -2
- package/lib/hardware-sim/Labware/labwareInternals/WellLabels.d.ts +2 -2
- package/lib/hardware-sim/Module/index.d.ts +24 -2
- package/lib/hardware-sim/Pipette/PipetteRender.d.ts +2 -2
- package/lib/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.d.ts +5 -3
- package/lib/hocs/withStyleProps.d.ts +26 -0
- package/lib/hooks/useConditionalConfirm.d.ts +4 -0
- package/lib/icons/Icon.d.ts +7 -7
- package/lib/icons/ModuleIcon.d.ts +4 -3
- package/lib/instrument/index.d.ts +0 -2
- package/lib/legacy-hardware-sim/index.d.ts +0 -1
- package/lib/lists/index.d.ts +0 -1
- package/lib/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.d.ts +1 -0
- package/lib/molecules/CustomizeExpandButton/index.d.ts +29 -0
- package/lib/molecules/DeckInfoLabel/index.d.ts +8 -16
- package/lib/molecules/index.d.ts +2 -1
- package/lib/organisms/CommandText/index.d.ts +2 -2
- package/lib/organisms/CommandText/useCommandTextString/index.d.ts +2 -2
- package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.d.ts +2 -2
- package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +3 -3
- package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareName.d.ts +2 -2
- package/lib/organisms/FixtureOption/index.d.ts +2 -2
- package/lib/organisms/ProtocolDeck/index.d.ts +10 -0
- package/lib/organisms/ProtocolTimelineScrubber/CommandItem.d.ts +2 -2
- package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +2 -2
- package/lib/organisms/index.d.ts +1 -0
- package/lib/primitives/ForeignObject.d.ts +8 -18
- package/lib/primitives/style-props.d.ts +1 -1
- package/lib/structure/index.d.ts +2 -3
- package/package.json +6 -3
- package/src/alerts/alerts.module.css +2 -2
- package/src/assets/localization/en/deck_configuration.json +12 -0
- package/src/assets/localization/en/index.ts +2 -0
- package/src/assets/localization/en/protocol_command_text.json +1 -1
- package/src/atoms/AnimationVideo/__tests__/AnimationVideo.test.tsx +40 -0
- package/src/atoms/AnimationVideo/index.tsx +44 -0
- package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +0 -3
- package/src/atoms/CheckboxField/index.tsx +1 -1
- package/src/atoms/InlineNotification/index.tsx +86 -70
- package/src/atoms/ListButton/ListButton.stories.tsx +21 -7
- package/src/atoms/ListButton/ListButtonChildren/index.ts +0 -1
- package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +2 -2
- package/src/atoms/MenuList/OverflowBtn.tsx +39 -41
- package/src/atoms/Snackbar/Snackbar.stories.tsx +59 -23
- package/src/atoms/Snackbar/index.tsx +48 -38
- package/src/atoms/StyledText/PlaceholderStyledText.tsx +46 -0
- package/src/atoms/StyledText/index.ts +1 -0
- package/src/atoms/StyledText/placeholderstyledtext.module.css +25 -0
- package/src/atoms/buttons/BasicButton.tsx +100 -0
- package/src/atoms/buttons/SecondaryButton.tsx +5 -2
- package/src/atoms/buttons/__tests__/BasicButton.test.tsx +87 -0
- package/src/atoms/buttons/buttons.stories.tsx +91 -55
- package/src/atoms/buttons/index.ts +1 -0
- package/src/atoms/index.ts +1 -0
- package/src/buttons/buttons.module.css +92 -92
- package/src/controls/styles.module.css +15 -15
- package/src/forms/Select.module.css +23 -23
- package/src/forms/forms.module.css +38 -37
- package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +7 -7
- package/src/hardware-sim/BaseDeck/BaseDeck.tsx +98 -61
- package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +22 -28
- package/src/hardware-sim/BaseDeck/basedeck.module.css +20 -0
- package/src/hardware-sim/Deck/FlexTrash.tsx +50 -30
- package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +2 -2
- package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +122 -156
- package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +35 -27
- package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +32 -29
- package/src/hardware-sim/Deck/RobotCoordsText.tsx +12 -11
- package/src/hardware-sim/Deck/RobotWorkSpace.tsx +74 -54
- package/src/hardware-sim/Deck/SlotLabels.tsx +51 -51
- package/src/hardware-sim/Deck/__tests__/resolveLabwareLocation.test.ts +138 -0
- package/src/hardware-sim/Deck/deck.module.css +54 -0
- package/src/hardware-sim/Deck/resolveLabwareLocation.ts +154 -0
- package/src/hardware-sim/DeckConfigurator/{FlexStackerFixture.tsx → AbsorbanceReaderItem.tsx} +34 -31
- package/src/hardware-sim/DeckConfigurator/{EmptyConfigFixture.tsx → EmptyConfigItem.tsx} +72 -44
- package/src/hardware-sim/DeckConfigurator/{AbsorbanceReaderFixture.tsx → FlexStackerItem.tsx} +46 -27
- package/src/hardware-sim/DeckConfigurator/{HeaterShakerFixture.tsx → HeaterShakerItem.tsx} +40 -28
- package/src/hardware-sim/DeckConfigurator/{MagneticBlockFixture.tsx → MagneticBlockItem.tsx} +41 -58
- package/src/hardware-sim/DeckConfigurator/{StagingAreaConfigFixture.tsx → StagingAreaConfigItem.tsx} +41 -23
- package/src/hardware-sim/DeckConfigurator/{StaticFixture.tsx → StaticItem.tsx} +16 -9
- package/src/hardware-sim/DeckConfigurator/{TemperatureModuleFixture.tsx → TemperatureModuleItem.tsx} +42 -26
- package/src/hardware-sim/DeckConfigurator/{ThermocyclerFixture.tsx → ThermocyclerItem.tsx} +31 -21
- package/src/hardware-sim/DeckConfigurator/{TrashBinConfigFixture.tsx → TrashBinConfigItem.tsx} +42 -27
- package/src/hardware-sim/DeckConfigurator/{WasteChuteConfigFixture.tsx → WasteChuteConfigItem.tsx} +38 -27
- package/src/hardware-sim/DeckConfigurator/constants.ts +5 -9
- package/src/hardware-sim/DeckConfigurator/index.tsx +236 -206
- package/src/hardware-sim/Labware/CalibrationBlockRender.stories.tsx +49 -0
- package/src/hardware-sim/Labware/CalibrationBlockRender.tsx +172 -0
- package/src/hardware-sim/Labware/Labware.tsx +30 -15
- package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +2 -2
- package/src/hardware-sim/Labware/LabwareRender.stories.tsx +36 -21
- package/src/hardware-sim/Labware/LabwareRender.tsx +70 -15
- package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +9 -4
- package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +14 -5
- package/src/hardware-sim/Labware/index.ts +1 -0
- package/src/hardware-sim/Labware/labware.module.css +8 -0
- package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +3 -4
- package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +48 -23
- package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +3 -3
- package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/Well.tsx +1 -2
- package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +10 -11
- package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +2 -2
- package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +2 -2
- package/src/hardware-sim/Module/Module.stories.tsx +45 -15
- package/src/hardware-sim/Module/Thermocycler/index.tsx +2 -2
- package/src/hardware-sim/Module/index.tsx +41 -18
- package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +2 -2
- package/src/hardware-sim/Pipette/PipetteRender.tsx +5 -7
- package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +2 -2
- package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +15 -14
- package/src/hardware-sim/RobotCoordinateSpace/robotcoordinatespace.module.css +3 -0
- package/src/hocs/withStyleProps.ts +53 -0
- package/src/hooks/useConditionalConfirm.ts +15 -5
- package/src/icons/Icon.tsx +38 -29
- package/src/icons/ModuleIcon.tsx +5 -3
- package/src/icons/icon-data.ts +26 -2
- package/src/icons/icon.module.css +10 -0
- package/src/index.module.css +1 -0
- package/src/instrument/InstrumentDiagram.tsx +0 -2
- package/src/instrument/PipetteSelect.module.css +3 -3
- package/src/instrument/index.ts +0 -2
- package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +5 -5
- package/src/legacy-hardware-sim/ModuleItem.module.css +19 -19
- package/src/legacy-hardware-sim/index.ts +0 -1
- package/src/lists/index.ts +0 -1
- package/src/lists/lists.module.css +23 -23
- package/src/modals/modals.module.css +55 -55
- package/src/molecules/CustomizeExpandButton/__tests__/CustomizeExpandButton.test.tsx +88 -0
- package/src/molecules/CustomizeExpandButton/index.tsx +189 -0
- package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +10 -6
- package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +15 -11
- package/src/molecules/DeckInfoLabel/deckinfolabel.module.css +42 -0
- package/src/molecules/DeckInfoLabel/index.tsx +36 -62
- package/src/molecules/DropdownMenu/index.tsx +17 -13
- package/src/molecules/InfoScreen/index.tsx +6 -2
- package/src/molecules/ReleaseNotes/styles.module.css +15 -15
- package/src/molecules/index.ts +2 -1
- package/src/nav/SidePanel.module.css +6 -6
- package/src/organisms/CommandText/__tests__/CommandText.test.tsx +12 -12
- package/src/organisms/CommandText/index.tsx +2 -2
- package/src/organisms/CommandText/useCommandTextString/index.ts +2 -2
- package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +4 -4
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +3 -3
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +2 -4
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts +19 -3
- package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +19 -10
- package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +9 -9
- package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +3 -3
- package/src/organisms/CommandText/useCommandTextString/utils/getLabwareName.ts +2 -2
- package/src/organisms/DeckLabelSet/index.tsx +1 -3
- package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +0 -2
- package/src/organisms/FixtureOption/index.tsx +42 -71
- package/src/organisms/ProtocolDeck/index.tsx +118 -0
- package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +2 -2
- package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +1 -1
- package/src/organisms/ProtocolTimelineScrubber/utils.ts +3 -3
- package/src/organisms/index.ts +1 -0
- package/src/primitives/ForeignObject.tsx +20 -61
- package/src/primitives/style-props.ts +1 -0
- package/src/slotmap/styles.module.css +1 -1
- package/src/structure/Pill.module.css +1 -1
- package/src/structure/Splash.module.css +1 -1
- package/src/structure/index.ts +2 -4
- package/src/structure/structure.module.css +11 -11
- package/src/styles/colors.module.css +1 -0
- package/src/styles/global.css +179 -0
- package/src/styles/index.module.css +1 -1
- package/src/styles/typography.module.css +1 -0
- package/src/testing/utils/renderWithProviders.tsx +3 -6
- package/src/tooltips/tooltips.module.css +14 -14
- package/vite.config.mts +6 -3
- package/lib/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.d.ts +0 -14
- package/lib/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/EmptyConfigFixture.d.ts +0 -8
- package/lib/hardware-sim/DeckConfigurator/FlexStackerFixture.d.ts +0 -11
- package/lib/hardware-sim/DeckConfigurator/HeaterShakerFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/MagneticBlockFixture.d.ts +0 -11
- package/lib/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/TemperatureModuleFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/ThermocyclerFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/TrashBinConfigFixture.d.ts +0 -10
- package/lib/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.d.ts +0 -11
- package/lib/hardware-sim/utils.d.ts +0 -3
- package/lib/instrument/InstrumentGroup.d.ts +0 -11
- package/lib/instrument/InstrumentInfo.d.ts +0 -18
- package/lib/legacy-hardware-sim/ModuleItem.d.ts +0 -17
- package/lib/lists/TitledList.d.ts +0 -44
- package/lib/structure/Card.d.ts +0 -18
- package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +0 -109
- package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +0 -28
- package/src/hardware-sim/utils.ts +0 -18
- package/src/instrument/InstrumentDiagram.stories.tsx +0 -43
- package/src/instrument/InstrumentGroup.stories.tsx +0 -89
- package/src/instrument/InstrumentGroup.tsx +0 -35
- package/src/instrument/InstrumentInfo.tsx +0 -106
- package/src/instrument/__tests__/InstrumentInfo.test.tsx +0 -58
- package/src/instrument/instrument.module.css +0 -45
- package/src/legacy-hardware-sim/ModuleItem.tsx +0 -145
- package/src/lists/TitledList.tsx +0 -154
- package/src/structure/Card.stories.tsx +0 -29
- package/src/structure/Card.tsx +0 -65
- /package/lib/atoms/{ListButton/__tests__/ListButtonRadioButton.test.d.ts → AnimationVideo/__tests__/AnimationVideo.test.d.ts} +0 -0
- /package/lib/{instrument/__tests__/InstrumentInfo.test.d.ts → atoms/buttons/__tests__/BasicButton.test.d.ts} +0 -0
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
import clsx from 'clsx'
|
|
2
|
+
|
|
1
3
|
import {
|
|
2
4
|
FLEX_ROBOT_TYPE,
|
|
3
5
|
getDeckDefFromRobotType,
|
|
6
|
+
getSchema2CornerOffsetFromSlot,
|
|
7
|
+
getSchema2Dimensions,
|
|
4
8
|
opentrons1Trash3200MlFixedV1 as trashLabwareDef,
|
|
5
9
|
} from '@opentrons/shared-data'
|
|
6
10
|
|
|
7
|
-
import {
|
|
11
|
+
import { PlaceholderStyledText } from '../../atoms'
|
|
12
|
+
import { COLORS } from '../../helix-design-system'
|
|
8
13
|
import { Icon } from '../../icons'
|
|
9
14
|
import { DeckLabelSet } from '../../organisms'
|
|
10
|
-
import
|
|
11
|
-
import { ALIGN_CENTER, JUSTIFY_CENTER } from '../../styles'
|
|
12
|
-
import { SPACING, TYPOGRAPHY } from '../../ui-style-constants'
|
|
15
|
+
import styles from './deck.module.css'
|
|
13
16
|
import { RobotCoordsForeignObject } from './RobotCoordsForeignObject'
|
|
14
17
|
|
|
15
18
|
import type { RobotType } from '@opentrons/shared-data'
|
|
@@ -36,6 +39,9 @@ interface FlexTrashProps {
|
|
|
36
39
|
showHighlight?: boolean
|
|
37
40
|
/** optional tag info to display a tag below the trash */
|
|
38
41
|
tagInfo?: DeckLabelProps[]
|
|
42
|
+
onClick?: () => void
|
|
43
|
+
onMouseEnter?: () => void
|
|
44
|
+
onMouseLeave?: () => void
|
|
39
45
|
}
|
|
40
46
|
|
|
41
47
|
/**
|
|
@@ -50,6 +56,9 @@ export const FlexTrash = ({
|
|
|
50
56
|
trashCutoutId,
|
|
51
57
|
showHighlight,
|
|
52
58
|
tagInfo,
|
|
59
|
+
onClick,
|
|
60
|
+
onMouseEnter,
|
|
61
|
+
onMouseLeave,
|
|
53
62
|
}: FlexTrashProps): JSX.Element | null => {
|
|
54
63
|
// be sure we don't try to render for an OT-2
|
|
55
64
|
if (robotType !== FLEX_ROBOT_TYPE) return null
|
|
@@ -70,11 +79,10 @@ export const FlexTrash = ({
|
|
|
70
79
|
} = deckDefinition.locations.addressableAreas[0].boundingBox
|
|
71
80
|
|
|
72
81
|
// adjust for dimensions from trash definition
|
|
73
|
-
const {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
} = trashLabwareDef
|
|
77
|
-
const { xDimension, yDimension } = trashLabwareDef.dimensions
|
|
82
|
+
const { x: xAdjustment, y: yAdjustment } = getSchema2CornerOffsetFromSlot(
|
|
83
|
+
trashLabwareDef
|
|
84
|
+
)
|
|
85
|
+
const { xDimension, yDimension } = getSchema2Dimensions(trashLabwareDef)
|
|
78
86
|
|
|
79
87
|
// rotate trash 180 degrees in column 1
|
|
80
88
|
const rotateDegrees =
|
|
@@ -96,28 +104,37 @@ export const FlexTrash = ({
|
|
|
96
104
|
height={yDimension}
|
|
97
105
|
x={x + xAdjustment}
|
|
98
106
|
y={y + yAdjustment}
|
|
99
|
-
flexProps={{
|
|
100
|
-
|
|
107
|
+
flexProps={{
|
|
108
|
+
flex: '1',
|
|
109
|
+
}}
|
|
110
|
+
flexEvents={{
|
|
111
|
+
onClick: onClick,
|
|
112
|
+
onMouseEnter: onMouseEnter,
|
|
113
|
+
onMouseLeave: onMouseLeave,
|
|
114
|
+
}}
|
|
115
|
+
foreignObjectProps={{
|
|
116
|
+
flex: '1',
|
|
117
|
+
cursor: onClick != null ? 'pointer' : 'default',
|
|
118
|
+
}}
|
|
101
119
|
>
|
|
102
|
-
<
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
gridGap={SPACING.spacing8}
|
|
108
|
-
width="100%"
|
|
109
|
-
border={showHighlight ? `3px solid ${COLORS.blue50}` : 'none'}
|
|
120
|
+
<div
|
|
121
|
+
className={clsx(styles.trash_container, {
|
|
122
|
+
[styles.trash_container_highlight]: showHighlight,
|
|
123
|
+
})}
|
|
124
|
+
style={{ backgroundColor }}
|
|
110
125
|
>
|
|
111
126
|
{rotateDegrees === '180' ? (
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
transform={`rotate(${rotateDegrees}deg)`}
|
|
116
|
-
transformOrigin="center"
|
|
117
|
-
css={TYPOGRAPHY.bodyTextSemiBold}
|
|
127
|
+
<div
|
|
128
|
+
className={styles.trash_container_rotate_copy}
|
|
129
|
+
style={{ transform: `rotate(${rotateDegrees}deg)` }}
|
|
118
130
|
>
|
|
119
|
-
|
|
120
|
-
|
|
131
|
+
<PlaceholderStyledText
|
|
132
|
+
color={COLORS.white}
|
|
133
|
+
desktopStyle="bodyDefaultSemiBold"
|
|
134
|
+
>
|
|
135
|
+
Trash bin
|
|
136
|
+
</PlaceholderStyledText>
|
|
137
|
+
</div>
|
|
121
138
|
) : null}
|
|
122
139
|
<Icon
|
|
123
140
|
name="trash"
|
|
@@ -128,11 +145,14 @@ export const FlexTrash = ({
|
|
|
128
145
|
transformOrigin="center"
|
|
129
146
|
/>
|
|
130
147
|
{rotateDegrees === '0' ? (
|
|
131
|
-
<
|
|
148
|
+
<PlaceholderStyledText
|
|
149
|
+
color={COLORS.white}
|
|
150
|
+
desktopStyle="bodyDefaultSemiBold"
|
|
151
|
+
>
|
|
132
152
|
Trash bin
|
|
133
|
-
</
|
|
153
|
+
</PlaceholderStyledText>
|
|
134
154
|
) : null}
|
|
135
|
-
</
|
|
155
|
+
</div>
|
|
136
156
|
</RobotCoordsForeignObject>
|
|
137
157
|
{tagInfo != null && tagInfo.length > 0 ? (
|
|
138
158
|
<DeckLabelSet
|
|
@@ -13,7 +13,7 @@ import type { Meta, StoryObj } from '@storybook/react'
|
|
|
13
13
|
import type * as React from 'react'
|
|
14
14
|
import type {
|
|
15
15
|
DeckConfiguration,
|
|
16
|
-
|
|
16
|
+
LabwareDefinition,
|
|
17
17
|
} from '@opentrons/shared-data'
|
|
18
18
|
|
|
19
19
|
const meta: Meta<React.ComponentProps<typeof MoveLabwareOnDeckComponent>> = {
|
|
@@ -78,7 +78,7 @@ const FLEX_SIMPLEST_DECK_CONFIG: DeckConfiguration = [
|
|
|
78
78
|
export const MoveLabwareOnDeck: Story = {
|
|
79
79
|
render: args => (
|
|
80
80
|
<MoveLabwareOnDeckComponent
|
|
81
|
-
movedLabwareDef={fixture96Plate as
|
|
81
|
+
movedLabwareDef={fixture96Plate as LabwareDefinition}
|
|
82
82
|
initialLabwareLocation={args.initialLabwareLocation}
|
|
83
83
|
finalLabwareLocation={args.finalLabwareLocation}
|
|
84
84
|
loadedModules={[]}
|
|
@@ -3,21 +3,21 @@ import { animated, easings, useSpring } from '@react-spring/web'
|
|
|
3
3
|
import styled from 'styled-components'
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
|
+
computeLabwareOrigin,
|
|
6
7
|
getDeckDefFromRobotType,
|
|
7
|
-
|
|
8
|
-
getPositionFromSlotId,
|
|
8
|
+
getLabwareViewBox,
|
|
9
9
|
} from '@opentrons/shared-data'
|
|
10
10
|
|
|
11
11
|
import { COLORS } from '../../helix-design-system'
|
|
12
12
|
import { BaseDeck } from '../BaseDeck'
|
|
13
13
|
import { LabwareRender } from '../Labware'
|
|
14
|
-
import {
|
|
14
|
+
import { resolveLabwareLocation } from './resolveLabwareLocation'
|
|
15
15
|
|
|
16
|
-
import type { ReactNode } from 'react'
|
|
16
|
+
import type { PropsWithChildren, ReactNode } from 'react'
|
|
17
17
|
import type {
|
|
18
18
|
DeckConfiguration,
|
|
19
19
|
DeckDefinition,
|
|
20
|
-
|
|
20
|
+
LabwareDefinition,
|
|
21
21
|
LabwareLocation,
|
|
22
22
|
LoadedLabware,
|
|
23
23
|
LoadedModule,
|
|
@@ -26,118 +26,16 @@ import type {
|
|
|
26
26
|
} from '@opentrons/shared-data'
|
|
27
27
|
import type { StyleProps } from '../../primitives'
|
|
28
28
|
|
|
29
|
-
const getModulePosition = (
|
|
30
|
-
deckDef: DeckDefinition,
|
|
31
|
-
moduleId: string,
|
|
32
|
-
loadedModules: LoadedModule[]
|
|
33
|
-
): Vector3D | null => {
|
|
34
|
-
const loadedModule = loadedModules.find(m => m.id === moduleId)
|
|
35
|
-
if (loadedModule == null) return null
|
|
36
|
-
const modSlot = deckDef.locations.addressableAreas.find(
|
|
37
|
-
s => s.id === loadedModule.location.slotName
|
|
38
|
-
)
|
|
39
|
-
if (modSlot == null) return null
|
|
40
|
-
|
|
41
|
-
const modPosition = getPositionFromSlotId(modSlot.id, deckDef)
|
|
42
|
-
if (modPosition == null) return null
|
|
43
|
-
const [modX, modY] = modPosition
|
|
44
|
-
|
|
45
|
-
const deckSpecificAffineTransform =
|
|
46
|
-
getModuleDef2(loadedModule.model).slotTransforms?.[deckDef.otId]?.[
|
|
47
|
-
modSlot.id
|
|
48
|
-
]?.labwareOffset ?? IDENTITY_AFFINE_TRANSFORM
|
|
49
|
-
const [[labwareX], [labwareY], [labwareZ]] = multiplyMatrices(
|
|
50
|
-
[[modX], [modY], [1], [1]],
|
|
51
|
-
deckSpecificAffineTransform
|
|
52
|
-
)
|
|
53
|
-
return { x: labwareX, y: labwareY, z: labwareZ }
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function getLabwareCoordinates({
|
|
57
|
-
deckDef,
|
|
58
|
-
location,
|
|
59
|
-
loadedModules,
|
|
60
|
-
loadedLabware,
|
|
61
|
-
}: {
|
|
62
|
-
deckDef: DeckDefinition
|
|
63
|
-
location: LabwareLocation
|
|
64
|
-
loadedModules: LoadedModule[]
|
|
65
|
-
loadedLabware: LoadedLabware[]
|
|
66
|
-
}): Vector3D | null {
|
|
67
|
-
if (location === 'offDeck' || location === 'systemLocation') {
|
|
68
|
-
return null
|
|
69
|
-
} else if ('labwareId' in location) {
|
|
70
|
-
const loadedAdapter = loadedLabware.find(l => l.id === location.labwareId)
|
|
71
|
-
if (loadedAdapter == null) return null
|
|
72
|
-
const loadedAdapterLocation = loadedAdapter.location
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
loadedAdapterLocation === 'offDeck' ||
|
|
76
|
-
loadedAdapterLocation === 'systemLocation' ||
|
|
77
|
-
'labwareId' in loadedAdapterLocation
|
|
78
|
-
)
|
|
79
|
-
return null
|
|
80
|
-
// adapter on module
|
|
81
|
-
if ('moduleId' in loadedAdapterLocation) {
|
|
82
|
-
return getModulePosition(
|
|
83
|
-
deckDef,
|
|
84
|
-
loadedAdapterLocation.moduleId,
|
|
85
|
-
loadedModules
|
|
86
|
-
)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// adapter on deck
|
|
90
|
-
const loadedAdapterSlotPosition = getPositionFromSlotId(
|
|
91
|
-
'slotName' in loadedAdapterLocation
|
|
92
|
-
? loadedAdapterLocation.slotName
|
|
93
|
-
: loadedAdapterLocation.addressableAreaName,
|
|
94
|
-
deckDef
|
|
95
|
-
)
|
|
96
|
-
return loadedAdapterSlotPosition != null
|
|
97
|
-
? {
|
|
98
|
-
x: loadedAdapterSlotPosition[0],
|
|
99
|
-
y: loadedAdapterSlotPosition[1],
|
|
100
|
-
z: loadedAdapterSlotPosition[2],
|
|
101
|
-
}
|
|
102
|
-
: null
|
|
103
|
-
} else if ('addressableAreaName' in location) {
|
|
104
|
-
const slotCoordinateTuple = getPositionFromSlotId(
|
|
105
|
-
location.addressableAreaName,
|
|
106
|
-
deckDef
|
|
107
|
-
)
|
|
108
|
-
return slotCoordinateTuple != null
|
|
109
|
-
? {
|
|
110
|
-
x: slotCoordinateTuple[0],
|
|
111
|
-
y: slotCoordinateTuple[1],
|
|
112
|
-
z: slotCoordinateTuple[2],
|
|
113
|
-
}
|
|
114
|
-
: null
|
|
115
|
-
} else if ('slotName' in location) {
|
|
116
|
-
const slotCoordinateTuple = getPositionFromSlotId(
|
|
117
|
-
location.slotName,
|
|
118
|
-
deckDef
|
|
119
|
-
)
|
|
120
|
-
return slotCoordinateTuple != null
|
|
121
|
-
? {
|
|
122
|
-
x: slotCoordinateTuple[0],
|
|
123
|
-
y: slotCoordinateTuple[1],
|
|
124
|
-
z: slotCoordinateTuple[2],
|
|
125
|
-
}
|
|
126
|
-
: null
|
|
127
|
-
} else {
|
|
128
|
-
return getModulePosition(deckDef, location.moduleId, loadedModules)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
29
|
const SPLASH_Y_BUFFER_MM = 10
|
|
133
30
|
|
|
134
31
|
interface MoveLabwareOnDeckProps extends StyleProps {
|
|
135
32
|
robotType: RobotType
|
|
136
|
-
movedLabwareDef:
|
|
33
|
+
movedLabwareDef: LabwareDefinition
|
|
137
34
|
initialLabwareLocation: LabwareLocation
|
|
138
35
|
finalLabwareLocation: LabwareLocation
|
|
139
36
|
loadedModules: LoadedModule[]
|
|
140
37
|
loadedLabware: LoadedLabware[]
|
|
38
|
+
labwareDefinitions: LabwareDefinition[]
|
|
141
39
|
deckConfig: DeckConfiguration
|
|
142
40
|
backgroundItems?: ReactNode
|
|
143
41
|
deckFill?: string
|
|
@@ -149,6 +47,7 @@ export function MoveLabwareOnDeck(
|
|
|
149
47
|
robotType,
|
|
150
48
|
movedLabwareDef,
|
|
151
49
|
loadedLabware,
|
|
50
|
+
labwareDefinitions,
|
|
152
51
|
initialLabwareLocation,
|
|
153
52
|
finalLabwareLocation,
|
|
154
53
|
loadedModules,
|
|
@@ -158,48 +57,67 @@ export function MoveLabwareOnDeck(
|
|
|
158
57
|
} = props
|
|
159
58
|
const deckDef = useMemo(() => getDeckDefFromRobotType(robotType), [robotType])
|
|
160
59
|
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
60
|
+
const initialResolvedLocation = resolveLabwareLocation({
|
|
61
|
+
deckDef,
|
|
62
|
+
targetLabwareDef: movedLabwareDef,
|
|
63
|
+
targetLabwareLocation: initialLabwareLocation,
|
|
64
|
+
loadedModules,
|
|
65
|
+
otherLoadedLabware: loadedLabware,
|
|
66
|
+
otherLabwareDefinitions: labwareDefinitions,
|
|
67
|
+
})
|
|
68
|
+
const finalResolvedLocation = resolveLabwareLocation({
|
|
69
|
+
deckDef,
|
|
70
|
+
targetLabwareDef: movedLabwareDef,
|
|
71
|
+
targetLabwareLocation: finalLabwareLocation,
|
|
72
|
+
loadedModules,
|
|
73
|
+
otherLoadedLabware: loadedLabware,
|
|
74
|
+
otherLabwareDefinitions: labwareDefinitions,
|
|
75
|
+
})
|
|
173
76
|
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
77
|
+
const initialCoordinates =
|
|
78
|
+
initialResolvedLocation === 'error' || initialResolvedLocation === 'offDeck'
|
|
79
|
+
? initialResolvedLocation
|
|
80
|
+
: computeLabwareOrigin(initialResolvedLocation) ?? 'error'
|
|
81
|
+
const finalCoordinates =
|
|
82
|
+
finalResolvedLocation === 'error' || finalResolvedLocation === 'offDeck'
|
|
83
|
+
? finalResolvedLocation
|
|
84
|
+
: computeLabwareOrigin(finalResolvedLocation) ?? 'error'
|
|
85
|
+
|
|
86
|
+
const referenceForOffDeckCoordinates = (() => {
|
|
87
|
+
if (initialCoordinates !== 'error' && initialCoordinates !== 'offDeck') {
|
|
88
|
+
return initialCoordinates
|
|
89
|
+
} else if (finalCoordinates !== 'error' && finalCoordinates !== 'offDeck') {
|
|
90
|
+
return finalCoordinates
|
|
91
|
+
} else {
|
|
92
|
+
return { x: 0, y: 0, z: 0 }
|
|
93
|
+
}
|
|
94
|
+
})()
|
|
95
|
+
const offDeckCoordinates = getOffDeckCoordinates(
|
|
96
|
+
deckDef,
|
|
97
|
+
movedLabwareDef,
|
|
98
|
+
referenceForOffDeckCoordinates,
|
|
99
|
+
SPLASH_Y_BUFFER_MM
|
|
100
|
+
)
|
|
195
101
|
|
|
196
|
-
const
|
|
102
|
+
const animationInitialCoordinates =
|
|
103
|
+
initialCoordinates !== 'error' && initialCoordinates !== 'offDeck'
|
|
104
|
+
? initialCoordinates
|
|
105
|
+
: offDeckCoordinates
|
|
106
|
+
const animationFinalCoordinates =
|
|
107
|
+
finalCoordinates !== 'error' && finalCoordinates !== 'offDeck'
|
|
108
|
+
? finalCoordinates
|
|
109
|
+
: offDeckCoordinates
|
|
110
|
+
|
|
111
|
+
const shouldReset = usePositionChangeReset(
|
|
112
|
+
animationInitialCoordinates,
|
|
113
|
+
animationFinalCoordinates
|
|
114
|
+
)
|
|
197
115
|
|
|
198
116
|
const springProps = useSpring({
|
|
199
117
|
reset: shouldReset,
|
|
200
118
|
config: { duration: 1000, easing: easings.easeInOutSine },
|
|
201
119
|
from: {
|
|
202
|
-
...
|
|
120
|
+
...animationInitialCoordinates,
|
|
203
121
|
splashOpacity: 0,
|
|
204
122
|
deckOpacity: 0,
|
|
205
123
|
},
|
|
@@ -207,7 +125,7 @@ export function MoveLabwareOnDeck(
|
|
|
207
125
|
{ deckOpacity: 1 },
|
|
208
126
|
{ splashOpacity: 1 },
|
|
209
127
|
{ splashOpacity: 0 },
|
|
210
|
-
{ ...
|
|
128
|
+
{ ...animationFinalCoordinates },
|
|
211
129
|
{ splashOpacity: 1 },
|
|
212
130
|
{ splashOpacity: 0 },
|
|
213
131
|
{ deckOpacity: 0 },
|
|
@@ -215,10 +133,6 @@ export function MoveLabwareOnDeck(
|
|
|
215
133
|
loop: true,
|
|
216
134
|
})
|
|
217
135
|
|
|
218
|
-
if (deckDef == null) {
|
|
219
|
-
return null
|
|
220
|
-
}
|
|
221
|
-
|
|
222
136
|
return (
|
|
223
137
|
<BaseDeck
|
|
224
138
|
deckConfig={deckConfig}
|
|
@@ -231,11 +145,13 @@ export function MoveLabwareOnDeck(
|
|
|
231
145
|
>
|
|
232
146
|
{backgroundItems}
|
|
233
147
|
<AnimatedG style={{ x: springProps.x, y: springProps.y }}>
|
|
234
|
-
<
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
148
|
+
<LabwareRender
|
|
149
|
+
definition={movedLabwareDef}
|
|
150
|
+
positioningMode="passThrough"
|
|
151
|
+
highlight={true}
|
|
152
|
+
/>
|
|
153
|
+
<AnimatedG style={{ opacity: springProps.splashOpacity }}>
|
|
154
|
+
<AlignSplashToLabware labwareDefinition={movedLabwareDef}>
|
|
239
155
|
<path
|
|
240
156
|
d="M158.027 111.537L154.651 108.186M145.875 113L145.875 109.253M161 99.3038L156.864 99.3038M11.9733 10.461L15.3495 13.8128M24.1255 9L24.1254 12.747M9 22.6962L13.1357 22.6962"
|
|
241
157
|
stroke={COLORS.blue50}
|
|
@@ -243,13 +159,38 @@ export function MoveLabwareOnDeck(
|
|
|
243
159
|
strokeLinecap="round"
|
|
244
160
|
transform="scale(.97, -1) translate(-19, -104)"
|
|
245
161
|
/>
|
|
246
|
-
</
|
|
247
|
-
</
|
|
162
|
+
</AlignSplashToLabware>
|
|
163
|
+
</AnimatedG>
|
|
248
164
|
</AnimatedG>
|
|
249
165
|
</BaseDeck>
|
|
250
166
|
)
|
|
251
167
|
}
|
|
252
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Returns the coordinates of a location beyond the bounds of the deck.
|
|
171
|
+
*
|
|
172
|
+
* @param onDeckCoordinates - The coordinates of the labware when it's on-deck. The
|
|
173
|
+
* off-deck location is chosen to be vertically aligned with this, so the animation
|
|
174
|
+
* goes straight up or down.
|
|
175
|
+
*/
|
|
176
|
+
function getOffDeckCoordinates(
|
|
177
|
+
deckDefinition: DeckDefinition,
|
|
178
|
+
labwareDefinition: LabwareDefinition,
|
|
179
|
+
onDeckCoordinates: Vector3D,
|
|
180
|
+
extraMargin: number
|
|
181
|
+
): Vector3D {
|
|
182
|
+
const labwareViewBox = getLabwareViewBox(labwareDefinition)
|
|
183
|
+
const labwareOriginToLabwareMaxY =
|
|
184
|
+
labwareViewBox.minY + labwareViewBox.yDimension
|
|
185
|
+
const margin = labwareOriginToLabwareMaxY + extraMargin
|
|
186
|
+
const deckMinY = deckDefinition.cornerOffsetFromOrigin[1]
|
|
187
|
+
const y = deckMinY - margin - labwareOriginToLabwareMaxY
|
|
188
|
+
return {
|
|
189
|
+
...onDeckCoordinates,
|
|
190
|
+
y,
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
253
194
|
function usePositionChangeReset(
|
|
254
195
|
initialPosition: { x: number; y: number },
|
|
255
196
|
finalPosition: { x: number; y: number }
|
|
@@ -281,6 +222,31 @@ function usePositionChangeReset(
|
|
|
281
222
|
|
|
282
223
|
return shouldReset
|
|
283
224
|
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The splash SVG is made for its origin to be placed at the -x,-y corner of a labware
|
|
228
|
+
* (or the slot that the labware is in). If this component is placed at the labware
|
|
229
|
+
* origin and the splash is placed inside this component, it will align the splash
|
|
230
|
+
* accordingly.
|
|
231
|
+
*/
|
|
232
|
+
function AlignSplashToLabware(
|
|
233
|
+
props: PropsWithChildren<{ labwareDefinition: LabwareDefinition }>
|
|
234
|
+
): JSX.Element {
|
|
235
|
+
const { labwareDefinition, children } = props
|
|
236
|
+
const labwareViewBox = getLabwareViewBox(labwareDefinition)
|
|
237
|
+
const labwareOriginToFrontLeftCorner = {
|
|
238
|
+
x: labwareViewBox.minX,
|
|
239
|
+
y: labwareViewBox.minY,
|
|
240
|
+
}
|
|
241
|
+
return (
|
|
242
|
+
<g
|
|
243
|
+
transform={`translate(${labwareOriginToFrontLeftCorner.x} ${labwareOriginToFrontLeftCorner.y})`}
|
|
244
|
+
>
|
|
245
|
+
{children}
|
|
246
|
+
</g>
|
|
247
|
+
)
|
|
248
|
+
}
|
|
249
|
+
|
|
284
250
|
/**
|
|
285
251
|
* These animated components needs to be split out because react-spring and styled-components don't play nice
|
|
286
252
|
* @see https://github.com/pmndrs/react-spring/issues/1515 */
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { withStyleProps } from '../../hocs/withStyleProps'
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { HTMLAttributes, ReactNode } from 'react'
|
|
4
|
+
import type { StyleProps } from '../../primitives'
|
|
4
5
|
|
|
6
|
+
export type PositionType = 'absolute' | 'relative' | 'fixed'
|
|
5
7
|
export interface RobotCoordsForeignDivProps {
|
|
6
8
|
width?: string | number
|
|
7
9
|
height?: string | number
|
|
@@ -9,43 +11,49 @@ export interface RobotCoordsForeignDivProps {
|
|
|
9
11
|
y?: string | number
|
|
10
12
|
children?: ReactNode
|
|
11
13
|
outerProps?: any
|
|
12
|
-
innerDivProps?:
|
|
14
|
+
innerDivProps?: StyleProps
|
|
15
|
+
innerDivEvents?: HTMLAttributes<HTMLDivElement>
|
|
13
16
|
transformWithSVG?: boolean
|
|
14
17
|
extraTransform?: string
|
|
15
|
-
/** optional data-testid to test foreignObjects in cypress */
|
|
16
18
|
dataTestId?: string
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
const StyledDiv = withStyleProps('div' as any)
|
|
22
|
+
|
|
23
|
+
export const RobotCoordsForeignDiv = ({
|
|
24
|
+
children,
|
|
25
|
+
x = 0,
|
|
26
|
+
y = 0,
|
|
27
|
+
height = '100%',
|
|
28
|
+
width = '100%',
|
|
29
|
+
outerProps,
|
|
30
|
+
innerDivProps = {},
|
|
31
|
+
transformWithSVG = false,
|
|
32
|
+
extraTransform = '',
|
|
33
|
+
dataTestId = '',
|
|
34
|
+
innerDivEvents,
|
|
35
|
+
}: RobotCoordsForeignDivProps): JSX.Element => {
|
|
36
|
+
const svgTransform = `scale(1, -1) ${extraTransform}`
|
|
34
37
|
|
|
35
|
-
const transform = `scale(1, -1) ${extraTransform}`
|
|
36
38
|
return (
|
|
37
39
|
<foreignObject
|
|
38
40
|
data-testid={dataTestId}
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
+
x={x}
|
|
42
|
+
y={y}
|
|
43
|
+
height={height}
|
|
44
|
+
width={width}
|
|
45
|
+
transform={transformWithSVG ? svgTransform : extraTransform}
|
|
46
|
+
{...outerProps}
|
|
41
47
|
>
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
<StyledDiv
|
|
49
|
+
{...innerDivEvents}
|
|
50
|
+
style={{
|
|
51
|
+
...innerDivProps,
|
|
52
|
+
...(transformWithSVG ? { transform: svgTransform } : {}),
|
|
53
|
+
}}
|
|
46
54
|
>
|
|
47
55
|
{children}
|
|
48
|
-
</
|
|
56
|
+
</StyledDiv>
|
|
49
57
|
</foreignObject>
|
|
50
58
|
)
|
|
51
59
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { withStyleProps } from '../../hocs/withStyleProps'
|
|
2
|
+
import { ForeignObject } from '../../primitives'
|
|
3
|
+
import styles from './deck.module.css'
|
|
2
4
|
|
|
3
|
-
import {
|
|
5
|
+
import type { HTMLAttributes, ReactNode } from 'react'
|
|
6
|
+
import type { StyleProps } from '../../primitives'
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
export type FlexDirection = 'column' | 'row'
|
|
9
|
+
|
|
10
|
+
const StyledDiv = withStyleProps('div' as any)
|
|
6
11
|
|
|
7
12
|
export interface RobotCoordsForeignObjectProps {
|
|
8
13
|
width: string | number
|
|
@@ -10,35 +15,33 @@ export interface RobotCoordsForeignObjectProps {
|
|
|
10
15
|
x: string | number
|
|
11
16
|
y: string | number
|
|
12
17
|
children?: ReactNode
|
|
13
|
-
foreignObjectProps?:
|
|
14
|
-
|
|
18
|
+
foreignObjectProps?: StyleProps
|
|
19
|
+
foreignObjectEvents?: HTMLAttributes<HTMLDivElement>
|
|
20
|
+
flexProps?: StyleProps
|
|
21
|
+
flexEvents?: HTMLAttributes<HTMLDivElement>
|
|
15
22
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
flexProps = {},
|
|
28
|
-
} = props
|
|
29
|
-
|
|
23
|
+
export const RobotCoordsForeignObject = ({
|
|
24
|
+
children,
|
|
25
|
+
x,
|
|
26
|
+
y,
|
|
27
|
+
height,
|
|
28
|
+
width,
|
|
29
|
+
foreignObjectEvents,
|
|
30
|
+
foreignObjectProps = {},
|
|
31
|
+
flexProps,
|
|
32
|
+
flexEvents = {},
|
|
33
|
+
}: RobotCoordsForeignObjectProps): JSX.Element => {
|
|
30
34
|
return (
|
|
31
|
-
<ForeignObject {
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
transform: scale(1, -1);
|
|
37
|
-
`}
|
|
38
|
-
{...foreignObjectProps}
|
|
35
|
+
<ForeignObject x={x} y={y} height={height} width={width}>
|
|
36
|
+
<StyledDiv
|
|
37
|
+
className={styles.robot_coords_foreign_object_container}
|
|
38
|
+
{...foreignObjectEvents}
|
|
39
|
+
style={foreignObjectProps}
|
|
39
40
|
>
|
|
40
|
-
<
|
|
41
|
-
|
|
41
|
+
<StyledDiv {...flexEvents} style={flexProps}>
|
|
42
|
+
{children}
|
|
43
|
+
</StyledDiv>
|
|
44
|
+
</StyledDiv>
|
|
42
45
|
</ForeignObject>
|
|
43
46
|
)
|
|
44
47
|
}
|