react-three-map 0.2.1 → 0.3.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 (83) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +14 -13
  3. package/dist/cjs/main.js.js +1 -1318
  4. package/dist/es/main.js2.mjs +24 -20
  5. package/dist/es/main.js2.mjs.map +1 -1
  6. package/dist/es/main.js3.mjs.map +1 -1
  7. package/dist/es/main.js4.mjs +12 -24
  8. package/dist/es/main.js4.mjs.map +1 -1
  9. package/dist/es/main.js5.mjs +55 -23532
  10. package/dist/es/main.js5.mjs.map +1 -1
  11. package/dist/es/main.js6.mjs +13 -2
  12. package/dist/es/main.js6.mjs.map +1 -1
  13. package/dist/es/main.js7.mjs +53 -2
  14. package/dist/es/main.js7.mjs.map +1 -1
  15. package/dist/es/main.js8.mjs +6 -57
  16. package/dist/es/main.js8.mjs.map +1 -1
  17. package/dist/maplibre/cjs/main.js.js +1 -1
  18. package/dist/maplibre/es/main.js2.mjs +24 -20
  19. package/dist/maplibre/es/main.js2.mjs.map +1 -1
  20. package/dist/maplibre/es/main.js3.mjs.map +1 -1
  21. package/dist/maplibre/es/main.js4.mjs +12 -24
  22. package/dist/maplibre/es/main.js4.mjs.map +1 -1
  23. package/dist/maplibre/es/main.js5.mjs.map +1 -1
  24. package/dist/maplibre/es/main.js6.mjs.map +1 -1
  25. package/dist/maplibre/es/main.js7.mjs.map +1 -1
  26. package/dist/maplibre/es/main.js8.mjs.map +1 -1
  27. package/example-mapbox/package.json +29 -0
  28. package/example-mapbox/sandbox.config.json +3 -0
  29. package/example-mapbox/src/canvas.basic.stories.tsx +69 -0
  30. package/example-mapbox/src/comparison.stories.tsx +24 -0
  31. package/example-mapbox/src/html-on-top.stories.tsx +24 -0
  32. package/example-mapbox/src/my-scene.tsx +96 -0
  33. package/example-mapbox/src/render-on-demand.stories.tsx +32 -0
  34. package/example-mapbox/src/story-map.tsx +46 -0
  35. package/example-mapbox/src/vite-env.d.ts +1 -0
  36. package/example-mapbox/tsconfig.json +27 -0
  37. package/example-mapbox/tsconfig.node.json +10 -0
  38. package/example-mapbox/yarn.lock +4154 -0
  39. package/example-maplibre/package.json +29 -0
  40. package/example-maplibre/sandbox.config.json +3 -0
  41. package/example-maplibre/src/canvas.basic.stories.tsx +61 -0
  42. package/example-maplibre/src/comparison.stories.tsx +22 -0
  43. package/example-maplibre/src/html-on-top.stories.tsx +24 -0
  44. package/example-maplibre/src/my-scene.tsx +97 -0
  45. package/example-maplibre/src/render-on-demand.stories.tsx +32 -0
  46. package/example-maplibre/src/story-map.tsx +38 -0
  47. package/example-maplibre/src/vite-env.d.ts +1 -0
  48. package/example-maplibre/tsconfig.json +25 -0
  49. package/example-maplibre/tsconfig.node.json +10 -0
  50. package/example-maplibre/yarn.lock +4181 -0
  51. package/maplibre/package.json +1 -1
  52. package/package.json +9 -6
  53. package/src/{canvas/core → core}/generic-map.ts +15 -2
  54. package/src/{canvas/core → core}/state-ref.ts +2 -2
  55. package/src/{canvas/core/internal-canvas.tsx → core/use-canvas.tsx} +6 -18
  56. package/src/{canvas/core → core}/use-on-add.ts +3 -3
  57. package/src/{canvas/canvas-mapbox.tsx → mapbox/canvas.tsx} +15 -9
  58. package/src/mapbox/index.ts +1 -0
  59. package/src/{canvas/canvas-maplibre.tsx → maplibre/canvas.tsx} +13 -7
  60. package/src/maplibre/index.ts +1 -0
  61. package/src/stories/comparison.stories.tsx +13 -30
  62. package/src/stories/html-on-top.stories.tsx +11 -16
  63. package/src/stories/mapbox/story-mapbox.tsx +43 -0
  64. package/src/stories/mapbox-example.stories.tsx +69 -0
  65. package/src/stories/maplibre/story-maplibre.tsx +32 -0
  66. package/src/stories/{canvas.basic.stories.tsx → maplibre-example.stories.tsx} +28 -30
  67. package/src/stories/my-scene.tsx +0 -1
  68. package/src/stories/render-on-demand.stories.tsx +18 -37
  69. package/src/stories/story-map.tsx +26 -24
  70. package/tsconfig.json +5 -0
  71. package/dist/es/main.js10.mjs +0 -56
  72. package/dist/es/main.js10.mjs.map +0 -1
  73. package/dist/es/main.js11.mjs +0 -9
  74. package/dist/es/main.js11.mjs.map +0 -1
  75. package/dist/es/main.js9.mjs +0 -16
  76. package/dist/es/main.js9.mjs.map +0 -1
  77. package/src/main-mapbox.ts +0 -1
  78. package/src/main-maplibre.ts +0 -1
  79. /package/src/{canvas/core → core}/coords-to-matrix.ts +0 -0
  80. /package/src/{canvas/core → core}/create-events.ts +0 -0
  81. /package/src/{canvas/core → core}/generic-map.test.ts +0 -0
  82. /package/src/{canvas/core → core}/use-function.ts +0 -0
  83. /package/src/{canvas/core → core}/use-render.ts +0 -0
