react-three-map 1.0.0-next.0 → 1.0.0-next.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 (81) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/main.js +41 -1259
  3. package/dist/es/main10.mjs +10 -71
  4. package/dist/es/main10.mjs.map +1 -1
  5. package/dist/es/main11.mjs +35 -12
  6. package/dist/es/main11.mjs.map +1 -1
  7. package/dist/es/main12.mjs +13 -12
  8. package/dist/es/main12.mjs.map +1 -1
  9. package/dist/es/main13.mjs +24 -42
  10. package/dist/es/main13.mjs.map +1 -1
  11. package/dist/es/main14.mjs +4 -13
  12. package/dist/es/main14.mjs.map +1 -1
  13. package/dist/es/main15.mjs +31 -22
  14. package/dist/es/main15.mjs.map +1 -1
  15. package/dist/es/main16.mjs +23 -87
  16. package/dist/es/main16.mjs.map +1 -1
  17. package/dist/es/main17.mjs +94 -14
  18. package/dist/es/main17.mjs.map +1 -1
  19. package/dist/es/main18.mjs +62 -22
  20. package/dist/es/main18.mjs.map +1 -1
  21. package/dist/es/main19.mjs +20 -27
  22. package/dist/es/main19.mjs.map +1 -1
  23. package/dist/es/main20.mjs +23 -8
  24. package/dist/es/main20.mjs.map +1 -1
  25. package/dist/es/main21.mjs +16 -34
  26. package/dist/es/main21.mjs.map +1 -1
  27. package/dist/es/main22.mjs +80 -12
  28. package/dist/es/main22.mjs.map +1 -1
  29. package/dist/es/main3.mjs +4 -13
  30. package/dist/es/main3.mjs.map +1 -1
  31. package/dist/es/main4.mjs +3 -3
  32. package/dist/es/main5.mjs +1 -1
  33. package/dist/es/main6.mjs +1 -1
  34. package/dist/es/main7.mjs +1 -1
  35. package/dist/es/main8.mjs +20 -87
  36. package/dist/es/main8.mjs.map +1 -1
  37. package/dist/es/main9.mjs +24 -80
  38. package/dist/es/main9.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/stories/package.json +1 -1
  41. package/stories/yarn.lock +19 -14
  42. package/dist/es/main23.mjs +0 -26
  43. package/dist/es/main23.mjs.map +0 -1
  44. package/dist/es/main24.mjs +0 -5
  45. package/dist/es/main24.mjs.map +0 -1
  46. package/dist/es/main25.mjs +0 -33
  47. package/dist/es/main25.mjs.map +0 -1
  48. package/dist/es/main26.mjs +0 -27
  49. package/dist/es/main26.mjs.map +0 -1
  50. package/dist/es/main27.mjs +0 -98
  51. package/dist/es/main27.mjs.map +0 -1
  52. package/dist/es/main28.mjs +0 -66
  53. package/dist/es/main28.mjs.map +0 -1
  54. package/dist/es/main29.mjs +0 -23
  55. package/dist/es/main29.mjs.map +0 -1
  56. package/dist/es/main30.mjs +0 -27
  57. package/dist/es/main30.mjs.map +0 -1
  58. package/dist/es/main31.mjs +0 -19
  59. package/dist/es/main31.mjs.map +0 -1
  60. package/dist/es/main32.mjs +0 -83
  61. package/dist/es/main32.mjs.map +0 -1
  62. package/dist/es/main33.mjs +0 -501
  63. package/dist/es/main33.mjs.map +0 -1
  64. package/dist/es/main34.mjs +0 -90
  65. package/dist/es/main34.mjs.map +0 -1
  66. package/dist/es/main35.mjs +0 -6
  67. package/dist/es/main35.mjs.map +0 -1
  68. package/dist/es/main36.mjs +0 -26
  69. package/dist/es/main36.mjs.map +0 -1
  70. package/dist/es/main37.mjs +0 -19
  71. package/dist/es/main37.mjs.map +0 -1
  72. package/dist/es/main38.mjs +0 -50
  73. package/dist/es/main38.mjs.map +0 -1
  74. package/dist/es/main39.mjs +0 -31
  75. package/dist/es/main39.mjs.map +0 -1
  76. package/dist/es/main40.mjs +0 -9
  77. package/dist/es/main40.mjs.map +0 -1
  78. package/dist/es/main41.mjs +0 -62
  79. package/dist/es/main41.mjs.map +0 -1
  80. package/dist/es/main42.mjs +0 -42
  81. package/dist/es/main42.mjs.map +0 -1
