@terraware/web-components 5.0.27 → 5.1.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/components/AntSwitch/index.js +19 -22
  2. package/components/Autocomplete/Autocomplete.js +106 -130
  3. package/components/Badge/index.js +28 -29
  4. package/components/BusySpinner/index.js +40 -45
  5. package/components/Button/Button.js +41 -47
  6. package/components/Checkbox.js +64 -63
  7. package/components/Confirm/index.js +74 -83
  8. package/components/DatePicker/DatePicker.js +138 -141
  9. package/components/DialogBox/DialogBox.js +111 -118
  10. package/components/Divisor.js +18 -18
  11. package/components/Dropdown.js +66 -94
  12. package/components/EditableTable/index.js +211 -271
  13. package/components/ErrorBox/ErrorBox.js +47 -49
  14. package/components/FileChooser/index.js +117 -135
  15. package/components/FormBottomBar/index.js +75 -84
  16. package/components/Icon/Icon.js +12 -20
  17. package/components/Icon/icons/index.js +256 -256
  18. package/components/IconTooltip/index.js +49 -60
  19. package/components/Map/MapBox.js +545 -452
  20. package/components/Map/MapContainer.js +25 -29
  21. package/components/Map/MapDateSliderControl.js +64 -64
  22. package/components/Map/MapDrawer.js +41 -47
  23. package/components/Map/MapLegend.js +176 -172
  24. package/components/Map/MapViewStyleControl.js +59 -63
  25. package/components/Map/ReactMapboxWrapper.js +3 -2
  26. package/components/Map/index.js +161 -180
  27. package/components/Map/types.js +12 -17
  28. package/components/Map/useMaintainLayerOrder.js +16 -26
  29. package/components/Markdown/index.js +25 -26
  30. package/components/Message/Message.js +73 -76
  31. package/components/MultiSelect/index.js +112 -124
  32. package/components/Navbar/NavFooter.js +9 -13
  33. package/components/Navbar/NavItem.js +70 -76
  34. package/components/Navbar/NavSection.js +17 -19
  35. package/components/Navbar/Navbar.js +39 -46
  36. package/components/Navbar/SubNavbar.js +9 -13
  37. package/components/Note.js +18 -22
  38. package/components/OverlayModal/OverlayModal.js +56 -63
  39. package/components/PageForm/index.js +33 -41
  40. package/components/PhotoChooser/index.js +165 -173
  41. package/components/PhotosCarousel/PhotoSlide.js +32 -35
  42. package/components/PhotosCarousel/index.js +80 -85
  43. package/components/PhotosCarousel/usePhotosCarousel.js +69 -76
  44. package/components/Pill/index.js +41 -45
  45. package/components/PillList/index.js +17 -24
  46. package/components/PlacementWrapper/index.js +38 -59
  47. package/components/PopoverMenu/Popover.js +68 -85
  48. package/components/PopoverMenu/index.js +51 -56
  49. package/components/PopoverMultiSelect/index.js +52 -59
  50. package/components/ProgressCircle/ProgressCircle.js +28 -32
  51. package/components/RadioButton.js +17 -19
  52. package/components/Select/Select.js +13 -15
  53. package/components/Select/SelectT.js +235 -250
  54. package/components/Separator/index.js +14 -17
  55. package/components/Size.js +0 -1
  56. package/components/Slider/index.js +43 -56
  57. package/components/Stepper/index.d.ts +33 -0
  58. package/components/Stepper/index.d.ts.map +1 -0
  59. package/components/Stepper/index.js +66 -0
  60. package/components/SummaryBox.js +70 -72
  61. package/components/Tabs/index.js +133 -135
  62. package/components/TextTruncated/index.js +117 -130
  63. package/components/Textfield/Textfield.js +158 -190
  64. package/components/Textfield/TruncatedTextArea.js +70 -84
  65. package/components/TimelineSlider/TimelineMarker.js +25 -30
  66. package/components/TimelineSlider/TimelineRail.js +8 -11
  67. package/components/TimelineSlider/index.js +64 -66
  68. package/components/TimelineSliderV2/ClusterBadge.js +25 -29
  69. package/components/TimelineSliderV2/TimelineDot.js +31 -35
  70. package/components/TimelineSliderV2/TimelineRail.js +8 -11
  71. package/components/TimelineSliderV2/index.js +121 -103
  72. package/components/TimelineSliderV2/layout.js +124 -147
  73. package/components/TimelineSliderV2/types.js +0 -1
  74. package/components/Tooltip/Tooltip.js +47 -56
  75. package/components/ViewPhotosDialog/index.js +28 -35
  76. package/components/VirtualWalkthrough/Annotation.js +163 -207
  77. package/components/VirtualWalkthrough/AnnotationEditPane.js +198 -184
  78. package/components/VirtualWalkthrough/AnnotationPanel.js +187 -199
  79. package/components/VirtualWalkthrough/Application.js +31 -34
  80. package/components/VirtualWalkthrough/AutoRotator.js +85 -223
  81. package/components/VirtualWalkthrough/BlockingSpinner.js +26 -28
  82. package/components/VirtualWalkthrough/BoundaryRing.js +30 -34
  83. package/components/VirtualWalkthrough/BoundaryWall.js +32 -36
  84. package/components/VirtualWalkthrough/CameraInfo.js +100 -89
  85. package/components/VirtualWalkthrough/ControlsInfoPane.js +254 -195
  86. package/components/VirtualWalkthrough/GradientSky.js +72 -73
  87. package/components/VirtualWalkthrough/SplatControls.js +209 -221
  88. package/components/VirtualWalkthrough/SplatCrop.js +21 -20
  89. package/components/VirtualWalkthrough/SplatFadeCrop.js +21 -20
  90. package/components/VirtualWalkthrough/SplatModel.js +65 -85
  91. package/components/VirtualWalkthrough/SplatRevealRain.js +41 -46
  92. package/components/VirtualWalkthrough/TfAnnotationManager.js +197 -379
  93. package/components/VirtualWalkthrough/TfXrNavigation.js +73 -162
  94. package/components/VirtualWalkthrough/VirtualWalkthroughViewer.js +438 -431
  95. package/components/VirtualWalkthrough/VrAnnotationPanel.js +18 -22
  96. package/components/VirtualWalkthrough/XrAnnotationInteraction.js +14 -17
  97. package/components/VirtualWalkthrough/XrExitButton.js +14 -17
  98. package/components/VirtualWalkthrough/XrGazeDwell.js +14 -17
  99. package/components/VirtualWalkthrough/XrPointerRay.js +14 -17
  100. package/components/VirtualWalkthrough/XrStartPose.js +67 -121
  101. package/components/VirtualWalkthrough/boundary-ring.js +87 -117
  102. package/components/VirtualWalkthrough/boundary-wall.js +175 -258
  103. package/components/VirtualWalkthrough/camera-adoption.js +18 -64
  104. package/components/VirtualWalkthrough/groundPlane.js +32 -47
  105. package/components/VirtualWalkthrough/gsplat-fade-crop-effect.js +35 -35
  106. package/components/VirtualWalkthrough/splatFormat.js +13 -47
  107. package/components/VirtualWalkthrough/useAdoptedCamera.js +23 -44
  108. package/components/VirtualWalkthrough/useRestartOnVr.js +26 -37
  109. package/components/VirtualWalkthrough/useXrRenderTuning.js +33 -54
  110. package/components/VirtualWalkthrough/vr-annotation-panel-layout.js +67 -99
  111. package/components/VirtualWalkthrough/vr-annotation-panel.js +403 -433
  112. package/components/VirtualWalkthrough/vr-annotation-scroll.js +10 -28
  113. package/components/VirtualWalkthrough/walkthrough-camera.js +204 -329
  114. package/components/VirtualWalkthrough/xr-annotation-candidate-buffer.js +39 -80
  115. package/components/VirtualWalkthrough/xr-annotation-candidates.js +6 -18
  116. package/components/VirtualWalkthrough/xr-annotation-interaction.js +31 -56
  117. package/components/VirtualWalkthrough/xr-annotation-targeting.js +22 -38
  118. package/components/VirtualWalkthrough/xr-button-arming.js +7 -17
  119. package/components/VirtualWalkthrough/xr-button-hold.js +22 -36
  120. package/components/VirtualWalkthrough/xr-exit-button-mask.js +22 -36
  121. package/components/VirtualWalkthrough/xr-exit-button.js +148 -207
  122. package/components/VirtualWalkthrough/xr-face-buttons.js +19 -29
  123. package/components/VirtualWalkthrough/xr-gaze-dwell-state.js +23 -34
  124. package/components/VirtualWalkthrough/xr-gaze-dwell.js +107 -144
  125. package/components/VirtualWalkthrough/xr-interactive-ui.js +12 -24
  126. package/components/VirtualWalkthrough/xr-pointer-ray.js +13 -20
  127. package/components/VirtualWalkthrough/xr-progress-pie-material.js +117 -88
  128. package/components/VirtualWalkthrough/xr-progress-pie.js +1 -10
  129. package/components/VirtualWalkthrough/xr-ray-quad.js +16 -30
  130. package/components/VirtualWalkthrough/xr-render-tuning.js +17 -48
  131. package/components/VirtualWalkthrough/xr-scene-bounds.js +21 -37
  132. package/components/VirtualWalkthrough/xr-start-pose.js +27 -73
  133. package/components/VirtualWalkthrough/xr-teleport-gesture.js +16 -42
  134. package/components/svg/BlobbyGrayIconImage.js +41 -39
  135. package/components/svg/BlobbyGrayIconImport.js +41 -39
  136. package/components/svg/BlobbyGrayIconUploadToTheCloud.js +41 -39
  137. package/components/svg/BlobbyIconCloudChecked.js +202 -164
  138. package/components/svg/BlobbyIconExportOrUploadPhoto.js +202 -164
  139. package/components/svg/BlobbyIconFolder.js +202 -164
  140. package/components/svg/BlobbyIconGraphReport.js +202 -164
  141. package/components/svg/BlobbyIconHappy.js +202 -164
  142. package/components/svg/BlobbyIconHeartMonitor.js +202 -164
  143. package/components/svg/BlobbyIconLeaf.js +202 -164
  144. package/components/svg/BlobbyIconLibrary.js +202 -164
  145. package/components/svg/BlobbyIconNursery.js +204 -166
  146. package/components/svg/BlobbyIconOrganization.js +202 -164
  147. package/components/svg/BlobbyIconParchment.js +202 -164
  148. package/components/svg/BlobbyIconPeople.js +202 -164
  149. package/components/svg/BlobbyIconSeedBank.js +202 -164
  150. package/components/svg/BlobbyIconSeedling.js +202 -164
  151. package/components/svg/BlobbyIconSeeds.js +202 -164
  152. package/components/svg/BlobbyIconSite.js +206 -167
  153. package/components/svg/BlobbyIconSparkles.js +202 -164
  154. package/components/svg/BlobbyIconWrench.js +202 -164
  155. package/components/svg/Bug.js +19 -21
  156. package/components/svg/Calendar.js +19 -21
  157. package/components/svg/CaretDown.js +19 -21
  158. package/components/svg/CaretLeft.js +19 -21
  159. package/components/svg/CaretRight.js +19 -21
  160. package/components/svg/CaretUp.js +19 -21
  161. package/components/svg/ChevronDown.js +19 -21
  162. package/components/svg/ChevronUp.js +19 -21
  163. package/components/svg/Close.js +19 -21
  164. package/components/svg/Critical.js +19 -21
  165. package/components/svg/Edit.js +202 -164
  166. package/components/svg/Error.js +19 -21
  167. package/components/svg/Filter.js +19 -21
  168. package/components/svg/Folder.js +19 -21
  169. package/components/svg/Help.js +19 -21
  170. package/components/svg/Home.js +19 -21
  171. package/components/svg/IconAdd.js +19 -21
  172. package/components/svg/IconArrowRight.js +21 -23
  173. package/components/svg/IconBusinessNetwork.js +19 -21
  174. package/components/svg/IconCalendar.js +19 -21
  175. package/components/svg/IconCancel.js +19 -21
  176. package/components/svg/IconChargingBattery.js +19 -21
  177. package/components/svg/IconChecklist.js +21 -23
  178. package/components/svg/IconCheckmark.js +19 -21
  179. package/components/svg/IconCoinInHand.js +19 -21
  180. package/components/svg/IconColumns.js +19 -21
  181. package/components/svg/IconComment.js +20 -22
  182. package/components/svg/IconDashboard.js +19 -21
  183. package/components/svg/IconDataMigration.js +19 -21
  184. package/components/svg/IconDocument.js +21 -23
  185. package/components/svg/IconDownloadFromTheCloud.js +21 -23
  186. package/components/svg/IconEdit.js +21 -23
  187. package/components/svg/IconExpand.js +21 -23
  188. package/components/svg/IconExport.js +19 -21
  189. package/components/svg/IconExternalLink.js +19 -21
  190. package/components/svg/IconEye.js +19 -21
  191. package/components/svg/IconEyeOff.js +19 -21
  192. package/components/svg/IconFile.js +19 -21
  193. package/components/svg/IconFolder.js +19 -21
  194. package/components/svg/IconFullScreen.js +20 -22
  195. package/components/svg/IconFutures.js +19 -21
  196. package/components/svg/IconGraphReport.js +19 -21
  197. package/components/svg/IconGrid.js +19 -21
  198. package/components/svg/IconHeartMonitor.js +19 -21
  199. package/components/svg/IconHelp.js +21 -23
  200. package/components/svg/IconHistory.js +19 -21
  201. package/components/svg/IconImport.js +19 -21
  202. package/components/svg/IconIndex.js +19 -21
  203. package/components/svg/IconLayers.js +19 -21
  204. package/components/svg/IconLibrary.js +20 -22
  205. package/components/svg/IconList.js +19 -21
  206. package/components/svg/IconLivePlant.js +19 -21
  207. package/components/svg/IconLocations.js +19 -21
  208. package/components/svg/IconMail.js +19 -21
  209. package/components/svg/IconManager.js +19 -21
  210. package/components/svg/IconMap.js +19 -21
  211. package/components/svg/IconMarker.js +19 -21
  212. package/components/svg/IconMenu.js +19 -21
  213. package/components/svg/IconMenuHorizontal.js +19 -21
  214. package/components/svg/IconModule.js +19 -21
  215. package/components/svg/IconMyLocation.js +19 -21
  216. package/components/svg/IconNote.js +21 -23
  217. package/components/svg/IconNursery.js +21 -23
  218. package/components/svg/IconOrg.js +19 -21
  219. package/components/svg/IconParchment.js +19 -21
  220. package/components/svg/IconPhoto.js +19 -21
  221. package/components/svg/IconPlantsFilled.js +19 -21
  222. package/components/svg/IconRedo.js +19 -21
  223. package/components/svg/IconRestorationSite.js +19 -21
  224. package/components/svg/IconSeedBank.js +19 -21
  225. package/components/svg/IconSeedling.js +19 -21
  226. package/components/svg/IconSettings.js +19 -21
  227. package/components/svg/IconSlice.js +19 -21
  228. package/components/svg/IconSubmit.js +19 -21
  229. package/components/svg/IconSubtract.js +21 -23
  230. package/components/svg/IconSynced.js +19 -21
  231. package/components/svg/IconTrashCan.js +19 -21
  232. package/components/svg/IconTreasureMap.js +19 -21
  233. package/components/svg/IconUnavailable.js +19 -21
  234. package/components/svg/IconUndo.js +19 -21
  235. package/components/svg/IconVariable.js +19 -21
  236. package/components/svg/IconVideo.js +30 -31
  237. package/components/svg/IconWifi.js +19 -21
  238. package/components/svg/Info.js +19 -21
  239. package/components/svg/Key.js +19 -21
  240. package/components/svg/Leaf.js +19 -21
  241. package/components/svg/Lock.js +19 -21
  242. package/components/svg/Logo.js +48 -43
  243. package/components/svg/MenuVertical.js +19 -21
  244. package/components/svg/Notification.js +19 -21
  245. package/components/svg/Person.js +19 -21
  246. package/components/svg/Plus.js +19 -21
  247. package/components/svg/RestorationSite.js +19 -21
  248. package/components/svg/Search.js +19 -21
  249. package/components/svg/Seeds.js +19 -21
  250. package/components/svg/Site.js +19 -21
  251. package/components/svg/Sparkles.js +19 -21
  252. package/components/svg/Species.js +19 -21
  253. package/components/svg/Species2.js +202 -164
  254. package/components/svg/Spinner.js +54 -48
  255. package/components/svg/Star.js +19 -21
  256. package/components/svg/Success.js +19 -21
  257. package/components/svg/SuccessFilled.js +19 -21
  258. package/components/svg/TerrawareLogoDesktop.js +55 -49
  259. package/components/svg/TerrawareLogoMobile.js +25 -26
  260. package/components/svg/Touchscreen.js +19 -21
  261. package/components/svg/UploadCloud.js +202 -164
  262. package/components/svg/Warning.js +19 -21
  263. package/components/svg/WelcomeClipboard.js +156 -133
  264. package/components/svg/index.js +129 -129
  265. package/components/table/EnhancedTableToolbar.js +68 -74
  266. package/components/table/EnhancedTableToolbarV2.js +31 -41
  267. package/components/table/TableCellRenderer.js +196 -231
  268. package/components/table/TableHeader.js +71 -73
  269. package/components/table/TableHeaderItem.js +97 -102
  270. package/components/table/density.js +18 -19
  271. package/components/table/index.js +350 -369
  272. package/components/table/sort.js +27 -52
  273. package/components/table/types.js +0 -1
  274. package/components/types/index.js +0 -1
  275. package/hooks/cameraEntityContext.js +2 -13
  276. package/hooks/useBoolean.js +17 -13
  277. package/hooks/useCameraPosition.js +56 -56
  278. package/hooks/useDevicePerformance.js +17 -17
  279. package/hooks/useXr.js +85 -87
  280. package/index.d.ts +3 -1
  281. package/index.d.ts.map +1 -1
  282. package/index.js +59 -58
  283. package/package.json +1 -1
  284. package/setupTests.js +0 -4
  285. package/strings/csv/en.csv +1 -0
  286. package/strings/csv/es.csv +1 -0
  287. package/strings/csv/fr.csv +1 -0
  288. package/strings/export.js +111 -170
  289. package/strings/index.js +25 -54
  290. package/strings/locales.js +21 -41
  291. package/strings/strings-en.d.ts +1 -0
  292. package/strings/strings-en.d.ts.map +1 -1
  293. package/strings/strings-en.js +50 -51
  294. package/strings/strings-es.d.ts +1 -0
  295. package/strings/strings-es.d.ts.map +1 -1
  296. package/strings/strings-es.js +50 -51
  297. package/strings/strings-fr.d.ts +1 -0
  298. package/strings/strings-fr.d.ts.map +1 -1
  299. package/strings/strings-fr.js +50 -51
  300. package/strings/strings-gx.d.ts +1 -0
  301. package/strings/strings-gx.d.ts.map +1 -1
  302. package/strings/strings-gx.js +50 -51
  303. package/style-dictionary-dist/TerrawareTheme.js +186 -186
  304. package/theme.js +74 -76
  305. package/utils/color.js +8 -15
  306. package/utils/date.js +42 -108
  307. package/utils/index.js +4 -4
  308. package/utils/preventDefaultEvent.js +3 -3
  309. package/utils/text.js +11 -11
  310. package/utils/useDeviceInfo.js +42 -79
  311. package/virtualWalkthrough.js +23 -23
