react-native-maplibre-gl-js 1.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 (137) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +146 -0
  3. package/lib/module/communication/messages.types.js +4 -0
  4. package/lib/module/communication/messages.types.js.map +1 -0
  5. package/lib/module/communication/messages.utils.js +27 -0
  6. package/lib/module/communication/messages.utils.js.map +1 -0
  7. package/lib/module/index.js +14 -0
  8. package/lib/module/index.js.map +1 -0
  9. package/lib/module/package.json +1 -0
  10. package/lib/module/react-native/components/Map/Map.js +11 -0
  11. package/lib/module/react-native/components/Map/Map.js.map +1 -0
  12. package/lib/module/react-native/components/Map/Map.types.js +4 -0
  13. package/lib/module/react-native/components/Map/Map.types.js.map +1 -0
  14. package/lib/module/react-native/components/MapProvider/MapProvider.hooks.js +18 -0
  15. package/lib/module/react-native/components/MapProvider/MapProvider.hooks.js.map +1 -0
  16. package/lib/module/react-native/components/MapProvider/MapProvider.js +118 -0
  17. package/lib/module/react-native/components/MapProvider/MapProvider.js.map +1 -0
  18. package/lib/module/react-native/components/MapProvider/MapProvider.types.js +4 -0
  19. package/lib/module/react-native/components/MapProvider/MapProvider.types.js.map +1 -0
  20. package/lib/module/react-native/components/Marker/Marker.js +11 -0
  21. package/lib/module/react-native/components/Marker/Marker.js.map +1 -0
  22. package/lib/module/react-native/components/Marker/Marker.types.js +4 -0
  23. package/lib/module/react-native/components/Marker/Marker.types.js.map +1 -0
  24. package/lib/module/react-native/components/Popup/Popup.js +12 -0
  25. package/lib/module/react-native/components/Popup/Popup.js.map +1 -0
  26. package/lib/module/react-native/components/Popup/Popup.types.js +4 -0
  27. package/lib/module/react-native/components/Popup/Popup.types.js.map +1 -0
  28. package/lib/module/react-native/components-factory/createWebObjectAsComponent.js +23 -0
  29. package/lib/module/react-native/components-factory/createWebObjectAsComponent.js.map +1 -0
  30. package/lib/module/react-native/components-factory/createWebObjectAsComponent.types.js +4 -0
  31. package/lib/module/react-native/components-factory/createWebObjectAsComponent.types.js.map +1 -0
  32. package/lib/module/react-native/components-factory/hooks/useWebObjectMethodsProxy.js +54 -0
  33. package/lib/module/react-native/components-factory/hooks/useWebObjectMethodsProxy.js.map +1 -0
  34. package/lib/module/react-native/components-factory/hooks/useWebObjectMountOnLaunch.js +68 -0
  35. package/lib/module/react-native/components-factory/hooks/useWebObjectMountOnLaunch.js.map +1 -0
  36. package/lib/module/react-native/components-factory/hooks/useWebObjectOptionsUpdater.js +20 -0
  37. package/lib/module/react-native/components-factory/hooks/useWebObjectOptionsUpdater.js.map +1 -0
  38. package/lib/module/react-native/hooks/atoms/useMapAtoms.js +198 -0
  39. package/lib/module/react-native/hooks/atoms/useMapAtoms.js.map +1 -0
  40. package/lib/module/react-native/hooks/atoms/useMapAtoms.utils.js +18 -0
  41. package/lib/module/react-native/hooks/atoms/useMapAtoms.utils.js.map +1 -0
  42. package/lib/module/react-native/logger/rn-logger.js +42 -0
  43. package/lib/module/react-native/logger/rn-logger.js.map +1 -0
  44. package/lib/module/typedoc.js +4 -0
  45. package/lib/module/typedoc.js.map +1 -0
  46. package/lib/module/web/bridge/ReactNativeBridge.js +38 -0
  47. package/lib/module/web/bridge/ReactNativeBridge.js.map +1 -0
  48. package/lib/module/web/generated/index.html +18 -0
  49. package/lib/module/web/generated/index.js +21 -0
  50. package/lib/module/web/generated/index.js.map +1 -0
  51. package/lib/module/web/generated/webview_static_html.js +23529 -0
  52. package/lib/module/web/generated/webview_static_html.js.map +1 -0
  53. package/lib/module/web/logger/web-logger.js +35 -0
  54. package/lib/module/web/logger/web-logger.js.map +1 -0
  55. package/lib/module/web/maplibre-gl-js/MapController.js +264 -0
  56. package/lib/module/web/maplibre-gl-js/MapController.js.map +1 -0
  57. package/lib/typescript/package.json +1 -0
  58. package/lib/typescript/src/communication/messages.types.d.ts +105 -0
  59. package/lib/typescript/src/communication/messages.types.d.ts.map +1 -0
  60. package/lib/typescript/src/communication/messages.utils.d.ts +6 -0
  61. package/lib/typescript/src/communication/messages.utils.d.ts.map +1 -0
  62. package/lib/typescript/src/index.d.ts +19 -0
  63. package/lib/typescript/src/index.d.ts.map +1 -0
  64. package/lib/typescript/src/react-native/components/Map/Map.d.ts +9 -0
  65. package/lib/typescript/src/react-native/components/Map/Map.d.ts.map +1 -0
  66. package/lib/typescript/src/react-native/components/Map/Map.types.d.ts +70 -0
  67. package/lib/typescript/src/react-native/components/Map/Map.types.d.ts.map +1 -0
  68. package/lib/typescript/src/react-native/components/MapProvider/MapProvider.d.ts +9 -0
  69. package/lib/typescript/src/react-native/components/MapProvider/MapProvider.d.ts.map +1 -0
  70. package/lib/typescript/src/react-native/components/MapProvider/MapProvider.hooks.d.ts +12 -0
  71. package/lib/typescript/src/react-native/components/MapProvider/MapProvider.hooks.d.ts.map +1 -0
  72. package/lib/typescript/src/react-native/components/MapProvider/MapProvider.types.d.ts +12 -0
  73. package/lib/typescript/src/react-native/components/MapProvider/MapProvider.types.d.ts.map +1 -0
  74. package/lib/typescript/src/react-native/components/Marker/Marker.d.ts +9 -0
  75. package/lib/typescript/src/react-native/components/Marker/Marker.d.ts.map +1 -0
  76. package/lib/typescript/src/react-native/components/Marker/Marker.types.d.ts +31 -0
  77. package/lib/typescript/src/react-native/components/Marker/Marker.types.d.ts.map +1 -0
  78. package/lib/typescript/src/react-native/components/Popup/Popup.d.ts +9 -0
  79. package/lib/typescript/src/react-native/components/Popup/Popup.d.ts.map +1 -0
  80. package/lib/typescript/src/react-native/components/Popup/Popup.types.d.ts +25 -0
  81. package/lib/typescript/src/react-native/components/Popup/Popup.types.d.ts.map +1 -0
  82. package/lib/typescript/src/react-native/components-factory/createWebObjectAsComponent.d.ts +5 -0
  83. package/lib/typescript/src/react-native/components-factory/createWebObjectAsComponent.d.ts.map +1 -0
  84. package/lib/typescript/src/react-native/components-factory/createWebObjectAsComponent.types.d.ts +129 -0
  85. package/lib/typescript/src/react-native/components-factory/createWebObjectAsComponent.types.d.ts.map +1 -0
  86. package/lib/typescript/src/react-native/components-factory/hooks/useWebObjectMethodsProxy.d.ts +12 -0
  87. package/lib/typescript/src/react-native/components-factory/hooks/useWebObjectMethodsProxy.d.ts.map +1 -0
  88. package/lib/typescript/src/react-native/components-factory/hooks/useWebObjectMountOnLaunch.d.ts +12 -0
  89. package/lib/typescript/src/react-native/components-factory/hooks/useWebObjectMountOnLaunch.d.ts.map +1 -0
  90. package/lib/typescript/src/react-native/components-factory/hooks/useWebObjectOptionsUpdater.d.ts +5 -0
  91. package/lib/typescript/src/react-native/components-factory/hooks/useWebObjectOptionsUpdater.d.ts.map +1 -0
  92. package/lib/typescript/src/react-native/hooks/atoms/useMapAtoms.d.ts +40 -0
  93. package/lib/typescript/src/react-native/hooks/atoms/useMapAtoms.d.ts.map +1 -0
  94. package/lib/typescript/src/react-native/hooks/atoms/useMapAtoms.utils.d.ts +9 -0
  95. package/lib/typescript/src/react-native/hooks/atoms/useMapAtoms.utils.d.ts.map +1 -0
  96. package/lib/typescript/src/react-native/logger/rn-logger.d.ts +12 -0
  97. package/lib/typescript/src/react-native/logger/rn-logger.d.ts.map +1 -0
  98. package/lib/typescript/src/typedoc.d.ts +8 -0
  99. package/lib/typescript/src/typedoc.d.ts.map +1 -0
  100. package/lib/typescript/src/web/bridge/ReactNativeBridge.d.ts +14 -0
  101. package/lib/typescript/src/web/bridge/ReactNativeBridge.d.ts.map +1 -0
  102. package/lib/typescript/src/web/generated/index.d.ts +2 -0
  103. package/lib/typescript/src/web/generated/index.d.ts.map +1 -0
  104. package/lib/typescript/src/web/generated/webview_static_html.d.ts +2 -0
  105. package/lib/typescript/src/web/generated/webview_static_html.d.ts.map +1 -0
  106. package/lib/typescript/src/web/logger/web-logger.d.ts +11 -0
  107. package/lib/typescript/src/web/logger/web-logger.d.ts.map +1 -0
  108. package/lib/typescript/src/web/maplibre-gl-js/MapController.d.ts +15 -0
  109. package/lib/typescript/src/web/maplibre-gl-js/MapController.d.ts.map +1 -0
  110. package/package.json +196 -0
  111. package/src/communication/messages.types.ts +121 -0
  112. package/src/communication/messages.utils.ts +58 -0
  113. package/src/index.ts +31 -0
  114. package/src/react-native/components/Map/Map.tsx +14 -0
  115. package/src/react-native/components/Map/Map.types.ts +149 -0
  116. package/src/react-native/components/MapProvider/MapProvider.hooks.ts +13 -0
  117. package/src/react-native/components/MapProvider/MapProvider.tsx +139 -0
  118. package/src/react-native/components/MapProvider/MapProvider.types.ts +12 -0
  119. package/src/react-native/components/Marker/Marker.tsx +14 -0
  120. package/src/react-native/components/Marker/Marker.types.ts +56 -0
  121. package/src/react-native/components/Popup/Popup.tsx +14 -0
  122. package/src/react-native/components/Popup/Popup.types.ts +43 -0
  123. package/src/react-native/components-factory/createWebObjectAsComponent.ts +33 -0
  124. package/src/react-native/components-factory/createWebObjectAsComponent.types.ts +176 -0
  125. package/src/react-native/components-factory/hooks/useWebObjectMethodsProxy.ts +61 -0
  126. package/src/react-native/components-factory/hooks/useWebObjectMountOnLaunch.ts +79 -0
  127. package/src/react-native/components-factory/hooks/useWebObjectOptionsUpdater.ts +29 -0
  128. package/src/react-native/hooks/atoms/useMapAtoms.ts +261 -0
  129. package/src/react-native/hooks/atoms/useMapAtoms.utils.ts +15 -0
  130. package/src/react-native/logger/rn-logger.ts +51 -0
  131. package/src/typedoc.ts +35 -0
  132. package/src/web/bridge/ReactNativeBridge.ts +44 -0
  133. package/src/web/generated/index.html +18 -0
  134. package/src/web/generated/index.ts +17 -0
  135. package/src/web/generated/webview_static_html.ts +23528 -0
  136. package/src/web/logger/web-logger.ts +36 -0
  137. package/src/web/maplibre-gl-js/MapController.ts +322 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview_static_html.d.ts","sourceRoot":"","sources":["../../../../../src/web/generated/webview_static_html.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,ylzlDAu+tB/B,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Logger to be used from the Web world. Will post the log to the React Native
