react-three-map 0.7.1 → 0.8.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 (140) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +42 -4
  3. package/dist/cjs/main.js +369 -173
  4. package/dist/es/main.mjs +6 -2
  5. package/dist/es/main.mjs.map +1 -1
  6. package/dist/es/main10.mjs +33 -20
  7. package/dist/es/main10.mjs.map +1 -1
  8. package/dist/es/main11.mjs +11 -19
  9. package/dist/es/main11.mjs.map +1 -1
  10. package/dist/es/main12.mjs +20 -77
  11. package/dist/es/main12.mjs.map +1 -1
  12. package/dist/es/main13.mjs +30 -9
  13. package/dist/es/main13.mjs.map +1 -1
  14. package/dist/es/main14.mjs +22 -67
  15. package/dist/es/main14.mjs.map +1 -1
  16. package/dist/es/main15.mjs +98 -0
  17. package/dist/es/main15.mjs.map +1 -0
  18. package/dist/es/main16.mjs +66 -0
  19. package/dist/es/main16.mjs.map +1 -0
  20. package/dist/es/main17.mjs +23 -0
  21. package/dist/es/main17.mjs.map +1 -0
  22. package/dist/es/main18.mjs +27 -0
  23. package/dist/es/main18.mjs.map +1 -0
  24. package/dist/es/main19.mjs +19 -0
  25. package/dist/es/main19.mjs.map +1 -0
  26. package/dist/es/main2.mjs.map +1 -1
  27. package/dist/es/main20.mjs +72 -0
  28. package/dist/es/main20.mjs.map +1 -0
  29. package/dist/es/main3.mjs +43 -50
  30. package/dist/es/main3.mjs.map +1 -1
  31. package/dist/es/main4.mjs +50 -24
  32. package/dist/es/main4.mjs.map +1 -1
  33. package/dist/es/main5.mjs +19 -3
  34. package/dist/es/main5.mjs.map +1 -1
  35. package/dist/es/main6.mjs +14 -33
  36. package/dist/es/main6.mjs.map +1 -1
  37. package/dist/es/main7.mjs +18 -7
  38. package/dist/es/main7.mjs.map +1 -1
  39. package/dist/es/main8.mjs +26 -21
  40. package/dist/es/main8.mjs.map +1 -1
  41. package/dist/es/main9.mjs +9 -15
  42. package/dist/es/main9.mjs.map +1 -1
  43. package/dist/maplibre/cjs/main.js +369 -173
  44. package/dist/maplibre/es/main.mjs +6 -2
  45. package/dist/maplibre/es/main.mjs.map +1 -1
  46. package/dist/maplibre/es/main10.mjs +33 -20
  47. package/dist/maplibre/es/main10.mjs.map +1 -1
  48. package/dist/maplibre/es/main11.mjs +11 -19
  49. package/dist/maplibre/es/main11.mjs.map +1 -1
  50. package/dist/maplibre/es/main12.mjs +20 -77
  51. package/dist/maplibre/es/main12.mjs.map +1 -1
  52. package/dist/maplibre/es/main13.mjs +30 -9
  53. package/dist/maplibre/es/main13.mjs.map +1 -1
  54. package/dist/maplibre/es/main14.mjs +22 -67
  55. package/dist/maplibre/es/main14.mjs.map +1 -1
  56. package/dist/maplibre/es/main15.mjs +98 -0
  57. package/dist/maplibre/es/main15.mjs.map +1 -0
  58. package/dist/maplibre/es/main16.mjs +66 -0
  59. package/dist/maplibre/es/main16.mjs.map +1 -0
  60. package/dist/maplibre/es/main17.mjs +23 -0
  61. package/dist/maplibre/es/main17.mjs.map +1 -0
  62. package/dist/maplibre/es/main18.mjs +27 -0
  63. package/dist/maplibre/es/main18.mjs.map +1 -0
  64. package/dist/maplibre/es/main19.mjs +19 -0
  65. package/dist/maplibre/es/main19.mjs.map +1 -0
  66. package/dist/maplibre/es/main2.mjs.map +1 -1
  67. package/dist/maplibre/es/main20.mjs +72 -0
  68. package/dist/maplibre/es/main20.mjs.map +1 -0
  69. package/dist/maplibre/es/main3.mjs +43 -50
  70. package/dist/maplibre/es/main3.mjs.map +1 -1
  71. package/dist/maplibre/es/main4.mjs +50 -24
  72. package/dist/maplibre/es/main4.mjs.map +1 -1
  73. package/dist/maplibre/es/main5.mjs +19 -3
  74. package/dist/maplibre/es/main5.mjs.map +1 -1
  75. package/dist/maplibre/es/main6.mjs +14 -33
  76. package/dist/maplibre/es/main6.mjs.map +1 -1
  77. package/dist/maplibre/es/main7.mjs +18 -7
  78. package/dist/maplibre/es/main7.mjs.map +1 -1
  79. package/dist/maplibre/es/main8.mjs +26 -21
  80. package/dist/maplibre/es/main8.mjs.map +1 -1
  81. package/dist/maplibre/es/main9.mjs +9 -15
  82. package/dist/maplibre/es/main9.mjs.map +1 -1
  83. package/dist/maplibre/types/api/canvas-props.d.ts +4 -4
  84. package/dist/maplibre/types/api/coords-to-vector-3.d.ts +4 -0
  85. package/dist/maplibre/types/api/coords.d.ts +5 -0
  86. package/dist/maplibre/types/api/index.d.ts +5 -0
  87. package/dist/maplibre/types/api/near-coordinates.d.ts +3 -0
  88. package/dist/maplibre/types/api/use-map.d.ts +1 -1
  89. package/dist/maplibre/types/core/canvas-in-layer/use-canvas-in-layer.d.ts +11 -0
  90. package/dist/maplibre/types/core/canvas-in-layer/use-render.d.ts +12 -0
  91. package/dist/maplibre/types/core/canvas-in-layer/use-root.d.ts +7 -0
  92. package/dist/maplibre/types/core/canvas-overlay/canvas-portal.d.ts +11 -0
  93. package/dist/maplibre/types/core/canvas-overlay/init-canvas-fc.d.ts +12 -0
  94. package/dist/maplibre/types/core/canvas-overlay/init-r3m.d.ts +10 -0
  95. package/dist/maplibre/types/core/canvas-overlay/render.d.ts +1 -0
  96. package/dist/maplibre/types/core/canvas-overlay/sync-camera-fc.d.ts +13 -0
  97. package/dist/maplibre/types/core/coords-to-matrix.d.ts +2 -4
  98. package/dist/maplibre/types/core/events.d.ts +4 -0
  99. package/dist/maplibre/types/core/generic-map.d.ts +2 -0
  100. package/dist/maplibre/types/core/use-coords-to-matrix.d.ts +5 -0
  101. package/dist/maplibre/types/core/use-coords.d.ts +7 -5
  102. package/dist/maplibre/types/core/use-r3m.d.ts +22 -0
  103. package/dist/maplibre/types/{maplibre → mapbox}/canvas.d.ts +1 -1
  104. package/dist/maplibre/types/maplibre.index.d.ts +3 -4
  105. package/dist/types/api/canvas-props.d.ts +4 -4
  106. package/dist/types/api/coords-to-vector-3.d.ts +4 -0
  107. package/dist/types/api/coords.d.ts +5 -0
  108. package/dist/types/api/index.d.ts +5 -0
  109. package/dist/types/api/near-coordinates.d.ts +3 -0
  110. package/dist/types/api/use-map.d.ts +1 -1
  111. package/dist/types/core/canvas-in-layer/use-canvas-in-layer.d.ts +11 -0
  112. package/dist/types/core/canvas-in-layer/use-render.d.ts +12 -0
  113. package/dist/types/core/canvas-in-layer/use-root.d.ts +7 -0
  114. package/dist/types/core/canvas-overlay/canvas-portal.d.ts +11 -0
  115. package/dist/types/core/canvas-overlay/init-canvas-fc.d.ts +12 -0
  116. package/dist/types/core/canvas-overlay/init-r3m.d.ts +10 -0
  117. package/dist/types/core/canvas-overlay/render.d.ts +1 -0
  118. package/dist/types/core/canvas-overlay/sync-camera-fc.d.ts +13 -0
  119. package/dist/types/core/coords-to-matrix.d.ts +2 -4
  120. package/dist/types/core/events.d.ts +4 -0
  121. package/dist/types/core/generic-map.d.ts +2 -0
  122. package/dist/types/core/use-coords-to-matrix.d.ts +5 -0
  123. package/dist/types/core/use-coords.d.ts +7 -5
  124. package/dist/types/core/use-r3m.d.ts +22 -0
  125. package/dist/types/mapbox.index.d.ts +2 -3
  126. package/package.json +12 -9
  127. package/stories/package.json +12 -5
  128. package/stories/yarn.lock +128 -135
  129. package/dist/maplibre/types/core/create-events.d.ts +0 -3
  130. package/dist/maplibre/types/core/store.d.ts +0 -12
  131. package/dist/maplibre/types/core/use-canvas.d.ts +0 -11
  132. package/dist/maplibre/types/core/use-create-root.d.ts +0 -13
  133. package/dist/maplibre/types/core/use-on-add.d.ts +0 -10
  134. package/dist/maplibre/types/core/use-render.d.ts +0 -4
  135. package/dist/types/core/create-events.d.ts +0 -3
  136. package/dist/types/core/store.d.ts +0 -12
  137. package/dist/types/core/use-canvas.d.ts +0 -11
  138. package/dist/types/core/use-create-root.d.ts +0 -13
  139. package/dist/types/core/use-on-add.d.ts +0 -10
  140. package/dist/types/core/use-render.d.ts +0 -4
