react-bkoi-gl 1.0.6 → 2.0.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 (167) hide show
  1. package/README.md +163 -18
  2. package/dist/components/attribution-control.d.ts +4 -6
  3. package/dist/components/attribution-control.js +6 -5
  4. package/dist/components/attribution-control.js.map +1 -1
  5. package/dist/components/fullscreen-control.d.ts +4 -6
  6. package/dist/components/fullscreen-control.js +4 -4
  7. package/dist/components/fullscreen-control.js.map +1 -1
  8. package/dist/components/geolocate-control.d.ts +10 -26
  9. package/dist/components/geolocate-control.js +11 -11
  10. package/dist/components/geolocate-control.js.map +1 -1
  11. package/dist/components/layer.d.ts +7 -6
  12. package/dist/components/layer.js +8 -9
  13. package/dist/components/layer.js.map +1 -1
  14. package/dist/components/logo-control.d.ts +9 -0
  15. package/dist/components/logo-control.js +28 -0
  16. package/dist/components/logo-control.js.map +1 -0
  17. package/dist/components/map.d.ts +20 -16
  18. package/dist/components/map.js +38 -32
  19. package/dist/components/map.js.map +1 -1
  20. package/dist/components/marker.d.ts +10 -33
  21. package/dist/components/marker.js +22 -15
  22. package/dist/components/marker.js.map +1 -1
  23. package/dist/components/navigation-control.d.ts +4 -6
  24. package/dist/components/navigation-control.js +4 -4
  25. package/dist/components/navigation-control.js.map +1 -1
  26. package/dist/components/popup.d.ts +7 -25
  27. package/dist/components/popup.js +17 -28
  28. package/dist/components/popup.js.map +1 -1
  29. package/dist/components/scale-control.d.ts +4 -6
  30. package/dist/components/scale-control.js +4 -4
  31. package/dist/components/scale-control.js.map +1 -1
  32. package/dist/components/source.d.ts +3 -4
  33. package/dist/components/source.js +20 -22
  34. package/dist/components/source.js.map +1 -1
  35. package/dist/components/terrain-control.d.ts +10 -0
  36. package/dist/components/terrain-control.js +19 -0
  37. package/dist/components/terrain-control.js.map +1 -0
  38. package/dist/components/use-control.d.ts +6 -6
  39. package/dist/components/use-control.js +4 -5
  40. package/dist/components/use-control.js.map +1 -1
  41. package/dist/components/use-map.d.ts +8 -9
  42. package/dist/components/use-map.js +5 -5
  43. package/dist/components/use-map.js.map +1 -1
  44. package/dist/exports-maplibre-gl.d.ts +33 -0
  45. package/dist/exports-maplibre-gl.js +21 -0
  46. package/dist/exports-maplibre-gl.js.map +1 -0
  47. package/dist/index.cjs +590 -681
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.js +2 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/{mapbox → maplibre}/create-ref.d.ts +6 -6
  52. package/dist/maplibre/create-ref.js +30 -0
  53. package/dist/maplibre/create-ref.js.map +1 -0
  54. package/dist/maplibre/maplibre.d.ts +81 -0
  55. package/dist/maplibre/maplibre.js +387 -0
  56. package/dist/maplibre/maplibre.js.map +1 -0
  57. package/dist/styles/index.d.ts +4 -0
  58. package/dist/styles/react-bkoi-gl.css +1 -1
  59. package/dist/styles.d.js +2 -0
  60. package/dist/styles.d.js.map +1 -0
  61. package/dist/tsconfig.build.tsbuildinfo +1 -0
  62. package/dist/types/common.d.ts +2 -60
  63. package/dist/types/common.js.map +1 -1
  64. package/dist/types/events.d.ts +64 -23
  65. package/dist/types/events.js.map +1 -1
  66. package/dist/types/internal.d.ts +14 -0
  67. package/dist/types/internal.js +2 -0
  68. package/dist/types/internal.js.map +1 -0
  69. package/dist/types/lib.d.ts +16 -200
  70. package/dist/types/lib.js.map +1 -1
  71. package/dist/types/style-spec.d.ts +1 -0
  72. package/dist/types/style-spec.js +2 -0
  73. package/dist/types/style-spec.js.map +1 -0
  74. package/dist/utils/apply-react-style.d.ts +1 -1
  75. package/dist/utils/apply-react-style.js.map +1 -1
  76. package/dist/utils/compare-class-names.d.ts +2 -0
  77. package/dist/utils/compare-class-names.js +23 -0
  78. package/dist/utils/compare-class-names.js.map +1 -0
  79. package/dist/utils/deep-equal.d.ts +1 -1
  80. package/dist/utils/deep-equal.js +1 -1
  81. package/dist/utils/deep-equal.js.map +1 -1
  82. package/dist/utils/set-globals.d.ts +6 -8
  83. package/dist/utils/set-globals.js +22 -10
  84. package/dist/utils/set-globals.js.map +1 -1
  85. package/dist/utils/style-utils.d.ts +3 -2
  86. package/dist/utils/style-utils.js +4 -4
  87. package/dist/utils/style-utils.js.map +1 -1
  88. package/dist/utils/transform.d.ts +11 -19
  89. package/dist/utils/transform.js +13 -36
  90. package/dist/utils/transform.js.map +1 -1
  91. package/dist/utils/use-isomorphic-layout-effect.d.ts +1 -1
  92. package/dist/utils/use-isomorphic-layout-effect.js +2 -2
  93. package/dist/utils/use-isomorphic-layout-effect.js.map +1 -1
  94. package/package.json +42 -26
  95. package/src/components/attribution-control.ts +40 -16
  96. package/src/components/fullscreen-control.ts +40 -0
  97. package/src/components/geolocate-control.ts +45 -39
  98. package/src/components/layer.ts +37 -29
  99. package/src/components/logo-control.ts +44 -0
  100. package/src/components/map.tsx +86 -75
  101. package/src/components/marker.ts +141 -123
  102. package/src/components/navigation-control.ts +11 -12
  103. package/src/components/popup.ts +94 -97
  104. package/src/components/scale-control.ts +12 -14
  105. package/src/components/source.ts +58 -57
  106. package/src/components/terrain-control.ts +29 -0
  107. package/src/components/use-control.ts +21 -17
  108. package/src/components/use-map.tsx +26 -24
  109. package/src/exports-maplibre-gl.ts +37 -0
  110. package/src/index.ts +3 -2
  111. package/src/maplibre/create-ref.ts +70 -0
  112. package/src/maplibre/maplibre.ts +624 -0
  113. package/src/styles.d.ts +4 -0
  114. package/src/types/common.ts +12 -72
  115. package/src/types/events.ts +102 -42
  116. package/src/types/internal.ts +26 -0
  117. package/src/types/lib.ts +65 -260
  118. package/src/types/style-spec.ts +34 -0
  119. package/src/utils/apply-react-style.ts +7 -3
  120. package/src/utils/compare-class-names.ts +29 -0
  121. package/src/utils/deep-equal.ts +2 -2
  122. package/src/utils/set-globals.ts +22 -28
  123. package/src/utils/style-utils.ts +18 -9
  124. package/src/utils/transform.ts +32 -60
  125. package/src/utils/use-isomorphic-layout-effect.ts +3 -2
  126. package/bkoi-gl/package.json +0 -6
  127. package/dist/exports-bkoi-gl.cjs +0 -1512
  128. package/dist/exports-bkoi-gl.d.ts +0 -89
  129. package/dist/exports-bkoi-gl.js +0 -36
  130. package/dist/exports-bkoi-gl.js.map +0 -1
  131. package/dist/exports-mapbox.d.ts +0 -139
  132. package/dist/exports-mapbox.js +0 -36
  133. package/dist/exports-mapbox.js.map +0 -1
  134. package/dist/mapbox/create-ref.js +0 -64
  135. package/dist/mapbox/create-ref.js.map +0 -1
  136. package/dist/mapbox/mapbox.d.ts +0 -81
  137. package/dist/mapbox/mapbox.js +0 -476
  138. package/dist/mapbox/mapbox.js.map +0 -1
  139. package/dist/types/events-bkoi-gl.d.ts +0 -49
  140. package/dist/types/events-bkoi-gl.js +0 -2
  141. package/dist/types/events-bkoi-gl.js.map +0 -1
  142. package/dist/types/events-mapbox.d.ts +0 -49
  143. package/dist/types/events-mapbox.js +0 -2
  144. package/dist/types/events-mapbox.js.map +0 -1
  145. package/dist/types/index.d.ts +0 -70
  146. package/dist/types/index.js +0 -5
  147. package/dist/types/index.js.map +0 -1
  148. package/dist/types/public.d.ts +0 -2
  149. package/dist/types/public.js +0 -2
  150. package/dist/types/public.js.map +0 -1
  151. package/dist/types/style-spec-bkoi-gl.d.ts +0 -9
  152. package/dist/types/style-spec-bkoi-gl.js +0 -2
  153. package/dist/types/style-spec-bkoi-gl.js.map +0 -1
  154. package/dist/types/style-spec-mapbox.d.ts +0 -7
  155. package/dist/types/style-spec-mapbox.js +0 -2
  156. package/dist/types/style-spec-mapbox.js.map +0 -1
  157. package/src/components/fullscreen-control.tsx +0 -37
  158. package/src/exports-bkoi-gl.ts +0 -156
  159. package/src/exports-mapbox.ts +0 -159
  160. package/src/mapbox/create-ref.ts +0 -118
  161. package/src/mapbox/mapbox.ts +0 -742
  162. package/src/types/events-bkoi-gl.ts +0 -78
  163. package/src/types/events-mapbox.ts +0 -76
  164. package/src/types/index.ts +0 -93
  165. package/src/types/public.ts +0 -9
  166. package/src/types/style-spec-bkoi-gl.ts +0 -81
  167. package/src/types/style-spec-mapbox.ts +0 -80
