@terraware/web-components 5.0.27 → 5.1.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.
- package/components/AntSwitch/index.js +19 -22
- package/components/Autocomplete/Autocomplete.js +106 -130
- package/components/Badge/index.js +28 -29
- package/components/BusySpinner/index.js +40 -45
- package/components/Button/Button.js +41 -47
- package/components/Checkbox.js +64 -63
- package/components/Confirm/index.js +74 -83
- package/components/DatePicker/DatePicker.js +138 -141
- package/components/DialogBox/DialogBox.js +111 -118
- package/components/Divisor.js +18 -18
- package/components/Dropdown.js +66 -94
- package/components/EditableTable/index.js +211 -271
- package/components/ErrorBox/ErrorBox.js +47 -49
- package/components/FileChooser/index.js +117 -135
- package/components/FormBottomBar/index.js +75 -84
- package/components/Icon/Icon.js +12 -20
- package/components/Icon/icons/index.js +256 -256
- package/components/IconTooltip/index.js +49 -60
- package/components/Map/MapBox.js +545 -452
- package/components/Map/MapContainer.js +25 -29
- package/components/Map/MapDateSliderControl.js +64 -64
- package/components/Map/MapDrawer.js +41 -47
- package/components/Map/MapLegend.js +176 -172
- package/components/Map/MapViewStyleControl.js +59 -63
- package/components/Map/ReactMapboxWrapper.js +3 -2
- package/components/Map/index.js +161 -180
- package/components/Map/types.js +12 -17
- package/components/Map/useMaintainLayerOrder.js +16 -26
- package/components/Markdown/index.js +25 -26
- package/components/Message/Message.js +73 -76
- package/components/MultiSelect/index.js +112 -124
- package/components/Navbar/NavFooter.js +9 -13
- package/components/Navbar/NavItem.js +70 -76
- package/components/Navbar/NavSection.js +17 -19
- package/components/Navbar/Navbar.js +39 -46
- package/components/Navbar/SubNavbar.js +9 -13
- package/components/Note.js +18 -22
- package/components/OverlayModal/OverlayModal.js +56 -63
- package/components/PageForm/index.js +33 -41
- package/components/PhotoChooser/index.js +165 -173
- package/components/PhotosCarousel/PhotoSlide.js +32 -35
- package/components/PhotosCarousel/index.js +80 -85
- package/components/PhotosCarousel/usePhotosCarousel.js +69 -76
- package/components/Pill/index.js +41 -45
- package/components/PillList/index.js +17 -24
- package/components/PlacementWrapper/index.js +38 -59
- package/components/PopoverMenu/Popover.js +68 -85
- package/components/PopoverMenu/index.js +51 -56
- package/components/PopoverMultiSelect/index.js +52 -59
- package/components/ProgressCircle/ProgressCircle.js +28 -32
- package/components/RadioButton.js +17 -19
- package/components/Select/Select.js +13 -15
- package/components/Select/SelectT.js +235 -250
- package/components/Separator/index.js +14 -17
- package/components/Size.js +0 -1
- package/components/Slider/index.js +43 -56
- package/components/SummaryBox.js +70 -72
- package/components/Tabs/index.js +133 -135
- package/components/TextTruncated/index.js +117 -130
- package/components/Textfield/Textfield.js +158 -190
- package/components/Textfield/TruncatedTextArea.js +70 -84
- package/components/TimelineSlider/TimelineMarker.js +25 -30
- package/components/TimelineSlider/TimelineRail.js +8 -11
- package/components/TimelineSlider/index.js +64 -66
- package/components/TimelineSliderV2/ClusterBadge.js +25 -29
- package/components/TimelineSliderV2/TimelineDot.js +31 -35
- package/components/TimelineSliderV2/TimelineRail.js +8 -11
- package/components/TimelineSliderV2/index.js +121 -103
- package/components/TimelineSliderV2/layout.js +124 -147
- package/components/TimelineSliderV2/types.js +0 -1
- package/components/Tooltip/Tooltip.js +47 -56
- package/components/ViewPhotosDialog/index.js +28 -35
- package/components/VirtualWalkthrough/Annotation.js +163 -207
- package/components/VirtualWalkthrough/AnnotationEditPane.js +198 -184
- package/components/VirtualWalkthrough/AnnotationPanel.js +187 -199
- package/components/VirtualWalkthrough/Application.js +31 -34
- package/components/VirtualWalkthrough/AutoRotator.js +85 -223
- package/components/VirtualWalkthrough/BlockingSpinner.js +26 -28
- package/components/VirtualWalkthrough/BoundaryRing.js +30 -34
- package/components/VirtualWalkthrough/BoundaryWall.js +32 -36
- package/components/VirtualWalkthrough/CameraInfo.js +100 -89
- package/components/VirtualWalkthrough/ControlsInfoPane.js +254 -195
- package/components/VirtualWalkthrough/GradientSky.js +72 -73
- package/components/VirtualWalkthrough/SplatControls.js +209 -221
- package/components/VirtualWalkthrough/SplatCrop.js +21 -20
- package/components/VirtualWalkthrough/SplatFadeCrop.js +21 -20
- package/components/VirtualWalkthrough/SplatModel.js +65 -85
- package/components/VirtualWalkthrough/SplatRevealRain.js +41 -46
- package/components/VirtualWalkthrough/TfAnnotationManager.js +197 -379
- package/components/VirtualWalkthrough/TfXrNavigation.js +73 -162
- package/components/VirtualWalkthrough/VirtualWalkthroughViewer.js +438 -431
- package/components/VirtualWalkthrough/VrAnnotationPanel.js +18 -22
- package/components/VirtualWalkthrough/XrAnnotationInteraction.js +14 -17
- package/components/VirtualWalkthrough/XrExitButton.js +14 -17
- package/components/VirtualWalkthrough/XrGazeDwell.js +14 -17
- package/components/VirtualWalkthrough/XrPointerRay.js +14 -17
- package/components/VirtualWalkthrough/XrStartPose.js +67 -121
- package/components/VirtualWalkthrough/boundary-ring.js +87 -117
- package/components/VirtualWalkthrough/boundary-wall.js +175 -258
- package/components/VirtualWalkthrough/camera-adoption.js +18 -64
- package/components/VirtualWalkthrough/groundPlane.js +32 -47
- package/components/VirtualWalkthrough/gsplat-fade-crop-effect.js +35 -35
- package/components/VirtualWalkthrough/splatFormat.js +13 -47
- package/components/VirtualWalkthrough/useAdoptedCamera.js +23 -44
- package/components/VirtualWalkthrough/useRestartOnVr.js +26 -37
- package/components/VirtualWalkthrough/useXrRenderTuning.js +33 -54
- package/components/VirtualWalkthrough/vr-annotation-panel-layout.js +67 -99
- package/components/VirtualWalkthrough/vr-annotation-panel.js +403 -433
- package/components/VirtualWalkthrough/vr-annotation-scroll.js +10 -28
- package/components/VirtualWalkthrough/walkthrough-camera.js +204 -329
- package/components/VirtualWalkthrough/xr-annotation-candidate-buffer.js +39 -80
- package/components/VirtualWalkthrough/xr-annotation-candidates.js +6 -18
- package/components/VirtualWalkthrough/xr-annotation-interaction.js +31 -56
- package/components/VirtualWalkthrough/xr-annotation-targeting.js +22 -38
- package/components/VirtualWalkthrough/xr-button-arming.js +7 -17
- package/components/VirtualWalkthrough/xr-button-hold.js +22 -36
- package/components/VirtualWalkthrough/xr-exit-button-mask.js +22 -36
- package/components/VirtualWalkthrough/xr-exit-button.js +148 -207
- package/components/VirtualWalkthrough/xr-face-buttons.js +19 -29
- package/components/VirtualWalkthrough/xr-gaze-dwell-state.js +23 -34
- package/components/VirtualWalkthrough/xr-gaze-dwell.js +107 -144
- package/components/VirtualWalkthrough/xr-interactive-ui.js +12 -24
- package/components/VirtualWalkthrough/xr-pointer-ray.js +13 -20
- package/components/VirtualWalkthrough/xr-progress-pie-material.js +117 -88
- package/components/VirtualWalkthrough/xr-progress-pie.js +1 -10
- package/components/VirtualWalkthrough/xr-ray-quad.js +16 -30
- package/components/VirtualWalkthrough/xr-render-tuning.js +17 -48
- package/components/VirtualWalkthrough/xr-scene-bounds.js +21 -37
- package/components/VirtualWalkthrough/xr-start-pose.js +27 -73
- package/components/VirtualWalkthrough/xr-teleport-gesture.js +16 -42
- package/components/svg/BlobbyGrayIconImage.js +41 -39
- package/components/svg/BlobbyGrayIconImport.js +41 -39
- package/components/svg/BlobbyGrayIconUploadToTheCloud.js +41 -39
- package/components/svg/BlobbyIconCloudChecked.js +202 -164
- package/components/svg/BlobbyIconExportOrUploadPhoto.js +202 -164
- package/components/svg/BlobbyIconFolder.js +202 -164
- package/components/svg/BlobbyIconGraphReport.js +202 -164
- package/components/svg/BlobbyIconHappy.js +202 -164
- package/components/svg/BlobbyIconHeartMonitor.js +202 -164
- package/components/svg/BlobbyIconLeaf.js +202 -164
- package/components/svg/BlobbyIconLibrary.js +202 -164
- package/components/svg/BlobbyIconNursery.js +204 -166
- package/components/svg/BlobbyIconOrganization.js +202 -164
- package/components/svg/BlobbyIconParchment.js +202 -164
- package/components/svg/BlobbyIconPeople.js +202 -164
- package/components/svg/BlobbyIconSeedBank.js +202 -164
- package/components/svg/BlobbyIconSeedling.js +202 -164
- package/components/svg/BlobbyIconSeeds.js +202 -164
- package/components/svg/BlobbyIconSite.js +206 -167
- package/components/svg/BlobbyIconSparkles.js +202 -164
- package/components/svg/BlobbyIconWrench.js +202 -164
- package/components/svg/Bug.js +19 -21
- package/components/svg/Calendar.js +19 -21
- package/components/svg/CaretDown.js +19 -21
- package/components/svg/CaretLeft.js +19 -21
- package/components/svg/CaretRight.js +19 -21
- package/components/svg/CaretUp.js +19 -21
- package/components/svg/ChevronDown.js +19 -21
- package/components/svg/ChevronUp.js +19 -21
- package/components/svg/Close.js +19 -21
- package/components/svg/Critical.js +19 -21
- package/components/svg/Edit.js +202 -164
- package/components/svg/Error.js +19 -21
- package/components/svg/Filter.js +19 -21
- package/components/svg/Folder.js +19 -21
- package/components/svg/Help.js +19 -21
- package/components/svg/Home.js +19 -21
- package/components/svg/IconAdd.js +19 -21
- package/components/svg/IconArrowRight.js +21 -23
- package/components/svg/IconBusinessNetwork.js +19 -21
- package/components/svg/IconCalendar.js +19 -21
- package/components/svg/IconCancel.js +19 -21
- package/components/svg/IconChargingBattery.js +19 -21
- package/components/svg/IconChecklist.js +21 -23
- package/components/svg/IconCheckmark.js +19 -21
- package/components/svg/IconCoinInHand.js +19 -21
- package/components/svg/IconColumns.js +19 -21
- package/components/svg/IconComment.js +20 -22
- package/components/svg/IconDashboard.js +19 -21
- package/components/svg/IconDataMigration.js +19 -21
- package/components/svg/IconDocument.js +21 -23
- package/components/svg/IconDownloadFromTheCloud.js +21 -23
- package/components/svg/IconEdit.js +21 -23
- package/components/svg/IconExpand.js +21 -23
- package/components/svg/IconExport.js +19 -21
- package/components/svg/IconExternalLink.js +19 -21
- package/components/svg/IconEye.js +19 -21
- package/components/svg/IconEyeOff.js +19 -21
- package/components/svg/IconFile.js +19 -21
- package/components/svg/IconFolder.js +19 -21
- package/components/svg/IconFullScreen.js +20 -22
- package/components/svg/IconFutures.js +19 -21
- package/components/svg/IconGraphReport.js +19 -21
- package/components/svg/IconGrid.js +19 -21
- package/components/svg/IconHeartMonitor.js +19 -21
- package/components/svg/IconHelp.js +21 -23
- package/components/svg/IconHistory.js +19 -21
- package/components/svg/IconImport.js +19 -21
- package/components/svg/IconIndex.js +19 -21
- package/components/svg/IconLayers.js +19 -21
- package/components/svg/IconLibrary.js +20 -22
- package/components/svg/IconList.js +19 -21
- package/components/svg/IconLivePlant.js +19 -21
- package/components/svg/IconLocations.js +19 -21
- package/components/svg/IconMail.js +19 -21
- package/components/svg/IconManager.js +19 -21
- package/components/svg/IconMap.js +19 -21
- package/components/svg/IconMarker.js +19 -21
- package/components/svg/IconMenu.js +19 -21
- package/components/svg/IconMenuHorizontal.js +19 -21
- package/components/svg/IconModule.js +19 -21
- package/components/svg/IconMyLocation.js +19 -21
- package/components/svg/IconNote.js +21 -23
- package/components/svg/IconNursery.js +21 -23
- package/components/svg/IconOrg.js +19 -21
- package/components/svg/IconParchment.js +19 -21
- package/components/svg/IconPhoto.js +19 -21
- package/components/svg/IconPlantsFilled.js +19 -21
- package/components/svg/IconRedo.js +19 -21
- package/components/svg/IconRestorationSite.js +19 -21
- package/components/svg/IconSeedBank.js +19 -21
- package/components/svg/IconSeedling.js +19 -21
- package/components/svg/IconSettings.js +19 -21
- package/components/svg/IconSlice.js +19 -21
- package/components/svg/IconSubmit.js +19 -21
- package/components/svg/IconSubtract.js +21 -23
- package/components/svg/IconSynced.js +19 -21
- package/components/svg/IconTrashCan.js +19 -21
- package/components/svg/IconTreasureMap.js +19 -21
- package/components/svg/IconUnavailable.js +19 -21
- package/components/svg/IconUndo.js +19 -21
- package/components/svg/IconVariable.js +19 -21
- package/components/svg/IconVideo.js +30 -31
- package/components/svg/IconWifi.js +19 -21
- package/components/svg/Info.js +19 -21
- package/components/svg/Key.js +19 -21
- package/components/svg/Leaf.js +19 -21
- package/components/svg/Lock.js +19 -21
- package/components/svg/Logo.js +48 -43
- package/components/svg/MenuVertical.js +19 -21
- package/components/svg/Notification.js +19 -21
- package/components/svg/Person.js +19 -21
- package/components/svg/Plus.js +19 -21
- package/components/svg/RestorationSite.js +19 -21
- package/components/svg/Search.js +19 -21
- package/components/svg/Seeds.js +19 -21
- package/components/svg/Site.js +19 -21
- package/components/svg/Sparkles.js +19 -21
- package/components/svg/Species.js +19 -21
- package/components/svg/Species2.js +202 -164
- package/components/svg/Spinner.js +54 -48
- package/components/svg/Star.js +19 -21
- package/components/svg/Success.js +19 -21
- package/components/svg/SuccessFilled.js +19 -21
- package/components/svg/TerrawareLogoDesktop.js +55 -49
- package/components/svg/TerrawareLogoMobile.js +25 -26
- package/components/svg/Touchscreen.js +19 -21
- package/components/svg/UploadCloud.js +202 -164
- package/components/svg/Warning.js +19 -21
- package/components/svg/WelcomeClipboard.js +156 -133
- package/components/svg/index.js +129 -129
- package/components/table/EnhancedTableToolbar.js +68 -74
- package/components/table/EnhancedTableToolbarV2.js +31 -41
- package/components/table/TableCellRenderer.js +196 -231
- package/components/table/TableHeader.js +71 -73
- package/components/table/TableHeaderItem.js +97 -102
- package/components/table/density.js +18 -19
- package/components/table/index.js +350 -369
- package/components/table/sort.js +27 -52
- package/components/table/types.js +0 -1
- package/components/types/index.js +0 -1
- package/hooks/cameraEntityContext.js +2 -13
- package/hooks/useBoolean.js +17 -13
- package/hooks/useCameraPosition.js +56 -56
- package/hooks/useDevicePerformance.js +17 -17
- package/hooks/useXr.js +85 -87
- package/index.js +58 -58
- package/package.json +1 -1
- package/setupTests.js +0 -4
- package/strings/export.js +111 -170
- package/strings/index.js +25 -54
- package/strings/locales.js +21 -41
- package/strings/strings-en.js +49 -51
- package/strings/strings-es.js +49 -51
- package/strings/strings-fr.js +49 -51
- package/strings/strings-gx.js +49 -51
- package/style-dictionary-dist/TerrawareTheme.js +186 -186
- package/theme.js +74 -76
- package/utils/color.js +8 -15
- package/utils/date.js +42 -108
- package/utils/index.js +4 -4
- package/utils/preventDefaultEvent.js +3 -3
- package/utils/text.js +11 -11
- package/utils/useDeviceInfo.js +42 -79
- package/virtualWalkthrough.js +23 -23
package/components/table/sort.js
CHANGED
|
@@ -1,64 +1,39 @@
|
|
|
1
1
|
function descendingComparator(a, b, orderBy, order) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// if non-numeric, compare using the javascript built-in compare for this type
|
|
13
|
-
const bValue = b[orderBy] ?? '';
|
|
14
|
-
const aValue = a[orderBy] ?? '';
|
|
15
|
-
|
|
16
|
-
// blank values at the end always (any order)
|
|
17
|
-
if (isEmptyValue(aValue.toString()) && isEmptyValue(bValue.toString())) {
|
|
2
|
+
const numCompare = descendingNumComparator(a, b, orderBy);
|
|
3
|
+
if (null !== numCompare) if (0 === numCompare) return numCompare;
|
|
4
|
+
else return 'desc' === order ? -1 * numCompare : numCompare;
|
|
5
|
+
const bValue = b[orderBy] ?? '';
|
|
6
|
+
const aValue = a[orderBy] ?? '';
|
|
7
|
+
if (isEmptyValue(aValue.toString()) && isEmptyValue(bValue.toString())) return 0;
|
|
8
|
+
if (isEmptyValue(aValue.toString())) return 1;
|
|
9
|
+
if (isEmptyValue(bValue.toString())) return -1;
|
|
10
|
+
if (bValue < aValue) return 'desc' === order ? -1 : 1;
|
|
11
|
+
if (bValue > aValue) return 'desc' === order ? 1 : -1;
|
|
18
12
|
return 0;
|
|
19
|
-
}
|
|
20
|
-
if (isEmptyValue(aValue.toString())) {
|
|
21
|
-
return 1;
|
|
22
|
-
}
|
|
23
|
-
if (isEmptyValue(bValue.toString())) {
|
|
24
|
-
return -1;
|
|
25
|
-
}
|
|
26
|
-
if (bValue < aValue) {
|
|
27
|
-
return order === 'desc' ? -1 : 1;
|
|
28
|
-
}
|
|
29
|
-
if (bValue > aValue) {
|
|
30
|
-
return order === 'desc' ? 1 : -1;
|
|
31
|
-
}
|
|
32
|
-
return 0;
|
|
33
13
|
}
|
|
34
14
|
function isEmptyValue(value) {
|
|
35
|
-
|
|
36
|
-
return
|
|
37
|
-
} else {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
15
|
+
if ('' === value || null === value || value?.toString().trim() === '' || void 0 === value) return true;
|
|
16
|
+
else return false;
|
|
40
17
|
}
|
|
41
18
|
function descendingNumComparator(a, b, orderBy) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
19
|
+
const aNumValue = Number(a[orderBy] ?? '0.0');
|
|
20
|
+
const bNumValue = Number(b[orderBy] ?? '0.0');
|
|
21
|
+
if (!isNaN(aNumValue) && !isNaN(bNumValue)) return bNumValue - aNumValue;
|
|
22
|
+
return null;
|
|
48
23
|
}
|
|
49
24
|
function getComparator(order, orderBy, sorting) {
|
|
50
|
-
|
|
25
|
+
return (a, b)=>sorting(a, b, orderBy, order);
|
|
51
26
|
}
|
|
52
27
|
function stableSort(array, comparator) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
28
|
+
const stabilizedThis = array.map((el, index)=>[
|
|
29
|
+
el,
|
|
30
|
+
index
|
|
31
|
+
]);
|
|
32
|
+
stabilizedThis.sort((a, b)=>{
|
|
33
|
+
const order = comparator(a[0], b[0]);
|
|
34
|
+
if (0 !== order) return order;
|
|
35
|
+
return a[1] - b[1];
|
|
36
|
+
});
|
|
37
|
+
return stabilizedThis.map((el)=>el[0]);
|
|
62
38
|
}
|
|
63
|
-
|
|
64
39
|
export { descendingComparator, getComparator, stableSort };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
import { createContext } from
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The camera entity the walkthrough owns, published by `VirtualWalkthroughViewer` for the hooks
|
|
5
|
-
* beneath it.
|
|
6
|
-
*
|
|
7
|
-
* Looking the camera up by name is not safe once the viewer shares a scene graph with a host that
|
|
8
|
-
* has entities of its own: `findByName('camera')` walks the whole graph and returns whichever
|
|
9
|
-
* entity was added first, so a host that names its own camera entity `camera` shadows the viewer's.
|
|
10
|
-
* Null outside a viewer, where the name lookup is still the only thing to go on.
|
|
11
|
-
*/
|
|
12
|
-
const CameraEntityContext = /*#__PURE__*/createContext(null);
|
|
13
|
-
|
|
1
|
+
import { createContext } from "react";
|
|
2
|
+
const CameraEntityContext = createContext(null);
|
|
14
3
|
export { CameraEntityContext };
|
package/hooks/useBoolean.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
|
+
const useBoolean = (initialValue)=>{
|
|
3
|
+
const [value, setValue] = useState(initialValue);
|
|
4
|
+
const setTrue = useCallback(()=>{
|
|
5
|
+
setValue(true);
|
|
6
|
+
}, []);
|
|
7
|
+
const setFalse = useCallback(()=>{
|
|
8
|
+
setValue(false);
|
|
9
|
+
}, []);
|
|
10
|
+
return [
|
|
11
|
+
value,
|
|
12
|
+
setValue,
|
|
13
|
+
setTrue,
|
|
14
|
+
setFalse
|
|
15
|
+
];
|
|
12
16
|
};
|
|
13
|
-
|
|
14
|
-
export
|
|
17
|
+
const hooks_useBoolean = useBoolean;
|
|
18
|
+
export default hooks_useBoolean;
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useApp } from
|
|
3
|
-
import { Vec3 } from
|
|
4
|
-
import { CameraEntityContext } from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
1
|
+
import { useCallback, useContext, useMemo } from "react";
|
|
2
|
+
import { useApp } from "@playcanvas/react/hooks";
|
|
3
|
+
import { Vec3 } from "playcanvas";
|
|
4
|
+
import { CameraEntityContext } from "./cameraEntityContext.js";
|
|
5
|
+
const scriptsOn = (node)=>node?.script;
|
|
6
|
+
const useCameraPosition = (cameraEntity)=>{
|
|
7
|
+
const app = useApp();
|
|
8
|
+
const contextCamera = useContext(CameraEntityContext);
|
|
9
|
+
const resolvedCamera = cameraEntity ?? contextCamera;
|
|
10
|
+
const findCamera = useCallback(()=>resolvedCamera ?? app.root.findByName('camera'), [
|
|
11
|
+
app,
|
|
12
|
+
resolvedCamera
|
|
13
|
+
]);
|
|
14
|
+
const findControls = useCallback((camera)=>{
|
|
15
|
+
const own = scriptsOn(camera);
|
|
16
|
+
return own?.cameraControls ?? own?.walkthroughCamera ?? scriptsOn(camera?.parent)?.walkthroughCamera;
|
|
17
|
+
}, []);
|
|
18
|
+
const setCamera = useCallback((focus, position, horizontalNdcBias = 0)=>{
|
|
19
|
+
const camera = findCamera();
|
|
20
|
+
const controls = findControls(camera);
|
|
21
|
+
if (controls && camera) controls.reset(new Vec3(focus), position ? new Vec3(position) : camera.getPosition(), horizontalNdcBias);
|
|
22
|
+
}, [
|
|
23
|
+
findCamera,
|
|
24
|
+
findControls
|
|
25
|
+
]);
|
|
26
|
+
const getCameraState = useCallback(()=>{
|
|
27
|
+
const camera = findCamera();
|
|
28
|
+
const controls = findControls(camera);
|
|
29
|
+
if (camera && controls) {
|
|
30
|
+
const position = camera.getPosition();
|
|
31
|
+
const focusPoint = controls?.focusPoint;
|
|
32
|
+
return {
|
|
33
|
+
position: [
|
|
34
|
+
position.x,
|
|
35
|
+
position.y,
|
|
36
|
+
position.z
|
|
37
|
+
],
|
|
38
|
+
focus: [
|
|
39
|
+
focusPoint.x,
|
|
40
|
+
focusPoint.y,
|
|
41
|
+
focusPoint.z
|
|
42
|
+
]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}, [
|
|
47
|
+
findCamera,
|
|
48
|
+
findControls
|
|
49
|
+
]);
|
|
50
|
+
return useMemo(()=>({
|
|
51
|
+
setCamera,
|
|
52
|
+
getCameraState
|
|
53
|
+
}), [
|
|
54
|
+
setCamera,
|
|
55
|
+
getCameraState
|
|
56
|
+
]);
|
|
56
57
|
};
|
|
57
|
-
|
|
58
58
|
export { useCameraPosition };
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { useMemo } from
|
|
2
|
-
import useDeviceInfo from
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import useDeviceInfo from "../utils/useDeviceInfo.js";
|
|
3
|
+
const useDevicePerformance = ()=>{
|
|
4
|
+
const { isMobile } = useDeviceInfo();
|
|
5
|
+
const cpuCores = useMemo(()=>navigator.hardwareConcurrency || 4, []);
|
|
6
|
+
const deviceMemory = useMemo(()=>navigator.deviceMemory, []);
|
|
7
|
+
const isHighPerformance = useMemo(()=>!isMobile && cpuCores >= 4 || void 0 !== deviceMemory && deviceMemory >= 8 || cpuCores >= 6, [
|
|
8
|
+
cpuCores,
|
|
9
|
+
deviceMemory,
|
|
10
|
+
isMobile
|
|
11
|
+
]);
|
|
12
|
+
return {
|
|
13
|
+
isHighPerformance,
|
|
14
|
+
cpuCores,
|
|
15
|
+
deviceMemory,
|
|
16
|
+
isMobile
|
|
17
|
+
};
|
|
17
18
|
};
|
|
18
|
-
|
|
19
19
|
export { useDevicePerformance };
|
package/hooks/useXr.js
CHANGED
|
@@ -1,92 +1,90 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useApp } from
|
|
3
|
-
import { XRTYPE_AR, XRTYPE_VR
|
|
4
|
-
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { useApp } from "@playcanvas/react/hooks";
|
|
3
|
+
import { XRSPACE_LOCALFLOOR, XRTYPE_AR, XRTYPE_VR } from "playcanvas";
|
|
5
4
|
const XR_TYPES = {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
VR: XRTYPE_VR,
|
|
6
|
+
AR: XRTYPE_AR
|
|
8
7
|
};
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Factor PlayCanvas applies on top of the device pixel ratio to compute the headset's
|
|
12
|
-
* framebuffer resolution: `app.graphicsDevice.maxPixelRatio / window.devicePixelRatio *
|
|
13
|
-
* XR_FRAMEBUFFER_SCALE_FACTOR`. Splat rendering in stereo is fill-rate bound, so this (and
|
|
14
|
-
* `maxPixelRatio`, which also multiplies XR resolution) is the largest lever on XR framerate.
|
|
15
|
-
* Read once when the session starts and fixed for its lifetime.
|
|
16
|
-
*/
|
|
17
8
|
const XR_FRAMEBUFFER_SCALE_FACTOR = 1;
|
|
18
|
-
const useXr = ({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// effect isn't told VR is unsupported while the effect below is still waiting to run.
|
|
24
|
-
const [available, setAvailable] = useState(() => ({
|
|
25
|
-
VR: app.xr?.isAvailable(XRTYPE_VR) ?? false,
|
|
26
|
-
AR: app.xr?.isAvailable(XRTYPE_AR) ?? false
|
|
27
|
-
}));
|
|
28
|
-
// `type` is set as soon as a session is requested, so gate on `active` to ignore pending sessions.
|
|
29
|
-
const [currentXrType, setCurrentXrType] = useState(app.xr?.active ? app.xr.type : null);
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
// We subscribe to the manager directly because `app` doesn't update when XR's availability changes.
|
|
32
|
-
const handleAvailable = (type, isAvailable) => {
|
|
33
|
-
if (type === XRTYPE_VR) {
|
|
34
|
-
setAvailable(prev => ({
|
|
35
|
-
...prev,
|
|
36
|
-
VR: isAvailable
|
|
9
|
+
const useXr = ({ onError } = {})=>{
|
|
10
|
+
const app = useApp();
|
|
11
|
+
const [available, setAvailable] = useState(()=>({
|
|
12
|
+
VR: app.xr?.isAvailable(XRTYPE_VR) ?? false,
|
|
13
|
+
AR: app.xr?.isAvailable(XRTYPE_AR) ?? false
|
|
37
14
|
}));
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
15
|
+
const [currentXrType, setCurrentXrType] = useState(app.xr?.active ? app.xr.type : null);
|
|
16
|
+
useEffect(()=>{
|
|
17
|
+
const handleAvailable = (type, isAvailable)=>{
|
|
18
|
+
if (type === XRTYPE_VR) setAvailable((prev)=>({
|
|
19
|
+
...prev,
|
|
20
|
+
VR: isAvailable
|
|
21
|
+
}));
|
|
22
|
+
else if (type === XRTYPE_AR) setAvailable((prev)=>({
|
|
23
|
+
...prev,
|
|
24
|
+
AR: isAvailable
|
|
25
|
+
}));
|
|
26
|
+
};
|
|
27
|
+
setAvailable({
|
|
28
|
+
VR: app.xr?.isAvailable(XRTYPE_VR) ?? false,
|
|
29
|
+
AR: app.xr?.isAvailable(XRTYPE_AR) ?? false
|
|
30
|
+
});
|
|
31
|
+
app.xr?.on('available', handleAvailable);
|
|
32
|
+
return ()=>{
|
|
33
|
+
app.xr?.off('available', handleAvailable);
|
|
34
|
+
};
|
|
35
|
+
}, [
|
|
36
|
+
app
|
|
37
|
+
]);
|
|
38
|
+
useEffect(()=>{
|
|
39
|
+
const handleStart = ()=>setCurrentXrType(app.xr?.type ?? null);
|
|
40
|
+
const handleEnd = ()=>setCurrentXrType(null);
|
|
41
|
+
setCurrentXrType(app.xr?.active ? app.xr.type : null);
|
|
42
|
+
app.xr?.on('start', handleStart);
|
|
43
|
+
app.xr?.on('end', handleEnd);
|
|
44
|
+
return ()=>{
|
|
45
|
+
app.xr?.off('start', handleStart);
|
|
46
|
+
app.xr?.off('end', handleEnd);
|
|
47
|
+
};
|
|
48
|
+
}, [
|
|
49
|
+
app
|
|
50
|
+
]);
|
|
51
|
+
const isXrAvailable = useCallback((type)=>available[type], [
|
|
52
|
+
available
|
|
53
|
+
]);
|
|
54
|
+
const startXr = useCallback((type)=>{
|
|
55
|
+
const camera = app.root.findComponent('camera');
|
|
56
|
+
app.xr?.start(camera, XR_TYPES[type], XRSPACE_LOCALFLOOR, {
|
|
57
|
+
framebufferScaleFactor: XR_FRAMEBUFFER_SCALE_FACTOR,
|
|
58
|
+
callback: (err)=>{
|
|
59
|
+
if (err) {
|
|
60
|
+
onError?.(err);
|
|
61
|
+
app.xr?.end();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}, [
|
|
66
|
+
app,
|
|
67
|
+
onError
|
|
68
|
+
]);
|
|
69
|
+
const endXr = useCallback(()=>{
|
|
70
|
+
app.xr?.end();
|
|
71
|
+
}, [
|
|
72
|
+
app
|
|
73
|
+
]);
|
|
74
|
+
return useMemo(()=>({
|
|
75
|
+
isXrAvailable,
|
|
76
|
+
startXr,
|
|
77
|
+
endXr,
|
|
78
|
+
isCurrentlyInXr: null !== currentXrType,
|
|
79
|
+
isCurrentlyInAr: currentXrType === XRTYPE_AR,
|
|
80
|
+
isCurrentlyInVr: currentXrType === XRTYPE_VR
|
|
81
|
+
}), [
|
|
82
|
+
isXrAvailable,
|
|
83
|
+
startXr,
|
|
84
|
+
endXr,
|
|
85
|
+
currentXrType
|
|
86
|
+
]);
|
|
90
87
|
};
|
|
91
|
-
|
|
92
|
-
export
|
|
88
|
+
const hooks_useXr = useXr;
|
|
89
|
+
export default hooks_useXr;
|
|
90
|
+
export { useXr };
|
package/index.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
export { default as
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as
|
|
6
|
-
export { default as
|
|
7
|
-
export { default as
|
|
8
|
-
export { default as
|
|
9
|
-
export { default as
|
|
10
|
-
export { default as
|
|
11
|
-
export { default as
|
|
12
|
-
export { default as
|
|
13
|
-
export { default as
|
|
14
|
-
export { default as
|
|
15
|
-
export { default as
|
|
16
|
-
export { default as
|
|
17
|
-
export { default as
|
|
18
|
-
export { default as
|
|
19
|
-
export { default as
|
|
20
|
-
export { default as
|
|
21
|
-
export { default as
|
|
22
|
-
export { default as
|
|
23
|
-
export { default as
|
|
24
|
-
export { default as
|
|
25
|
-
export { default as
|
|
26
|
-
export { default as
|
|
27
|
-
export { default as
|
|
28
|
-
export { default as
|
|
29
|
-
export { default as
|
|
30
|
-
export { default as
|
|
31
|
-
export { default as
|
|
32
|
-
export { default as
|
|
33
|
-
export { default as
|
|
34
|
-
export { default as
|
|
35
|
-
export { default as
|
|
36
|
-
export { default as
|
|
37
|
-
export { default as
|
|
38
|
-
export { default as
|
|
39
|
-
export { default as
|
|
40
|
-
export { default as
|
|
41
|
-
export { default as
|
|
42
|
-
export { default as
|
|
43
|
-
export { default as
|
|
44
|
-
export { default as
|
|
45
|
-
export { default as
|
|
46
|
-
export { default as
|
|
47
|
-
export { default as
|
|
48
|
-
export { default as
|
|
49
|
-
export { default as
|
|
50
|
-
export { default as
|
|
51
|
-
|
|
52
|
-
export {
|
|
53
|
-
export { default as
|
|
54
|
-
export {
|
|
55
|
-
export {
|
|
56
|
-
export {
|
|
57
|
-
export {
|
|
58
|
-
export {
|
|
1
|
+
import * as __rspack_external__components_svg_index_js_524d890d from "./components/svg/index.js";
|
|
2
|
+
export { default as AntSwitch } from "./components/AntSwitch/index.js";
|
|
3
|
+
export { default as Autocomplete } from "./components/Autocomplete/Autocomplete.js";
|
|
4
|
+
export { default as Badge } from "./components/Badge/index.js";
|
|
5
|
+
export { default as BusySpinner } from "./components/BusySpinner/index.js";
|
|
6
|
+
export { default as Button } from "./components/Button/Button.js";
|
|
7
|
+
export { default as Checkbox } from "./components/Checkbox.js";
|
|
8
|
+
export { default as Confirm } from "./components/Confirm/index.js";
|
|
9
|
+
export { default as DatePicker } from "./components/DatePicker/DatePicker.js";
|
|
10
|
+
export { default as DialogBox } from "./components/DialogBox/DialogBox.js";
|
|
11
|
+
export { default as Divisor } from "./components/Divisor.js";
|
|
12
|
+
export { DropdownV1, default as Dropdown } from "./components/Dropdown.js";
|
|
13
|
+
export { default as EditableTable } from "./components/EditableTable/index.js";
|
|
14
|
+
export { default as ErrorBox } from "./components/ErrorBox/ErrorBox.js";
|
|
15
|
+
export { default as FileChooser } from "./components/FileChooser/index.js";
|
|
16
|
+
export { default as FormBottomBar } from "./components/FormBottomBar/index.js";
|
|
17
|
+
export { default as Icon } from "./components/Icon/Icon.js";
|
|
18
|
+
export { default as icons } from "./components/Icon/icons/index.js";
|
|
19
|
+
export { default as IconTooltip } from "./components/IconTooltip/index.js";
|
|
20
|
+
export { default as MapComponent } from "./components/Map/index.js";
|
|
21
|
+
export { default as Message } from "./components/Message/Message.js";
|
|
22
|
+
export { default as MultiSelect } from "./components/MultiSelect/index.js";
|
|
23
|
+
export { default as NavFooter } from "./components/Navbar/NavFooter.js";
|
|
24
|
+
export { default as NavItem } from "./components/Navbar/NavItem.js";
|
|
25
|
+
export { default as NavSection } from "./components/Navbar/NavSection.js";
|
|
26
|
+
export { default as Navbar } from "./components/Navbar/Navbar.js";
|
|
27
|
+
export { default as Note } from "./components/Note.js";
|
|
28
|
+
export { default as OverlayModal } from "./components/OverlayModal/OverlayModal.js";
|
|
29
|
+
export { default as PageForm } from "./components/PageForm/index.js";
|
|
30
|
+
export { default as PhotoChooser } from "./components/PhotoChooser/index.js";
|
|
31
|
+
export { default as PhotosCarousel } from "./components/PhotosCarousel/index.js";
|
|
32
|
+
export { default as Pill } from "./components/Pill/index.js";
|
|
33
|
+
export { default as PillList } from "./components/PillList/index.js";
|
|
34
|
+
export { default as PlacementWrapper } from "./components/PlacementWrapper/index.js";
|
|
35
|
+
export { default as PopoverMenu } from "./components/PopoverMenu/index.js";
|
|
36
|
+
export { default as Popover } from "./components/PopoverMenu/Popover.js";
|
|
37
|
+
export { default as PopoverMultiSelect } from "./components/PopoverMultiSelect/index.js";
|
|
38
|
+
export { default as ProgressCircle } from "./components/ProgressCircle/ProgressCircle.js";
|
|
39
|
+
export { default as RadioButton } from "./components/RadioButton.js";
|
|
40
|
+
export { default as Select } from "./components/Select/Select.js";
|
|
41
|
+
export { default as SelectT } from "./components/Select/SelectT.js";
|
|
42
|
+
export { default as Separator } from "./components/Separator/index.js";
|
|
43
|
+
export { default as Slider } from "./components/Slider/index.js";
|
|
44
|
+
export { default as SummaryBox } from "./components/SummaryBox.js";
|
|
45
|
+
export { default as Tabs } from "./components/Tabs/index.js";
|
|
46
|
+
export { default as TextTruncated } from "./components/TextTruncated/index.js";
|
|
47
|
+
export { default as Textfield } from "./components/Textfield/Textfield.js";
|
|
48
|
+
export { default as TimelineSlider } from "./components/TimelineSlider/index.js";
|
|
49
|
+
export { default as TimelineSliderV2 } from "./components/TimelineSliderV2/index.js";
|
|
50
|
+
export { default as Tooltip } from "./components/Tooltip/Tooltip.js";
|
|
51
|
+
export { default as ViewPhotosDialog } from "./components/ViewPhotosDialog/index.js";
|
|
52
|
+
export { default as Table } from "./components/table/index.js";
|
|
53
|
+
export { CellDateRenderer, default as CellRenderer } from "./components/table/TableCellRenderer.js";
|
|
54
|
+
export { descendingComparator, getComparator, stableSort } from "./components/table/sort.js";
|
|
55
|
+
export { getLocale, getStrings, setLocale, useStrings } from "./strings/index.js";
|
|
56
|
+
export { findLocaleDetails, getSupportedLocales, supportedLocales } from "./strings/locales.js";
|
|
57
|
+
export { default as theme } from "./theme.js";
|
|
58
|
+
export { __rspack_external__components_svg_index_js_524d890d as Svg };
|
package/package.json
CHANGED
package/setupTests.js
CHANGED