@@ -1,18 +1,12 @@
1
- import { Quaternion, Euler, Vector3, Matrix4 } from "three";
2
- const quat = new Quaternion();
3
- const euler = new Euler();
4
- const pos = new Vector3();
5
- const scale = new Vector3();
6
- const m4 = new Matrix4();
7
- function coordsToMatrix({ longitude, latitude, altitude, fromLngLat }) {
8
- const center = fromLngLat([longitude, latitude], altitude);
9
- const scaleUnit = center.meterInMercatorCoordinateUnits();
10
- pos.set(center.x, center.y, center.z || 0);
11
- scale.set(scaleUnit, -scaleUnit, scaleUnit);
12
- quat.setFromEuler(euler.set(-Math.PI * 0.5, 0, 0));
13
- return m4.compose(pos, quat, scale).toArray();
14
- }
1
+ import { useRef, useCallback } from "react";
2
+ const useFunction = (callback) => {
3
+ const callbackRef = useRef(callback);
4
+ callbackRef.current = callback;
5
+ return useCallback((...args) => {
6
+ return callbackRef.current(...args);
7
+ }, []);
8
+ };
15
9
  export {
16
- coordsToMatrix
10
+ useFunction
17
11
  };
18
12
  //# sourceMappingURL=main9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main9.mjs","sources":["../../../src/core/coords-to-matrix.ts"],"sourcesContent":["import { Euler, Matrix4, Quaternion, Vector3 } from \"three\";\nimport { FromLngLat } from \"./generic-map\";\n\nconst quat = new Quaternion();\nconst euler = new Euler();\nconst pos = new Vector3();\nconst scale = new Vector3();\nconst m4 = new Matrix4();\n\n/** calculate Matrix4 from coordinates */\nexport function coordsToMatrix({ longitude, latitude, altitude, fromLngLat }: {\n longitude: number, latitude: number, altitude: number, fromLngLat: FromLngLat\n}) {\n const center = fromLngLat([longitude, latitude], altitude);\n const scaleUnit = center.meterInMercatorCoordinateUnits();\n pos.set(center.x, center.y, center.z || 0);\n scale.set(scaleUnit, -scaleUnit, scaleUnit);\n quat.setFromEuler(euler.set(-Math.PI * .5, 0, 0));\n return m4.compose(pos, quat, scale).toArray();\n}\n"],"names":[],"mappings":";AAGA,MAAM,OAAO,IAAI;AACjB,MAAM,QAAQ,IAAI;AAClB,MAAM,MAAM,IAAI;AAChB,MAAM,QAAQ,IAAI;AAClB,MAAM,KAAK,IAAI;AAGR,SAAS,eAAe,EAAE,WAAW,UAAU,UAAU,cAE7D;AACD,QAAM,SAAS,WAAW,CAAC,WAAW,QAAQ,GAAG,QAAQ;AACnD,QAAA,YAAY,OAAO;AACzB,MAAI,IAAI,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK,CAAC;AACzC,QAAM,IAAI,WAAW,CAAC,WAAW,SAAS;AACrC,OAAA,aAAa,MAAM,IAAI,CAAC,KAAK,KAAK,KAAI,GAAG,CAAC,CAAC;AAChD,SAAO,GAAG,QAAQ,KAAK,MAAM,KAAK,EAAE;AACtC;"}