@@ -1,40 +1,42 @@
1
- import 'maplibre-gl/dist/maplibre-gl.css';
2
- import { FC, PropsWithChildren } from "react"
3
- import MapLibre from "maplibre-gl";
4
- import Map from 'react-map-gl';
5
- import { useLadleContext, ThemeState } from '@ladle/react';
1
+ import { useControls } from 'leva';
2
+ import { FC, PropsWithChildren } from "react";
3
+ import { StoryMapbox } from './mapbox/story-mapbox';
4
+ import { StoryMaplibre } from './maplibre/story-maplibre';
5
+ import { CanvasProps } from '../maplibre/canvas';
6
+
7
+ export enum MapProvider {
8
+ maplibre = "maplibre",
9
+ mapbox = "mapbox",
10
+ }
6
11
 
7
12
  export interface StoryMapProps extends PropsWithChildren {
8
- latitude?: number,
9
- longitude?: number,
13
+ latitude: number,
14
+ longitude: number,
10
15
  zoom?: number,
11
16
  pitch?: number,
17
+ canvas?: Partial<CanvasProps>,
12
18
  }
13
19
 
14
20
  /** `<Map>` styled for stories */
15
21
  export const StoryMap: FC<StoryMapProps> = ({
16
- children
22
+ latitude, longitude, zoom = 13, pitch = 60, children
17
23
  }) => {
18
24
 
19
- const theme = useLadleContext().globalState.theme;
25
+ const { mapProvider } = useControls({
26
+ mapProvider: {
27
+ value: MapProvider.maplibre,
28
+ options: MapProvider,
29
+ },
30
+ });
20
31
 
21
- const mapStyle = theme === ThemeState.Dark
22
- ? "https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json"
23
- : "https://basemaps.cartocdn.com/gl/positron-gl-style/style.json";
32
+ const props : StoryMapProps = { latitude, longitude, zoom, pitch, children};
24
33
 
25
34
  return <div style={{ height: '100vh', position: 'relative' }}>
26
- <Map
27
- mapLib={MapLibre}
28
- antialias
29
- initialViewState={{
30
- latitude: 51,
31
- longitude: 0,
32
- zoom: 13,
33
- pitch: 60,
34
- }}
35
- mapStyle={mapStyle}
36
- >
35
+ {mapProvider === MapProvider.maplibre && <StoryMaplibre {...props}>
36
+ {children}
37
+ </StoryMaplibre>}
38
+ {mapProvider === MapProvider.mapbox && <StoryMapbox {...props}>
37
39
  {children}
38
- </Map>
40
+ </StoryMapbox>}
39
41
  </div>
40
42
  }