@@ -0,0 +1,28 @@
1
+ import { useEffect, memo } from "react";
2
+ import { applyReactStyle } from "../utils/apply-react-style.js";
3
+ import { useControl } from "./use-control.js";
4
+ function _LogoControl(props) {
5
+ const ctrl = useControl(_ref => {
6
+ let {
7
+ mapLib
8
+ } = _ref;
9
+ return new mapLib.LogoControl(props);
10
+ }, {
11
+ position: props.position
12
+ });
13
+ useEffect(() => {
14
+ applyReactStyle(ctrl._container, props.style);
15
+ const logoElement = ctrl._container?.querySelector(".maplibregl-ctrl-logo");
16
+ if (logoElement) {
17
+ logoElement.href = "https://barikoi.com/";
18
+ logoElement.setAttribute("aria-label", "Barikoi logo");
19
+ logoElement.target = "_blank";
20
+ logoElement.rel = "noopener nofollow";
21
+ logoElement.style.cursor = "pointer";
22
+ logoElement.replaceWith(logoElement.cloneNode(true));
23
+ }
24
+ }, [props.style, ctrl._container]);
25
+ return null;
26
+ }
27
+ export const LogoControl = memo(_LogoControl);
28
+ //# sourceMappingURL=logo-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo-control.js","names":["useEffect","memo","applyReactStyle","useControl","_LogoControl","props","ctrl","_ref","mapLib","LogoControl","position","_container","style","logoElement","querySelector","href","setAttribute","target","rel","cursor","replaceWith","cloneNode"],"sources":["../../src/components/logo-control.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\nimport * as React from \"react\";\nimport { useEffect, memo } from \"react\";\nimport { applyReactStyle } from \"../utils/apply-react-style\";\nimport { useControl } from \"./use-control\";\n\nimport type { ControlPosition, LogoControlOptions } from \"../types/lib\";\n\nexport type LogoControlProps = LogoControlOptions & {\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction _LogoControl(props: LogoControlProps) {\n const ctrl = useControl(({ mapLib }) => new mapLib.LogoControl(props), {\n position: props.position,\n });\n\n useEffect(() => {\n applyReactStyle(ctrl._container, props.style);\n\n // Update the DOM structure and attributes directly\n const logoElement = ctrl._container?.querySelector(\n \".maplibregl-ctrl-logo\",\n ) as HTMLAnchorElement | null;\n if (logoElement) {\n // Update the link attributes\n logoElement.href = \"https://barikoi.com/\";\n logoElement.setAttribute(\"aria-label\", \"Barikoi logo\");\n logoElement.target = \"_blank\";\n logoElement.rel = \"noopener nofollow\";\n logoElement.style.cursor = \"pointer\";\n\n // Remove any existing click handlers\n logoElement.replaceWith(logoElement.cloneNode(true));\n }\n }, [props.style, ctrl._container]);\n\n return null;\n}\n\nexport const LogoControl: React.FC<LogoControlProps> = memo(_LogoControl);\n"],"mappings":"AAEA,SAASA,SAAS,EAAEC,IAAI,QAAQ,OAAO;AAAC,SAC/BC,eAAe;AAAA,SACfC,UAAU;AAWnB,SAASC,YAAYA,CAACC,KAAuB,EAAE;EAC7C,MAAMC,IAAI,GAAGH,UAAU,CAACI,IAAA;IAAA,IAAC;MAAEC;IAAO,CAAC,GAAAD,IAAA;IAAA,OAAK,IAAIC,MAAM,CAACC,WAAW,CAACJ,KAAK,CAAC;EAAA,GAAE;IACrEK,QAAQ,EAAEL,KAAK,CAACK;EAClB,CAAC,CAAC;EAEFV,SAAS,CAAC,MAAM;IACdE,eAAe,CAACI,IAAI,CAACK,UAAU,EAAEN,KAAK,CAACO,KAAK,CAAC;IAG7C,MAAMC,WAAW,GAAGP,IAAI,CAACK,UAAU,EAAEG,aAAa,CAChD,uBACF,CAA6B;IAC7B,IAAID,WAAW,EAAE;MAEfA,WAAW,CAACE,IAAI,GAAG,sBAAsB;MACzCF,WAAW,CAACG,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC;MACtDH,WAAW,CAACI,MAAM,GAAG,QAAQ;MAC7BJ,WAAW,CAACK,GAAG,GAAG,mBAAmB;MACrCL,WAAW,CAACD,KAAK,CAACO,MAAM,GAAG,SAAS;MAGpCN,WAAW,CAACO,WAAW,CAACP,WAAW,CAACQ,SAAS,CAAC,IAAI,CAAC,CAAC;IACtD;EACF,CAAC,EAAE,CAAChB,KAAK,CAACO,KAAK,EAAEN,IAAI,CAACK,UAAU,CAAC,CAAC;EAElC,OAAO,IAAI;AACb;AAEA,OAAO,MAAMF,WAAuC,GAAGR,IAAI,CAACG,YAAY,CAAC","ignoreList":[]}
@@ -1,23 +1,27 @@
1
- import * as React from 'react';
2
- import { MapboxProps } from '../mapbox/mapbox';
3
- import { MapRef } from '../mapbox/create-ref';
4
- import type { CSSProperties } from 'react';
5
- import { GlobalSettings } from '../utils/set-globals';
6
- import type { MapLib, MapInstance, MapStyle, Callbacks } from '../types';
7
- export type MapContextValue<MapT extends MapInstance = MapInstance> = {
8
- mapLib: MapLib<MapT>;
9
- map: MapRef<MapT>;
1
+ import * as React from "react";
2
+ import { MaplibreProps } from "../maplibre/maplibre";
3
+ import { MapRef } from "../maplibre/create-ref";
4
+ import type { CSSProperties } from "react";
5
+ import { GlobalSettings } from "../utils/set-globals";
6
+ import type { MapLib, MapOptions } from "../types/lib";
7
+ export type MapContextValue = {
8
+ mapLib: MapLib;
9
+ map: MapRef;
10
10
  };
11
- export declare const MapContext: React.Context<MapContextValue<MapInstance>>;
12
- type MapInitOptions<MapOptions> = Omit<MapOptions, 'style' | 'container' | 'bounds' | 'fitBoundsOptions' | 'center'>;
13
- export type MapProps<MapOptions, StyleT extends MapStyle, CallbacksT extends Callbacks, MapT extends MapInstance> = MapInitOptions<MapOptions> & MapboxProps<StyleT, CallbacksT> & GlobalSettings & {
14
- mapLib?: MapLib<MapT> | Promise<MapLib<MapT>>;
11
+ export declare const MapContext: React.Context<MapContextValue>;
12
+ type MapInitOptions = Omit<MapOptions, "style" | "container" | "bounds" | "fitBoundsOptions" | "center">;
13
+ export type MapProps = MapInitOptions & MaplibreProps & GlobalSettings & {
14
+ mapLib?: MapLib | Promise<MapLib>;
15
15
  reuseMaps?: boolean;
16
16
  /** Map container id */
17
17
  id?: string;
18
18
  /** Map container CSS style */
19
19
  style?: CSSProperties;
20
- children?: any;
21
- };
22
- export default function Map<MapOptions, StyleT extends MapStyle, CallbacksT extends Callbacks, MapT extends MapInstance>(props: MapProps<MapOptions, StyleT, CallbacksT, MapT>, ref: React.Ref<MapRef<MapT>>, defaultLib: MapLib<MapT> | Promise<MapLib<MapT>>): React.JSX.Element;
20
+ children?: React.ReactNode;
21
+ /** Show Barikoi logo (default: true) */
22
+ showBarikoiLogo?: boolean;
23
+ /** Show Attribution (default: true) */
24
+ showAttribution?: boolean;
25
+ } & React.RefAttributes<MapRef>;
26
+ export declare const Map: React.FC<MapProps>;
23
27
  export {};
@@ -1,12 +1,14 @@
1
- import * as React from 'react';
2
- import { useState, useRef, useEffect, useContext, useMemo, useImperativeHandle } from 'react';
1
+ import * as React from "react";
2
+ import { useState, useRef, useEffect, useContext, useMemo, useImperativeHandle } from "react";
3
3
  import { MountedMapsContext } from "./use-map.js";
4
- import Mapbox from "../mapbox/mapbox.js";
5
- import createRef from "../mapbox/create-ref.js";
4
+ import Maplibre from "../maplibre/maplibre.js";
5
+ import createRef from "../maplibre/create-ref.js";
6
6
  import useIsomorphicLayoutEffect from "../utils/use-isomorphic-layout-effect.js";
7
7
  import setGlobals from "../utils/set-globals.js";
8
+ import { LogoControl } from "./logo-control.js";
9
+ import { AttributionControl } from "./attribution-control.js";
8
10
  export const MapContext = React.createContext(null);
9
- export default function Map(props, ref, defaultLib) {
11
+ function _Map(props, ref) {
10
12
  const mountedMapsContext = useContext(MountedMapsContext);
11
13
  const [mapInstance, setMapInstance] = useState(null);
12
14
  const containerRef = useRef();
@@ -19,40 +21,39 @@ export default function Map(props, ref, defaultLib) {
19
21
  useEffect(() => {
20
22
  const mapLib = props.mapLib;
21
23
  let isMounted = true;
22
- let mapbox;
23
- Promise.resolve(mapLib || defaultLib).then(module => {
24
+ let maplibre;
25
+ Promise.resolve(mapLib || import("maplibre-gl")).then(module => {
24
26
  if (!isMounted) {
25
27
  return;
26
28
  }
27
29
  if (!module) {
28
- throw new Error('Invalid mapLib');
30
+ throw new Error("Invalid mapLib");
29
31
  }
30
- const mapboxgl = 'Map' in module ? module : module.default;
32
+ const mapboxgl = "Map" in module ? module : module.default;
31
33
  if (!mapboxgl.Map) {
32
- throw new Error('Invalid mapLib');
34
+ throw new Error("Invalid mapLib");
33
35
  }
34
36
  setGlobals(mapboxgl, props);
35
- if (!mapboxgl.supported || mapboxgl.supported(props)) {
36
- if (props.reuseMaps) {
37
- mapbox = Mapbox.reuse(props, containerRef.current);
38
- }
39
- if (!mapbox) {
40
- mapbox = new Mapbox(mapboxgl.Map, props, containerRef.current);
41
- }
42
- contextValue.map = createRef(mapbox);
43
- contextValue.mapLib = mapboxgl;
44
- setMapInstance(mapbox);
45
- mountedMapsContext?.onMapMount(contextValue.map, props.id);
46
- } else {
47
- throw new Error('Map is not supported by this browser');
37
+ if (props.reuseMaps) {
38
+ maplibre = Maplibre.reuse(props, containerRef.current);
39
+ }
40
+ if (!maplibre) {
41
+ maplibre = new Maplibre(mapboxgl.Map, {
42
+ ...props,
43
+ attributionControl: false
44
+ }, containerRef.current);
48
45
  }
46
+ contextValue.map = createRef(maplibre);
47
+ contextValue.mapLib = mapboxgl;
48
+ setMapInstance(maplibre);
49
+ mountedMapsContext?.onMapMount(contextValue.map, props.id);
49
50
  }).catch(error => {
50
51
  const {
51
52
  onError
52
53
  } = props;
53
54
  if (onError) {
54
55
  onError({
55
- type: 'error',
56
+ type: "error",
56
57
  target: null,
57
58
  originalEvent: null,
58
59
  error
@@ -63,12 +64,12 @@ export default function Map(props, ref, defaultLib) {
63
64
  });
64
65
  return () => {
65
66
  isMounted = false;
66
- if (mapbox) {
67
+ if (maplibre) {
67
68
  mountedMapsContext?.onMapUnmount(props.id);
68
69
  if (props.reuseMaps) {
69
- mapbox.recycle();
70
+ maplibre.recycle();
70
71
  } else {
71
- mapbox.destroy();
72
+ maplibre.destroy();
72
73
  }
73
74
  }
74
75
  };
@@ -80,13 +81,13 @@ export default function Map(props, ref, defaultLib) {
80
81
  });
81
82
  useImperativeHandle(ref, () => contextValue.map, [mapInstance]);
82
83
  const style = useMemo(() => ({
83
- position: 'relative',
84
- width: '100%',
85
- height: '100%',
84
+ position: "relative",
85
+ width: "100%",
86
+ height: "100%",
86
87
  ...props.style
87
88
  }), [props.style]);
88
89
  const CHILD_CONTAINER_STYLE = {
89
- height: '100%'
90
+ height: "100%"
90
91
  };
91
92
  return React.createElement("div", {
92
93
  id: props.id,
@@ -97,6 +98,11 @@ export default function Map(props, ref, defaultLib) {
97
98
  }, React.createElement("div", {
98
99
  "mapboxgl-children": "",
99
100
  style: CHILD_CONTAINER_STYLE
100
- }, props.children)));
101
+ }, React.createElement(LogoControl, {
102
+ position: "bottom-left"
103
+ }), React.createElement(AttributionControl, {
104
+ position: "bottom-right"
105
+ }), props.children)));
101
106
  }
107
+ export const Map = React.forwardRef(_Map);
102
108
  //# sourceMappingURL=map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","names":["React","useState","useRef","useEffect","useContext","useMemo","useImperativeHandle","MountedMapsContext","Mapbox","createRef","useIsomorphicLayoutEffect","setGlobals","MapContext","createContext","Map","props","ref","defaultLib","mountedMapsContext","mapInstance","setMapInstance","containerRef","current","contextValue","mapLib","map","isMounted","mapbox","Promise","resolve","then","module","Error","mapboxgl","default","supported","reuseMaps","reuse","onMapMount","id","catch","error","onError","type","target","originalEvent","console","onMapUnmount","recycle","destroy","setProps","style","position","width","height","CHILD_CONTAINER_STYLE","createElement","Provider","value","children"],"sources":["../../src/components/map.tsx"],"sourcesContent":["import * as React from 'react';\nimport {useState, useRef, useEffect, useContext, useMemo, useImperativeHandle} from 'react';\n\nimport {MountedMapsContext} from './use-map';\nimport Mapbox, {MapboxProps} from '../mapbox/mapbox';\nimport createRef, {MapRef} from '../mapbox/create-ref';\n\nimport type {CSSProperties} from 'react';\nimport useIsomorphicLayoutEffect from '../utils/use-isomorphic-layout-effect';\nimport setGlobals, {GlobalSettings} from '../utils/set-globals';\nimport type {MapLib, MapInstance, MapStyle, Callbacks} from '../types';\n\nexport type MapContextValue<MapT extends MapInstance = MapInstance> = {\n mapLib: MapLib<MapT>;\n map: MapRef<MapT>;\n};\n\nexport const MapContext = React.createContext<MapContextValue>(null);\n\ntype MapInitOptions<MapOptions> = Omit<\n MapOptions,\n 'style' | 'container' | 'bounds' | 'fitBoundsOptions' | 'center'\n>;\n\nexport type MapProps<\n MapOptions,\n StyleT extends MapStyle,\n CallbacksT extends Callbacks,\n MapT extends MapInstance\n> = MapInitOptions<MapOptions> &\n MapboxProps<StyleT, CallbacksT> &\n GlobalSettings & {\n mapLib?: MapLib<MapT> | Promise<MapLib<MapT>>;\n reuseMaps?: boolean;\n /** Map container id */\n id?: string;\n /** Map container CSS style */\n style?: CSSProperties;\n children?: any;\n };\n\nexport default function Map<\n MapOptions,\n StyleT extends MapStyle,\n CallbacksT extends Callbacks,\n MapT extends MapInstance\n>(\n props: MapProps<MapOptions, StyleT, CallbacksT, MapT>,\n ref: React.Ref<MapRef<MapT>>,\n defaultLib: MapLib<MapT> | Promise<MapLib<MapT>>\n) {\n const mountedMapsContext = useContext(MountedMapsContext);\n const [mapInstance, setMapInstance] = useState<Mapbox<StyleT, CallbacksT, MapT>>(null);\n const containerRef = useRef();\n\n const {current: contextValue} = useRef<MapContextValue<MapT>>({mapLib: null, map: null});\n\n useEffect(() => {\n const mapLib = props.mapLib;\n let isMounted = true;\n let mapbox: Mapbox<StyleT, CallbacksT, MapT>;\n\n Promise.resolve(mapLib || defaultLib)\n .then((module: MapLib<MapT> | {default: MapLib<MapT>}) => {\n if (!isMounted) {\n return;\n }\n if (!module) {\n throw new Error('Invalid mapLib');\n }\n const mapboxgl = 'Map' in module ? module : module.default;\n if (!mapboxgl.Map) {\n throw new Error('Invalid mapLib');\n }\n\n // workerUrl & workerClass may change the result of supported()\n // https://github.com/visgl/react-map-gl/discussions/2027\n setGlobals(mapboxgl, props);\n if (!mapboxgl.supported || mapboxgl.supported(props)) {\n if (props.reuseMaps) {\n mapbox = Mapbox.reuse(props, containerRef.current);\n }\n if (!mapbox) {\n mapbox = new Mapbox(mapboxgl.Map, props, containerRef.current);\n }\n contextValue.map = createRef(mapbox);\n contextValue.mapLib = mapboxgl;\n\n setMapInstance(mapbox);\n mountedMapsContext?.onMapMount(contextValue.map, props.id);\n } else {\n throw new Error('Map is not supported by this browser');\n }\n })\n .catch(error => {\n const {onError} = props;\n if (onError) {\n onError({\n type: 'error',\n target: null,\n originalEvent: null,\n error\n });\n } else {\n console.error(error); // eslint-disable-line\n }\n });\n\n return () => {\n isMounted = false;\n if (mapbox) {\n mountedMapsContext?.onMapUnmount(props.id);\n if (props.reuseMaps) {\n mapbox.recycle();\n } else {\n mapbox.destroy();\n }\n }\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (mapInstance) {\n mapInstance.setProps(props);\n }\n });\n\n useImperativeHandle(ref, () => contextValue.map, [mapInstance]);\n\n const style: CSSProperties = useMemo(\n () => ({\n position: 'relative',\n width: '100%',\n height: '100%',\n ...props.style\n }),\n [props.style]\n );\n\n const CHILD_CONTAINER_STYLE = {\n height: '100%'\n };\n\n return (\n <div id={props.id} ref={containerRef} style={style}>\n {mapInstance && (\n <MapContext.Provider value={contextValue}>\n <div mapboxgl-children=\"\" style={CHILD_CONTAINER_STYLE}>\n {props.children}\n </div>\n </MapContext.Provider>\n )}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"map.js","names":["React","useState","useRef","useEffect","useContext","useMemo","useImperativeHandle","MountedMapsContext","Maplibre","createRef","useIsomorphicLayoutEffect","setGlobals","LogoControl","AttributionControl","MapContext","createContext","_Map","props","ref","mountedMapsContext","mapInstance","setMapInstance","containerRef","current","contextValue","mapLib","map","isMounted","maplibre","Promise","resolve","then","module","Error","mapboxgl","default","Map","reuseMaps","reuse","attributionControl","onMapMount","id","catch","error","onError","type","target","originalEvent","console","onMapUnmount","recycle","destroy","setProps","style","position","width","height","CHILD_CONTAINER_STYLE","createElement","Provider","value","children","forwardRef"],"sources":["../../src/components/map.tsx"],"sourcesContent":["/* eslint-disable react/display-name */\n/* eslint-disable react/no-unknown-property */\nimport * as React from \"react\";\nimport {\n useState,\n useRef,\n useEffect,\n useContext,\n useMemo,\n useImperativeHandle,\n} from \"react\";\n\nimport { MountedMapsContext } from \"./use-map\";\nimport Maplibre, { MaplibreProps } from \"../maplibre/maplibre\";\nimport createRef, { MapRef } from \"../maplibre/create-ref\";\n\nimport type { CSSProperties } from \"react\";\nimport useIsomorphicLayoutEffect from \"../utils/use-isomorphic-layout-effect\";\nimport setGlobals, { GlobalSettings } from \"../utils/set-globals\";\nimport type { MapLib, MapOptions } from \"../types/lib\";\nimport { LogoControl } from \"./logo-control\";\nimport { AttributionControl } from \"./attribution-control\";\n\nexport type MapContextValue = {\n mapLib: MapLib;\n map: MapRef;\n};\n\nexport const MapContext = React.createContext<MapContextValue>(null);\n\ntype MapInitOptions = Omit<\n MapOptions,\n \"style\" | \"container\" | \"bounds\" | \"fitBoundsOptions\" | \"center\"\n>;\n\nexport type MapProps = MapInitOptions &\n MaplibreProps &\n GlobalSettings & {\n mapLib?: MapLib | Promise<MapLib>;\n reuseMaps?: boolean;\n /** Map container id */\n id?: string;\n /** Map container CSS style */\n style?: CSSProperties;\n children?: React.ReactNode;\n /** Show Barikoi logo (default: true) */\n showBarikoiLogo?: boolean;\n /** Show Attribution (default: true) */\n showAttribution?: boolean;\n } & React.RefAttributes<MapRef>;\n\nfunction _Map(props: MapProps, ref: React.Ref<MapRef>) {\n const mountedMapsContext = useContext(MountedMapsContext);\n const [mapInstance, setMapInstance] = useState<Maplibre>(null);\n const containerRef = useRef();\n\n const { current: contextValue } = useRef<MapContextValue>({\n mapLib: null,\n map: null,\n });\n\n useEffect(() => {\n const mapLib = props.mapLib;\n let isMounted = true;\n let maplibre: Maplibre;\n\n Promise.resolve(mapLib || import(\"maplibre-gl\"))\n .then((module: MapLib | { default: MapLib }) => {\n if (!isMounted) {\n return;\n }\n if (!module) {\n throw new Error(\"Invalid mapLib\");\n }\n const mapboxgl = \"Map\" in module ? module : module.default;\n if (!mapboxgl.Map) {\n throw new Error(\"Invalid mapLib\");\n }\n\n setGlobals(mapboxgl, props);\n if (props.reuseMaps) {\n maplibre = Maplibre.reuse(props, containerRef.current);\n }\n if (!maplibre) {\n maplibre = new Maplibre(\n mapboxgl.Map,\n {\n ...props,\n // @ts-ignore\n attributionControl: false,\n },\n containerRef.current,\n );\n }\n contextValue.map = createRef(maplibre);\n contextValue.mapLib = mapboxgl;\n\n setMapInstance(maplibre);\n mountedMapsContext?.onMapMount(contextValue.map, props.id);\n })\n .catch((error) => {\n const { onError } = props;\n if (onError) {\n onError({\n type: \"error\",\n target: null,\n originalEvent: null,\n error,\n });\n } else {\n console.error(error); // eslint-disable-line\n }\n });\n\n return () => {\n isMounted = false;\n if (maplibre) {\n mountedMapsContext?.onMapUnmount(props.id);\n if (props.reuseMaps) {\n maplibre.recycle();\n } else {\n maplibre.destroy();\n }\n }\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (mapInstance) {\n mapInstance.setProps(props);\n }\n });\n\n useImperativeHandle(ref, () => contextValue.map, [mapInstance]);\n\n const style: CSSProperties = useMemo(\n () => ({\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n ...props.style,\n }),\n [props.style],\n );\n\n const CHILD_CONTAINER_STYLE = {\n height: \"100%\",\n };\n\n return (\n <div id={props.id} ref={containerRef} style={style}>\n {mapInstance && (\n <MapContext.Provider value={contextValue}>\n <div mapboxgl-children=\"\" style={CHILD_CONTAINER_STYLE}>\n {/* Automatically include Barikoi Logo and Attribution controls */}\n <LogoControl position=\"bottom-left\" />\n <AttributionControl position=\"bottom-right\" />\n {props.children}\n </div>\n </MapContext.Provider>\n )}\n </div>\n );\n}\n\nexport const Map: React.FC<MapProps> = React.forwardRef(_Map);\n"],"mappings":"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","ignoreList":[]}
@@ -1,41 +1,18 @@
1
- import * as React from 'react';
2
- import type { MarkerEvent, MarkerDragEvent, PointLike, MarkerInstance } from '../types';
3
- export type MarkerProps<OptionsT, MarkerT extends MarkerInstance> = OptionsT & {
1
+ import * as React from "react";
2
+ import type { Popup as PopupInstance, MarkerOptions } from "../types/lib";
3
+ import type { MarkerEvent, MarkerDragEvent } from "../types/events";
4
+ export type MarkerProps = MarkerOptions & {
4
5
  /** Longitude of the anchor location */
5
6
  longitude: number;
6
7
  /** Latitude of the anchor location */
7
8
  latitude: number;
8
- draggable?: boolean;
9
- offset?: PointLike;
10
- pitchAlignment?: string;
11
- rotation?: number;
12
- rotationAlignment?: string;
13
- popup?: any;
9
+ popup?: PopupInstance;
14
10
  /** CSS style override, applied to the control's container */
15
11
  style?: React.CSSProperties;
16
- onClick?: (e: MarkerEvent<MarkerT, MouseEvent>) => void;
17
- onDragStart?: (e: MarkerDragEvent<MarkerT>) => void;
18
- onDrag?: (e: MarkerDragEvent<MarkerT>) => void;
19
- onDragEnd?: (e: MarkerDragEvent<MarkerT>) => void;
12
+ onClick?: (e: MarkerEvent<MouseEvent>) => void;
13
+ onDragStart?: (e: MarkerDragEvent) => void;
14
+ onDrag?: (e: MarkerDragEvent) => void;
15
+ onDragEnd?: (e: MarkerDragEvent) => void;
20
16
  children?: React.ReactNode;
21
17
  };
22
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<{
23
- /** Longitude of the anchor location */
24
- longitude: number;
25
- /** Latitude of the anchor location */
26
- latitude: number;
27
- draggable?: boolean;
28
- offset?: PointLike;
29
- pitchAlignment?: string;
30
- rotation?: number;
31
- rotationAlignment?: string;
32
- popup?: any;
33
- /** CSS style override, applied to the control's container */
34
- style?: React.CSSProperties;
35
- onClick?: (e: MarkerEvent<MarkerInstance, MouseEvent>) => void;
36
- onDragStart?: (e: MarkerDragEvent<MarkerInstance>) => void;
37
- onDrag?: (e: MarkerDragEvent<MarkerInstance>) => void;
38
- onDragEnd?: (e: MarkerDragEvent<MarkerInstance>) => void;
39
- children?: React.ReactNode;
40
- } & React.RefAttributes<MarkerInstance>>>;
41
- export default _default;
18
+ export declare const Marker: React.FC<MarkerProps>;
@@ -1,10 +1,11 @@
1
- import * as React from 'react';
2
- import { createPortal } from 'react-dom';
3
- import { useImperativeHandle, useEffect, useMemo, useRef, useContext, forwardRef, memo } from 'react';
1
+ import * as React from "react";
2
+ import { createPortal } from "react-dom";
3
+ import { useImperativeHandle, useEffect, useMemo, useRef, useContext, forwardRef, memo } from "react";
4
4
  import { applyReactStyle } from "../utils/apply-react-style.js";
5
5
  import { MapContext } from "./map.js";
6
6
  import { arePointsEqual } from "../utils/deep-equal.js";
7
- function Marker(props, ref) {
7
+ import { compareClassNames } from "../utils/compare-class-names.js";
8
+ export const Marker = memo(forwardRef((props, ref) => {
8
9
  const {
9
10
  map,
10
11
  mapLib
@@ -12,7 +13,6 @@ function Marker(props, ref) {
12
13
  const thisRef = useRef({
13
14
  props
14
15
  });
15
- thisRef.current.props = props;
16
16
  const marker = useMemo(() => {
17
17
  let hasChildren = false;
18
18
  React.Children.forEach(props.children, el => {
@@ -22,28 +22,28 @@ function Marker(props, ref) {
22
22
  });
23
23
  const options = {
24
24
  ...props,
25
- element: hasChildren ? document.createElement('div') : null
25
+ element: hasChildren ? document.createElement("div") : undefined
26
26
  };
27
27
  const mk = new mapLib.Marker(options);
28
28
  mk.setLngLat([props.longitude, props.latitude]);
29
- mk.getElement().addEventListener('click', e => {
29
+ mk.getElement().addEventListener("click", e => {
30
30
  thisRef.current.props.onClick?.({
31
- type: 'click',
31
+ type: "click",
32
32
  target: mk,
33
33
  originalEvent: e
34
34
  });
35
35
  });
36
- mk.on('dragstart', e => {
36
+ mk.on("dragstart", e => {
37
37
  const evt = e;
38
38
  evt.lngLat = marker.getLngLat();
39
39
  thisRef.current.props.onDragStart?.(evt);
40
40
  });
41
- mk.on('drag', e => {
41
+ mk.on("drag", e => {
42
42
  const evt = e;
43
43
  evt.lngLat = marker.getLngLat();
44
44
  thisRef.current.props.onDrag?.(evt);
45
45
  });
46
- mk.on('dragend', e => {
46
+ mk.on("dragend", e => {
47
47
  const evt = e;
48
48
  evt.lngLat = marker.getLngLat();
49
49
  thisRef.current.props.onDragEnd?.(evt);
@@ -64,13 +64,14 @@ function Marker(props, ref) {
64
64
  draggable = false,
65
65
  popup = null,
66
66
  rotation = 0,
67
- rotationAlignment = 'auto',
68
- pitchAlignment = 'auto'
67
+ rotationAlignment = "auto",
68
+ pitchAlignment = "auto"
69
69
  } = props;
70
70
  useEffect(() => {
71
71
  applyReactStyle(marker.getElement(), style);
72
72
  }, [style]);
73
73
  useImperativeHandle(ref, () => marker, []);
74
+ const oldProps = thisRef.current.props;
74
75
  if (marker.getLngLat().lng !== longitude || marker.getLngLat().lat !== latitude) {
75
76
  marker.setLngLat([longitude, latitude]);
76
77
  }
@@ -92,7 +93,13 @@ function Marker(props, ref) {
92
93
  if (marker.getPopup() !== popup) {
93
94
  marker.setPopup(popup);
94
95
  }
96
+ const classNameDiff = compareClassNames(oldProps.className, props.className);
97
+ if (classNameDiff) {
98
+ for (const c of classNameDiff) {
99
+ marker.toggleClassName(c);
100
+ }
101
+ }
102
+ thisRef.current.props = props;
95
103
  return createPortal(props.children, marker.getElement());
96
- }
97
- export default memo(forwardRef(Marker));
104
+ }));
98
105
  //# sourceMappingURL=marker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marker.js","names":["React","createPortal","useImperativeHandle","useEffect","useMemo","useRef","useContext","forwardRef","memo","applyReactStyle","MapContext","arePointsEqual","Marker","props","ref","map","mapLib","thisRef","current","marker","hasChildren","Children","forEach","children","el","options","element","document","createElement","mk","setLngLat","longitude","latitude","getElement","addEventListener","e","onClick","type","target","originalEvent","on","evt","lngLat","getLngLat","onDragStart","onDrag","onDragEnd","addTo","getMap","remove","offset","style","draggable","popup","rotation","rotationAlignment","pitchAlignment","lng","lat","getOffset","setOffset","isDraggable","setDraggable","getRotation","setRotation","getRotationAlignment","setRotationAlignment","getPitchAlignment","setPitchAlignment","getPopup","setPopup"],"sources":["../../src/components/marker.ts"],"sourcesContent":["/* global document */\nimport * as React from 'react';\nimport {createPortal} from 'react-dom';\nimport {useImperativeHandle, useEffect, useMemo, useRef, useContext, forwardRef, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\n\nimport type {MarkerEvent, MarkerDragEvent, PointLike, MarkerInstance} from '../types';\n\nimport {MapContext} from './map';\nimport {arePointsEqual} from '../utils/deep-equal';\n\nexport type MarkerProps<OptionsT, MarkerT extends MarkerInstance> = OptionsT & {\n /** Longitude of the anchor location */\n longitude: number;\n /** Latitude of the anchor location */\n latitude: number;\n\n // These types will be further constraint by OptionsT\n draggable?: boolean;\n offset?: PointLike;\n pitchAlignment?: string;\n rotation?: number;\n rotationAlignment?: string;\n popup?: any;\n\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n onClick?: (e: MarkerEvent<MarkerT, MouseEvent>) => void;\n onDragStart?: (e: MarkerDragEvent<MarkerT>) => void;\n onDrag?: (e: MarkerDragEvent<MarkerT>) => void;\n onDragEnd?: (e: MarkerDragEvent<MarkerT>) => void;\n children?: React.ReactNode;\n};\n\n/* eslint-disable complexity,max-statements */\nfunction Marker<MarkerOptions, MarkerT extends MarkerInstance>(\n props: MarkerProps<MarkerOptions, MarkerT>,\n ref: React.Ref<MarkerT>\n) {\n const {map, mapLib} = useContext(MapContext);\n const thisRef = useRef({props});\n thisRef.current.props = props;\n\n const marker: MarkerT = useMemo(() => {\n let hasChildren = false;\n React.Children.forEach(props.children, el => {\n if (el) {\n hasChildren = true;\n }\n });\n const options = {\n ...props,\n element: hasChildren ? document.createElement('div') : null\n };\n\n const mk = new mapLib.Marker(options) as MarkerT;\n mk.setLngLat([props.longitude, props.latitude]);\n\n mk.getElement().addEventListener('click', (e: MouseEvent) => {\n thisRef.current.props.onClick?.({\n type: 'click',\n target: mk,\n originalEvent: e\n });\n });\n\n mk.on('dragstart', e => {\n const evt = e as MarkerDragEvent<MarkerT>;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDragStart?.(evt);\n });\n mk.on('drag', e => {\n const evt = e as MarkerDragEvent<MarkerT>;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDrag?.(evt);\n });\n mk.on('dragend', e => {\n const evt = e as MarkerDragEvent<MarkerT>;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDragEnd?.(evt);\n });\n\n return mk;\n }, []);\n\n useEffect(() => {\n marker.addTo(map.getMap());\n\n return () => {\n marker.remove();\n };\n }, []);\n\n const {\n longitude,\n latitude,\n offset,\n style,\n draggable = false,\n popup = null,\n rotation = 0,\n rotationAlignment = 'auto',\n pitchAlignment = 'auto'\n } = props;\n\n useEffect(() => {\n applyReactStyle(marker.getElement(), style);\n }, [style]);\n\n useImperativeHandle(ref, () => marker, []);\n\n if (marker.getLngLat().lng !== longitude || marker.getLngLat().lat !== latitude) {\n marker.setLngLat([longitude, latitude]);\n }\n if (offset && !arePointsEqual(marker.getOffset(), offset)) {\n marker.setOffset(offset);\n }\n if (marker.isDraggable() !== draggable) {\n marker.setDraggable(draggable);\n }\n if (marker.getRotation() !== rotation) {\n marker.setRotation(rotation);\n }\n if (marker.getRotationAlignment() !== rotationAlignment) {\n marker.setRotationAlignment(rotationAlignment);\n }\n if (marker.getPitchAlignment() !== pitchAlignment) {\n marker.setPitchAlignment(pitchAlignment);\n }\n if (marker.getPopup() !== popup) {\n marker.setPopup(popup);\n }\n\n return createPortal(props.children, marker.getElement());\n}\n\nexport default memo(forwardRef(Marker));\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"marker.js","names":["React","createPortal","useImperativeHandle","useEffect","useMemo","useRef","useContext","forwardRef","memo","applyReactStyle","MapContext","arePointsEqual","compareClassNames","Marker","props","ref","map","mapLib","thisRef","marker","hasChildren","Children","forEach","children","el","options","element","document","createElement","undefined","mk","setLngLat","longitude","latitude","getElement","addEventListener","e","current","onClick","type","target","originalEvent","on","evt","lngLat","getLngLat","onDragStart","onDrag","onDragEnd","addTo","getMap","remove","offset","style","draggable","popup","rotation","rotationAlignment","pitchAlignment","oldProps","lng","lat","getOffset","setOffset","isDraggable","setDraggable","getRotation","setRotation","getRotationAlignment","setRotationAlignment","getPitchAlignment","setPitchAlignment","getPopup","setPopup","classNameDiff","className","c","toggleClassName"],"sources":["../../src/components/marker.ts"],"sourcesContent":["/* global document */\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useImperativeHandle,\n useEffect,\n useMemo,\n useRef,\n useContext,\n forwardRef,\n memo,\n} from \"react\";\nimport { applyReactStyle } from \"../utils/apply-react-style\";\n\nimport type {\n Popup as PopupInstance,\n Marker as MarkerInstance,\n MarkerOptions,\n} from \"../types/lib\";\nimport type { MarkerEvent, MarkerDragEvent } from \"../types/events\";\n\nimport { MapContext } from \"./map\";\nimport { arePointsEqual } from \"../utils/deep-equal\";\nimport { compareClassNames } from \"../utils/compare-class-names\";\n\nexport type MarkerProps = MarkerOptions & {\n /** Longitude of the anchor location */\n longitude: number;\n /** Latitude of the anchor location */\n latitude: number;\n\n popup?: PopupInstance;\n\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n onClick?: (e: MarkerEvent<MouseEvent>) => void;\n onDragStart?: (e: MarkerDragEvent) => void;\n onDrag?: (e: MarkerDragEvent) => void;\n onDragEnd?: (e: MarkerDragEvent) => void;\n children?: React.ReactNode;\n};\n\n/* eslint-disable complexity,max-statements */\nexport const Marker: React.FC<MarkerProps> = memo(\n forwardRef((props: MarkerProps, ref: React.Ref<MarkerInstance>) => {\n const { map, mapLib } = useContext(MapContext);\n const thisRef = useRef({ props });\n\n const marker: MarkerInstance = useMemo(() => {\n let hasChildren = false;\n React.Children.forEach(props.children, (el) => {\n if (el) {\n hasChildren = true;\n }\n });\n const options = {\n ...props,\n element: hasChildren ? document.createElement(\"div\") : undefined,\n };\n\n const mk = new mapLib.Marker(options);\n mk.setLngLat([props.longitude, props.latitude]);\n\n mk.getElement().addEventListener(\"click\", (e: MouseEvent) => {\n thisRef.current.props.onClick?.({\n type: \"click\",\n target: mk,\n originalEvent: e,\n });\n });\n\n mk.on(\"dragstart\", (e) => {\n const evt = e as MarkerDragEvent;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDragStart?.(evt);\n });\n mk.on(\"drag\", (e) => {\n const evt = e as MarkerDragEvent;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDrag?.(evt);\n });\n mk.on(\"dragend\", (e) => {\n const evt = e as MarkerDragEvent;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDragEnd?.(evt);\n });\n\n return mk;\n }, []);\n\n useEffect(() => {\n marker.addTo(map.getMap());\n\n return () => {\n marker.remove();\n };\n }, []);\n\n const {\n longitude,\n latitude,\n offset,\n style,\n draggable = false,\n popup = null,\n rotation = 0,\n rotationAlignment = \"auto\",\n pitchAlignment = \"auto\",\n } = props;\n\n useEffect(() => {\n applyReactStyle(marker.getElement(), style);\n }, [style]);\n\n useImperativeHandle(ref, () => marker, []);\n\n const oldProps = thisRef.current.props;\n if (\n marker.getLngLat().lng !== longitude ||\n marker.getLngLat().lat !== latitude\n ) {\n marker.setLngLat([longitude, latitude]);\n }\n if (offset && !arePointsEqual(marker.getOffset(), offset)) {\n marker.setOffset(offset);\n }\n if (marker.isDraggable() !== draggable) {\n marker.setDraggable(draggable);\n }\n if (marker.getRotation() !== rotation) {\n marker.setRotation(rotation);\n }\n if (marker.getRotationAlignment() !== rotationAlignment) {\n marker.setRotationAlignment(rotationAlignment);\n }\n if (marker.getPitchAlignment() !== pitchAlignment) {\n marker.setPitchAlignment(pitchAlignment);\n }\n if (marker.getPopup() !== popup) {\n marker.setPopup(popup);\n }\n const classNameDiff = compareClassNames(\n oldProps.className,\n props.className,\n );\n if (classNameDiff) {\n for (const c of classNameDiff) {\n marker.toggleClassName(c);\n }\n }\n\n thisRef.current.props = props;\n return createPortal(props.children, marker.getElement());\n }),\n);\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,YAAY,QAAQ,WAAW;AACxC,SACEC,mBAAmB,EACnBC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,UAAU,EACVC,UAAU,EACVC,IAAI,QACC,OAAO;AAAC,SACNC,eAAe;AAAA,SASfC,UAAU;AAAA,SACVC,cAAc;AAAA,SACdC,iBAAiB;AAoB1B,OAAO,MAAMC,MAA6B,GAAGL,IAAI,CAC/CD,UAAU,CAAC,CAACO,KAAkB,EAAEC,GAA8B,KAAK;EACjE,MAAM;IAAEC,GAAG;IAAEC;EAAO,CAAC,GAAGX,UAAU,CAACI,UAAU,CAAC;EAC9C,MAAMQ,OAAO,GAAGb,MAAM,CAAC;IAAES;EAAM,CAAC,CAAC;EAEjC,MAAMK,MAAsB,GAAGf,OAAO,CAAC,MAAM;IAC3C,IAAIgB,WAAW,GAAG,KAAK;IACvBpB,KAAK,CAACqB,QAAQ,CAACC,OAAO,CAACR,KAAK,CAACS,QAAQ,EAAGC,EAAE,IAAK;MAC7C,IAAIA,EAAE,EAAE;QACNJ,WAAW,GAAG,IAAI;MACpB;IACF,CAAC,CAAC;IACF,MAAMK,OAAO,GAAG;MACd,GAAGX,KAAK;MACRY,OAAO,EAAEN,WAAW,GAAGO,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC,GAAGC;IACzD,CAAC;IAED,MAAMC,EAAE,GAAG,IAAIb,MAAM,CAACJ,MAAM,CAACY,OAAO,CAAC;IACrCK,EAAE,CAACC,SAAS,CAAC,CAACjB,KAAK,CAACkB,SAAS,EAAElB,KAAK,CAACmB,QAAQ,CAAC,CAAC;IAE/CH,EAAE,CAACI,UAAU,CAAC,CAAC,CAACC,gBAAgB,CAAC,OAAO,EAAGC,CAAa,IAAK;MAC3DlB,OAAO,CAACmB,OAAO,CAACvB,KAAK,CAACwB,OAAO,GAAG;QAC9BC,IAAI,EAAE,OAAO;QACbC,MAAM,EAAEV,EAAE;QACVW,aAAa,EAAEL;MACjB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFN,EAAE,CAACY,EAAE,CAAC,WAAW,EAAGN,CAAC,IAAK;MACxB,MAAMO,GAAG,GAAGP,CAAoB;MAChCO,GAAG,CAACC,MAAM,GAAGzB,MAAM,CAAC0B,SAAS,CAAC,CAAC;MAC/B3B,OAAO,CAACmB,OAAO,CAACvB,KAAK,CAACgC,WAAW,GAAGH,GAAG,CAAC;IAC1C,CAAC,CAAC;IACFb,EAAE,CAACY,EAAE,CAAC,MAAM,EAAGN,CAAC,IAAK;MACnB,MAAMO,GAAG,GAAGP,CAAoB;MAChCO,GAAG,CAACC,MAAM,GAAGzB,MAAM,CAAC0B,SAAS,CAAC,CAAC;MAC/B3B,OAAO,CAACmB,OAAO,CAACvB,KAAK,CAACiC,MAAM,GAAGJ,GAAG,CAAC;IACrC,CAAC,CAAC;IACFb,EAAE,CAACY,EAAE,CAAC,SAAS,EAAGN,CAAC,IAAK;MACtB,MAAMO,GAAG,GAAGP,CAAoB;MAChCO,GAAG,CAACC,MAAM,GAAGzB,MAAM,CAAC0B,SAAS,CAAC,CAAC;MAC/B3B,OAAO,CAACmB,OAAO,CAACvB,KAAK,CAACkC,SAAS,GAAGL,GAAG,CAAC;IACxC,CAAC,CAAC;IAEF,OAAOb,EAAE;EACX,CAAC,EAAE,EAAE,CAAC;EAEN3B,SAAS,CAAC,MAAM;IACdgB,MAAM,CAAC8B,KAAK,CAACjC,GAAG,CAACkC,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,MAAM;MACX/B,MAAM,CAACgC,MAAM,CAAC,CAAC;IACjB,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM;IACJnB,SAAS;IACTC,QAAQ;IACRmB,MAAM;IACNC,KAAK;IACLC,SAAS,GAAG,KAAK;IACjBC,KAAK,GAAG,IAAI;IACZC,QAAQ,GAAG,CAAC;IACZC,iBAAiB,GAAG,MAAM;IAC1BC,cAAc,GAAG;EACnB,CAAC,GAAG5C,KAAK;EAETX,SAAS,CAAC,MAAM;IACdM,eAAe,CAACU,MAAM,CAACe,UAAU,CAAC,CAAC,EAAEmB,KAAK,CAAC;EAC7C,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEXnD,mBAAmB,CAACa,GAAG,EAAE,MAAMI,MAAM,EAAE,EAAE,CAAC;EAE1C,MAAMwC,QAAQ,GAAGzC,OAAO,CAACmB,OAAO,CAACvB,KAAK;EACtC,IACEK,MAAM,CAAC0B,SAAS,CAAC,CAAC,CAACe,GAAG,KAAK5B,SAAS,IACpCb,MAAM,CAAC0B,SAAS,CAAC,CAAC,CAACgB,GAAG,KAAK5B,QAAQ,EACnC;IACAd,MAAM,CAACY,SAAS,CAAC,CAACC,SAAS,EAAEC,QAAQ,CAAC,CAAC;EACzC;EACA,IAAImB,MAAM,IAAI,CAACzC,cAAc,CAACQ,MAAM,CAAC2C,SAAS,CAAC,CAAC,EAAEV,MAAM,CAAC,EAAE;IACzDjC,MAAM,CAAC4C,SAAS,CAACX,MAAM,CAAC;EAC1B;EACA,IAAIjC,MAAM,CAAC6C,WAAW,CAAC,CAAC,KAAKV,SAAS,EAAE;IACtCnC,MAAM,CAAC8C,YAAY,CAACX,SAAS,CAAC;EAChC;EACA,IAAInC,MAAM,CAAC+C,WAAW,CAAC,CAAC,KAAKV,QAAQ,EAAE;IACrCrC,MAAM,CAACgD,WAAW,CAACX,QAAQ,CAAC;EAC9B;EACA,IAAIrC,MAAM,CAACiD,oBAAoB,CAAC,CAAC,KAAKX,iBAAiB,EAAE;IACvDtC,MAAM,CAACkD,oBAAoB,CAACZ,iBAAiB,CAAC;EAChD;EACA,IAAItC,MAAM,CAACmD,iBAAiB,CAAC,CAAC,KAAKZ,cAAc,EAAE;IACjDvC,MAAM,CAACoD,iBAAiB,CAACb,cAAc,CAAC;EAC1C;EACA,IAAIvC,MAAM,CAACqD,QAAQ,CAAC,CAAC,KAAKjB,KAAK,EAAE;IAC/BpC,MAAM,CAACsD,QAAQ,CAAClB,KAAK,CAAC;EACxB;EACA,MAAMmB,aAAa,GAAG9D,iBAAiB,CACrC+C,QAAQ,CAACgB,SAAS,EAClB7D,KAAK,CAAC6D,SACR,CAAC;EACD,IAAID,aAAa,EAAE;IACjB,KAAK,MAAME,CAAC,IAAIF,aAAa,EAAE;MAC7BvD,MAAM,CAAC0D,eAAe,CAACD,CAAC,CAAC;IAC3B;EACF;EAEA1D,OAAO,CAACmB,OAAO,CAACvB,KAAK,GAAGA,KAAK;EAC7B,OAAOb,YAAY,CAACa,KAAK,CAACS,QAAQ,EAAEJ,MAAM,CAACe,UAAU,CAAC,CAAC,CAAC;AAC1D,CAAC,CACH,CAAC","ignoreList":[]}
@@ -1,11 +1,9 @@
1
- import * as React from 'react';
2
- import type { ControlPosition, NavigationControlInstance } from '../types';
3
- export type NavigationControlProps<OptionsT> = OptionsT & {
1
+ import * as React from "react";
2
+ import type { ControlPosition, NavigationControlOptions } from "../types/lib";
3
+ export type NavigationControlProps = NavigationControlOptions & {
4
4
  /** Placement of the control relative to the map. */
5
5
  position?: ControlPosition;
6
6
  /** CSS style override, applied to the control's container */
7
7
  style?: React.CSSProperties;
8
8
  };
9
- declare function NavigationControl<NavigationControlOptions, ControlT extends NavigationControlInstance>(props: NavigationControlProps<NavigationControlOptions>): null;
10
- declare const _default: React.MemoExoticComponent<typeof NavigationControl>;
11
- export default _default;
9
+ export declare const NavigationControl: React.FC<NavigationControlProps>;
@@ -1,7 +1,7 @@
1
- import { useEffect, memo } from 'react';
1
+ import { useEffect, memo } from "react";
2
2
  import { applyReactStyle } from "../utils/apply-react-style.js";
3
- import useControl from "./use-control.js";
4
- function NavigationControl(props) {
3
+ import { useControl } from "./use-control.js";
4
+ function _NavigationControl(props) {
5
5
  const ctrl = useControl(_ref => {
6
6
  let {
7
7
  mapLib
@@ -15,5 +15,5 @@ function NavigationControl(props) {
15
15
  }, [props.style]);
16
16
  return null;
17
17
  }
18
- export default memo(NavigationControl);
18
+ export const NavigationControl = memo(_NavigationControl);
19
19
  //# sourceMappingURL=navigation-control.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-control.js","names":["useEffect","memo","applyReactStyle","useControl","NavigationControl","props","ctrl","_ref","mapLib","position","_container","style"],"sources":["../../src/components/navigation-control.ts"],"sourcesContent":["import * as React from 'react';\nimport {useEffect, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\nimport useControl from './use-control';\n\nimport type {ControlPosition, NavigationControlInstance} from '../types';\n\nexport type NavigationControlProps<OptionsT> = OptionsT & {\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction NavigationControl<NavigationControlOptions, ControlT extends NavigationControlInstance>(\n props: NavigationControlProps<NavigationControlOptions>\n): null {\n const ctrl = useControl<ControlT>(({mapLib}) => new mapLib.NavigationControl(props) as ControlT, {\n position: props.position\n });\n\n useEffect(() => {\n applyReactStyle(ctrl._container, props.style);\n }, [props.style]);\n\n return null;\n}\n\nexport default memo(NavigationControl);\n"],"mappings":"AACA,SAAQA,SAAS,EAAEC,IAAI,QAAO,OAAO;AAAC,SAC9BC,eAAe;AAAA,OAChBC,UAAU;AAWjB,SAASC,iBAAiBA,CACxBC,KAAuD,EACjD;EACN,MAAMC,IAAI,GAAGH,UAAU,CAAWI,IAAA;IAAA,IAAC;MAACC;IAAM,CAAC,GAAAD,IAAA;IAAA,OAAK,IAAIC,MAAM,CAACJ,iBAAiB,CAACC,KAAK,CAAC;EAAA,CAAY,EAAE;IAC/FI,QAAQ,EAAEJ,KAAK,CAACI;EAClB,CAAC,CAAC;EAEFT,SAAS,CAAC,MAAM;IACdE,eAAe,CAACI,IAAI,CAACI,UAAU,EAAEL,KAAK,CAACM,KAAK,CAAC;EAC/C,CAAC,EAAE,CAACN,KAAK,CAACM,KAAK,CAAC,CAAC;EAEjB,OAAO,IAAI;AACb;AAEA,eAAeV,IAAI,CAACG,iBAAiB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"navigation-control.js","names":["useEffect","memo","applyReactStyle","useControl","_NavigationControl","props","ctrl","_ref","mapLib","NavigationControl","position","_container","style"],"sources":["../../src/components/navigation-control.ts"],"sourcesContent":["import * as React from \"react\";\nimport { useEffect, memo } from \"react\";\nimport { applyReactStyle } from \"../utils/apply-react-style\";\nimport { useControl } from \"./use-control\";\n\nimport type { ControlPosition, NavigationControlOptions } from \"../types/lib\";\n\nexport type NavigationControlProps = NavigationControlOptions & {\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction _NavigationControl(props: NavigationControlProps) {\n const ctrl = useControl(({ mapLib }) => new mapLib.NavigationControl(props), {\n position: props.position,\n });\n\n useEffect(() => {\n applyReactStyle(ctrl._container, props.style);\n }, [props.style]);\n\n return null;\n}\n\nexport const NavigationControl: React.FC<NavigationControlProps> =\n memo(_NavigationControl);\n"],"mappings":"AACA,SAASA,SAAS,EAAEC,IAAI,QAAQ,OAAO;AAAC,SAC/BC,eAAe;AAAA,SACfC,UAAU;AAWnB,SAASC,kBAAkBA,CAACC,KAA6B,EAAE;EACzD,MAAMC,IAAI,GAAGH,UAAU,CAACI,IAAA;IAAA,IAAC;MAAEC;IAAO,CAAC,GAAAD,IAAA;IAAA,OAAK,IAAIC,MAAM,CAACC,iBAAiB,CAACJ,KAAK,CAAC;EAAA,GAAE;IAC3EK,QAAQ,EAAEL,KAAK,CAACK;EAClB,CAAC,CAAC;EAEFV,SAAS,CAAC,MAAM;IACdE,eAAe,CAACI,IAAI,CAACK,UAAU,EAAEN,KAAK,CAACO,KAAK,CAAC;EAC/C,CAAC,EAAE,CAACP,KAAK,CAACO,KAAK,CAAC,CAAC;EAEjB,OAAO,IAAI;AACb;AAEA,OAAO,MAAMH,iBAAmD,GAC9DR,IAAI,CAACG,kBAAkB,CAAC","ignoreList":[]}
@@ -1,33 +1,15 @@
1
- import * as React from 'react';
2
- import type { PopupEvent, PopupInstance } from '../types';
3
- export type PopupProps<OptionsT, PopupT extends PopupInstance> = OptionsT & {
1
+ import * as React from "react";
2
+ import type { PopupOptions } from "../types/lib";
3
+ import type { PopupEvent } from "../types/events";
4
+ export type PopupProps = PopupOptions & {
4
5
  /** Longitude of the anchor location */
5
6
  longitude: number;
6
7
  /** Latitude of the anchor location */
7
8
  latitude: number;
8
- anchor?: string;
9
- offset?: any;
10
- className?: string;
11
- maxWidth?: string;
12
9
  /** CSS style override, applied to the control's container */
13
10
  style?: React.CSSProperties;
14
- onOpen?: (e: PopupEvent<PopupT>) => void;
15
- onClose?: (e: PopupEvent<PopupT>) => void;
11
+ onOpen?: (e: PopupEvent) => void;
12
+ onClose?: (e: PopupEvent) => void;
16
13
  children?: React.ReactNode;
17
14
  };
18
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<{
19
- /** Longitude of the anchor location */
20
- longitude: number;
21
- /** Latitude of the anchor location */
22
- latitude: number;
23
- anchor?: string;
24
- offset?: any;
25
- className?: string;
26
- maxWidth?: string;
27
- /** CSS style override, applied to the control's container */
28
- style?: React.CSSProperties;
29
- onOpen?: (e: PopupEvent<PopupInstance>) => void;
30
- onClose?: (e: PopupEvent<PopupInstance>) => void;
31
- children?: React.ReactNode;
32
- } & React.RefAttributes<PopupInstance>>>;
33
- export default _default;
15
+ export declare const Popup: React.FC<PopupProps>;