@@ -1,235 +1,97 @@
1
- import { Script, Vec3, Quat } from 'playcanvas';
2
-
3
- /**
4
- * Auto-rotator script for PlayCanvas CameraControls.
5
- * Automatically orbits the camera around its focus point after a period of inactivity.
6
- */
1
+ import { Quat, Script, Vec3 } from "playcanvas";
7
2
  class AutoRotator extends Script {
8
- static scriptName = 'autoRotator';
9
-
10
- /**
11
- * Rotation speed in degrees per second when auto-rotating.
12
- *
13
- * @attribute
14
- * @title Speed
15
- */
16
- speed = 4;
17
-
18
- /**
19
- * Delay in seconds before auto-rotation starts after initialization.
20
- *
21
- * @attribute
22
- * @title Start Delay
23
- */
24
- startDelay = 5;
25
-
26
- /**
27
- * Delay in seconds before auto-rotation restarts after the camera stops moving.
28
- *
29
- * @attribute
30
- * @title Restart Delay
31
- */
32
- restartDelay = 2;
33
-
34
- /**
35
- * Duration in seconds to fade in the rotation speed.
36
- *
37
- * @attribute
38
- * @title Start Fade In Time
39
- */
40
- startFadeInTime = 5;
41
-
42
- /**
43
- * Internal timer tracking how long the camera has been idle.
44
- * @private
45
- */
46
- timer = 0;
47
-
48
- /**
49
- * Flag to track if rotation has started at least once.
50
- * @private
51
- */
52
- hasStartedRotating = false;
53
-
54
- /**
55
- * Flag to track if we're currently rotating.
56
- * @private
57
- */
58
- isCurrentlyRotating = false;
59
-
60
- /**
61
- * Last known pitch angle for movement detection.
62
- * @private
63
- */
64
- pitch = null;
65
-
66
- /**
67
- * Last known yaw angle for movement detection.
68
- * @private
69
- */
70
- yaw = null;
71
-
72
- /**
73
- * Reference to the camera entity.
74
- * @private
75
- */
76
- cameraEntity = null;
77
-
78
- /**
79
- * Reference to the CameraControls script.
80
- * @private
81
- */
82
- cameraControls = null;
83
-
84
- /**
85
- * Reference to the WalkthroughCamera script (used when CameraControls is absent).
86
- * @private
87
- */
88
- walkthroughCamera = null;
89
-
90
- /**
91
- * Bound event handlers for cleanup.
92
- * @private
93
- */
94
-
95
- /**
96
- * Handle user input events.
97
- * @private
98
- */
99
- handleUserInput() {
100
- this.timer = 0;
101
- this.isCurrentlyRotating = false;
102
- this.hasStartedRotating = true;
103
- }
104
-
105
- /**
106
- * Initialize the script.
107
- */
108
- initialize() {
109
- this.onPointerDown = this.handleUserInput.bind(this);
110
- this.onKeyDown = this.handleUserInput.bind(this);
111
- if (this.app.graphicsDevice.canvas) {
112
- this.app.graphicsDevice.canvas.addEventListener('pointerdown', this.onPointerDown);
113
- }
114
- window.addEventListener('keydown', this.onKeyDown);
115
- this.resolveCamera();
116
- }
117
-
118
- /**
119
- * Finds the camera and the script posing it. WalkthroughCamera is mounted on this entity, the rig,
120
- * so that it poses a camera the walkthrough adopted from a host scene as readily as one of its own;
121
- * CameraControls sits on the camera entity itself.
122
- *
123
- * Called again while nothing has been found, because an adopted camera is reparented into the rig
124
- * by an effect that runs after the scripts are mounted.
125
- * @private
126
- */
127
- resolveCamera() {
128
- this.cameraEntity = this.entity.findComponent('camera')?.entity ?? null;
129
- this.cameraControls = this.cameraEntity?.script?.cameraControls ?? null;
130
- // @ts-expect-error - scripts are added dynamically to the entity
131
- const rigWalkthroughCamera = this.entity.script?.walkthroughCamera;
132
- this.walkthroughCamera = rigWalkthroughCamera ?? this.cameraEntity?.script?.walkthroughCamera ?? null;
133
- }
134
-
135
- /**
136
- * Update loop that handles auto-rotation logic.
137
- * Runs after CameraControls updates.
138
- */
139
- postUpdate(dt) {
140
- if (!this.cameraControls && !this.walkthroughCamera) {
141
- this.resolveCamera();
142
- }
143
- const hasControls = this.cameraControls && this.cameraControls._pose;
144
- const hasWalkthrough = !!this.walkthroughCamera;
145
- if (!hasControls && !hasWalkthrough) {
146
- return;
147
- }
148
- const currentPitch = hasControls ? this.cameraControls._pose.angles.x : this.walkthroughCamera.currentPitch;
149
- const currentYaw = hasControls ? this.cameraControls._pose.angles.y : this.walkthroughCamera.currentYaw;
150
-
151
- // Initialize angles on first frame
152
- if (this.pitch === null || this.yaw === null) {
153
- this.pitch = currentPitch;
154
- this.yaw = currentYaw;
155
- }
156
-
157
- // Check for camera movement only after initial rotation has started and while not actively rotating
158
- if (this.hasStartedRotating && !this.isCurrentlyRotating && this.pitch !== null && this.yaw !== null) {
159
- const pitchDiff = Math.abs(this.pitch - currentPitch);
160
- const yawDiff = Math.abs(this.yaw - currentYaw);
161
- if (pitchDiff > 0.1 || yawDiff > 0.1) {
162
- this.pitch = currentPitch;
163
- this.yaw = currentYaw;
3
+ static scriptName = 'autoRotator';
4
+ speed = 4;
5
+ startDelay = 5;
6
+ restartDelay = 2;
7
+ startFadeInTime = 5;
8
+ timer = 0;
9
+ hasStartedRotating = false;
10
+ isCurrentlyRotating = false;
11
+ pitch = null;
12
+ yaw = null;
13
+ cameraEntity = null;
14
+ cameraControls = null;
15
+ walkthroughCamera = null;
16
+ onPointerDown;
17
+ onKeyDown;
18
+ handleUserInput() {
164
19
  this.timer = 0;
165
20
  this.isCurrentlyRotating = false;
166
21
  this.hasStartedRotating = true;
167
- return;
168
- }
169
22
  }
170
- this.timer += dt;
171
-
172
- // Determine which delay to use
173
- const currentDelay = this.hasStartedRotating ? this.restartDelay : this.startDelay;
174
-
175
- // Start auto-rotation after delay
176
- if (this.timer >= currentDelay) {
177
- this.isCurrentlyRotating = true;
178
- const time = this.timer - currentDelay;
179
- const fadeIn = this.smoothStep(time / this.startFadeInTime);
180
- const yawDelta = dt * fadeIn * this.speed;
181
- if (hasControls) {
182
- const pose = this.cameraControls._pose;
183
- const focusPoint = pose.getFocus(new Vec3());
184
- const offset = new Vec3().sub2(pose.position.clone(), focusPoint);
185
- const rotationQuat = new Quat().setFromAxisAngle(Vec3.UP, yawDelta);
186
- const rotatedOffset = new Vec3();
187
- rotationQuat.transformVector(offset, rotatedOffset);
188
- const newPos = new Vec3().add2(focusPoint, rotatedOffset);
189
- pose.look(newPos, focusPoint);
190
- if (this.cameraControls._controller?.attach) {
191
- this.cameraControls._controller.attach(pose, false);
192
- }
193
- this.cameraEntity.setPosition(pose.position);
194
- this.cameraEntity.setEulerAngles(pose.angles);
195
- this.pitch = pose.angles.x;
196
- this.yaw = pose.angles.y;
197
- } else {
198
- this.walkthroughCamera.orbitStep(yawDelta);
199
- this.pitch = this.walkthroughCamera.currentPitch;
200
- this.yaw = this.walkthroughCamera.currentYaw;
201
- }
23
+ initialize() {
24
+ this.onPointerDown = this.handleUserInput.bind(this);
25
+ this.onKeyDown = this.handleUserInput.bind(this);
26
+ if (this.app.graphicsDevice.canvas) this.app.graphicsDevice.canvas.addEventListener('pointerdown', this.onPointerDown);
27
+ window.addEventListener('keydown', this.onKeyDown);
28
+ this.resolveCamera();
202
29
  }
203
- }
204
-
205
- /**
206
- * Smooth step interpolation function.
207
- *
208
- * @param {number} x - Input value.
209
- * @returns {number} - Smoothly interpolated value.
210
- * @private
211
- */
212
- smoothStep(x) {
213
- if (x <= 0) {
214
- return 0;
30
+ resolveCamera() {
31
+ this.cameraEntity = this.entity.findComponent('camera')?.entity ?? null;
32
+ this.cameraControls = this.cameraEntity?.script?.cameraControls ?? null;
33
+ const rigWalkthroughCamera = this.entity.script?.walkthroughCamera;
34
+ this.walkthroughCamera = rigWalkthroughCamera ?? this.cameraEntity?.script?.walkthroughCamera ?? null;
215
35
  }
216
- if (x >= 1) {
217
- return 1;
36
+ postUpdate(dt) {
37
+ if (!this.cameraControls && !this.walkthroughCamera) this.resolveCamera();
38
+ const hasControls = this.cameraControls && this.cameraControls._pose;
39
+ const hasWalkthrough = !!this.walkthroughCamera;
40
+ if (!hasControls && !hasWalkthrough) return;
41
+ const currentPitch = hasControls ? this.cameraControls._pose.angles.x : this.walkthroughCamera.currentPitch;
42
+ const currentYaw = hasControls ? this.cameraControls._pose.angles.y : this.walkthroughCamera.currentYaw;
43
+ if (null === this.pitch || null === this.yaw) {
44
+ this.pitch = currentPitch;
45
+ this.yaw = currentYaw;
46
+ }
47
+ if (this.hasStartedRotating && !this.isCurrentlyRotating && null !== this.pitch && null !== this.yaw) {
48
+ const pitchDiff = Math.abs(this.pitch - currentPitch);
49
+ const yawDiff = Math.abs(this.yaw - currentYaw);
50
+ if (pitchDiff > 0.1 || yawDiff > 0.1) {
51
+ this.pitch = currentPitch;
52
+ this.yaw = currentYaw;
53
+ this.timer = 0;
54
+ this.isCurrentlyRotating = false;
55
+ this.hasStartedRotating = true;
56
+ return;
57
+ }
58
+ }
59
+ this.timer += dt;
60
+ const currentDelay = this.hasStartedRotating ? this.restartDelay : this.startDelay;
61
+ if (this.timer >= currentDelay) {
62
+ this.isCurrentlyRotating = true;
63
+ const time = this.timer - currentDelay;
64
+ const fadeIn = this.smoothStep(time / this.startFadeInTime);
65
+ const yawDelta = dt * fadeIn * this.speed;
66
+ if (hasControls) {
67
+ const pose = this.cameraControls._pose;
68
+ const focusPoint = pose.getFocus(new Vec3());
69
+ const offset = new Vec3().sub2(pose.position.clone(), focusPoint);
70
+ const rotationQuat = new Quat().setFromAxisAngle(Vec3.UP, yawDelta);
71
+ const rotatedOffset = new Vec3();
72
+ rotationQuat.transformVector(offset, rotatedOffset);
73
+ const newPos = new Vec3().add2(focusPoint, rotatedOffset);
74
+ pose.look(newPos, focusPoint);
75
+ if (this.cameraControls._controller?.attach) this.cameraControls._controller.attach(pose, false);
76
+ this.cameraEntity.setPosition(pose.position);
77
+ this.cameraEntity.setEulerAngles(pose.angles);
78
+ this.pitch = pose.angles.x;
79
+ this.yaw = pose.angles.y;
80
+ } else {
81
+ this.walkthroughCamera.orbitStep(yawDelta);
82
+ this.pitch = this.walkthroughCamera.currentPitch;
83
+ this.yaw = this.walkthroughCamera.currentYaw;
84
+ }
85
+ }
218
86
  }
219
- return Math.sin((x - 0.5) * Math.PI) * 0.5 + 0.5;
220
- }
221
-
222
- /**
223
- * Clean up event listeners when the script is destroyed.
224
- */
225
- destroy() {
226
- if (this.app.graphicsDevice.canvas && this.onPointerDown) {
227
- this.app.graphicsDevice.canvas.removeEventListener('pointerdown', this.onPointerDown);
87
+ smoothStep(x) {
88
+ if (x <= 0) return 0;
89
+ if (x >= 1) return 1;
90
+ return 0.5 * Math.sin((x - 0.5) * Math.PI) + 0.5;
228
91
  }
229
- if (this.onKeyDown) {
230
- window.removeEventListener('keydown', this.onKeyDown);
92
+ destroy() {
93
+ if (this.app.graphicsDevice.canvas && this.onPointerDown) this.app.graphicsDevice.canvas.removeEventListener('pointerdown', this.onPointerDown);
94
+ if (this.onKeyDown) window.removeEventListener('keydown', this.onKeyDown);
231
95
  }
232
- }
233
96
  }
234
-
235
97
  export { AutoRotator };
@@ -1,30 +1,28 @@
1
- import 'react';
2
- import { useTheme, StyledEngineProvider, CircularProgress } from '@mui/material';
3
- import { jsx } from 'react/jsx-runtime';
4
-
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { CircularProgress, StyledEngineProvider, useTheme } from "@mui/material";
5
4
  function BlockingSpinner() {
6
- const theme = useTheme();
7
- return /*#__PURE__*/jsx(StyledEngineProvider, {
8
- injectFirst: true,
9
- children: /*#__PURE__*/jsx(CircularProgress, {
10
- size: "193",
11
- sx: {
12
- height: '200px',
13
- width: '200px',
14
- position: 'absolute',
15
- top: 0,
16
- bottom: 0,
17
- left: 0,
18
- right: 0,
19
- margin: 'auto',
20
- '& .MuiCircularProgress-svg': {
21
- color: theme.palette.TwClrIcnBrand,
22
- height: '200px',
23
- width: '200px'
24
- }
25
- }
26
- })
27
- });
5
+ const theme = useTheme();
6
+ return /*#__PURE__*/ jsx(StyledEngineProvider, {
7
+ injectFirst: true,
8
+ children: /*#__PURE__*/ jsx(CircularProgress, {
9
+ size: "193",
10
+ sx: {
11
+ height: '200px',
12
+ width: '200px',
13
+ position: 'absolute',
14
+ top: 0,
15
+ bottom: 0,
16
+ left: 0,
17
+ right: 0,
18
+ margin: 'auto',
19
+ '& .MuiCircularProgress-svg': {
20
+ color: theme.palette.TwClrIcnBrand,
21
+ height: '200px',
22
+ width: '200px'
23
+ }
24
+ }
25
+ })
26
+ });
28
27
  }
29
-
30
- export { BlockingSpinner as default };
28
+ export default BlockingSpinner;
@@ -1,35 +1,31 @@
1
- import { useEffect } from 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { useApp } from '@playcanvas/react/hooks';
5
- import { BoundaryRingScript } from './boundary-ring.js';
6
- import { jsx } from 'react/jsx-runtime';
7
-
8
- const BoundaryRing = ({
9
- center,
10
- radius,
11
- groundPlane
12
- }) => {
13
- const app = useApp();
14
- useEffect(() => {
15
- // Set imperatively rather than via reactive Script props. @playcanvas/react wraps Script
16
- // in memo() whose shallowEquals returns early on the first prop with a .equals() method
17
- // (Vec3), so any prop after a Vec3 is never compared and would not propagate.
18
- // @ts-expect-error - scripts are added dynamically to the entity
19
- const script = app.root.findByName('boundary-ring')?.script?.boundaryRing;
20
- if (script) {
21
- script.center = center;
22
- script.radius = radius;
23
- script.groundPlane = groundPlane;
24
- script.rebuild();
25
- }
26
- }, [app, center, radius, groundPlane]);
27
- return /*#__PURE__*/jsx(Entity, {
28
- name: "boundary-ring",
29
- children: /*#__PURE__*/jsx(Script, {
30
- script: BoundaryRingScript
31
- })
32
- });
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { useApp } from "@playcanvas/react/hooks";
6
+ import { BoundaryRingScript } from "./boundary-ring.js";
7
+ const BoundaryRing = ({ center, radius, groundPlane })=>{
8
+ const app = useApp();
9
+ useEffect(()=>{
10
+ const script = app.root.findByName('boundary-ring')?.script?.boundaryRing;
11
+ if (script) {
12
+ script.center = center;
13
+ script.radius = radius;
14
+ script.groundPlane = groundPlane;
15
+ script.rebuild();
16
+ }
17
+ }, [
18
+ app,
19
+ center,
20
+ radius,
21
+ groundPlane
22
+ ]);
23
+ return /*#__PURE__*/ jsx(Entity, {
24
+ name: "boundary-ring",
25
+ children: /*#__PURE__*/ jsx(Script, {
26
+ script: BoundaryRingScript
27
+ })
28
+ });
33
29
  };
34
-
35
- export { BoundaryRing as default };
30
+ const VirtualWalkthrough_BoundaryRing = BoundaryRing;
31
+ export default VirtualWalkthrough_BoundaryRing;
@@ -1,37 +1,33 @@
1
- import { useEffect } from 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { useApp } from '@playcanvas/react/hooks';
5
- import { BoundaryWallScript } from './boundary-wall.js';
6
- import { jsx } from 'react/jsx-runtime';
7
-
8
- const BoundaryWall = ({
9
- center,
10
- radius,
11
- groundPlane,
12
- baseY
13
- }) => {
14
- const app = useApp();
15
- useEffect(() => {
16
- // Set imperatively rather than via reactive Script props. @playcanvas/react wraps Script
17
- // in memo() whose shallowEquals returns early on the first prop with a .equals() method
18
- // (Vec3), so any prop after a Vec3 is never compared and would not propagate.
19
- // @ts-expect-error - scripts are added dynamically to the entity
20
- const script = app.root.findByName('boundary-wall')?.script?.boundaryWall;
21
- if (script) {
22
- script.center = center;
23
- script.radius = radius;
24
- script.groundPlane = groundPlane;
25
- script.baseY = baseY;
26
- script.rebuild();
27
- }
28
- }, [app, center, radius, groundPlane, baseY]);
29
- return /*#__PURE__*/jsx(Entity, {
30
- name: "boundary-wall",
31
- children: /*#__PURE__*/jsx(Script, {
32
- script: BoundaryWallScript
33
- })
34
- });
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { useApp } from "@playcanvas/react/hooks";
6
+ import { BoundaryWallScript } from "./boundary-wall.js";
7
+ const BoundaryWall = ({ center, radius, groundPlane, baseY })=>{
8
+ const app = useApp();
9
+ useEffect(()=>{
10
+ const script = app.root.findByName('boundary-wall')?.script?.boundaryWall;
11
+ if (script) {
12
+ script.center = center;
13
+ script.radius = radius;
14
+ script.groundPlane = groundPlane;
15
+ script.baseY = baseY;
16
+ script.rebuild();
17
+ }
18
+ }, [
19
+ app,
20
+ center,
21
+ radius,
22
+ groundPlane,
23
+ baseY
24
+ ]);
25
+ return /*#__PURE__*/ jsx(Entity, {
26
+ name: "boundary-wall",
27
+ children: /*#__PURE__*/ jsx(Script, {
28
+ script: BoundaryWallScript
29
+ })
30
+ });
35
31
  };
36
-
37
- export { BoundaryWall as default };
32
+ const VirtualWalkthrough_BoundaryWall = BoundaryWall;
33
+ export default VirtualWalkthrough_BoundaryWall;