@wandelbots/wandelbots-js-react-components 1.29.1 → 1.30.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/dist/index.cjs +30 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5281 -5097
- package/dist/index.js.map +1 -1
- package/dist/src/Setup.d.ts.map +1 -0
- package/dist/src/components/3d-viewport/CoordinateSystemTransform.d.ts.map +1 -0
- package/dist/src/components/3d-viewport/PresetEnvironment.d.ts.map +1 -0
- package/dist/src/components/3d-viewport/SafetyZonesRenderer.d.ts.map +1 -0
- package/dist/src/components/ConsoleFilter.d.ts.map +1 -0
- package/dist/src/components/CopyableText.d.ts.map +1 -0
- package/dist/src/components/LoadingButton.d.ts.map +1 -0
- package/dist/src/components/LoadingCover.d.ts.map +1 -0
- package/dist/src/components/SelectableFab.d.ts.map +1 -0
- package/dist/src/components/ThemeSelect.d.ts.map +1 -0
- package/dist/src/components/TransparentOverlay.d.ts.map +1 -0
- package/dist/{components → src/components}/VelocitySlider.d.ts +8 -1
- package/dist/src/components/VelocitySlider.d.ts.map +1 -0
- package/dist/src/components/experimental/utils/AdornedSelect.d.ts +8 -0
- package/dist/src/components/experimental/utils/AdornedSelect.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingActivationRequired.d.ts.map +1 -0
- package/dist/{components → src/components}/jogging/JoggingCartesianAxisControl.d.ts +3 -2
- package/dist/src/components/jogging/JoggingCartesianAxisControl.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingCartesianTab.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingFreedriveTab.d.ts.map +1 -0
- package/dist/{components → src/components}/jogging/JoggingJointLimitDetector.d.ts +1 -1
- package/dist/src/components/jogging/JoggingJointLimitDetector.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingJointRotationControl.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingJointTab.d.ts.map +1 -0
- package/dist/{components → src/components}/jogging/JoggingOptions.d.ts +1 -1
- package/dist/src/components/jogging/JoggingOptions.d.ts.map +1 -0
- package/dist/{components → src/components}/jogging/JoggingPanel.d.ts +3 -0
- package/dist/src/components/jogging/JoggingPanel.d.ts.map +1 -0
- package/dist/{components → src/components}/jogging/JoggingStore.d.ts +5 -3
- package/dist/src/components/jogging/JoggingStore.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingToggleButtonGroup.d.ts +2 -0
- package/dist/src/components/jogging/JoggingToggleButtonGroup.d.ts.map +1 -0
- package/dist/src/components/jogging/JoggingVelocitySlider.d.ts.map +1 -0
- package/dist/src/components/jogging/PoseCartesianValues.d.ts +7 -0
- package/dist/src/components/jogging/PoseCartesianValues.d.ts.map +1 -0
- package/dist/src/components/jogging/PoseJointValues.d.ts +7 -0
- package/dist/src/components/jogging/PoseJointValues.d.ts.map +1 -0
- package/dist/src/components/modal/NoMotionGroupModal.d.ts.map +1 -0
- package/dist/src/components/robots/ABB_1200_07_7.d.ts.map +1 -0
- package/dist/src/components/robots/ABB_1300_115_10.d.ts.map +1 -0
- package/dist/src/components/robots/AxisConfig.d.ts.map +1 -0
- package/dist/src/components/robots/DHRobot.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_ARC_Mate_100iD.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_ARC_Mate_120iD.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_CRX10iA.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_CRX10iAL.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_CRX20iAL.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_CRX25iA.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_CRX25iAL.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_LR_Mate_200iD.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_LR_Mate_200iD4S.d.ts.map +1 -0
- package/dist/src/components/robots/FANUC_LR_Mate_200iD7L.d.ts.map +1 -0
- package/dist/src/components/robots/KUKA_KR16_R2010_2.d.ts.map +1 -0
- package/dist/src/components/robots/KUKA_KR210_R2700.d.ts.map +1 -0
- package/dist/src/components/robots/KUKA_KR270_R2700.d.ts.map +1 -0
- package/dist/src/components/robots/KUKA_KR6_R700_2.d.ts.map +1 -0
- package/dist/src/components/robots/Robot.d.ts.map +1 -0
- package/dist/src/components/robots/RobotAnimator.d.ts.map +1 -0
- package/dist/src/components/robots/SupportedRobot.d.ts.map +1 -0
- package/dist/src/components/robots/UniversalRobots_UR10CB.d.ts.map +1 -0
- package/dist/src/components/robots/UniversalRobots_UR10e.d.ts.map +1 -0
- package/dist/src/components/robots/UniversalRobots_UR3CB.d.ts.map +1 -0
- package/dist/src/components/robots/UniversalRobots_UR3e.d.ts.map +1 -0
- package/dist/src/components/robots/UniversalRobots_UR5CB.d.ts.map +1 -0
- package/dist/src/components/robots/UniversalRobots_UR5e.d.ts.map +1 -0
- package/dist/src/components/robots/Yaskawa_AR1440.d.ts.map +1 -0
- package/dist/src/components/robots/Yaskawa_AR1730.d.ts.map +1 -0
- package/dist/src/components/robots/Yaskawa_AR2010.d.ts.map +1 -0
- package/dist/src/components/robots/Yaskawa_AR3120.d.ts.map +1 -0
- package/dist/src/components/robots/Yaskawa_AR900.d.ts.map +1 -0
- package/dist/src/components/robots/Yaskawa_GP50.d.ts.map +1 -0
- package/dist/src/components/robots/types.d.ts.map +1 -0
- package/dist/src/components/utils/converters.d.ts.map +1 -0
- package/dist/src/components/utils/errorHandling.d.ts.map +1 -0
- package/dist/src/components/utils/hooks.d.ts.map +1 -0
- package/dist/src/components/utils/robotTreeQuery.d.ts.map +1 -0
- package/dist/src/components/wandelscript-editor/WandelscriptEditor.d.ts.map +1 -0
- package/dist/src/components/wandelscript-editor/wandelscript.tmLanguage.d.ts.map +1 -0
- package/dist/src/externalizeComponent.d.ts.map +1 -0
- package/dist/src/i18n/config.d.ts.map +1 -0
- package/dist/src/icons/index.d.ts.map +1 -0
- package/dist/{index.d.ts → src/index.d.ts} +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/themes/createDarkTheme.d.ts.map +1 -0
- package/dist/src/themes/createLightTheme.d.ts.map +1 -0
- package/dist/{themes → src/themes}/themeTypes.d.ts +6 -1
- package/dist/src/themes/themeTypes.d.ts.map +1 -0
- package/dist/src/themes/theming.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/CopyableText.tsx +69 -12
- package/src/components/LoadingCover.tsx +4 -2
- package/src/components/VelocitySlider.tsx +47 -18
- package/src/components/experimental/utils/AdornedSelect.tsx +42 -0
- package/src/components/jogging/JoggingCartesianAxisControl.tsx +84 -51
- package/src/components/jogging/JoggingCartesianTab.tsx +97 -107
- package/src/components/jogging/JoggingJointLimitDetector.tsx +4 -1
- package/src/components/jogging/JoggingJointRotationControl.tsx +41 -22
- package/src/components/jogging/JoggingJointTab.tsx +34 -43
- package/src/components/jogging/JoggingOptions.tsx +110 -136
- package/src/components/jogging/JoggingPanel.tsx +17 -9
- package/src/components/jogging/JoggingStore.ts +5 -2
- package/src/components/jogging/JoggingToggleButtonGroup.tsx +25 -0
- package/src/components/jogging/JoggingVelocitySlider.tsx +18 -20
- package/src/components/jogging/PoseCartesianValues.tsx +43 -0
- package/src/components/jogging/PoseJointValues.tsx +40 -0
- package/src/components/robots/SupportedRobot.tsx +7 -1
- package/src/components/robots/UniversalRobots_UR10e.tsx +231 -171
- package/src/i18n/locales/de/translations.json +3 -1
- package/src/i18n/locales/en/translations.json +3 -1
- package/src/icons/jog-minus.svg +5 -0
- package/src/icons/jog-plus.svg +9 -0
- package/src/index.ts +2 -0
- package/src/themes/createDarkTheme.ts +19 -4
- package/src/themes/themeTypes.ts +6 -1
- package/dist/Setup.d.ts.map +0 -1
- package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts.map +0 -1
- package/dist/components/3d-viewport/PresetEnvironment.d.ts.map +0 -1
- package/dist/components/3d-viewport/SafetyZonesRenderer.d.ts.map +0 -1
- package/dist/components/ConsoleFilter.d.ts.map +0 -1
- package/dist/components/CopyableText.d.ts.map +0 -1
- package/dist/components/LoadingButton.d.ts.map +0 -1
- package/dist/components/LoadingCover.d.ts.map +0 -1
- package/dist/components/SelectableFab.d.ts.map +0 -1
- package/dist/components/ThemeSelect.d.ts.map +0 -1
- package/dist/components/TransparentOverlay.d.ts.map +0 -1
- package/dist/components/VelocitySlider.d.ts.map +0 -1
- package/dist/components/jogging/JoggingActivationRequired.d.ts.map +0 -1
- package/dist/components/jogging/JoggingCartesianAxisControl.d.ts.map +0 -1
- package/dist/components/jogging/JoggingCartesianTab.d.ts.map +0 -1
- package/dist/components/jogging/JoggingCartesianValues.d.ts +0 -7
- package/dist/components/jogging/JoggingCartesianValues.d.ts.map +0 -1
- package/dist/components/jogging/JoggingFreedriveTab.d.ts.map +0 -1
- package/dist/components/jogging/JoggingJointLimitDetector.d.ts.map +0 -1
- package/dist/components/jogging/JoggingJointRotationControl.d.ts.map +0 -1
- package/dist/components/jogging/JoggingJointTab.d.ts.map +0 -1
- package/dist/components/jogging/JoggingJointValues.d.ts +0 -7
- package/dist/components/jogging/JoggingJointValues.d.ts.map +0 -1
- package/dist/components/jogging/JoggingOptions.d.ts.map +0 -1
- package/dist/components/jogging/JoggingPanel.d.ts.map +0 -1
- package/dist/components/jogging/JoggingStore.d.ts.map +0 -1
- package/dist/components/jogging/JoggingVelocitySlider.d.ts.map +0 -1
- package/dist/components/modal/NoMotionGroupModal.d.ts.map +0 -1
- package/dist/components/robots/ABB_1200_07_7.d.ts.map +0 -1
- package/dist/components/robots/ABB_1300_115_10.d.ts.map +0 -1
- package/dist/components/robots/AxisConfig.d.ts.map +0 -1
- package/dist/components/robots/DHRobot.d.ts.map +0 -1
- package/dist/components/robots/FANUC_ARC_Mate_100iD.d.ts.map +0 -1
- package/dist/components/robots/FANUC_ARC_Mate_120iD.d.ts.map +0 -1
- package/dist/components/robots/FANUC_CRX10iA.d.ts.map +0 -1
- package/dist/components/robots/FANUC_CRX10iAL.d.ts.map +0 -1
- package/dist/components/robots/FANUC_CRX20iAL.d.ts.map +0 -1
- package/dist/components/robots/FANUC_CRX25iA.d.ts.map +0 -1
- package/dist/components/robots/FANUC_CRX25iAL.d.ts.map +0 -1
- package/dist/components/robots/FANUC_LR_Mate_200iD.d.ts.map +0 -1
- package/dist/components/robots/FANUC_LR_Mate_200iD4S.d.ts.map +0 -1
- package/dist/components/robots/FANUC_LR_Mate_200iD7L.d.ts.map +0 -1
- package/dist/components/robots/KUKA_KR16_R2010_2.d.ts.map +0 -1
- package/dist/components/robots/KUKA_KR210_R2700.d.ts.map +0 -1
- package/dist/components/robots/KUKA_KR270_R2700.d.ts.map +0 -1
- package/dist/components/robots/KUKA_KR6_R700_2.d.ts.map +0 -1
- package/dist/components/robots/Robot.d.ts.map +0 -1
- package/dist/components/robots/RobotAnimator.d.ts.map +0 -1
- package/dist/components/robots/SupportedRobot.d.ts.map +0 -1
- package/dist/components/robots/UniversalRobots_UR10CB.d.ts.map +0 -1
- package/dist/components/robots/UniversalRobots_UR10e.d.ts.map +0 -1
- package/dist/components/robots/UniversalRobots_UR3CB.d.ts.map +0 -1
- package/dist/components/robots/UniversalRobots_UR3e.d.ts.map +0 -1
- package/dist/components/robots/UniversalRobots_UR5CB.d.ts.map +0 -1
- package/dist/components/robots/UniversalRobots_UR5e.d.ts.map +0 -1
- package/dist/components/robots/Yaskawa_AR1440.d.ts.map +0 -1
- package/dist/components/robots/Yaskawa_AR1730.d.ts.map +0 -1
- package/dist/components/robots/Yaskawa_AR2010.d.ts.map +0 -1
- package/dist/components/robots/Yaskawa_AR3120.d.ts.map +0 -1
- package/dist/components/robots/Yaskawa_AR900.d.ts.map +0 -1
- package/dist/components/robots/Yaskawa_GP50.d.ts.map +0 -1
- package/dist/components/robots/types.d.ts.map +0 -1
- package/dist/components/utils/converters.d.ts.map +0 -1
- package/dist/components/utils/errorHandling.d.ts.map +0 -1
- package/dist/components/utils/hooks.d.ts.map +0 -1
- package/dist/components/utils/robotTreeQuery.d.ts.map +0 -1
- package/dist/components/wandelscript-editor/WandelscriptEditor.d.ts.map +0 -1
- package/dist/components/wandelscript-editor/wandelscript.tmLanguage.d.ts.map +0 -1
- package/dist/externalizeComponent.d.ts.map +0 -1
- package/dist/i18n/config.d.ts.map +0 -1
- package/dist/icons/index.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/themes/createDarkTheme.d.ts.map +0 -1
- package/dist/themes/createLightTheme.d.ts.map +0 -1
- package/dist/themes/themeTypes.d.ts.map +0 -1
- package/dist/themes/theming.d.ts.map +0 -1
- package/src/components/jogging/JoggingCartesianValues.tsx +0 -50
- package/src/components/jogging/JoggingJointValues.tsx +0 -45
- /package/dist/{Setup.d.ts → src/Setup.d.ts} +0 -0
- /package/dist/{components → src/components}/3d-viewport/CoordinateSystemTransform.d.ts +0 -0
- /package/dist/{components → src/components}/3d-viewport/PresetEnvironment.d.ts +0 -0
- /package/dist/{components → src/components}/3d-viewport/SafetyZonesRenderer.d.ts +0 -0
- /package/dist/{components → src/components}/ConsoleFilter.d.ts +0 -0
- /package/dist/{components → src/components}/CopyableText.d.ts +0 -0
- /package/dist/{components → src/components}/LoadingButton.d.ts +0 -0
- /package/dist/{components → src/components}/LoadingCover.d.ts +0 -0
- /package/dist/{components → src/components}/SelectableFab.d.ts +0 -0
- /package/dist/{components → src/components}/ThemeSelect.d.ts +0 -0
- /package/dist/{components → src/components}/TransparentOverlay.d.ts +0 -0
- /package/dist/{components → src/components}/jogging/JoggingActivationRequired.d.ts +0 -0
- /package/dist/{components → src/components}/jogging/JoggingCartesianTab.d.ts +0 -0
- /package/dist/{components → src/components}/jogging/JoggingFreedriveTab.d.ts +0 -0
- /package/dist/{components → src/components}/jogging/JoggingJointRotationControl.d.ts +0 -0
- /package/dist/{components → src/components}/jogging/JoggingJointTab.d.ts +0 -0
- /package/dist/{components → src/components}/jogging/JoggingVelocitySlider.d.ts +0 -0
- /package/dist/{components → src/components}/modal/NoMotionGroupModal.d.ts +0 -0
- /package/dist/{components → src/components}/robots/ABB_1200_07_7.d.ts +0 -0
- /package/dist/{components → src/components}/robots/ABB_1300_115_10.d.ts +0 -0
- /package/dist/{components → src/components}/robots/AxisConfig.d.ts +0 -0
- /package/dist/{components → src/components}/robots/DHRobot.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_ARC_Mate_100iD.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_ARC_Mate_120iD.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_CRX10iA.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_CRX10iAL.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_CRX20iAL.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_CRX25iA.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_CRX25iAL.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_LR_Mate_200iD.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_LR_Mate_200iD4S.d.ts +0 -0
- /package/dist/{components → src/components}/robots/FANUC_LR_Mate_200iD7L.d.ts +0 -0
- /package/dist/{components → src/components}/robots/KUKA_KR16_R2010_2.d.ts +0 -0
- /package/dist/{components → src/components}/robots/KUKA_KR210_R2700.d.ts +0 -0
- /package/dist/{components → src/components}/robots/KUKA_KR270_R2700.d.ts +0 -0
- /package/dist/{components → src/components}/robots/KUKA_KR6_R700_2.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Robot.d.ts +0 -0
- /package/dist/{components → src/components}/robots/RobotAnimator.d.ts +0 -0
- /package/dist/{components → src/components}/robots/SupportedRobot.d.ts +0 -0
- /package/dist/{components → src/components}/robots/UniversalRobots_UR10CB.d.ts +0 -0
- /package/dist/{components → src/components}/robots/UniversalRobots_UR10e.d.ts +0 -0
- /package/dist/{components → src/components}/robots/UniversalRobots_UR3CB.d.ts +0 -0
- /package/dist/{components → src/components}/robots/UniversalRobots_UR3e.d.ts +0 -0
- /package/dist/{components → src/components}/robots/UniversalRobots_UR5CB.d.ts +0 -0
- /package/dist/{components → src/components}/robots/UniversalRobots_UR5e.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Yaskawa_AR1440.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Yaskawa_AR1730.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Yaskawa_AR2010.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Yaskawa_AR3120.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Yaskawa_AR900.d.ts +0 -0
- /package/dist/{components → src/components}/robots/Yaskawa_GP50.d.ts +0 -0
- /package/dist/{components → src/components}/robots/types.d.ts +0 -0
- /package/dist/{components → src/components}/utils/converters.d.ts +0 -0
- /package/dist/{components → src/components}/utils/errorHandling.d.ts +0 -0
- /package/dist/{components → src/components}/utils/hooks.d.ts +0 -0
- /package/dist/{components → src/components}/utils/robotTreeQuery.d.ts +0 -0
- /package/dist/{components → src/components}/wandelscript-editor/WandelscriptEditor.d.ts +0 -0
- /package/dist/{components → src/components}/wandelscript-editor/wandelscript.tmLanguage.d.ts +0 -0
- /package/dist/{externalizeComponent.d.ts → src/externalizeComponent.d.ts} +0 -0
- /package/dist/{i18n → src/i18n}/config.d.ts +0 -0
- /package/dist/{icons → src/icons}/index.d.ts +0 -0
- /package/dist/{themes → src/themes}/createDarkTheme.d.ts +0 -0
- /package/dist/{themes → src/themes}/createLightTheme.d.ts +0 -0
- /package/dist/{themes → src/themes}/theming.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { forwardRef } from "react"
|
|
1
|
+
import { Stack, Tooltip, Typography, useTheme } from "@mui/material"
|
|
2
|
+
import { forwardRef, useEffect, useState } from "react"
|
|
3
3
|
|
|
4
4
|
export const CopyableText = forwardRef(
|
|
5
5
|
(
|
|
@@ -12,19 +12,76 @@ export const CopyableText = forwardRef(
|
|
|
12
12
|
},
|
|
13
13
|
ref: React.ForwardedRef<HTMLDivElement>,
|
|
14
14
|
) => {
|
|
15
|
+
const theme = useTheme()
|
|
16
|
+
const [tooltipOpen, setTooltipOpen] = useState(false)
|
|
17
|
+
|
|
18
|
+
async function onCopyText(): Promise<boolean> {
|
|
19
|
+
if (!ref || !("current" in ref)) {
|
|
20
|
+
console.warn("No copy target found")
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
await navigator.clipboard.writeText(value)
|
|
25
|
+
console.log("Copied!")
|
|
26
|
+
setTooltipOpen(true)
|
|
27
|
+
return true
|
|
28
|
+
} catch (err) {
|
|
29
|
+
// Direct clipboard copy is not available in non-secure contexts
|
|
30
|
+
console.error(err)
|
|
31
|
+
|
|
32
|
+
// Let's fall back to selecting the text so the user can manually copy easily
|
|
33
|
+
const selection = window.getSelection()!
|
|
34
|
+
const range = document.createRange()
|
|
35
|
+
range.selectNodeContents(ref.current as any)
|
|
36
|
+
selection.removeAllRanges()
|
|
37
|
+
selection.addRange(range)
|
|
38
|
+
}
|
|
39
|
+
return false
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (!tooltipOpen) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
const timeoutId = setTimeout(() => setTooltipOpen(false), 3000)
|
|
47
|
+
return () => {
|
|
48
|
+
timeoutId ? clearTimeout(timeoutId) : {}
|
|
49
|
+
}
|
|
50
|
+
}, [tooltipOpen])
|
|
51
|
+
|
|
15
52
|
return (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
ref={ref}
|
|
53
|
+
<Tooltip open={tooltipOpen} title="Copied!">
|
|
54
|
+
<Stack
|
|
55
|
+
justifyContent="center"
|
|
20
56
|
sx={{
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
57
|
+
height: "100%",
|
|
58
|
+
boxSizing: "border-box",
|
|
59
|
+
padding: "6px 12px",
|
|
60
|
+
background: theme.palette.backgroundPaperElevation?.[8],
|
|
61
|
+
borderRadius: "10px",
|
|
62
|
+
minWidth: "0",
|
|
63
|
+
cursor: "pointer",
|
|
24
64
|
}}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
65
|
+
onClick={() => onCopyText()}
|
|
66
|
+
>
|
|
67
|
+
<Typography
|
|
68
|
+
ref={ref}
|
|
69
|
+
align="center"
|
|
70
|
+
sx={{
|
|
71
|
+
pointerEvents: "none",
|
|
72
|
+
fontSize: "12px",
|
|
73
|
+
color: theme.palette.text.primary,
|
|
74
|
+
whiteSpace: "nowrap",
|
|
75
|
+
minWidth: 0,
|
|
76
|
+
textOverflow: "ellipsis",
|
|
77
|
+
width: "100%",
|
|
78
|
+
overflow: "hidden",
|
|
79
|
+
}}
|
|
80
|
+
>
|
|
81
|
+
{value}
|
|
82
|
+
</Typography>
|
|
83
|
+
</Stack>
|
|
84
|
+
</Tooltip>
|
|
28
85
|
)
|
|
29
86
|
},
|
|
30
87
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { makeErrorMessage } from "./utils/errorHandling"
|
|
2
1
|
import { capitalize, CircularProgress, Stack, useTheme } from "@mui/material"
|
|
3
2
|
import { lowerFirst } from "lodash-es"
|
|
4
3
|
import { useEffect, useState } from "react"
|
|
4
|
+
import { makeErrorMessage } from "./utils/errorHandling"
|
|
5
5
|
|
|
6
6
|
export const LoadingCover = (props: {
|
|
7
7
|
message?: string
|
|
@@ -11,6 +11,7 @@ export const LoadingCover = (props: {
|
|
|
11
11
|
const softTimeout = props.softTimeout || 3000
|
|
12
12
|
|
|
13
13
|
const [showSlowLoadingMessage, setShowSlowLoadingMessage] = useState(false)
|
|
14
|
+
const theme = useTheme()
|
|
14
15
|
|
|
15
16
|
useEffect(() => {
|
|
16
17
|
const timeout = setTimeout(() => {
|
|
@@ -26,6 +27,7 @@ export const LoadingCover = (props: {
|
|
|
26
27
|
height="100%"
|
|
27
28
|
alignItems="center"
|
|
28
29
|
justifyContent="center"
|
|
30
|
+
sx={{ color: theme.palette.text.primary }}
|
|
29
31
|
>
|
|
30
32
|
{props.error ? (
|
|
31
33
|
<LoadingErrorMessage
|
|
@@ -40,7 +42,7 @@ export const LoadingCover = (props: {
|
|
|
40
42
|
sx={{
|
|
41
43
|
visibility: showSlowLoadingMessage ? "visible" : "hidden",
|
|
42
44
|
marginTop: "1rem",
|
|
43
|
-
color:
|
|
45
|
+
color: theme.palette.text.secondary,
|
|
44
46
|
}}
|
|
45
47
|
>
|
|
46
48
|
{"This is taking longer than expected..."}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Typography, useTheme } from "@mui/material"
|
|
1
|
+
import { Stack, Typography, useTheme, type SxProps } from "@mui/material"
|
|
2
2
|
import Slider from "@mui/material/Slider"
|
|
3
3
|
import isNumber from "lodash-es/isNumber"
|
|
4
4
|
import { observer } from "mobx-react-lite"
|
|
5
|
+
import type { ReactNode } from "react"
|
|
5
6
|
|
|
6
7
|
type VelocitySliderProps = {
|
|
7
8
|
min: number
|
|
@@ -9,16 +10,13 @@ type VelocitySliderProps = {
|
|
|
9
10
|
velocity: number
|
|
10
11
|
onVelocityChange: (newVelocity: number) => void
|
|
11
12
|
disabled?: boolean
|
|
12
|
-
|
|
13
|
+
renderValue?: (value: number) => ReactNode
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
/** A slider for controlling the movement velocity of a robot */
|
|
16
17
|
export const VelocitySlider = observer((props: VelocitySliderProps) => {
|
|
17
18
|
const theme = useTheme()
|
|
18
19
|
|
|
19
|
-
const valueLabelFormat =
|
|
20
|
-
props.valueLabelFormat || ((value: number) => `${value}`)
|
|
21
|
-
|
|
22
20
|
function onSliderChange(_event: Event, newVelocity: number | number[]) {
|
|
23
21
|
if (newVelocity === props.velocity || !isNumber(newVelocity)) return
|
|
24
22
|
|
|
@@ -26,18 +24,7 @@ export const VelocitySlider = observer((props: VelocitySliderProps) => {
|
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
return (
|
|
29
|
-
|
|
30
|
-
<Typography
|
|
31
|
-
sx={{
|
|
32
|
-
textAlign: "center",
|
|
33
|
-
fontSize: "14px",
|
|
34
|
-
opacity: 0.8,
|
|
35
|
-
lineHeight: 1,
|
|
36
|
-
color: theme.palette.text.primary,
|
|
37
|
-
}}
|
|
38
|
-
>
|
|
39
|
-
{valueLabelFormat(props.velocity)}
|
|
40
|
-
</Typography>
|
|
27
|
+
<Stack direction="row" gap={2}>
|
|
41
28
|
<Slider
|
|
42
29
|
value={props.velocity}
|
|
43
30
|
color="secondary"
|
|
@@ -54,6 +41,48 @@ export const VelocitySlider = observer((props: VelocitySliderProps) => {
|
|
|
54
41
|
},
|
|
55
42
|
}}
|
|
56
43
|
/>
|
|
57
|
-
|
|
44
|
+
{props.renderValue ? (
|
|
45
|
+
props.renderValue(props.velocity)
|
|
46
|
+
) : (
|
|
47
|
+
<VelocitySliderLabel value={props.velocity.toString()} />
|
|
48
|
+
)}
|
|
49
|
+
</Stack>
|
|
58
50
|
)
|
|
59
51
|
})
|
|
52
|
+
|
|
53
|
+
type VelocitySliderLabelProps = {
|
|
54
|
+
value: string
|
|
55
|
+
sx?: SxProps
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function VelocitySliderLabel({ value, sx }: VelocitySliderLabelProps) {
|
|
59
|
+
const theme = useTheme()
|
|
60
|
+
return (
|
|
61
|
+
<Stack
|
|
62
|
+
direction={"row"}
|
|
63
|
+
justifyContent={"center"}
|
|
64
|
+
gap={"5px"}
|
|
65
|
+
sx={{
|
|
66
|
+
padding: "6px 12px",
|
|
67
|
+
background: theme.palette.backgroundPaperElevation?.[8],
|
|
68
|
+
borderRadius: "10px",
|
|
69
|
+
minWidth: "111px",
|
|
70
|
+
...sx,
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
73
|
+
<Typography
|
|
74
|
+
component="span"
|
|
75
|
+
sx={{
|
|
76
|
+
textAlign: "right",
|
|
77
|
+
fontSize: "14px",
|
|
78
|
+
opacity: 0.8,
|
|
79
|
+
lineHeight: 1,
|
|
80
|
+
color: theme.palette.text.primary,
|
|
81
|
+
whiteSpace: "nowrap",
|
|
82
|
+
}}
|
|
83
|
+
>
|
|
84
|
+
{value}
|
|
85
|
+
</Typography>
|
|
86
|
+
</Stack>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FormControl,
|
|
3
|
+
InputLabel,
|
|
4
|
+
Select,
|
|
5
|
+
styled,
|
|
6
|
+
type SelectProps,
|
|
7
|
+
} from "@mui/material"
|
|
8
|
+
|
|
9
|
+
const AdornedFormControl = styled(FormControl)(({ theme }) => ({
|
|
10
|
+
"&.MuiFormControl-root": {
|
|
11
|
+
".MuiSelect-select": {
|
|
12
|
+
paddingTop: "20px",
|
|
13
|
+
paddingLeft: "12px",
|
|
14
|
+
},
|
|
15
|
+
label: {
|
|
16
|
+
pointerEvents: "none",
|
|
17
|
+
fontSize: "16px",
|
|
18
|
+
},
|
|
19
|
+
".MuiInputLabel-root": {
|
|
20
|
+
"&.Mui-focused": {
|
|
21
|
+
color: theme.palette.text.primary,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
}))
|
|
26
|
+
|
|
27
|
+
type AdornedSelectProps = {
|
|
28
|
+
labelValue: string
|
|
29
|
+
labelId: string
|
|
30
|
+
} & SelectProps
|
|
31
|
+
|
|
32
|
+
export default function AdornedSelect({
|
|
33
|
+
labelValue,
|
|
34
|
+
...props
|
|
35
|
+
}: AdornedSelectProps) {
|
|
36
|
+
return (
|
|
37
|
+
<AdornedFormControl fullWidth variant="filled">
|
|
38
|
+
<InputLabel id={props.labelId}>{labelValue}</InputLabel>
|
|
39
|
+
<Select {...props} />
|
|
40
|
+
</AdornedFormControl>
|
|
41
|
+
)
|
|
42
|
+
}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { IconButton, Typography } from "@mui/material"
|
|
1
|
+
import { IconButton, Typography, useTheme } from "@mui/material"
|
|
3
2
|
import Stack from "@mui/material/Stack"
|
|
4
3
|
import { observer } from "mobx-react-lite"
|
|
5
|
-
import { useRef, type ReactNode } from "react"
|
|
4
|
+
import React, { useRef, useState, type ReactNode } from "react"
|
|
6
5
|
import { externalizeComponent } from "../../externalizeComponent"
|
|
6
|
+
import JogMinus from "../../icons/jog-minus.svg"
|
|
7
|
+
import JogPlus from "../../icons/jog-plus.svg"
|
|
7
8
|
import type { AxisControlComponentColors } from "../../themes/themeTypes"
|
|
8
9
|
import { useAnimationFrame } from "../utils/hooks"
|
|
9
10
|
|
|
11
|
+
type Direction = "+" | "-"
|
|
12
|
+
|
|
10
13
|
type JoggingCartesianAxisControlProps = {
|
|
11
14
|
colors?: AxisControlComponentColors
|
|
12
15
|
label: ReactNode
|
|
13
16
|
getDisplayedValue: () => string
|
|
14
|
-
startJogging: (direction:
|
|
17
|
+
startJogging: (direction: Direction) => void
|
|
15
18
|
stopJogging: () => void
|
|
16
19
|
disabled?: boolean
|
|
17
20
|
} & React.ComponentProps<typeof Stack>
|
|
@@ -35,54 +38,76 @@ export const JoggingCartesianAxisControl = externalizeComponent(
|
|
|
35
38
|
|
|
36
39
|
element.textContent = displayValue
|
|
37
40
|
})
|
|
41
|
+
const theme = useTheme()
|
|
42
|
+
const [borderColor, setBorderColor] = useState(colors?.borderColor)
|
|
38
43
|
|
|
39
44
|
const valueContainerRef = useRef<HTMLParagraphElement>(null)
|
|
40
45
|
|
|
41
|
-
function onPointerDownMinus(ev: React.PointerEvent) {
|
|
42
|
-
if (disabled) return
|
|
43
|
-
|
|
44
|
-
// Stop right click from triggering jog
|
|
45
|
-
if (ev.button === 0) startJogging("-")
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function onPointerDownPlus(ev: React.PointerEvent) {
|
|
49
|
-
if (disabled) return
|
|
50
|
-
|
|
51
|
-
if (ev.button === 0) startJogging("+")
|
|
52
|
-
}
|
|
53
|
-
|
|
54
46
|
if (!colors) {
|
|
55
47
|
colors = {
|
|
56
48
|
color: "#fff",
|
|
57
49
|
backgroundColor: "#000",
|
|
58
50
|
borderColor: "#000",
|
|
59
|
-
buttonBackgroundColor:
|
|
51
|
+
buttonBackgroundColor: {
|
|
52
|
+
disabled: "#000",
|
|
53
|
+
default: "#000",
|
|
54
|
+
hovered: "#000",
|
|
55
|
+
pressed: "#000",
|
|
56
|
+
},
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
|
|
60
|
+
const SxAxisControlButton = {
|
|
61
|
+
width: "55px",
|
|
62
|
+
backgroundColor: colors.buttonBackgroundColor?.default,
|
|
63
|
+
color: colors.color,
|
|
64
|
+
alignContent: "center",
|
|
65
|
+
fontSize: "37px",
|
|
66
|
+
"&:hover": {
|
|
67
|
+
backgroundColor: colors.buttonBackgroundColor?.hovered,
|
|
68
|
+
},
|
|
69
|
+
"&:active": {
|
|
70
|
+
backgroundColor: colors.buttonBackgroundColor?.pressed,
|
|
71
|
+
},
|
|
72
|
+
":disabled": {
|
|
73
|
+
backgroundColor: colors.buttonBackgroundColor?.disabled,
|
|
74
|
+
"svg path": { fill: theme.palette.action.disabled },
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function onPointerDown(ev: React.PointerEvent, direction: Direction) {
|
|
79
|
+
if (disabled) {
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
setBorderColor(colors?.buttonBackgroundColor?.pressed)
|
|
83
|
+
if (ev.button === 0) {
|
|
84
|
+
startJogging(direction)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function onPointerUpOrOut() {
|
|
89
|
+
setBorderColor(colors?.borderColor)
|
|
90
|
+
stopJogging()
|
|
91
|
+
}
|
|
92
|
+
|
|
63
93
|
return (
|
|
64
|
-
<Stack height="
|
|
94
|
+
<Stack height="64px" direction="row" justifyContent="center" {...rest}>
|
|
65
95
|
<IconButton
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
96
|
+
disabled={disabled}
|
|
97
|
+
disableRipple
|
|
98
|
+
onPointerDown={(ev: React.PointerEvent) => onPointerDown(ev, "-")}
|
|
99
|
+
onPointerUp={onPointerUpOrOut}
|
|
100
|
+
onPointerOut={onPointerUpOrOut}
|
|
69
101
|
size="large"
|
|
70
102
|
sx={{
|
|
71
|
-
|
|
72
|
-
backgroundColor: colors.buttonBackgroundColor,
|
|
73
|
-
color: colors.color,
|
|
74
|
-
alignContent: "center",
|
|
75
|
-
fontSize: "37px",
|
|
103
|
+
...SxAxisControlButton,
|
|
76
104
|
borderRadius: "16px 0px 0px 16px",
|
|
77
|
-
borderLeft: `2px solid ${
|
|
78
|
-
borderBottom: `2px solid ${
|
|
79
|
-
borderTop: `2px solid ${
|
|
80
|
-
":hover": {
|
|
81
|
-
backgroundColor: colors.buttonBackgroundColor,
|
|
82
|
-
},
|
|
105
|
+
borderLeft: `2px solid ${borderColor ?? "#fff"}`,
|
|
106
|
+
borderBottom: `2px solid ${borderColor ?? "#fff"}`,
|
|
107
|
+
borderTop: `2px solid ${borderColor ?? "#fff"}`,
|
|
83
108
|
}}
|
|
84
109
|
>
|
|
85
|
-
<
|
|
110
|
+
<JogMinus />
|
|
86
111
|
</IconButton>
|
|
87
112
|
|
|
88
113
|
<Stack
|
|
@@ -93,6 +118,8 @@ export const JoggingCartesianAxisControl = externalizeComponent(
|
|
|
93
118
|
alignItems: "center",
|
|
94
119
|
justifyContent: "center",
|
|
95
120
|
opacity: "0.9",
|
|
121
|
+
borderBottom: `2px solid ${borderColor ?? "#fff"}`,
|
|
122
|
+
borderTop: `2px solid ${borderColor ?? "#fff"}`,
|
|
96
123
|
}}
|
|
97
124
|
>
|
|
98
125
|
<Stack
|
|
@@ -101,7 +128,17 @@ export const JoggingCartesianAxisControl = externalizeComponent(
|
|
|
101
128
|
alignItems="center"
|
|
102
129
|
justifyItems="center"
|
|
103
130
|
spacing={1}
|
|
104
|
-
sx={{
|
|
131
|
+
sx={{
|
|
132
|
+
userSelect: "none",
|
|
133
|
+
color: colors.color,
|
|
134
|
+
".MuiTypography-root": {
|
|
135
|
+
fontWeight: 700,
|
|
136
|
+
...(disabled ? { color: theme.palette.action.disabled } : {}),
|
|
137
|
+
},
|
|
138
|
+
...(disabled
|
|
139
|
+
? { "svg path": { fill: theme.palette.action.disabled } }
|
|
140
|
+
: {}),
|
|
141
|
+
}}
|
|
105
142
|
>
|
|
106
143
|
{label}
|
|
107
144
|
</Stack>
|
|
@@ -109,7 +146,8 @@ export const JoggingCartesianAxisControl = externalizeComponent(
|
|
|
109
146
|
height="22px"
|
|
110
147
|
sx={{
|
|
111
148
|
fontSize: "15px",
|
|
112
|
-
color: colors.color,
|
|
149
|
+
color: disabled ? theme.palette.action.disabled : colors.color,
|
|
150
|
+
fontWeight: 700,
|
|
113
151
|
}}
|
|
114
152
|
ref={valueContainerRef}
|
|
115
153
|
>
|
|
@@ -118,26 +156,21 @@ export const JoggingCartesianAxisControl = externalizeComponent(
|
|
|
118
156
|
</Stack>
|
|
119
157
|
|
|
120
158
|
<IconButton
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
159
|
+
disableRipple
|
|
160
|
+
disabled={disabled}
|
|
161
|
+
onPointerDown={(ev: React.PointerEvent) => onPointerDown(ev, "+")}
|
|
162
|
+
onPointerUp={onPointerUpOrOut}
|
|
163
|
+
onPointerOut={onPointerUpOrOut}
|
|
124
164
|
size="large"
|
|
125
165
|
sx={{
|
|
126
|
-
|
|
127
|
-
backgroundColor: colors.buttonBackgroundColor,
|
|
128
|
-
color: colors.color,
|
|
129
|
-
alignContent: "center",
|
|
130
|
-
fontSize: "37px",
|
|
166
|
+
...SxAxisControlButton,
|
|
131
167
|
borderRadius: "0px 16px 16px 0px",
|
|
132
|
-
borderRight: `2px solid ${
|
|
133
|
-
borderBottom: `2px solid ${
|
|
134
|
-
borderTop: `2px solid ${
|
|
135
|
-
":hover": {
|
|
136
|
-
backgroundColor: colors.buttonBackgroundColor,
|
|
137
|
-
},
|
|
168
|
+
borderRight: `2px solid ${borderColor ?? "#fff"}`,
|
|
169
|
+
borderBottom: `2px solid ${borderColor ?? "#fff"}`,
|
|
170
|
+
borderTop: `2px solid ${borderColor ?? "#fff"}`,
|
|
138
171
|
}}
|
|
139
172
|
>
|
|
140
|
-
<
|
|
173
|
+
<JogPlus />
|
|
141
174
|
</IconButton>
|
|
142
175
|
</Stack>
|
|
143
176
|
)
|