@wandelbots/wandelbots-js-react-components 1.11.1 → 1.11.3

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 (231) hide show
  1. package/dist/index.cjs +29 -29
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +3109 -3065
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/Setup.d.ts.map +1 -0
  6. package/dist/src/components/3d-viewport/CoordinateSystemTransform.d.ts.map +1 -0
  7. package/dist/src/components/3d-viewport/PresetEnvironment.d.ts.map +1 -0
  8. package/dist/src/components/3d-viewport/SafetyZonesRenderer.d.ts.map +1 -0
  9. package/dist/src/components/ConsoleFilter.d.ts.map +1 -0
  10. package/dist/src/components/CopyableText.d.ts.map +1 -0
  11. package/dist/src/components/LoadingButton.d.ts.map +1 -0
  12. package/dist/src/components/LoadingCover.d.ts.map +1 -0
  13. package/dist/src/components/ThemeSelect.d.ts.map +1 -0
  14. package/dist/src/components/VelocitySlider.d.ts.map +1 -0
  15. package/dist/src/components/jogging/JoggingCartesianAxisControl.d.ts.map +1 -0
  16. package/dist/src/components/jogging/JoggingCartesianTab.d.ts.map +1 -0
  17. package/dist/src/components/jogging/JoggingCartesianValues.d.ts.map +1 -0
  18. package/dist/src/components/jogging/JoggingFreedriveTab.d.ts.map +1 -0
  19. package/dist/src/components/jogging/JoggingJointLimitDetector.d.ts.map +1 -0
  20. package/dist/src/components/jogging/JoggingJointRotationControl.d.ts.map +1 -0
  21. package/dist/src/components/jogging/JoggingJointTab.d.ts.map +1 -0
  22. package/dist/src/components/jogging/JoggingJointValues.d.ts.map +1 -0
  23. package/dist/src/components/jogging/JoggingOptions.d.ts.map +1 -0
  24. package/dist/{components → src/components}/jogging/JoggingPanel.d.ts +8 -5
  25. package/dist/src/components/jogging/JoggingPanel.d.ts.map +1 -0
  26. package/dist/src/components/jogging/JoggingStore.d.ts.map +1 -0
  27. package/dist/src/components/jogging/JoggingVelocitySlider.d.ts.map +1 -0
  28. package/dist/src/components/modal/NoMotionGroupModal.d.ts.map +1 -0
  29. package/dist/src/components/robots/ABB_1200_07_7.d.ts.map +1 -0
  30. package/dist/src/components/robots/AxisConfig.d.ts.map +1 -0
  31. package/dist/src/components/robots/DHRobot.d.ts.map +1 -0
  32. package/dist/src/components/robots/FANUC_ARC_Mate_100iD.d.ts.map +1 -0
  33. package/dist/src/components/robots/FANUC_ARC_Mate_120iD.d.ts.map +1 -0
  34. package/dist/src/components/robots/FANUC_CRX10iA.d.ts.map +1 -0
  35. package/dist/src/components/robots/FANUC_CRX20iAL.d.ts.map +1 -0
  36. package/dist/src/components/robots/FANUC_CRX25iA.d.ts.map +1 -0
  37. package/dist/src/components/robots/FANUC_CRX25iAL.d.ts.map +1 -0
  38. package/dist/src/components/robots/KUKA_KR210_R2700.d.ts.map +1 -0
  39. package/dist/src/components/robots/KUKA_KR270_R2700.d.ts.map +1 -0
  40. package/dist/src/components/robots/Robot.d.ts.map +1 -0
  41. package/dist/src/components/robots/RobotAnimator.d.ts.map +1 -0
  42. package/dist/{components → src/components}/robots/SupportedRobot.d.ts +1 -1
  43. package/dist/src/components/robots/SupportedRobot.d.ts.map +1 -0
  44. package/dist/src/components/robots/UniversalRobots_UR10.d.ts.map +1 -0
  45. package/dist/src/components/robots/UniversalRobots_UR10e.d.ts.map +1 -0
  46. package/dist/src/components/robots/UniversalRobots_UR3.d.ts.map +1 -0
  47. package/dist/src/components/robots/UniversalRobots_UR3e.d.ts.map +1 -0
  48. package/dist/src/components/robots/UniversalRobots_UR5.d.ts.map +1 -0
  49. package/dist/src/components/robots/UniversalRobots_UR5e.d.ts.map +1 -0
  50. package/dist/src/components/robots/Yaskawa_AR1440.d.ts.map +1 -0
  51. package/dist/src/components/robots/Yaskawa_AR1730.d.ts.map +1 -0
  52. package/dist/src/components/robots/Yaskawa_AR2010.d.ts.map +1 -0
  53. package/dist/src/components/robots/Yaskawa_AR3120.d.ts.map +1 -0
  54. package/dist/src/components/robots/Yaskawa_AR900.d.ts.map +1 -0
  55. package/dist/src/components/utils/converters.d.ts.map +1 -0
  56. package/dist/src/components/utils/errorHandling.d.ts.map +1 -0
  57. package/dist/src/components/utils/hooks.d.ts.map +1 -0
  58. package/dist/src/components/utils/robotTreeQuery.d.ts.map +1 -0
  59. package/dist/src/components/wandelscript-editor/WandelscriptEditor.d.ts.map +1 -0
  60. package/dist/src/components/wandelscript-editor/wandelscript.tmLanguage.d.ts.map +1 -0
  61. package/dist/src/externalizeComponent.d.ts +7 -0
  62. package/dist/src/externalizeComponent.d.ts.map +1 -0
  63. package/dist/src/i18n/config.d.ts.map +1 -0
  64. package/dist/src/icons/index.d.ts.map +1 -0
  65. package/dist/src/index.d.ts +14 -0
  66. package/dist/src/index.d.ts.map +1 -0
  67. package/dist/src/themes/color.d.ts.map +1 -0
  68. package/dist/src/themes/theming.d.ts.map +1 -0
  69. package/dist/{components/jogging → stories}/JoggingCartesianAxisControl.stories.d.ts +1 -1
  70. package/dist/stories/JoggingCartesianAxisControl.stories.d.ts.map +1 -0
  71. package/dist/{components/jogging → stories}/JoggingJointRotationControl.stories.d.ts +1 -1
  72. package/dist/stories/JoggingJointRotationControl.stories.d.ts.map +1 -0
  73. package/dist/{components/jogging → stories}/JoggingPanel.stories.d.ts +1 -1
  74. package/dist/stories/JoggingPanel.stories.d.ts.map +1 -0
  75. package/dist/{components → stories}/LoadingButton.stories.d.ts +1 -1
  76. package/dist/stories/LoadingButton.stories.d.ts.map +1 -0
  77. package/dist/stories/SafetyZonesRenderer.stories.d.ts +147 -0
  78. package/dist/stories/SafetyZonesRenderer.stories.d.ts.map +1 -0
  79. package/dist/{components/robots → stories}/SupportedRobot.stories.d.ts +2 -2
  80. package/dist/stories/SupportedRobot.stories.d.ts.map +1 -0
  81. package/dist/{components → stories}/VelocitySlider.stories.d.ts +1 -1
  82. package/dist/stories/VelocitySlider.stories.d.ts.map +1 -0
  83. package/dist/{components/wandelscript-editor → stories}/WandelscriptEditor.stories.d.ts +1 -1
  84. package/dist/stories/WandelscriptEditor.stories.d.ts.map +1 -0
  85. package/dist/stories/novaTheme.stories.d.ts.map +1 -0
  86. package/package.json +5 -6
  87. package/src/components/3d-viewport/SafetyZonesRenderer.tsx +51 -0
  88. package/src/components/VelocitySlider.tsx +1 -1
  89. package/src/components/jogging/JoggingCartesianAxisControl.tsx +98 -95
  90. package/src/components/jogging/JoggingJointRotationControl.tsx +182 -177
  91. package/src/components/jogging/JoggingPanel.tsx +106 -90
  92. package/src/components/modal/NoMotionGroupModal.tsx +70 -62
  93. package/src/components/robots/SupportedRobot.tsx +191 -188
  94. package/src/components/wandelscript-editor/WandelscriptEditor.tsx +98 -100
  95. package/src/externalizeComponent.tsx +8 -6
  96. package/src/index.ts +10 -42
  97. package/dist/Setup.d.ts.map +0 -1
  98. package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts.map +0 -1
  99. package/dist/components/3d-viewport/PresetEnvironment.d.ts.map +0 -1
  100. package/dist/components/3d-viewport/SafetyZonesRenderer.d.ts.map +0 -1
  101. package/dist/components/ConsoleFilter.d.ts.map +0 -1
  102. package/dist/components/CopyableText.d.ts.map +0 -1
  103. package/dist/components/LoadingButton.d.ts.map +0 -1
  104. package/dist/components/LoadingButton.stories.d.ts.map +0 -1
  105. package/dist/components/LoadingCover.d.ts.map +0 -1
  106. package/dist/components/ThemeSelect.d.ts.map +0 -1
  107. package/dist/components/VelocitySlider.d.ts.map +0 -1
  108. package/dist/components/VelocitySlider.stories.d.ts.map +0 -1
  109. package/dist/components/jogging/JoggingCartesianAxisControl.d.ts.map +0 -1
  110. package/dist/components/jogging/JoggingCartesianAxisControl.stories.d.ts.map +0 -1
  111. package/dist/components/jogging/JoggingCartesianTab.d.ts.map +0 -1
  112. package/dist/components/jogging/JoggingCartesianValues.d.ts.map +0 -1
  113. package/dist/components/jogging/JoggingFreedriveTab.d.ts.map +0 -1
  114. package/dist/components/jogging/JoggingJointLimitDetector.d.ts.map +0 -1
  115. package/dist/components/jogging/JoggingJointRotationControl.d.ts.map +0 -1
  116. package/dist/components/jogging/JoggingJointRotationControl.stories.d.ts.map +0 -1
  117. package/dist/components/jogging/JoggingJointTab.d.ts.map +0 -1
  118. package/dist/components/jogging/JoggingJointValues.d.ts.map +0 -1
  119. package/dist/components/jogging/JoggingOptions.d.ts.map +0 -1
  120. package/dist/components/jogging/JoggingPanel.d.ts.map +0 -1
  121. package/dist/components/jogging/JoggingPanel.stories.d.ts.map +0 -1
  122. package/dist/components/jogging/JoggingStore.d.ts.map +0 -1
  123. package/dist/components/jogging/JoggingVelocitySlider.d.ts.map +0 -1
  124. package/dist/components/modal/NoMotionGroupModal.d.ts.map +0 -1
  125. package/dist/components/robots/ABB_1200_07_7.d.ts.map +0 -1
  126. package/dist/components/robots/AxisConfig.d.ts.map +0 -1
  127. package/dist/components/robots/DHRobot.d.ts.map +0 -1
  128. package/dist/components/robots/FANUC_ARC_Mate_100iD.d.ts.map +0 -1
  129. package/dist/components/robots/FANUC_ARC_Mate_120iD.d.ts.map +0 -1
  130. package/dist/components/robots/FANUC_CRX10iA.d.ts.map +0 -1
  131. package/dist/components/robots/FANUC_CRX20iAL.d.ts.map +0 -1
  132. package/dist/components/robots/FANUC_CRX25iA.d.ts.map +0 -1
  133. package/dist/components/robots/FANUC_CRX25iAL.d.ts.map +0 -1
  134. package/dist/components/robots/KUKA_KR210_R2700.d.ts.map +0 -1
  135. package/dist/components/robots/KUKA_KR270_R2700.d.ts.map +0 -1
  136. package/dist/components/robots/Robot.d.ts.map +0 -1
  137. package/dist/components/robots/RobotAnimator.d.ts.map +0 -1
  138. package/dist/components/robots/SupportedRobot.d.ts.map +0 -1
  139. package/dist/components/robots/SupportedRobot.stories.d.ts.map +0 -1
  140. package/dist/components/robots/UniversalRobots_UR10.d.ts.map +0 -1
  141. package/dist/components/robots/UniversalRobots_UR10e.d.ts.map +0 -1
  142. package/dist/components/robots/UniversalRobots_UR3.d.ts.map +0 -1
  143. package/dist/components/robots/UniversalRobots_UR3e.d.ts.map +0 -1
  144. package/dist/components/robots/UniversalRobots_UR5.d.ts.map +0 -1
  145. package/dist/components/robots/UniversalRobots_UR5e.d.ts.map +0 -1
  146. package/dist/components/robots/Yaskawa_AR1440.d.ts.map +0 -1
  147. package/dist/components/robots/Yaskawa_AR1730.d.ts.map +0 -1
  148. package/dist/components/robots/Yaskawa_AR2010.d.ts.map +0 -1
  149. package/dist/components/robots/Yaskawa_AR3120.d.ts.map +0 -1
  150. package/dist/components/robots/Yaskawa_AR900.d.ts.map +0 -1
  151. package/dist/components/utils/converters.d.ts.map +0 -1
  152. package/dist/components/utils/errorHandling.d.ts.map +0 -1
  153. package/dist/components/utils/hooks.d.ts.map +0 -1
  154. package/dist/components/utils/robotTreeQuery.d.ts.map +0 -1
  155. package/dist/components/wandelscript-editor/WandelscriptEditor.d.ts.map +0 -1
  156. package/dist/components/wandelscript-editor/WandelscriptEditor.stories.d.ts.map +0 -1
  157. package/dist/components/wandelscript-editor/wandelscript.tmLanguage.d.ts.map +0 -1
  158. package/dist/externalizeComponent.d.ts +0 -7
  159. package/dist/externalizeComponent.d.ts.map +0 -1
  160. package/dist/i18n/config.d.ts.map +0 -1
  161. package/dist/icons/index.d.ts.map +0 -1
  162. package/dist/index.d.ts +0 -54
  163. package/dist/index.d.ts.map +0 -1
  164. package/dist/themes/color.d.ts.map +0 -1
  165. package/dist/themes/novaTheme.stories.d.ts.map +0 -1
  166. package/dist/themes/theming.d.ts.map +0 -1
  167. package/src/components/LoadingButton.stories.tsx +0 -54
  168. package/src/components/VelocitySlider.stories.tsx +0 -27
  169. package/src/components/jogging/JoggingCartesianAxisControl.stories.tsx +0 -41
  170. package/src/components/jogging/JoggingJointRotationControl.stories.tsx +0 -50
  171. package/src/components/jogging/JoggingPanel.stories.tsx +0 -29
  172. package/src/components/robots/SupportedRobot.stories.tsx +0 -130
  173. package/src/components/wandelscript-editor/WandelscriptEditor.stories.tsx +0 -45
  174. package/src/themes/novaTheme.stories.tsx +0 -77
  175. /package/dist/{Setup.d.ts → src/Setup.d.ts} +0 -0
  176. /package/dist/{components → src/components}/3d-viewport/CoordinateSystemTransform.d.ts +0 -0
  177. /package/dist/{components → src/components}/3d-viewport/PresetEnvironment.d.ts +0 -0
  178. /package/dist/{components → src/components}/3d-viewport/SafetyZonesRenderer.d.ts +0 -0
  179. /package/dist/{components → src/components}/ConsoleFilter.d.ts +0 -0
  180. /package/dist/{components → src/components}/CopyableText.d.ts +0 -0
  181. /package/dist/{components → src/components}/LoadingButton.d.ts +0 -0
  182. /package/dist/{components → src/components}/LoadingCover.d.ts +0 -0
  183. /package/dist/{components → src/components}/ThemeSelect.d.ts +0 -0
  184. /package/dist/{components → src/components}/VelocitySlider.d.ts +0 -0
  185. /package/dist/{components → src/components}/jogging/JoggingCartesianAxisControl.d.ts +0 -0
  186. /package/dist/{components → src/components}/jogging/JoggingCartesianTab.d.ts +0 -0
  187. /package/dist/{components → src/components}/jogging/JoggingCartesianValues.d.ts +0 -0
  188. /package/dist/{components → src/components}/jogging/JoggingFreedriveTab.d.ts +0 -0
  189. /package/dist/{components → src/components}/jogging/JoggingJointLimitDetector.d.ts +0 -0
  190. /package/dist/{components → src/components}/jogging/JoggingJointRotationControl.d.ts +0 -0
  191. /package/dist/{components → src/components}/jogging/JoggingJointTab.d.ts +0 -0
  192. /package/dist/{components → src/components}/jogging/JoggingJointValues.d.ts +0 -0
  193. /package/dist/{components → src/components}/jogging/JoggingOptions.d.ts +0 -0
  194. /package/dist/{components → src/components}/jogging/JoggingStore.d.ts +0 -0
  195. /package/dist/{components → src/components}/jogging/JoggingVelocitySlider.d.ts +0 -0
  196. /package/dist/{components → src/components}/modal/NoMotionGroupModal.d.ts +0 -0
  197. /package/dist/{components → src/components}/robots/ABB_1200_07_7.d.ts +0 -0
  198. /package/dist/{components → src/components}/robots/AxisConfig.d.ts +0 -0
  199. /package/dist/{components → src/components}/robots/DHRobot.d.ts +0 -0
  200. /package/dist/{components → src/components}/robots/FANUC_ARC_Mate_100iD.d.ts +0 -0
  201. /package/dist/{components → src/components}/robots/FANUC_ARC_Mate_120iD.d.ts +0 -0
  202. /package/dist/{components → src/components}/robots/FANUC_CRX10iA.d.ts +0 -0
  203. /package/dist/{components → src/components}/robots/FANUC_CRX20iAL.d.ts +0 -0
  204. /package/dist/{components → src/components}/robots/FANUC_CRX25iA.d.ts +0 -0
  205. /package/dist/{components → src/components}/robots/FANUC_CRX25iAL.d.ts +0 -0
  206. /package/dist/{components → src/components}/robots/KUKA_KR210_R2700.d.ts +0 -0
  207. /package/dist/{components → src/components}/robots/KUKA_KR270_R2700.d.ts +0 -0
  208. /package/dist/{components → src/components}/robots/Robot.d.ts +0 -0
  209. /package/dist/{components → src/components}/robots/RobotAnimator.d.ts +0 -0
  210. /package/dist/{components → src/components}/robots/UniversalRobots_UR10.d.ts +0 -0
  211. /package/dist/{components → src/components}/robots/UniversalRobots_UR10e.d.ts +0 -0
  212. /package/dist/{components → src/components}/robots/UniversalRobots_UR3.d.ts +0 -0
  213. /package/dist/{components → src/components}/robots/UniversalRobots_UR3e.d.ts +0 -0
  214. /package/dist/{components → src/components}/robots/UniversalRobots_UR5.d.ts +0 -0
  215. /package/dist/{components → src/components}/robots/UniversalRobots_UR5e.d.ts +0 -0
  216. /package/dist/{components → src/components}/robots/Yaskawa_AR1440.d.ts +0 -0
  217. /package/dist/{components → src/components}/robots/Yaskawa_AR1730.d.ts +0 -0
  218. /package/dist/{components → src/components}/robots/Yaskawa_AR2010.d.ts +0 -0
  219. /package/dist/{components → src/components}/robots/Yaskawa_AR3120.d.ts +0 -0
  220. /package/dist/{components → src/components}/robots/Yaskawa_AR900.d.ts +0 -0
  221. /package/dist/{components → src/components}/utils/converters.d.ts +0 -0
  222. /package/dist/{components → src/components}/utils/errorHandling.d.ts +0 -0
  223. /package/dist/{components → src/components}/utils/hooks.d.ts +0 -0
  224. /package/dist/{components → src/components}/utils/robotTreeQuery.d.ts +0 -0
  225. /package/dist/{components → src/components}/wandelscript-editor/WandelscriptEditor.d.ts +0 -0
  226. /package/dist/{components → src/components}/wandelscript-editor/wandelscript.tmLanguage.d.ts +0 -0
  227. /package/dist/{i18n → src/i18n}/config.d.ts +0 -0
  228. /package/dist/{icons → src/icons}/index.d.ts +0 -0
  229. /package/dist/{themes → src/themes}/color.d.ts +0 -0
  230. /package/dist/{themes → src/themes}/theming.d.ts +0 -0
  231. /package/dist/{themes → stories}/novaTheme.stories.d.ts +0 -0
