@wandelbots/wandelbots-js-react-components 2.58.0 → 2.59.0-pr.dev-fix-flaky-task.488.1957fef

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 (172) hide show
  1. package/README.md +107 -10
  2. package/dist/3d.cjs.js +2 -0
  3. package/dist/3d.cjs.js.map +1 -0
  4. package/dist/3d.d.ts +11 -0
  5. package/dist/3d.d.ts.map +1 -0
  6. package/dist/3d.es.js +16 -0
  7. package/dist/3d.es.js.map +1 -0
  8. package/dist/LoadingCover-6gWr11KP.js +88 -0
  9. package/dist/LoadingCover-6gWr11KP.js.map +1 -0
  10. package/dist/LoadingCover-CukpS_aj.cjs +2 -0
  11. package/dist/LoadingCover-CukpS_aj.cjs.map +1 -0
  12. package/dist/WandelscriptEditor-7eN-Yw7m.js +140 -0
  13. package/dist/WandelscriptEditor-7eN-Yw7m.js.map +1 -0
  14. package/dist/WandelscriptEditor-D6_vS5Uk.cjs +2 -0
  15. package/dist/WandelscriptEditor-D6_vS5Uk.cjs.map +1 -0
  16. package/dist/auth0-spa-js.production.esm-BMSlxZC5.js +3877 -0
  17. package/dist/auth0-spa-js.production.esm-BMSlxZC5.js.map +1 -0
  18. package/dist/auth0-spa-js.production.esm-DZ6lsBvD.cjs +5 -0
  19. package/dist/auth0-spa-js.production.esm-DZ6lsBvD.cjs.map +1 -0
  20. package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts +1 -1
  21. package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts.map +1 -1
  22. package/dist/components/3d-viewport/SafetyZonesRenderer.d.ts.map +1 -1
  23. package/dist/components/3d-viewport/collider/ColliderCollection.d.ts +1 -1
  24. package/dist/components/3d-viewport/collider/ColliderCollection.d.ts.map +1 -1
  25. package/dist/components/3d-viewport/collider/ColliderElement.d.ts +1 -1
  26. package/dist/components/3d-viewport/collider/ColliderElement.d.ts.map +1 -1
  27. package/dist/components/3d-viewport/collider/CollisionSceneRenderer.d.ts +1 -1
  28. package/dist/components/3d-viewport/collider/CollisionSceneRenderer.d.ts.map +1 -1
  29. package/dist/components/3d-viewport/collider/colliderShapeToBufferGeometry.d.ts +1 -1
  30. package/dist/components/3d-viewport/collider/colliderShapeToBufferGeometry.d.ts.map +1 -1
  31. package/dist/components/ProgramStateIndicator.d.ts +3 -3
  32. package/dist/components/ProgramStateIndicator.d.ts.map +1 -1
  33. package/dist/components/RobotCard.d.ts +5 -4
  34. package/dist/components/RobotCard.d.ts.map +1 -1
  35. package/dist/components/jogging/JoggingBlocked.d.ts +7 -0
  36. package/dist/components/jogging/JoggingBlocked.d.ts.map +1 -0
  37. package/dist/components/jogging/JoggingCartesianTab.d.ts.map +1 -1
  38. package/dist/components/jogging/JoggingOptions.d.ts.map +1 -1
  39. package/dist/components/jogging/JoggingPanel.d.ts +1 -1
  40. package/dist/components/jogging/JoggingPanel.d.ts.map +1 -1
  41. package/dist/components/jogging/JoggingStore.d.ts +10 -5
  42. package/dist/components/jogging/JoggingStore.d.ts.map +1 -1
  43. package/dist/components/jogging/PoseCartesianValues.d.ts +2 -2
  44. package/dist/components/jogging/PoseCartesianValues.d.ts.map +1 -1
  45. package/dist/components/jogging/PoseJointValues.d.ts +1 -2
  46. package/dist/components/jogging/PoseJointValues.d.ts.map +1 -1
  47. package/dist/components/robots/DHRobot.d.ts.map +1 -1
  48. package/dist/components/robots/GenericRobot.d.ts +2 -2
  49. package/dist/components/robots/GenericRobot.d.ts.map +1 -1
  50. package/dist/components/robots/Robot.d.ts +4 -2
  51. package/dist/components/robots/Robot.d.ts.map +1 -1
  52. package/dist/components/robots/RobotAnimator.d.ts +2 -2
  53. package/dist/components/robots/RobotAnimator.d.ts.map +1 -1
  54. package/dist/components/robots/SupportedRobot.d.ts +4 -4
  55. package/dist/components/robots/SupportedRobot.d.ts.map +1 -1
  56. package/dist/components/robots/manufacturerHomePositions.d.ts +1 -1
  57. package/dist/components/robots/manufacturerHomePositions.d.ts.map +1 -1
  58. package/dist/components/robots/robotModelLogic.d.ts +11 -1
  59. package/dist/components/robots/robotModelLogic.d.ts.map +1 -1
  60. package/dist/components/safetyBar/ControllerTypeIndicator.d.ts.map +1 -1
  61. package/dist/components/safetyBar/OperationModeIndicator.d.ts +2 -2
  62. package/dist/components/safetyBar/OperationModeIndicator.d.ts.map +1 -1
  63. package/dist/components/safetyBar/SafetyBar.d.ts +3 -3
  64. package/dist/components/safetyBar/SafetyBar.d.ts.map +1 -1
  65. package/dist/components/safetyBar/SafetyStateIndicator.d.ts +2 -2
  66. package/dist/components/safetyBar/SafetyStateIndicator.d.ts.map +1 -1
  67. package/dist/components/utils/errorHandling.d.ts.map +1 -1
  68. package/dist/components/utils/errorHandling.test.d.ts +2 -0
  69. package/dist/components/utils/errorHandling.test.d.ts.map +1 -0
  70. package/dist/core.cjs.js +2 -0
  71. package/dist/core.cjs.js.map +1 -0
  72. package/dist/core.d.ts +33 -0
  73. package/dist/core.d.ts.map +1 -0
  74. package/dist/core.es.js +54 -0
  75. package/dist/core.es.js.map +1 -0
  76. package/dist/externalizeComponent-CkVWk2F_.cjs +24 -0
  77. package/dist/externalizeComponent-CkVWk2F_.cjs.map +1 -0
  78. package/dist/externalizeComponent-Dc3fViZA.js +489 -0
  79. package/dist/externalizeComponent-Dc3fViZA.js.map +1 -0
  80. package/dist/index.cjs.js +2 -0
  81. package/dist/index.cjs.js.map +1 -0
  82. package/dist/index.d.ts +3 -39
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.es.js +69 -0
  85. package/dist/index.es.js.map +1 -0
  86. package/dist/interpolation-DAXKfoDS.cjs +20 -0
  87. package/dist/interpolation-DAXKfoDS.cjs.map +1 -0
  88. package/dist/interpolation-DcPbemBD.js +6924 -0
  89. package/dist/interpolation-DcPbemBD.js.map +1 -0
  90. package/dist/lib/ConnectedMotionGroup.d.ts +90 -0
  91. package/dist/lib/ConnectedMotionGroup.d.ts.map +1 -0
  92. package/dist/lib/JoggerConnection.d.ts +113 -0
  93. package/dist/lib/JoggerConnection.d.ts.map +1 -0
  94. package/dist/lib/JoggerConnection.test.d.ts +2 -0
  95. package/dist/lib/JoggerConnection.test.d.ts.map +1 -0
  96. package/dist/lib/MotionStreamConnection.d.ts +24 -0
  97. package/dist/lib/MotionStreamConnection.d.ts.map +1 -0
  98. package/dist/lib/MotionStreamConnection.test.d.ts +2 -0
  99. package/dist/lib/MotionStreamConnection.test.d.ts.map +1 -0
  100. package/dist/lib/motionStateUpdate.d.ts +7 -0
  101. package/dist/lib/motionStateUpdate.d.ts.map +1 -0
  102. package/dist/lib/motionStateUpdate.test.d.ts +2 -0
  103. package/dist/lib/motionStateUpdate.test.d.ts.map +1 -0
  104. package/dist/manufacturerHomePositions-BD6C5qZJ.js +1040 -0
  105. package/dist/manufacturerHomePositions-BD6C5qZJ.js.map +1 -0
  106. package/dist/manufacturerHomePositions-DRNjU1pU.cjs +2 -0
  107. package/dist/manufacturerHomePositions-DRNjU1pU.cjs.map +1 -0
  108. package/dist/theming-CPShzNuV.cjs +115 -0
  109. package/dist/theming-CPShzNuV.cjs.map +1 -0
  110. package/dist/theming-Hr605E6v.js +22336 -0
  111. package/dist/theming-Hr605E6v.js.map +1 -0
  112. package/dist/wandelscript.cjs.js +2 -0
  113. package/dist/wandelscript.cjs.js.map +1 -0
  114. package/dist/wandelscript.d.ts +2 -0
  115. package/dist/wandelscript.d.ts.map +1 -0
  116. package/dist/wandelscript.es.js +5 -0
  117. package/dist/wandelscript.es.js.map +1 -0
  118. package/package.json +70 -32
  119. package/src/3d.ts +15 -0
  120. package/src/components/3d-viewport/CoordinateSystemTransform.tsx +1 -1
  121. package/src/components/3d-viewport/SafetyZonesRenderer.tsx +1 -2
  122. package/src/components/3d-viewport/collider/ColliderCollection.tsx +1 -1
  123. package/src/components/3d-viewport/collider/ColliderElement.tsx +1 -1
  124. package/src/components/3d-viewport/collider/CollisionSceneRenderer.tsx +1 -1
  125. package/src/components/3d-viewport/collider/colliderShapeToBufferGeometry.ts +1 -1
  126. package/src/components/AppHeader.md +1 -1
  127. package/src/components/ProgramStateIndicator.tsx +3 -6
  128. package/src/components/RobotCard.tsx +5 -8
  129. package/src/components/jogging/JoggingBlocked.tsx +37 -0
  130. package/src/components/jogging/JoggingCartesianTab.tsx +13 -11
  131. package/src/components/jogging/JoggingJointLimitDetector.tsx +2 -2
  132. package/src/components/jogging/JoggingJointTab.tsx +4 -4
  133. package/src/components/jogging/JoggingOptions.tsx +6 -5
  134. package/src/components/jogging/JoggingPanel.tsx +6 -3
  135. package/src/components/jogging/JoggingStore.ts +66 -39
  136. package/src/components/jogging/PoseCartesianValues.tsx +3 -4
  137. package/src/components/jogging/PoseJointValues.tsx +3 -4
  138. package/src/components/robots/DHRobot.tsx +2 -3
  139. package/src/components/robots/GenericRobot.tsx +97 -36
  140. package/src/components/robots/Robot.tsx +4 -2
  141. package/src/components/robots/RobotAnimator.test.tsx +7 -22
  142. package/src/components/robots/RobotAnimator.tsx +31 -21
  143. package/src/components/robots/SupportedRobot.tsx +14 -9
  144. package/src/components/robots/manufacturerHomePositions.ts +1 -1
  145. package/src/components/robots/robotModelLogic.ts +75 -6
  146. package/src/components/safetyBar/ControllerTypeIndicator.tsx +4 -2
  147. package/src/components/safetyBar/OperationModeIndicator.tsx +7 -5
  148. package/src/components/safetyBar/SafetyBar.tsx +3 -6
  149. package/src/components/safetyBar/SafetyStateIndicator.tsx +9 -7
  150. package/src/components/utils/errorHandling.test.ts +41 -0
  151. package/src/components/utils/errorHandling.ts +4 -0
  152. package/src/core.ts +33 -0
  153. package/src/env.d.ts +3 -0
  154. package/src/i18n/locales/de/translations.json +3 -0
  155. package/src/i18n/locales/en/translations.json +3 -0
  156. package/src/index.ts +4 -43
  157. package/src/lib/ConnectedMotionGroup.ts +444 -0
  158. package/src/lib/JoggerConnection.test.ts +120 -0
  159. package/src/lib/JoggerConnection.ts +674 -0
  160. package/src/lib/MotionStreamConnection.test.ts +23 -0
  161. package/src/lib/MotionStreamConnection.ts +189 -0
  162. package/src/lib/motionStateUpdate.test.ts +28 -0
  163. package/src/lib/motionStateUpdate.ts +117 -0
  164. package/src/wandelscript.ts +2 -0
  165. package/dist/auth0-spa-js.production.esm-1QXzndwB.js +0 -950
  166. package/dist/auth0-spa-js.production.esm-1QXzndwB.js.map +0 -1
  167. package/dist/auth0-spa-js.production.esm-BLRAk7Yh.cjs +0 -5
  168. package/dist/auth0-spa-js.production.esm-BLRAk7Yh.cjs.map +0 -1
  169. package/dist/index.cjs +0 -155
  170. package/dist/index.cjs.map +0 -1
  171. package/dist/index.js +0 -34927
  172. package/dist/index.js.map +0 -1
