@reearth/core 0.0.7-alpha.14 → 0.0.7-alpha.16

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 (40) hide show
  1. package/dist/core.js +7164 -5873
  2. package/dist/core.umd.cjs +71 -71
  3. package/dist/index.d.ts +62 -13
  4. package/package.json +8 -5
  5. package/src/Map/Layer/hooks.ts +6 -3
  6. package/src/Map/Layer/index.tsx +2 -0
  7. package/src/Map/Layers/hooks.ts +17 -0
  8. package/src/Map/Layers/index.tsx +12 -1
  9. package/src/Map/Layers/keys.ts +1 -0
  10. package/src/Map/Sketch/hooks.ts +405 -399
  11. package/src/Map/Sketch/index.tsx +65 -18
  12. package/src/Map/Sketch/sketchMachine.ts +359 -4
  13. package/src/Map/Sketch/sketchMachine.typegen.ts +58 -1
  14. package/src/Map/Sketch/types.ts +10 -20
  15. package/src/Map/Sketch/usePluginSketchLayer.ts +105 -0
  16. package/src/Map/Sketch/useSketch.ts +559 -0
  17. package/src/Map/Sketch/useSketchFeature.ts +198 -0
  18. package/src/Map/hooks.ts +32 -1
  19. package/src/Map/index.tsx +24 -0
  20. package/src/Map/ref.ts +8 -0
  21. package/src/Map/types/index.ts +27 -1
  22. package/src/Visualizer/coreContext.tsx +2 -0
  23. package/src/Visualizer/hooks.ts +25 -0
  24. package/src/Visualizer/index.tsx +20 -0
  25. package/src/engines/Cesium/Feature/index.tsx +6 -2
  26. package/src/engines/Cesium/Sketch/ControlPoint.tsx +128 -24
  27. package/src/engines/Cesium/Sketch/ExtrudedControlPoints.tsx +70 -25
  28. package/src/engines/Cesium/Sketch/ExtrudedMeasurement.tsx +3 -1
  29. package/src/engines/Cesium/Sketch/ExtrudedPolygonEntity.tsx +14 -14
  30. package/src/engines/Cesium/Sketch/PolylineEntity.tsx +7 -4
  31. package/src/engines/Cesium/Sketch/SurfaceAddingPoints.tsx +60 -0
  32. package/src/engines/Cesium/Sketch/SurfaceControlPoints.tsx +125 -35
  33. package/src/engines/Cesium/Sketch/constants.ts +5 -0
  34. package/src/engines/Cesium/Sketch/index.tsx +68 -29
  35. package/src/engines/Cesium/core/Globe.tsx +11 -2
  36. package/src/engines/Cesium/core/Imagery.tsx +7 -2
  37. package/src/engines/Cesium/core/presets.ts +0 -11
  38. package/src/engines/Cesium/hooks/useEngineRef.ts +36 -0
  39. package/src/engines/Cesium/hooks.ts +50 -0
  40. package/src/engines/Cesium/index.tsx +16 -3
package/dist/index.d.ts CHANGED
@@ -17,7 +17,6 @@ import { PropsWithoutRef } from 'react';
17
17
  import { ReactNode } from 'react';
18
18
  import { RefAttributes } from 'react';
19
19
  import { RefObject } from 'react';
20
- import { RequireExactlyOne } from 'type-fest';
21
20
  import { WritableAtom } from 'jotai';
22
21
 
