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

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 (228) hide show
  1. package/dist/index.cjs +25 -25
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +2536 -2510
  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/{components/robots → stories}/SupportedRobot.stories.d.ts +2 -2
  78. package/dist/stories/SupportedRobot.stories.d.ts.map +1 -0
  79. package/dist/{components → stories}/VelocitySlider.stories.d.ts +1 -1
  80. package/dist/stories/VelocitySlider.stories.d.ts.map +1 -0
  81. package/dist/{components/wandelscript-editor → stories}/WandelscriptEditor.stories.d.ts +1 -1
  82. package/dist/stories/WandelscriptEditor.stories.d.ts.map +1 -0
  83. package/dist/stories/novaTheme.stories.d.ts.map +1 -0
  84. package/package.json +5 -6
  85. package/src/components/VelocitySlider.tsx +1 -1
  86. package/src/components/jogging/JoggingCartesianAxisControl.tsx +98 -95
  87. package/src/components/jogging/JoggingJointRotationControl.tsx +182 -177
  88. package/src/components/jogging/JoggingPanel.tsx +106 -90
  89. package/src/components/modal/NoMotionGroupModal.tsx +70 -62
  90. package/src/components/robots/SupportedRobot.tsx +191 -188
  91. package/src/components/wandelscript-editor/WandelscriptEditor.tsx +98 -100
  92. package/src/externalizeComponent.tsx +8 -6
  93. package/src/index.ts +10 -42
  94. package/dist/Setup.d.ts.map +0 -1
  95. package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts.map +0 -1
  96. package/dist/components/3d-viewport/PresetEnvironment.d.ts.map +0 -1
  97. package/dist/components/3d-viewport/SafetyZonesRenderer.d.ts.map +0 -1
  98. package/dist/components/ConsoleFilter.d.ts.map +0 -1
  99. package/dist/components/CopyableText.d.ts.map +0 -1
  100. package/dist/components/LoadingButton.d.ts.map +0 -1
  101. package/dist/components/LoadingButton.stories.d.ts.map +0 -1
  102. package/dist/components/LoadingCover.d.ts.map +0 -1
  103. package/dist/components/ThemeSelect.d.ts.map +0 -1
  104. package/dist/components/VelocitySlider.d.ts.map +0 -1
  105. package/dist/components/VelocitySlider.stories.d.ts.map +0 -1
  106. package/dist/components/jogging/JoggingCartesianAxisControl.d.ts.map +0 -1
  107. package/dist/components/jogging/JoggingCartesianAxisControl.stories.d.ts.map +0 -1
  108. package/dist/components/jogging/JoggingCartesianTab.d.ts.map +0 -1
  109. package/dist/components/jogging/JoggingCartesianValues.d.ts.map +0 -1
  110. package/dist/components/jogging/JoggingFreedriveTab.d.ts.map +0 -1
  111. package/dist/components/jogging/JoggingJointLimitDetector.d.ts.map +0 -1
  112. package/dist/components/jogging/JoggingJointRotationControl.d.ts.map +0 -1
  113. package/dist/components/jogging/JoggingJointRotationControl.stories.d.ts.map +0 -1
  114. package/dist/components/jogging/JoggingJointTab.d.ts.map +0 -1
  115. package/dist/components/jogging/JoggingJointValues.d.ts.map +0 -1
  116. package/dist/components/jogging/JoggingOptions.d.ts.map +0 -1
  117. package/dist/components/jogging/JoggingPanel.d.ts.map +0 -1
  118. package/dist/components/jogging/JoggingPanel.stories.d.ts.map +0 -1
  119. package/dist/components/jogging/JoggingStore.d.ts.map +0 -1
  120. package/dist/components/jogging/JoggingVelocitySlider.d.ts.map +0 -1
  121. package/dist/components/modal/NoMotionGroupModal.d.ts.map +0 -1
  122. package/dist/components/robots/ABB_1200_07_7.d.ts.map +0 -1
  123. package/dist/components/robots/AxisConfig.d.ts.map +0 -1
  124. package/dist/components/robots/DHRobot.d.ts.map +0 -1
  125. package/dist/components/robots/FANUC_ARC_Mate_100iD.d.ts.map +0 -1
  126. package/dist/components/robots/FANUC_ARC_Mate_120iD.d.ts.map +0 -1
  127. package/dist/components/robots/FANUC_CRX10iA.d.ts.map +0 -1
  128. package/dist/components/robots/FANUC_CRX20iAL.d.ts.map +0 -1
  129. package/dist/components/robots/FANUC_CRX25iA.d.ts.map +0 -1
  130. package/dist/components/robots/FANUC_CRX25iAL.d.ts.map +0 -1
  131. package/dist/components/robots/KUKA_KR210_R2700.d.ts.map +0 -1
  132. package/dist/components/robots/KUKA_KR270_R2700.d.ts.map +0 -1
  133. package/dist/components/robots/Robot.d.ts.map +0 -1
  134. package/dist/components/robots/RobotAnimator.d.ts.map +0 -1
  135. package/dist/components/robots/SupportedRobot.d.ts.map +0 -1
  136. package/dist/components/robots/SupportedRobot.stories.d.ts.map +0 -1
  137. package/dist/components/robots/UniversalRobots_UR10.d.ts.map +0 -1
  138. package/dist/components/robots/UniversalRobots_UR10e.d.ts.map +0 -1
  139. package/dist/components/robots/UniversalRobots_UR3.d.ts.map +0 -1
  140. package/dist/components/robots/UniversalRobots_UR3e.d.ts.map +0 -1
  141. package/dist/components/robots/UniversalRobots_UR5.d.ts.map +0 -1
  142. package/dist/components/robots/UniversalRobots_UR5e.d.ts.map +0 -1
  143. package/dist/components/robots/Yaskawa_AR1440.d.ts.map +0 -1
  144. package/dist/components/robots/Yaskawa_AR1730.d.ts.map +0 -1
  145. package/dist/components/robots/Yaskawa_AR2010.d.ts.map +0 -1
  146. package/dist/components/robots/Yaskawa_AR3120.d.ts.map +0 -1
  147. package/dist/components/robots/Yaskawa_AR900.d.ts.map +0 -1
  148. package/dist/components/utils/converters.d.ts.map +0 -1
  149. package/dist/components/utils/errorHandling.d.ts.map +0 -1
  150. package/dist/components/utils/hooks.d.ts.map +0 -1
  151. package/dist/components/utils/robotTreeQuery.d.ts.map +0 -1
  152. package/dist/components/wandelscript-editor/WandelscriptEditor.d.ts.map +0 -1
  153. package/dist/components/wandelscript-editor/WandelscriptEditor.stories.d.ts.map +0 -1
  154. package/dist/components/wandelscript-editor/wandelscript.tmLanguage.d.ts.map +0 -1
  155. package/dist/externalizeComponent.d.ts +0 -7
  156. package/dist/externalizeComponent.d.ts.map +0 -1
  157. package/dist/i18n/config.d.ts.map +0 -1
  158. package/dist/icons/index.d.ts.map +0 -1
  159. package/dist/index.d.ts +0 -54
  160. package/dist/index.d.ts.map +0 -1
  161. package/dist/themes/color.d.ts.map +0 -1
  162. package/dist/themes/novaTheme.stories.d.ts.map +0 -1
  163. package/dist/themes/theming.d.ts.map +0 -1
  164. package/src/components/LoadingButton.stories.tsx +0 -54
  165. package/src/components/VelocitySlider.stories.tsx +0 -27
  166. package/src/components/jogging/JoggingCartesianAxisControl.stories.tsx +0 -41
  167. package/src/components/jogging/JoggingJointRotationControl.stories.tsx +0 -50
  168. package/src/components/jogging/JoggingPanel.stories.tsx +0 -29
  169. package/src/components/robots/SupportedRobot.stories.tsx +0 -130
  170. package/src/components/wandelscript-editor/WandelscriptEditor.stories.tsx +0 -45
  171. package/src/themes/novaTheme.stories.tsx +0 -77
  172. /package/dist/{Setup.d.ts → src/Setup.d.ts} +0 -0
  173. /package/dist/{components → src/components}/3d-viewport/CoordinateSystemTransform.d.ts +0 -0
  174. /package/dist/{components → src/components}/3d-viewport/PresetEnvironment.d.ts +0 -0
  175. /package/dist/{components → src/components}/3d-viewport/SafetyZonesRenderer.d.ts +0 -0
  176. /package/dist/{components → src/components}/ConsoleFilter.d.ts +0 -0
  177. /package/dist/{components → src/components}/CopyableText.d.ts +0 -0
  178. /package/dist/{components → src/components}/LoadingButton.d.ts +0 -0
  179. /package/dist/{components → src/components}/LoadingCover.d.ts +0 -0
  180. /package/dist/{components → src/components}/ThemeSelect.d.ts +0 -0
  181. /package/dist/{components → src/components}/VelocitySlider.d.ts +0 -0
  182. /package/dist/{components → src/components}/jogging/JoggingCartesianAxisControl.d.ts +0 -0
  183. /package/dist/{components → src/components}/jogging/JoggingCartesianTab.d.ts +0 -0
  184. /package/dist/{components → src/components}/jogging/JoggingCartesianValues.d.ts +0 -0
  185. /package/dist/{components → src/components}/jogging/JoggingFreedriveTab.d.ts +0 -0
  186. /package/dist/{components → src/components}/jogging/JoggingJointLimitDetector.d.ts +0 -0
  187. /package/dist/{components → src/components}/jogging/JoggingJointRotationControl.d.ts +0 -0
  188. /package/dist/{components → src/components}/jogging/JoggingJointTab.d.ts +0 -0
  189. /package/dist/{components → src/components}/jogging/JoggingJointValues.d.ts +0 -0
  190. /package/dist/{components → src/components}/jogging/JoggingOptions.d.ts +0 -0
  191. /package/dist/{components → src/components}/jogging/JoggingStore.d.ts +0 -0
  192. /package/dist/{components → src/components}/jogging/JoggingVelocitySlider.d.ts +0 -0
  193. /package/dist/{components → src/components}/modal/NoMotionGroupModal.d.ts +0 -0
  194. /package/dist/{components → src/components}/robots/ABB_1200_07_7.d.ts +0 -0
  195. /package/dist/{components → src/components}/robots/AxisConfig.d.ts +0 -0
  196. /package/dist/{components → src/components}/robots/DHRobot.d.ts +0 -0
  197. /package/dist/{components → src/components}/robots/FANUC_ARC_Mate_100iD.d.ts +0 -0
  198. /package/dist/{components → src/components}/robots/FANUC_ARC_Mate_120iD.d.ts +0 -0
  199. /package/dist/{components → src/components}/robots/FANUC_CRX10iA.d.ts +0 -0
  200. /package/dist/{components → src/components}/robots/FANUC_CRX20iAL.d.ts +0 -0
  201. /package/dist/{components → src/components}/robots/FANUC_CRX25iA.d.ts +0 -0
  202. /package/dist/{components → src/components}/robots/FANUC_CRX25iAL.d.ts +0 -0
  203. /package/dist/{components → src/components}/robots/KUKA_KR210_R2700.d.ts +0 -0
  204. /package/dist/{components → src/components}/robots/KUKA_KR270_R2700.d.ts +0 -0
  205. /package/dist/{components → src/components}/robots/Robot.d.ts +0 -0
  206. /package/dist/{components → src/components}/robots/RobotAnimator.d.ts +0 -0
  207. /package/dist/{components → src/components}/robots/UniversalRobots_UR10.d.ts +0 -0
  208. /package/dist/{components → src/components}/robots/UniversalRobots_UR10e.d.ts +0 -0
  209. /package/dist/{components → src/components}/robots/UniversalRobots_UR3.d.ts +0 -0
  210. /package/dist/{components → src/components}/robots/UniversalRobots_UR3e.d.ts +0 -0
  211. /package/dist/{components → src/components}/robots/UniversalRobots_UR5.d.ts +0 -0
  212. /package/dist/{components → src/components}/robots/UniversalRobots_UR5e.d.ts +0 -0
  213. /package/dist/{components → src/components}/robots/Yaskawa_AR1440.d.ts +0 -0
  214. /package/dist/{components → src/components}/robots/Yaskawa_AR1730.d.ts +0 -0
  215. /package/dist/{components → src/components}/robots/Yaskawa_AR2010.d.ts +0 -0
  216. /package/dist/{components → src/components}/robots/Yaskawa_AR3120.d.ts +0 -0
  217. /package/dist/{components → src/components}/robots/Yaskawa_AR900.d.ts +0 -0
  218. /package/dist/{components → src/components}/utils/converters.d.ts +0 -0
  219. /package/dist/{components → src/components}/utils/errorHandling.d.ts +0 -0
  220. /package/dist/{components → src/components}/utils/hooks.d.ts +0 -0
  221. /package/dist/{components → src/components}/utils/robotTreeQuery.d.ts +0 -0
  222. /package/dist/{components → src/components}/wandelscript-editor/WandelscriptEditor.d.ts +0 -0
  223. /package/dist/{components → src/components}/wandelscript-editor/wandelscript.tmLanguage.d.ts +0 -0
  224. /package/dist/{i18n → src/i18n}/config.d.ts +0 -0
  225. /package/dist/{icons → src/icons}/index.d.ts +0 -0
  226. /package/dist/{themes → src/themes}/color.d.ts +0 -0
  227. /package/dist/{themes → src/themes}/theming.d.ts +0 -0
  228. /package/dist/{themes → stories}/novaTheme.stories.d.ts +0 -0
