@reearth/core 0.0.7-alpha.5 → 0.0.7-beta.1

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 (169) hide show
  1. package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +1 -1
  2. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +8 -8
  3. package/dist/cesium/Widgets/widgets.css +8 -8
  4. package/dist/cesium/Workers/{chunk-SUQM3OSW.js → chunk-2YD5QWGR.js} +2 -2
  5. package/dist/cesium/Workers/{chunk-74N6MC2V.js → chunk-3T4KR75X.js} +2 -2
  6. package/dist/cesium/Workers/chunk-46KFVW24.js +26 -0
  7. package/dist/cesium/Workers/chunk-4EI6PP43.js +28 -0
  8. package/dist/cesium/Workers/{chunk-YEJWCH6C.js → chunk-4RS52VIY.js} +2 -2
  9. package/dist/cesium/Workers/{chunk-NPBZI5YA.js → chunk-4YLYA3DC.js} +1 -1
  10. package/dist/cesium/Workers/{chunk-JEWHFDAA.js → chunk-5ENAGXBI.js} +2 -2
  11. package/dist/cesium/Workers/{chunk-MRR3RGFO.js → chunk-5VIB3TI5.js} +2 -2
  12. package/dist/cesium/Workers/{chunk-JCJ24DHF.js → chunk-6NGZLDFZ.js} +2 -2
  13. package/dist/cesium/Workers/{chunk-7X2YQ6I4.js → chunk-6RGNWVZ2.js} +2 -2
  14. package/dist/cesium/Workers/{chunk-BK3HCS7I.js → chunk-7AZZVJ52.js} +2 -2
  15. package/dist/cesium/Workers/{chunk-UBIRX2SP.js → chunk-AMXAQQEL.js} +2 -2
  16. package/dist/cesium/Workers/{chunk-LDCAXLGS.js → chunk-AQW44ZPC.js} +2 -2
  17. package/dist/cesium/Workers/{chunk-B6TRTFAA.js → chunk-CPCMDW6Z.js} +2 -2
  18. package/dist/cesium/Workers/{chunk-3C74MLG3.js → chunk-DNL2WDRL.js} +1 -1
  19. package/dist/cesium/Workers/{chunk-FK5KFB6H.js → chunk-ERW7V247.js} +1 -1
  20. package/dist/cesium/Workers/{chunk-5AG2MVRM.js → chunk-EYRIA4TP.js} +2 -2
  21. package/dist/cesium/Workers/{chunk-6AUUBDOF.js → chunk-F7RQIJML.js} +2 -2
  22. package/dist/cesium/Workers/{chunk-JZLZJJQD.js → chunk-FPZMU6QP.js} +2 -2
  23. package/dist/cesium/Workers/{chunk-YBI55DLZ.js → chunk-FZDVQW7A.js} +2 -2
  24. package/dist/cesium/Workers/{chunk-2MBPFWCP.js → chunk-GAZ2U4FO.js} +2 -2
  25. package/dist/cesium/Workers/{chunk-CSISXEG7.js → chunk-I44IOOT4.js} +1 -1
  26. package/dist/cesium/Workers/{chunk-R2AN7EKC.js → chunk-IALXUAD4.js} +1 -1
  27. package/dist/cesium/Workers/{chunk-MDLPQIMP.js → chunk-IXBUEUZL.js} +2 -2
  28. package/dist/cesium/Workers/{chunk-HPBHKP5S.js → chunk-J3GCYV5K.js} +2 -2
  29. package/dist/cesium/Workers/{chunk-KRZBI2MU.js → chunk-KGSZTFHZ.js} +2 -2
  30. package/dist/cesium/Workers/{chunk-B2SKQ7LU.js → chunk-KKKPU2CI.js} +2 -2
  31. package/dist/cesium/Workers/{chunk-QPOPEH3M.js → chunk-KTEJE5KE.js} +2 -2
  32. package/dist/cesium/Workers/chunk-KYZ3DYY6.js +26 -0
  33. package/dist/cesium/Workers/{chunk-LOPN5R3I.js → chunk-L2QG4MRI.js} +2 -2
  34. package/dist/cesium/Workers/{chunk-EXBFEYPQ.js → chunk-MCE3KFYN.js} +2 -2
  35. package/dist/cesium/Workers/{chunk-C6DMEJQ7.js → chunk-MMLDGXML.js} +2 -2
  36. package/dist/cesium/Workers/{chunk-KTTUANTJ.js → chunk-MTBRPBDQ.js} +2 -2
  37. package/dist/cesium/Workers/{chunk-7VZHIB6P.js → chunk-OKT6VBRK.js} +2 -2
  38. package/dist/cesium/Workers/chunk-PHYDKLSY.js +26 -0
  39. package/dist/cesium/Workers/chunk-PWPX3224.js +26 -0
  40. package/dist/cesium/Workers/{chunk-VQZSIOZW.js → chunk-QHOVE6WG.js} +2 -2
  41. package/dist/cesium/Workers/{chunk-CN7UN2OZ.js → chunk-QJ6MBL22.js} +2 -2
  42. package/dist/cesium/Workers/{chunk-NUSW5B6A.js → chunk-QKO6VIG2.js} +2 -2
  43. package/dist/cesium/Workers/{chunk-4N7SRDH5.js → chunk-QVEE4QL2.js} +2 -2
  44. package/dist/cesium/Workers/{chunk-4T6AS6BZ.js → chunk-RXQOQZ7S.js} +2 -2
  45. package/dist/cesium/Workers/{chunk-RURL6ZX2.js → chunk-S3ZKQKMM.js} +2 -2
  46. package/dist/cesium/Workers/{chunk-ZYWD6OQH.js → chunk-SFEUMZSK.js} +2 -2
  47. package/dist/cesium/Workers/{chunk-BOPB43LN.js → chunk-T75MW4X3.js} +2 -2
  48. package/dist/cesium/Workers/chunk-TVO2A75R.js +66 -0
  49. package/dist/cesium/Workers/{chunk-VHNZBQTR.js → chunk-UHR36K45.js} +2 -2
  50. package/dist/cesium/Workers/{chunk-WZUWQMI7.js → chunk-UKJCDZOR.js} +2 -2
  51. package/dist/cesium/Workers/{chunk-B4TQDFIE.js → chunk-VKVIYER6.js} +2 -2
  52. package/dist/cesium/Workers/{chunk-OUXRUXNB.js → chunk-VPIQWTRZ.js} +2 -2
  53. package/dist/cesium/Workers/{chunk-2ED5WI77.js → chunk-XSX5HRFC.js} +2 -2
  54. package/dist/cesium/Workers/{chunk-5Z6L2FHX.js → chunk-Z5WQQHSL.js} +2 -2
  55. package/dist/cesium/Workers/{chunk-YPDO7SPO.js → chunk-Z7B2VEL5.js} +2 -2
  56. package/dist/cesium/Workers/combineGeometry.js +2 -2
  57. package/dist/cesium/Workers/createBoxGeometry.js +2 -2
  58. package/dist/cesium/Workers/createBoxOutlineGeometry.js +2 -2
  59. package/dist/cesium/Workers/createCircleGeometry.js +2 -2
  60. package/dist/cesium/Workers/createCircleOutlineGeometry.js +2 -2
  61. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +2 -2
  62. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +2 -2
  63. package/dist/cesium/Workers/createCorridorGeometry.js +2 -2
  64. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +2 -2
  65. package/dist/cesium/Workers/createCylinderGeometry.js +2 -2
  66. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +2 -2
  67. package/dist/cesium/Workers/createEllipseGeometry.js +2 -2
  68. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +2 -2
  69. package/dist/cesium/Workers/createEllipsoidGeometry.js +2 -2
  70. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +2 -2
  71. package/dist/cesium/Workers/createFrustumGeometry.js +2 -2
  72. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +2 -2
  73. package/dist/cesium/Workers/createGeometry.js +2 -2
  74. package/dist/cesium/Workers/createGroundPolylineGeometry.js +2 -2
  75. package/dist/cesium/Workers/createPlaneGeometry.js +2 -2
  76. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +2 -2
  77. package/dist/cesium/Workers/createPolygonGeometry.js +2 -2
  78. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +2 -2
  79. package/dist/cesium/Workers/createPolylineGeometry.js +2 -2
  80. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +2 -2
  81. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +2 -2
  82. package/dist/cesium/Workers/createRectangleGeometry.js +2 -2
  83. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +2 -2
  84. package/dist/cesium/Workers/createSimplePolylineGeometry.js +2 -2
  85. package/dist/cesium/Workers/createSphereGeometry.js +2 -2
  86. package/dist/cesium/Workers/createSphereOutlineGeometry.js +2 -2
  87. package/dist/cesium/Workers/createTaskProcessorWorker.js +2 -2
  88. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +2 -2
  89. package/dist/cesium/Workers/createVectorTileGeometries.js +2 -2
  90. package/dist/cesium/Workers/createVectorTilePoints.js +2 -2
  91. package/dist/cesium/Workers/createVectorTilePolygons.js +2 -2
  92. package/dist/cesium/Workers/createVectorTilePolylines.js +2 -2
  93. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +2 -2
  94. package/dist/cesium/Workers/createVerticesFromHeightmap.js +2 -2
  95. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +2 -2
  96. package/dist/cesium/Workers/createWallGeometry.js +2 -2
  97. package/dist/cesium/Workers/createWallOutlineGeometry.js +2 -2
  98. package/dist/cesium/Workers/decodeDraco.js +2 -2
  99. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  100. package/dist/cesium/Workers/decodeI3S.js +2 -2
  101. package/dist/cesium/Workers/transcodeKTX2.js +10 -10
  102. package/dist/cesium/Workers/transferTypedArrayTest.js +1 -1
  103. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +2 -2
  104. package/dist/core.js +34193 -34105
  105. package/dist/core.umd.cjs +3866 -3820
  106. package/dist/index.d.ts +212 -217
  107. package/package.json +5 -5
  108. package/src/Map/ClusteredLayers/index.tsx +2 -2
  109. package/src/Map/Layer/index.tsx +3 -3
  110. package/src/Map/Layers/hooks.ts +0 -10
  111. package/src/Map/Layers/index.tsx +2 -2
  112. package/src/Map/Sketch/hooks.ts +66 -46
  113. package/src/Map/Sketch/index.tsx +24 -2
  114. package/src/Map/Sketch/preset.ts +0 -2
  115. package/src/Map/Sketch/types.ts +0 -31
  116. package/src/Map/hooks.ts +4 -0
  117. package/src/Map/index.tsx +5 -8
  118. package/src/Map/ref.ts +7 -4
  119. package/src/Map/types/index.ts +216 -34
  120. package/src/Map/useTimelineManager.ts +3 -5
  121. package/src/Map/utils.ts +43 -1
  122. package/src/Visualizer/coreContext.tsx +8 -1
  123. package/src/Visualizer/hooks.ts +75 -6
  124. package/src/Visualizer/index.stories.tsx +48 -4
  125. package/src/Visualizer/index.tsx +6 -8
  126. package/src/engines/Cesium/Feature/Ellipse/index.stories.tsx +1 -1
  127. package/src/engines/Cesium/Feature/Frustum/index.stories.tsx +1 -1
  128. package/src/engines/Cesium/Feature/Model/index.stories.tsx +1 -1
  129. package/src/engines/Cesium/Feature/Model/index.tsx +9 -10
  130. package/src/engines/Cesium/Feature/Polygon/index.stories.tsx +6 -8
  131. package/src/engines/Cesium/Feature/Raster/index.stories.tsx +2 -2
  132. package/src/engines/Cesium/Feature/Resource/index.stories.tsx +1 -1
  133. package/src/engines/Cesium/Feature/Tileset/hooks.ts +11 -12
  134. package/src/engines/Cesium/Feature/Tileset/index.stories.tsx +1 -1
  135. package/src/engines/Cesium/Feature/Tileset/index.tsx +4 -4
  136. package/src/engines/Cesium/Feature/Tileset/useClippingBox.ts +1 -10
  137. package/src/engines/Cesium/Feature/index.tsx +4 -5
  138. package/src/engines/Cesium/Feature/utils.tsx +2 -3
  139. package/src/engines/Cesium/Shaders/OverriddenShaders/GlobeFS/IBL.glsl +6 -10
  140. package/src/engines/Cesium/{hooks/useOverrideGlobeShader/VertexTerrainElevationMaterial.ts → VertexTerrainElevationMaterial.ts} +2 -3
  141. package/src/engines/Cesium/{hooks/useCameraLimiter.ts → cameraLimiter.ts} +45 -22
  142. package/src/engines/Cesium/core/Globe.tsx +68 -36
  143. package/src/engines/Cesium/core/Imagery.test.ts +9 -9
  144. package/src/engines/Cesium/core/Imagery.tsx +19 -17
  145. package/src/engines/Cesium/core/Indicator/Indicator.tsx +8 -8
  146. package/src/engines/Cesium/hooks.ts +365 -124
  147. package/src/engines/Cesium/index.stories.tsx +1 -1
  148. package/src/engines/Cesium/index.tsx +62 -60
  149. package/src/engines/Cesium/{hooks/useEngineRef.test.tsx → useEngineRef.test.tsx} +34 -38
  150. package/src/engines/Cesium/{hooks/useEngineRef.ts → useEngineRef.ts} +41 -43
  151. package/src/engines/Cesium/{hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts → useOverrideGlobeShader.ts} +17 -20
  152. package/src/engines/index.ts +1 -1
  153. package/src/mantle/compat/types.ts +7 -7
  154. package/dist/cesium/Workers/chunk-45U7TTT3.js +0 -26
  155. package/dist/cesium/Workers/chunk-7VJK3KHI.js +0 -26
  156. package/dist/cesium/Workers/chunk-CUOR5F7T.js +0 -28
  157. package/dist/cesium/Workers/chunk-DGCK3LD2.js +0 -30
  158. package/dist/cesium/Workers/chunk-DXEZYE3K.js +0 -62
  159. package/dist/cesium/Workers/chunk-VAKC5J5C.js +0 -26
  160. package/dist/cesium/Workers/chunk-VKV642QV.js +0 -26
  161. package/dist/cesium/Workers/chunk-VMSXG4OA.js +0 -26
  162. package/src/Map/types/viewerProperty.ts +0 -215
  163. package/src/Visualizer/useCoreAPI.ts +0 -30
  164. package/src/engines/Cesium/hooks/useCamera.ts +0 -135
  165. package/src/engines/Cesium/hooks/useExplicitRender.ts +0 -65
  166. package/src/engines/Cesium/hooks/useLayerDragDrop.ts +0 -77
  167. package/src/engines/Cesium/hooks/useViewerProperty.ts +0 -90
  168. /package/src/engines/Cesium/{hooks/useOverrideGlobeShader/JapanSeaLevelEllipsoid.ts → JapanSeaLevelEllipsoid.ts} +0 -0
  169. /package/src/engines/Cesium/{hooks/useOverrideGlobeShader/vertexTerrainElevationMaterial.glsl → vertexTerrainElevationMaterial.glsl} +0 -0