3
+ * world. Works only in __DEV__.
4
+ */
5
+ declare const WebLogger: {
6
+ debug: (func: string, ...args: any[]) => void;
7
+ info: (func: string, ...args: any[]) => void;
8
+ error: (func: string, ...args: any[]) => void;
9
+ };
10
+ export default WebLogger;
11
+ //# sourceMappingURL=web-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-logger.d.ts","sourceRoot":"","sources":["../../../../../src/web/logger/web-logger.ts"],"names":[],"mappings":"AAyBA;;;GAGG;AACH,QAAA,MAAM,SAAS;kBApBC,MAAM,WAAW,GAAG,EAAE;iBAAtB,MAAM,WAAW,GAAG,EAAE;kBAAtB,MAAM,WAAW,GAAG,EAAE;CAwBrC,CAAA;AAED,eAAe,SAAS,CAAA"}
@@ -0,0 +1,15 @@
1
+ import maplibregl from 'maplibre-gl';
2
+ import type ReactNativeBridge from 'react-native-maplibre-gl-js/web/bridge/ReactNativeBridge';
3
+ import { type MessageFromRNToWeb } from 'react-native-maplibre-gl-js/communication/messages.types';
4
+ /**
5
+ * Manage the MapLibre GL JS map and its objects. Receive messages from the
6
+ * React Native world and act accordingly.
7
+ */
8
+ export default class MapController {
9
+ #private;
10
+ get reactNativeBridge(): ReactNativeBridge;
11
+ set reactNativeBridge(bridge: ReactNativeBridge);
12
+ get map(): maplibregl.Map;
13
+ handleMessage: (message: MessageFromRNToWeb) => void;
14
+ }
15
+ //# sourceMappingURL=MapController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapController.d.ts","sourceRoot":"","sources":["../../../../../src/web/maplibre-gl-js/MapController.ts"],"names":[],"mappings":"AAAA,OAAO,UAAsC,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,iBAAiB,MAAM,0DAA0D,CAAA;AAC7F,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,0DAA0D,CAAA;AAYjE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;;IAKhC,IAAI,iBAAiB,IAAI,iBAAiB,CAKzC;IAED,IAAI,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAE9C;IAED,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAMxB;IAED,aAAa,GAAI,SAAS,kBAAkB,UAiB3C;CAkQF"}
package/package.json ADDED
@@ -0,0 +1,196 @@
1
+ {
2
+ "name": "react-native-maplibre-gl-js",
3
+ "version": "1.0.0",
4
+ "description": "MapLibre GL JS for React Native",
5
+ "main": "./lib/module/index.js",
6
+ "types": "./lib/typescript/src/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "source": "./src/index.ts",
10
+ "types": "./lib/typescript/src/index.d.ts",
11
+ "default": "./lib/module/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "src",
17
+ "lib",
18
+ "!**/.*",
19
+ "!**/*tests*",
20
+ "!**/*fixtures*",
21
+ "!**/*mocks*"
22
+ ],
23
+ "scripts": {
24
+ "build:webview": "node scripts/build.js",
25
+ "example": "yarn workspace react-native-maplibre-gl-js-example",
26
+ "clean": "del-cli lib",
27
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
28
+ "typecheck": "tsc",
29
+ "release": "release-it --only-version",
30
+ "test": "jest --passWithNoTests",
31
+ "docs": "typedoc",
32
+ "prepare": "bob build",
33
+ "semantic-release": "semantic-release"
34
+ },
35
+ "keywords": [
36
+ "react-native",
37
+ "ios",
38
+ "android"
39
+ ],
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/emilienaufauvre/react-native-maplibre-gl-js.git"
43
+ },
44
+ "author": "Emilien Aufauvre <emilien.aufauvre@live.fr> (https://github.com/emilienaufauvre)",
45
+ "license": "MIT",
46
+ "bugs": {
47
+ "url": "https://github.com/emilienaufauvre/react-native-maplibre-gl-js/issues"
48
+ },
49
+ "homepage": "https://github.com/emilienaufauvre/react-native-maplibre-gl-js#readme",
50
+ "publishConfig": {
51
+ "registry": "https://registry.npmjs.org/"
52
+ },
53
+ "peerDependencies": {
54
+ "react": "*",
55
+ "react-native": "*"
56
+ },
57
+ "workspaces": [
58
+ "example"
59
+ ],
60
+ "packageManager": "yarn@4.11.0",
61
+ "react-native-builder-bob": {
62
+ "source": "src",
63
+ "output": "lib",
64
+ "targets": [
65
+ [
66
+ "module",
67
+ {
68
+ "esm": true
69
+ }
70
+ ],
71
+ [
72
+ "typescript",
73
+ {
74
+ "project": "tsconfig.build.json"
75
+ }
76
+ ]
77
+ ]
78
+ },
79
+ "commitlint": {
80
+ "extends": [
81
+ "@commitlint/config-conventional"
82
+ ]
83
+ },
84
+ "release": {
85
+ "branches": [
86
+ "main"
87
+ ],
88
+ "plugins": [
89
+ "@semantic-release/commit-analyzer",
90
+ "@semantic-release/release-notes-generator",
91
+ "@semantic-release/changelog",
92
+ [
93
+ "@semantic-release/npm",
94
+ {
95
+ "npmPublish": true
96
+ }
97
+ ],
98
+ [
99
+ "@semantic-release/github",
100
+ {
101
+ "assets": [
102
+ {
103
+ "path": "CHANGELOG.md",
104
+ "label": "Changelog"
105
+ },
106
+ {
107
+ "path": "*.tgz",
108
+ "label": "NPM package (.tgz)"
109
+ }
110
+ ]
111
+ }
112
+ ]
113
+ ]
114
+ },
115
+ "release-it": {
116
+ "git": {
117
+ "commitMessage": "chore: release ${version}",
118
+ "tagName": "v${version}"
119
+ },
120
+ "npm": {
121
+ "publish": true
122
+ },
123
+ "github": {
124
+ "release": true
125
+ },
126
+ "plugins": {
127
+ "@release-it/conventional-changelog": {
128
+ "preset": {
129
+ "name": "angular"
130
+ }
131
+ }
132
+ }
133
+ },
134
+ "jest": {
135
+ "preset": "react-native",
136
+ "modulePathIgnorePatterns": [
137
+ "<rootDir>/example/node_modules",
138
+ "<rootDir>/lib/"
139
+ ]
140
+ },
141
+ "create-react-native-library": {
142
+ "languages": "js",
143
+ "type": "library",
144
+ "tools": [
145
+ "eslint",
146
+ "lefthook",
147
+ "release-it",
148
+ "jest"
149
+ ],
150
+ "version": "0.55.1"
151
+ },
152
+ "dependencies": {
153
+ "jotai": "^2.15.2",
154
+ "maplibre-gl": "^5.14.0",
155
+ "react-native-logs": "^5.5.0",
156
+ "react-native-webview": "^13.16.0"
157
+ },
158
+ "devDependencies": {
159
+ "@commitlint/config-conventional": "^19.8.1",
160
+ "@eslint/compat": "^1.3.2",
161
+ "@eslint/eslintrc": "^3.3.1",
162
+ "@eslint/js": "^9.35.0",
163
+ "@react-native/babel-preset": "0.81.1",
164
+ "@react-native/eslint-config": "^0.81.1",
165
+ "@release-it/conventional-changelog": "^10.0.1",
166
+ "@semantic-release/changelog": "^6.0.3",
167
+ "@semantic-release/commit-analyzer": "^13.0.1",
168
+ "@semantic-release/git": "^10.0.1",
169
+ "@semantic-release/github": "^12.0.2",
170
+ "@semantic-release/npm": "^13.1.3",
171
+ "@semantic-release/release-notes-generator": "^14.1.0",
172
+ "@types/jest": "^29.5.14",
173
+ "@types/react": "^19.1.12",
174
+ "commitlint": "^19.8.1",
175
+ "conventional-changelog-conventionalcommits": "^9.1.0",
176
+ "del-cli": "^6.0.0",
177
+ "esbuild": "^0.27.0",
178
+ "eslint": "^9.35.0",
179
+ "eslint-config-prettier": "^10.1.8",
180
+ "eslint-plugin-jsdoc": "^61.4.1",
181
+ "eslint-plugin-prettier": "^5.5.4",
182
+ "jest": "^29.7.0",
183
+ "lefthook": "^2.0.11",
184
+ "prettier": "^3.7.4",
185
+ "react": "19.1.0",
186
+ "react-native": "0.81.5",
187
+ "react-native-builder-bob": "^0.40.16",
188
+ "release-it": "^19.0.4",
189
+ "semantic-release": "^25.0.2",
190
+ "ts-node": "^10.9.2",
191
+ "typedoc": "^0.28.15",
192
+ "typedoc-plugin-markdown": "^4.9.0",
193
+ "typedoc-plugin-rename-defaults": "^0.7.3",
194
+ "typescript": "^5.9.3"
195
+ }
196
+ }
@@ -0,0 +1,121 @@
1
+ import type {
2
+ Map as MapLibreMap,
3
+ Marker as MapLibreMarker,
4
+ Popup as MapLibrePopup,
5
+ } from 'maplibre-gl'
6
+ import type {
7
+ WebObjectOptionsInferred,
8
+ WebObjectListeners,
9
+ } from 'react-native-maplibre-gl-js/react-native/components-factory/createWebObjectAsComponent.types'
10
+
11
+ /**
12
+ * The web objects that are supported by this library.
13
+ * A string version to be used as an identifier on the RN side (cannot use
14
+ * MapLibre classes directly).
15
+ * Must correspond to `WebObjectClass`.
16
+ */
17
+ export type WebObjectType = 'map' | 'marker' | 'popup'
18
+
19
+ /**
20
+ * The web objects that are supported by this library.
21
+ * A class version to be used on the web side.
22
+ * Must correspond to `WebObjectType`.
23
+ */
24
+ export type WebObjectClass = MapLibreMap | MapLibreMarker | MapLibrePopup
25
+
26
+ /**
27
+ * UID of a web object in the web world.
28
+ */
29
+ export type WebObjectId = string
30
+
31
+ /**
32
+ * UID of a request for a web object method to be executed.
33
+ */
34
+ export type WebObjectMethodCallRequestId = string
35
+
36
+ export type MessageFromRNToWeb =
37
+ /**
38
+ * TODO Messages about a MapLibre object.
39
+ */
40
+ | {
41
+ type: 'webObjectMount'
42
+ payload: {
43
+ objectId: WebObjectId
44
+ objectType: WebObjectType
45
+ options: WebObjectOptionsInferred<any>
46
+ listeners: WebObjectListeners
47
+ }
48
+ }
49
+ | {
50
+ type: 'webObjectUnmount'
51
+ payload: {
52
+ objectId: WebObjectId
53
+ }
54
+ }
55
+ | {
56
+ type: 'webObjectMethodCall'
57
+ payload: {
58
+ requestId: WebObjectMethodCallRequestId
59
+ objectId: WebObjectId
60
+ method: string
61
+ args: any[]
62
+ }
63
+ }
64
+ | {
65
+ type: 'webObjectOptionsUpdate'
66
+ payload: {
67
+ objectId: WebObjectId
68
+ options: WebObjectOptionsInferred<any>
69
+ }
70
+ }
71
+
72
+ export type MessageFromWebToRN =
73
+ /**
74
+ * Anything that should be logged in the React Native world.
75
+ */
76
+ | {
77
+ type: 'console'
78
+ payload: {
79
+ level: 'debug' | 'info' | 'error'
80
+ args: [string, ...any[]]
81
+ }
82
+ }
83
+ /**
84
+ * Notify the React Native world that the web one is ready.
85
+ */
86
+ | {
87
+ type: 'ready'
88
+ }
89
+ /**
90
+ * Event issued by a web object, eligible to be listened to from the RN world.
91
+ */
92
+ | {
93
+ type: 'webObjectListenerEvent'
94
+ payload: {
95
+ objectId: WebObjectId
96
+ eventName: keyof WebObjectListeners
97
+ event?: any
98
+ }
99
+ }
100
+ /**
101
+ * Response to a call to a method of a web object.
102
+ */
103
+ | {
104
+ type: 'webObjectMethodResponse'
105
+ payload: {
106
+ requestId: WebObjectMethodCallRequestId
107
+ result: any
108
+ }
109
+ }
110
+
111
+ /**
112
+ * To replace HTMLElement instances that cannot be created in React Native.
113
+ */
114
+ export type HTMLElementDescriptor = {
115
+ tagName?: string
116
+ className?: string
117
+ attributes?: Record<string, string>
118
+ style?: Record<string, string>
119
+ dataset?: Record<string, string>
120
+ innerHTML?: string
121
+ }
@@ -0,0 +1,58 @@
1
+ import type {
2
+ WebObjectListenerOnHTMLElement,
3
+ WebObjectListenerOnMapLayer,
4
+ WebObjectListenerOnObject,
5
+ WebObjectListenerOnRN,
6
+ } from 'react-native-maplibre-gl-js/react-native/components-factory/createWebObjectAsComponent.types'
7
+
8
+ export const isWebObjectListenerOnRN = (
9
+ listener?:
10
+ | WebObjectListenerOnRN<any>
11
+ | WebObjectListenerOnObject<any>
12
+ | WebObjectListenerOnHTMLElement<any>
13
+ | WebObjectListenerOnMapLayer<any>,
14
+ ): boolean => {
15
+ if (!listener) {
16
+ return false
17
+ }
18
+ return 'rnListener' in listener
19
+ }
20
+
21
+ export const isWebObjectListenerOnObject = (
22
+ listener?:
23
+ | WebObjectListenerOnRN<any>
24
+ | WebObjectListenerOnObject<any>
25
+ | WebObjectListenerOnHTMLElement<any>
26
+ | WebObjectListenerOnMapLayer<any>,
27
+ ): boolean => {
28
+ if (!listener) {
29
+ return false
30
+ }
31
+ return 'objectListener' in listener
32
+ }
33
+
34
+ export const isWebObjectListenerOnMapLayer = (
35
+ listener?:
36
+ | WebObjectListenerOnRN<any>
37
+ | WebObjectListenerOnObject<any>
38
+ | WebObjectListenerOnHTMLElement<any>
39
+ | WebObjectListenerOnMapLayer<any>,
40
+ ): boolean => {
41
+ if (!listener) {
42
+ return false
43
+ }
44
+ return 'layerListener' in listener
45
+ }
46
+
47
+ export const isWebObjectListenerOnHTMLElement = (
48
+ listener?:
49
+ | WebObjectListenerOnRN<any>
50
+ | WebObjectListenerOnObject<any>
51
+ | WebObjectListenerOnHTMLElement<any>
52
+ | WebObjectListenerOnMapLayer<any>,
53
+ ): boolean => {
54
+ if (!listener) {
55
+ return false
56
+ }
57
+ return 'elementListener' in listener
58
+ }
package/src/index.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Public API of react-native-maplibre-gl-js.
3
+ * @module Public API
4
+ * @packageDocumentation
5
+ */
6
+
7
+ import type { MapProviderProps } from 'react-native-maplibre-gl-js/react-native/components/MapProvider/MapProvider.types'
8
+ import type {
9
+ MapRef,
10
+ MapProps,
11
+ } from 'react-native-maplibre-gl-js/react-native/components/Map/Map.types'
12
+ import type {
13
+ MarkerRef,
14
+ MarkerProps,
15
+ } from 'react-native-maplibre-gl-js/react-native/components/Marker/Marker.types'
16
+ import type {
17
+ PopupRef,
18
+ PopupProps,
19
+ } from 'react-native-maplibre-gl-js/react-native/components/Popup/Popup.types'
20
+
21
+ export type { MapProviderProps }
22
+ export type { MapRef, MapProps }
23
+ export type { MarkerRef, MarkerProps }
24
+ export type { PopupRef, PopupProps }
25
+
26
+ import MapProvider from 'react-native-maplibre-gl-js/react-native/components/MapProvider/MapProvider'
27
+ import Map from 'react-native-maplibre-gl-js/react-native/components/Map/Map'
28
+ import Marker from 'react-native-maplibre-gl-js/react-native/components/Marker/Marker'
29
+ import Popup from 'react-native-maplibre-gl-js/react-native/components/Popup/Popup'
30
+
31
+ export { MapProvider, Map, Marker, Popup }
@@ -0,0 +1,14 @@
1
+ import createWebObjectAsComponent from 'react-native-maplibre-gl-js/react-native/components-factory/createWebObjectAsComponent'
2
+ import type {
3
+ MapRef,
4
+ MapProps,
5
+ } from 'react-native-maplibre-gl-js/react-native/components/Map/Map.types'
6
+
7
+ /**
8
+ * MapLibre Map view.
9
+ * @see {@link https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/ MapLibre GL JS docs}
10
+ * @group Components
11
+ */
12
+ const Map = createWebObjectAsComponent<MapRef, MapProps>('map')
13
+
14
+ export default Map
@@ -0,0 +1,149 @@
1
+ import {
2
+ type Map as MapLibreMap,
3
+ type MapContextEvent,
4
+ type MapLayerMouseEvent,
5
+ type MapLayerTouchEvent,
6
+ type MapLibreEvent,
7
+ type MapLibreZoomEvent,
8
+ type MapOptions as MapLibreMapOptions,
9
+ MapTouchEvent,
10
+ MapWheelEvent,
11
+ ErrorEvent,
12
+ type MapDataEvent,
13
+ type MapStyleDataEvent,
14
+ type MapSourceDataEvent,
15
+ type MapStyleImageMissingEvent,
16
+ } from 'maplibre-gl'
17
+ import type {
18
+ WebObjectMethodsInferred,
19
+ WebObjectOptionsInferred,
20
+ WebObjectListenerOnMapLayer,
21
+ WebObjectListenerOnObject,
22
+ WebObjectListenerOnRN,
23
+ WebObjectProps,
24
+ WebObjectRef,
25
+ } from 'react-native-maplibre-gl-js/react-native/components-factory/createWebObjectAsComponent.types'
26
+
27
+ /**
28
+ * A Map component ref.
29
+ * @group Types
30
+ */
31
+ export type MapRef = WebObjectRef<MapMethods>
32
+
33
+ /**
34
+ * A Map component props.
35
+ * @group Types
36
+ */
37
+ export type MapProps = WebObjectProps<MapOptions, MapListeners>
38
+
39
+ type MapMethods = WebObjectMethodsInferred<MapLibreMap>
40
+ type MapOptions = WebObjectOptionsInferred<MapLibreMapOptions, {}, 'container'>
41
+ type MapListeners = {
42
+ // React native events.
43
+ mount: WebObjectListenerOnRN<void>
44
+ unmount: WebObjectListenerOnRN<void>
45
+ // MapLibre GL JS events.
46
+ // https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#on
47
+ mousedown:
48
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
49
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
50
+ mouseup:
51
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
52
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
53
+ mouseover:
54
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
55
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
56
+ mouseout:
57
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
58
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
59
+ mousemove:
60
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
61
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
62
+ mouseenter: WebObjectListenerOnMapLayer<MapLayerMouseEvent>
63
+ mouseleave: WebObjectListenerOnMapLayer<MapLayerMouseEvent>
64
+ click:
65
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
66
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
67
+ dblclick:
68
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
69
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
70
+ contextmenu:
71
+ | WebObjectListenerOnObject<MapLayerMouseEvent>
72
+ | WebObjectListenerOnMapLayer<MapLayerMouseEvent>
73
+ touchstart:
74
+ | WebObjectListenerOnObject<MapLayerTouchEvent>
75
+ | WebObjectListenerOnMapLayer<MapLayerTouchEvent>
76
+ touchend:
77
+ | WebObjectListenerOnObject<MapLayerTouchEvent>
78
+ | WebObjectListenerOnMapLayer<MapLayerTouchEvent>
79
+ touchcancel:
80
+ | WebObjectListenerOnObject<MapLayerTouchEvent>
81
+ | WebObjectListenerOnMapLayer<MapLayerTouchEvent>
82
+ wheel: WebObjectListenerOnObject<MapWheelEvent>
83
+ resize: WebObjectListenerOnObject<MapLibreEvent>
84
+ remove: WebObjectListenerOnObject<MapLibreEvent>
85
+ touchmove: WebObjectListenerOnObject<MapTouchEvent>
86
+ movestart: WebObjectListenerOnObject<
87
+ MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined>
88
+ >
89
+ move: WebObjectListenerOnObject<
90
+ MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined>
91
+ >
92
+ moveend: WebObjectListenerOnObject<
93
+ MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined>
94
+ >
95
+ dragstart: WebObjectListenerOnObject<
96
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
97
+ >
98
+ drag: WebObjectListenerOnObject<
99
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
100
+ >
101
+ dragend: WebObjectListenerOnObject<
102
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
103
+ >
104
+ zoomstart: WebObjectListenerOnObject<
105
+ MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined>
106
+ >
107
+ zoom: WebObjectListenerOnObject<
108
+ MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined>
109
+ >
110
+ zoomend: WebObjectListenerOnObject<
111
+ MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined>
112
+ >
113
+ rotatestart: WebObjectListenerOnObject<
114
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
115
+ >
116
+ rotate: WebObjectListenerOnObject<
117
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
118
+ >
119
+ rotateend: WebObjectListenerOnObject<
120
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
121
+ >
122
+ pitchstart: WebObjectListenerOnObject<
123
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
124
+ >
125
+ pitch: WebObjectListenerOnObject<
126
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
127
+ >
128
+ pitchend: WebObjectListenerOnObject<
129
+ MapLibreEvent<MouseEvent | TouchEvent | undefined>
130
+ >
131
+ boxzoomstart: WebObjectListenerOnObject<MapLibreZoomEvent>
132
+ boxzoomend: WebObjectListenerOnObject<MapLibreZoomEvent>
133
+ boxzoomcancel: WebObjectListenerOnObject<MapLibreZoomEvent>
134
+ webglcontextlost: WebObjectListenerOnObject<MapContextEvent>
135
+ webglcontextrestored: WebObjectListenerOnObject<MapContextEvent>
136
+ load: WebObjectListenerOnObject<MapLibreEvent>
137
+ render: WebObjectListenerOnObject<MapLibreEvent>
138
+ idle: WebObjectListenerOnObject<MapLibreEvent>
139
+ error: WebObjectListenerOnObject<ErrorEvent>
140
+ data: WebObjectListenerOnObject<MapDataEvent>
141
+ styledata: WebObjectListenerOnObject<MapStyleDataEvent>
142
+ sourcedata: WebObjectListenerOnObject<MapSourceDataEvent>
143
+ dataloading: WebObjectListenerOnObject<MapDataEvent>
144
+ styledataloading: WebObjectListenerOnObject<MapStyleDataEvent>
145
+ sourcedataloading: WebObjectListenerOnObject<MapSourceDataEvent>
146
+ styleimagemissing: WebObjectListenerOnObject<MapStyleImageMissingEvent>
147
+ dataabort: WebObjectListenerOnObject<MapDataEvent>
148
+ sourcedataabort: WebObjectListenerOnObject<MapSourceDataEvent>
149
+ }
@@ -0,0 +1,13 @@
1
+ import { StyleSheet } from 'react-native'
2
+ import { useMemo } from 'react'
3
+
4
+ export const useStyles = () => {
5
+ return useMemo(
6
+ () =>
7
+ StyleSheet.create({
8
+ container: { width: '100%', height: '100%', overflow: 'hidden' },
9
+ webview: { flex: 1, backgroundColor: 'transparent' },
10
+ }),
11
+ [],
12
+ )
13
+ }