@wandelbots/wandelbots-js-react-components 3.6.0-pr.feat-model-retrieval-from-rdp.463.38d5c81 → 3.6.0-pr.feat-add-abb-cobots.464.ab034a2

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 (77) hide show
  1. package/README.md +0 -18
  2. package/dist/3d.cjs.js +1 -1
  3. package/dist/3d.es.js +1 -1
  4. package/dist/{LoadingCover-6gWr11KP.js → LoadingCover-Dr9hDTku.js} +10 -11
  5. package/dist/{LoadingCover-6gWr11KP.js.map → LoadingCover-Dr9hDTku.js.map} +1 -1
  6. package/dist/LoadingCover-r2yhJZF9.cjs +2 -0
  7. package/dist/{LoadingCover-CukpS_aj.cjs.map → LoadingCover-r2yhJZF9.cjs.map} +1 -1
  8. package/dist/WandelscriptEditor-Dj7TBCkF.cjs +2 -0
  9. package/dist/{WandelscriptEditor-D6_vS5Uk.cjs.map → WandelscriptEditor-Dj7TBCkF.cjs.map} +1 -1
  10. package/dist/{WandelscriptEditor-7eN-Yw7m.js → WandelscriptEditor-DnJvITTA.js} +3 -3
  11. package/dist/{WandelscriptEditor-7eN-Yw7m.js.map → WandelscriptEditor-DnJvITTA.js.map} +1 -1
  12. package/dist/auth0-spa-js.production.esm-DL9f1uDJ.js +1438 -0
  13. package/dist/auth0-spa-js.production.esm-DL9f1uDJ.js.map +1 -0
  14. package/dist/auth0-spa-js.production.esm-DTiWXa87.cjs +5 -0
  15. package/dist/auth0-spa-js.production.esm-DTiWXa87.cjs.map +1 -0
  16. package/dist/components/RobotCard.d.ts +1 -1
  17. package/dist/components/RobotCard.d.ts.map +1 -1
  18. package/dist/components/robots/GenericRobot.d.ts +2 -2
  19. package/dist/components/robots/GenericRobot.d.ts.map +1 -1
  20. package/dist/components/robots/Robot.d.ts +1 -1
  21. package/dist/components/robots/Robot.d.ts.map +1 -1
  22. package/dist/components/robots/SupportedRobot.d.ts +1 -1
  23. package/dist/components/robots/SupportedRobot.d.ts.map +1 -1
  24. package/dist/components/robots/robotModelLogic.d.ts +1 -1
  25. package/dist/components/robots/robotModelLogic.d.ts.map +1 -1
  26. package/dist/core.cjs.js +1 -1
  27. package/dist/core.es.js +4 -4
  28. package/dist/index-CAib4NKw.js +2261 -0
  29. package/dist/index-CAib4NKw.js.map +1 -0
  30. package/dist/index-CqMZL0FV.cjs +2 -0
  31. package/dist/index-CqMZL0FV.cjs.map +1 -0
  32. package/dist/index-CxasuX80.js +5212 -0
  33. package/dist/index-CxasuX80.js.map +1 -0
  34. package/dist/index-DxwppshT.cjs +29 -0
  35. package/dist/index-DxwppshT.cjs.map +1 -0
  36. package/dist/index.cjs.js +1 -1
  37. package/dist/index.es.js +6 -6
  38. package/dist/lib/JoggerConnection.d.ts.map +1 -1
  39. package/dist/manufacturerHomePositions-Ca80ycLi.cjs +2 -0
  40. package/dist/manufacturerHomePositions-Ca80ycLi.cjs.map +1 -0
  41. package/dist/{manufacturerHomePositions-CtUNJexK.js → manufacturerHomePositions-CgaG5vaK.js} +290 -350
  42. package/dist/manufacturerHomePositions-CgaG5vaK.js.map +1 -0
  43. package/dist/{theming-B7ojcJTM.js → theming-Coh4zx7d.js} +6245 -4802
  44. package/dist/theming-Coh4zx7d.js.map +1 -0
  45. package/dist/theming-D4ztsmTr.cjs +133 -0
  46. package/dist/theming-D4ztsmTr.cjs.map +1 -0
  47. package/dist/wandelscript.cjs.js +1 -1
  48. package/dist/wandelscript.es.js +1 -1
  49. package/package.json +4 -14
  50. package/src/components/RobotCard.tsx +1 -1
  51. package/src/components/robots/GenericRobot.tsx +36 -98
  52. package/src/components/robots/Robot.tsx +1 -1
  53. package/src/components/robots/SupportedRobot.tsx +3 -11
  54. package/src/components/robots/robotModelLogic.ts +6 -40
  55. package/src/lib/JoggerConnection.ts +10 -10
  56. package/src/lib/MotionStreamConnection.ts +1 -1
  57. package/dist/LoadingCover-CukpS_aj.cjs +0 -2
  58. package/dist/WandelscriptEditor-D6_vS5Uk.cjs +0 -2
  59. package/dist/auth0-spa-js.production.esm-BMSlxZC5.js +0 -3877
  60. package/dist/auth0-spa-js.production.esm-BMSlxZC5.js.map +0 -1
  61. package/dist/auth0-spa-js.production.esm-DZ6lsBvD.cjs +0 -5
  62. package/dist/auth0-spa-js.production.esm-DZ6lsBvD.cjs.map +0 -1
  63. package/dist/externalizeComponent-CkVWk2F_.cjs +0 -24
  64. package/dist/externalizeComponent-CkVWk2F_.cjs.map +0 -1
  65. package/dist/externalizeComponent-Dc3fViZA.js +0 -489
  66. package/dist/externalizeComponent-Dc3fViZA.js.map +0 -1
  67. package/dist/interpolation-DAXKfoDS.cjs +0 -20
  68. package/dist/interpolation-DAXKfoDS.cjs.map +0 -1
  69. package/dist/interpolation-DcPbemBD.js +0 -6924
  70. package/dist/interpolation-DcPbemBD.js.map +0 -1
  71. package/dist/manufacturerHomePositions-Badt_vO2.cjs +0 -2
  72. package/dist/manufacturerHomePositions-Badt_vO2.cjs.map +0 -1
  73. package/dist/manufacturerHomePositions-CtUNJexK.js.map +0 -1
  74. package/dist/theming-B7ojcJTM.js.map +0 -1
  75. package/dist/theming-C9apy9Ov.cjs +0 -115
  76. package/dist/theming-C9apy9Ov.cjs.map +0 -1
  77. package/src/env.d.ts +0 -3
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./WandelscriptEditor-D6_vS5Uk.cjs");exports.WandelscriptEditor=t.WandelscriptEditor;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./WandelscriptEditor-Dj7TBCkF.cjs");exports.WandelscriptEditor=t.WandelscriptEditor;
2
2
  //# sourceMappingURL=wandelscript.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { W as t } from "./WandelscriptEditor-7eN-Yw7m.js";
