@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,22 +1,18 @@
1
- import 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { VrAnnotationPanel as VrAnnotationPanel$1 } from './vr-annotation-panel.js';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- const VrAnnotationPanel = ({
8
- annotation,
9
- annotationIndex
10
- }) => /*#__PURE__*/jsx(Entity, {
11
- name: "vr-annotation-panel",
12
- children: /*#__PURE__*/jsx(Script, {
13
- script: VrAnnotationPanel$1,
14
- title: annotation.title,
15
- label: annotation.label,
16
- bodyText: annotation.bodyText,
17
- imageUrls: annotation.imageUrls,
18
- annotationIndex: annotationIndex
19
- })
20
- });
21
-
22
- export { VrAnnotationPanel as default };
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { VrAnnotationPanel } from "./vr-annotation-panel.js";
6
+ const VrAnnotationPanel_VrAnnotationPanel = ({ annotation, annotationIndex })=>/*#__PURE__*/ jsx(Entity, {
7
+ name: "vr-annotation-panel",
8
+ children: /*#__PURE__*/ jsx(Script, {
9
+ script: VrAnnotationPanel,
10
+ title: annotation.title,
11
+ label: annotation.label,
12
+ bodyText: annotation.bodyText,
13
+ imageUrls: annotation.imageUrls,
14
+ annotationIndex: annotationIndex
15
+ })
16
+ });
17
+ const VirtualWalkthrough_VrAnnotationPanel = VrAnnotationPanel_VrAnnotationPanel;
18
+ export default VirtualWalkthrough_VrAnnotationPanel;
@@ -1,17 +1,14 @@
1
- import 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { XrAnnotationInteraction as XrAnnotationInteraction$1 } from './xr-annotation-interaction.js';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- const XrAnnotationInteraction = ({
8
- onDismiss
9
- }) => /*#__PURE__*/jsx(Entity, {
10
- name: "xr-annotation-interaction",
11
- children: /*#__PURE__*/jsx(Script, {
12
- script: XrAnnotationInteraction$1,
13
- onDismissCallback: onDismiss
14
- })
15
- });
16
-
17
- export { XrAnnotationInteraction as default };
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { XrAnnotationInteraction } from "./xr-annotation-interaction.js";
6
+ const XrAnnotationInteraction_XrAnnotationInteraction = ({ onDismiss })=>/*#__PURE__*/ jsx(Entity, {
7
+ name: "xr-annotation-interaction",
8
+ children: /*#__PURE__*/ jsx(Script, {
9
+ script: XrAnnotationInteraction,
10
+ onDismissCallback: onDismiss
11
+ })
12
+ });
13
+ const VirtualWalkthrough_XrAnnotationInteraction = XrAnnotationInteraction_XrAnnotationInteraction;
14
+ export default VirtualWalkthrough_XrAnnotationInteraction;
@@ -1,17 +1,14 @@
1
- import 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { XrExitButton as XrExitButton$1 } from './xr-exit-button.js';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- const XrExitButton = ({
8
- onClose
9
- }) => /*#__PURE__*/jsx(Entity, {
10
- name: "xr-exit-button",
11
- children: /*#__PURE__*/jsx(Script, {
12
- script: XrExitButton$1,
13
- onClose: onClose
14
- })
15
- });
16
-
17
- export { XrExitButton as default };
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { XrExitButton } from "./xr-exit-button.js";
6
+ const XrExitButton_XrExitButton = ({ onClose })=>/*#__PURE__*/ jsx(Entity, {
7
+ name: "xr-exit-button",
8
+ children: /*#__PURE__*/ jsx(Script, {
9
+ script: XrExitButton,
10
+ onClose: onClose
11
+ })
12
+ });
13
+ const VirtualWalkthrough_XrExitButton = XrExitButton_XrExitButton;
14
+ export default VirtualWalkthrough_XrExitButton;
@@ -1,17 +1,14 @@
1
- import 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { XrGazeDwell as XrGazeDwell$1 } from './xr-gaze-dwell.js';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- const XrGazeDwell = ({
8
- activeIndex
9
- }) => /*#__PURE__*/jsx(Entity, {
10
- name: "xr-gaze-dwell",
11
- children: /*#__PURE__*/jsx(Script, {
12
- script: XrGazeDwell$1,
13
- activeIndex: activeIndex
14
- })
15
- });
16
-
17
- export { XrGazeDwell as default };
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { XrGazeDwell } from "./xr-gaze-dwell.js";
6
+ const XrGazeDwell_XrGazeDwell = ({ activeIndex })=>/*#__PURE__*/ jsx(Entity, {
7
+ name: "xr-gaze-dwell",
8
+ children: /*#__PURE__*/ jsx(Script, {
9
+ script: XrGazeDwell,
10
+ activeIndex: activeIndex
11
+ })
12
+ });
13
+ const VirtualWalkthrough_XrGazeDwell = XrGazeDwell_XrGazeDwell;
14
+ export default VirtualWalkthrough_XrGazeDwell;
@@ -1,17 +1,14 @@
1
- import 'react';
2
- import { Entity } from '@playcanvas/react';
3
- import { Script } from '@playcanvas/react/components';
4
- import { DEFAULT_RAY_COLOR, XrPointerRay as XrPointerRay$1 } from './xr-pointer-ray.js';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- const XrPointerRay = ({
8
- color = DEFAULT_RAY_COLOR
9
- }) => /*#__PURE__*/jsx(Entity, {
10
- name: "xr-pointer-ray",
11
- children: /*#__PURE__*/jsx(Script, {
12
- script: XrPointerRay$1,
13
- color: color
14
- })
15
- });
16
-
17
- export { XrPointerRay as default };
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Entity } from "@playcanvas/react";
4
+ import { Script } from "@playcanvas/react/components";
5
+ import { DEFAULT_RAY_COLOR, XrPointerRay } from "./xr-pointer-ray.js";
6
+ const XrPointerRay_XrPointerRay = ({ color = DEFAULT_RAY_COLOR })=>/*#__PURE__*/ jsx(Entity, {
7
+ name: "xr-pointer-ray",
8
+ children: /*#__PURE__*/ jsx(Script, {
9
+ script: XrPointerRay,
10
+ color: color
11
+ })
12
+ });
13
+ const VirtualWalkthrough_XrPointerRay = XrPointerRay_XrPointerRay;
14
+ export default VirtualWalkthrough_XrPointerRay;
@@ -1,128 +1,74 @@
1
- import { Script, XRTYPE_VR, XRTYPE_AR } from 'playcanvas';
2
- import { xrStartRigPose, yawFromBasis } from './xr-start-pose.js';
3
-
4
- /**
5
- * Starts an immersive session at the scene's camera position rather than at the world origin.
6
- *
7
- * PlayCanvas overwrites the camera entity's local transform with the head pose every frame, so the
8
- * head lands wherever the headset's reference space puts it — near (0, 0) for a rig that has never
9
- * been moved. This script moves the rig on the first frame of a session so the head instead starts
10
- * at `targetX`/`targetZ` facing `focusX`/`focusZ`.
11
- *
12
- * Only XZ is touched: the user stands on the rig floor, which the boundary wall is also built
13
- * against, so lifting the rig onto the splat's ground plane would put them through it.
14
- *
15
- * Attach to the rig entity — the camera's parent, alongside TfXrNavigation, whose bounds clamp
16
- * pulls the start point back inside the scene bounds when the camera position sits outside them.
17
- */
1
+ import { Script, XRTYPE_AR, XRTYPE_VR } from "playcanvas";
2
+ import { xrStartRigPose, yawFromBasis } from "./xr-start-pose.js";
18
3
  class XrStartPose extends Script {
19
- static scriptName = 'xrStartPose';
20
-
21
- /** World-space X the head should start at, i.e. the viewer's `cameraPosition`. */
22
- targetX = 0;
23
-
24
- /** World-space Z the head should start at. */
25
- targetZ = 0;
26
-
27
- /** World-space X the head should face from there, i.e. the viewer's `origin`. */
28
- focusX = 0;
29
-
30
- /** World-space Z the head should face from there. */
31
- focusZ = 0;
32
-
33
- /** Set when a session starts, cleared once the rig has been placed. */
34
- _pending = false;
35
-
36
- /**
37
- * Whether the engine has written a head pose for this session yet.
38
- */
39
- _posed = false;
40
- _onXrStart = () => {
41
- this._pending = true;
42
- };
43
-
44
- /** Fired from XrManager.update only after the head pose has been written to the camera. */
45
- _onXrUpdate = () => {
46
- this._posed = true;
47
- };
48
- _onXrEnd = () => {
49
- this._posed = false;
50
- };
51
- initialize() {
52
- // Covers mounting into a session that is already running as well as the usual mount before one.
53
- this._pending = this._isXrActive();
54
- this.app.xr?.on('start', this._onXrStart);
55
- this.app.xr?.on('update', this._onXrUpdate);
56
- this.app.xr?.on('end', this._onXrEnd);
57
- // Script removal fires a 'destroy' event rather than calling a destroy() method, so the
58
- // teardown has to be registered as a listener or these handlers outlive the script.
59
- this.once('destroy', () => this._teardown());
60
- }
61
- _isXrActive = () => this.app.xr?.active === true && (this.app.xr?.type === XRTYPE_VR || this.app.xr?.type === XRTYPE_AR);
62
-
63
- /**
64
- * The bounds circle to place the start point in, or undefined when nothing is clamping the head.
65
- * Resolved per call rather than cached: the React wrapper assigns the bounds to the navigation
66
- * script imperatively, so they can land after this script initializes.
67
- */
68
- _bounds = () => {
69
- // @ts-expect-error - scripts are added dynamically to the entity
70
- const navigation = this.entity.script?.tfXrNavigation;
71
- if (!navigation || navigation.boundsRadius <= 0) {
72
- return undefined;
4
+ static scriptName = 'xrStartPose';
5
+ targetX = 0;
6
+ targetZ = 0;
7
+ focusX = 0;
8
+ focusZ = 0;
9
+ _pending = false;
10
+ _posed = false;
11
+ _onXrStart = ()=>{
12
+ this._pending = true;
13
+ };
14
+ _onXrUpdate = ()=>{
15
+ this._posed = true;
16
+ };
17
+ _onXrEnd = ()=>{
18
+ this._posed = false;
19
+ };
20
+ initialize() {
21
+ this._pending = this._isXrActive();
22
+ this.app.xr?.on('start', this._onXrStart);
23
+ this.app.xr?.on('update', this._onXrUpdate);
24
+ this.app.xr?.on('end', this._onXrEnd);
25
+ this.once('destroy', ()=>this._teardown());
73
26
  }
74
- return {
75
- x: navigation.boundsCenter.x,
76
- z: navigation.boundsCenter.z,
77
- radius: navigation.boundsRadius
27
+ _isXrActive = ()=>this.app.xr?.active === true && (this.app.xr?.type === XRTYPE_VR || this.app.xr?.type === XRTYPE_AR);
28
+ _bounds = ()=>{
29
+ const navigation = this.entity.script?.tfXrNavigation;
30
+ if (!navigation || navigation.boundsRadius <= 0) return;
31
+ return {
32
+ x: navigation.boundsCenter.x,
33
+ z: navigation.boundsCenter.z,
34
+ radius: navigation.boundsRadius
35
+ };
78
36
  };
79
- };
80
-
81
- /**
82
- * Runs in update rather than on the 'start' event: the engine writes the head pose during
83
- * xr.update, which precedes the script update in the same tick, so a frame that has posed is the
84
- * first point at which there is a real head to solve the rig pose from.
85
- */
86
- update() {
87
- if (!this._pending || !this._posed || !this._isXrActive()) {
88
- return;
37
+ update() {
38
+ if (!this._pending || !this._posed || !this._isXrActive()) return;
39
+ const camera = this.entity.findComponent('camera')?.entity;
40
+ if (!camera) return;
41
+ const head = camera.getPosition();
42
+ const rig = this.entity.getPosition();
43
+ const rigY = rig.y;
44
+ const pose = xrStartRigPose({
45
+ head: {
46
+ x: head.x,
47
+ z: head.z
48
+ },
49
+ headYaw: yawFromBasis(camera.forward, camera.right),
50
+ rig: {
51
+ x: rig.x,
52
+ z: rig.z
53
+ },
54
+ target: {
55
+ x: this.targetX,
56
+ z: this.targetZ
57
+ },
58
+ focus: {
59
+ x: this.focusX,
60
+ z: this.focusZ
61
+ },
62
+ bounds: this._bounds()
63
+ });
64
+ this.entity.rotate(0, pose.yawDelta, 0);
65
+ this.entity.setPosition(pose.x, rigY, pose.z);
66
+ this._pending = false;
89
67
  }
90
- const camera = this.entity.findComponent('camera')?.entity;
91
- if (!camera) {
92
- return;
68
+ _teardown() {
69
+ this.app.xr?.off('start', this._onXrStart);
70
+ this.app.xr?.off('update', this._onXrUpdate);
71
+ this.app.xr?.off('end', this._onXrEnd);
93
72
  }
94
- const head = camera.getPosition();
95
- const rig = this.entity.getPosition();
96
- const rigY = rig.y;
97
- const pose = xrStartRigPose({
98
- head: {
99
- x: head.x,
100
- z: head.z
101
- },
102
- headYaw: yawFromBasis(camera.forward, camera.right),
103
- rig: {
104
- x: rig.x,
105
- z: rig.z
106
- },
107
- target: {
108
- x: this.targetX,
109
- z: this.targetZ
110
- },
111
- focus: {
112
- x: this.focusX,
113
- z: this.focusZ
114
- },
115
- bounds: this._bounds()
116
- });
117
- this.entity.rotate(0, pose.yawDelta, 0);
118
- this.entity.setPosition(pose.x, rigY, pose.z);
119
- this._pending = false;
120
- }
121
- _teardown() {
122
- this.app.xr?.off('start', this._onXrStart);
123
- this.app.xr?.off('update', this._onXrUpdate);
124
- this.app.xr?.off('end', this._onXrEnd);
125
- }
126
73
  }
127
-
128
74
  export { XrStartPose };
@@ -1,127 +1,97 @@
1
- import { Script, Vec3, Color, StandardMaterial, CULLFACE_NONE, Mesh, MeshInstance, LAYERID_IMMEDIATE } from 'playcanvas';
2
- import { computeGroundPlane, yOnPlane } from './groundPlane.js';
3
-
4
- /** Flat-array triangle geometry ready for `Mesh.setPositions` / `Mesh.setIndices`. */
5
-
6
- /**
7
- * Triangle geometry for a dashed boundary ring laid flat on the ground plane. Each dash is a
8
- * short band (a quad = two triangles) sweeping from `radius - width / 2` to `radius + width / 2`;
9
- * every vertex is sampled on the circle in XZ and lifted onto the plane via `yOnPlane`.
10
- * Returns empty arrays when radius, width, or dashCount is non-positive, or the plane is invalid.
11
- */
12
- const boundaryRingMesh = ({
13
- center,
14
- radius,
15
- groundPlane,
16
- width,
17
- dashCount = 64,
18
- dashRatio = 0.5
19
- }) => {
20
- const plane = computeGroundPlane(groundPlane);
21
- if (radius <= 0 || width <= 0 || dashCount <= 0 || !plane) {
1
+ import { CULLFACE_NONE, Color, LAYERID_IMMEDIATE, Mesh, MeshInstance, Script, StandardMaterial, Vec3 } from "playcanvas";
2
+ import { computeGroundPlane, yOnPlane } from "./groundPlane.js";
3
+ const boundaryRingMesh = ({ center, radius, groundPlane, width, dashCount = 64, dashRatio = 0.5 })=>{
4
+ const plane = computeGroundPlane(groundPlane);
5
+ if (radius <= 0 || width <= 0 || dashCount <= 0 || !plane) return {
6
+ positions: [],
7
+ indices: []
8
+ };
9
+ const innerR = radius - width / 2;
10
+ const outerR = radius + width / 2;
11
+ const step = 2 * Math.PI / dashCount;
12
+ const on = step * dashRatio;
13
+ const positions = [];
14
+ const indices = [];
15
+ const pushVertex = (r, angle)=>{
16
+ const x = center.x + r * Math.cos(angle);
17
+ const z = center.z + r * Math.sin(angle);
18
+ positions.push(x, yOnPlane(x, z, plane.normal, plane.point, center.y), z);
19
+ };
20
+ for(let i = 0; i < dashCount; i++){
21
+ const a0 = i * step;
22
+ const a1 = a0 + on;
23
+ const base = 4 * i;
24
+ pushVertex(innerR, a0);
25
+ pushVertex(outerR, a0);
26
+ pushVertex(innerR, a1);
27
+ pushVertex(outerR, a1);
28
+ indices.push(base, base + 1, base + 3, base, base + 3, base + 2);
29
+ }
22
30
  return {
23
- positions: [],
24
- indices: []
31
+ positions,
32
+ indices
25
33
  };
26
- }
27
- const innerR = radius - width / 2;
28
- const outerR = radius + width / 2;
29
- const step = Math.PI * 2 / dashCount;
30
- const on = step * dashRatio;
31
- const positions = [];
32
- const indices = [];
33
- const pushVertex = (r, angle) => {
34
- const x = center.x + r * Math.cos(angle);
35
- const z = center.z + r * Math.sin(angle);
36
- positions.push(x, yOnPlane(x, z, plane.normal, plane.point, center.y), z);
37
- };
38
- for (let i = 0; i < dashCount; i++) {
39
- const a0 = i * step;
40
- const a1 = a0 + on;
41
- const base = i * 4;
42
- // Per dash: v0 inner@a0, v1 outer@a0, v2 inner@a1, v3 outer@a1.
43
- pushVertex(innerR, a0);
44
- pushVertex(outerR, a0);
45
- pushVertex(innerR, a1);
46
- pushVertex(outerR, a1);
47
- indices.push(base, base + 1, base + 3, base, base + 3, base + 2);
48
- }
49
- return {
50
- positions,
51
- indices
52
- };
53
34
  };
54
-
55
- /**
56
- * Draws a dashed boundary ring as a flat band mesh on the ground plane.
57
- *
58
- * Rendered as a thin triangle band whose width is a fraction of the radius (`widthRatio`).
59
- * center / radius / groundPlane are set imperatively by the BoundaryRing component (see BoundaryRing.tsx for why
60
- * they are not reactive Script props), which calls `rebuild()` after updating them.
61
- */
62
35
  class BoundaryRingScript extends Script {
63
- static scriptName = 'boundaryRing';
64
- center = new Vec3();
65
- radius = 0;
66
- groundPlane = [];
67
- color = new Color(1, 1, 1);
68
- dashCount = 64;
69
- dashRatio = 0.5;
70
- /** Band width as a fraction of the radius. */
71
- widthRatio = 0.05;
72
- initialize() {
73
- const material = new StandardMaterial();
74
- material.useLighting = false;
75
- material.emissive = this.color;
76
- material.cull = CULLFACE_NONE;
77
- material.update();
78
- this._material = material;
79
- this.rebuild();
80
- }
81
- rebuild() {
82
- this._clearMesh();
83
- const geometry = boundaryRingMesh({
84
- center: this.center,
85
- radius: this.radius,
86
- groundPlane: this.groundPlane,
87
- width: this.radius * this.widthRatio,
88
- dashCount: this.dashCount,
89
- dashRatio: this.dashRatio
90
- });
91
- if (geometry.positions.length === 0 || !this._material) {
92
- return;
36
+ static scriptName = 'boundaryRing';
37
+ center = new Vec3();
38
+ radius = 0;
39
+ groundPlane = [];
40
+ color = new Color(1, 1, 1);
41
+ dashCount = 64;
42
+ dashRatio = 0.5;
43
+ widthRatio = 0.05;
44
+ _material;
45
+ _mesh;
46
+ initialize() {
47
+ const material = new StandardMaterial();
48
+ material.useLighting = false;
49
+ material.emissive = this.color;
50
+ material.cull = CULLFACE_NONE;
51
+ material.update();
52
+ this._material = material;
53
+ this.rebuild();
93
54
  }
94
- const mesh = new Mesh(this.app.graphicsDevice);
95
- mesh.setPositions(geometry.positions);
96
- mesh.setIndices(geometry.indices);
97
- mesh.update();
98
- this._mesh = mesh;
99
- const meshInstance = new MeshInstance(mesh, this._material);
100
- if (this.entity.render) {
101
- this.entity.render.meshInstances = [meshInstance];
102
- } else {
103
- // Render on the Immediate layer (drawn after the World layer where the splats render) so
104
- // the ring is not composited behind them.
105
- this.entity.addComponent('render', {
106
- meshInstances: [meshInstance],
107
- layers: [LAYERID_IMMEDIATE]
108
- });
55
+ rebuild() {
56
+ this._clearMesh();
57
+ const geometry = boundaryRingMesh({
58
+ center: this.center,
59
+ radius: this.radius,
60
+ groundPlane: this.groundPlane,
61
+ width: this.radius * this.widthRatio,
62
+ dashCount: this.dashCount,
63
+ dashRatio: this.dashRatio
64
+ });
65
+ if (0 === geometry.positions.length || !this._material) return;
66
+ const mesh = new Mesh(this.app.graphicsDevice);
67
+ mesh.setPositions(geometry.positions);
68
+ mesh.setIndices(geometry.indices);
69
+ mesh.update();
70
+ this._mesh = mesh;
71
+ const meshInstance = new MeshInstance(mesh, this._material);
72
+ if (this.entity.render) this.entity.render.meshInstances = [
73
+ meshInstance
74
+ ];
75
+ else this.entity.addComponent('render', {
76
+ meshInstances: [
77
+ meshInstance
78
+ ],
79
+ layers: [
80
+ LAYERID_IMMEDIATE
81
+ ]
82
+ });
109
83
  }
110
- }
111
- _clearMesh() {
112
- if (this.entity.render) {
113
- this.entity.render.meshInstances = [];
84
+ _clearMesh() {
85
+ if (this.entity.render) this.entity.render.meshInstances = [];
86
+ if (this._mesh) {
87
+ this._mesh.destroy();
88
+ this._mesh = void 0;
89
+ }
114
90
  }
115
- if (this._mesh) {
116
- this._mesh.destroy();
117
- this._mesh = undefined;
91
+ destroy() {
92
+ this._clearMesh();
93
+ this._material?.destroy();
94
+ this._material = void 0;
118
95
  }
119
- }
120
- destroy() {
121
- this._clearMesh();
122
- this._material?.destroy();
123
- this._material = undefined;
124
- }
125
96
  }
126
-
127
97
  export { BoundaryRingScript, boundaryRingMesh };