1
+ {"version":3,"file":"main9.mjs","sources":["../../../src/core/use-function.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const useFunction = <T extends (...args: any[]) => any>(callback: T): T => {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n return useCallback((...args: any[]) => {\n return callbackRef.current(...args);\n }, []) as T;\n};\n"],"names":[],"mappings":";AAGa,MAAA,cAAc,CAAoC,aAAmB;AAC1E,QAAA,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AACf,SAAA,YAAY,IAAI,SAAgB;AAC9B,WAAA,YAAY,QAAQ,GAAG,IAAI;AAAA,EACpC,GAAG,CAAE,CAAA;AACP;"}
@@ -1,10 +1,10 @@
1
1
  import { RenderProps } from "@react-three/fiber";
2
2
  import { PropsWithChildren } from "react";
3
- export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'frameloop'>, PropsWithChildren {
3
+ import { Coords } from "./coords";
4
+ export interface CanvasProps extends Coords, Omit<RenderProps<HTMLCanvasElement>, 'frameloop'>, PropsWithChildren {
4
5
  id?: string;
5
6
  beforeId?: string;
6
- longitude: number;
7
- latitude: number;
8
- altitude?: number;
9
7
  frameloop?: 'always' | 'demand';
8
+ /** render on a separated `<canvas>` that sits on top of the map provider */
9
+ overlay?: boolean;
10
10
  }
@@ -0,0 +1,4 @@
1
+ import { Vector3Tuple } from "three";
2
+ import { Coords } from "./coords";
3
+ /** converts geo coordinates `point` to a `Vector3Tuple` (represented in meters) using `origin` as the origin. */
4
+ export declare function coordsToVector3(point: Coords, origin: Coords): Vector3Tuple;
@@ -0,0 +1,5 @@
1
+ export interface Coords {
2
+ longitude: number;
3
+ latitude: number;
4
+ altitude?: number;
5
+ }
@@ -0,0 +1,5 @@
1
+ export * from './canvas-props';
2
+ export * from './coordinates';
3
+ export * from './near-coordinates';
4
+ export * from './coords';
5
+ export * from './coords-to-vector-3';
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { CoordinatesProps } from "./coordinates";
3
+ export declare const NearCoordinates: import("react").NamedExoticComponent<CoordinatesProps>;
@@ -1,2 +1,2 @@
1
1
  import { MapInstance } from "../core/generic-map";
2
- export declare const useMap: <T extends MapInstance = MapInstance>() => T | undefined;
2
+ export declare const useMap: <T extends MapInstance = MapInstance>() => T;
@@ -0,0 +1,11 @@
1
+ import { CanvasProps } from "../../api/canvas-props";
2
+ import { FromLngLat, MapInstance } from "../generic-map";
3
+ /** get all the properties that you need to render as a map `<Layer>` */
4
+ export declare function useCanvasInLayer(props: CanvasProps, fromLngLat: FromLngLat, map: MapInstance): {
5
+ readonly id: string | undefined;
6
+ readonly beforeId: string | undefined;
7
+ readonly onRemove: () => void;
8
+ readonly render: (_gl: WebGL2RenderingContext, projViewMx: number[]) => void;
9
+ readonly type: "custom";
10
+ readonly renderingMode: "3d";
11
+ };
@@ -0,0 +1,12 @@
1
+ import { RootState } from "@react-three/fiber";
2
+ import { Matrix4Tuple } from "three";
3
+ import { UseBoundStore } from "zustand";
4
+ import { MapInstance } from "../generic-map";
5
+ import { R3M } from "../use-r3m";
6
+ export declare function useRender({ map, origin, useThree, frameloop, r3m, }: {
7
+ map: MapInstance;
8
+ origin: Matrix4Tuple;
9
+ useThree: UseBoundStore<RootState>;
10
+ frameloop?: 'always' | 'demand';
11
+ r3m: R3M;
12
+ }): (_gl: WebGL2RenderingContext, projViewMx: number[]) => void;
@@ -0,0 +1,7 @@
1
+ import { CanvasProps } from "../../api/canvas-props";
2
+ import { FromLngLat, MapInstance } from "../generic-map";
3
+ export declare function useRoot(fromLngLat: FromLngLat, map: MapInstance, { frameloop, longitude, latitude, altitude, ...props }: CanvasProps): {
4
+ onRemove: () => void;
5
+ useThree: import("zustand").UseBoundStore<import("@react-three/fiber").RootState>;
6
+ r3m: import("../use-r3m").R3M<MapInstance>;
7
+ };
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { Matrix4Tuple } from "three";
3
+ import { CanvasProps } from "../../api/canvas-props";
4
+ import { FromLngLat, MapInstance } from "../generic-map";
5
+ interface CanvasPortalProps extends CanvasProps {
6
+ setOnRender: (callback: () => (mx: Matrix4Tuple) => void) => void;
7
+ map: MapInstance;
8
+ fromLngLat: FromLngLat;
9
+ }
10
+ export declare const CanvasPortal: import("react").NamedExoticComponent<CanvasPortalProps>;
11
+ export {};
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { Matrix4Tuple } from "three";
3
+ import { CanvasProps } from "../../api/canvas-props";
4
+ import { FromLngLat, MapInstance } from "../generic-map";
5
+ interface InitCanvasFCProps extends CanvasProps {
6
+ map: MapInstance;
7
+ setOnRender: (callback: () => (mx: Matrix4Tuple) => void) => void;
8
+ frameloop?: 'always' | 'demand';
9
+ fromLngLat: FromLngLat;
10
+ }
11
+ export declare const InitCanvasFC: import("react").NamedExoticComponent<InitCanvasFCProps>;
12
+ export {};
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { FromLngLat, MapInstance } from "../generic-map";
3
+ import { Coords } from "../../api/coords";
4
+ interface InitR3MProps extends Coords {
5
+ map: MapInstance;
6
+ fromLngLat: FromLngLat;
7
+ }
8
+ /** Initialises the `R3M` hook */
9
+ export declare const InitR3M: import("react").NamedExoticComponent<InitR3MProps>;
10
+ export {};
@@ -0,0 +1 @@
1
+ export type Render = (gl: WebGLRenderingContext, matrix: number[]) => void;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { Matrix4Tuple } from "three";
3
+ import { Coords } from "../../api/coords";
4
+ interface SyncCameraFCProps extends Coords {
5
+ setOnRender?: (callback: () => (mx: Matrix4Tuple) => void) => void;
6
+ /** on `useFrame` it will manually render (used by `<Coordinates>`) */
7
+ manualRender?: boolean;
8
+ onReady?: () => void;
9
+ mapCanvas: HTMLCanvasElement;
10
+ }
11
+ /** React Component (FC) to sync the Three camera with the map provider */
12
+ export declare const SyncCameraFC: import("react").NamedExoticComponent<SyncCameraFCProps>;
13
+ export {};
@@ -1,8 +1,6 @@
1
1
  import { FromLngLat } from "./generic-map";
2
+ import { Coords } from "../api/coords";
2
3
  /** calculate Matrix4 from coordinates */
3
- export declare function coordsToMatrix({ longitude, latitude, altitude, fromLngLat }: {
4
- longitude: number;
5
- latitude: number;
6
- altitude: number;
4
+ export declare function coordsToMatrix({ longitude, latitude, altitude, fromLngLat }: Coords & {
7
5
  fromLngLat: FromLngLat;
8
6
  }): import("three").Matrix4Tuple;
@@ -0,0 +1,4 @@
1
+ import { Canvas } from "@react-three/fiber";
2
+ type Events = Parameters<typeof Canvas>[0]['events'];
3
+ export declare const events: Events;
4
+ export {};
@@ -31,6 +31,8 @@ export interface MercatorCoordinate {
31
31
  /** Generic interface of Mapbox/Maplibre `Map` */
32
32
  export interface MapInstance {
33
33
  getCanvas(): HTMLCanvasElement;
34
+ /** MapLibre only */
35
+ getPixelRatio?: () => number;
34
36
  triggerRepaint(): void;
35
37
  on<T extends keyof MapEventType>(type: T, listener: (ev: MapEventType[T] & Object) => void): this;
36
38
  off<T extends keyof MapEventType>(type: T, listener: (ev: MapEventType[T] & Object) => void): this;
@@ -0,0 +1,5 @@
1
+ import { coordsToMatrix } from "./coords-to-matrix";
2
+ type Props = Parameters<typeof coordsToMatrix>[0];
3
+ /** calculate matrix from coordinates */
4
+ export declare function useCoordsToMatrix({ latitude, longitude, altitude, fromLngLat }: Props): import("three").Matrix4Tuple;
5
+ export {};
@@ -1,5 +1,7 @@
1
- import { coordsToMatrix } from "./coords-to-matrix";
2
- type Props = Parameters<typeof coordsToMatrix>[0];
3
- /** calculate matrix from coordinates */
4
- export declare function useCoords({ latitude, longitude, altitude, fromLngLat }: Props): import("three").Matrix4Tuple;
5
- export {};
1
+ import { RootState } from "@react-three/fiber";
2
+ import { UseBoundStore } from 'zustand';
3
+ import { Coords } from "../api/coords";
4
+ export declare function useCoords(): Coords;
5
+ export declare function useSetCoords({ longitude, latitude, altitude }: Coords): void;
6
+ export declare function useSetRootCoords(store: UseBoundStore<RootState>, { longitude, latitude, altitude }: Coords): void;
7
+ export declare function setCoords(store: UseBoundStore<RootState>, coords: Coords): void;
@@ -0,0 +1,22 @@
1
+ import { RootState } from "@react-three/fiber";
2
+ import { Matrix4Tuple } from "three";
3
+ import { UseBoundStore } from 'zustand';
4
+ import { FromLngLat, MapInstance } from "./generic-map";
5
+ export interface R3M<T extends MapInstance = MapInstance> {
6
+ /** Map provider */
7
+ map: T;
8
+ /** view projection matrix coming from the map provider */
9
+ viewProjMx: Matrix4Tuple;
10
+ fromLngLat: FromLngLat;
11
+ }
12
+ export declare function useR3M<T extends MapInstance>(): R3M<T>;
13
+ /** init `useR3M` hook */
14
+ export declare function useInitR3M<T extends MapInstance>(props: {
15
+ map: T;
16
+ fromLngLat: FromLngLat;
17
+ }): void;
18
+ export declare function initR3M<T extends MapInstance>({ store, ...props }: {
19
+ map: T;
20
+ fromLngLat: FromLngLat;
21
+ store: UseBoundStore<RootState>;
22
+ }): R3M<T>;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { CanvasProps } from "../api/canvas-props";
3
- /** react`-three-fiber` canvas inside `MapLibre` */
3
+ /** react`-three-fiber` canvas inside `Mapbox` */
4
4
  export declare const Canvas: import("react").NamedExoticComponent<CanvasProps>;
@@ -1,5 +1,4 @@
1
1
  import type { Map } from 'maplibre-gl';
2
- export * from './api/canvas-props';
3
- export * from './api/coordinates';
4
- export * from './maplibre/canvas';
5
- export declare const useMap: () => Map | undefined;
2
+ export * from './api';
3
+ export * from './mapbox/canvas';
4
+ export declare const useMap: () => Map;
@@ -1,10 +1,10 @@
1
1
  import { RenderProps } from "@react-three/fiber";
2
2
  import { PropsWithChildren } from "react";
3
- export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'frameloop'>, PropsWithChildren {
3
+ import { Coords } from "./coords";
4
+ export interface CanvasProps extends Coords, Omit<RenderProps<HTMLCanvasElement>, 'frameloop'>, PropsWithChildren {
4
5
  id?: string;
5
6
  beforeId?: string;
6
- longitude: number;
7
- latitude: number;
8
- altitude?: number;
9
7
  frameloop?: 'always' | 'demand';
8
+ /** render on a separated `<canvas>` that sits on top of the map provider */
9
+ overlay?: boolean;
10
10
  }
@@ -0,0 +1,4 @@
1
+ import { Vector3Tuple } from "three";
2
+ import { Coords } from "./coords";
3
+ /** converts geo coordinates `point` to a `Vector3Tuple` (represented in meters) using `origin` as the origin. */
4
+ export declare function coordsToVector3(point: Coords, origin: Coords): Vector3Tuple;
@@ -0,0 +1,5 @@
1
+ export interface Coords {
2
+ longitude: number;
3
+ latitude: number;
4
+ altitude?: number;
5
+ }
@@ -0,0 +1,5 @@
1
+ export * from './canvas-props';
2
+ export * from './coordinates';
3
+ export * from './near-coordinates';
4
+ export * from './coords';
5
+ export * from './coords-to-vector-3';
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { CoordinatesProps } from "./coordinates";
3
+ export declare const NearCoordinates: import("react").NamedExoticComponent<CoordinatesProps>;
@@ -1,2 +1,2 @@
1
1
  import { MapInstance } from "../core/generic-map";
2
- export declare const useMap: <T extends MapInstance = MapInstance>() => T | undefined;
2
+ export declare const useMap: <T extends MapInstance = MapInstance>() => T;
@@ -0,0 +1,11 @@
1
+ import { CanvasProps } from "../../api/canvas-props";
2
+ import { FromLngLat, MapInstance } from "../generic-map";
3
+ /** get all the properties that you need to render as a map `<Layer>` */
4
+ export declare function useCanvasInLayer(props: CanvasProps, fromLngLat: FromLngLat, map: MapInstance): {
5
+ readonly id: string | undefined;
6
+ readonly beforeId: string | undefined;
7
+ readonly onRemove: () => void;
8
+ readonly render: (_gl: WebGL2RenderingContext, projViewMx: number[]) => void;
9
+ readonly type: "custom";
10
+ readonly renderingMode: "3d";
11
+ };
@@ -0,0 +1,12 @@
1
+ import { RootState } from "@react-three/fiber";
2
+ import { Matrix4Tuple } from "three";
3
+ import { UseBoundStore } from "zustand";
4
+ import { MapInstance } from "../generic-map";
5
+ import { R3M } from "../use-r3m";
6
+ export declare function useRender({ map, origin, useThree, frameloop, r3m, }: {
7
+ map: MapInstance;
8
+ origin: Matrix4Tuple;
9
+ useThree: UseBoundStore<RootState>;
10
+ frameloop?: 'always' | 'demand';
11
+ r3m: R3M;
12
+ }): (_gl: WebGL2RenderingContext, projViewMx: number[]) => void;
@@ -0,0 +1,7 @@
1
+ import { CanvasProps } from "../../api/canvas-props";
2
+ import { FromLngLat, MapInstance } from "../generic-map";
3
+ export declare function useRoot(fromLngLat: FromLngLat, map: MapInstance, { frameloop, longitude, latitude, altitude, ...props }: CanvasProps): {
4
+ onRemove: () => void;
5
+ useThree: import("zustand").UseBoundStore<import("@react-three/fiber").RootState>;
6
+ r3m: import("../use-r3m").R3M<MapInstance>;
7
+ };
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { Matrix4Tuple } from "three";
3
+ import { CanvasProps } from "../../api/canvas-props";
4
+ import { FromLngLat, MapInstance } from "../generic-map";
5
+ interface CanvasPortalProps extends CanvasProps {
6
+ setOnRender: (callback: () => (mx: Matrix4Tuple) => void) => void;
7
+ map: MapInstance;
8
+ fromLngLat: FromLngLat;
9
+ }
10
+ export declare const CanvasPortal: import("react").NamedExoticComponent<CanvasPortalProps>;
11
+ export {};
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { Matrix4Tuple } from "three";
3
+ import { CanvasProps } from "../../api/canvas-props";
4
+ import { FromLngLat, MapInstance } from "../generic-map";
5
+ interface InitCanvasFCProps extends CanvasProps {
6
+ map: MapInstance;
7
+ setOnRender: (callback: () => (mx: Matrix4Tuple) => void) => void;
8
+ frameloop?: 'always' | 'demand';
9
+ fromLngLat: FromLngLat;
10
+ }
11
+ export declare const InitCanvasFC: import("react").NamedExoticComponent<InitCanvasFCProps>;
12
+ export {};
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { FromLngLat, MapInstance } from "../generic-map";
3
+ import { Coords } from "../../api/coords";
4
+ interface InitR3MProps extends Coords {
5
+ map: MapInstance;
6
+ fromLngLat: FromLngLat;
7
+ }
8
+ /** Initialises the `R3M` hook */
9
+ export declare const InitR3M: import("react").NamedExoticComponent<InitR3MProps>;
10
+ export {};
@@ -0,0 +1 @@
1
+ export type Render = (gl: WebGLRenderingContext, matrix: number[]) => void;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { Matrix4Tuple } from "three";
3
+ import { Coords } from "../../api/coords";
4
+ interface SyncCameraFCProps extends Coords {
5
+ setOnRender?: (callback: () => (mx: Matrix4Tuple) => void) => void;
6
+ /** on `useFrame` it will manually render (used by `<Coordinates>`) */
7
+ manualRender?: boolean;
8
+ onReady?: () => void;
9
+ mapCanvas: HTMLCanvasElement;
10
+ }
11
+ /** React Component (FC) to sync the Three camera with the map provider */
12
+ export declare const SyncCameraFC: import("react").NamedExoticComponent<SyncCameraFCProps>;
13
+ export {};
@@ -1,8 +1,6 @@
1
1
  import { FromLngLat } from "./generic-map";
2
+ import { Coords } from "../api/coords";
2
3
  /** calculate Matrix4 from coordinates */
3
- export declare function coordsToMatrix({ longitude, latitude, altitude, fromLngLat }: {
4
- longitude: number;
5
- latitude: number;
6
- altitude: number;
4
+ export declare function coordsToMatrix({ longitude, latitude, altitude, fromLngLat }: Coords & {
7
5
  fromLngLat: FromLngLat;
8
6
  }): import("three").Matrix4Tuple;
@@ -0,0 +1,4 @@
1
+ import { Canvas } from "@react-three/fiber";
2
+ type Events = Parameters<typeof Canvas>[0]['events'];
3
+ export declare const events: Events;
4
+ export {};
@@ -31,6 +31,8 @@ export interface MercatorCoordinate {
31
31
  /** Generic interface of Mapbox/Maplibre `Map` */
32
32
  export interface MapInstance {
33
33
  getCanvas(): HTMLCanvasElement;
34
+ /** MapLibre only */
35
+ getPixelRatio?: () => number;
34
36
  triggerRepaint(): void;
35
37
  on<T extends keyof MapEventType>(type: T, listener: (ev: MapEventType[T] & Object) => void): this;
36
38
  off<T extends keyof MapEventType>(type: T, listener: (ev: MapEventType[T] & Object) => void): this;
@@ -0,0 +1,5 @@
1
+ import { coordsToMatrix } from "./coords-to-matrix";
2
+ type Props = Parameters<typeof coordsToMatrix>[0];
3
+ /** calculate matrix from coordinates */
4
+ export declare function useCoordsToMatrix({ latitude, longitude, altitude, fromLngLat }: Props): import("three").Matrix4Tuple;
5
+ export {};
@@ -1,5 +1,7 @@
1
- import { coordsToMatrix } from "./coords-to-matrix";
2
- type Props = Parameters<typeof coordsToMatrix>[0];
3
- /** calculate matrix from coordinates */
4
- export declare function useCoords({ latitude, longitude, altitude, fromLngLat }: Props): import("three").Matrix4Tuple;
5
- export {};
1
+ import { RootState } from "@react-three/fiber";
2
+ import { UseBoundStore } from 'zustand';
3
+ import { Coords } from "../api/coords";
4
+ export declare function useCoords(): Coords;
5
+ export declare function useSetCoords({ longitude, latitude, altitude }: Coords): void;
6
+ export declare function useSetRootCoords(store: UseBoundStore<RootState>, { longitude, latitude, altitude }: Coords): void;
7
+ export declare function setCoords(store: UseBoundStore<RootState>, coords: Coords): void;
@@ -0,0 +1,22 @@
1
+ import { RootState } from "@react-three/fiber";
2
+ import { Matrix4Tuple } from "three";
3
+ import { UseBoundStore } from 'zustand';
4
+ import { FromLngLat, MapInstance } from "./generic-map";
5
+ export interface R3M<T extends MapInstance = MapInstance> {
6
+ /** Map provider */
7
+ map: T;
8
+ /** view projection matrix coming from the map provider */
9
+ viewProjMx: Matrix4Tuple;
10
+ fromLngLat: FromLngLat;
11
+ }
12
+ export declare function useR3M<T extends MapInstance>(): R3M<T>;
13
+ /** init `useR3M` hook */
14
+ export declare function useInitR3M<T extends MapInstance>(props: {
15
+ map: T;
16
+ fromLngLat: FromLngLat;
17
+ }): void;
18
+ export declare function initR3M<T extends MapInstance>({ store, ...props }: {
19
+ map: T;
20
+ fromLngLat: FromLngLat;
21
+ store: UseBoundStore<RootState>;
22
+ }): R3M<T>;
@@ -1,5 +1,4 @@
1
1
  import type { Map } from 'mapbox-gl';
2
- export * from './api/canvas-props';
3
- export * from './api/coordinates';
2
+ export * from './api';
4
3
  export * from './mapbox/canvas';
5
- export declare const useMap: () => Map | undefined;
4
+ export declare const useMap: () => Map;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-three-map",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "Use react-three-fiber inside MapLibre and Mapbox",
5
5
  "main": "dist/cjs/main.js",
6
6
  "module": "dist/es/main.mjs",
@@ -29,18 +29,21 @@
29
29
  "build:stories": "yarn ladle build",
30
30
  "test": "yarn vitest"
31
31
  },
32
- "dependencies": {},
32
+ "dependencies": {
33
+ "@turf/turf": "^7.0.0-alpha.2"
34
+ },
33
35
  "devDependencies": {
34
36
  "@changesets/cli": "^2.26.1",
35
37
  "@ladle/react": "^2.13.0",
36
- "@react-three/drei": "^9.88.0",
37
- "@react-three/fiber": "^8.14.5",
38
+ "@react-three/drei": "^9.92.3",
39
+ "@react-three/fiber": "^8.15.12",
40
+ "@react-three/postprocessing": "^2.15.11",
38
41
  "@types/luxon": "^3.3.1",
39
42
  "@types/node": "^20.3.1",
40
43
  "@types/react": "^18.0.37",
41
44
  "@types/react-dom": "^18.0.11",
42
45
  "@types/suncalc": "^1.9.0",
43
- "@types/three": "^0.154.0",
46
+ "@types/three": "^0.159.0",
44
47
  "@types/tz-lookup": "^6.1.0",
45
48
  "@typescript-eslint/eslint-plugin": "^5.59.11",
46
49
  "@typescript-eslint/parser": "^5.59.11",
@@ -54,14 +57,14 @@
54
57
  "leva": "^0.9.35",
55
58
  "luxon": "^3.3.0",
56
59
  "mapbox-gl": "^2.15.0",
57
- "maplibre-gl": "^3.1.0",
60
+ "maplibre-gl": "^3.2.0",
58
61
  "react": "^18.2.0",
59
62
  "react-dom": "^18.2.0",
60
63
  "react-map-gl": "^7.1.0",
61
64
  "suncalc": "^1.9.0",
62
65
  "suspend-react": "^0.1.3",
63
- "three": "^0.154.0",
64
- "three-stdlib": "^2.23.8",
66
+ "three": "^0.159.0",
67
+ "three-stdlib": "^2.28.7",
65
68
  "typescript": "~5.0.2",
66
69
  "tz-lookup": "^6.1.25",
67
70
  "vite": "^4.4.4",
@@ -71,7 +74,7 @@
71
74
  "peerDependencies": {
72
75
  "@react-three/fiber": ">=8.13",
73
76
  "mapbox-gl": ">=2.15",
74
- "maplibre-gl": ">=3.1",
77
+ "maplibre-gl": ">=3.2",
75
78
  "react": ">=18.0",
76
79
  "react-map-gl": ">=7.1",
77
80
  "three": ">=0.133"
@@ -7,23 +7,30 @@
7
7
  },
8
8
  "dependencies": {
9
9
  "@ladle/react": "^2.16.0",
10
- "@react-three/drei": "^9.78.2",
11
- "@react-three/fiber": "^8.13.5",
10
+ "@react-three/drei": "^9.92.3",
11
+ "@react-three/fiber": "^8.15.12",
12
+ "@react-three/postprocessing": "^2.15.11",
13
+ "@types/luxon": "^3.3.7",
14
+ "@types/suncalc": "^1.9.2",
15
+ "@types/tz-lookup": "^6.1.2",
12
16
  "leva": "^0.9.35",
17
+ "luxon": "^3.4.4",
13
18
  "mapbox-gl": "^2.15.0",
14
19
  "maplibre-gl": "^3.2.0",
15
20
  "react": "^18.2.0",
16
21
  "react-dom": "^18.2.0",
17
22
  "react-map-gl": "^7.1.2",
18
23
  "react-three-map": "^0.6.1",
19
- "three": "^0.154.0",
20
- "three-stdlib": "^2.23.13",
24
+ "suncalc": "^1.9.0",
25
+ "three": "^0.159.0",
26
+ "three-stdlib": "^2.28.7",
27
+ "tz-lookup": "^6.1.25",
21
28
  "web-ifc-three": "^0.0.125"
22
29
  },
23
30
  "devDependencies": {
24
31
  "@types/react": "^18.2.15",
25
32
  "@types/react-dom": "^18.2.7",
26
- "@types/three": "^0.154.0",
33
+ "@types/three": "^0.159.0",
27
34
  "@vitejs/plugin-react": "^4.0.3",
28
35
  "typescript": "^5.1.6",
29
36
  "vite": "^4.4.4"