1
+ import { W as t } from "./WandelscriptEditor-DnJvITTA.js";
2
2
  export {
3
3
  t as WandelscriptEditor
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wandelbots/wandelbots-js-react-components",
3
- "version": "3.6.0-pr.feat-model-retrieval-from-rdp.463.38d5c81",
3
+ "version": "3.6.0-pr.feat-add-abb-cobots.464.ab034a2",
4
4
  "description": "React UI toolkit for building applications on top of the Wandelbots platform",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -50,8 +50,7 @@
50
50
  "ci:test:runner": "wait-on tcp:127.0.0.1:9009 && test-storybook --url http://127.0.0.1:9009 --index-json --browsers chromium",
51
51
  "build": "rimraf dist && vite build && tsc --declaration --emitDeclarationOnly",
52
52
  "build-storybook": "storybook build",
53
- "prepare": "husky || true",
54
- "td": "tsx scripts/test-deploy.ts"
53
+ "prepare": "husky || true"
55
54
  },
56
55
  "repository": {
57
56
  "type": "git",
@@ -64,10 +63,6 @@
64
63
  ],
65
64
  "author": "Wandelbots",
66
65
  "license": "Apache-2.0",
67
- "engines": {
68
- "node": ">=18.14.0",
69
- "npm": ">=8.0.0"
70
- },
71
66
  "devDependencies": {
72
67
  "@emotion/react": "^11.14.0",
73
68
  "@emotion/styled": "^11.14.0",
@@ -93,7 +88,7 @@
93
88
  "@types/react": "^19.1.8",
94
89
  "@types/three": "^0.182.0",
95
90
  "@vitejs/plugin-react": "^4.3.4",
96
- "@wandelbots/nova-js": "^3.5.0",
91
+ "@wandelbots/nova-js": "^3.4.1",
97
92
  "add": "^2.0.6",
98
93
  "eslint-plugin-storybook": "^10.1.10",
99
94
  "glob": "^13.0.0",
@@ -124,7 +119,6 @@
124
119
  "three": "^0.182.0",
125
120
  "three-stdlib": "^2.35.14",
126
121
  "ts-dedent": "^2.2.0",
127
- "tsx": "^4.21.0",
128
122
  "typescript": "^5.8.2",
129
123
  "unplugin": "^1.15.0",
130
124
  "vite": "^6.2.0",
@@ -176,11 +170,7 @@
176
170
  "dependencies": {
177
171
  "@mui/x-charts": "8.24.0",
178
172
  "@mui/x-data-grid": "8.24.0",
179
- "@wandelbots/nova-api": "26.1.0-rc.2",
180
- "@wandelbots/nova-js": "3.5.0",
181
- "axios": "^1.13.2",
182
- "dotenv": "^17.2.3",
183
- "i18next-browser-languagedetector": "^8.2.0",
173
+ "i18next-browser-languagedetector": "^8.0.4",
184
174
  "lodash-es": "^4.17.21",
185
175
  "mobx": "^6.13.6",
186
176
  "mobx-react-lite": "^4.1.0",
@@ -52,7 +52,7 @@ export interface RobotCardProps {
52
52
  flangeRef?: React.Ref<Group>
53
53
  postModelRender?: () => void
54
54
  transparentColor?: string
55
- getModel?: (modelFromController: string) => Promise<string>
55
+ getModel?: (modelFromController: string) => string
56
56
  }>
57
57
  /** Custom component to render in the content area (optional) */
58
58
  customContentComponent?: React.ComponentType<Record<string, unknown>>
@@ -1,12 +1,12 @@
1
1
  import { useGLTF } from "@react-three/drei"
2
2
  import type { ThreeElements } from "@react-three/fiber"
3
- import React, { useCallback, useEffect, useState } from "react"
3
+ import React, { useCallback } from "react"
4
4
  import type { Group, Mesh } from "three"
5
5
  import { type Object3D } from "three"
6
6
  import { isFlange, parseRobotModel } from "./robotModelLogic"
7
7
 
8
8
  export type RobotModelProps = {
9
- modelURL: string | Promise<string>
9
+ modelURL: string
10
10
  /**
11
11
  * Called after a robot model has been loaded and
12
12
  * rendered into the threejs scene
@@ -19,26 +19,16 @@ function isMesh(node: Object3D): node is Mesh {
19
19
  return node.type === "Mesh"
20
20
  }
21
21
 
22
- // Separate component that only renders when we have a valid URL
23
- function LoadedRobotModel({
24
- url,
25
- flangeRef,
26
- postModelRender,
27
- ...props
28
- }: {
29
- url: string
30
- flangeRef?: React.Ref<Group>
31
- postModelRender?: () => void
32
- } & ThreeElements["group"]) {
33
- const gltfResult = useGLTF(url)
34
- let gltf
35
- try {
36
- const parsed = parseRobotModel(gltfResult, 'robot.glb')
37
- gltf = parsed.gltf
38
- } catch (err) {
39
- console.warn('parseRobotModel failed:', err)
40
- gltf = gltfResult
41
- }
22
+ export function GenericRobot({
23
+ modelURL,
24
+ flangeRef,
25
+ postModelRender,
26
+ ...props
27
+ }: RobotModelProps) {
28
+ const { gltf } = parseRobotModel(
29
+ useGLTF(modelURL),
30
+ modelURL.split("/").pop() || modelURL,
31
+ )
42
32
 
43
33
  const groupRef: React.RefCallback<Group> = useCallback(
44
34
  (group) => {
@@ -46,45 +36,33 @@ function LoadedRobotModel({
46
36
  postModelRender()
47
37
  }
48
38
  },
49
- [postModelRender],
39
+ [modelURL],
50
40
  )
51
41
 
52
42
  function renderNode(node: Object3D): React.ReactNode {
53
- try {
54
- if (isMesh(node)) {
55
- // Defensive: only render mesh if geometry exists
56
- if ((node as Mesh).geometry) {
57
- return (
58
- <mesh
59
- name={node.name}
60
- key={node.uuid}
61
- geometry={(node as Mesh).geometry}
62
- material={(node as Mesh).material}
63
- position={node.position}
64
- rotation={node.rotation}
65
- />
66
- )
67
- }
68
- // Fallback to empty group if geometry is missing
69
- return (
70
- <group name={node.name} key={node.uuid} position={node.position} rotation={node.rotation} />
71
- )
72
- } else {
73
- return (
74
- <group
75
- name={node.name}
76
- key={node.uuid}
77
- position={node.position}
78
- rotation={node.rotation}
79
- ref={isFlange(node) ? flangeRef : undefined}
80
- >
81
- {node.children.map(renderNode)}
82
- </group>
83
- )
84
- }
85
- } catch (e) {
86
- console.warn('Error rendering node', node.name, e)
87
- return null
43
+ if (isMesh(node)) {
44
+ return (
45
+ <mesh
46
+ name={node.name}
47
+ key={node.uuid}
48
+ geometry={node.geometry}
49
+ material={node.material}
50
+ position={node.position}
51
+ rotation={node.rotation}
52
+ />
53
+ )
54
+ } else {
55
+ return (
56
+ <group
57
+ name={node.name}
58
+ key={node.uuid}
59
+ position={node.position}
60
+ rotation={node.rotation}
61
+ ref={isFlange(node) ? flangeRef : undefined}
62
+ >
63
+ {node.children.map(renderNode)}
64
+ </group>
65
+ )
88
66
  }
89
67
  }
90
68
 
@@ -94,43 +72,3 @@ function LoadedRobotModel({
94
72
  </group>
95
73
  )
96
74
  }
97
-
98
- export function GenericRobot({
99
- modelURL,
100
- flangeRef,
101
- postModelRender,
102
- ...props
103
- }: RobotModelProps) {
104
- const [resolvedURL, setResolvedURL] = useState<string | null>(null)
105
-
106
- useEffect(() => {
107
- const resolveURL = async () => {
108
- try {
109
- if (typeof modelURL === 'string') {
110
- setResolvedURL(modelURL)
111
- } else {
112
- const url = await modelURL
113
- setResolvedURL(url)
114
- }
115
- } catch (error) {
116
- console.error('Failed to resolve model URL:', error)
117
- }
118
- }
119
-
120
- resolveURL()
121
- }, [modelURL])
122
-
123
- // Don't render until we have a resolved URL
124
- if (!resolvedURL) {
125
- return null // Loading state
126
- }
127
-
128
- return (
129
- <LoadedRobotModel
130
- url={resolvedURL}
131
- flangeRef={flangeRef}
132
- postModelRender={postModelRender}
133
- {...props}
134
- />
135
- )
136
- }
@@ -7,7 +7,7 @@ import { SupportedRobot } from "./SupportedRobot"
7
7
 
8
8
  export type RobotProps = {
9
9
  connectedMotionGroup: ConnectedMotionGroup
10
- getModel?: (modelFromController: string) => Promise<string>
10
+ getModel?: (modelFromController: string) => string
11
11
  flangeRef?: React.Ref<Group>
12
12
  transparentColor?: string
13
13
  postModelRender?: () => void
@@ -22,7 +22,7 @@ export type SupportedRobotProps = {
22
22
  modelFromController: string
23
23
  dhParameters: DHParameter[]
24
24
  flangeRef?: React.Ref<THREE.Group>
25
- getModel?: (modelFromController: string) => Promise<string> | undefined
25
+ getModel?: (modelFromController: string) => string
26
26
  postModelRender?: () => void
27
27
  transparentColor?: string
28
28
  } & ThreeElements["group"]
@@ -67,7 +67,7 @@ export const SupportedRobot = externalizeComponent(
67
67
  fallback={dhrobot}
68
68
  onError={(err) => {
69
69
  // Missing model; show the fallback for now
70
- console.warn(err)
70
+ console.error(err)
71
71
  }}
72
72
  >
73
73
  <Suspense fallback={dhrobot}>
@@ -77,15 +77,7 @@ export const SupportedRobot = externalizeComponent(
77
77
  dhParameters={dhParameters}
78
78
  >
79
79
  <GenericRobot
80
- modelURL={(() => {
81
- const result = getModel(modelFromController)
82
- if (!result) {
83
- const mockBlob = new Blob([], { type: 'model/gltf-binary' })
84
- const mockFile = new File([mockBlob], `${modelFromController}.glb`, { type: 'model/gltf-binary' })
85
- return Promise.resolve(URL.createObjectURL(mockFile))
86
- }
87
- return result
88
- })()}
80
+ modelURL={getModel(modelFromController)}
89
81
  postModelRender={postModelRender}
90
82
  flangeRef={flangeRef}
91
83
  {...props}
@@ -1,47 +1,13 @@
1
- import { NovaClient } from "@wandelbots/nova-js/v2"
2
1
  import type { Object3D } from "three"
3
2
  import type { GLTF } from "three-stdlib"
3
+ import { version } from "../../../package.json"
4
4
 
5
- const modelCache = new Map<string, Promise<string>>()
6
-
7
- export async function defaultGetModel(modelFromController: string): Promise<string> {
8
- // Check cache first
9
- if (modelCache.has(modelFromController)) {
10
- return modelCache.get(modelFromController)!
5
+ export function defaultGetModel(modelFromController: string): string {
6
+ let useVersion = version
7
+ if (version.startsWith("0.")) {
8
+ useVersion = ""
11
9
  }
12
-
13
- // Create the promise and cache it immediately to prevent duplicate calls
14
- const modelPromise = (async () => {
15
- const instanceUrl = import.meta.env.WANDELAPI_BASE_URL || import.meta.env.VITE_NOVA_INSTANCE_URL
16
-
17
- const nova = new NovaClient({ instanceUrl })
18
-
19
- // Configure axios to handle binary responses for GLB files
20
- const apiInstance = nova.api.motionGroupModels as any
21
- if (apiInstance.axios?.interceptors) {
22
- apiInstance.axios.interceptors.request.use((config: any) => {
23
- if (config.url?.includes('/glb')) {
24
- config.responseType = 'blob'
25
- }
26
- return config
27
- })
28
- }
29
-
30
- try {
31
- const file = await nova.api.motionGroupModels.getMotionGroupGlbModel(modelFromController)
32
-
33
- // Create object URL from the file and return it
34
- const url = URL.createObjectURL(file)
35
- return url
36
- } catch (error) {
37
- console.error("Failed to fetch model:", error)
38
- throw error
39
- }
40
- })()
41
-
42
- // Cache the promise
43
- modelCache.set(modelFromController, modelPromise)
44
- return modelPromise
10
+ return `https://cdn.jsdelivr.net/gh/wandelbotsgmbh/wandelbots-js-react-components${useVersion ? `@${useVersion}` : ""}/public/models/${modelFromController}.glb`
45
11
  }
46
12
 
47
13
  /**
@@ -390,14 +390,14 @@ export class JoggerConnection {
390
390
  axis: "x" | "y" | "z"
391
391
  direction: "-" | "+"
392
392
  motion:
393
- | {
394
- type: "rotate"
395
- distanceRads: number
396
- }
397
- | {
398
- type: "translate"
399
- distanceMm: number
400
- }
393
+ | {
394
+ type: "rotate"
395
+ distanceRads: number
396
+ }
397
+ | {
398
+ type: "translate"
399
+ distanceMm: number
400
+ }
401
401
  }) {
402
402
  const commands: MotionCommand[] = []
403
403
 
@@ -559,8 +559,8 @@ export class JoggerConnection {
559
559
  } else {
560
560
  throw new Error(
561
561
  result?.add_trajectory_error?.message ||
562
- result?.message ||
563
- "Failed to execute trajectory, unknown error",
562
+ result?.message ||
563
+ "Failed to execute trajectory, unknown error",
564
564
  )
565
565
  }
566
566
  }
@@ -31,7 +31,7 @@ export class MotionStreamConnection {
31
31
  const controller =
32
32
  await nova.api.controller.getCurrentRobotControllerState(controllerId)
33
33
  const motionGroup = controller?.motion_groups.find(
34
- (mg: MotionGroupState) => mg.motion_group === motionGroupId,
34
+ (mg) => mg.motion_group === motionGroupId,
35
35
  )
36
36
  if (!controller || !motionGroup) {
37
37
  throw new Error(
@@ -1,2 +0,0 @@
1
- "use strict";const t=require("./externalizeComponent-CkVWk2F_.cjs"),o=require("@mui/material"),l=require("lodash-es"),a=require("react"),c=require("axios");function m(e){try{return JSON.stringify(e)}catch{return}}function g(e,r){throw new Error(r+` ${JSON.stringify(e)}`)}function d(e){var r,s,n,i;return e instanceof c.AxiosError&&e.code==="ERR_NETWORK"?"Failed to connect to the server. Please check your internet connection.":e instanceof c.AxiosError&&e.response?`${(r=e.response)==null?void 0:r.status} ${(s=e.response)==null?void 0:s.statusText} from ${(n=e.response)==null?void 0:n.config.url}: ${JSON.stringify((i=e.response)==null?void 0:i.data)}`:e instanceof Error?e.message:`Unexpected error: ${m(e)||e}`}const h=e=>{const r=e.softTimeout||3e3,[s,n]=a.useState(!1),i=o.useTheme();return a.useEffect(()=>{const x=setTimeout(()=>{n(!0)},r);return()=>clearTimeout(x)}),t.jsxRuntimeExports.jsx(o.Stack,{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",sx:{color:i.palette.text.primary},children:e.error?t.jsxRuntimeExports.jsx(u,{loadingMessage:e.message,error:e.error}):t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.jsxRuntimeExports.jsx(o.CircularProgress,{sx:{marginBottom:"24px"}}),!!e.message&&t.jsxRuntimeExports.jsx("div",{children:e.message}),t.jsxRuntimeExports.jsx(o.Stack,{sx:{visibility:s?"visible":"hidden",marginTop:"1rem",color:i.palette.text.secondary},children:"This is taking longer than expected..."})]})})},u=e=>{const r=d(e.error),s=e.error instanceof Error?e.error.stack:null,n=o.useTheme();return t.jsxRuntimeExports.jsxs(o.Stack,{sx:{maxHeight:"100%",maxWidth:"min(100%, 800px)",padding:2,overflow:"auto",color:n.palette.error.main,"& pre":{whiteSpace:"pre-wrap",wordBreak:"break-word",paddingBottom:"3rem"}},children:[(e.loadingMessage?`Error while ${l.lowerFirst(o.capitalize(e.loadingMessage))} - `:"")+r,t.jsxRuntimeExports.jsx("br",{}),s&&t.jsxRuntimeExports.jsx("pre",{children:s})]})};exports.LoadingCover=h;exports.LoadingErrorMessage=u;exports.assertUnreachable=g;
2
- //# sourceMappingURL=LoadingCover-CukpS_aj.cjs.map
@@ -1,2 +0,0 @@
1
- "use strict";var w=Object.create;var p=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var v=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of f(t))!b.call(e,i)&&i!==n&&p(e,i,{get:()=>t[i],enumerable:!(s=k(t,i))||s.enumerable});return e};var c=(e,t,n)=>(n=e!=null?w(x(e)):{},v(t||!e||!e.__esModule?p(n,"default",{value:e,enumerable:!0}):n,e));const r=require("./externalizeComponent-CkVWk2F_.cjs"),u=require("react"),C=require("@mui/material"),T=require("./LoadingCover-CukpS_aj.cjs"),y={$schema:"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",name:"wandelscript",patterns:[{include:"#keywords"},{include:"#strings"},{include:"#comments"},{include:"#functions"}],repository:{keywords:{patterns:[{name:"keyword.control.flow.wandelscript",match:"\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\b"}]},strings:{name:"string.quoted.double.wandelscript",begin:'"',end:'"',patterns:[{name:"constant.character.escape.wandelscript",match:"\\\\."}]},comments:{patterns:[{begin:"#",beginCaptures:{0:{name:"punctuation.definition.comment.wandelscript"}},end:"$",name:"comment.line.number-sign.wandelscript"}]},functions:{patterns:[{match:"[a-zA-Z_-]+\\(",name:"entity.name.function.wandelscript"}]}},scopeName:"source.wandelscript"},E=u.lazy(()=>import("@monaco-editor/react"));let l=null;async function S(){if(!l){const[{createHighlighter:e},{shikiToMonaco:t}]=await Promise.all([import("shiki"),import("@shikijs/monaco")]);l={shiki:await e({langs:[y],themes:["dark-plus","light-plus"]}),shikiToMonaco:t}}return l}const j=r.externalizeComponent(e=>{const t=C.useTheme(),[n,s]=u.useState("dark-plus"),i=t.palette.mode==="dark"?"dark-plus":"light-plus";async function g(a){var m,d;a.languages.register({id:"wandelscript"}),a.languages.setLanguageConfiguration("wandelscript",{comments:{lineComment:"#"},brackets:[["(",")"],["[","]"]],autoClosingPairs:[{open:"[",close:"]"},{open:"(",close:")"}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"}]});const{shiki:o,shikiToMonaco:h}=await S();h(o,a),a.editor.defineTheme(i,((d=(m=t.componentsExt)==null?void 0:m.WandelscriptEditor)==null?void 0:d.monacoTheme)??{base:t.palette.mode==="dark"?"vs-dark":"vs",inherit:!0,rules:[],colors:{}}),e.monacoSetup&&e.monacoSetup(a),s(i)}return r.jsxRuntimeExports.jsx(u.Suspense,{fallback:r.jsxRuntimeExports.jsx(T.LoadingCover,{}),children:r.jsxRuntimeExports.jsx(E,{value:e.code,onMount:(a,o)=>{g(o)},onChange:e.onChange,defaultLanguage:"wandelscript",theme:n,options:{minimap:{enabled:!1},wordWrap:"on",automaticLayout:!0,...e.monacoOptions}})})});exports.WandelscriptEditor=j;
2
- //# sourceMappingURL=WandelscriptEditor-D6_vS5Uk.cjs.map