mobility-toolbox-js 2.3.9 → 2.3.10

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 (471) hide show
  1. package/.esdoc.js +18 -0
  2. package/.eslintignore +1 -0
  3. package/.eslintrc.js +25 -0
  4. package/.fixpackrc +20 -0
  5. package/.github/workflows/build.yml +16 -0
  6. package/.github/workflows/conventional-pr-title.yml +16 -0
  7. package/.github/workflows/cypress.yml +101 -0
  8. package/.github/workflows/test.yml +17 -0
  9. package/.husky/commit-msg +4 -0
  10. package/.husky/post-checkout +4 -0
  11. package/.husky/post-merge +4 -0
  12. package/.husky/post-rebase +4 -0
  13. package/.husky/pre-commit +4 -0
  14. package/.lintstagedrc.js +10 -0
  15. package/.nvmrc +1 -0
  16. package/.prettierrc.js +5 -0
  17. package/.stylelintrc.js +4 -0
  18. package/CHANGELOG.md +132 -0
  19. package/LICENSE +21 -0
  20. package/MIGRATION-V2.md +248 -0
  21. package/README.md +42 -0
  22. package/__mocks__/mapbox-gl.js +81 -0
  23. package/__mocks__/maplibre-gl.js +81 -0
  24. package/babel.config.js +9 -0
  25. package/commitlint.config.js +1 -0
  26. package/cypress/e2e/examples/api.cy.js +7 -0
  27. package/cypress/e2e/examples/examples.cy.js +7 -0
  28. package/cypress/e2e/examples/navigation.cy.js +29 -0
  29. package/cypress/fixtures/example.json +5 -0
  30. package/cypress/plugins/index.js +21 -0
  31. package/cypress/support/commands.js +25 -0
  32. package/cypress/support/e2e.js +20 -0
  33. package/cypress.config.ts +15 -0
  34. package/data/fetchRoute.json +292 -0
  35. package/data/fetchTrajectories.json +18 -0
  36. package/data/fetchTrajectoryById.json +3 -0
  37. package/data/fetchTrajectoryStations.json +18 -0
  38. package/data/stopsSearch.json +15 -0
  39. package/dependabot.yml +15 -0
  40. package/doc/.eslintrc.json +1 -0
  41. package/doc/README.md +34 -0
  42. package/doc/next.config.js +16 -0
  43. package/doc/package.json +41 -0
  44. package/doc/pages/404.js +5 -0
  45. package/doc/pages/_app.js +61 -0
  46. package/doc/pages/_document.js +64 -0
  47. package/doc/pages/doc/[...slug].js +23 -0
  48. package/doc/pages/doc.js +23 -0
  49. package/doc/pages/example/[example].js +52 -0
  50. package/doc/pages/examples.js +34 -0
  51. package/doc/pages/index.js +25 -0
  52. package/doc/public/README.md +15 -0
  53. package/doc/public/favicon.ico +0 -0
  54. package/doc/public/static/assets/Lato-Black.ttf +0 -0
  55. package/doc/public/static/assets/Lato-BlackItalic.ttf +0 -0
  56. package/doc/public/static/assets/Lato-Bold.ttf +0 -0
  57. package/doc/public/static/assets/Lato-BoldItalic.ttf +0 -0
  58. package/doc/public/static/assets/Lato-Italic.ttf +0 -0
  59. package/doc/public/static/assets/Lato-Light.ttf +0 -0
  60. package/doc/public/static/assets/Lato-LightItalic.ttf +0 -0
  61. package/doc/public/static/assets/Lato-Regular.ttf +0 -0
  62. package/doc/public/static/assets/Lato-Thin.ttf +0 -0
  63. package/doc/public/static/assets/Lato-ThinItalic.ttf +0 -0
  64. package/doc/public/static/assets/OFL.txt +93 -0
  65. package/doc/public/static/examples/assets/tralis-live-map/index.js +11 -0
  66. package/doc/public/static/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  67. package/doc/public/static/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  68. package/doc/public/static/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  69. package/doc/public/static/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  70. package/doc/public/static/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  71. package/doc/public/static/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  72. package/doc/public/static/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  73. package/doc/public/static/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  74. package/doc/public/static/examples/assets/tralis-live-map/unknown.svg +107 -0
  75. package/doc/public/static/examples/layers.html +11 -0
  76. package/doc/public/static/examples/layers.js +97 -0
  77. package/doc/public/static/examples/mb-copyright.html +26 -0
  78. package/doc/public/static/examples/mb-copyright.js +37 -0
  79. package/doc/public/static/examples/mb-tracker.html +1 -0
  80. package/doc/public/static/examples/mb-tracker.js +40 -0
  81. package/doc/public/static/examples/mb-tracker.md +1 -0
  82. package/doc/public/static/examples/mb-tralis.html +1 -0
  83. package/doc/public/static/examples/mb-tralis.js +34 -0
  84. package/doc/public/static/examples/ol-copyright.html +26 -0
  85. package/doc/public/static/examples/ol-copyright.js +43 -0
  86. package/doc/public/static/examples/ol-mapbox-layer.html +1 -0
  87. package/doc/public/static/examples/ol-mapbox-layer.js +28 -0
  88. package/doc/public/static/examples/ol-mapbox-style-layer.html +12 -0
  89. package/doc/public/static/examples/ol-mapbox-style-layer.js +48 -0
  90. package/doc/public/static/examples/ol-query.html +32 -0
  91. package/doc/public/static/examples/ol-query.js +83 -0
  92. package/doc/public/static/examples/ol-routing.html +26 -0
  93. package/doc/public/static/examples/ol-routing.js +65 -0
  94. package/doc/public/static/examples/ol-routing.md +1 -0
  95. package/doc/public/static/examples/ol-stop-finder.html +15 -0
  96. package/doc/public/static/examples/ol-stop-finder.js +35 -0
  97. package/doc/public/static/examples/ol-stop-finder.md +1 -0
  98. package/doc/public/static/examples/ol-tracker.html +1 -0
  99. package/doc/public/static/examples/ol-tracker.js +41 -0
  100. package/doc/public/static/examples/ol-tracker.md +1 -0
  101. package/doc/public/static/examples/ol-tralis.html +5 -0
  102. package/doc/public/static/examples/ol-tralis.js +62 -0
  103. package/doc/public/static/examples/tralis-live-map.html +1 -0
  104. package/doc/public/static/examples/tralis-live-map.js +67 -0
  105. package/doc/public/static/examples/tralis-live-map.md +3 -0
  106. package/doc/public/static/img/live_tracker_mb.jpg +0 -0
  107. package/doc/public/static/img/live_tracker_munich.jpg +0 -0
  108. package/doc/public/static/img/live_tracker_ol.jpg +0 -0
  109. package/doc/public/static/img/mapbox.jpg +0 -0
  110. package/doc/public/static/img/mapbox_style.jpg +0 -0
  111. package/doc/public/static/img/ol-copyright.png +0 -0
  112. package/doc/public/static/img/query_objects.jpg +0 -0
  113. package/doc/public/static/img/routing.jpg +0 -0
  114. package/doc/public/static/img/simple_map.jpg +0 -0
  115. package/doc/public/static/img/stops.jpg +0 -0
  116. package/doc/public/vercel.svg +4 -0
  117. package/doc/src/components/CodeSandboxButton.js +102 -0
  118. package/doc/src/components/Documentation.js +42 -0
  119. package/doc/src/components/Esdoc/Anchor.js +57 -0
  120. package/doc/src/components/Esdoc/ClassDoc.js +272 -0
  121. package/doc/src/components/Esdoc/DeprecatedHTML.js +16 -0
  122. package/doc/src/components/Esdoc/DetailDocs.js +279 -0
  123. package/doc/src/components/Esdoc/DetailHTML.js +33 -0
  124. package/doc/src/components/Esdoc/DirectSubclassHTML.js +30 -0
  125. package/doc/src/components/Esdoc/DocBuilderUtils.js +697 -0
  126. package/doc/src/components/Esdoc/DocLinkHTML.js +63 -0
  127. package/doc/src/components/Esdoc/DocsLinkHTML.js +38 -0
  128. package/doc/src/components/Esdoc/Esdoc.js +63 -0
  129. package/doc/src/components/Esdoc/EsdocContent.js +56 -0
  130. package/doc/src/components/Esdoc/EsdocNavigation.js +13 -0
  131. package/doc/src/components/Esdoc/EsdocSearch.js +78 -0
  132. package/doc/src/components/Esdoc/ExperimentalHTML.js +17 -0
  133. package/doc/src/components/Esdoc/ExtendsChainHTML.js +32 -0
  134. package/doc/src/components/Esdoc/FileDocLinkHTML.js +62 -0
  135. package/doc/src/components/Esdoc/IdentifiersDoc.js +113 -0
  136. package/doc/src/components/Esdoc/IndirectSubclassHTML.js +30 -0
  137. package/doc/src/components/Esdoc/InheritedSummaryDoc.js +70 -0
  138. package/doc/src/components/Esdoc/InheritedSummaryHTML.js +38 -0
  139. package/doc/src/components/Esdoc/MixinClassesHTML.js +29 -0
  140. package/doc/src/components/Esdoc/NavDoc.js +112 -0
  141. package/doc/src/components/Esdoc/OverrideMethod.js +44 -0
  142. package/doc/src/components/Esdoc/OverrideMethodDescription.js +35 -0
  143. package/doc/src/components/Esdoc/Properties.js +89 -0
  144. package/doc/src/components/Esdoc/README.md +45 -0
  145. package/doc/src/components/Esdoc/SignatureHTML.js +123 -0
  146. package/doc/src/components/Esdoc/SingleDoc.js +31 -0
  147. package/doc/src/components/Esdoc/SummaryDoc.js +160 -0
  148. package/doc/src/components/Esdoc/SummaryHTML.js +96 -0
  149. package/doc/src/components/Esdoc/TypeDocLinkHTML.js +251 -0
  150. package/doc/src/components/Esdoc/index.js +7 -0
  151. package/doc/src/components/Esdoc/taffydb.js +2070 -0
  152. package/doc/src/components/Example.js +200 -0
  153. package/doc/src/components/ExampleCard.js +126 -0
  154. package/doc/src/components/Examples.js +78 -0
  155. package/doc/src/components/Home.js +121 -0
  156. package/doc/src/components/TrackerExample.js +39 -0
  157. package/doc/src/examples.js +117 -0
  158. package/doc/styles/App.scss +53 -0
  159. package/doc/styles/identifiers.css +38 -0
  160. package/doc/styles/search.css +76 -0
  161. package/doc/styles/style.css +603 -0
  162. package/esdoc/README.md +27 -0
  163. package/esdoc/plugins/MyPlugin.js +69 -0
  164. package/esdoc/plugins/dynamic-property-plugin/Plugin.js +50 -0
  165. package/esdoc/plugins/externals-plugin/Plugin.js +45 -0
  166. package/esdoc/plugins/externals-plugin/externals.js +93 -0
  167. package/esdoc/plugins/optional-chaining-plugin/Plugin.js +8 -0
  168. package/global-setup.js +3 -0
  169. package/jest.config.js +24 -0
  170. package/package.json +18 -18
  171. package/pull_request_template.md +17 -0
  172. package/scripts/read-pkg-json.js +22 -0
  173. package/src/api/RealtimeAPI.test.js +144 -0
  174. package/src/api/RealtimeAPI.ts +712 -0
  175. package/src/api/RoutingAPI.test.js +41 -0
  176. package/src/api/RoutingAPI.ts +47 -0
  177. package/src/api/StopsAPI.test.js +34 -0
  178. package/src/api/StopsAPI.ts +45 -0
  179. package/{api → src/api}/typedefs.js +11 -1
  180. package/src/common/api/HttpAPI.test.js +68 -0
  181. package/src/common/api/HttpAPI.ts +77 -0
  182. package/src/common/api/WebSocketAPI.test.js +421 -0
  183. package/src/common/api/WebSocketAPI.ts +515 -0
  184. package/src/common/controls/ControlCommon.test.js +106 -0
  185. package/src/common/controls/ControlCommon.ts +194 -0
  186. package/src/common/controls/CopyrightControlCommon.ts +41 -0
  187. package/src/common/controls/StopFinderControlCommon.ts +192 -0
  188. package/src/common/layers/LayerCommon.test.js +158 -0
  189. package/src/common/layers/LayerCommon.ts +321 -0
  190. package/src/common/mixins/RealtimeLayerMixin.ts +1168 -0
  191. package/src/common/mixins/UserInteractionsLayerMixin.test.js +227 -0
  192. package/src/common/mixins/UserInteractionsLayerMixin.ts +352 -0
  193. package/src/common/styles/realtimeDefaultStyle.ts +436 -0
  194. package/src/common/styles/realtimeDelayStyle.ts +27 -0
  195. package/src/common/styles/realtimeHeadingStyle.ts +138 -0
  196. package/src/common/styles/realtimeSimpleStyle.ts +25 -0
  197. package/{common → src/common}/typedefs.js +1 -1
  198. package/src/common/utils/compareDepartures.ts +46 -0
  199. package/src/common/utils/createCanvas.ts +33 -0
  200. package/src/common/utils/createRealtimeFilters.test.js +100 -0
  201. package/src/common/utils/createRealtimeFilters.ts +96 -0
  202. package/src/common/utils/debounceDeparturesMessages.ts +52 -0
  203. package/src/common/utils/debounceWebsocketMessages.ts +47 -0
  204. package/src/common/utils/getLayersAsFlatArray.ts +17 -0
  205. package/src/common/utils/getMapboxMapCopyrights.test.js +47 -0
  206. package/src/common/utils/getMapboxMapCopyrights.ts +52 -0
  207. package/src/common/utils/getMapboxRender.ts +104 -0
  208. package/src/common/utils/getMaplibreRender.ts +54 -0
  209. package/{common/utils/getRealtimeModeSuffix.d.ts → src/common/utils/getRealtimeModeSuffix.ts} +4 -2
  210. package/src/common/utils/getUrlWithParams.ts +21 -0
  211. package/src/common/utils/getVehiclePosition.ts +92 -0
  212. package/{common → src/common}/utils/index.js +1 -2
  213. package/src/common/utils/realtimeConfig.test.js +57 -0
  214. package/src/common/utils/realtimeConfig.ts +228 -0
  215. package/src/common/utils/removeDuplicate.test.js +22 -0
  216. package/src/common/utils/removeDuplicate.ts +22 -0
  217. package/src/common/utils/renderTrajectories.ts +194 -0
  218. package/src/common/utils/sortAndFilterDepartures.ts +78 -0
  219. package/src/common/utils/sortByDelay.ts +29 -0
  220. package/src/common/utils/timeUtils.test.js +16 -0
  221. package/src/common/utils/timeUtils.ts +45 -0
  222. package/{iife.js → src/iife.js} +3 -1
  223. package/src/index.js +10 -0
  224. package/{mapbox/controls/CopyrightControl.js → src/mapbox/controls/CopyrightControl.ts} +26 -21
  225. package/src/mapbox/layers/Layer.test.js +217 -0
  226. package/src/mapbox/layers/Layer.ts +144 -0
  227. package/src/mapbox/layers/RealtimeLayer.test.js +13 -0
  228. package/src/mapbox/layers/RealtimeLayer.ts +350 -0
  229. package/src/mapbox/utils/getMercatorResolution.ts +21 -0
  230. package/src/mapbox/utils/getSourceCoordinates.ts +34 -0
  231. package/src/ol/README.md +0 -0
  232. package/src/ol/controls/CopyrightControl.test.js +211 -0
  233. package/src/ol/controls/CopyrightControl.ts +82 -0
  234. package/src/ol/controls/RoutingControl.test.js +205 -0
  235. package/src/ol/controls/RoutingControl.ts +869 -0
  236. package/src/ol/controls/StopFinderControl.test.js +59 -0
  237. package/{ol/controls/StopFinderControl.js → src/ol/controls/StopFinderControl.ts} +10 -7
  238. package/src/ol/controls/snapshots/RoutingControlRouteGen10.json +58 -0
  239. package/src/ol/controls/snapshots/RoutingControlRouteGen100.json +292 -0
  240. package/src/ol/controls/snapshots/RoutingControlRouteGen30.json +69 -0
  241. package/src/ol/controls/snapshots/RoutingControlRouteGen5.json +58 -0
  242. package/src/ol/controls/snapshots/RoutingControlRouteOSM.json +759 -0
  243. package/src/ol/controls/snapshots/RoutingControlStation1.json +60 -0
  244. package/src/ol/controls/snapshots/RoutingControlStation2.json +49 -0
  245. package/src/ol/layers/Layer.test.js +212 -0
  246. package/src/ol/layers/Layer.ts +252 -0
  247. package/src/ol/layers/MapGlLayer.ts +294 -0
  248. package/src/ol/layers/MapboxLayer.test.js +190 -0
  249. package/src/ol/layers/MapboxLayer.ts +136 -0
  250. package/src/ol/layers/MapboxStyleLayer.test.js +258 -0
  251. package/src/ol/layers/MapboxStyleLayer.ts +466 -0
  252. package/{ol/layers/MaplibreLayer.d.ts → src/ol/layers/MaplibreLayer.ts} +21 -10
  253. package/src/ol/layers/RealtimeLayer.test.js +84 -0
  254. package/src/ol/layers/RealtimeLayer.ts +465 -0
  255. package/src/ol/layers/RoutingLayer.test.js +48 -0
  256. package/src/ol/layers/RoutingLayer.ts +113 -0
  257. package/src/ol/layers/VectorLayer.test.js +87 -0
  258. package/src/ol/layers/VectorLayer.ts +48 -0
  259. package/src/ol/layers/WMSLayer.test.js +65 -0
  260. package/src/ol/layers/WMSLayer.ts +114 -0
  261. package/src/ol/styles/fullTrajectoryDelayStyle.ts +37 -0
  262. package/src/ol/styles/fullTrajectoryStyle.ts +56 -0
  263. package/{setupTests.js → src/setupTests.js} +12 -7
  264. package/tsconfig.json +23 -0
  265. package/api/RealtimeAPI.d.ts +0 -290
  266. package/api/RealtimeAPI.d.ts.map +0 -1
  267. package/api/RealtimeAPI.js +0 -483
  268. package/api/RoutingAPI.d.ts +0 -37
  269. package/api/RoutingAPI.d.ts.map +0 -1
  270. package/api/RoutingAPI.js +0 -35
  271. package/api/StopsAPI.d.ts +0 -38
  272. package/api/StopsAPI.d.ts.map +0 -1
  273. package/api/StopsAPI.js +0 -36
  274. package/api/index.d.ts +0 -4
  275. package/api/index.d.ts.map +0 -1
  276. package/api/typedefs.d.ts +0 -179
  277. package/api/typedefs.d.ts.map +0 -1
  278. package/common/api/HttpAPI.d.ts +0 -31
  279. package/common/api/HttpAPI.d.ts.map +0 -1
  280. package/common/api/HttpAPI.js +0 -57
  281. package/common/api/WebSocketAPI.d.ts +0 -153
  282. package/common/api/WebSocketAPI.d.ts.map +0 -1
  283. package/common/api/WebSocketAPI.js +0 -341
  284. package/common/controls/ControlCommon.d.ts +0 -76
  285. package/common/controls/ControlCommon.d.ts.map +0 -1
  286. package/common/controls/ControlCommon.js +0 -150
  287. package/common/controls/CopyrightControlCommon.d.ts +0 -13
  288. package/common/controls/CopyrightControlCommon.d.ts.map +0 -1
  289. package/common/controls/CopyrightControlCommon.js +0 -34
  290. package/common/controls/StopFinderControlCommon.d.ts +0 -55
  291. package/common/controls/StopFinderControlCommon.d.ts.map +0 -1
  292. package/common/controls/StopFinderControlCommon.js +0 -144
  293. package/common/index.d.ts +0 -3
  294. package/common/index.d.ts.map +0 -1
  295. package/common/layers/LayerCommon.d.ts +0 -94
  296. package/common/layers/LayerCommon.d.ts.map +0 -1
  297. package/common/layers/LayerCommon.js +0 -244
  298. package/common/mixins/RealtimeLayerMixin.d.ts +0 -288
  299. package/common/mixins/RealtimeLayerMixin.d.ts.map +0 -1
  300. package/common/mixins/RealtimeLayerMixin.js +0 -779
  301. package/common/mixins/UserInteractionsLayerMixin.d.ts +0 -60
  302. package/common/mixins/UserInteractionsLayerMixin.d.ts.map +0 -1
  303. package/common/mixins/UserInteractionsLayerMixin.js +0 -241
  304. package/common/styles/index.d.ts +0 -5
  305. package/common/styles/index.d.ts.map +0 -1
  306. package/common/styles/realtimeDefaultStyle.d.ts +0 -36
  307. package/common/styles/realtimeDefaultStyle.d.ts.map +0 -1
  308. package/common/styles/realtimeDefaultStyle.js +0 -276
  309. package/common/styles/realtimeDelayStyle.d.ts +0 -12
  310. package/common/styles/realtimeDelayStyle.d.ts.map +0 -1
  311. package/common/styles/realtimeDelayStyle.js +0 -13
  312. package/common/styles/realtimeHeadingStyle.d.ts +0 -12
  313. package/common/styles/realtimeHeadingStyle.d.ts.map +0 -1
  314. package/common/styles/realtimeHeadingStyle.js +0 -87
  315. package/common/styles/realtimeSimpleStyle.d.ts +0 -4
  316. package/common/styles/realtimeSimpleStyle.d.ts.map +0 -1
  317. package/common/styles/realtimeSimpleStyle.js +0 -23
  318. package/common/typedefs.d.ts +0 -183
  319. package/common/typedefs.d.ts.map +0 -1
  320. package/common/utils/compareDepartures.d.ts +0 -11
  321. package/common/utils/compareDepartures.d.ts.map +0 -1
  322. package/common/utils/compareDepartures.js +0 -35
  323. package/common/utils/createCanvas.d.ts +0 -11
  324. package/common/utils/createCanvas.d.ts.map +0 -1
  325. package/common/utils/createCanvas.js +0 -28
  326. package/common/utils/createRealtimeFilters.d.ts +0 -13
  327. package/common/utils/createRealtimeFilters.d.ts.map +0 -1
  328. package/common/utils/createRealtimeFilters.js +0 -74
  329. package/common/utils/debounceDeparturesMessages.d.ts +0 -13
  330. package/common/utils/debounceDeparturesMessages.d.ts.map +0 -1
  331. package/common/utils/debounceDeparturesMessages.js +0 -28
  332. package/common/utils/debounceWebsocketMessages.d.ts +0 -12
  333. package/common/utils/debounceWebsocketMessages.d.ts.map +0 -1
  334. package/common/utils/debounceWebsocketMessages.js +0 -30
  335. package/common/utils/getLayersAsFlatArray.d.ts +0 -4
  336. package/common/utils/getLayersAsFlatArray.d.ts.map +0 -1
  337. package/common/utils/getLayersAsFlatArray.js +0 -16
  338. package/common/utils/getMapboxMapCopyrights.d.ts +0 -18
  339. package/common/utils/getMapboxMapCopyrights.d.ts.map +0 -1
  340. package/common/utils/getMapboxMapCopyrights.js +0 -30
  341. package/common/utils/getMapboxRender.d.ts +0 -8
  342. package/common/utils/getMapboxRender.d.ts.map +0 -1
  343. package/common/utils/getMapboxRender.js +0 -88
  344. package/common/utils/getMaplibreRender.d.ts +0 -9
  345. package/common/utils/getMaplibreRender.d.ts.map +0 -1
  346. package/common/utils/getMaplibreRender.js +0 -40
  347. package/common/utils/getRealtimeModeSuffix.d.ts.map +0 -1
  348. package/common/utils/getRealtimeModeSuffix.js +0 -7
  349. package/common/utils/getUrlWithParams.d.ts +0 -9
  350. package/common/utils/getUrlWithParams.d.ts.map +0 -1
  351. package/common/utils/getUrlWithParams.js +0 -18
  352. package/common/utils/getVehiclePosition.d.ts +0 -16
  353. package/common/utils/getVehiclePosition.d.ts.map +0 -1
  354. package/common/utils/getVehiclePosition.js +0 -72
  355. package/common/utils/index.d.ts +0 -18
  356. package/common/utils/index.d.ts.map +0 -1
  357. package/common/utils/realtimeConfig.d.ts +0 -53
  358. package/common/utils/realtimeConfig.d.ts.map +0 -1
  359. package/common/utils/realtimeConfig.js +0 -202
  360. package/common/utils/removeDuplicate.d.ts +0 -10
  361. package/common/utils/removeDuplicate.d.ts.map +0 -1
  362. package/common/utils/removeDuplicate.js +0 -15
  363. package/common/utils/renderTrajectories.d.ts +0 -17
  364. package/common/utils/renderTrajectories.d.ts.map +0 -1
  365. package/common/utils/renderTrajectories.js +0 -110
  366. package/common/utils/sortAndFilterDepartures.d.ts +0 -16
  367. package/common/utils/sortAndFilterDepartures.d.ts.map +0 -1
  368. package/common/utils/sortAndFilterDepartures.js +0 -58
  369. package/common/utils/sortByDelay.d.ts +0 -4
  370. package/common/utils/sortByDelay.d.ts.map +0 -1
  371. package/common/utils/sortByDelay.js +0 -21
  372. package/common/utils/timeUtils.d.ts +0 -24
  373. package/common/utils/timeUtils.d.ts.map +0 -1
  374. package/common/utils/timeUtils.js +0 -39
  375. package/iife.d.ts +0 -3
  376. package/iife.d.ts.map +0 -1
  377. package/index.d.ts +0 -10
  378. package/index.d.ts.map +0 -1
  379. package/index.js +0 -10
  380. package/mapbox/controls/CopyrightControl.d.ts +0 -29
  381. package/mapbox/controls/CopyrightControl.d.ts.map +0 -1
  382. package/mapbox/controls/index.d.ts +0 -2
  383. package/mapbox/controls/index.d.ts.map +0 -1
  384. package/mapbox/index.d.ts +0 -6
  385. package/mapbox/index.d.ts.map +0 -1
  386. package/mapbox/layers/Layer.d.ts +0 -59
  387. package/mapbox/layers/Layer.d.ts.map +0 -1
  388. package/mapbox/layers/Layer.js +0 -101
  389. package/mapbox/layers/RealtimeLayer.d.ts +0 -180
  390. package/mapbox/layers/RealtimeLayer.d.ts.map +0 -1
  391. package/mapbox/layers/RealtimeLayer.js +0 -270
  392. package/mapbox/layers/index.d.ts +0 -3
  393. package/mapbox/layers/index.d.ts.map +0 -1
  394. package/mapbox/utils/getMercatorResolution.d.ts +0 -9
  395. package/mapbox/utils/getMercatorResolution.d.ts.map +0 -1
  396. package/mapbox/utils/getMercatorResolution.js +0 -18
  397. package/mapbox/utils/getSourceCoordinates.d.ts +0 -9
  398. package/mapbox/utils/getSourceCoordinates.d.ts.map +0 -1
  399. package/mapbox/utils/getSourceCoordinates.js +0 -27
  400. package/mapbox/utils/index.d.ts +0 -3
  401. package/mapbox/utils/index.d.ts.map +0 -1
  402. package/mbt.js +0 -64706
  403. package/mbt.js.map +0 -7
  404. package/mbt.min.js +0 -1090
  405. package/mbt.min.js.map +0 -7
  406. package/ol/controls/CopyrightControl.d.ts +0 -31
  407. package/ol/controls/CopyrightControl.d.ts.map +0 -1
  408. package/ol/controls/CopyrightControl.js +0 -68
  409. package/ol/controls/RoutingControl.d.ts +0 -193
  410. package/ol/controls/RoutingControl.d.ts.map +0 -1
  411. package/ol/controls/RoutingControl.js +0 -631
  412. package/ol/controls/StopFinderControl.d.ts +0 -30
  413. package/ol/controls/StopFinderControl.d.ts.map +0 -1
  414. package/ol/controls/index.d.ts +0 -4
  415. package/ol/controls/index.d.ts.map +0 -1
  416. package/ol/index.d.ts +0 -6
  417. package/ol/index.d.ts.map +0 -1
  418. package/ol/layers/Layer.d.ts +0 -86
  419. package/ol/layers/Layer.d.ts.map +0 -1
  420. package/ol/layers/Layer.js +0 -174
  421. package/ol/layers/MapGlLayer.d.ts +0 -67
  422. package/ol/layers/MapGlLayer.d.ts.map +0 -1
  423. package/ol/layers/MapGlLayer.js +0 -218
  424. package/ol/layers/MapboxLayer.d.ts +0 -50
  425. package/ol/layers/MapboxLayer.d.ts.map +0 -1
  426. package/ol/layers/MapboxLayer.js +0 -109
  427. package/ol/layers/MapboxStyleLayer.d.ts +0 -130
  428. package/ol/layers/MapboxStyleLayer.d.ts.map +0 -1
  429. package/ol/layers/MapboxStyleLayer.js +0 -378
  430. package/ol/layers/MaplibreLayer.d.ts.map +0 -1
  431. package/ol/layers/MaplibreLayer.js +0 -34
  432. package/ol/layers/RealtimeLayer.d.ts +0 -202
  433. package/ol/layers/RealtimeLayer.d.ts.map +0 -1
  434. package/ol/layers/RealtimeLayer.js +0 -332
  435. package/ol/layers/RoutingLayer.d.ts +0 -35
  436. package/ol/layers/RoutingLayer.d.ts.map +0 -1
  437. package/ol/layers/RoutingLayer.js +0 -85
  438. package/ol/layers/VectorLayer.d.ts +0 -25
  439. package/ol/layers/VectorLayer.d.ts.map +0 -1
  440. package/ol/layers/VectorLayer.js +0 -38
  441. package/ol/layers/WMSLayer.d.ts +0 -42
  442. package/ol/layers/WMSLayer.d.ts.map +0 -1
  443. package/ol/layers/WMSLayer.js +0 -88
  444. package/ol/layers/index.d.ts +0 -9
  445. package/ol/layers/index.d.ts.map +0 -1
  446. package/ol/styles/fullTrajectoryDelayStyle.d.ts +0 -4
  447. package/ol/styles/fullTrajectoryDelayStyle.d.ts.map +0 -1
  448. package/ol/styles/fullTrajectoryDelayStyle.js +0 -33
  449. package/ol/styles/fullTrajectoryStyle.d.ts +0 -5
  450. package/ol/styles/fullTrajectoryStyle.d.ts.map +0 -1
  451. package/ol/styles/fullTrajectoryStyle.js +0 -44
  452. package/ol/styles/index.d.ts +0 -3
  453. package/ol/styles/index.d.ts.map +0 -1
  454. package/setupTests.d.ts +0 -2
  455. package/setupTests.d.ts.map +0 -1
  456. /package/{api → src/api}/index.js +0 -0
  457. /package/{common → src/common}/index.js +0 -0
  458. /package/{common → src/common}/styles/index.js +0 -0
  459. /package/{mapbox → src/mapbox}/controls/index.js +0 -0
  460. /package/{mapbox → src/mapbox}/index.js +0 -0
  461. /package/{mapbox → src/mapbox}/layers/index.js +0 -0
  462. /package/{mapbox → src/mapbox}/utils/index.js +0 -0
  463. /package/{ol → src/ol}/controls/index.js +0 -0
  464. /package/{ol → src/ol}/index.js +0 -0
  465. /package/{ol → src/ol}/layers/index.js +0 -0
  466. /package/{ol → src/ol}/styles/index.js +0 -0
  467. /package/{types → src/types}/common.d.ts +0 -0
  468. /package/{types → src/types}/index.d.ts +0 -0
  469. /package/{types → src/types}/realtime.d.ts +0 -0
  470. /package/{types → src/types}/routing.d.ts +0 -0
  471. /package/{types → src/types}/stops.d.ts +0 -0