package/tsconfig.json CHANGED
@@ -14,6 +14,11 @@
14
14
  "noEmit": true,
15
15
  "jsx": "react-jsx",
16
16
 
17
+ "paths": {
18
+ "react-three-map": ["./src/mapbox/index.ts"],
19
+ "react-three-map/maplibre": ["./src/maplibre/index.ts"],
20
+ },
21
+
17
22
  /* Linting */
18
23
  "strict": true,
19
24
  "noUnusedLocals": true,
@@ -1,56 +0,0 @@
1
- import { createEvents as p } from "@react-three/fiber";
2
- const c = {
3
- onClick: ["click", !1],
4
- onContextMenu: ["contextmenu", !1],
5
- onDoubleClick: ["dblclick", !1],
6
- onWheel: ["wheel", !0],
7
- onPointerDown: ["pointerdown", !0],
8
- onPointerUp: ["pointerup", !0],
9
- onPointerLeave: ["pointerleave", !0],
10
- onPointerMove: ["pointermove", !0],
11
- onPointerCancel: ["pointercancel", !0],
12
- onLostPointerCapture: ["lostpointercapture", !0]
13
- };
14
- function u() {
15
- return (o) => {
16
- const { handlePointer: a } = p(o);
17
- return {
18
- priority: 1,
19
- enabled: !0,
20
- compute(n, e) {
21
- e.size.width = e.gl.domElement.width, e.size.height = e.gl.domElement.height, e.pointer.x = n.offsetX / (e.size.width / window.devicePixelRatio) * 2 - 1, e.pointer.y = 1 - n.offsetY / (e.size.height / window.devicePixelRatio) * 2, e.raycaster.camera = e.camera, e.raycaster.ray.origin.setScalar(0).applyMatrix4(e.camera.projectionMatrixInverse), e.raycaster.ray.direction.set(e.pointer.x, e.pointer.y, 1).applyMatrix4(e.camera.projectionMatrixInverse).sub(e.raycaster.ray.origin).normalize();
22
- },
23
- connected: void 0,
24
- handlers: Object.keys(c).reduce(
25
- (n, e) => ({ ...n, [e]: a(e) }),
26
- {}
27
- ),
28
- update: () => {
29
- var t;
30
- const { events: n, internal: e } = o.getState();
31
- (t = e.lastEvent) != null && t.current && n.handlers && n.handlers.onPointerMove(e.lastEvent.current);
32
- },
33
- connect: (n) => {
34
- var i;
35
- const { set: e, events: t } = o.getState();
36
- (i = t.disconnect) == null || i.call(t), e((r) => ({ events: { ...r.events, connected: n.parentNode } })), Object.entries(t.handlers ?? []).forEach(([r, l]) => {
37
- const [s, d] = c[r];
38
- n.addEventListener(s, l, { passive: d });
39
- });
40
- },
41
- disconnect: () => {
42
- const { set: n, events: e } = o.getState();
43
- e.connected && (Object.entries(e.handlers ?? []).forEach(([t, i]) => {
44
- if (e && e.connected instanceof HTMLElement) {
45
- const [r] = c[t];
46
- e.connected.removeEventListener(r, i);
47
- }
48
- }), n((t) => ({ events: { ...t.events, connected: void 0 } })));
49
- }
50
- };
51
- };
52
- }
53
- export {
54
- u as createEvents
55
- };
56
- //# sourceMappingURL=main.js10.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js10.mjs","sources":["../../src/canvas/core/create-events.ts"],"sourcesContent":["import { Events, RenderProps, RootState, createEvents as createFiberEvents } from \"@react-three/fiber\";\nimport { UseBoundStore } from \"zustand\";\n\ntype DomEvent = PointerEvent | MouseEvent | WheelEvent;\n\nconst DOM_EVENTS = {\n onClick: [\"click\", false],\n onContextMenu: [\"contextmenu\", false],\n onDoubleClick: [\"dblclick\", false],\n onWheel: [\"wheel\", true],\n onPointerDown: [\"pointerdown\", true],\n onPointerUp: [\"pointerup\", true],\n onPointerLeave: [\"pointerleave\", true],\n onPointerMove: [\"pointermove\", true],\n onPointerCancel: [\"pointercancel\", true],\n onLostPointerCapture: [\"lostpointercapture\", true],\n} as const;\n\n/** ThreeLayer event manager for MapLibre and Mapbox */\nexport function createEvents(): RenderProps<HTMLCanvasElement>[\"events\"] {\n return (store: UseBoundStore<RootState>) => {\n const { handlePointer } = createFiberEvents(store);\n return {\n priority: 1,\n enabled: true,\n compute(event: DomEvent, state: RootState) {\n state.size.width = state.gl.domElement.width;\n state.size.height = state.gl.domElement.height;\n state.pointer.x = (event.offsetX / (state.size.width / window.devicePixelRatio)) * 2 - 1;\n state.pointer.y = 1 - (event.offsetY / (state.size.height / window.devicePixelRatio)) * 2;\n state.raycaster.camera = state.camera;\n state.raycaster.ray.origin.setScalar(0).applyMatrix4(state.camera.projectionMatrixInverse);\n state.raycaster.ray.direction\n .set(state.pointer.x, state.pointer.y, 1)\n .applyMatrix4(state.camera.projectionMatrixInverse)\n .sub(state.raycaster.ray.origin)\n .normalize();\n },\n connected: undefined,\n handlers: Object.keys(DOM_EVENTS).reduce(\n (acc, key) => ({ ...acc, [key]: handlePointer(key) }),\n {}\n ) as unknown as Events,\n update: () => {\n const { events, internal } = store.getState();\n if (internal.lastEvent?.current && events.handlers) {\n events.handlers.onPointerMove(internal.lastEvent.current);\n }\n },\n connect: (target: HTMLElement) => {\n const { set, events } = store.getState();\n events.disconnect?.();\n set((state) => ({ events: { ...state.events, connected: target.parentNode } }));\n Object.entries(events.handlers ?? []).forEach(([name, event]) => {\n const [eventName, passive] = DOM_EVENTS[name as keyof typeof DOM_EVENTS];\n target.addEventListener(eventName, event, { passive });\n });\n },\n disconnect: () => {\n const { set, events } = store.getState();\n if (events.connected) {\n Object.entries(events.handlers ?? []).forEach(([name, event]) => {\n if (events && events.connected instanceof HTMLElement) {\n const [eventName] = DOM_EVENTS[name as keyof typeof DOM_EVENTS];\n events.connected.removeEventListener(eventName, event);\n }\n });\n set((state) => ({ events: { ...state.events, connected: undefined } }));\n }\n },\n };\n };\n}\n"],"names":["DOM_EVENTS","createEvents","store","handlePointer","createFiberEvents","event","state","acc","key","events","internal","_a","target","set","name","eventName","passive"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { useRef as n, useCallback as u } from "react";
2
- const o = (r) => {
3
- const e = n(r);
4
- return e.current = r, u((...t) => e.current(...t), []);
5
- };
6
- export {
7
- o as useFunction
8
- };
9
- //# sourceMappingURL=main.js11.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js11.mjs","sources":["../../src/canvas/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":["useFunction","callback","callbackRef","useRef","useCallback","args"],"mappings":";AAGa,MAAAA,IAAc,CAAoCC,MAAmB;AAC1E,QAAAC,IAAcC,EAAOF,CAAQ;AACnC,SAAAC,EAAY,UAAUD,GACfG,EAAY,IAAIC,MACdH,EAAY,QAAQ,GAAGG,CAAI,GACjC,CAAE,CAAA;AACP;"}
@@ -1,16 +0,0 @@
1
- import { Matrix4 as u } from "three";
2
- import { useFunction as m } from "./main.js11.mjs";
3
- const p = new u();
4
- function g(n, r, o) {
5
- return m((l, a) => {
6
- var e;
7
- if (!((e = r.current) != null && e.state))
8
- return;
9
- const t = r.current.state.camera, c = r.current.state.gl, i = r.current.state.advance;
10
- t.projectionMatrix.fromArray(a).multiply(p.fromArray(n)), t.projectionMatrixInverse.copy(t.projectionMatrix).invert(), c.resetState(), i(Date.now() * 1e-3, !0), o === "always" && r.current.map.triggerRepaint();
11
- });
12
- }
13
- export {
14
- g as useRender
15
- };
16
- //# sourceMappingURL=main.js9.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js9.mjs","sources":["../../src/canvas/core/use-render.ts"],"sourcesContent":["import { Matrix4, Matrix4Tuple } from \"three\";\nimport { StateRef } from \"./state-ref\";\nimport { useFunction } from \"./use-function\";\n\nconst mx = new Matrix4();\n\nexport function useRender(\n m4: Matrix4Tuple, stateRef: StateRef, frameloop: 'always' | 'demand'\n) {\n\n const render = useFunction((_gl: WebGL2RenderingContext, matrix: number[]) => {\n if (!stateRef.current?.state) return;\n const camera = stateRef.current.state.camera;\n const gl = stateRef.current.state.gl;\n const advance = stateRef.current.state.advance;\n camera.projectionMatrix.fromArray(matrix).multiply(mx.fromArray(m4));\n camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();\n gl.resetState();\n advance(Date.now() * 0.001, true);\n if (frameloop === 'always') stateRef.current.map.triggerRepaint();\n })\n\n return render;\n\n}"],"names":["mx","Matrix4","useRender","m4","stateRef","frameloop","useFunction","_gl","matrix","_a","camera","gl","advance"],"mappings":";;AAIA,MAAMA,IAAK,IAAIC;AAEC,SAAAC,EACdC,GAAkBC,GAAoBC,GACtC;AAcO,SAZQC,EAAY,CAACC,GAA6BC,MAAqB;;AACxE,QAAA,GAACC,IAAAL,EAAS,YAAT,QAAAK,EAAkB;AAAO;AACxB,UAAAC,IAASN,EAAS,QAAQ,MAAM,QAChCO,IAAKP,EAAS,QAAQ,MAAM,IAC5BQ,IAAUR,EAAS,QAAQ,MAAM;AAChC,IAAAM,EAAA,iBAAiB,UAAUF,CAAM,EAAE,SAASR,EAAG,UAAUG,CAAE,CAAC,GACnEO,EAAO,wBAAwB,KAAKA,EAAO,gBAAgB,EAAE,UAC7DC,EAAG,WAAW,GACdC,EAAQ,KAAK,IAAQ,IAAA,MAAO,EAAI,GAC5BP,MAAc,YAAmBD,EAAA,QAAQ,IAAI;EAAe,CACjE;AAIH;"}
@@ -1 +0,0 @@
1
- export * from './canvas/canvas-mapbox';
@@ -1 +0,0 @@
1
- export * from './canvas/canvas-maplibre';
File without changes
File without changes
File without changes
File without changes
File without changes