package/README.md CHANGED
@@ -6,19 +6,82 @@ React UI components for building robotics applications on the [Wandelbots Nova p
6
6
 
7
7
  Built with TypeScript, Material-UI, and React Three Fiber. Provides robot control interfaces, 3D visualizations, and automation components that integrate with the Nova ecosystem.
8
8
 
9
- ## Quick Start
9
+ ## Interactive Documentation
10
+
11
+ See the [Storybook](https://wandelbotsgmbh.github.io/wandelbots-js-react-components) for interactive examples and API documentation.
12
+
13
+ ## Install
10
14
 
11
15
  ```bash
12
- npm install @wandelbots/wandelbots-js-react-components
16
+ npm install @wandelbots/wandelbots-js-react-components react react-dom @mui/material @emotion/react @emotion/styled
13
17
  ```
14
18
 
15
- ## Getting Started
19
+ Some modules require extra dependencies, like three.js. If you don't need 3D rendering in your application, always import from `/core`.
16
20
 
17
- For setup instructions, integration examples, and basic usage patterns, visit the **[Getting Started Guide](https://wandelbotsgmbh.github.io/wandelbots-js-react-components/?path=/docs/gettingstarted--docs)** in our Storybook documentation.
21
+ ```typescript
22
+ import {
23
+ SafetyBar,
24
+ JoggingPanel,
25
+ DataGrid,
26
+ Timer,
27
+ } from "@wandelbots/wandelbots-js-react-components/core"
28
+ ```
18
29
 
19
- ## Documentation
30
+ For 3D-enabled components, use `/3d`:
20
31
 
21
- See the [Storybook](https://wandelbotsgmbh.github.io/wandelbots-js-react-components) for interactive examples and API documentation.
32
+ ```typescript
33
+ import { Robot, RobotCard } from "@wandelbots/wandelbots-js-react-components/3d"
34
+ ```
35
+
36
+ For the code editor, use `/wandelscript`:
37
+
38
+ ```typescript
39
+ import { WandelscriptEditor } from "@wandelbots/wandelbots-js-react-components/wandelscript"
40
+ ```
41
+
42
+ You can also import from the top-level package, but then you'll need to provide all optional dependencies:
43
+
44
+ ```bash
45
+ npm install @wandelbots/wandelbots-js-react-components \
46
+ react react-dom \
47
+ @mui/material @mui/icons-material @emotion/react @emotion/styled \
48
+ three @react-three/fiber @react-three/drei three-stdlib \
49
+ @monaco-editor/react shiki @shikijs/monaco
50
+ ```
51
+
52
+ **Available Entry Points:**
53
+
54
+ | Entry Point | Components | Required Peer Dependencies |
55
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
56
+ | **Main** (`.`) | All components | React 18+, MUI v6/v7, @emotion/react, @emotion/styled, @mui/icons-material + all below |
57
+ | **`/core`** | Base components (AppHeader, ProgramControl, SafetyBar, VelocitySlider, JoggingPanel, DataGrid, Timer, themes, i18n, etc.) | React 18+, MUI v6/v7, @emotion/react, @emotion/styled, @mui/icons-material |
58
+ | **`/3d`** | 3D visualization (Robot, RobotCard, CollisionSceneRenderer, SafetyZonesRenderer, TrajectoryRenderer) | All from `/core` + three, @react-three/fiber, @react-three/drei, three-stdlib |
59
+ | **`/wandelscript`** | Code editor (WandelscriptEditor) | All from `/core` + @monaco-editor/react, shiki, @shikijs/monaco |
60
+
61
+ ## 4.x Core Changes
62
+
63
+ Robot data is now fetched from a running nova instance. This eliminates the need of shipping every react application with the robot data attached.
64
+
65
+ It is still possible to fetch robot data from local files. (See https://wandelbotsgmbh.github.io/wandelbots-js-react-components/?path=/docs/3d-view-robot-robot--docs)
66
+
67
+ The `wandelbots-js-react-components` library can be used both with and without a Nova connection. For details on connecting to a Nova instance, see the [Robot Model Testing](#robot-model-testing) section below.
68
+
69
+ The list of available robots will now be automatically updated along with the nova version. There is no more need to update nova apps whenether there is a new supported robot the app wants to feature.
70
+
71
+ Robot dh-parameters are now using a new format.
72
+ ```
73
+ interface DHParameter {
74
+ 'alpha': number;
75
+ 'theta': number;
76
+ 'a': number;
77
+ 'd': number;
78
+ 'reverse_rotation_direction': boolean;
79
+ }
80
+ ```
81
+
82
+ ## 2.x to 3.x Migration Guide
83
+
84
+ See [Migration Guide](https://wandelbotsgmbh.github.io/wandelbots-js-react-components/?path=/docs/migration-guide--docs) for assistance.
22
85
 
23
86
  ## Components
24
87
 
@@ -30,7 +93,7 @@ Manual robot control interfaces.
30
93
 
31
94
  - Dual-mode operation (Cartesian & Joint space)
32
95
  - Real-time velocity control
33
- - Multiple coordinate systems support
96
+ - Multiple coordinate systems support (Robot base or Tool)
34
97
 
35
98
  **Individual Jogging Controls**
36
99
 
@@ -152,15 +215,24 @@ Components integrate with the Wandelbots Nova ecosystem:
152
215
 
153
216
  ### Prerequisites
154
217
 
218
+ **Required for all entry points:**
219
+
155
220
  - React 18+ or 19+
156
221
  - Material-UI v6 or v7
157
222
  - @emotion/react and @emotion/styled
158
223
 
159
- ### Optional Dependencies (for 3D components)
224
+ ### Additional Peer Dependencies
225
+
226
+ **For `/3d` (3D visualization components):**
227
+
228
+ - three
229
+ - @react-three/fiber
230
+ - @react-three/drei
231
+ - three-stdlib
160
232
 
161
- - @react-three/fiber, @react-three/drei, three, three-stdlib
233
+ **For `/wandelscript` (code editor):**
162
234
 
163
- See the [Getting Started Guide](https://wandelbotsgmbh.github.io/wandelbots-js-react-components/?path=/docs/gettingstarted--docs) for complete setup instructions and integration examples.
235
+ - @monaco-editor/react
164
236
 
165
237
  ## Development
166
238
 
@@ -173,6 +245,31 @@ npm install
173
245
  npm run dev # Start Storybook development server
174
246
  ```
175
247
 
248
+ ## Robot Model Testing
249
+
250
+ View Robot Models in web view:
251
+
252
+ ```bash
253
+ git clone https://github.com/wandelbotsgmbh/wandelbots-js-react-components.git
254
+ cd wandelbots-js-react-components
255
+ npm install
256
+ npm run td <instanceProviderURL> # instanceProviderURL can be provided via an instanceProviderConfig.json file. The entire command can be substituted by writing a nova instance ip into a file named .env.local
257
+ npm run dev # Start Storybook development server
258
+ ```
259
+
260
+ instanceProviderConfig.json file:
261
+ ```
262
+ {
263
+ "url": "yourURL"
264
+ }
265
+ ```
266
+
267
+ .env.local file:
268
+ ```
269
+ WANDELAPI_BASE_URL=http://<instance-ip>
270
+ CELL_ID=cell
271
+ ```
272
+
176
273
  ### Local Testing
177
274
 
178
275
  Build and test the package locally:
package/dist/3d.cjs.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./manufacturerHomePositions-DRNjU1pU.cjs");exports.CollisionSceneRenderer=e.CollisionSceneRenderer;exports.MANUFACTURER_HOME_CONFIGS=e.MANUFACTURER_HOME_CONFIGS;exports.PresetEnvironment=e.PresetEnvironment;exports.Robot=e.Robot;exports.RobotCard=e.RobotCard;exports.SafetyZonesRenderer=e.SafetyZonesRenderer;exports.SupportedRobot=e.SupportedRobot;exports.TrajectoryRenderer=e.TrajectoryRenderer;exports.defaultAxisConfig=e.defaultAxisConfig;exports.defaultGetModel=e.defaultGetModel;exports.extractManufacturer=e.extractManufacturer;exports.getDefaultHomeConfig=e.getDefaultHomeConfig;
2
+ //# sourceMappingURL=3d.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3d.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/3d.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export { default as CollisionSceneRenderer } from "./components/3d-viewport/collider/CollisionSceneRenderer";
2
+ export * from "./components/3d-viewport/PresetEnvironment";
3
+ export * from "./components/3d-viewport/SafetyZonesRenderer";
4
+ export * from "./components/3d-viewport/TrajectoryRenderer";
5
+ export * from "./components/RobotCard";
6
+ export * from "./components/robots/AxisConfig";
7
+ export { MANUFACTURER_HOME_CONFIGS, extractManufacturer, getDefaultHomeConfig, } from "./components/robots/manufacturerHomePositions";
8
+ export * from "./components/robots/Robot";
9
+ export { defaultGetModel } from "./components/robots/robotModelLogic";
10
+ export * from "./components/robots/SupportedRobot";
11
+ //# sourceMappingURL=3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3d.d.ts","sourceRoot":"","sources":["../src/3d.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0DAA0D,CAAA;AAC5G,cAAc,4CAA4C,CAAA;AAC1D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,6CAA6C,CAAA;AAC3D,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAC9C,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+CAA+C,CAAA;AACtD,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,cAAc,oCAAoC,CAAA"}
package/dist/3d.es.js ADDED
@@ -0,0 +1,16 @@
1
+ import { C as o, M as r, P as t, R as s, a as n, S as d, b as R, T as f, d as C, c as i, e as l, g as u } from "./manufacturerHomePositions-BD6C5qZJ.js";
2
+ export {
3
+ o as CollisionSceneRenderer,
4
+ r as MANUFACTURER_HOME_CONFIGS,
5
+ t as PresetEnvironment,
6
+ s as Robot,
7
+ n as RobotCard,
8
+ d as SafetyZonesRenderer,
9
+ R as SupportedRobot,
10
+ f as TrajectoryRenderer,
11
+ C as defaultAxisConfig,
12
+ i as defaultGetModel,
13
+ l as extractManufacturer,
14
+ u as getDefaultHomeConfig
15
+ };
16
+ //# sourceMappingURL=3d.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3d.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,88 @@
1
+ import { j as t } from "./externalizeComponent-Dc3fViZA.js";
2
+ import { useTheme as c, Stack as i, CircularProgress as l, capitalize as g } from "@mui/material";
3
+ import { lowerFirst as d } from "lodash-es";
4
+ import { useState as u, useEffect as f } from "react";
5
+ import { AxiosError as a } from "axios";
6
+ function h(e) {
7
+ try {
8
+ return JSON.stringify(e);
9
+ } catch {
10
+ return;
11
+ }
12
+ }
13
+ function T(e, r) {
14
+ throw new Error(r + ` ${JSON.stringify(e)}`);
15
+ }
16
+ function x(e) {
17
+ var r, s, o, n;
18
+ return e instanceof a && e.code === "ERR_NETWORK" ? "Failed to connect to the server. Please check your internet connection." : e instanceof a && e.response ? `${(r = e.response) == null ? void 0 : r.status} ${(s = e.response) == null ? void 0 : s.statusText} from ${(o = e.response) == null ? void 0 : o.config.url}: ${JSON.stringify((n = e.response) == null ? void 0 : n.data)}` : e instanceof Error ? e.message : `Unexpected error: ${h(e) || e}`;
19
+ }
20
+ const k = (e) => {
21
+ const r = e.softTimeout || 3e3, [s, o] = u(!1), n = c();
22
+ return f(() => {
23
+ const m = setTimeout(() => {
24
+ o(!0);
25
+ }, r);
26
+ return () => clearTimeout(m);
27
+ }), /* @__PURE__ */ t.jsx(
28
+ i,
29
+ {
30
+ width: "100%",
31
+ height: "100%",
32
+ alignItems: "center",
33
+ justifyContent: "center",
34
+ sx: { color: n.palette.text.primary },
35
+ children: e.error ? /* @__PURE__ */ t.jsx(
36
+ w,
37
+ {
38
+ loadingMessage: e.message,
39
+ error: e.error
40
+ }
41
+ ) : /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
42
+ /* @__PURE__ */ t.jsx(l, { sx: { marginBottom: "24px" } }),
43
+ !!e.message && /* @__PURE__ */ t.jsx("div", { children: e.message }),
44
+ /* @__PURE__ */ t.jsx(
45
+ i,
46
+ {
47
+ sx: {
48
+ visibility: s ? "visible" : "hidden",
49
+ marginTop: "1rem",
50
+ color: n.palette.text.secondary
51
+ },
52
+ children: "This is taking longer than expected..."
53
+ }
54
+ )
55
+ ] })
56
+ }
57
+ );
58
+ }, w = (e) => {
59
+ const r = x(e.error), s = e.error instanceof Error ? e.error.stack : null, o = c();
60
+ return /* @__PURE__ */ t.jsxs(
61
+ i,
62
+ {
63
+ sx: {
64
+ maxHeight: "100%",
65
+ maxWidth: "min(100%, 800px)",
66
+ padding: 2,
67
+ overflow: "auto",
68
+ color: o.palette.error.main,
69
+ "& pre": {
70
+ whiteSpace: "pre-wrap",
71
+ wordBreak: "break-word",
72
+ paddingBottom: "3rem"
73
+ }
74
+ },
75
+ children: [
76
+ (e.loadingMessage ? `Error while ${d(g(e.loadingMessage))} - ` : "") + r,
77
+ /* @__PURE__ */ t.jsx("br", {}),
78
+ s && /* @__PURE__ */ t.jsx("pre", { children: s })
79
+ ]
80
+ }
81
+ );
82
+ };
83
+ export {
84
+ k as L,
85
+ w as a,
86
+ T as b
87
+ };
88
+ //# sourceMappingURL=LoadingCover-6gWr11KP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingCover-6gWr11KP.js","sources":["../src/components/utils/converters.ts","../src/components/utils/errorHandling.ts","../src/components/LoadingCover.tsx"],"sourcesContent":["export function radiansToDegree(radians: number): number {\n return radians * (180 / Math.PI)\n}\n\nexport function degreesToRadians(degrees: number): number {\n return degrees * (Math.PI / 180)\n}\n\nexport function tryParseJson(json: unknown): any {\n try {\n return JSON.parse(json as string)\n } catch {\n return undefined\n }\n}\n\nexport function tryStringifyJson(json: unknown): string | undefined {\n try {\n return JSON.stringify(json)\n } catch {\n return undefined\n }\n}\n","import { AxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters\"\n\n// Please note: These helper functions also exist in nova.js\n// (with slightly different formatting), and will be unified\n// at some point in the future.\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function makeShortErrorMessage(err: unknown) {\n if (err instanceof AxiosError && err.code === \"ERR_NETWORK\") {\n return \"Failed to connect to the server. Please check your internet connection.\"\n } else if (err instanceof AxiosError && err.response) {\n return `${err.response?.status} ${err.response?.statusText}: ${JSON.stringify(err.response?.data)}`\n } else if (err instanceof Error) {\n return err.message\n } else {\n return `Unexpected error: ${err}`\n }\n}\n\nexport function assertUnreachable(x: never, msg: string): never {\n throw new Error(msg + ` ${JSON.stringify(x)}`)\n}\n\nexport function makeErrorMessage(err: unknown) {\n if (err instanceof AxiosError && err.code === \"ERR_NETWORK\") {\n return \"Failed to connect to the server. Please check your internet connection.\"\n } else if (err instanceof AxiosError && err.response) {\n return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n } else if (err instanceof Error) {\n return err.message\n } else {\n return `Unexpected error: ${tryStringifyJson(err) || err}`\n }\n}\n","import { capitalize, CircularProgress, Stack, useTheme } from \"@mui/material\"\nimport { lowerFirst } from \"lodash-es\"\nimport { useEffect, useState } from \"react\"\nimport { makeErrorMessage } from \"./utils/errorHandling\"\n\nexport const LoadingCover = (props: {\n message?: string\n error?: unknown\n softTimeout?: number\n}) => {\n const softTimeout = props.softTimeout || 3000\n\n const [showSlowLoadingMessage, setShowSlowLoadingMessage] = useState(false)\n const theme = useTheme()\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setShowSlowLoadingMessage(true)\n }, softTimeout)\n\n return () => clearTimeout(timeout)\n })\n\n return (\n <Stack\n width=\"100%\"\n height=\"100%\"\n alignItems=\"center\"\n justifyContent=\"center\"\n sx={{ color: theme.palette.text.primary }}\n >\n {props.error ? (\n <LoadingErrorMessage\n loadingMessage={props.message}\n error={props.error}\n />\n ) : (\n <>\n <CircularProgress sx={{ marginBottom: \"24px\" }} />\n {!!props.message && <div>{props.message}</div>}\n <Stack\n sx={{\n visibility: showSlowLoadingMessage ? \"visible\" : \"hidden\",\n marginTop: \"1rem\",\n color: theme.palette.text.secondary,\n }}\n >\n {\"This is taking longer than expected...\"}\n </Stack>\n </>\n )}\n </Stack>\n )\n}\n\nexport const LoadingErrorMessage = (props: {\n loadingMessage?: string\n error: unknown\n}) => {\n const errorMessage = makeErrorMessage(props.error)\n const stack = props.error instanceof Error ? props.error.stack : null\n const theme = useTheme()\n\n return (\n <Stack\n sx={{\n maxHeight: \"100%\",\n maxWidth: \"min(100%, 800px)\",\n padding: 2,\n overflow: \"auto\",\n color: theme.palette.error.main,\n \"& pre\": {\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n paddingBottom: \"3rem\",\n },\n }}\n >\n {(props.loadingMessage\n ? `Error while ${lowerFirst(capitalize(props.loadingMessage))} - `\n : \"\") + errorMessage}\n <br />\n {stack && <pre>{stack}</pre>}\n </Stack>\n )\n}\n"],"names":["tryStringifyJson","json","assertUnreachable","x","msg","makeErrorMessage","err","AxiosError","_a","_b","_c","_d","LoadingCover","props","softTimeout","showSlowLoadingMessage","setShowSlowLoadingMessage","useState","theme","useTheme","useEffect","timeout","jsx","Stack","LoadingErrorMessage","jsxs","Fragment","CircularProgress","errorMessage","stack","lowerFirst","capitalize"],"mappings":"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"}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingCover-CukpS_aj.cjs","sources":["../src/components/utils/converters.ts","../src/components/utils/errorHandling.ts","../src/components/LoadingCover.tsx"],"sourcesContent":["export function radiansToDegree(radians: number): number {\n return radians * (180 / Math.PI)\n}\n\nexport function degreesToRadians(degrees: number): number {\n return degrees * (Math.PI / 180)\n}\n\nexport function tryParseJson(json: unknown): any {\n try {\n return JSON.parse(json as string)\n } catch {\n return undefined\n }\n}\n\nexport function tryStringifyJson(json: unknown): string | undefined {\n try {\n return JSON.stringify(json)\n } catch {\n return undefined\n }\n}\n","import { AxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters\"\n\n// Please note: These helper functions also exist in nova.js\n// (with slightly different formatting), and will be unified\n// at some point in the future.\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function makeShortErrorMessage(err: unknown) {\n if (err instanceof AxiosError && err.code === \"ERR_NETWORK\") {\n return \"Failed to connect to the server. Please check your internet connection.\"\n } else if (err instanceof AxiosError && err.response) {\n return `${err.response?.status} ${err.response?.statusText}: ${JSON.stringify(err.response?.data)}`\n } else if (err instanceof Error) {\n return err.message\n } else {\n return `Unexpected error: ${err}`\n }\n}\n\nexport function assertUnreachable(x: never, msg: string): never {\n throw new Error(msg + ` ${JSON.stringify(x)}`)\n}\n\nexport function makeErrorMessage(err: unknown) {\n if (err instanceof AxiosError && err.code === \"ERR_NETWORK\") {\n return \"Failed to connect to the server. Please check your internet connection.\"\n } else if (err instanceof AxiosError && err.response) {\n return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n } else if (err instanceof Error) {\n return err.message\n } else {\n return `Unexpected error: ${tryStringifyJson(err) || err}`\n }\n}\n","import { capitalize, CircularProgress, Stack, useTheme } from \"@mui/material\"\nimport { lowerFirst } from \"lodash-es\"\nimport { useEffect, useState } from \"react\"\nimport { makeErrorMessage } from \"./utils/errorHandling\"\n\nexport const LoadingCover = (props: {\n message?: string\n error?: unknown\n softTimeout?: number\n}) => {\n const softTimeout = props.softTimeout || 3000\n\n const [showSlowLoadingMessage, setShowSlowLoadingMessage] = useState(false)\n const theme = useTheme()\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setShowSlowLoadingMessage(true)\n }, softTimeout)\n\n return () => clearTimeout(timeout)\n })\n\n return (\n <Stack\n width=\"100%\"\n height=\"100%\"\n alignItems=\"center\"\n justifyContent=\"center\"\n sx={{ color: theme.palette.text.primary }}\n >\n {props.error ? (\n <LoadingErrorMessage\n loadingMessage={props.message}\n error={props.error}\n />\n ) : (\n <>\n <CircularProgress sx={{ marginBottom: \"24px\" }} />\n {!!props.message && <div>{props.message}</div>}\n <Stack\n sx={{\n visibility: showSlowLoadingMessage ? \"visible\" : \"hidden\",\n marginTop: \"1rem\",\n color: theme.palette.text.secondary,\n }}\n >\n {\"This is taking longer than expected...\"}\n </Stack>\n </>\n )}\n </Stack>\n )\n}\n\nexport const LoadingErrorMessage = (props: {\n loadingMessage?: string\n error: unknown\n}) => {\n const errorMessage = makeErrorMessage(props.error)\n const stack = props.error instanceof Error ? props.error.stack : null\n const theme = useTheme()\n\n return (\n <Stack\n sx={{\n maxHeight: \"100%\",\n maxWidth: \"min(100%, 800px)\",\n padding: 2,\n overflow: \"auto\",\n color: theme.palette.error.main,\n \"& pre\": {\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n paddingBottom: \"3rem\",\n },\n }}\n >\n {(props.loadingMessage\n ? `Error while ${lowerFirst(capitalize(props.loadingMessage))} - `\n : \"\") + errorMessage}\n <br />\n {stack && <pre>{stack}</pre>}\n </Stack>\n )\n}\n"],"names":["tryStringifyJson","json","assertUnreachable","x","msg","makeErrorMessage","err","AxiosError","_a","_b","_c","_d","LoadingCover","props","softTimeout","showSlowLoadingMessage","setShowSlowLoadingMessage","useState","theme","useTheme","useEffect","timeout","jsx","Stack","LoadingErrorMessage","jsxs","Fragment","CircularProgress","errorMessage","stack","lowerFirst","capitalize"],"mappings":"4JAgBO,SAASA,EAAiBC,EAAmC,CAClE,GAAI,CACF,OAAO,KAAK,UAAUA,CAAI,CAC5B,MAAQ,CACN,MACF,CACF,CCCO,SAASC,EAAkBC,EAAUC,EAAoB,CAC9D,MAAM,IAAI,MAAMA,EAAM,IAAI,KAAK,UAAUD,CAAC,CAAC,EAAE,CAC/C,CAEO,SAASE,EAAiBC,EAAc,aAC7C,OAAIA,aAAeC,EAAAA,YAAcD,EAAI,OAAS,cACrC,0EACEA,aAAeC,cAAcD,EAAI,SACnC,IAAGE,EAAAF,EAAI,WAAJ,YAAAE,EAAc,MAAM,KAAIC,EAAAH,EAAI,WAAJ,YAAAG,EAAc,UAAU,UAASC,EAAAJ,EAAI,WAAJ,YAAAI,EAAc,OAAO,GAAG,KAAK,KAAK,WAAUC,EAAAL,EAAI,WAAJ,YAAAK,EAAc,IAAI,CAAC,GACzHL,aAAe,MACjBA,EAAI,QAEJ,qBAAqBN,EAAiBM,CAAG,GAAKA,CAAG,EAE5D,CChCO,MAAMM,EAAgBC,GAIvB,CACJ,MAAMC,EAAcD,EAAM,aAAe,IAEnC,CAACE,EAAwBC,CAAyB,EAAIC,EAAAA,SAAS,EAAK,EACpEC,EAAQC,EAAAA,SAAA,EAEdC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAU,WAAW,IAAM,CAC/BL,EAA0B,EAAI,CAChC,EAAGF,CAAW,EAEd,MAAO,IAAM,aAAaO,CAAO,CACnC,CAAC,EAGCC,EAAAA,kBAAAA,IAACC,EAAAA,MAAA,CACC,MAAM,OACN,OAAO,OACP,WAAW,SACX,eAAe,SACf,GAAI,CAAE,MAAOL,EAAM,QAAQ,KAAK,OAAA,EAE/B,WAAM,MACLI,EAAAA,kBAAAA,IAACE,EAAA,CACC,eAAgBX,EAAM,QACtB,MAAOA,EAAM,KAAA,CAAA,EAGfY,EAAAA,kBAAAA,KAAAC,6BAAA,CACE,SAAA,CAAAJ,EAAAA,kBAAAA,IAACK,EAAAA,iBAAA,CAAiB,GAAI,CAAE,aAAc,QAAU,EAC/C,CAAC,CAACd,EAAM,SAAWS,EAAAA,kBAAAA,IAAC,MAAA,CAAK,WAAM,QAAQ,EACxCA,EAAAA,kBAAAA,IAACC,EAAAA,MAAA,CACC,GAAI,CACF,WAAYR,EAAyB,UAAY,SACjD,UAAW,OACX,MAAOG,EAAM,QAAQ,KAAK,SAAA,EAG3B,SAAA,wCAAA,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CAIR,EAEaM,EAAuBX,GAG9B,CACJ,MAAMe,EAAevB,EAAiBQ,EAAM,KAAK,EAC3CgB,EAAQhB,EAAM,iBAAiB,MAAQA,EAAM,MAAM,MAAQ,KAC3DK,EAAQC,EAAAA,SAAA,EAEd,OACEM,EAAAA,kBAAAA,KAACF,EAAAA,MAAA,CACC,GAAI,CACF,UAAW,OACX,SAAU,mBACV,QAAS,EACT,SAAU,OACV,MAAOL,EAAM,QAAQ,MAAM,KAC3B,QAAS,CACP,WAAY,WACZ,UAAW,aACX,cAAe,MAAA,CACjB,EAGA,SAAA,EAAAL,EAAM,eACJ,eAAeiB,EAAAA,WAAWC,EAAAA,WAAWlB,EAAM,cAAc,CAAC,CAAC,MAC3D,IAAMe,0BACT,KAAA,EAAG,EACHC,GAASP,EAAAA,kBAAAA,IAAC,MAAA,CAAK,SAAAO,CAAA,CAAM,CAAA,CAAA,CAAA,CAG5B"}
@@ -0,0 +1,140 @@
1
+ import { e as p, j as i } from "./externalizeComponent-Dc3fViZA.js";
2
+ import { lazy as h, useState as g, Suspense as w } from "react";
3
+ import { useTheme as f } from "@mui/material";
4
+ import { L as k } from "./LoadingCover-6gWr11KP.js";
5
+ const b = {
6
+ $schema: "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
7
+ name: "wandelscript",
8
+ patterns: [
9
+ {
10
+ include: "#keywords"
11
+ },
12
+ {
13
+ include: "#strings"
14
+ },
15
+ {
16
+ include: "#comments"
17
+ },
18
+ {
19
+ include: "#functions"
20
+ }
21
+ ],
22
+ repository: {
23
+ keywords: {
24
+ patterns: [
25
+ {
26
+ name: "keyword.control.flow.wandelscript",
27
+ match: "\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\b"
28
+ }
29
+ ]
30
+ },
31
+ strings: {
32
+ name: "string.quoted.double.wandelscript",
33
+ begin: '"',
34
+ end: '"',
35
+ patterns: [
36
+ {
37
+ name: "constant.character.escape.wandelscript",
38
+ match: "\\\\."
39
+ }
40
+ ]
41
+ },
42
+ comments: {
43
+ patterns: [
44
+ {
45
+ begin: "#",
46
+ beginCaptures: {
47
+ 0: { name: "punctuation.definition.comment.wandelscript" }
48
+ },
49
+ end: "$",
50
+ name: "comment.line.number-sign.wandelscript"
51
+ }
52
+ ]
53
+ },
54
+ functions: {
55
+ patterns: [
56
+ {
57
+ match: "[a-zA-Z_-]+\\(",
58
+ name: "entity.name.function.wandelscript"
59
+ }
60
+ ]
61
+ }
62
+ },
63
+ scopeName: "source.wandelscript"
64
+ }, v = h(() => import("@monaco-editor/react"));
65
+ let s = null;
66
+ async function T() {
67
+ if (!s) {
68
+ const [{ createHighlighter: e }, { shikiToMonaco: n }] = await Promise.all([
69
+ import("shiki"),
70
+ import("@shikijs/monaco")
71
+ ]);
72
+ s = {
73
+ shiki: await e({
74
+ // Our textmate grammar doesn't quite conform to the expected type
75
+ // here; I'm not sure what the missing properties mean exactly
76
+ langs: [b],
77
+ themes: ["dark-plus", "light-plus"]
78
+ }),
79
+ shikiToMonaco: n
80
+ };
81
+ }
82
+ return s;
83
+ }
84
+ const j = p(
85
+ (e) => {
86
+ const n = f(), [o, l] = g("dark-plus"), r = n.palette.mode === "dark" ? "dark-plus" : "light-plus";
87
+ async function u(t) {
88
+ var c, m;
89
+ t.languages.register({ id: "wandelscript" }), t.languages.setLanguageConfiguration("wandelscript", {
90
+ comments: {
91
+ lineComment: "#"
92
+ },
93
+ brackets: [
94
+ ["(", ")"],
95
+ ["[", "]"]
96
+ ],
97
+ autoClosingPairs: [
98
+ { open: "[", close: "]" },
99
+ { open: "(", close: ")" }
100
+ ],
101
+ surroundingPairs: [
102
+ { open: "[", close: "]" },
103
+ { open: "(", close: ")" }
104
+ ]
105
+ });
106
+ const { shiki: a, shikiToMonaco: d } = await T();
107
+ d(a, t), t.editor.defineTheme(
108
+ r,
109
+ ((m = (c = n.componentsExt) == null ? void 0 : c.WandelscriptEditor) == null ? void 0 : m.monacoTheme) ?? {
110
+ base: n.palette.mode === "dark" ? "vs-dark" : "vs",
111
+ inherit: !0,
112
+ rules: [],
113
+ colors: {}
114
+ }
115
+ ), e.monacoSetup && e.monacoSetup(t), l(r);
116
+ }
117
+ return /* @__PURE__ */ i.jsx(w, { fallback: /* @__PURE__ */ i.jsx(k, {}), children: /* @__PURE__ */ i.jsx(
118
+ v,
119
+ {
120
+ value: e.code,
121
+ onMount: (t, a) => {
122
+ u(a);
123
+ },
124
+ onChange: e.onChange,
125
+ defaultLanguage: "wandelscript",
126
+ theme: o,
127
+ options: {
128
+ minimap: { enabled: !1 },
129
+ wordWrap: "on",
130
+ automaticLayout: !0,
131
+ ...e.monacoOptions
132
+ }
133
+ }
134
+ ) });
135
+ }
136
+ );
137
+ export {
138
+ j as W
139
+ };
140
+ //# sourceMappingURL=WandelscriptEditor-7eN-Yw7m.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WandelscriptEditor-7eN-Yw7m.js","sources":["../src/components/wandelscript-editor/wandelscript.tmLanguage.ts","../src/components/wandelscript-editor/WandelscriptEditor.tsx"],"sourcesContent":["export default {\n $schema:\n \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n name: \"wandelscript\",\n patterns: [\n {\n include: \"#keywords\",\n },\n {\n include: \"#strings\",\n },\n {\n include: \"#comments\",\n },\n {\n include: \"#functions\",\n },\n ],\n repository: {\n keywords: {\n patterns: [\n {\n name: \"keyword.control.flow.wandelscript\",\n match:\n \"\\\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\\\b\",\n },\n ],\n },\n strings: {\n name: \"string.quoted.double.wandelscript\",\n begin: '\"',\n end: '\"',\n patterns: [\n {\n name: \"constant.character.escape.wandelscript\",\n match: \"\\\\\\\\.\",\n },\n ],\n },\n comments: {\n patterns: [\n {\n begin: \"#\",\n beginCaptures: {\n \"0\": { name: \"punctuation.definition.comment.wandelscript\" },\n },\n end: \"$\",\n name: \"comment.line.number-sign.wandelscript\",\n },\n ],\n },\n functions: {\n patterns: [\n {\n match: \"[a-zA-Z_-]+\\\\(\",\n name: \"entity.name.function.wandelscript\",\n },\n ],\n },\n },\n scopeName: \"source.wandelscript\",\n}\n","import type { Monaco } from \"@monaco-editor/react\"\nimport { lazy, Suspense, useState } from \"react\"\nimport type {\n BundledLanguage,\n BundledTheme,\n HighlighterGeneric,\n ShikiInternal,\n} from \"shiki\"\n\nimport { useTheme } from \"@mui/material\"\nimport type { editor } from \"monaco-editor\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { LoadingCover } from \"../LoadingCover\"\nimport wandelscriptTextmateGrammar from \"./wandelscript.tmLanguage\"\n\ntype WandelscriptEditorProps = {\n /** The current Wandelscript content of the code editor (controlled component) */\n code?: string\n /** What to do when the user edits the code */\n onChange?: (\n code: string | undefined,\n ev: editor.IModelContentChangedEvent,\n ) => void\n /** Options for monaco editor */\n monacoOptions?: editor.IEditorOptions\n /** Callback to further configure monaco on startup if needed */\n monacoSetup?: (monaco: Monaco) => void\n}\n\nconst Editor = lazy(() => import(\"@monaco-editor/react\"))\n\nlet preparedShiki: {\n shiki: HighlighterGeneric<BundledLanguage, BundledTheme>\n shikiToMonaco: (\n shiki: HighlighterGeneric<BundledLanguage, BundledTheme>,\n monaco: Monaco,\n ) => void\n} | null = null\n\nasync function getShiki() {\n if (!preparedShiki) {\n const [{ createHighlighter }, { shikiToMonaco }] = await Promise.all([\n import(\"shiki\"),\n import(\"@shikijs/monaco\"),\n ])\n\n const shiki = await createHighlighter({\n // Our textmate grammar doesn't quite conform to the expected type\n // here; I'm not sure what the missing properties mean exactly\n langs: [wandelscriptTextmateGrammar as any],\n themes: [\"dark-plus\", \"light-plus\"],\n })\n\n preparedShiki = {\n shiki,\n shikiToMonaco: shikiToMonaco as unknown as (\n shiki: ShikiInternal<any, any>,\n monaco: typeof import(\"monaco-editor\"),\n ) => void,\n }\n }\n\n return preparedShiki\n}\n\n/** A Monaco (VSCode-style) embedded code editor with Wandelscript syntax highlighting */\nexport const WandelscriptEditor = externalizeComponent(\n (props: WandelscriptEditorProps) => {\n const theme = useTheme()\n const [activeShikiTheme, setActiveShikiTheme] =\n useState<BundledTheme>(\"dark-plus\")\n const targetShikiTheme =\n theme.palette.mode === \"dark\" ? \"dark-plus\" : \"light-plus\"\n\n async function setupEditor(monaco: Monaco) {\n // Register and configure the Wandelscript language\n monaco.languages.register({ id: \"wandelscript\" })\n\n monaco.languages.setLanguageConfiguration(\"wandelscript\", {\n comments: {\n lineComment: \"#\",\n },\n brackets: [\n [\"(\", \")\"],\n [\"[\", \"]\"],\n ],\n autoClosingPairs: [\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n ],\n surroundingPairs: [\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n ],\n })\n\n const { shiki, shikiToMonaco } = await getShiki()\n\n // Monaco doesn't support TextMate grammar config directly, so we\n // use Shiki as an intermediary\n shikiToMonaco(shiki, monaco)\n\n // Override the generated shiki theme to use shiki syntax highlighting\n // but vscode colors\n monaco.editor.defineTheme(\n targetShikiTheme,\n theme.componentsExt?.WandelscriptEditor?.monacoTheme ?? {\n base: theme.palette.mode === \"dark\" ? \"vs-dark\" : \"vs\",\n inherit: true,\n rules: [],\n colors: {},\n },\n )\n\n if (props.monacoSetup) {\n props.monacoSetup(monaco)\n }\n\n setActiveShikiTheme(targetShikiTheme)\n }\n\n return (\n <Suspense fallback={<LoadingCover />}>\n <Editor\n value={props.code}\n onMount={(_editor, monaco) => {\n setupEditor(monaco)\n }}\n onChange={props.onChange}\n defaultLanguage=\"wandelscript\"\n theme={activeShikiTheme}\n options={{\n minimap: { enabled: false },\n wordWrap: \"on\",\n automaticLayout: true,\n ...props.monacoOptions,\n }}\n />\n </Suspense>\n )\n },\n)\n"],"names":["wandelscriptTextmateGrammar","Editor","lazy","preparedShiki","getShiki","createHighlighter","shikiToMonaco","WandelscriptEditor","externalizeComponent","props","theme","useTheme","activeShikiTheme","setActiveShikiTheme","useState","targetShikiTheme","setupEditor","monaco","shiki","_b","_a","jsx","Suspense","LoadingCover","_editor"],"mappings":"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"}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WandelscriptEditor-D6_vS5Uk.cjs","sources":["../src/components/wandelscript-editor/wandelscript.tmLanguage.ts","../src/components/wandelscript-editor/WandelscriptEditor.tsx"],"sourcesContent":["export default {\n $schema:\n \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n name: \"wandelscript\",\n patterns: [\n {\n include: \"#keywords\",\n },\n {\n include: \"#strings\",\n },\n {\n include: \"#comments\",\n },\n {\n include: \"#functions\",\n },\n ],\n repository: {\n keywords: {\n patterns: [\n {\n name: \"keyword.control.flow.wandelscript\",\n match:\n \"\\\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\\\b\",\n },\n ],\n },\n strings: {\n name: \"string.quoted.double.wandelscript\",\n begin: '\"',\n end: '\"',\n patterns: [\n {\n name: \"constant.character.escape.wandelscript\",\n match: \"\\\\\\\\.\",\n },\n ],\n },\n comments: {\n patterns: [\n {\n begin: \"#\",\n beginCaptures: {\n \"0\": { name: \"punctuation.definition.comment.wandelscript\" },\n },\n end: \"$\",\n name: \"comment.line.number-sign.wandelscript\",\n },\n ],\n },\n functions: {\n patterns: [\n {\n match: \"[a-zA-Z_-]+\\\\(\",\n name: \"entity.name.function.wandelscript\",\n },\n ],\n },\n },\n scopeName: \"source.wandelscript\",\n}\n","import type { Monaco } from \"@monaco-editor/react\"\nimport { lazy, Suspense, useState } from \"react\"\nimport type {\n BundledLanguage,\n BundledTheme,\n HighlighterGeneric,\n ShikiInternal,\n} from \"shiki\"\n\nimport { useTheme } from \"@mui/material\"\nimport type { editor } from \"monaco-editor\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { LoadingCover } from \"../LoadingCover\"\nimport wandelscriptTextmateGrammar from \"./wandelscript.tmLanguage\"\n\ntype WandelscriptEditorProps = {\n /** The current Wandelscript content of the code editor (controlled component) */\n code?: string\n /** What to do when the user edits the code */\n onChange?: (\n code: string | undefined,\n ev: editor.IModelContentChangedEvent,\n ) => void\n /** Options for monaco editor */\n monacoOptions?: editor.IEditorOptions\n /** Callback to further configure monaco on startup if needed */\n monacoSetup?: (monaco: Monaco) => void\n}\n\nconst Editor = lazy(() => import(\"@monaco-editor/react\"))\n\nlet preparedShiki: {\n shiki: HighlighterGeneric<BundledLanguage, BundledTheme>\n shikiToMonaco: (\n shiki: HighlighterGeneric<BundledLanguage, BundledTheme>,\n monaco: Monaco,\n ) => void\n} | null = null\n\nasync function getShiki() {\n if (!preparedShiki) {\n const [{ createHighlighter }, { shikiToMonaco }] = await Promise.all([\n import(\"shiki\"),\n import(\"@shikijs/monaco\"),\n ])\n\n const shiki = await createHighlighter({\n // Our textmate grammar doesn't quite conform to the expected type\n // here; I'm not sure what the missing properties mean exactly\n langs: [wandelscriptTextmateGrammar as any],\n themes: [\"dark-plus\", \"light-plus\"],\n })\n\n preparedShiki = {\n shiki,\n shikiToMonaco: shikiToMonaco as unknown as (\n shiki: ShikiInternal<any, any>,\n monaco: typeof import(\"monaco-editor\"),\n ) => void,\n }\n }\n\n return preparedShiki\n}\n\n/** A Monaco (VSCode-style) embedded code editor with Wandelscript syntax highlighting */\nexport const WandelscriptEditor = externalizeComponent(\n (props: WandelscriptEditorProps) => {\n const theme = useTheme()\n const [activeShikiTheme, setActiveShikiTheme] =\n useState<BundledTheme>(\"dark-plus\")\n const targetShikiTheme =\n theme.palette.mode === \"dark\" ? \"dark-plus\" : \"light-plus\"\n\n async function setupEditor(monaco: Monaco) {\n // Register and configure the Wandelscript language\n monaco.languages.register({ id: \"wandelscript\" })\n\n monaco.languages.setLanguageConfiguration(\"wandelscript\", {\n comments: {\n lineComment: \"#\",\n },\n brackets: [\n [\"(\", \")\"],\n [\"[\", \"]\"],\n ],\n autoClosingPairs: [\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n ],\n surroundingPairs: [\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n ],\n })\n\n const { shiki, shikiToMonaco } = await getShiki()\n\n // Monaco doesn't support TextMate grammar config directly, so we\n // use Shiki as an intermediary\n shikiToMonaco(shiki, monaco)\n\n // Override the generated shiki theme to use shiki syntax highlighting\n // but vscode colors\n monaco.editor.defineTheme(\n targetShikiTheme,\n theme.componentsExt?.WandelscriptEditor?.monacoTheme ?? {\n base: theme.palette.mode === \"dark\" ? \"vs-dark\" : \"vs\",\n inherit: true,\n rules: [],\n colors: {},\n },\n )\n\n if (props.monacoSetup) {\n props.monacoSetup(monaco)\n }\n\n setActiveShikiTheme(targetShikiTheme)\n }\n\n return (\n <Suspense fallback={<LoadingCover />}>\n <Editor\n value={props.code}\n onMount={(_editor, monaco) => {\n setupEditor(monaco)\n }}\n onChange={props.onChange}\n defaultLanguage=\"wandelscript\"\n theme={activeShikiTheme}\n options={{\n minimap: { enabled: false },\n wordWrap: \"on\",\n automaticLayout: true,\n ...props.monacoOptions,\n }}\n />\n </Suspense>\n )\n },\n)\n"],"names":["wandelscriptTextmateGrammar","Editor","lazy","preparedShiki","getShiki","createHighlighter","shikiToMonaco","WandelscriptEditor","externalizeComponent","props","theme","useTheme","activeShikiTheme","setActiveShikiTheme","useState","targetShikiTheme","setupEditor","monaco","shiki","_b","_a","jsx","Suspense","LoadingCover","_editor"],"mappings":"smBAAAA,EAAe,CACb,QACE,iFACF,KAAM,eACN,SAAU,CACR,CACE,QAAS,WAAA,EAEX,CACE,QAAS,UAAA,EAEX,CACE,QAAS,WAAA,EAEX,CACE,QAAS,YAAA,CACX,EAEF,WAAY,CACV,SAAU,CACR,SAAU,CACR,CACE,KAAM,oCACN,MACE,wHAAA,CACJ,CACF,EAEF,QAAS,CACP,KAAM,oCACN,MAAO,IACP,IAAK,IACL,SAAU,CACR,CACE,KAAM,yCACN,MAAO,OAAA,CACT,CACF,EAEF,SAAU,CACR,SAAU,CACR,CACE,MAAO,IACP,cAAe,CACb,EAAK,CAAE,KAAM,6CAAA,CAA8C,EAE7D,IAAK,IACL,KAAM,uCAAA,CACR,CACF,EAEF,UAAW,CACT,SAAU,CACR,CACE,MAAO,iBACP,KAAM,mCAAA,CACR,CACF,CACF,EAEF,UAAW,qBACb,EChCMC,EAASC,EAAAA,KAAK,IAAM,OAAO,sBAAsB,CAAC,EAExD,IAAIC,EAMO,KAEX,eAAeC,GAAW,CACxB,GAAI,CAACD,EAAe,CAClB,KAAM,CAAC,CAAE,kBAAAE,GAAqB,CAAE,cAAAC,EAAe,EAAI,MAAM,QAAQ,IAAI,CACnE,OAAO,OAAO,EACd,OAAO,iBAAiB,CAAA,CACzB,EASDH,EAAgB,CACd,MARY,MAAME,EAAkB,CAGpC,MAAO,CAACL,CAAkC,EAC1C,OAAQ,CAAC,YAAa,YAAY,CAAA,CACnC,EAIC,cAAAM,CAAA,CAKJ,CAEA,OAAOH,CACT,CAGO,MAAMI,EAAqBC,EAAAA,qBAC/BC,GAAmC,CAClC,MAAMC,EAAQC,EAAAA,SAAA,EACR,CAACC,EAAkBC,CAAmB,EAC1CC,EAAAA,SAAuB,WAAW,EAC9BC,EACJL,EAAM,QAAQ,OAAS,OAAS,YAAc,aAEhD,eAAeM,EAAYC,EAAgB,SAEzCA,EAAO,UAAU,SAAS,CAAE,GAAI,eAAgB,EAEhDA,EAAO,UAAU,yBAAyB,eAAgB,CACxD,SAAU,CACR,YAAa,GAAA,EAEf,SAAU,CACR,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,CAAA,EAEX,iBAAkB,CAChB,CAAE,KAAM,IAAK,MAAO,GAAA,EACpB,CAAE,KAAM,IAAK,MAAO,GAAA,CAAI,EAE1B,iBAAkB,CAChB,CAAE,KAAM,IAAK,MAAO,GAAA,EACpB,CAAE,KAAM,IAAK,MAAO,GAAA,CAAI,CAC1B,CACD,EAED,KAAM,CAAE,MAAAC,EAAO,cAAAZ,CAAA,EAAkB,MAAMF,EAAA,EAIvCE,EAAcY,EAAOD,CAAM,EAI3BA,EAAO,OAAO,YACZF,IACAI,GAAAC,EAAAV,EAAM,gBAAN,YAAAU,EAAqB,qBAArB,YAAAD,EAAyC,cAAe,CACtD,KAAMT,EAAM,QAAQ,OAAS,OAAS,UAAY,KAClD,QAAS,GACT,MAAO,CAAA,EACP,OAAQ,CAAA,CAAC,CACX,EAGED,EAAM,aACRA,EAAM,YAAYQ,CAAM,EAG1BJ,EAAoBE,CAAgB,CACtC,CAEA,OACEM,EAAAA,kBAAAA,IAACC,EAAAA,SAAA,CAAS,SAAUD,EAAAA,kBAAAA,IAACE,iBAAa,EAChC,SAAAF,EAAAA,kBAAAA,IAACpB,EAAA,CACC,MAAOQ,EAAM,KACb,QAAS,CAACe,EAASP,IAAW,CAC5BD,EAAYC,CAAM,CACpB,EACA,SAAUR,EAAM,SAChB,gBAAgB,eAChB,MAAOG,EACP,QAAS,CACP,QAAS,CAAE,QAAS,EAAA,EACpB,SAAU,KACV,gBAAiB,GACjB,GAAGH,EAAM,aAAA,CACX,CAAA,EAEJ,CAEJ,CACF"}