@@ -7,6 +7,7 @@ import { useAnimationFrame } from "../utils/hooks"
7
7
  import { useState } from "react"
8
8
  import throttle from "lodash-es/throttle"
9
9
  import { useTranslation } from "react-i18next"
10
+ import { externalizeComponent } from "../../externalizeComponent"
10
11
 
11
12
  type JoggingJointRotationControlProps = {
12
13
  startJogging: (direction: "-" | "+") => void
@@ -18,195 +19,199 @@ type JoggingJointRotationControlProps = {
18
19
  disabled?: boolean
19
20
  } & React.ComponentProps<typeof Stack>
20
21
 
21
- export const JoggingJointRotationControl = observer(
22
- ({
23
- startJogging,
24
- stopJogging,
25
- lowerLimitDegs,
26
- upperLimitDegs,
27
- getValueDegs,
28
- disabled,
29
- ...rest
30
- }: JoggingJointRotationControlProps) => {
31
- const { t } = useTranslation()
32
- const [currentValue, setCurrentValue] = useState<number | undefined>()
33
-
34
- const state = useLocalObservable(() => ({
35
- activeJoggingDir: null as "-" | "+" | null,
36
-
37
- startJogging(dir: "-" | "+") {
38
- this.activeJoggingDir = dir
39
- startJogging(dir)
40
- },
41
-
42
- stopJogging() {
43
- this.activeJoggingDir = null
44
- stopJogging()
45
- },
46
- }))
47
-
48
- const updateValue = throttle(() => {
49
- setCurrentValue(getValueDegs())
50
- }, 50)
51
-
52
- useAnimationFrame(updateValue)
53
-
54
- function onPointerDownMinus(ev: React.PointerEvent) {
55
- // Stop right click from triggering jog
56
- if (ev.button === 0) state.startJogging("-")
57
- }
58
-
59
- function onPointerDownPlus(ev: React.PointerEvent) {
60
- if (ev.button === 0) state.startJogging("+")
61
- }
62
-
63
- function onPointerUp(ev: React.PointerEvent) {
64
- state.stopJogging()
65
- }
66
-
67
- function onPointerOut(ev: React.PointerEvent) {
68
- // Prevent subelements of button from stopping jogging
69
- if (ev.target !== ev.currentTarget) return
70
-
71
- state.stopJogging()
72
- }
73
-
74
- function formatDegrees(value: number | undefined, precision = 1) {
75
- if (value === undefined || isNaN(value)) return ""
76
-
77
- const output = t("General.degree.variable", {
78
- amount: value.toFixed(precision),
79
- })
80
-
81
- if (value > 0 && precision === 0) {
82
- return `+${output}`
83
- } else {
84
- return output
22
+ export const JoggingJointRotationControl = externalizeComponent(
23
+ observer(
24
+ ({
25
+ startJogging,
26
+ stopJogging,
27
+ lowerLimitDegs,
28
+ upperLimitDegs,
29
+ getValueDegs,
30
+ disabled,
31
+ ...rest
32
+ }: JoggingJointRotationControlProps) => {
33
+ const { t } = useTranslation()
34
+ const [currentValue, setCurrentValue] = useState<number | undefined>()
35
+
36
+ const state = useLocalObservable(() => ({
37
+ activeJoggingDir: null as "-" | "+" | null,
38
+
39
+ startJogging(dir: "-" | "+") {
40
+ this.activeJoggingDir = dir
41
+ startJogging(dir)
42
+ },
43
+
44
+ stopJogging() {
45
+ this.activeJoggingDir = null
46
+ stopJogging()
47
+ },
48
+ }))
49
+
50
+ const updateValue = throttle(() => {
51
+ setCurrentValue(getValueDegs())
52
+ }, 50)
53
+
54
+ useAnimationFrame(updateValue)
55
+
56
+ function onPointerDownMinus(ev: React.PointerEvent) {
57
+ // Stop right click from triggering jog
58
+ if (ev.button === 0) state.startJogging("-")
85
59
  }
86
- }
87
-
88
- return (
89
- <Stack
90
- height="64px"
91
- width="100%"
92
- maxWidth="300px"
93
- direction="row"
94
- {...rest}
95
- sx={{
96
- "& .MuiIconButton-root": {
97
- width: "52px",
98
- color: "white",
99
- alignContent: "center",
100
- backgroundColor: "#38445A",
101
- "&:disabled": {
102
- opacity: 0.5,
103
- backgroundColor: "#38445A",
104
- },
105
- "& svg": {
106
- width: "42px",
107
- height: "42px",
108
- },
109
- },
110
- }}
111
- >
112
- <IconButton
113
- onPointerDown={onPointerDownMinus}
114
- onPointerUp={onPointerUp}
115
- onPointerOut={onPointerOut}
116
- disabled={disabled}
117
- sx={{
118
- borderRadius: "16px 0px 0px 16px",
119
- backgroundColor:
120
- state.activeJoggingDir === "-" ? "#495975" : undefined,
121
- }}
122
- >
123
- <ChevronLeft />
124
- </IconButton>
125
60
 
61
+ function onPointerDownPlus(ev: React.PointerEvent) {
62
+ if (ev.button === 0) state.startJogging("+")
63
+ }
64
+
65
+ function onPointerUp(ev: React.PointerEvent) {
66
+ state.stopJogging()
67
+ }
68
+
69
+ function onPointerOut(ev: React.PointerEvent) {
70
+ // Prevent subelements of button from stopping jogging
71
+ if (ev.target !== ev.currentTarget) return
72
+
73
+ state.stopJogging()
74
+ }
75
+
76
+ function formatDegrees(value: number | undefined, precision = 1) {
77
+ if (value === undefined || isNaN(value)) return ""
78
+
79
+ const output = t("General.degree.variable", {
80
+ amount: value.toFixed(precision),
81
+ })
82
+
83
+ if (value > 0 && precision === 0) {
84
+ return `+${output}`
85
+ } else {
86
+ return output
87
+ }
88
+ }
89
+
90
+ return (
126
91
  <Stack
127
- flexGrow={1}
128
- alignItems="center"
129
- justifyContent="center"
92
+ height="64px"
93
+ width="100%"
94
+ maxWidth="300px"
95
+ direction="row"
96
+ {...rest}
130
97
  sx={{
131
- borderStyle: "solid",
132
- borderLeftWidth: 0,
133
- borderRightWidth: 0,
134
- borderTopWidth: "4px",
135
- borderBottomWidth: "4px",
136
- backgroundColor: "#38445A",
137
- borderColor: "#38445A",
138
- paddingLeft: "20px",
139
- paddingRight: "20px",
140
- zIndex: 1,
98
+ "& .MuiIconButton-root": {
99
+ width: "52px",
100
+ color: "white",
101
+ alignContent: "center",
102
+ backgroundColor: "#38445A",
103
+ "&:disabled": {
104
+ opacity: 0.5,
105
+ backgroundColor: "#38445A",
106
+ },
107
+ "& svg": {
108
+ width: "42px",
109
+ height: "42px",
110
+ },
111
+ },
141
112
  }}
142
113
  >
143
- <Typography
114
+ <IconButton
115
+ onPointerDown={onPointerDownMinus}
116
+ onPointerUp={onPointerUp}
117
+ onPointerOut={onPointerOut}
118
+ disabled={disabled}
144
119
  sx={{
145
- fontSize: "15px",
146
- position: "relative",
147
- top: "5px",
148
- color: "white",
120
+ borderRadius: "16px 0px 0px 16px",
121
+ backgroundColor:
122
+ state.activeJoggingDir === "-" ? "#495975" : undefined,
149
123
  }}
150
124
  >
151
- {formatDegrees(currentValue)}
152
- </Typography>
153
-
154
- <Slider
155
- disabled
156
- aria-label="Joint position"
157
- min={lowerLimitDegs}
158
- max={upperLimitDegs}
159
- value={currentValue || 0}
160
- track={false}
125
+ <ChevronLeft />
126
+ </IconButton>
127
+
128
+ <Stack
129
+ flexGrow={1}
130
+ alignItems="center"
131
+ justifyContent="center"
161
132
  sx={{
162
- "& .MuiSlider-mark": {
163
- display: "none",
164
- },
165
- "& .MuiSlider-thumb": {
166
- width: "5px",
167
- height: "10px",
168
- borderRadius: "2px",
169
- },
170
- "& .MuiSlider-markLabel": {
171
- top: "20px",
172
- fontSize: "12px",
173
- color: "white",
174
- },
175
- "& .MuiSlider-rail": {
176
- backgroundColor: "#1F283A",
177
- opacity: 1,
178
- },
133
+ borderStyle: "solid",
134
+ borderLeftWidth: 0,
135
+ borderRightWidth: 0,
136
+ borderTopWidth: "4px",
137
+ borderBottomWidth: "4px",
138
+ backgroundColor: "#38445A",
139
+ borderColor: "#38445A",
140
+ paddingLeft: "20px",
141
+ paddingRight: "20px",
142
+ zIndex: 1,
179
143
  }}
180
- marks={
181
- lowerLimitDegs !== undefined &&
182
- upperLimitDegs !== undefined && [
183
- {
184
- value: lowerLimitDegs,
185
- label: formatDegrees(lowerLimitDegs, 0),
144
+ >
145
+ <Typography
146
+ sx={{
147
+ fontSize: "15px",
148
+ position: "relative",
149
+ top: "5px",
150
+ color: "white",
151
+ }}
152
+ >
153
+ {formatDegrees(currentValue)}
154
+ </Typography>
155
+
156
+ <Slider
157
+ disabled
158
+ aria-label="Joint position"
159
+ min={lowerLimitDegs}
160
+ max={upperLimitDegs}
161
+ value={currentValue || 0}
162
+ track={false}
163
+ sx={{
164
+ "& .MuiSlider-mark": {
165
+ display: "none",
166
+ },
167
+ "& .MuiSlider-thumb": {
168
+ width: "5px",
169
+ height: "10px",
170
+ borderRadius: "2px",
171
+ },
172
+ "& .MuiSlider-markLabel": {
173
+ top: "20px",
174
+ fontSize: "12px",
175
+ color: "white",
186
176
  },
187
- {
188
- value: upperLimitDegs,
189
- label: formatDegrees(upperLimitDegs, 0),
177
+ "& .MuiSlider-rail": {
178
+ backgroundColor: "#1F283A",
179
+ opacity: 1,
190
180
  },
191
- ]
192
- }
193
- />
181
+ }}
182
+ marks={
183
+ lowerLimitDegs !== undefined &&
184
+ upperLimitDegs !== undefined && [
185
+ {
186
+ value: lowerLimitDegs,
187
+ label: formatDegrees(lowerLimitDegs, 0),
188
+ },
189
+ {
190
+ value: upperLimitDegs,
191
+ label: formatDegrees(upperLimitDegs, 0),
192
+ },
193
+ ]
194
+ }
195
+ />
196
+ </Stack>
197
+
198
+ <IconButton
199
+ onPointerDown={onPointerDownPlus}
200
+ onPointerUp={onPointerUp}
201
+ onPointerOut={onPointerOut}
202
+ disabled={disabled}
203
+ sx={{
204
+ borderRadius: "0px 16px 16px 0px",
205
+ backgroundColor:
206
+ state.activeJoggingDir === "+"
207
+ ? "#495975 !important"
208
+ : "#38445A",
209
+ }}
210
+ >
211
+ <ChevronRight />
212
+ </IconButton>
194
213
  </Stack>
195
-
196
- <IconButton
197
- onPointerDown={onPointerDownPlus}
198
- onPointerUp={onPointerUp}
199
- onPointerOut={onPointerOut}
200
- disabled={disabled}
201
- sx={{
202
- borderRadius: "0px 16px 16px 0px",
203
- backgroundColor:
204
- state.activeJoggingDir === "+" ? "#495975 !important" : "#38445A",
205
- }}
206
- >
207
- <ChevronRight />
208
- </IconButton>
209
- </Stack>
210
- )
211
- },
214
+ )
215
+ },
216
+ ),
212
217
  )
@@ -6,122 +6,138 @@ import { JoggingJointTab } from "./JoggingJointTab"
6
6
  import { JoggingStore } from "./JoggingStore"
7
7
  import { LoadingCover } from "../LoadingCover"
8
8
  import { runInAction } from "mobx"
9
- import type { NovaClient } from "@wandelbots/wandelbots-js"
9
+ import { NovaClient } from "@wandelbots/wandelbots-js"
10
+ import { externalizeComponent } from "../../externalizeComponent"
10
11
 
11
12
  export type JoggingPanelProps = {
12
- /** Connection to a Nova instance to use for jogging */
13
- nova: NovaClient
14
- /** Id of the motion group to move e.g. 0@ur5e **/
13
+ /** Either an existing NovaClient or the base url of a deployed Nova instance */
14
+ nova: NovaClient | string
15
+ /** Id of the motion group to move e.g. 0@ur5e */
15
16
  motionGroupId: string
16
17
  /** Callback with the jogging panel's state store for further customization/config */
17
18
  onSetup?: (store: JoggingStore) => void
18
- /** Any children will go at the bottom of the panel under the default components */
19
+ /** Any children will go at the bottom of the panel under the default contents */
19
20
  children?: React.ReactNode
20
21
  }
21
22
 
22
- export const JoggingPanel = observer((props: JoggingPanelProps) => {
23
- const { nova } = props
23
+ /**
24
+ * A high-level, opinionated UI panel for jogging a robot using the Wandelbots Platform API
25
+ */
26
+ export const JoggingPanel = externalizeComponent(
27
+ observer((props: JoggingPanelProps) => {
28
+ const nova =
29
+ props.nova instanceof NovaClient
30
+ ? props.nova
31
+ : new NovaClient({ instanceUrl: props.nova })
24
32
 
25
- const state = useLocalObservable(() => ({
26
- joggingStore: null as JoggingStore | null,
27
- loadingError: null as unknown | null,
28
- }))
33
+ const state = useLocalObservable(() => ({
34
+ joggingStore: null as JoggingStore | null,
35
+ loadingError: null as unknown | null,
36
+ }))
29
37
 
30
- async function init() {
31
- try {
32
- const jogger = await nova.connectJogger(props.motionGroupId)
33
- const joggingStore = await JoggingStore.loadFor(jogger)
38
+ async function init() {
34
39
  runInAction(() => {
35
- state.joggingStore = joggingStore
40
+ state.loadingError = null
41
+ state.joggingStore = null
36
42
  })
37
- if (props.onSetup) {
38
- props.onSetup(joggingStore)
43
+
44
+ try {
45
+ const jogger = await nova.connectJogger(props.motionGroupId)
46
+ const joggingStore = await JoggingStore.loadFor(jogger)
47
+ runInAction(() => {
48
+ state.joggingStore = joggingStore
49
+ })
50
+ if (props.onSetup) {
51
+ props.onSetup(joggingStore)
52
+ }
53
+ } catch (err) {
54
+ state.loadingError = err
39
55
  }
40
- } catch (err) {
41
- state.loadingError = err
42
56
  }
43
- }
44
57
 
45
- useEffect(() => {
46
- init()
47
- return () => {
48
- state.joggingStore?.dispose()
49
- }
50
- }, [])
58
+ useEffect(() => {
59
+ init()
60
+ return () => {
61
+ state.joggingStore?.dispose()
62
+ }
63
+ }, [props.nova])
51
64
 
52
- // Set correct jogging mode on jogger based on user selections
53
- useEffect(() => {
54
- if (!state.joggingStore) return
65
+ // Set correct jogging mode on jogger based on user selections
66
+ useEffect(() => {
67
+ if (!state.joggingStore) return
55
68
 
56
- const {
57
- currentTab,
58
- selectedTcpId,
59
- activeCoordSystemId,
60
- selectedDiscreteIncrement,
61
- } = state.joggingStore
69
+ const {
70
+ currentTab,
71
+ selectedTcpId,
72
+ activeCoordSystemId,
73
+ selectedDiscreteIncrement,
74
+ } = state.joggingStore
62
75
 
63
- if (currentTab.id !== "cartesian" && currentTab.id !== "joint") return
76
+ if (currentTab.id !== "cartesian" && currentTab.id !== "joint") return
64
77
 
65
- const cartesianJoggingOpts = {
66
- tcpId: selectedTcpId,
67
- coordSystemId: activeCoordSystemId,
68
- }
78
+ const cartesianJoggingOpts = {
79
+ tcpId: selectedTcpId,
80
+ coordSystemId: activeCoordSystemId,
81
+ }
69
82
 
70
- if (selectedDiscreteIncrement && currentTab.id === "cartesian") {
71
- state.joggingStore.jogger.setJoggingMode(
72
- "increment",
73
- cartesianJoggingOpts,
74
- )
75
- } else {
76
- state.joggingStore.jogger.setJoggingMode(
77
- currentTab.id,
78
- cartesianJoggingOpts,
83
+ if (selectedDiscreteIncrement && currentTab.id === "cartesian") {
84
+ state.joggingStore.jogger.setJoggingMode(
85
+ "increment",
86
+ cartesianJoggingOpts,
87
+ )
88
+ } else {
89
+ state.joggingStore.jogger.setJoggingMode(
90
+ currentTab.id,
91
+ cartesianJoggingOpts,
92
+ )
93
+ }
94
+ }, [
95
+ state.joggingStore?.currentTab,
96
+ state.joggingStore?.selectedTcpId,
97
+ state.joggingStore?.activeCoordSystemId,
98
+ state.joggingStore?.selectedDiscreteIncrement,
99
+ ])
100
+
101
+ if (!state.joggingStore || state.loadingError) {
102
+ return (
103
+ <JoggingPanelOuter>
104
+ <LoadingCover message="Loading jogging" error={state.loadingError} />
105
+ </JoggingPanelOuter>
79
106
  )
80
107
  }
81
- }, [
82
- state.joggingStore?.currentTab,
83
- state.joggingStore?.selectedTcpId,
84
- state.joggingStore?.activeCoordSystemId,
85
- state.joggingStore?.selectedDiscreteIncrement,
86
- ])
87
-
88
- if (!state.joggingStore) {
89
- return (
90
- <JoggingPanelOuter>
91
- <LoadingCover message="Loading jogging" error={state.loadingError} />
92
- </JoggingPanelOuter>
93
- )
94
- }
95
108
 
96
- const { joggingStore: store } = state
109
+ const { joggingStore: store } = state
97
110
 
98
- return (
99
- <JoggingPanelOuter>
100
- <Stack flexGrow={1}>
101
- {/* Tab selection */}
102
- <Tabs value={store.tabIndex} onChange={store.onTabChange}>
103
- {store.tabs.map((tab) => (
104
- <Tab
105
- key={tab.id}
106
- label={tab.label}
107
- id={`jogging-tab-${tab.id}`}
108
- aria-controls={`jogging-tab-${tab.id}`}
109
- />
110
- ))}
111
- </Tabs>
112
-
113
- {/* Current tab content */}
111
+ return (
112
+ <JoggingPanelOuter>
114
113
  <Stack flexGrow={1}>
115
- {store.currentTab.id === "cartesian" && (
116
- <JoggingCartesianTab store={store} />
117
- )}
118
- {store.currentTab.id === "joint" && <JoggingJointTab store={store} />}
119
- {props.children}
114
+ {/* Tab selection */}
115
+ <Tabs value={store.tabIndex} onChange={store.onTabChange}>
116
+ {store.tabs.map((tab) => (
117
+ <Tab
118
+ key={tab.id}
119
+ label={tab.label}
120
+ id={`jogging-tab-${tab.id}`}
121
+ aria-controls={`jogging-tab-${tab.id}`}
122
+ />
123
+ ))}
124
+ </Tabs>
125
+
126
+ {/* Current tab content */}
127
+ <Stack flexGrow={1}>
128
+ {store.currentTab.id === "cartesian" && (
129
+ <JoggingCartesianTab store={store} />
130
+ )}
131
+ {store.currentTab.id === "joint" && (
132
+ <JoggingJointTab store={store} />
133
+ )}
134
+ {props.children}
135
+ </Stack>
120
136
  </Stack>
121
- </Stack>
122
- </JoggingPanelOuter>
123
- )
124
- })
137
+ </JoggingPanelOuter>
138
+ )
139
+ }),
140
+ )
125
141
 
126
142
  function JoggingPanelOuter({ children }: { children: React.ReactNode }) {
127
143
  return (