@@ -1,18 +1,98 @@
1
- import * as React from "react";
2
- import { useContext, useMemo } from "react";
3
- import { MapContext } from "./main8.mjs";
4
- const MountedMapsContext = React.createContext(null);
5
- function useMap() {
6
- var _a;
7
- const maps = (_a = useContext(MountedMapsContext)) == null ? void 0 : _a.maps;
8
- const currentMap = useContext(MapContext);
9
- const mapsWithCurrent = useMemo(() => {
10
- return { ...maps, current: currentMap == null ? void 0 : currentMap.map };
11
- }, [maps, currentMap]);
12
- return mapsWithCurrent;
1
+ import { jsx, Fragment } from "react/jsx-runtime";
2
+ import { createRoot, _roots } from "@react-three/fiber";
3
+ import { useState, useEffect } from "react";
4
+ import { events } from "./main20.mjs";
5
+ import { setCoords, useSetRootCoords } from "./main15.mjs";
6
+ import { useFunction } from "./main10.mjs";
7
+ import { initR3M } from "./main13.mjs";
8
+ function useRoot(fromLngLat, map, { frameloop, longitude, latitude, altitude, ...props }) {
9
+ const [{ root, useThree, canvas, r3m }] = useState(() => {
10
+ const canvas2 = map.getCanvas();
11
+ const gl = canvas2.getContext("webgl2") || canvas2.getContext("webgl");
12
+ const root2 = createRoot(canvas2);
13
+ root2.configure({
14
+ dpr: window.devicePixelRatio,
15
+ events,
16
+ ...props,
17
+ frameloop: "never",
18
+ gl: {
19
+ context: gl,
20
+ autoClear: false,
21
+ antialias: true,
22
+ ...props == null ? void 0 : props.gl
23
+ },
24
+ onCreated: (state) => {
25
+ state.gl.forceContextLoss = () => {
26
+ };
27
+ },
28
+ camera: {
29
+ matrixAutoUpdate: false,
30
+ near: 0
31
+ },
32
+ size: {
33
+ width: canvas2.clientWidth,
34
+ height: canvas2.clientHeight,
35
+ top: canvas2.offsetTop,
36
+ left: canvas2.offsetLeft,
37
+ updateStyle: false,
38
+ ...props == null ? void 0 : props.size
39
+ }
40
+ });
41
+ const store = _roots.get(canvas2).store;
42
+ const r3m2 = initR3M({ map, fromLngLat, store });
43
+ setCoords(store, { longitude, latitude, altitude });
44
+ if (frameloop === "demand") {
45
+ store.setState({
46
+ frameloop,
47
+ invalidate: () => {
48
+ map.triggerRepaint();
49
+ }
50
+ });
51
+ }
52
+ return { root: root2, useThree: store, map, canvas: canvas2, r3m: r3m2 };
53
+ });
54
+ const onResize = useFunction(() => {
55
+ const { setDpr, setSize } = useThree.getState();
56
+ setDpr(window.devicePixelRatio);
57
+ setSize(
58
+ canvas.clientWidth,
59
+ canvas.clientHeight,
60
+ false,
61
+ canvas.offsetTop,
62
+ canvas.offsetLeft
63
+ );
64
+ });
65
+ const onRemove = useFunction(() => {
66
+ root.unmount();
67
+ });
68
+ useSetRootCoords(useThree, { longitude, latitude, altitude });
69
+ useEffect(() => {
70
+ if (frameloop !== "demand")
71
+ return;
72
+ const setState = useThree.setState;
73
+ const { invalidate } = useThree.getState();
74
+ setState({
75
+ frameloop,
76
+ invalidate: () => {
77
+ map.triggerRepaint();
78
+ }
79
+ });
80
+ return () => {
81
+ setState({ frameloop: "never", invalidate });
82
+ };
83
+ }, [frameloop]);
84
+ useEffect(() => {
85
+ map.on("resize", onResize);
86
+ return () => {
87
+ map.off("resize", onResize);
88
+ };
89
+ }, []);
90
+ useEffect(() => {
91
+ root.render(/* @__PURE__ */ jsx(Fragment, { children: props.children }));
92
+ }, [props.children]);
93
+ return { onRemove, useThree, r3m };
13
94
  }
14
95
  export {
15
- MountedMapsContext,
16
- useMap
96
+ useRoot
17
97
  };
18
98
  //# sourceMappingURL=main17.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main17.mjs","sources":["../../node_modules/@vis.gl/react-mapbox/dist/components/use-map.js"],"sourcesContent":["import * as React from 'react';\nimport { useState, useCallback, useMemo, useContext } from 'react';\nimport { MapContext } from \"./map.js\";\nexport const MountedMapsContext = React.createContext(null);\nexport const MapProvider = props => {\n const [maps, setMaps] = useState({});\n const onMapMount = useCallback((map, id = 'default') => {\n setMaps(currMaps => {\n if (id === 'current') {\n throw new Error(\"'current' cannot be used as map id\");\n }\n if (currMaps[id]) {\n throw new Error(`Multiple maps with the same id: ${id}`);\n }\n return { ...currMaps, [id]: map };\n });\n }, []);\n const onMapUnmount = useCallback((id = 'default') => {\n setMaps(currMaps => {\n if (currMaps[id]) {\n const nextMaps = { ...currMaps };\n delete nextMaps[id];\n return nextMaps;\n }\n return currMaps;\n });\n }, []);\n return (React.createElement(MountedMapsContext.Provider, { value: {\n maps,\n onMapMount,\n onMapUnmount\n } }, props.children));\n};\nexport function useMap() {\n const maps = useContext(MountedMapsContext)?.maps;\n const currentMap = useContext(MapContext);\n const mapsWithCurrent = useMemo(() => {\n return { ...maps, current: currentMap?.map };\n }, [maps, currentMap]);\n return mapsWithCurrent;\n}\n//# sourceMappingURL=use-map.js.map"],"names":[],"mappings":";;;AAGY,MAAC,qBAAqB,MAAM,cAAc,IAAI;AA8BnD,SAAS,SAAS;;AACrB,QAAM,QAAO,gBAAW,kBAAkB,MAA7B,mBAAgC;AAC7C,QAAM,aAAa,WAAW,UAAU;AACxC,QAAM,kBAAkB,QAAQ,MAAM;AAClC,WAAO,EAAE,GAAG,MAAM,SAAS,yCAAY,IAAG;AAAA,EAClD,GAAO,CAAC,MAAM,UAAU,CAAC;AACrB,SAAO;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"main17.mjs","sources":["../../src/core/canvas-in-layer/use-root.tsx"],"sourcesContent":["import { _roots, createRoot } from \"@react-three/fiber\";\nimport { useEffect, useState } from \"react\";\nimport { CanvasProps } from \"../../api/canvas-props\";\nimport { events } from \"../events\";\nimport { FromLngLat, MapInstance } from \"../generic-map\";\nimport { setCoords, useSetRootCoords } from \"../use-coords\";\nimport { useFunction } from \"../use-function\";\nimport { initR3M } from \"../use-r3m\";\n\nexport function useRoot(\n fromLngLat: FromLngLat,\n map: MapInstance,\n { frameloop, longitude, latitude, altitude, ...props }: CanvasProps\n) {\n\n const [{ root, useThree, canvas, r3m }] = useState(() => {\n const canvas = map.getCanvas();\n const gl = (canvas.getContext('webgl2') || canvas.getContext('webgl')) as WebGLRenderingContext;\n\n const root = createRoot(canvas);\n root.configure({\n dpr: window.devicePixelRatio,\n events,\n ...props,\n frameloop: 'never',\n gl: {\n context: gl,\n autoClear: false,\n antialias: true,\n ...props?.gl,\n },\n onCreated: (state) => {\n state.gl.forceContextLoss = () => { }; // eslint-disable-line @typescript-eslint/no-empty-function\n },\n camera: {\n matrixAutoUpdate: false,\n near: 0,\n },\n size: {\n width: canvas.clientWidth,\n height: canvas.clientHeight,\n top: canvas.offsetTop,\n left: canvas.offsetLeft,\n updateStyle: false,\n ...props?.size,\n },\n });\n\n const store = _roots.get(canvas)!.store; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n const r3m = initR3M({ map, fromLngLat, store });\n setCoords(store, {longitude, latitude, altitude});\n\n if (frameloop === 'demand') {\n store.setState({\n frameloop,\n invalidate: () => {\n map.triggerRepaint();\n },\n })\n }\n\n return { root, useThree: store, map, canvas, r3m }\n\n })\n\n const onResize = useFunction(() => {\n\n const { setDpr, setSize } = useThree.getState();\n\n setDpr(window.devicePixelRatio);\n\n setSize(\n canvas.clientWidth,\n canvas.clientHeight,\n false,\n canvas.offsetTop,\n canvas.offsetLeft,\n );\n\n })\n\n const onRemove = useFunction(() => {\n root.unmount();\n })\n\n useSetRootCoords(useThree, {longitude, latitude, altitude});\n\n // on `frameloop` change\n useEffect(() => {\n if (frameloop !== 'demand') return;\n const setState = useThree.setState;\n const { invalidate } = useThree.getState();\n setState({\n frameloop,\n invalidate: () => {\n map.triggerRepaint();\n }\n });\n return () => {\n setState({ frameloop: 'never', invalidate })\n }\n }, [frameloop]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // on mount / unmount\n useEffect(() => {\n map.on('resize', onResize);\n return () => {\n map.off('resize', onResize)\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // root.render\n useEffect(() => {\n root.render(<>\n {props.children}\n </>);\n }, [props.children]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return { onRemove, useThree, r3m };\n}"],"names":["canvas","root","r3m"],"mappings":";;;;;;;AASgB,SAAA,QACd,YACA,KACA,EAAE,WAAW,WAAW,UAAU,UAAU,GAAG,SAC/C;AAEM,QAAA,CAAC,EAAE,MAAM,UAAU,QAAQ,IAAK,CAAA,IAAI,SAAS,MAAM;AACjDA,UAAAA,UAAS,IAAI;AACnB,UAAM,KAAMA,QAAO,WAAW,QAAQ,KAAKA,QAAO,WAAW,OAAO;AAE9DC,UAAAA,QAAO,WAAWD,OAAM;AAC9BC,UAAK,UAAU;AAAA,MACb,KAAK,OAAO;AAAA,MACZ;AAAA,MACA,GAAG;AAAA,MACH,WAAW;AAAA,MACX,IAAI;AAAA,QACF,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,QACX,GAAG,+BAAO;AAAA,MACZ;AAAA,MACA,WAAW,CAAC,UAAU;AACd,cAAA,GAAG,mBAAmB,MAAM;AAAA,QAAA;AAAA,MACpC;AAAA,MACA,QAAQ;AAAA,QACN,kBAAkB;AAAA,QAClB,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,OAAOD,QAAO;AAAA,QACd,QAAQA,QAAO;AAAA,QACf,KAAKA,QAAO;AAAA,QACZ,MAAMA,QAAO;AAAA,QACb,aAAa;AAAA,QACb,GAAG,+BAAO;AAAA,MACZ;AAAA,IAAA,CACD;AAED,UAAM,QAAQ,OAAO,IAAIA,OAAM,EAAG;AAElC,UAAME,OAAM,QAAQ,EAAE,KAAK,YAAY,OAAO;AAC9C,cAAU,OAAO,EAAC,WAAW,UAAU,SAAS,CAAA;AAEhD,QAAI,cAAc,UAAU;AAC1B,YAAM,SAAS;AAAA,QACb;AAAA,QACA,YAAY,MAAM;AAChB,cAAI,eAAe;AAAA,QACrB;AAAA,MAAA,CACD;AAAA,IACH;AAEO,WAAA,EAAE,MAAAD,OAAM,UAAU,OAAO,KAAK,QAAAD,SAAQ,KAAAE;EAAI,CAElD;AAEK,QAAA,WAAW,YAAY,MAAM;AAEjC,UAAM,EAAE,QAAQ,QAAQ,IAAI,SAAS,SAAS;AAE9C,WAAO,OAAO,gBAAgB;AAE9B;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,EACT,CAED;AAEK,QAAA,WAAW,YAAY,MAAM;AACjC,SAAK,QAAQ;AAAA,EAAA,CACd;AAED,mBAAiB,UAAU,EAAC,WAAW,UAAU,SAAS,CAAA;AAG1D,YAAU,MAAM;AACd,QAAI,cAAc;AAAU;AAC5B,UAAM,WAAW,SAAS;AAC1B,UAAM,EAAE,WAAA,IAAe,SAAS,SAAS;AAChC,aAAA;AAAA,MACP;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,eAAe;AAAA,MACrB;AAAA,IAAA,CACD;AACD,WAAO,MAAM;AACX,eAAS,EAAE,WAAW,SAAS,WAAY,CAAA;AAAA,IAAA;AAAA,EAC7C,GACC,CAAC,SAAS,CAAC;AAGd,YAAU,MAAM;AACV,QAAA,GAAG,UAAU,QAAQ;AACzB,WAAO,MAAM;AACP,UAAA,IAAI,UAAU,QAAQ;AAAA,IAAA;AAAA,EAE9B,GAAG,CAAE,CAAA;AAGL,YAAU,MAAM;AACd,SAAK,OAAO,oBAAA,UAAA,EACT,UAAM,MAAA,SACT,CAAA,CAAG;AAAA,EAAA,GACF,CAAC,MAAM,QAAQ,CAAC;AAEZ,SAAA,EAAE,UAAU,UAAU;AAC/B;"}
@@ -1,26 +1,66 @@
1
- import { useCoordsToMatrix } from "./main22.mjs";
2
- import { useRender } from "./main26.mjs";
3
- import { useRoot } from "./main27.mjs";
4
- function useCanvasInLayer(props, fromLngLat, map) {
5
- const { latitude, longitude, altitude, frameloop } = props;
6
- const origin = useCoordsToMatrix({
7
- latitude,
8
- longitude,
9
- altitude,
10
- fromLngLat
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { Canvas } from "@react-three/fiber";
3
+ import { memo, useState } from "react";
4
+ import { events } from "./main20.mjs";
5
+ import { useFunction } from "./main10.mjs";
6
+ import { InitR3M } from "./main21.mjs";
7
+ import { SyncCameraFC } from "./main22.mjs";
8
+ const CanvasPortal = memo(({
9
+ children,
10
+ latitude,
11
+ longitude,
12
+ altitude,
13
+ setOnRender,
14
+ map,
15
+ fromLngLat,
16
+ ...props
17
+ }) => {
18
+ const mapCanvas = map.getCanvas();
19
+ const eventSource = mapCanvas.parentElement;
20
+ const [ready, setReady] = useState(false);
21
+ const onReady = useFunction(() => {
22
+ setReady(true);
11
23
  });
12
- const { onRemove, useThree, r3m } = useRoot(fromLngLat, map, props);
13
- const render = useRender({ origin, frameloop, useThree, map, r3m });
14
- return {
15
- id: props.id,
16
- beforeId: props.beforeId,
17
- onRemove,
18
- render,
19
- type: "custom",
20
- renderingMode: "3d"
21
- };
22
- }
24
+ return /* @__PURE__ */ jsxs(
25
+ Canvas,
26
+ {
27
+ camera: {
28
+ matrixAutoUpdate: false,
29
+ matrixWorldAutoUpdate: false
30
+ },
31
+ events,
32
+ eventSource,
33
+ ...props,
34
+ gl: { autoClear: false, ...props.gl },
35
+ children: [
36
+ /* @__PURE__ */ jsx(
37
+ InitR3M,
38
+ {
39
+ map,
40
+ fromLngLat,
41
+ latitude,
42
+ longitude,
43
+ altitude
44
+ }
45
+ ),
46
+ /* @__PURE__ */ jsx(
47
+ SyncCameraFC,
48
+ {
49
+ latitude,
50
+ longitude,
51
+ altitude,
52
+ setOnRender,
53
+ onReady,
54
+ map
55
+ }
56
+ ),
57
+ ready && children
58
+ ]
59
+ }
60
+ );
61
+ });
62
+ CanvasPortal.displayName = "CanvasPortal";
23
63
  export {
24
- useCanvasInLayer
64
+ CanvasPortal
25
65
  };
26
66
  //# sourceMappingURL=main18.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main18.mjs","sources":["../../src/core/canvas-in-layer/use-canvas-in-layer.tsx"],"sourcesContent":["import { CanvasProps } from \"../../api/canvas-props\";\nimport { FromLngLat, MapInstance } from \"../generic-map\";\nimport { useCoordsToMatrix } from \"../use-coords-to-matrix\";\nimport { useRender } from \"./use-render\";\nimport { useRoot } from \"./use-root\";\n\n/** get all the properties that you need to render as a map `<Layer>` */\nexport function useCanvasInLayer(props: CanvasProps,fromLngLat: FromLngLat, map: MapInstance) {\n\n const {latitude, longitude, altitude, frameloop } = props;\n\n const origin = useCoordsToMatrix({\n latitude, longitude, altitude, fromLngLat,\n });\n\n const { onRemove, useThree, r3m } = useRoot(fromLngLat, map, props);\n \n const render = useRender({origin, frameloop, useThree, map, r3m});\n \n return {\n id: props.id,\n beforeId: props.beforeId,\n onRemove,\n render,\n type: 'custom',\n renderingMode: '3d'\n } as const\n\n}"],"names":[],"mappings":";;;AAOgB,SAAA,iBAAiB,OAAmB,YAAwB,KAAkB;AAE5F,QAAM,EAAC,UAAU,WAAW,UAAU,cAAc;AAElD,QAAM,SAAS,kBAAkB;AAAA,IAC/B;AAAA,IAAU;AAAA,IAAW;AAAA,IAAU;AAAA,EAAA,CAChC;AAEK,QAAA,EAAE,UAAU,UAAU,IAAA,IAAQ,QAAQ,YAAY,KAAK,KAAK;AAE5D,QAAA,SAAS,UAAU,EAAC,QAAQ,WAAW,UAAU,KAAK,KAAI;AAEzD,SAAA;AAAA,IACL,IAAI,MAAM;AAAA,IACV,UAAU,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,eAAe;AAAA,EAAA;AAGrB;"}
1
+ {"version":3,"file":"main18.mjs","sources":["../../src/core/canvas-overlay/canvas-portal.tsx"],"sourcesContent":["import { Canvas } from \"@react-three/fiber\";\nimport { memo, useState } from \"react\";\nimport { Matrix4Tuple } from \"three\";\nimport { CanvasProps } from \"../../api/canvas-props\";\nimport { events } from \"../events\";\nimport { FromLngLat, MapInstance } from \"../generic-map\";\nimport { useFunction } from \"../use-function\";\nimport { InitR3M } from \"./init-r3m\";\nimport { SyncCameraFC } from \"./sync-camera-fc\";\n\ninterface CanvasPortalProps extends CanvasProps {\n setOnRender: (callback: () => (mx: Matrix4Tuple) => void) => void,\n map: MapInstance,\n fromLngLat: FromLngLat,\n}\n\nexport const CanvasPortal = memo<CanvasPortalProps>(({\n children, latitude, longitude, altitude,\n setOnRender, map, fromLngLat, ...props\n}) => {\n\n const mapCanvas = map.getCanvas();\n const eventSource = mapCanvas.parentElement!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n const [ready, setReady] = useState(false);\n\n const onReady = useFunction(() => {\n setReady(true);\n })\n\n return <Canvas\n camera={{\n matrixAutoUpdate: false,\n matrixWorldAutoUpdate: false,\n }}\n events={events}\n eventSource={eventSource}\n {...props}\n gl={{ autoClear: false, ...props.gl }}\n >\n <InitR3M\n map={map}\n fromLngLat={fromLngLat}\n latitude={latitude}\n longitude={longitude}\n altitude={altitude}\n />\n <SyncCameraFC\n latitude={latitude}\n longitude={longitude}\n altitude={altitude}\n setOnRender={setOnRender}\n onReady={onReady}\n map={map}\n />\n {ready && children}\n </Canvas>\n})\nCanvasPortal.displayName = 'CanvasPortal';\n"],"names":[],"mappings":";;;;;;;AAgBa,MAAA,eAAe,KAAwB,CAAC;AAAA,EACnD;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAC/B;AAAA,EAAa;AAAA,EAAK;AAAA,EAAY,GAAG;AACnC,MAAM;AAEE,QAAA,YAAY,IAAI;AACtB,QAAM,cAAc,UAAU;AAE9B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AAElC,QAAA,UAAU,YAAY,MAAM;AAChC,aAAS,IAAI;AAAA,EAAA,CACd;AAEM,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACN,QAAQ;AAAA,QACN,kBAAkB;AAAA,QAClB,uBAAuB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MACJ,IAAI,EAAE,WAAW,OAAO,GAAG,MAAM,GAAG;AAAA,MAEpC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QACC,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAEd,CAAC;AACD,aAAa,cAAc;"}
@@ -1,30 +1,23 @@
1
- import { jsx, Fragment } from "react/jsx-runtime";
2
- import { memo, useState, useEffect } from "react";
3
- import { createPortal } from "react-dom";
4
- import { CanvasPortal } from "./main28.mjs";
5
- const InitCanvasFC = memo((props) => {
6
- const canvas = props.map.getCanvas();
7
- const [el] = useState(() => {
8
- const el2 = document.createElement("div");
9
- el2.style.position = "absolute";
10
- el2.style.top = "0";
11
- el2.style.bottom = "0";
12
- el2.style.left = "0";
13
- el2.style.right = "0";
14
- el2.style.pointerEvents = "none";
15
- return el2;
16
- });
17
- useEffect(() => {
18
- const parent = canvas.parentElement;
19
- parent.appendChild(el);
20
- return () => {
21
- parent.removeChild(el);
22
- };
23
- }, []);
24
- return /* @__PURE__ */ jsx(Fragment, { children: createPortal(/* @__PURE__ */ jsx(CanvasPortal, { ...props }), el) });
25
- });
26
- InitCanvasFC.displayName = "InitCanvasFC";
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({
8
+ longitude,
9
+ latitude,
10
+ altitude,
11
+ fromLngLat
12
+ }) {
13
+ const center = fromLngLat([longitude, latitude], altitude);
14
+ const scaleUnit = center.meterInMercatorCoordinateUnits();
15
+ pos.set(center.x, center.y, center.z || 0);
16
+ scale.set(scaleUnit, -scaleUnit, scaleUnit);
17
+ quat.setFromEuler(euler.set(-Math.PI * 0.5, 0, 0));
18
+ return m4.compose(pos, quat, scale).toArray();
19
+ }
27
20
  export {
28
- InitCanvasFC
21
+ coordsToMatrix
29
22
  };
30
23
  //# sourceMappingURL=main19.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main19.mjs","sources":["../../src/core/canvas-overlay/init-canvas-fc.tsx"],"sourcesContent":["import { memo, useEffect, useState } from \"react\";\nimport { createPortal } from 'react-dom';\nimport { Matrix4Tuple } from \"three\";\nimport { CanvasProps } from \"../../api/canvas-props\";\nimport { FromLngLat, MapInstance } from \"../generic-map\";\nimport { CanvasPortal } from \"./canvas-portal\";\n\ninterface InitCanvasFCProps extends CanvasProps {\n map: MapInstance,\n setOnRender: (callback: () => (mx: Matrix4Tuple) => void) => void,\n frameloop?: 'always' | 'demand',\n fromLngLat: FromLngLat,\n}\nexport const InitCanvasFC = memo<InitCanvasFCProps>((props) => {\n const canvas = props.map.getCanvas() // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n const [el] = useState(() => {\n const el = document.createElement('div');\n el.style.position = 'absolute';\n el.style.top = '0';\n el.style.bottom = '0';\n el.style.left = '0';\n el.style.right = '0';\n el.style.pointerEvents = 'none';\n return el\n })\n\n useEffect(() => {\n const parent = canvas.parentElement!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n parent.appendChild(el);\n return () => {\n parent.removeChild(el);\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n return <>\n {createPortal((\n <CanvasPortal {...props} />\n ), el)}\n </>\n})\nInitCanvasFC.displayName = 'InitCanvasFC';\n"],"names":["el"],"mappings":";;;;AAaa,MAAA,eAAe,KAAwB,CAAC,UAAU;AACvD,QAAA,SAAS,MAAM,IAAI,UAAU;AAEnC,QAAM,CAAC,EAAE,IAAI,SAAS,MAAM;AACpBA,UAAAA,MAAK,SAAS,cAAc,KAAK;AACvCA,QAAG,MAAM,WAAW;AACpBA,QAAG,MAAM,MAAM;AACfA,QAAG,MAAM,SAAS;AAClBA,QAAG,MAAM,OAAO;AAChBA,QAAG,MAAM,QAAQ;AACjBA,QAAG,MAAM,gBAAgB;AAClBA,WAAAA;AAAAA,EAAA,CACR;AAED,YAAU,MAAM;AACd,UAAM,SAAS,OAAO;AACtB,WAAO,YAAY,EAAE;AACrB,WAAO,MAAM;AACX,aAAO,YAAY,EAAE;AAAA,IAAA;AAAA,EAEzB,GAAG,CAAE,CAAA;AACE,SAAA,oBAAA,UAAA,EACJ,uBACE,oBAAA,cAAA,EAAc,GAAG,MAAO,CAAA,GACxB,EAAE,EACP,CAAA;AACF,CAAC;AACD,aAAa,cAAc;"}
1
+ {"version":3,"file":"main19.mjs","sources":["../../src/core/coords-to-matrix.ts"],"sourcesContent":["import { Euler, Matrix4, Quaternion, Vector3 } from \"three\";\nimport { FromLngLat } from \"./generic-map\";\nimport { Coords } from \"../api/coords\";\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({\n longitude, latitude, altitude, fromLngLat\n}: Coords & { fromLngLat: FromLngLat }) {\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":";AAIA,MAAM,OAAO,IAAI;AACjB,MAAM,QAAQ,IAAI;AAClB,MAAM,MAAM,IAAI;AAChB,MAAM,QAAQ,IAAI;AAClB,MAAM,KAAK,IAAI;AAGR,SAAS,eAAe;AAAA,EAC7B;AAAA,EAAW;AAAA,EAAU;AAAA,EAAU;AACjC,GAAwC;AACtC,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,12 +1,27 @@
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
- }, []);
1
+ import { events as events$1 } from "@react-three/fiber";
2
+ import { Matrix4 } from "three";
3
+ const projViewInv = new Matrix4();
4
+ const events = (store) => {
5
+ const originalEvents = events$1(store);
6
+ return {
7
+ ...originalEvents,
8
+ connect: (target) => {
9
+ if (!originalEvents.connect)
10
+ return;
11
+ originalEvents.connect(target.parentElement);
12
+ },
13
+ compute: (event, state) => {
14
+ state.pointer.x = event.offsetX / state.size.width * 2 - 1;
15
+ state.pointer.y = 1 - event.offsetY / state.size.height * 2;
16
+ if (state.camera.userData.projByViewInv)
17
+ projViewInv.fromArray(state.camera.userData.projByViewInv);
18
+ state.raycaster.camera = state.camera;
19
+ state.raycaster.ray.origin.setScalar(0).applyMatrix4(projViewInv);
20
+ state.raycaster.ray.direction.set(state.pointer.x, state.pointer.y, 1).applyMatrix4(projViewInv).sub(state.raycaster.ray.origin).normalize();
21
+ }
22
+ };
8
23
  };
9
24
  export {
10
- useFunction
25
+ events
11
26
  };
12
27
  //# sourceMappingURL=main20.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main20.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
+ {"version":3,"file":"main20.mjs","sources":["../../src/core/events.ts"],"sourcesContent":["import { Canvas, events as fiberEvents } from \"@react-three/fiber\";\nimport { Matrix4 } from \"three\";\n\n/** projection * view matrix inverted */\nconst projViewInv = new Matrix4()\n\ntype Events = Parameters<typeof Canvas>[0]['events'];\n\nexport const events: Events = (store) => {\n const originalEvents = fiberEvents(store);\n return {\n ...originalEvents,\n connect: target => {\n if (!originalEvents.connect) return;\n originalEvents.connect(target.parentElement!); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n },\n compute: (event, state) => {\n\n state.pointer.x = (event.offsetX / state.size.width) * 2 - 1;\n state.pointer.y = 1 - (event.offsetY / state.size.height) * 2;\n\n if (state.camera.userData.projByViewInv) projViewInv.fromArray(state.camera.userData.projByViewInv);\n\n state.raycaster.camera = state.camera;\n state.raycaster.ray.origin.setScalar(0).applyMatrix4(projViewInv);\n state.raycaster.ray.direction\n .set(state.pointer.x, state.pointer.y, 1)\n .applyMatrix4(projViewInv)\n .sub(state.raycaster.ray.origin)\n .normalize();\n\n },\n };\n};"],"names":["fiberEvents"],"mappings":";;AAIA,MAAM,cAAc,IAAI;AAIX,MAAA,SAAiB,CAAC,UAAU;AACjC,QAAA,iBAAiBA,SAAY,KAAK;AACjC,SAAA;AAAA,IACL,GAAG;AAAA,IACH,SAAS,CAAU,WAAA;AACjB,UAAI,CAAC,eAAe;AAAS;AACd,qBAAA,QAAQ,OAAO,aAAc;AAAA,IAC9C;AAAA,IACA,SAAS,CAAC,OAAO,UAAU;AAEzB,YAAM,QAAQ,IAAK,MAAM,UAAU,MAAM,KAAK,QAAS,IAAI;AAC3D,YAAM,QAAQ,IAAI,IAAK,MAAM,UAAU,MAAM,KAAK,SAAU;AAExD,UAAA,MAAM,OAAO,SAAS;AAAe,oBAAY,UAAU,MAAM,OAAO,SAAS,aAAa;AAE5F,YAAA,UAAU,SAAS,MAAM;AAC/B,YAAM,UAAU,IAAI,OAAO,UAAU,CAAC,EAAE,aAAa,WAAW;AAC1D,YAAA,UAAU,IAAI,UACjB,IAAI,MAAM,QAAQ,GAAG,MAAM,QAAQ,GAAG,CAAC,EACvC,aAAa,WAAW,EACxB,IAAI,MAAM,UAAU,IAAI,MAAM,EAC9B;IAEL;AAAA,EAAA;AAEJ;"}
@@ -1,37 +1,19 @@
1
- import { Matrix4, Vector3 } from "three";
2
- const originMx = new Matrix4();
3
- const projByView = new Matrix4();
4
- const projByViewInv = new Matrix4();
5
- const fwd = new Vector3();
6
- function syncCamera(camera, origin, mapCamMx) {
7
- projByView.fromArray(mapCamMx).multiply(originMx.fromArray(origin));
8
- projByViewInv.copy(projByView).invert();
9
- updateCamera(camera, projByViewInv);
10
- camera.updateMatrix();
11
- camera.updateMatrixWorld(true);
12
- camera.projectionMatrix.copy(camera.matrix).premultiply(projByView);
13
- camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();
14
- camera.far = calculateFar(
15
- camera.matrix.elements[10],
16
- camera.matrix.elements[14],
17
- camera.near
18
- );
19
- camera.userData.projByView = projByView.toArray();
20
- camera.userData.projByViewInv = projByViewInv.toArray();
21
- }
22
- const updateCamera = (target, projByViewInv2) => {
23
- target.position.setScalar(0).applyMatrix4(projByViewInv2);
24
- target.up.set(0, -1, 0).applyMatrix4(projByViewInv2).negate().add(target.position).normalize();
25
- fwd.set(0, 0, 1).applyMatrix4(projByViewInv2);
26
- target.lookAt(fwd);
27
- };
28
- function calculateFar(c, d, near) {
29
- const numerator = d * (c - 1);
30
- const denominator = c * near + near;
31
- const far = numerator / denominator;
32
- return far;
33
- }
1
+ import { jsx, Fragment } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import { useInitR3M } from "./main13.mjs";
4
+ import { useSetCoords } from "./main15.mjs";
5
+ const InitR3M = memo(({
6
+ longitude,
7
+ latitude,
8
+ altitude,
9
+ ...props
10
+ }) => {
11
+ useInitR3M(props);
12
+ useSetCoords({ longitude, latitude, altitude });
13
+ return /* @__PURE__ */ jsx(Fragment, {});
14
+ });
15
+ InitR3M.displayName = "InitR3M";
34
16
  export {
35
- syncCamera
17
+ InitR3M
36
18
  };
37
19
  //# sourceMappingURL=main21.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main21.mjs","sources":["../../src/core/sync-camera.ts"],"sourcesContent":["import { Matrix4, Matrix4Tuple, Object3D, PerspectiveCamera, Vector3 } from \"three\";\n\nconst originMx = new Matrix4();\n\n/** projection * view matrix */\nconst projByView = new Matrix4();\n/** projection * view matrix inverted */\nconst projByViewInv = new Matrix4();\n\n/** forward */\nconst fwd = new Vector3();\n\n\nexport function syncCamera(camera: PerspectiveCamera, origin: Matrix4Tuple, mapCamMx: Matrix4Tuple) {\n\n projByView\n .fromArray(mapCamMx)\n .multiply(originMx.fromArray(origin));\n projByViewInv\n .copy(projByView)\n .invert();\n\n updateCamera(camera, projByViewInv);\n camera.updateMatrix();\n camera.updateMatrixWorld(true); \n\n camera.projectionMatrix.copy(camera.matrix).premultiply(projByView);\n camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();\n\n camera.far = calculateFar(\n camera.matrix.elements[10], camera.matrix.elements[14], camera.near\n )\n\n camera.userData.projByView = projByView.toArray();\n camera.userData.projByViewInv = projByViewInv.toArray();\n\n}\n\nconst updateCamera = (target: Object3D, projByViewInv: Matrix4) => {\n\n target.position\n .setScalar(0)\n .applyMatrix4(projByViewInv)\n\n target.up\n .set(0, -1, 0)\n .applyMatrix4(projByViewInv)\n .negate()\n .add(target.position)\n .normalize()\n\n fwd\n .set(0, 0, 1)\n .applyMatrix4(projByViewInv)\n\n target.lookAt(fwd);\n\n}\n\nfunction calculateFar(c: number, d: number, near: number): number {\n const numerator = d * (c - 1);\n const denominator = c * near + near;\n const far = numerator / denominator;\n return far;\n}"],"names":["projByViewInv"],"mappings":";AAEA,MAAM,WAAW,IAAI;AAGrB,MAAM,aAAa,IAAI;AAEvB,MAAM,gBAAgB,IAAI;AAG1B,MAAM,MAAM,IAAI;AAGA,SAAA,WAAW,QAA2B,QAAsB,UAAwB;AAElG,aACG,UAAU,QAAQ,EAClB,SAAS,SAAS,UAAU,MAAM,CAAC;AAEnC,gBAAA,KAAK,UAAU,EACf,OAAO;AAEV,eAAa,QAAQ,aAAa;AAClC,SAAO,aAAa;AACpB,SAAO,kBAAkB,IAAI;AAE7B,SAAO,iBAAiB,KAAK,OAAO,MAAM,EAAE,YAAY,UAAU;AAClE,SAAO,wBAAwB,KAAK,OAAO,gBAAgB,EAAE;AAE7D,SAAO,MAAM;AAAA,IACX,OAAO,OAAO,SAAS,EAAE;AAAA,IAAG,OAAO,OAAO,SAAS,EAAE;AAAA,IAAG,OAAO;AAAA,EAAA;AAG1D,SAAA,SAAS,aAAa,WAAW,QAAQ;AACzC,SAAA,SAAS,gBAAgB,cAAc,QAAQ;AAExD;AAEA,MAAM,eAAe,CAAC,QAAkBA,mBAA2B;AAEjE,SAAO,SACJ,UAAU,CAAC,EACX,aAAaA,cAAa;AAE7B,SAAO,GACJ,IAAI,GAAG,IAAI,CAAC,EACZ,aAAaA,cAAa,EAC1B,SACA,IAAI,OAAO,QAAQ,EACnB;AAEH,MACG,IAAI,GAAG,GAAG,CAAC,EACX,aAAaA,cAAa;AAE7B,SAAO,OAAO,GAAG;AAEnB;AAEA,SAAS,aAAa,GAAW,GAAW,MAAsB;AAC1D,QAAA,YAAY,KAAK,IAAI;AACrB,QAAA,cAAc,IAAI,OAAO;AAC/B,QAAM,MAAM,YAAY;AACjB,SAAA;AACT;"}
1
+ {"version":3,"file":"main21.mjs","sources":["../../src/core/canvas-overlay/init-r3m.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport { FromLngLat, MapInstance } from \"../generic-map\";\nimport { useInitR3M } from \"../use-r3m\";\nimport { useSetCoords } from \"../use-coords\";\nimport { Coords } from \"../../api/coords\";\n\ninterface InitR3MProps extends Coords {\n map: MapInstance,\n fromLngLat: FromLngLat,\n}\n\n/** Initialises the `R3M` hook */\nexport const InitR3M = memo<InitR3MProps>(({\n longitude, latitude, altitude, ...props\n}) => {\n useInitR3M(props);\n useSetCoords({longitude, latitude, altitude});\n return <></>\n})\nInitR3M.displayName = 'InitR3M';"],"names":[],"mappings":";;;;AAYa,MAAA,UAAU,KAAmB,CAAC;AAAA,EACzC;AAAA,EAAW;AAAA,EAAU;AAAA,EAAU,GAAG;AACpC,MAAM;AACJ,aAAW,KAAK;AAChB,eAAa,EAAC,WAAW,UAAU,SAAS,CAAA;AAC5C,SAAS,oBAAA,UAAA,CAAA,CAAA;AACX,CAAC;AACD,QAAQ,cAAc;"}
@@ -1,15 +1,83 @@
1
- import { useMemo } from "react";
2
- import { coordsToMatrix } from "./main29.mjs";
3
- function useCoordsToMatrix({ latitude, longitude, altitude, fromLngLat }) {
4
- const m4 = useMemo(() => coordsToMatrix({
5
- latitude,
6
- longitude,
7
- altitude,
8
- fromLngLat
9
- }), [latitude, longitude, altitude, fromLngLat]);
10
- return m4;
11
- }
1
+ import { jsx, Fragment } from "react/jsx-runtime";
2
+ import { useThree, useFrame } from "@react-three/fiber";
3
+ import { memo, useRef, useMemo, useEffect, useLayoutEffect } from "react";
4
+ import { syncCamera } from "./main11.mjs";
5
+ import { useCoordsToMatrix } from "./main12.mjs";
6
+ import { useFunction } from "./main10.mjs";
7
+ import { useR3M } from "./main13.mjs";
8
+ const SyncCameraFC = memo(({
9
+ latitude,
10
+ longitude,
11
+ altitude = 0,
12
+ setOnRender,
13
+ manualRender,
14
+ onReady,
15
+ map
16
+ }) => {
17
+ const mapCanvas = map.getCanvas();
18
+ const r3m = useR3M();
19
+ const camRef = useRef(null);
20
+ const camera = useThree((s) => s.camera);
21
+ const gl = useThree((s) => s.gl);
22
+ const threeCanvas = useThree((s) => s.gl.domElement);
23
+ const scene = useThree((s) => s.scene);
24
+ const advance = useThree((s) => s.advance);
25
+ const setSize = useThree((s) => s.setSize);
26
+ const set = useThree((s) => s.set);
27
+ const origin = useCoordsToMatrix({ latitude, longitude, altitude, fromLngLat: r3m.fromLngLat });
28
+ const ready = useRef(false);
29
+ const triggerRepaint = useMemo(() => map.triggerRepaint, [map]);
30
+ const mapPaintRequests = useRef(0);
31
+ const triggerRepaintOff = useFunction(() => {
32
+ mapPaintRequests.current++;
33
+ });
34
+ useFrame(() => {
35
+ syncCamera(camera, origin, r3m.viewProjMx);
36
+ if (manualRender)
37
+ gl.render(scene, camera);
38
+ map.triggerRepaint = triggerRepaint;
39
+ if (mapPaintRequests.current > 0) {
40
+ mapPaintRequests.current = 0;
41
+ map.triggerRepaint();
42
+ }
43
+ }, -Infinity);
44
+ const onRender = useFunction((viewProjMx) => {
45
+ map.triggerRepaint = triggerRepaintOff;
46
+ if (threeCanvas.width !== mapCanvas.width || threeCanvas.height !== mapCanvas.height) {
47
+ setSize(
48
+ mapCanvas.clientWidth,
49
+ mapCanvas.clientHeight,
50
+ true,
51
+ mapCanvas.offsetTop,
52
+ mapCanvas.offsetLeft
53
+ );
54
+ }
55
+ r3m.viewProjMx = viewProjMx;
56
+ if (!ready.current && onReady) {
57
+ ready.current = true;
58
+ onReady();
59
+ }
60
+ advance(Date.now() * 1e-3, true);
61
+ });
62
+ useEffect(() => {
63
+ setOnRender && setOnRender(() => onRender);
64
+ }, [setOnRender, onRender]);
65
+ useLayoutEffect(() => {
66
+ if (!manualRender)
67
+ return;
68
+ set({ camera: camRef.current });
69
+ }, []);
70
+ return /* @__PURE__ */ jsx(Fragment, { children: manualRender && /* @__PURE__ */ jsx(
71
+ "perspectiveCamera",
72
+ {
73
+ ref: camRef,
74
+ matrixAutoUpdate: false,
75
+ matrixWorldAutoUpdate: false
76
+ }
77
+ ) });
78
+ });
79
+ SyncCameraFC.displayName = "SyncCameraFC";
12
80
  export {
13
- useCoordsToMatrix
81
+ SyncCameraFC
14
82
  };
15
83
  //# sourceMappingURL=main22.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"main22.mjs","sources":["../../src/core/use-coords-to-matrix.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { coordsToMatrix } from \"./coords-to-matrix\";\n\ntype Props = Parameters<typeof coordsToMatrix>[0];\n\n/** calculate matrix from coordinates */\nexport function useCoordsToMatrix({latitude, longitude, altitude, fromLngLat}: Props) {\n const m4 = useMemo(() => coordsToMatrix({\n latitude, longitude, altitude, fromLngLat,\n }), [latitude, longitude, altitude, fromLngLat]);\n\n return m4;\n}"],"names":[],"mappings":";;AAMO,SAAS,kBAAkB,EAAC,UAAU,WAAW,UAAU,cAAoB;AAC9E,QAAA,KAAK,QAAQ,MAAM,eAAe;AAAA,IACtC;AAAA,IAAU;AAAA,IAAW;AAAA,IAAU;AAAA,EAAA,CAChC,GAAG,CAAC,UAAU,WAAW,UAAU,UAAU,CAAC;AAExC,SAAA;AACT;"}
1
+ {"version":3,"file":"main22.mjs","sources":["../../src/core/canvas-overlay/sync-camera-fc.tsx"],"sourcesContent":["import { useFrame, useThree } from \"@react-three/fiber\";\nimport { memo, useEffect, useLayoutEffect, useMemo, useRef } from \"react\";\nimport { Matrix4Tuple, PerspectiveCamera } from \"three\";\nimport { Coords } from \"../../api/coords\";\nimport { MapInstance } from \"../generic-map\";\nimport { syncCamera } from \"../sync-camera\";\nimport { useCoordsToMatrix } from \"../use-coords-to-matrix\";\nimport { useFunction } from \"../use-function\";\nimport { useR3M } from \"../use-r3m\";\n\ninterface SyncCameraFCProps extends Coords {\n setOnRender?: (callback: () => (mx: Matrix4Tuple) => void) => void,\n /** on `useFrame` it will manually render (used by `<Coordinates>`) */\n manualRender?: boolean,\n onReady?: () => void,\n map: MapInstance,\n}\n\n/** React Component (FC) to sync the Three camera with the map provider */\nexport const SyncCameraFC = memo<SyncCameraFCProps>(({\n latitude, longitude, altitude = 0, setOnRender, manualRender, onReady, map\n}) => {\n\n const mapCanvas = map.getCanvas();\n\n const r3m = useR3M();\n\n const camRef = useRef<PerspectiveCamera>(null);\n\n const camera = useThree(s => s.camera) as PerspectiveCamera;\n const gl = useThree(s => s.gl);\n const threeCanvas = useThree(s => s.gl.domElement);\n const scene = useThree(s => s.scene);\n const advance = useThree(s => s.advance);\n const setSize = useThree(s => s.setSize);\n const set = useThree(s => s.set);\n\n const origin = useCoordsToMatrix({ latitude, longitude, altitude, fromLngLat: r3m.fromLngLat });\n\n const ready = useRef(false);\n\n const triggerRepaint = useMemo(() => map.triggerRepaint, [map]);\n const mapPaintRequests = useRef(0);\n const triggerRepaintOff = useFunction(() => {\n mapPaintRequests.current++;\n })\n\n useFrame(() => {\n syncCamera(camera, origin, r3m.viewProjMx)\n\n if (manualRender) gl.render(scene, camera);\n\n map.triggerRepaint = triggerRepaint;\n if (mapPaintRequests.current > 0) {\n mapPaintRequests.current = 0;\n map.triggerRepaint();\n }\n }, -Infinity)\n\n const onRender = useFunction((viewProjMx: Matrix4Tuple) => {\n map.triggerRepaint = triggerRepaintOff;\n\n if (threeCanvas.width !== mapCanvas.width || threeCanvas.height !== mapCanvas.height) {\n setSize(\n mapCanvas.clientWidth,\n mapCanvas.clientHeight,\n true,\n mapCanvas.offsetTop,\n mapCanvas.offsetLeft,\n );\n }\n\n r3m.viewProjMx = viewProjMx;\n if (!ready.current && onReady) {\n ready.current = true;\n onReady();\n }\n advance(Date.now() * .001, true);\n })\n\n useEffect(() => {\n setOnRender && setOnRender(() => onRender)\n }, [setOnRender, onRender])\n\n useLayoutEffect(() => {\n if (!manualRender) return;\n set({ camera: camRef.current! }); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <>\n {manualRender && <perspectiveCamera\n ref={camRef}\n matrixAutoUpdate={false}\n matrixWorldAutoUpdate={false}\n />}\n </>\n})\n\nSyncCameraFC.displayName = 'SyncCameraFC';"],"names":[],"mappings":";;;;;;;AAmBa,MAAA,eAAe,KAAwB,CAAC;AAAA,EACnD;AAAA,EAAU;AAAA,EAAW,WAAW;AAAA,EAAG;AAAA,EAAa;AAAA,EAAc;AAAA,EAAS;AACzE,MAAM;AAEE,QAAA,YAAY,IAAI;AAEtB,QAAM,MAAM;AAEN,QAAA,SAAS,OAA0B,IAAI;AAE7C,QAAM,SAAS,SAAS,CAAK,MAAA,EAAE,MAAM;AACrC,QAAM,KAAK,SAAS,CAAK,MAAA,EAAE,EAAE;AAC7B,QAAM,cAAc,SAAS,CAAK,MAAA,EAAE,GAAG,UAAU;AACjD,QAAM,QAAQ,SAAS,CAAK,MAAA,EAAE,KAAK;AACnC,QAAM,UAAU,SAAS,CAAK,MAAA,EAAE,OAAO;AACvC,QAAM,UAAU,SAAS,CAAK,MAAA,EAAE,OAAO;AACvC,QAAM,MAAM,SAAS,CAAK,MAAA,EAAE,GAAG;AAEzB,QAAA,SAAS,kBAAkB,EAAE,UAAU,WAAW,UAAU,YAAY,IAAI,WAAA,CAAY;AAExF,QAAA,QAAQ,OAAO,KAAK;AAE1B,QAAM,iBAAiB,QAAQ,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC;AACxD,QAAA,mBAAmB,OAAO,CAAC;AAC3B,QAAA,oBAAoB,YAAY,MAAM;AACzB,qBAAA;AAAA,EAAA,CAClB;AAED,WAAS,MAAM;AACF,eAAA,QAAQ,QAAQ,IAAI,UAAU;AAErC,QAAA;AAAiB,SAAA,OAAO,OAAO,MAAM;AAEzC,QAAI,iBAAiB;AACjB,QAAA,iBAAiB,UAAU,GAAG;AAChC,uBAAiB,UAAU;AAC3B,UAAI,eAAe;AAAA,IACrB;AAAA,EAAA,GACC,SAAS;AAEN,QAAA,WAAW,YAAY,CAAC,eAA6B;AACzD,QAAI,iBAAiB;AAErB,QAAI,YAAY,UAAU,UAAU,SAAS,YAAY,WAAW,UAAU,QAAQ;AACpF;AAAA,QACE,UAAU;AAAA,QACV,UAAU;AAAA,QACV;AAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAEd;AAEA,QAAI,aAAa;AACb,QAAA,CAAC,MAAM,WAAW,SAAS;AAC7B,YAAM,UAAU;AACR;IACV;AACA,YAAQ,KAAK,IAAQ,IAAA,MAAM,IAAI;AAAA,EAAA,CAChC;AAED,YAAU,MAAM;AACC,mBAAA,YAAY,MAAM,QAAQ;AAAA,EAAA,GACxC,CAAC,aAAa,QAAQ,CAAC;AAE1B,kBAAgB,MAAM;AACpB,QAAI,CAAC;AAAc;AACnB,QAAI,EAAE,QAAQ,OAAO,QAAU,CAAA;AAAA,EACjC,GAAG,CAAE,CAAA;AAEL,yCACG,UAAgB,gBAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAChB,KAAK;AAAA,MACL,kBAAkB;AAAA,MAClB,uBAAuB;AAAA,IAAA;AAAA,EAE3B,EAAA,CAAA;AACF,CAAC;AAED,aAAa,cAAc;"}
package/dist/es/main3.mjs CHANGED
@@ -2,20 +2,11 @@ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
2
  import { extend } from "@react-three/fiber";
3
3
  import { MercatorCoordinate } from "mapbox-gl";
4
4
  import { memo, useState } from "react";
5
- import "./main8.mjs";
6
- import "./main9.mjs";
7
- import "./main10.mjs";
8
- import "./main11.mjs";
9
- import "./main12.mjs";
10
- import "./main13.mjs";
11
- import "./main14.mjs";
12
- import "./main15.mjs";
13
- import { Layer } from "./main16.mjs";
14
- import { useMap } from "./main17.mjs";
5
+ import { useMap, Layer } from "react-map-gl/mapbox";
15
6
  import * as THREE from "three";
16
- import { useCanvasInLayer } from "./main18.mjs";
17
- import { InitCanvasFC } from "./main19.mjs";
18
- import { useFunction } from "./main20.mjs";
7
+ import { useCanvasInLayer } from "./main8.mjs";
8
+ import { InitCanvasFC } from "./main9.mjs";
9
+ import { useFunction } from "./main10.mjs";
19
10
  extend(THREE);
20
11
  const fromLngLat = MercatorCoordinate.fromLngLat;
21
12
  const Canvas = memo(({ overlay, ...props }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"main3.mjs","sources":["../../src/mapbox/canvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { extend } from \"@react-three/fiber\";\nimport { MercatorCoordinate } from \"mapbox-gl\";\nimport { memo, useState } from \"react\";\nimport { Layer, useMap } from \"react-map-gl/mapbox\";\nimport * as THREE from \"three\";\nimport { Matrix4Tuple } from \"three\";\nimport { CanvasProps } from \"../api/canvas-props\";\nimport { useCanvasInLayer } from \"../core/canvas-in-layer/use-canvas-in-layer\";\nimport { InitCanvasFC } from \"../core/canvas-overlay/init-canvas-fc\";\nimport { Render } from \"../core/canvas-overlay/render\";\nimport { MapInstance } from \"../core/generic-map\";\nimport { useFunction } from \"../core/use-function\";\n\nextend(THREE);\n\nconst fromLngLat = MercatorCoordinate.fromLngLat\n\n/** `react-three-fiber` canvas inside `Mapbox` */\nexport const Canvas = memo<CanvasProps>(({ overlay, ...props }) => {\n\n const map = useMap().current!.getMap(); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n return <>\n {overlay && <CanvasOverlay map={map} {...props} />}\n {!overlay && <CanvasInLayer map={map} {...props} />}\n </>\n})\nCanvas.displayName = 'Canvas'\n\ninterface CanvasPropsAndMap extends CanvasProps {\n map: MapInstance;\n}\n\nconst CanvasInLayer = memo<CanvasPropsAndMap>(({ map, ...props }) => {\n const layerProps = useCanvasInLayer(props, fromLngLat, map);\n /* @ts-ignore */ // eslint-disable-line @typescript-eslint/ban-ts-comment\n return <Layer {...layerProps} />\n})\nCanvasInLayer.displayName = 'CanvasInLayer';\n\nconst CanvasOverlay = memo<CanvasPropsAndMap>(({ map, id, beforeId, ...props }) => {\n const [onRender, setOnRender] = useState<(mx: Matrix4Tuple) => void>();\n\n const render = useFunction<Render>((_gl, mx) => {\n if (!onRender) return;\n onRender(mx as Matrix4Tuple);\n })\n\n return <>\n {/* @ts-ignore */}\n <Layer id={id} beforeId={beforeId} type=\"custom\" render={render} />\n <InitCanvasFC {...props}\n setOnRender={setOnRender}\n map={map}\n fromLngLat={fromLngLat}\n />\n </>\n})\nCanvasInLayer.displayName = 'CanvasInLayer';"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAcA,OAAO,KAAK;AAEZ,MAAM,aAAa,mBAAmB;AAG/B,MAAM,SAAS,KAAkB,CAAC,EAAE,SAAS,GAAG,YAAY;AAEjE,QAAM,MAAM,OAAA,EAAS,QAAS,OAAO;AAErC,SACG,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,WAAY,oBAAA,eAAA,EAAc,KAAW,GAAG,MAAO,CAAA;AAAA,IAC/C,CAAC,WAAW,oBAAC,eAAc,EAAA,KAAW,GAAG,OAAO;AAAA,EACnD,EAAA,CAAA;AACF,CAAC;AACD,OAAO,cAAc;AAMrB,MAAM,gBAAgB,KAAwB,CAAC,EAAE,KAAK,GAAG,YAAY;AACnE,QAAM,aAAa,iBAAiB,OAAO,YAAY,GAAG;AAEnD,SAAA,oBAAC,OAAO,EAAA,GAAG,WAAY,CAAA;AAChC,CAAC;AACD,cAAc,cAAc;AAE5B,MAAM,gBAAgB,KAAwB,CAAC,EAAE,KAAK,IAAI,UAAU,GAAG,YAAY;AACjF,QAAM,CAAC,UAAU,WAAW,IAAI,SAAqC;AAErE,QAAM,SAAS,YAAoB,CAAC,KAAK,OAAO;AAC9C,QAAI,CAAC;AAAU;AACf,aAAS,EAAkB;AAAA,EAAA,CAC5B;AAED,SAEE,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,oBAAC,OAAM,EAAA,IAAQ,UAAoB,MAAK,UAAS,QAAgB;AAAA,IACjE;AAAA,MAAC;AAAA,MAAA;AAAA,QAAc,GAAG;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AACF,CAAC;AACD,cAAc,cAAc;"}
1
+ {"version":3,"file":"main3.mjs","sources":["../../src/mapbox/canvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { extend } from \"@react-three/fiber\";\nimport { MercatorCoordinate } from \"mapbox-gl\";\nimport { memo, useState } from \"react\";\nimport { Layer, useMap } from \"react-map-gl/mapbox\";\nimport * as THREE from \"three\";\nimport { Matrix4Tuple } from \"three\";\nimport { CanvasProps } from \"../api/canvas-props\";\nimport { useCanvasInLayer } from \"../core/canvas-in-layer/use-canvas-in-layer\";\nimport { InitCanvasFC } from \"../core/canvas-overlay/init-canvas-fc\";\nimport { Render } from \"../core/canvas-overlay/render\";\nimport { MapInstance } from \"../core/generic-map\";\nimport { useFunction } from \"../core/use-function\";\n\nextend(THREE);\n\nconst fromLngLat = MercatorCoordinate.fromLngLat\n\n/** `react-three-fiber` canvas inside `Mapbox` */\nexport const Canvas = memo<CanvasProps>(({ overlay, ...props }) => {\n\n const map = useMap().current!.getMap(); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n return <>\n {overlay && <CanvasOverlay map={map} {...props} />}\n {!overlay && <CanvasInLayer map={map} {...props} />}\n </>\n})\nCanvas.displayName = 'Canvas'\n\ninterface CanvasPropsAndMap extends CanvasProps {\n map: MapInstance;\n}\n\nconst CanvasInLayer = memo<CanvasPropsAndMap>(({ map, ...props }) => {\n const layerProps = useCanvasInLayer(props, fromLngLat, map);\n /* @ts-ignore */ // eslint-disable-line @typescript-eslint/ban-ts-comment\n return <Layer {...layerProps} />\n})\nCanvasInLayer.displayName = 'CanvasInLayer';\n\nconst CanvasOverlay = memo<CanvasPropsAndMap>(({ map, id, beforeId, ...props }) => {\n const [onRender, setOnRender] = useState<(mx: Matrix4Tuple) => void>();\n\n const render = useFunction<Render>((_gl, mx) => {\n if (!onRender) return;\n onRender(mx as Matrix4Tuple);\n })\n\n return <>\n {/* @ts-ignore */}\n <Layer id={id} beforeId={beforeId} type=\"custom\" render={render} />\n <InitCanvasFC {...props}\n setOnRender={setOnRender}\n map={map}\n fromLngLat={fromLngLat}\n />\n </>\n})\nCanvasInLayer.displayName = 'CanvasInLayer';"],"names":[],"mappings":";;;;;;;;;AAcA,OAAO,KAAK;AAEZ,MAAM,aAAa,mBAAmB;AAG/B,MAAM,SAAS,KAAkB,CAAC,EAAE,SAAS,GAAG,YAAY;AAEjE,QAAM,MAAM,OAAA,EAAS,QAAS,OAAO;AAErC,SACG,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,WAAY,oBAAA,eAAA,EAAc,KAAW,GAAG,MAAO,CAAA;AAAA,IAC/C,CAAC,WAAW,oBAAC,eAAc,EAAA,KAAW,GAAG,OAAO;AAAA,EACnD,EAAA,CAAA;AACF,CAAC;AACD,OAAO,cAAc;AAMrB,MAAM,gBAAgB,KAAwB,CAAC,EAAE,KAAK,GAAG,YAAY;AACnE,QAAM,aAAa,iBAAiB,OAAO,YAAY,GAAG;AAEnD,SAAA,oBAAC,OAAO,EAAA,GAAG,WAAY,CAAA;AAChC,CAAC;AACD,cAAc,cAAc;AAE5B,MAAM,gBAAgB,KAAwB,CAAC,EAAE,KAAK,IAAI,UAAU,GAAG,YAAY;AACjF,QAAM,CAAC,UAAU,WAAW,IAAI,SAAqC;AAErE,QAAM,SAAS,YAAoB,CAAC,KAAK,OAAO;AAC9C,QAAI,CAAC;AAAU;AACf,aAAS,EAAkB;AAAA,EAAA,CAC5B;AAED,SAEE,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,oBAAC,OAAM,EAAA,IAAQ,UAAoB,MAAK,UAAS,QAAgB;AAAA,IACjE;AAAA,MAAC;AAAA,MAAA;AAAA,QAAc,GAAG;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AACF,CAAC;AACD,cAAc,cAAc;"}
package/dist/es/main4.mjs CHANGED
@@ -2,9 +2,9 @@ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
2
  import { createPortal, useThree, useFrame } from "@react-three/fiber";
3
3
  import { memo, useState, useRef, useLayoutEffect } from "react";
4
4
  import { Scene } from "three";
5
- import { syncCamera } from "./main21.mjs";
6
- import { useCoordsToMatrix } from "./main22.mjs";
7
- import { useR3M } from "./main23.mjs";
5
+ import { syncCamera } from "./main11.mjs";
6
+ import { useCoordsToMatrix } from "./main12.mjs";
7
+ import { useR3M } from "./main13.mjs";
8
8
  const Coordinates = memo(({
9
9
  latitude,
10
10
  longitude,
package/dist/es/main5.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { MathUtils } from "three";
2
- import { earthRadius } from "./main24.mjs";
2
+ import { earthRadius } from "./main14.mjs";
3
3
  const mercatorScaleLookup = {};
4
4
  function getMercatorScale(lat) {
5
5
  const index = Math.round(lat * 1e3);
package/dist/es/main6.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
- import { useCoords } from "./main25.mjs";
3
+ import { useCoords } from "./main15.mjs";
4
4
  import { coordsToVector3 } from "./main5.mjs";
5
5
  const NearCoordinates = memo(({ children, ...coords }) => {
6
6
  const { latitude, longitude, altitude } = useCoords();