23
22
  export declare type AmbientOcclusionProperty = {
@@ -278,6 +277,7 @@ declare type CommonProps = {
278
277
  isHidden?: boolean;
279
278
  isSelected?: boolean;
280
279
  meta?: Record<string, unknown>;
280
+ sketchEditingFeature?: SketchEditingFeature;
281
281
  };
282
282
 
283
283
  export declare function computeAtom(cache?: typeof globalDataFeaturesCache): WritableAtom<ComputedLayer | undefined, Command, void>;
@@ -299,6 +299,8 @@ export declare type ConditionsExpression = {
299
299
  conditions: [string, string][];
300
300
  };
301
301
 
302
+ declare type ControlPointMouseEventHandler = (index: number, isExtrudedPoint: boolean, type: "mousedown" | "click") => void;
303
+
302
304
  export declare function convertLayer(l: Layer): LegacyLayer | undefined;
303
305
 
304
306
  export declare function convertLegacyCluster(clusters: LegacyCluster[]): Cluster[];
@@ -320,6 +322,8 @@ declare type CoreContext = {
320
322
  handleCameraForceHorizontalRollChange?: (enable?: boolean) => void;
321
323
  handleInteractionModeChange?: (mode?: InteractionModeType | undefined) => void;
322
324
  onSketchPluginFeatureCreate?: (cb: SketchEventCallback) => void;
325
+ onSketchPluginFeatureUpdate?: (cb: SketchEventCallback) => void;
326
+ onSketchPluginFeatureDelete?: (cb: SketchEventCallback) => void;
323
327
  onSketchTypeChange?: (cb: (type: SketchType | undefined) => void) => void;
324
328
  onLayerVisibility?: (cb: (e: LayerVisibilityEvent) => void) => void;
325
329
  onLayerLoad?: (cb: (e: LayerLoadEvent) => void) => void;
@@ -352,6 +356,7 @@ export declare type CoreVisualizerProps = {
352
356
  ready?: boolean;
353
357
  hiddenLayers?: string[];
354
358
  zoomedLayerId?: string;
359
+ displayCredits?: boolean;
355
360
  onCameraChange?: (camera: Camera) => void;
356
361
  onLayerDrop?: (layerId: string, propertyKey: string, position: LatLng | undefined) => void;
357
362
  onLayerSelect?: (layerId: string | undefined, layer: (() => Promise<ComputedLayer | undefined>) | undefined, feature: ComputedFeature | undefined, reason: LayerSelectionReason | undefined) => void;
@@ -359,7 +364,15 @@ export declare type CoreVisualizerProps = {
359
364
  onMount?: () => void;
360
365
  onSketchTypeChangeProp?: (type: SketchType | undefined) => void;
361
366
  onSketchFeatureCreate?: (feature: SketchFeature | null) => void;
367
+ onSketchFeatureUpdate?: (feature: SketchFeature | null) => void;
368
+ onSketchFeatureDelete?: (layerId: string, featureId: string) => void;
362
369
  onInteractionModeChange?: (mode: InteractionModeType) => void;
370
+ onAPIReady?: () => void;
371
+ onCreditsUpdate?: (credits: Credit[]) => void;
372
+ };
373
+
374
+ export declare type Credit = {
375
+ html?: string;
363
376
  };
364
377
 
365
378
  export declare type CursorType = "auto" | "grab" | "crosshair";
@@ -489,6 +502,7 @@ export declare type EngineProps = {
489
502
  isLayerDragging?: boolean;
490
503
  shouldRender?: boolean;
491
504
  meta?: Record<string, unknown>;
505
+ displayCredits?: boolean;
492
506
  layersRef?: RefObject<LayersRef>;
493
507
  requestingRenderMode?: MutableRefObject<RequestingRenderMode>;
494
508
  timelineManagerRef?: TimelineManagerRef;
@@ -503,6 +517,7 @@ export declare type EngineProps = {
503
517
  onLayerSelectWithRectStart?: (e: LayerSelectWithRectStart) => void;
504
518
  onLayerSelectWithRectMove?: (e: LayerSelectWithRectMove) => void;
505
519
  onLayerSelectWithRectEnd?: (e: LayerSelectWithRectEnd) => void;
520
+ onCreditsUpdate?: (credits: Credit[]) => void;
506
521
  };
507
522
 
508
523
  export declare type EngineRef = {
@@ -532,6 +547,7 @@ export declare type EngineRef = {
532
547
  setView: (camera: CameraPosition) => void;
533
548
  toWindowPosition: (position: [x: number, y: number, z: number]) => [x: number, y: number] | undefined;
534
549
  getExtrudedHeight: (position: [x: number, y: number, z: number], windowPosition: [x: number, y: number]) => number | undefined;
550
+ getExtrudedPoint: (position: [x: number, y: number, z: number], extrutedHeight: number) => Position3d | undefined;
535
551
  getSurfaceDistance: (point1: Cartesian3, point2: Cartesian3) => number | undefined;
536
552
  equalsEpsilon2d: (point1: Position2d, point2: Position2d, relativeEpsilon: number | undefined, absoluteEpsilon: number | undefined) => boolean;
537
553
  equalsEpsilon3d: (point1: Position3d, point2: Position3d, relativeEpsilon: number | undefined, absoluteEpsilon: number | undefined) => boolean;
@@ -589,6 +605,7 @@ export declare type EngineRef = {
589
605
  selectFeatures: (layerId: string, featureId: string[]) => void;
590
606
  unselectFeatures: (layerId: string, featureId: string[]) => void;
591
607
  pickManyFromViewport: (windowPosition: [x: number, y: number], windowWidth: number, windowHeight: number, condition?: (f: PickedFeature) => boolean) => PickedFeature[] | undefined;
608
+ calcRectangleControlPoint: (p1: Position3d, p2: Position3d, p3: Position3d) => [p1: Position3d, p2: Position3d, p3: Position3d];
592
609
  } & MouseEventHandles;
593
610
 
594
611
  export declare const engines: {
@@ -747,11 +764,6 @@ export declare type FrustumAppearance = {
747
764
 
748
765
  export declare type Geometry = Point | LineString | Polygon_2 | MultiPoint | MultiLineString | MultiPolygon;
749
766
 
750
- declare type GeometryOptions = {
751
- type: SketchType;
752
- controlPoints: readonly Position3d[];
753
- };
754
-
755
767
  export declare type GeometryOptionsXYZ = {
756
768
  type: SketchType;
757
769
  controlPoints: Position3d[];
@@ -955,6 +967,7 @@ export declare type LayersRef = {
955
967
  deleteLayer: (...ids: string[]) => void;
956
968
  isLayer: (obj: any) => obj is LazyLayer;
957
969
  isComputedLayer: (obj: any) => obj is ComputedLayer;
970
+ isTempLayer: (layerId?: string) => boolean;
958
971
  layers: () => LazyLayer[];
959
972
  walk: <T>(fn: (layer: LazyLayer, index: number, parents: LazyLayer[]) => T | void) => T | undefined;
960
973
  find: (fn: (layer: LazyLayer, index: number, parents: LazyLayer[]) => boolean) => LazyLayer | undefined;
@@ -985,6 +998,7 @@ export declare type LayerVisibilityEvent = {
985
998
  */
986
999
  export declare type LazyLayer = Readonly<Layer> & {
987
1000
  computed?: Readonly<ComputedLayer>;
1001
+ isTempLayer?: boolean;
988
1002
  pluginId?: string;
989
1003
  extensionId?: string;
990
1004
  property?: any;
@@ -1075,7 +1089,8 @@ export declare type LUT = readonly ColorTuple[];
1075
1089
  declare const Map_2: ForwardRefExoticComponent< {
1076
1090
  engines?: Record<string, Engine> | undefined;
1077
1091
  engine?: string | undefined;
1078
- } & Omit<Props_2, "Feature" | "viewerProperty" | "selectionReason" | "delegatedDataTypes" | "clusterComponent" | "selectedLayerId"> & Omit<EngineProps, "onLayerSelect" | "selectedLayerId" | "layerSelectionReason"> & Omit<SketchProps, "engineRef" | "layersRef" | "SketchComponent"> & {
1092
+ onAPIReady?: (() => void) | undefined;
1093
+ } & Omit<Props_2, "Feature" | "viewerProperty" | "selectionReason" | "delegatedDataTypes" | "clusterComponent" | "selectedLayerId"> & Omit<EngineProps, "onLayerSelect" | "selectedLayerId" | "layerSelectionReason"> & Omit<SketchProps, "engineRef" | "SketchComponent" | "layersRef"> & {
1079
1094
  cursor?: CursorType | undefined;
1080
1095
  } & RefAttributes<MapRef>>;
1081
1096
  export { Map_2 as Map }
@@ -1317,6 +1332,7 @@ declare type PropertyItem<T> = {
1317
1332
  export declare type Props = {
1318
1333
  engines?: Record<string, Engine>;
1319
1334
  engine?: string;
1335
+ onAPIReady?: () => void;
1320
1336
  } & Omit<Props_2, "Feature" | "clusterComponent" | "selectionReason" | "delegatedDataTypes" | "selectedLayerId" | "viewerProperty"> & Omit<EngineProps, "onLayerSelect" | "layerSelectionReason" | "selectedLayerId"> & Omit<SketchProps, "layersRef" | "engineRef" | "SketchComponent"> & {
1321
1337
  cursor?: CursorType;
1322
1338
  };
@@ -1332,6 +1348,7 @@ declare type Props_2 = Omit<Props_3, "atomMap" | "isHidden" | "selectedLayerId">
1332
1348
  requestingRenderMode?: MutableRefObject<RequestingRenderMode>;
1333
1349
  engineRef?: RefObject<EngineRef>;
1334
1350
  onLayerSelect?: (layerId: string | undefined, featureId: string | undefined, layer: (() => Promise<ComputedLayer | undefined>) | undefined, reason: LayerSelectionReason | undefined, info: SelectedFeatureInfo | undefined) => void;
1351
+ onMount?: () => void;
1335
1352
  };
1336
1353
 
1337
1354
  declare type Props_3 = {
@@ -1459,17 +1476,34 @@ export declare type ShadowProperty = {
1459
1476
 
1460
1477
  export declare type SketchAppearance = Partial<LayerAppearanceTypes>;
1461
1478
 
1462
- declare type SketchComponentProps = RequireExactlyOne<{
1463
- geometry?: LineString | Polygon_2 | MultiPolygon | null;
1464
- geometryOptions?: GeometryOptions | null;
1479
+ declare type SketchComponentProps = {
1480
+ geometryOptions?: {
1481
+ type: SketchType;
1482
+ controlPoints: readonly Position3d[];
1483
+ } | null;
1465
1484
  extrudedHeight?: number;
1485
+ extrudedPoint?: Position3d;
1486
+ centroidBasePoint?: Position3d;
1487
+ centroidExtrudedPoint?: Position3d;
1466
1488
  disableShadow?: boolean;
1467
- enableRelativeHeight?: boolean;
1468
1489
  color?: string;
1469
- }, "geometry" | "geometryOptions">;
1490
+ isEditing?: boolean;
1491
+ catchedControlPointIndex?: number;
1492
+ catchedExtrudedPoint?: boolean;
1493
+ selectedControlPointIndex?: number;
1494
+ handleControlPointMouseEvent?: ControlPointMouseEventHandler;
1495
+ handleAddControlPoint?: (position: Position3d, index: number) => void;
1496
+ };
1470
1497
 
1471
1498
  export declare type SketchComponentType = ComponentType<SketchComponentProps>;
1472
1499
 
1500
+ export declare type SketchEditFeatureChangeCb = (feature: SketchEditingFeature | undefined) => void;
1501
+
1502
+ export declare type SketchEditingFeature = {
1503
+ layerId: string;
1504
+ feature: ComputedFeature;
1505
+ };
1506
+
1473
1507
  export declare type SketchEventCallback = (event: SketchEventProps) => void;
1474
1508
 
1475
1509
  export declare type SketchEventProps = {
@@ -1490,9 +1524,9 @@ export declare type SketchOptions = {
1490
1524
  appearance?: SketchAppearance;
1491
1525
  dataOnly?: boolean;
1492
1526
  disableShadow?: boolean;
1493
- enableRelativeHeight?: boolean;
1494
1527
  rightClickToAbort?: boolean;
1495
1528
  autoResetInteractionMode?: boolean;
1529
+ useCentroidExtrudedHeight?: boolean;
1496
1530
  };
1497
1531
 
1498
1532
  export declare type SketchProps = {
@@ -1505,7 +1539,17 @@ export declare type SketchProps = {
1505
1539
  onSketchTypeChange?: (type: SketchType | undefined, from?: "editor" | "plugin") => void;
1506
1540
  onSketchFeatureCreate?: (feature: SketchFeature | null) => void;
1507
1541
  onSketchPluginFeatureCreate?: (props: SketchEventProps) => void;
1542
+ onSketchFeatureUpdate?: (feature: SketchFeature | null) => void;
1543
+ onSketchPluginFeatureUpdate?: (props: SketchEventProps) => void;
1544
+ onSketchFeatureDelete?: (layerId: string, featureId: string) => void;
1545
+ onSketchPluginFeatureDelete?: (props: {
1546
+ layerId: string;
1547
+ featureId: string;
1548
+ }) => void;
1508
1549
  onLayerSelect?: OnLayerSelectType;
1550
+ sketchEditingFeature?: SketchEditingFeature;
1551
+ onSketchEditFeature?: (feature: SketchEditingFeature | undefined) => void;
1552
+ onMount?: () => void;
1509
1553
  };
1510
1554
 
1511
1555
  export declare type SketchRef = {
@@ -1513,6 +1557,11 @@ export declare type SketchRef = {
1513
1557
  setType: (type: SketchType | undefined, from?: "editor" | "plugin") => void;
1514
1558
  getOptions: () => SketchOptions;
1515
1559
  overrideOptions: (options: SketchOptions) => void;
1560
+ editFeature: (feature: SketchEditingFeature | undefined) => void;
1561
+ cancelEdit: (ignoreAutoReSelect?: boolean) => void;
1562
+ applyEdit: () => void;
1563
+ deleteFeature: (layerId: string, featureId: string) => void;
1564
+ onEditFeatureChange: (cb: SketchEditFeatureChangeCb) => void;
1516
1565
  };
1517
1566
 
1518
1567
  export declare type SketchType = "marker" | "polyline" | "circle" | "rectangle" | "polygon" | "extrudedCircle" | "extrudedRectangle" | "extrudedPolygon";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reearth/core",
3
- "version": "0.0.7-alpha.14",
3
+ "version": "0.0.7-alpha.16",
4
4
  "author": "Re:Earth contributors <community@reearth.io>",
5
5
  "license": "Apache-2.0",
6
6
  "description": "A library that abstracts a map engine as one common API.",
@@ -21,7 +21,8 @@
21
21
  "storybook": "storybook dev -p 6007",
22
22
  "build-storybook": "storybook build",
23
23
  "preversion": "yarn test run",
24
- "version": "yarn build"
24
+ "version": "yarn build",
25
+ "sketch-typegen": "xstate typegen src/**/sketchMachine.ts"
25
26
  },
26
27
  "engines": {
27
28
  "node": ">=20"
@@ -33,12 +34,13 @@
33
34
  },
34
35
  "dependencies": {
35
36
  "@radix-ui/react-checkbox": "1.1.1",
36
- "@radix-ui/react-select": "2.1.1",
37
- "@radix-ui/react-separator": "1.1.0",
38
- "@radix-ui/react-switch": "1.1.0",
39
37
  "@radix-ui/react-dialog": "1.1.1",
40
38
  "@radix-ui/react-icons": "1.3.0",
39
+ "@radix-ui/react-select": "2.1.1",
40
+ "@radix-ui/react-separator": "1.1.0",
41
41
  "@radix-ui/react-slot": "1.1.0",
42
+ "@radix-ui/react-switch": "1.1.0",
43
+ "@radix-ui/react-toggle": "1.1.0",
42
44
  "@reearth/cesium-mvt-imagery-provider": "1.5.4",
43
45
  "@rot1024/use-transition": "1.0.0",
44
46
  "@seznam/compose-react-refs": "1.0.6",
@@ -106,6 +108,7 @@
106
108
  "@typescript-eslint/eslint-plugin": "7.2.0",
107
109
  "@typescript-eslint/parser": "7.2.0",
108
110
  "@vitejs/plugin-react": "4.2.1",
111
+ "@xstate/cli": "0.5.17",
109
112
  "autoprefixer": "10.4.20",
110
113
  "cesium": "1.118.0",
111
114
  "class-variance-authority": "0.7.0",
@@ -107,12 +107,15 @@ export default function useHooks({
107
107
  };
108
108
  }, [layer, forceUpdateFeatures]);
109
109
 
110
- const prevForceUpdatableData = useRef<Pick<Data, "csv" | "jsonProperties">>();
110
+ const prevForceUpdatableData = useRef<Pick<Data, "csv" | "jsonProperties" | "value">>();
111
111
  useLayoutEffect(() => {
112
112
  const data = layer?.type === "simple" ? layer.data : undefined;
113
- const forceUpdatableData = pick(data, "csv", "jsonProperties");
113
+ const forceUpdatableData = pick(data, "csv", "jsonProperties", "value");
114
114
 
115
- if (isEqual(forceUpdatableData, prevForceUpdatableData.current) || !data?.url) {
115
+ if (
116
+ isEqual(forceUpdatableData, prevForceUpdatableData.current) ||
117
+ (!data?.url && !data?.value)
118
+ ) {
116
119
  return;
117
120
  }
118
121
 
@@ -9,6 +9,7 @@ import type {
9
9
  ComputedFeature,
10
10
  LayerSimple,
11
11
  } from "../../mantle";
12
+ import { SketchEditingFeature } from "../Sketch";
12
13
  import { ViewerProperty } from "../types";
13
14
 
14
15
  import useHooks, { type Atom, type EvalFeature } from "./hooks";
@@ -25,6 +26,7 @@ export type CommonProps = {
25
26
  isHidden?: boolean;
26
27
  isSelected?: boolean;
27
28
  meta?: Record<string, unknown>;
29
+ sketchEditingFeature?: SketchEditingFeature;
28
30
  };
29
31
 
30
32
  export type FeatureComponentProps = {
@@ -35,6 +35,7 @@ export type { Layer, NaiveLayer } from "../../mantle";
35
35
  */
36
36
  export type LazyLayer = Readonly<Layer> & {
37
37
  computed?: Readonly<ComputedLayer>;
38
+ isTempLayer?: boolean;
38
39
  // compat
39
40
  pluginId?: string;
40
41
  extensionId?: string;
@@ -53,6 +54,7 @@ export type Ref = {
53
54
  deleteLayer: (...ids: string[]) => void;
54
55
  isLayer: (obj: any) => obj is LazyLayer;
55
56
  isComputedLayer: (obj: any) => obj is ComputedLayer;
57
+ isTempLayer: (layerId?: string) => boolean;
56
58
  layers: () => LazyLayer[];
57
59
  walk: <T>(
58
60
  fn: (layer: LazyLayer, index: number, parents: LazyLayer[]) => T | void,
@@ -119,6 +121,7 @@ export default function useHooks({
119
121
  requestingRenderMode,
120
122
  onLayerSelect,
121
123
  engineRef,
124
+ onMount,
122
125
  }: {
123
126
  layers?: Layer[];
124
127
  ref?: ForwardedRef<Ref>;
@@ -137,6 +140,7 @@ export default function useHooks({
137
140
  info: SelectedFeatureInfo | undefined,
138
141
  ) => void;
139
142
  engineRef?: RefObject<EngineRef>;
143
+ onMount?: () => void;
140
144
  }) {
141
145
  const layerMap = useMemo(() => new Map<string, Layer>(), []);
142
146
  const [overriddenLayers, setOverridenLayers] = useState<OverriddenLayer[]>([]);
@@ -456,6 +460,13 @@ export default function useHooks({
456
460
  [lazyLayerPrototype],
457
461
  );
458
462
 
463
+ const isTempLayer = useCallback(
464
+ (layerId?: string) => {
465
+ return tempLayersRef.current.some(l => l.id === layerId);
466
+ },
467
+ [tempLayersRef],
468
+ );
469
+
459
470
  const isComputedLayer = useCallback(
460
471
  (obj: any): obj is ComputedLayer => {
461
472
  return typeof obj === "object" && Object.getPrototypeOf(obj) === lazyComputedLayerPrototype;
@@ -560,6 +571,7 @@ export default function useHooks({
560
571
  findByIds,
561
572
  isLayer,
562
573
  isComputedLayer,
574
+ isTempLayer,
563
575
  layers: rootLayers,
564
576
  walk,
565
577
  find,
@@ -585,6 +597,7 @@ export default function useHooks({
585
597
  findByIds,
586
598
  isLayer,
587
599
  isComputedLayer,
600
+ isTempLayer,
588
601
  rootLayers,
589
602
  walk,
590
603
  find,
@@ -602,6 +615,10 @@ export default function useHooks({
602
615
  ],
603
616
  );
604
617
 
618
+ useEffect(() => {
619
+ onMount?.();
620
+ }, [onMount]);
621
+
605
622
  const prevLayers = useRef<Layer[] | undefined>([]);
606
623
  useLayoutEffect(() => {
607
624
  const ids = new Set<string>();
@@ -46,10 +46,20 @@ export type Props = Omit<ClusteredLayerProps, "atomMap" | "isHidden" | "selected
46
46
  reason: LayerSelectionReason | undefined,
47
47
  info: SelectedFeatureInfo | undefined,
48
48
  ) => void;
49
+ onMount?: () => void;
49
50
  };
50
51
 
51
52
  const Layers: ForwardRefRenderFunction<Ref, Props> = (
52
- { layers, selectedLayer, hiddenLayers, requestingRenderMode, engineRef, onLayerSelect, ...props },
53
+ {
54
+ layers,
55
+ selectedLayer,
56
+ hiddenLayers,
57
+ requestingRenderMode,
58
+ engineRef,
59
+ onLayerSelect,
60
+ onMount,
61
+ ...props
62
+ },
53
63
  ref,
54
64
  ) => {
55
65
  const { atomMap, flattenedLayers, isHidden } = useHooks({
@@ -60,6 +70,7 @@ const Layers: ForwardRefRenderFunction<Ref, Props> = (
60
70
  requestingRenderMode,
61
71
  engineRef,
62
72
  onLayerSelect,
73
+ onMount,
63
74
  });
64
75
 
65
76
  return (
@@ -18,6 +18,7 @@ export const layerKeys = objKeys<
18
18
  computed: 1,
19
19
  defines: 1,
20
20
  layerStyleId: 1,
21
+ isTempLayer: 1,
21
22
  // appearance
22
23
  ...appearanceKeyObj,
23
24
  // legacy layer