@@ -22,6 +22,7 @@ import type {
22
22
  Feature,
23
23
  ComputedFeature,
24
24
  CameraPosition,
25
+ LUT,
25
26
  } from "../../mantle";
26
27
  import type {
27
28
  CameraOptions,
@@ -38,11 +39,10 @@ import type {
38
39
  LayerSelectionReason,
39
40
  Ref as LayersRef,
40
41
  } from "../Layers";
41
- import { SketchType, SketchOptions, SketchComponentType } from "../Sketch/types";
42
+ import { SketchComponentType } from "../Sketch";
43
+ import { SketchAppearance, SketchType } from "../Sketch/types";
42
44
  import type { TimelineManagerRef } from "../useTimelineManager";
43
45
 
44
- import type { SceneMode, ViewerProperty } from "./viewerProperty";
45
-
46
46
  export type {
47
47
  FeatureComponentProps,
48
48
  FeatureComponentType,
@@ -72,7 +72,6 @@ export type {
72
72
  ValueType,
73
73
  } from "../../mantle";
74
74
  export * from "./event";
75
- export * from "./viewerProperty";
76
75
 
77
76
  export type EngineRef = {
78
77
  name: string;
@@ -88,7 +87,7 @@ export type EngineRef = {
88
87
  getLocationFromScreen: (x: number, y: number, withTerrain?: boolean) => LatLngHeight | undefined;
89
88
  sampleTerrainHeight: (lng: number, lat: number) => Promise<number | undefined>;
90
89
  computeGlobeHeight: (lng: number, lat: number, height?: number) => number | undefined;
91
- getGlobeHeight: () => number | undefined;
90
+ getGlobeHeight: () => void;
92
91
  toXYZ: (
93
92
  lng: number,
94
93
  lat: number,
@@ -203,8 +202,7 @@ export type EngineProps = {
203
202
  style?: CSSProperties;
204
203
  isEditable?: boolean;
205
204
  isBuilt?: boolean;
206
- property?: ViewerProperty;
207
- time?: string | Date;
205
+ property?: SceneProperty;
208
206
  camera?: Camera;
209
207
  cameraForceHorizontalRoll?: boolean;
210
208
  small?: boolean;
@@ -299,18 +297,18 @@ export type MouseEventCallback = (props: MouseEventProps) => void;
299
297
  export type MouseWheelEventCallback = (props: MouseEventProps) => void;
300
298
  export type MouseEventTypes =
301
299
  | "click"
302
- | "doubleClick"
303
- | "mouseDown"
304
- | "mouseUp"
305
- | "rightClick"
306
- | "rightDown"
307
- | "rightUp"
308
- | "middleClick"
309
- | "middleDown"
310
- | "middleUp"
311
- | "mouseMove"
312
- | "mouseEnter"
313
- | "mouseLeave"
300
+ | "doubleclick"
301
+ | "mousedown"
302
+ | "mouseup"
303
+ | "rightclick"
304
+ | "rightdown"
305
+ | "rightup"
306
+ | "middleclick"
307
+ | "middledown"
308
+ | "middleup"
309
+ | "mousemove"
310
+ | "mouseenter"
311
+ | "mouseleave"
314
312
  | "wheel";
315
313
 
316
314
  export type MouseEvents = {
@@ -321,18 +319,18 @@ export type MouseEvents = {
321
319
 
322
320
  export type MouseEventHandles = {
323
321
  onClick: (fn: MouseEvents["click"]) => void;
324
- onDoubleClick: (fn: MouseEvents["doubleClick"]) => void;
325
- onMouseDown: (fn: MouseEvents["mouseDown"]) => void;
326
- onMouseUp: (fn: MouseEvents["mouseUp"]) => void;
327
- onRightClick: (fn: MouseEvents["rightClick"]) => void;
328
- onRightDown: (fn: MouseEvents["rightDown"]) => void;
329
- onRightUp: (fn: MouseEvents["rightUp"]) => void;
330
- onMiddleClick: (fn: MouseEvents["middleClick"]) => void;
331
- onMiddleDown: (fn: MouseEvents["middleDown"]) => void;
332
- onMiddleUp: (fn: MouseEvents["middleUp"]) => void;
333
- onMouseMove: (fn: MouseEvents["mouseMove"]) => void;
334
- onMouseEnter: (fn: MouseEvents["mouseEnter"]) => void;
335
- onMouseLeave: (fn: MouseEvents["mouseLeave"]) => void;
322
+ onDoubleClick: (fn: MouseEvents["doubleclick"]) => void;
323
+ onMouseDown: (fn: MouseEvents["mousedown"]) => void;
324
+ onMouseUp: (fn: MouseEvents["mouseup"]) => void;
325
+ onRightClick: (fn: MouseEvents["rightclick"]) => void;
326
+ onRightDown: (fn: MouseEvents["rightdown"]) => void;
327
+ onRightUp: (fn: MouseEvents["rightup"]) => void;
328
+ onMiddleClick: (fn: MouseEvents["middleclick"]) => void;
329
+ onMiddleDown: (fn: MouseEvents["middledown"]) => void;
330
+ onMiddleUp: (fn: MouseEvents["middleup"]) => void;
331
+ onMouseMove: (fn: MouseEvents["mousemove"]) => void;
332
+ onMouseEnter: (fn: MouseEvents["mouseenter"]) => void;
333
+ onMouseLeave: (fn: MouseEvents["mouseleave"]) => void;
336
334
  onWheel: (fn: MouseEvents["wheel"]) => void;
337
335
  };
338
336
 
@@ -341,6 +339,186 @@ export type MouseEventCallbacks = { [key in keyof MouseEvents]: MouseEvents[key]
341
339
  export type TickEvent = (cb: TickEventCallback) => void;
342
340
  export type TickEventCallback = (current: Date, clock: { start: Date; stop: Date }) => void;
343
341
 
342
+ export type SceneMode = "3d" | "2d" | "columbus";
343
+ export type IndicatorTypes = "default" | "crosshair" | "custom";
344
+
345
+ export type TerrainProperty = {
346
+ terrain?: boolean;
347
+ terrainType?: "cesium" | "arcgis" | "cesiumion"; // default: cesium
348
+ terrainExaggeration?: number; // default: 1
349
+ terrainExaggerationRelativeHeight?: number; // default: 0
350
+ depthTestAgainstTerrain?: boolean;
351
+ terrainCesiumIonAsset?: string;
352
+ terrainCesiumIonAccessToken?: string;
353
+ terrainCesiumIonUrl?: string;
354
+ terrainUrl?: string;
355
+ terrainNormal?: boolean;
356
+ // TODO: Add encode option
357
+ // Need to specify a tile from `tiles` option with `heatmap` option.
358
+ heatmapType?: "custom"; // TODO: Support Cesium's terrain heatmap as built-in: https://sandcastle.cesium.com/?src=Globe%20Materials.html
359
+ heatmapColorLUT?: LUT;
360
+ heatmapMinHeight?: number;
361
+ heatmapMaxHeight?: number;
362
+ heatmapLogarithmic?: boolean;
363
+ };
364
+
365
+ export type SceneProperty = {
366
+ main?: {
367
+ sceneMode?: SceneMode; // default: scene3d
368
+ ion?: string;
369
+ vr?: boolean;
370
+ };
371
+ tiles?: {
372
+ id: string;
373
+ tile_type?: string;
374
+ tile_url?: string;
375
+ tile_zoomLevel?: number[];
376
+ tile_zoomLevelForURL?: number[];
377
+ tile_opacity?: number;
378
+ heatmap?: boolean;
379
+ }[];
380
+ tileLabels?: {
381
+ id: string;
382
+ labelType: "japan_gsi_optimal_bvmap"; // | "other_map"
383
+ style: Record<string, any>; // Function isn't allowed
384
+ }[];
385
+ terrain?: {
386
+ terrain?: boolean;
387
+ terrainType?: "cesium" | "arcgis" | "cesiumion"; // default: cesium
388
+ terrainCesiumIonAsset?: string;
389
+ terrainCesiumIonAccessToken?: string;
390
+ terrainCesiumIonUrl?: string;
391
+ terrainExaggeration?: number; // default: 1
392
+ terrainExaggerationRelativeHeight?: number; // default: 0
393
+ depthTestAgainstTerrain?: boolean;
394
+ };
395
+ globeLighting?: {
396
+ globeLighting?: boolean;
397
+ };
398
+ globeShadow?: {
399
+ globeShadow?: boolean;
400
+ };
401
+ globeAtmosphere?: {
402
+ globeAtmosphere?: boolean;
403
+ globeAtmosphereIntensity?: number; // default: 10
404
+ };
405
+ skyBox?: {
406
+ skyBox?: boolean;
407
+ };
408
+ sun?: {
409
+ sun?: boolean;
410
+ };
411
+ moon?: {
412
+ moon?: boolean;
413
+ };
414
+ skyAtmosphere?: {
415
+ skyAtmosphere?: boolean;
416
+ skyAtmosphereIntensity?: number; // default: 50
417
+ };
418
+ camera?: {
419
+ camera?: Camera;
420
+ allowEnterGround?: boolean;
421
+ fov?: number;
422
+ };
423
+ render?: { showWireframe?: boolean };
424
+ } & LegacySceneProperty;
425
+
426
+ type LegacySceneProperty = {
427
+ default?: {
428
+ camera?: Camera;
429
+ allowEnterGround?: boolean;
430
+ skybox?: boolean;
431
+ bgcolor?: string;
432
+ ion?: string;
433
+ sceneMode?: SceneMode; // default: scene3d
434
+ vr?: boolean;
435
+ } & TerrainProperty; // compat
436
+ cameraLimiter?: {
437
+ cameraLimitterEnabled?: boolean;
438
+ cameraLimitterShowHelper?: boolean;
439
+ cameraLimitterTargetArea?: Camera;
440
+ cameraLimitterTargetWidth?: number;
441
+ cameraLimitterTargetLength?: number;
442
+ };
443
+ indicator?: {
444
+ indicator_type: IndicatorTypes;
445
+ indicator_image?: string;
446
+ indicator_image_scale?: number;
447
+ };
448
+ tiles?: {
449
+ id: string;
450
+ tile_type?: string;
451
+ tile_url?: string;
452
+ tile_zoomLevel?: number[];
453
+ tile_opacity?: number;
454
+ }[];
455
+ terrain?: TerrainProperty;
456
+ atmosphere?: {
457
+ enable_sun?: boolean;
458
+ enableMoon?: boolean;
459
+ enable_lighting?: boolean;
460
+ ground_atmosphere?: boolean;
461
+ sky_atmosphere?: boolean;
462
+ shadows?: boolean;
463
+ shadowResolution?: 1024 | 2048 | 4096;
464
+ softShadow?: boolean;
465
+ shadowDarkness?: number;
466
+ shadowMaximumDistance?: number;
467
+ fog?: boolean;
468
+ fog_density?: number;
469
+ hue_shift?: number;
470
+ brightness_shift?: number;
471
+ surturation_shift?: number;
472
+ skyboxBrightnessShift?: number;
473
+ skyboxSurturationShift?: number;
474
+ globeShadowDarkness?: number;
475
+ globeImageBasedLighting?: boolean;
476
+ globeBaseColor?: string;
477
+ };
478
+ timeline?: {
479
+ animation?: boolean;
480
+ visible?: boolean;
481
+ current?: string;
482
+ start?: string;
483
+ stop?: string;
484
+ stepType?: "rate" | "fixed";
485
+ multiplier?: number;
486
+ step?: number;
487
+ rangeType?: "unbounded" | "clamped" | "bounced";
488
+ };
489
+ googleAnalytics?: {
490
+ enableGA?: boolean;
491
+ trackingId?: string;
492
+ };
493
+ theme?: {
494
+ themeType?: "light" | "dark" | "forest" | "custom";
495
+ themeTextColor?: string;
496
+ themeSelectColor?: string;
497
+ themeBackgroundColor?: string;
498
+ };
499
+ ambientOcclusion?: {
500
+ enabled?: boolean;
501
+ quality?: "low" | "medium" | "high" | "extreme";
502
+ intensity?: number;
503
+ ambientOcclusionOnly?: boolean;
504
+ };
505
+ light?: {
506
+ lightType?: "sunLight" | "directionalLight";
507
+ lightDirectionX?: number;
508
+ lightDirectionY?: number;
509
+ lightDirectionZ?: number;
510
+ lightColor?: string;
511
+ lightIntensity?: number;
512
+ specularEnvironmentMaps?: string;
513
+ sphericalHarmonicCoefficients?: [x: number, y: number, z: number][];
514
+ imageBasedLightIntensity?: number;
515
+ };
516
+ render?: {
517
+ antialias?: "low" | "medium" | "high" | "extreme";
518
+ debugFramePerSecond?: boolean;
519
+ };
520
+ };
521
+
344
522
  export type EngineComponent = ForwardRefExoticComponent<
345
523
  PropsWithoutRef<EngineProps> & RefAttributes<EngineRef>
346
524
  >;
@@ -356,8 +534,12 @@ export type Engine = {
356
534
  export type RequestingRenderMode = -1 | 0 | 1; // -1: force render on every postUpdate, 0: no request to render, 1: request one frame
357
535
 
358
536
  export type SketchRef = {
359
- getType: () => SketchType | undefined;
360
537
  setType: (type: SketchType | undefined, from?: "editor" | "plugin") => void;
361
- getOptions: () => SketchOptions;
362
- overrideOptions: (options: SketchOptions) => void;
538
+ setColor: (color: string) => void;
539
+ setDefaultAppearance: (appearance: SketchAppearance) => void;
540
+ disableShadow: (disable: boolean) => void;
541
+ enableRelativeHeight: (enable: boolean) => void;
542
+ createDataOnly: (dataOnly: boolean) => void;
543
+ allowRightClickToAbort: (allow: boolean) => void;
544
+ allowAutoResetInteractionMode: (allow: boolean) => void;
363
545
  };
@@ -62,12 +62,12 @@ export type TimelineCommit = (PlayCommand | PauseCommand | SetTimeCommand | SetO
62
62
 
63
63
  export type TimelineCommitter = {
64
64
  source:
65
+ | "overrideSceneProperty"
65
66
  | "widgetContext"
66
67
  | "pluginAPI"
67
68
  | "featureResource"
68
69
  | "storyTimelineBlock"
69
- | "storyPage"
70
- | "initialize";
70
+ | "storyPage";
71
71
  id?: string;
72
72
  };
73
73
 
@@ -193,9 +193,7 @@ export default ({ init, engineRef, timelineManagerRef }: Props) => {
193
193
  onCommit,
194
194
  offCommit,
195
195
  handleTick,
196
- get tick() {
197
- return engineRef?.current?.tick;
198
- },
196
+ tick: engineRef?.current?.tick,
199
197
  };
200
198
  }, [
201
199
  options,
package/src/Map/utils.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { type RefObject, useCallback, useRef } from "react";
1
+ import { cloneDeep, mergeWith, omit } from "lodash-es";
2
+ import { type RefObject, useCallback, useRef, useState, useMemo } from "react";
2
3
 
3
4
  export function useGet<T>(value: T): () => T {
4
5
  const ref = useRef<T>(value);
@@ -14,6 +15,47 @@ export function wrapRef<T>(ref: RefObject<T>, keys: FunctionKeys<T>): WrappedRef
14
15
  ) as WrappedRef<T>;
15
16
  }
16
17
 
18
+ export function mergeProperty(a: any, b: any) {
19
+ const a2 = cloneDeep(a);
20
+ return mergeWith(
21
+ a2,
22
+ b,
23
+ (
24
+ s: any,
25
+ v: any,
26
+ _k: string | number | symbol,
27
+ _obj: any,
28
+ _src: any,
29
+ stack: { size: number },
30
+ ) => (stack.size > 0 || Array.isArray(v) ? v ?? s : undefined),
31
+ );
32
+ }
33
+
34
+ export function useOverriddenProperty<T extends {}>(
35
+ property: T | undefined,
36
+ ): [T, (pluginId: string, property: T) => void] {
37
+ const [overriddenProperties, setOverrideProperty] = useState<{
38
+ [pluginId: string]: any;
39
+ }>({});
40
+ const { overriddenPropertyCommon, overriddenProperty } = useMemo(() => {
41
+ const { "": overriddenPropertyCommon, ...overriddenProperty } = overriddenProperties;
42
+ return { overriddenPropertyCommon, overriddenProperty };
43
+ }, [overriddenProperties]);
44
+
45
+ const overrideProperty = useCallback((pluginId: string, property: any) => {
46
+ setOverrideProperty(p => (property ? { ...p, [pluginId || ""]: property } : omit(p, pluginId)));
47
+ }, []);
48
+
49
+ const mergedProperty = useMemo(() => {
50
+ return [overriddenPropertyCommon, ...Object.values(overriddenProperty)].reduce(
51
+ (p, v) => mergeProperty(p, v),
52
+ property,
53
+ );
54
+ }, [property, overriddenPropertyCommon, overriddenProperty]);
55
+
56
+ return [mergedProperty, overrideProperty];
57
+ }
58
+
17
59
  export type FunctionKeys<T> = {
18
60
  [P in keyof T as T[P] extends (...args: any[]) => any ? P : never]: 1;
19
61
  };
@@ -1,6 +1,11 @@
1
1
  import { createContext } from "react";
2
2
 
3
- import { LayerEditEvent, LayerSelectionReason, LayerVisibilityEvent } from "../engines";
3
+ import {
4
+ LayerEditEvent,
5
+ LayerSelectionReason,
6
+ LayerVisibilityEvent,
7
+ SceneProperty,
8
+ } from "../engines";
4
9
  import { ComputedFeature, ComputedLayer } from "../mantle";
5
10
  import {
6
11
  LayerLoadEvent,
@@ -23,6 +28,8 @@ type CoreContext = {
23
28
  };
24
29
  selectedComputedFeature?: ComputedFeature | undefined;
25
30
  viewport?: Viewport;
31
+ overriddenSceneProperty?: SceneProperty;
32
+ overrideSceneProperty?: (pluginId: string, property: SceneProperty) => void;
26
33
  handleCameraForceHorizontalRollChange?: (enable?: boolean) => void;
27
34
  handleInteractionModeChange?: (mode?: InteractionModeType | undefined) => void;
28
35
  onSketchPluginFeatureCreate?: (cb: SketchEventCallback) => void;
@@ -1,3 +1,4 @@
1
+ import { clone } from "lodash-es";
1
2
  import { Ref, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
2
3
 
3
4
  import type { ComputedFeature, Feature, LatLng, SelectedFeatureInfo } from "../mantle";
@@ -6,6 +7,7 @@ import type {
6
7
  LayerSelectionReason,
7
8
  Camera,
8
9
  ComputedLayer,
10
+ SceneProperty,
9
11
  LayerEditEvent,
10
12
  CursorType,
11
13
  LayerVisibilityEvent,
@@ -13,22 +15,21 @@ import type {
13
15
  LayerSelectWithRectStart,
14
16
  LayerSelectWithRectMove,
15
17
  LayerSelectWithRectEnd,
16
- ViewerProperty,
17
18
  } from "../Map";
19
+ import { useOverriddenProperty } from "../Map";
18
20
  import { SketchEventCallback, SketchEventProps, SketchType } from "../Map/Sketch/types";
19
21
  import { TimelineManagerRef } from "../Map/useTimelineManager";
20
22
 
21
23
  import type { InteractionModeType } from "./interactionMode";
22
24
  import { INTERACTION_MODES } from "./interactionMode";
23
- import useCoreAPI from "./useCoreAPI";
24
25
  import useViewport from "./useViewport";
25
26
 
26
27
  export default function useHooks(
27
28
  {
28
29
  camera: initialCamera,
29
30
  interactionMode: initialInteractionMode,
31
+ sceneProperty,
30
32
  zoomedLayerId,
31
- viewerProperty,
32
33
  onLayerSelect,
33
34
  onCameraChange,
34
35
  onInteractionModeChange,
@@ -38,8 +39,8 @@ export default function useHooks(
38
39
  }: {
39
40
  camera?: Camera;
40
41
  interactionMode?: InteractionModeType;
42
+ sceneProperty?: SceneProperty;
41
43
  zoomedLayerId?: string;
42
- viewerProperty?: ViewerProperty;
43
44
  onLayerSelect?: (
44
45
  layerId: string | undefined,
45
46
  layer: (() => Promise<ComputedLayer | undefined>) | undefined,
@@ -110,6 +111,70 @@ export default function useHooks(
110
111
 
111
112
  const timelineManagerRef: TimelineManagerRef = useRef();
112
113
 
114
+ // scene
115
+ const [overriddenSceneProperty, originalOverrideSceneProperty] =
116
+ useOverriddenProperty(sceneProperty);
117
+
118
+ const overrideSceneProperty = useCallback(
119
+ (pluginId: string, property: SceneProperty) => {
120
+ if (property.timeline) {
121
+ const filteredTimeline = clone(property.timeline);
122
+ delete filteredTimeline.visible;
123
+ if (Object.keys(filteredTimeline).length > 0) {
124
+ if (
125
+ filteredTimeline.current !== undefined ||
126
+ filteredTimeline.start !== undefined ||
127
+ filteredTimeline.stop !== undefined
128
+ ) {
129
+ timelineManagerRef?.current?.commit({
130
+ cmd: "SET_TIME",
131
+ payload: {
132
+ start:
133
+ filteredTimeline.start ?? timelineManagerRef?.current?.computedTimeline.start,
134
+ stop: filteredTimeline.stop ?? timelineManagerRef?.current?.computedTimeline.stop,
135
+ current:
136
+ filteredTimeline.current ?? timelineManagerRef?.current?.computedTimeline.current,
137
+ },
138
+ committer: {
139
+ source: "overrideSceneProperty",
140
+ id: pluginId,
141
+ },
142
+ });
143
+ }
144
+ if (
145
+ filteredTimeline.multiplier !== undefined ||
146
+ filteredTimeline.stepType !== undefined ||
147
+ filteredTimeline.rangeType !== undefined
148
+ ) {
149
+ timelineManagerRef?.current?.commit({
150
+ cmd: "SET_OPTIONS",
151
+ payload: {
152
+ stepType: filteredTimeline.stepType,
153
+ multiplier: filteredTimeline.multiplier,
154
+ rangeType: filteredTimeline.rangeType,
155
+ },
156
+ committer: {
157
+ source: "overrideSceneProperty",
158
+ id: pluginId,
159
+ },
160
+ });
161
+ }
162
+ if (filteredTimeline.animation !== undefined) {
163
+ timelineManagerRef?.current?.commit({
164
+ cmd: filteredTimeline.animation ? "PLAY" : "PAUSE",
165
+ committer: {
166
+ source: "overrideSceneProperty",
167
+ id: pluginId,
168
+ },
169
+ });
170
+ }
171
+ }
172
+ }
173
+ originalOverrideSceneProperty(pluginId, property);
174
+ },
175
+ [timelineManagerRef, originalOverrideSceneProperty],
176
+ );
177
+
113
178
  // camera
114
179
  const [camera, changeCamera] = useValue(initialCamera, onCameraChange);
115
180
 
@@ -241,6 +306,8 @@ export default function useHooks(
241
306
  selectedLayer,
242
307
  selectedComputedFeature,
243
308
  viewport,
309
+ overriddenSceneProperty,
310
+ overrideSceneProperty,
244
311
  handleCameraForceHorizontalRollChange,
245
312
  handleInteractionModeChange: changeInteractionMode,
246
313
  onSketchPluginFeatureCreate,
@@ -257,6 +324,8 @@ export default function useHooks(
257
324
  selectedLayer,
258
325
  selectedComputedFeature,
259
326
  viewport,
327
+ overriddenSceneProperty,
328
+ overrideSceneProperty,
260
329
  changeInteractionMode,
261
330
  handleCameraForceHorizontalRollChange,
262
331
  onLayerEdit,
@@ -280,20 +349,20 @@ export default function useHooks(
280
349
  [],
281
350
  );
282
351
 
283
- useCoreAPI({ viewerProperty });
284
-
285
352
  return {
286
353
  mapRef,
287
354
  wrapperRef,
288
355
  selectedFeature,
289
356
  camera,
290
357
  featureFlags,
358
+ overriddenSceneProperty,
291
359
  isLayerDragging,
292
360
  timelineManagerRef,
293
361
  cursor,
294
362
  cameraForceHorizontalRoll,
295
363
  coreContextValue,
296
364
  containerStyle,
365
+ overrideSceneProperty,
297
366
  handleLayerSelect,
298
367
  handleLayerDrag,
299
368
  handleLayerDrop,
@@ -15,11 +15,11 @@ export const Cesium: Story = {
15
15
  args: {
16
16
  ready: true,
17
17
  engine: "cesium",
18
- viewerProperty: {
18
+ sceneProperty: {
19
19
  tiles: [
20
20
  {
21
21
  id: "default",
22
- type: "default",
22
+ tile_type: "default",
23
23
  },
24
24
  ],
25
25
  },
@@ -72,13 +72,57 @@ export const API: Story = {
72
72
  args: {
73
73
  ready: true,
74
74
  engine: "cesium",
75
- viewerProperty: {
75
+ sceneProperty: {
76
76
  tiles: [
77
77
  {
78
78
  id: "default",
79
- type: "default",
79
+ tile_type: "default",
80
80
  },
81
81
  ],
82
82
  },
83
83
  },
84
84
  };
85
+
86
+ export const Plugin = {
87
+ args: {
88
+ ready: true,
89
+ engine: "cesium",
90
+ sceneProperty: {
91
+ tiles: [
92
+ {
93
+ id: "default",
94
+ tile_type: "default",
95
+ },
96
+ ],
97
+ },
98
+ widgetAlignSystem: {
99
+ outer: {
100
+ left: {
101
+ top: {
102
+ align: "start",
103
+ widgets: [
104
+ {
105
+ id: "plugin",
106
+ pluginId: "plugin",
107
+ extensionId: "test",
108
+ ...({
109
+ __REEARTH_SOURCECODE: `reearth.layers.add(${JSON.stringify({
110
+ id: "l",
111
+ type: "simple",
112
+ data: {
113
+ type: "geojson",
114
+ value: { type: "Feature", geometry: { type: "Point", coordinates: [0, 0] } },
115
+ },
116
+ marker: {
117
+ imageColor: "#fff",
118
+ },
119
+ })});`,
120
+ } as any),
121
+ },
122
+ ],
123
+ },
124
+ },
125
+ },
126
+ },
127
+ },
128
+ };