@@ -0,0 +1,294 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import { toLonLat } from 'ol/proj';
3
+ import OlLayer, { RenderFunction } from 'ol/layer/Layer';
4
+ import Source from 'ol/source/Source';
5
+ import GeoJSON from 'ol/format/GeoJSON';
6
+ import OlMap from 'ol/Map';
7
+ import { Coordinate } from 'ol/coordinate';
8
+ import BaseEvent from 'ol/events/Event';
9
+ import { Feature } from 'ol';
10
+ import { getUrlWithParams, getMapboxMapCopyrights } from '../../common/utils';
11
+ import {
12
+ AnyMapboxMap,
13
+ AnyMapboxMapClass,
14
+ LayerGetFeatureInfoResponse,
15
+ } from '../../types';
16
+ import Layer, { OlLayerOptions } from './Layer';
17
+
18
+ export type MapGlLayerOptions = OlLayerOptions & {
19
+ url?: string;
20
+ apiKey?: string;
21
+ apiKeyName?: string;
22
+ mapOptions?: any;
23
+ tabIndex?: number;
24
+ };
25
+
26
+ /**
27
+ * Common class for Mapbox and Maplibre and potential other fork from Mapbox.
28
+ * It's used to share code between Mapbox and Maplibre layers without importing both libs.
29
+ */
30
+ class MapGlLayer extends Layer {
31
+ mbMap?: AnyMapboxMap;
32
+
33
+ styleUrl?: string;
34
+
35
+ apiKey?: string;
36
+
37
+ apiKeyName!: string;
38
+
39
+ format!: GeoJSON;
40
+
41
+ loaded!: boolean;
42
+
43
+ options!: MapGlLayerOptions;
44
+
45
+ constructor(options: MapGlLayerOptions) {
46
+ super(options);
47
+
48
+ this.olLayer = new OlLayer({
49
+ source: new Source({}),
50
+ render: this.getOlLayerRender(),
51
+ });
52
+
53
+ /**
54
+ * Url of the mapbox style.
55
+ * @type {string}
56
+ * @private
57
+ */
58
+ this.styleUrl = options.url;
59
+
60
+ /**
61
+ * Api key for the url of the mapbox style.
62
+ * If set to false, the apiKey is not required.
63
+ * @type {string}
64
+ * @private
65
+ */
66
+ this.apiKey = options.apiKey;
67
+
68
+ /**
69
+ * Name of the apiKey to set in the url request.
70
+ * Default is 'key'.
71
+ * @type {string}
72
+ * @private
73
+ */
74
+ this.apiKeyName = options.apiKeyName || 'key';
75
+
76
+ /** @private */
77
+ this.updateAttribution = this.updateAttribution.bind(this);
78
+ }
79
+
80
+ /**
81
+ * Initialize the layer and listen to feature clicks.
82
+ * @param {ol/Map~Map} map
83
+ */
84
+ attachToMap(map: OlMap) {
85
+ super.attachToMap(map);
86
+
87
+ if (!this.map) {
88
+ return;
89
+ }
90
+
91
+ /**
92
+ * The feature format.
93
+ * @type {ol/format/GeoJSON}
94
+ */
95
+ this.format = new GeoJSON({
96
+ featureProjection: this.map.getView().getProjection(),
97
+ });
98
+
99
+ this.loadMbMap();
100
+ }
101
+
102
+ /**
103
+ * Terminate what was initialized in init function. Remove layer, events...
104
+ */
105
+ detachFromMap() {
106
+ if (this.mbMap) {
107
+ this.mbMap.off('idle', this.updateAttribution);
108
+ // Some asynchrone repaints are triggered even if the mbMap has been removed,
109
+ // to avoid display of errors we set an empty function.
110
+ this.mbMap.triggerRepaint = () => {};
111
+ this.mbMap.remove();
112
+ this.mbMap = undefined;
113
+ }
114
+ this.loaded = false;
115
+ super.detachFromMap();
116
+ }
117
+
118
+ /**
119
+ * Create the mapbox map.
120
+ * @private
121
+ */
122
+ loadMbMap() {
123
+ this.olListenersKeys.push(
124
+ // @ts-ignore
125
+ this.map?.on('change:target', () => {
126
+ this.loadMbMap();
127
+ }),
128
+ );
129
+
130
+ if (!this.map?.getTargetElement()) {
131
+ return;
132
+ }
133
+
134
+ if (!this.visible) {
135
+ // On next change of visibility we load the map
136
+ this.olListenersKeys.push(
137
+ // @ts-ignore
138
+ this.once('change:visible', () => {
139
+ this.loadMbMap();
140
+ }),
141
+ );
142
+ return;
143
+ }
144
+
145
+ const container = document.createElement('div');
146
+ container.style.position = 'absolute';
147
+ container.style.width = '100%';
148
+ container.style.height = '100%';
149
+
150
+ if (!this.styleUrl) {
151
+ // eslint-disable-next-line no-console
152
+ console.error(`No styleUrl defined for mapbox layer: ${this.styleUrl}`);
153
+ return;
154
+ }
155
+
156
+ if (!this.apiKey && !this.styleUrl?.includes(this.apiKeyName)) {
157
+ // eslint-disable-next-line no-console
158
+ console.error(
159
+ `No apiKey defined for mapbox layer with style url to ${this.styleUrl}`,
160
+ );
161
+ }
162
+
163
+ const Map = this.getMapboxMapClass();
164
+
165
+ /**
166
+ * A mapbox map
167
+ * @type {mapboxgl.Map}
168
+ */
169
+ this.mbMap = new Map({
170
+ style: getUrlWithParams(this.styleUrl, {
171
+ [this.apiKeyName]: this.apiKey,
172
+ }).toString(),
173
+ container,
174
+ interactive: false,
175
+ trackResize: false,
176
+ attributionControl: false,
177
+ ...(this.options.mapOptions || {}),
178
+ });
179
+
180
+ this.mbMap.once('load', () => {
181
+ /**
182
+ * Is the map loaded.
183
+ * @type {boolean}
184
+ */
185
+ this.loaded = true;
186
+
187
+ this.dispatchEvent(new BaseEvent('load'));
188
+ });
189
+
190
+ this.mbMap.on('idle', this.updateAttribution);
191
+ }
192
+
193
+ /**
194
+ * Update attributions of the source.
195
+ * @private
196
+ */
197
+ updateAttribution(evt: maplibregl.MapLibreEvent | mapboxgl.MapboxEvent) {
198
+ const newAttributions = getMapboxMapCopyrights(evt.target) || [];
199
+ if (this.copyrights?.toString() !== newAttributions.toString()) {
200
+ this.copyrights = newAttributions;
201
+ // @ts-ignore
202
+ this.olLayer?.getSource()?.setAttributions(newAttributions);
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Request feature information for a given coordinate.
208
+ * @param {ol/coordinate~Coordinate} coordinate Coordinate to request the information at.
209
+ * @param {Object} options A [mapboxgl.Map#queryrenderedfeatures](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#queryrenderedfeatures) options parameter.
210
+ * @return {Promise<FeatureInfo>} Promise with features, layer and coordinate. The original Mapbox feature is available as a property named 'mapboxFeature'.
211
+ */
212
+ getFeatureInfoAtCoordinate(
213
+ coordinate: Coordinate,
214
+ options: any,
215
+ ): Promise<LayerGetFeatureInfoResponse> {
216
+ // Ignore the getFeatureInfo until the mapbox map is loaded
217
+ if (
218
+ !options ||
219
+ !this.format ||
220
+ !this.mbMap ||
221
+ !this.mbMap.isStyleLoaded()
222
+ ) {
223
+ return Promise.resolve({ coordinate, features: [], layer: this });
224
+ }
225
+
226
+ const pixel =
227
+ coordinate &&
228
+ this.mbMap.project(toLonLat(coordinate) as [number, number]);
229
+ let pixels: [mapboxgl.PointLike, mapboxgl.PointLike];
230
+
231
+ if (this.hitTolerance) {
232
+ const { x, y } = pixel;
233
+ pixels = [
234
+ {
235
+ x: x - this.hitTolerance,
236
+ y: y - this.hitTolerance,
237
+ } as mapboxgl.PointLike,
238
+ {
239
+ x: x + this.hitTolerance,
240
+ y: y + this.hitTolerance,
241
+ } as mapboxgl.PointLike,
242
+ ];
243
+ }
244
+
245
+ // At this point we get GeoJSON Mapbox feature, we transform it to an OpenLayers
246
+ // feature to be consistent with other layers.
247
+ const features = this.mbMap
248
+ // @ts-ignore
249
+ .queryRenderedFeatures(pixels || pixel, options)
250
+ .map((feature) => {
251
+ const olFeature = this.format.readFeature(feature) as Feature;
252
+ if (olFeature) {
253
+ // We save the original mapbox feature to avoid losing informations
254
+ // potentially needed for other functionnality like highlighting
255
+ // (id, layer id, source, sourceLayer ...)
256
+ olFeature.set('mapboxFeature', feature);
257
+ }
258
+ return olFeature;
259
+ });
260
+
261
+ return Promise.resolve({
262
+ layer: this,
263
+ features,
264
+ coordinate,
265
+ } as LayerGetFeatureInfoResponse);
266
+ }
267
+
268
+ /**
269
+ * Return the render function function for the ol layer.
270
+ *
271
+ */
272
+ // eslint-disable-next-line class-methods-use-this
273
+ getOlLayerRender(): RenderFunction {
274
+ // eslint-disable-next-line no-console
275
+ console.error('This function must be implemented in subclasses');
276
+ const div = document.createElement('div');
277
+ return () => div;
278
+ }
279
+
280
+ /**
281
+ * Return the Class to instanciate for the mapbox map.
282
+ *
283
+ * @return {mapboxgl.Map|maplibregl.Map} map
284
+ */
285
+ // eslint-disable-next-line class-methods-use-this
286
+ getMapboxMapClass(): AnyMapboxMapClass {
287
+ // eslint-disable-next-line no-console
288
+ console.error('This function must be implemented in subclasses');
289
+ // @ts-ignore
290
+ return null;
291
+ }
292
+ }
293
+
294
+ export default MapGlLayer;
@@ -0,0 +1,190 @@
1
+ import OlMap from 'ol/Map';
2
+ import View from 'ol/View';
3
+ import gllib from 'mapbox-gl';
4
+ import MapboxLayer from './MapboxLayer';
5
+
6
+ let layer;
7
+ let map;
8
+ let consoleOutput;
9
+ const styleUrl = 'http://foo.com/styles';
10
+
11
+ describe('MapboxLayer', () => {
12
+ describe('without apiKey', () => {
13
+ beforeEach(() => {
14
+ // Mock console statement
15
+ consoleOutput = [];
16
+ // eslint-disable-next-line no-console
17
+ console.error = (message) => consoleOutput.push(message);
18
+ layer = new MapboxLayer({
19
+ name: 'Layer',
20
+ url: styleUrl,
21
+ });
22
+ map = new OlMap({
23
+ target: document.createElement('div'),
24
+ view: new View({ center: [0, 0] }),
25
+ });
26
+ });
27
+
28
+ test('should be instanced.', () => {
29
+ expect(layer).toBeInstanceOf(MapboxLayer);
30
+ expect(layer.styleUrl).toBe(styleUrl);
31
+ });
32
+
33
+ test('should not initalized mapbox map.', () => {
34
+ layer.attachToMap();
35
+ expect(layer.mbMap).toBe();
36
+ });
37
+
38
+ test('should initalized mapbox map and warn the user if there is no api key defined.', () => {
39
+ layer.attachToMap(map);
40
+ expect(layer.mbMap).toBeInstanceOf(gllib.Map);
41
+ expect(consoleOutput[0]).toBe(
42
+ 'No apiKey defined for mapbox layer with style url to http://foo.com/styles',
43
+ );
44
+ });
45
+
46
+ test('should called terminate on initalization.', () => {
47
+ const spy = jest.spyOn(layer, 'detachFromMap');
48
+ layer.attachToMap();
49
+ expect(spy).toHaveBeenCalledTimes(1);
50
+ });
51
+
52
+ test('should clone', () => {
53
+ const clone = layer.clone({ name: 'clone' });
54
+ expect(clone).not.toBe(layer);
55
+ expect(clone.name).toBe('clone');
56
+ expect(clone).toBeInstanceOf(MapboxLayer);
57
+ });
58
+ });
59
+
60
+ describe('with apiKey', () => {
61
+ beforeEach(() => {
62
+ layer = new MapboxLayer({
63
+ name: 'Layer',
64
+ url: styleUrl,
65
+ apiKey: 'apiKey',
66
+ });
67
+ map = new OlMap({
68
+ target: document.createElement('div'),
69
+ view: new View({ center: [0, 0] }),
70
+ });
71
+ });
72
+
73
+ test('should be instanced with apiKey.', () => {
74
+ expect(layer).toBeInstanceOf(MapboxLayer);
75
+ expect(layer.styleUrl).toBe(styleUrl);
76
+ });
77
+
78
+ test('should not initalized mapbox map.', () => {
79
+ layer.attachToMap();
80
+ expect(layer.mbMap).toBe();
81
+ });
82
+
83
+ test("should initalized mapbox map, with 'apiKey' prop", () => {
84
+ const layer1 = new MapboxLayer({
85
+ name: 'Layer',
86
+ url: styleUrl,
87
+ apiKey: 'apiKeyVal',
88
+ });
89
+ layer1.attachToMap(map);
90
+ expect(layer1.mbMap.options.style).toBe(
91
+ 'http://foo.com/styles?key=apiKeyVal',
92
+ );
93
+ });
94
+
95
+ test("should initalized mapbox map, with 'apiKeyName' prop", () => {
96
+ const layer1 = new MapboxLayer({
97
+ name: 'Layer',
98
+ url: styleUrl,
99
+ apiKey: 'test',
100
+ apiKeyName: 'apiKey',
101
+ });
102
+ layer1.attachToMap(map);
103
+ expect(layer1.mbMap.options.style).toBe(
104
+ 'http://foo.com/styles?apiKey=test',
105
+ );
106
+ });
107
+ });
108
+
109
+ describe('#getFeatureInfoAtCoordinate()', () => {
110
+ let layer1;
111
+ beforeEach(() => {
112
+ layer1 = new MapboxLayer({
113
+ name: 'Layer',
114
+ url: styleUrl,
115
+ apiKey: 'test',
116
+ apiKeyName: 'apiKey',
117
+ });
118
+ layer1.attachToMap(map);
119
+ layer1.mbMap.isStyleLoaded = jest.fn(() => true);
120
+ layer1.mbMap.getSource = jest.fn(() => true);
121
+ });
122
+
123
+ afterEach(() => {
124
+ layer1.mbMap.getSource.mockRestore();
125
+ layer1.mbMap.isStyleLoaded.mockRestore();
126
+ });
127
+
128
+ test('should set the mapboxFeature as a property', (done) => {
129
+ const mapboxFeature = {
130
+ id: '2',
131
+ type: 'Feature',
132
+ properties: {
133
+ foo: 'bar',
134
+ },
135
+ source: 'barr',
136
+ sourceLayer: 'fooo',
137
+ };
138
+ layer1.mbMap.project = jest.fn((coord) => ({ x: coord[0], y: coord[1] }));
139
+ layer1.mbMap.queryRenderedFeatures = jest.fn(() => [mapboxFeature]);
140
+ layer1.getFeatureInfoAtCoordinate([0, 0], {}).then((featureInfo) => {
141
+ expect(featureInfo.features[0].get('mapboxFeature')).toBe(
142
+ mapboxFeature,
143
+ );
144
+ done();
145
+ });
146
+ layer1.mbMap.project.mockRestore();
147
+ layer1.mbMap.queryRenderedFeatures.mockRestore();
148
+ });
149
+ describe('should use hitTolerance property', () => {
150
+ beforeEach(() => {
151
+ layer1.mbMap.project = jest.fn((coord) => ({
152
+ x: coord[0],
153
+ y: coord[1],
154
+ }));
155
+ });
156
+
157
+ afterEach(() => {
158
+ layer1.mbMap.project.mockRestore();
159
+ layer1.mbMap.queryRenderedFeatures.mockRestore();
160
+ });
161
+
162
+ test('when hitTolerance is not set', (done) => {
163
+ layer1.mbMap.queryRenderedFeatures = jest.fn((pixelBounds) => {
164
+ // Use default hoitTolerance
165
+ expect(pixelBounds).toEqual([
166
+ { x: -5, y: -5 },
167
+ { x: 5, y: 5 },
168
+ ]);
169
+ done();
170
+ return [];
171
+ });
172
+ layer1.getFeatureInfoAtCoordinate([0, 0], {});
173
+ });
174
+
175
+ test('when hitTolerance is set to 10', (done) => {
176
+ layer1.hitTolerance = 10;
177
+ layer1.mbMap.queryRenderedFeatures = jest.fn((pixelBounds) => {
178
+ // Use default hoitTolerance
179
+ expect(pixelBounds).toEqual([
180
+ { x: -10, y: -10 },
181
+ { x: 10, y: 10 },
182
+ ]);
183
+ done();
184
+ return [];
185
+ });
186
+ layer1.getFeatureInfoAtCoordinate([0, 0], {});
187
+ });
188
+ });
189
+ });
190
+ });
@@ -0,0 +1,136 @@
1
+ /* eslint-disable no-underscore-dangle */
2
+ import { Map } from 'mapbox-gl';
3
+ import { Coordinate } from 'ol/coordinate';
4
+ import type OlMap from 'ol/Map';
5
+ import { Size } from 'ol/size';
6
+ import { getMapboxMapCopyrights, getMapboxRender } from '../../common/utils';
7
+ import MapGlLayer, { MapGlLayerOptions } from './MapGlLayer';
8
+
9
+ /**
10
+ * A class representing Mapboxlayer to display on BasicMap
11
+ *
12
+ * @example
13
+ * import { MapboxLayer } from 'mobility-toolbox-js/ol';
14
+ *
15
+ * const layer = new MapboxLayer({
16
+ * url: 'https://maps.geops.io/styles/travic_v2/style.json',
17
+ * apikey: 'yourApiKey',
18
+ * });
19
+ *
20
+ * @classproperty {ol/Map~Map} map - The map where the layer is displayed.
21
+ * @extends {Layer}
22
+ */
23
+ export default class MapboxLayer extends MapGlLayer {
24
+ renderState?: {
25
+ center?: Coordinate;
26
+ zoom?: number;
27
+ visible?: boolean;
28
+ opacity?: number;
29
+ resolution?: number;
30
+ rotation?: number;
31
+ size?: Size;
32
+ };
33
+
34
+ tabIndex?: number;
35
+
36
+ /**
37
+ * Initialize the layer and listen to feature clicks.
38
+ * @param {ol/Map~Map} map
39
+ */
40
+ attachToMap(map: OlMap) {
41
+ super.attachToMap(map);
42
+
43
+ if (!this.map) {
44
+ return;
45
+ }
46
+
47
+ this.olListenersKeys.push(
48
+ this.map.on('change:size', () => {
49
+ try {
50
+ if (this.mbMap) {
51
+ this.mbMap.resize();
52
+ }
53
+ } catch (err) {
54
+ // ignore render errors
55
+ // eslint-disable-next-line no-console
56
+ console.warn(err);
57
+ }
58
+ }),
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Create the mapbox map.
64
+ * @private
65
+ */
66
+ loadMbMap() {
67
+ // If the map hasn't been resized, the center could be [NaN,NaN].
68
+ // We set default good value for the mapbox map, to avoid the app crashes.
69
+ let [x, y] = this.map?.getView().getCenter() || [];
70
+ if (!x || !y) {
71
+ x = 0;
72
+ y = 0;
73
+ }
74
+
75
+ // Options the last render run did happen. If something changes
76
+ // we have to render again
77
+ /** @private */
78
+ this.renderState = {
79
+ center: [x, y],
80
+ zoom: undefined,
81
+ rotation: undefined,
82
+ visible: undefined,
83
+ opacity: undefined,
84
+ size: [0, 0],
85
+ };
86
+
87
+ super.loadMbMap();
88
+
89
+ if (!this.mbMap) {
90
+ // mbMap could ne bull if the map is not in the dom yet.
91
+ return;
92
+ }
93
+
94
+ this.mbMap.once('load', () => {
95
+ if (!this.mbMap) {
96
+ return;
97
+ }
98
+ this.mbMap.resize();
99
+
100
+ /** @private */
101
+ this.copyrights = getMapboxMapCopyrights(this.mbMap) || [];
102
+
103
+ // @ts-ignore
104
+ this.olLayer?.getSource()?.setAttributions(this.copyrights);
105
+ });
106
+
107
+ const mapboxCanvas = this.mbMap.getCanvas();
108
+ if (mapboxCanvas) {
109
+ if (this.options.tabIndex) {
110
+ mapboxCanvas.setAttribute('tabindex', `${this.options.tabIndex}`);
111
+ } else {
112
+ // With a tabIndex='-1' the mouse events works but the map is not focused when we click on it
113
+ // so we remove completely the tabIndex attribute.
114
+ mapboxCanvas.removeAttribute('tabindex');
115
+ }
116
+ }
117
+ }
118
+
119
+ getOlLayerRender() {
120
+ return getMapboxRender(this);
121
+ }
122
+
123
+ // eslint-disable-next-line class-methods-use-this
124
+ getMapboxMapClass() {
125
+ return Map;
126
+ }
127
+
128
+ /**
129
+ * Create a copy of the MapboxLayer.
130
+ * @param {Object} newOptions Options to override
131
+ * @return {MapboxLayer} A MapboxLayer
132
+ */
133
+ clone(newOptions: MapGlLayerOptions) {
134
+ return new MapboxLayer({ ...this.options, ...newOptions });
135
+ }
136
+ }