@@ -31,6 +31,7 @@ import { DHRobot } from "./DHRobot"
31
31
  import * as THREE from "three"
32
32
  import { ErrorBoundary } from "react-error-boundary"
33
33
  import ConsoleFilter from "../ConsoleFilter"
34
+ import { externalizeComponent } from "../../externalizeComponent"
34
35
 
35
36
  export type DHRobotProps = {
36
37
  rapidlyChangingMotionState: MotionGroupStateResponse
@@ -54,201 +55,193 @@ export function defaultGetModel(modelFromController: string): string {
54
55
  return `https://cdn.jsdelivr.net/gh/wandelbotsgmbh/wandelbots-js-react-components/public/models/${modelFromController}.glb`
55
56
  }
56
57
 
57
- export function SupportedRobot({
58
- rapidlyChangingMotionState,
59
- modelFromController,
60
- dhParameters,
61
- getModel = defaultGetModel,
62
- isGhost = false,
63
- ...props
64
- }: SupportedRobotProps) {
65
- let Robot
58
+ export const SupportedRobot = externalizeComponent(
59
+ ({
60
+ rapidlyChangingMotionState,
61
+ modelFromController,
62
+ dhParameters,
63
+ getModel = defaultGetModel,
64
+ isGhost = false,
65
+ ...props
66
+ }: SupportedRobotProps) => {
67
+ let Robot
66
68
 
67
- const robotRef = useRef<THREE.Group>(new THREE.Group())
69
+ const robotRef = useRef<THREE.Group>(new THREE.Group())
68
70
 
69
- const setRobotRef = useCallback(
70
- (instance: THREE.Group | null) => {
71
- if (instance !== null) {
72
- robotRef.current = instance
73
- console.log("robotRef.current", robotRef.current)
74
- if (
75
- isGhost &&
76
- robotRef.current &&
77
- robotRef.current.children.length > 0
78
- ) {
79
- addGhosts()
71
+ const setRobotRef = useCallback(
72
+ (instance: THREE.Group | null) => {
73
+ if (instance !== null) {
74
+ robotRef.current = instance
75
+ console.log("robotRef.current", robotRef.current)
76
+ if (
77
+ isGhost &&
78
+ robotRef.current &&
79
+ robotRef.current.children.length > 0
80
+ ) {
81
+ addGhosts()
82
+ }
80
83
  }
81
- }
82
- },
83
- [isGhost],
84
- )
84
+ },
85
+ [isGhost],
86
+ )
85
87
 
86
- const addGhosts = () => {
87
- if (robotRef.current && !robotRef.current.userData.ghostsCreated) {
88
- robotRef.current.traverse((obj) => {
89
- if (obj instanceof THREE.Mesh && !obj.userData.isGhost) {
90
- if (obj.material instanceof THREE.Material) {
91
- obj.material.colorWrite = false
92
- }
88
+ const addGhosts = () => {
89
+ if (robotRef.current && !robotRef.current.userData.ghostsCreated) {
90
+ robotRef.current.traverse((obj) => {
91
+ if (obj instanceof THREE.Mesh && !obj.userData.isGhost) {
92
+ if (obj.material instanceof THREE.Material) {
93
+ obj.material.colorWrite = false
94
+ }
93
95
 
94
- // Create a clone of the mesh
95
- const depth = obj.clone()
96
- const ghost = obj.clone()
96
+ // Create a clone of the mesh
97
+ const depth = obj.clone()
98
+ const ghost = obj.clone()
97
99
 
98
- depth.material = new THREE.MeshStandardMaterial({
99
- depthTest: true,
100
- depthWrite: true,
101
- colorWrite: false,
102
- polygonOffset: true,
103
- polygonOffsetFactor: 1,
104
- })
105
- depth.userData.isGhost = true
100
+ depth.material = new THREE.MeshStandardMaterial({
101
+ depthTest: true,
102
+ depthWrite: true,
103
+ colorWrite: false,
104
+ polygonOffset: true,
105
+ polygonOffsetFactor: 1,
106
+ })
107
+ depth.userData.isGhost = true
106
108
 
107
- // Set the material for the ghost mesh
108
- ghost.material = new THREE.MeshStandardMaterial({
109
- color: "#D91433",
110
- opacity: 0.3,
111
- depthTest: true,
112
- depthWrite: false,
113
- transparent: true,
114
- polygonOffset: true,
115
- polygonOffsetFactor: -1,
116
- })
117
- ghost.userData.isGhost = true
109
+ // Set the material for the ghost mesh
110
+ ghost.material = new THREE.MeshStandardMaterial({
111
+ color: "#D91433",
112
+ opacity: 0.3,
113
+ depthTest: true,
114
+ depthWrite: false,
115
+ transparent: true,
116
+ polygonOffset: true,
117
+ polygonOffsetFactor: -1,
118
+ })
119
+ ghost.userData.isGhost = true
118
120
 
119
- if (obj.parent) {
120
- obj.parent.add(depth)
121
- obj.parent.add(ghost)
121
+ if (obj.parent) {
122
+ obj.parent.add(depth)
123
+ obj.parent.add(ghost)
124
+ }
122
125
  }
123
- }
124
- })
125
- robotRef.current.userData.ghostsCreated = true
126
+ })
127
+ robotRef.current.userData.ghostsCreated = true
128
+ }
126
129
  }
127
- }
128
130
 
129
- const removeGhosts = () => {
130
- if (robotRef.current) {
131
- const objectsToRemove: THREE.Object3D[] = []
131
+ const removeGhosts = () => {
132
+ if (robotRef.current) {
133
+ const objectsToRemove: THREE.Object3D[] = []
132
134
 
133
- robotRef.current.traverse((obj) => {
134
- if (obj instanceof THREE.Mesh) {
135
- if (obj.material instanceof THREE.Material) {
136
- obj.material.colorWrite = true
135
+ robotRef.current.traverse((obj) => {
136
+ if (obj instanceof THREE.Mesh) {
137
+ if (obj.material instanceof THREE.Material) {
138
+ obj.material.colorWrite = true
139
+ }
137
140
  }
138
- }
139
141
 
140
- if (
141
- obj instanceof THREE.Mesh &&
142
- obj.userData !== undefined &&
143
- obj.userData &&
144
- obj.userData.isGhost !== undefined &&
145
- obj.userData.isGhost
146
- ) {
147
- objectsToRemove.push(obj)
148
- }
149
- })
142
+ if (
143
+ obj instanceof THREE.Mesh &&
144
+ obj.userData !== undefined &&
145
+ obj.userData &&
146
+ obj.userData.isGhost !== undefined &&
147
+ obj.userData.isGhost
148
+ ) {
149
+ objectsToRemove.push(obj)
150
+ }
151
+ })
150
152
 
151
- objectsToRemove.forEach((obj) => {
152
- if (obj.parent) {
153
- obj.parent.remove(obj)
154
- }
155
- })
153
+ objectsToRemove.forEach((obj) => {
154
+ if (obj.parent) {
155
+ obj.parent.remove(obj)
156
+ }
157
+ })
156
158
 
157
- robotRef.current.userData.ghostsCreated = false
159
+ robotRef.current.userData.ghostsCreated = false
160
+ }
158
161
  }
159
- }
160
162
 
161
- useEffect(() => {
162
- if (isGhost) {
163
- addGhosts()
164
- } else {
165
- removeGhosts()
166
- }
167
- }, [isGhost])
163
+ useEffect(() => {
164
+ if (isGhost) {
165
+ addGhosts()
166
+ } else {
167
+ removeGhosts()
168
+ }
169
+ }, [isGhost])
168
170
 
169
- switch (modelFromController) {
170
- case "UniversalRobots_UR3":
171
- Robot = UniversalRobots_UR3
172
- break
173
- case "UniversalRobots_UR3e":
174
- Robot = UniversalRobots_UR3e
175
- break
176
- case "UniversalRobots_UR5":
177
- Robot = UniversalRobots_UR5
178
- break
179
- case "UniversalRobots_UR5e":
180
- Robot = UniversalRobots_UR5e
181
- break
182
- case "UniversalRobots_UR10":
183
- Robot = UniversalRobots_UR10
184
- break
185
- case "UniversalRobots_UR10e":
186
- Robot = UniversalRobots_UR10e
187
- break
188
- case "Yaskawa_AR900":
189
- Robot = Yaskawa_AR900
190
- break
191
- case "Yaskawa_GP7":
192
- Robot = Yaskawa_AR900
193
- break
194
- case "Yaskawa_AR1440":
195
- Robot = Yaskawa_AR1440
196
- break
197
- case "Yaskawa_AR1730":
198
- Robot = Yaskawa_AR1730
199
- break
200
- case "Yaskawa_AR2010":
201
- Robot = Yaskawa_AR2010
202
- break
203
- case "Yaskawa_AR3120":
204
- Robot = Yaskawa_AR3120
205
- break
206
- case "FANUC_CRX10iA":
207
- Robot = FANUC_CRX10iA
208
- break
209
- case "FANUC_CRX20iAL":
210
- Robot = FANUC_CRX20iAL
211
- break
212
- case "FANUC_CRX25iA":
213
- Robot = FANUC_CRX25iA
214
- break
215
- case "FANUC_CRX25iAL":
216
- Robot = FANUC_CRX25iAL
217
- break
218
- case "FANUC_ARC_Mate_120iD":
219
- Robot = FANUC_ARC_Mate_120iD
220
- break
221
- case "FANUC_ARC_Mate_120iD35":
222
- Robot = FANUC_ARC_Mate_120iD
223
- break
224
- case "FANUC_ARC_Mate_100iD":
225
- Robot = FANUC_ARC_Mate_100iD
226
- break
227
- case "KUKA_KR210_R2700":
228
- Robot = KUKA_KR210_R2700
229
- break
230
- case "KUKA_KR270_R2700":
231
- Robot = KUKA_KR270_R2700
232
- break
233
- case "ABB_1200_07_7":
234
- Robot = ABB_1200_07_7
235
- break
236
- default:
237
- console.warn(`Unknown robot type: ${modelFromController}`)
238
- Robot = DHRobot
239
- }
171
+ switch (modelFromController) {
172
+ case "UniversalRobots_UR3":
173
+ Robot = UniversalRobots_UR3
174
+ break
175
+ case "UniversalRobots_UR3e":
176
+ Robot = UniversalRobots_UR3e
177
+ break
178
+ case "UniversalRobots_UR5":
179
+ Robot = UniversalRobots_UR5
180
+ break
181
+ case "UniversalRobots_UR5e":
182
+ Robot = UniversalRobots_UR5e
183
+ break
184
+ case "UniversalRobots_UR10":
185
+ Robot = UniversalRobots_UR10
186
+ break
187
+ case "UniversalRobots_UR10e":
188
+ Robot = UniversalRobots_UR10e
189
+ break
190
+ case "Yaskawa_AR900":
191
+ Robot = Yaskawa_AR900
192
+ break
193
+ case "Yaskawa_GP7":
194
+ Robot = Yaskawa_AR900
195
+ break
196
+ case "Yaskawa_AR1440":
197
+ Robot = Yaskawa_AR1440
198
+ break
199
+ case "Yaskawa_AR1730":
200
+ Robot = Yaskawa_AR1730
201
+ break
202
+ case "Yaskawa_AR2010":
203
+ Robot = Yaskawa_AR2010
204
+ break
205
+ case "Yaskawa_AR3120":
206
+ Robot = Yaskawa_AR3120
207
+ break
208
+ case "FANUC_CRX10iA":
209
+ Robot = FANUC_CRX10iA
210
+ break
211
+ case "FANUC_CRX20iAL":
212
+ Robot = FANUC_CRX20iAL
213
+ break
214
+ case "FANUC_CRX25iA":
215
+ Robot = FANUC_CRX25iA
216
+ break
217
+ case "FANUC_CRX25iAL":
218
+ Robot = FANUC_CRX25iAL
219
+ break
220
+ case "FANUC_ARC_Mate_120iD":
221
+ Robot = FANUC_ARC_Mate_120iD
222
+ break
223
+ case "FANUC_ARC_Mate_120iD35":
224
+ Robot = FANUC_ARC_Mate_120iD
225
+ break
226
+ case "FANUC_ARC_Mate_100iD":
227
+ Robot = FANUC_ARC_Mate_100iD
228
+ break
229
+ case "KUKA_KR210_R2700":
230
+ Robot = KUKA_KR210_R2700
231
+ break
232
+ case "KUKA_KR270_R2700":
233
+ Robot = KUKA_KR270_R2700
234
+ break
235
+ case "ABB_1200_07_7":
236
+ Robot = ABB_1200_07_7
237
+ break
238
+ default:
239
+ console.warn(`Unknown robot type: ${modelFromController}`)
240
+ Robot = DHRobot
241
+ }
240
242
 
241
- return (
242
- <ErrorBoundary
243
- fallback={
244
- <DHRobot
245
- rapidlyChangingMotionState={rapidlyChangingMotionState}
246
- dhParameters={dhParameters}
247
- {...props}
248
- />
249
- }
250
- >
251
- <Suspense
243
+ return (
244
+ <ErrorBoundary
252
245
  fallback={
253
246
  <DHRobot
254
247
  rapidlyChangingMotionState={rapidlyChangingMotionState}
@@ -257,16 +250,26 @@ export function SupportedRobot({
257
250
  />
258
251
  }
259
252
  >
260
- <group ref={setRobotRef}>
261
- <Robot
262
- rapidlyChangingMotionState={rapidlyChangingMotionState}
263
- modelURL={getModel(modelFromController)}
264
- dhParameters={dhParameters}
265
- {...props}
266
- />
267
- </group>
268
- </Suspense>
269
- <ConsoleFilter />
270
- </ErrorBoundary>
271
- )
272
- }
253
+ <Suspense
254
+ fallback={
255
+ <DHRobot
256
+ rapidlyChangingMotionState={rapidlyChangingMotionState}
257
+ dhParameters={dhParameters}
258
+ {...props}
259
+ />
260
+ }
261
+ >
262
+ <group ref={setRobotRef}>
263
+ <Robot
264
+ rapidlyChangingMotionState={rapidlyChangingMotionState}
265
+ modelURL={getModel(modelFromController)}
266
+ dhParameters={dhParameters}
267
+ {...props}
268
+ />
269
+ </group>
270
+ </Suspense>
271
+ <ConsoleFilter />
272
+ </ErrorBoundary>
273
+ )
274
+ },
275
+ )
@@ -1,17 +1,13 @@
1
1
  import Editor, { useMonaco, type Monaco } from "@monaco-editor/react"
2
2
  import { useEffect, useRef, useState } from "react"
3
- import type {
4
- BundledLanguage,
5
- HighlighterGeneric} from "shiki";
6
- import {
7
- createHighlighter,
8
- type BundledTheme,
9
- } from "shiki"
3
+ import type { BundledLanguage, HighlighterGeneric } from "shiki"
4
+ import { createHighlighter, type BundledTheme } from "shiki"
10
5
  import { shikiToMonaco } from "@shikijs/monaco"
11
6
 
12
7
  import wandelscriptTextmateGrammar from "./wandelscript.tmLanguage"
13
8
  import { useTheme } from "@mui/material"
14
9
  import type { editor } from "monaco-editor"
10
+ import { externalizeComponent } from "../../externalizeComponent"
15
11
 
16
12
  type WandelscriptEditorProps = {
17
13
  /** The current Wandelscript content of the code editor (controlled component) */
@@ -28,102 +24,104 @@ type WandelscriptEditorProps = {
28
24
  }
29
25
 
30
26
  /** A Monaco (VSCode-style) embedded code editor with Wandelscript syntax highlighting */
31
- export const WandelscriptEditor = (props: WandelscriptEditorProps) => {
32
- const monaco = useMonaco()
33
- const theme = useTheme()
34
- const shikiHighlighterRef = useRef<HighlighterGeneric<
35
- BundledLanguage,
36
- BundledTheme
37
- > | null>(null)
38
-
39
- const [activeShikiTheme, setActiveShikiTheme] =
40
- useState<BundledTheme>("dark-plus")
41
-
42
- const targetShikiTheme =
43
- theme.palette.mode === "dark" ? "dark-plus" : "light-plus"
44
-
45
- async function setupEditor(monaco: Monaco) {
46
- // Register and configure the Wandelscript language
47
- monaco.languages.register({ id: "wandelscript" })
48
-
49
- monaco.languages.setLanguageConfiguration("wandelscript", {
50
- comments: {
51
- lineComment: "#",
52
- },
53
- brackets: [
54
- ["(", ")"],
55
- ["[", "]"],
56
- ],
57
- autoClosingPairs: [
58
- { open: "[", close: "]" },
59
- { open: "(", close: ")" },
60
- ],
61
- surroundingPairs: [
62
- { open: "[", close: "]" },
63
- { open: "(", close: ")" },
64
- ],
65
- })
66
-
67
- // Monaco doesn't support TextMate grammar config directly, so we
68
- // use Shiki as an intermediary
69
-
70
- if (!shikiHighlighterRef.current) {
71
- shikiHighlighterRef.current = await createHighlighter({
72
- // Our textmate grammar doesn't quite conform to the expected type
73
- // here; I'm not sure what the missing properties mean exactly
74
- langs: [wandelscriptTextmateGrammar as any],
75
- themes: ["dark-plus", "light-plus"],
27
+ export const WandelscriptEditor = externalizeComponent(
28
+ (props: WandelscriptEditorProps) => {
29
+ const monaco = useMonaco()
30
+ const theme = useTheme()
31
+ const shikiHighlighterRef = useRef<HighlighterGeneric<
32
+ BundledLanguage,
33
+ BundledTheme
34
+ > | null>(null)
35
+
36
+ const [activeShikiTheme, setActiveShikiTheme] =
37
+ useState<BundledTheme>("dark-plus")
38
+
39
+ const targetShikiTheme =
40
+ theme.palette.mode === "dark" ? "dark-plus" : "light-plus"
41
+
42
+ async function setupEditor(monaco: Monaco) {
43
+ // Register and configure the Wandelscript language
44
+ monaco.languages.register({ id: "wandelscript" })
45
+
46
+ monaco.languages.setLanguageConfiguration("wandelscript", {
47
+ comments: {
48
+ lineComment: "#",
49
+ },
50
+ brackets: [
51
+ ["(", ")"],
52
+ ["[", "]"],
53
+ ],
54
+ autoClosingPairs: [
55
+ { open: "[", close: "]" },
56
+ { open: "(", close: ")" },
57
+ ],
58
+ surroundingPairs: [
59
+ { open: "[", close: "]" },
60
+ { open: "(", close: ")" },
61
+ ],
62
+ })
63
+
64
+ // Monaco doesn't support TextMate grammar config directly, so we
65
+ // use Shiki as an intermediary
66
+
67
+ if (!shikiHighlighterRef.current) {
68
+ shikiHighlighterRef.current = await createHighlighter({
69
+ // Our textmate grammar doesn't quite conform to the expected type
70
+ // here; I'm not sure what the missing properties mean exactly
71
+ langs: [wandelscriptTextmateGrammar as any],
72
+ themes: ["dark-plus", "light-plus"],
73
+ })
74
+ }
75
+
76
+ shikiToMonaco(shikiHighlighterRef.current, monaco)
77
+
78
+ // Override the generated shiki theme to use shiki syntax highlighting
79
+ // but vscode colors
80
+ monaco.editor.defineTheme(targetShikiTheme, {
81
+ base: theme.palette.mode === "dark" ? "vs-dark" : "vs",
82
+ inherit: true,
83
+ rules: [],
84
+ colors:
85
+ theme.palette.mode === "dark"
86
+ ? {
87
+ "editor.background": "#262F42",
88
+ "editorLineNumber.foreground": "#797979",
89
+ "editorLineNumber.activeForeground": "#e9e9e9",
90
+ "editor.lineHighlightBorder": "#494949",
91
+ }
92
+ : {},
76
93
  })
77
- }
78
94
 
79
- shikiToMonaco(shikiHighlighterRef.current, monaco)
80
-
81
- // Override the generated shiki theme to use shiki syntax highlighting
82
- // but vscode colors
83
- monaco.editor.defineTheme(targetShikiTheme, {
84
- base: theme.palette.mode === "dark" ? "vs-dark" : "vs",
85
- inherit: true,
86
- rules: [],
87
- colors:
88
- theme.palette.mode === "dark"
89
- ? {
90
- "editor.background": "#262F42",
91
- "editorLineNumber.foreground": "#797979",
92
- "editorLineNumber.activeForeground": "#e9e9e9",
93
- "editor.lineHighlightBorder": "#494949",
94
- }
95
- : {},
96
- })
97
-
98
- if (props.monacoSetup) {
99
- props.monacoSetup(monaco)
95
+ if (props.monacoSetup) {
96
+ props.monacoSetup(monaco)
97
+ }
98
+
99
+ setActiveShikiTheme(targetShikiTheme)
100
100
  }
101
101
 
102
- setActiveShikiTheme(targetShikiTheme)
103
- }
102
+ useEffect(() => {
103
+ if (monaco) {
104
+ setupEditor(monaco)
105
+ }
106
+ }, [monaco, targetShikiTheme])
104
107
 
105
- useEffect(() => {
106
- if (monaco) {
107
- setupEditor(monaco)
108
+ if (!monaco) {
109
+ return null
108
110
  }
109
- }, [monaco, targetShikiTheme])
110
-
111
- if (!monaco) {
112
- return null
113
- }
114
-
115
- return (
116
- <Editor
117
- value={props.code}
118
- onChange={props.onChange}
119
- defaultLanguage="wandelscript"
120
- theme={activeShikiTheme}
121
- options={{
122
- minimap: { enabled: false },
123
- wordWrap: "on",
124
- automaticLayout: true,
125
- ...props.monacoOptions,
126
- }}
127
- />
128
- )
129
- }
111
+
112
+ return (
113
+ <Editor
114
+ value={props.code}
115
+ onChange={props.onChange}
116
+ defaultLanguage="wandelscript"
117
+ theme={activeShikiTheme}
118
+ options={{
119
+ minimap: { enabled: false },
120
+ wordWrap: "on",
121
+ automaticLayout: true,
122
+ ...props.monacoOptions,
123
+ }}
124
+ />
125
+ )
126
+ },
127
+ )
@@ -11,14 +11,16 @@ import i18n from "./i18n/config"
11
11
  * be provided by the user application; this wrapper ensures
12
12
  * they can be used either way.
13
13
  */
14
- export function externalizeComponent<T>(
15
- Component: (props: T) => React.ReactNode,
16
- ) {
17
- return (props: T) => (
14
+ export function externalizeComponent<T extends JSX.ElementType>(
15
+ Component: T,
16
+ ): T {
17
+ const WrappedComponent = ((props: T) => (
18
18
  <NovaComponentsProvider>
19
- <Component {...(props as T & JSX.IntrinsicAttributes)} />
19
+ <Component {...(props as any)} />
20
20
  </NovaComponentsProvider>
21
- )
21
+ )) as any
22
+
23
+ return WrappedComponent
22
24
  }
23
25
 
24
26
  const NovaComponentsProvider: FC<{ children: React.ReactNode }> = ({