@macrostrat/map-interface 1.5.7 → 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.
- package/CHANGELOG.md +15 -0
- package/dist/container.cjs +131 -0
- package/dist/container.cjs.map +1 -0
- package/dist/container.d.ts +17 -0
- package/dist/container.js +131 -0
- package/dist/container.js.map +1 -0
- package/dist/context-panel/index.cjs +79 -0
- package/dist/context-panel/index.cjs.map +1 -0
- package/dist/context-panel/index.d.ts +36 -0
- package/dist/context-panel/index.js +79 -0
- package/dist/context-panel/index.js.map +1 -0
- package/dist/context-panel/main.module.sass.cjs +16 -0
- package/dist/context-panel/main.module.sass.cjs.map +1 -0
- package/dist/context-panel/main.module.sass.js +16 -0
- package/dist/context-panel/main.module.sass.js.map +1 -0
- package/dist/controls.cjs +54 -0
- package/dist/controls.cjs.map +1 -0
- package/dist/controls.d.ts +3 -0
- package/dist/controls.js +54 -0
- package/dist/controls.js.map +1 -0
- package/dist/dev/index.d.ts +4 -0
- package/dist/dev/main.module.sass.cjs +30 -0
- package/dist/dev/main.module.sass.cjs.map +1 -0
- package/dist/dev/main.module.sass.js +30 -0
- package/dist/dev/main.module.sass.js.map +1 -0
- package/dist/dev/map-page.cjs +155 -0
- package/dist/dev/map-page.cjs.map +1 -0
- package/dist/dev/map-page.d.ts +26 -0
- package/dist/dev/map-page.js +155 -0
- package/dist/dev/map-page.js.map +1 -0
- package/dist/dev/tile-extent.cjs +39 -0
- package/dist/dev/tile-extent.cjs.map +1 -0
- package/dist/dev/tile-extent.d.ts +10 -0
- package/dist/dev/tile-extent.js +39 -0
- package/dist/dev/tile-extent.js.map +1 -0
- package/dist/dev/vector-tile-features.cjs +212 -0
- package/dist/dev/vector-tile-features.cjs.map +1 -0
- package/dist/dev/vector-tile-features.d.ts +29 -0
- package/dist/dev/vector-tile-features.js +212 -0
- package/dist/dev/vector-tile-features.js.map +1 -0
- package/dist/dev/xray.cjs +93 -0
- package/dist/dev/xray.cjs.map +1 -0
- package/dist/dev/xray.d.ts +41 -0
- package/dist/dev/xray.js +93 -0
- package/dist/dev/xray.js.map +1 -0
- package/dist/expansion-panel/headers.cjs +20 -0
- package/dist/expansion-panel/headers.cjs.map +1 -0
- package/dist/expansion-panel/headers.d.ts +1 -0
- package/dist/expansion-panel/headers.js +20 -0
- package/dist/expansion-panel/headers.js.map +1 -0
- package/dist/expansion-panel/index.cjs +125 -0
- package/dist/expansion-panel/index.cjs.map +1 -0
- package/dist/expansion-panel/index.d.ts +18 -0
- package/dist/expansion-panel/index.js +125 -0
- package/dist/expansion-panel/index.js.map +1 -0
- package/dist/expansion-panel/main.module.sass.cjs +27 -0
- package/dist/expansion-panel/main.module.sass.cjs.map +1 -0
- package/dist/expansion-panel/main.module.sass.js +27 -0
- package/dist/expansion-panel/main.module.sass.js.map +1 -0
- package/dist/hash-string.cjs +81 -0
- package/dist/hash-string.cjs.map +1 -0
- package/dist/hash-string.d.ts +12 -0
- package/dist/hash-string.js +81 -0
- package/dist/hash-string.js.map +1 -0
- package/dist/helpers.cjs +162 -0
- package/dist/helpers.cjs.map +1 -0
- package/dist/helpers.d.ts +34 -0
- package/dist/helpers.js +162 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.cjs +73 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/location-details/fetch.d.ts +4 -0
- package/dist/location-details/fossil-collections/collections.cjs +68 -0
- package/dist/location-details/fossil-collections/collections.cjs.map +1 -0
- package/dist/location-details/fossil-collections/collections.d.ts +3 -0
- package/dist/location-details/fossil-collections/collections.js +68 -0
- package/dist/location-details/fossil-collections/collections.js.map +1 -0
- package/dist/location-details/fossil-collections/index.cjs +13 -0
- package/dist/location-details/fossil-collections/index.cjs.map +1 -0
- package/dist/location-details/fossil-collections/index.d.ts +3 -0
- package/dist/location-details/fossil-collections/index.js +13 -0
- package/dist/location-details/fossil-collections/index.js.map +1 -0
- package/dist/location-details/fossil-collections/main.module.sass.cjs +8 -0
- package/dist/location-details/fossil-collections/main.module.sass.cjs.map +1 -0
- package/dist/location-details/fossil-collections/main.module.sass.js +8 -0
- package/dist/location-details/fossil-collections/main.module.sass.js.map +1 -0
- package/dist/location-details/index.d.ts +5 -0
- package/dist/location-details/info-blocks.cjs +81 -0
- package/dist/location-details/info-blocks.cjs.map +1 -0
- package/dist/location-details/info-blocks.d.ts +9 -0
- package/dist/location-details/info-blocks.js +81 -0
- package/dist/location-details/info-blocks.js.map +1 -0
- package/dist/location-details/info-blocks.module.sass.cjs +18 -0
- package/dist/location-details/info-blocks.module.sass.cjs.map +1 -0
- package/dist/location-details/info-blocks.module.sass.js +18 -0
- package/dist/location-details/info-blocks.module.sass.js.map +1 -0
- package/dist/location-details/macrostrat-linked.cjs +355 -0
- package/dist/location-details/macrostrat-linked.cjs.map +1 -0
- package/dist/location-details/macrostrat-linked.d.ts +1 -0
- package/dist/location-details/macrostrat-linked.js +355 -0
- package/dist/location-details/macrostrat-linked.js.map +1 -0
- package/dist/location-details/main.module.sass.cjs +20 -0
- package/dist/location-details/main.module.sass.cjs.map +1 -0
- package/dist/location-details/main.module.sass.js +20 -0
- package/dist/location-details/main.module.sass.js.map +1 -0
- package/dist/location-details/physiography.cjs +30 -0
- package/dist/location-details/physiography.cjs.map +1 -0
- package/dist/location-details/physiography.d.ts +1 -0
- package/dist/location-details/physiography.js +30 -0
- package/dist/location-details/physiography.js.map +1 -0
- package/dist/location-details/reg-strat.cjs +90 -0
- package/dist/location-details/reg-strat.cjs.map +1 -0
- package/dist/location-details/reg-strat.d.ts +6 -0
- package/dist/location-details/reg-strat.js +90 -0
- package/dist/location-details/reg-strat.js.map +1 -0
- package/dist/location-details/utils/formatting.cjs +16 -0
- package/dist/location-details/utils/formatting.cjs.map +1 -0
- package/dist/location-details/utils/formatting.d.ts +16 -0
- package/dist/location-details/utils/formatting.js +16 -0
- package/dist/location-details/utils/formatting.js.map +1 -0
- package/dist/location-details/utils/fossils.cjs +149 -0
- package/dist/location-details/utils/fossils.cjs.map +1 -0
- package/dist/location-details/utils/fossils.d.ts +3 -0
- package/dist/location-details/utils/fossils.js +149 -0
- package/dist/location-details/utils/fossils.js.map +1 -0
- package/dist/location-details/utils/index.cjs +15 -0
- package/dist/location-details/utils/index.cjs.map +1 -0
- package/dist/location-details/utils/index.d.ts +12 -0
- package/dist/location-details/utils/index.js +15 -0
- package/dist/location-details/utils/index.js.map +1 -0
- package/dist/location-details/xdd-panel/article.cjs +62 -0
- package/dist/location-details/xdd-panel/article.cjs.map +1 -0
- package/dist/location-details/xdd-panel/article.d.ts +1 -0
- package/dist/location-details/xdd-panel/article.js +62 -0
- package/dist/location-details/xdd-panel/article.js.map +1 -0
- package/dist/location-details/xdd-panel/index.cjs +69 -0
- package/dist/location-details/xdd-panel/index.cjs.map +1 -0
- package/dist/location-details/xdd-panel/index.d.ts +18 -0
- package/dist/location-details/xdd-panel/index.js +69 -0
- package/dist/location-details/xdd-panel/index.js.map +1 -0
- package/dist/location-details/xdd-panel/journal.cjs +25 -0
- package/dist/location-details/xdd-panel/journal.cjs.map +1 -0
- package/dist/location-details/xdd-panel/journal.d.ts +20 -0
- package/dist/location-details/xdd-panel/journal.js +25 -0
- package/dist/location-details/xdd-panel/journal.js.map +1 -0
- package/dist/location-panel/header.cjs +109 -0
- package/dist/location-panel/header.cjs.map +1 -0
- package/dist/location-panel/header.d.ts +16 -0
- package/dist/location-panel/header.js +109 -0
- package/dist/location-panel/header.js.map +1 -0
- package/dist/location-panel/index.cjs +42 -0
- package/dist/location-panel/index.cjs.map +1 -0
- package/dist/location-panel/index.d.ts +15 -0
- package/dist/location-panel/index.js +42 -0
- package/dist/location-panel/index.js.map +1 -0
- package/dist/location-panel/main.module.sass.cjs +23 -0
- package/dist/location-panel/main.module.sass.cjs.map +1 -0
- package/dist/location-panel/main.module.sass.js +23 -0
- package/dist/location-panel/main.module.sass.js.map +1 -0
- package/dist/main.module.sass.cjs +70 -0
- package/dist/main.module.sass.cjs.map +1 -0
- package/dist/main.module.sass.js +70 -0
- package/dist/main.module.sass.js.map +1 -0
- package/dist/map-interface.css +1060 -0
- package/dist/map-view.cjs +200 -0
- package/dist/map-view.cjs.map +1 -0
- package/dist/map-view.d.ts +41 -0
- package/dist/map-view.js +200 -0
- package/dist/map-view.js.map +1 -0
- package/dist/utils.cjs +35 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.js +35 -0
- package/dist/utils.js.map +1 -0
- package/package.json +51 -48
- package/src/context-panel/main.module.sass +3 -3
- package/src/dev/main.module.sass +1 -1
- package/src/expansion-panel/main.module.sass +4 -4
- package/src/{location-info/hash-string.ts → hash-string.ts} +4 -1
- package/src/helpers.ts +0 -2
- package/src/index.ts +1 -1
- package/src/location-details/fossil-collections/main.module.sass +1 -1
- package/src/location-details/info-blocks.module.sass +35 -0
- package/src/location-details/info-blocks.ts +1 -1
- package/src/location-details/macrostrat-linked.ts +1 -1
- package/src/location-details/{main.module.styl → main.module.sass} +21 -21
- package/src/location-details/xdd-panel/article.ts +67 -0
- package/src/location-details/xdd-panel/index.ts +2 -17
- package/src/location-details/xdd-panel/{Journal.tsx → journal.ts} +15 -5
- package/src/location-panel/header.ts +1 -1
- package/src/location-panel/main.module.sass +3 -3
- package/src/main.module.sass +15 -15
- package/dist/cjs/index.js +0 -54
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/map-interface.0e252a74.js +0 -88
- package/dist/cjs/map-interface.0e252a74.js.map +0 -1
- package/dist/cjs/map-interface.10d442f4.js +0 -66
- package/dist/cjs/map-interface.10d442f4.js.map +0 -1
- package/dist/cjs/map-interface.11056b04.js +0 -390
- package/dist/cjs/map-interface.11056b04.js.map +0 -1
- package/dist/cjs/map-interface.12e5d744.js +0 -123
- package/dist/cjs/map-interface.12e5d744.js.map +0 -1
- package/dist/cjs/map-interface.1b386e07.css +0 -111
- package/dist/cjs/map-interface.1b386e07.css.map +0 -1
- package/dist/cjs/map-interface.1faa2839.js +0 -14
- package/dist/cjs/map-interface.1faa2839.js.map +0 -1
- package/dist/cjs/map-interface.23d5c62c.js +0 -135
- package/dist/cjs/map-interface.23d5c62c.js.map +0 -1
- package/dist/cjs/map-interface.2401af7a.js +0 -59
- package/dist/cjs/map-interface.2401af7a.js.map +0 -1
- package/dist/cjs/map-interface.24a1c14e.js +0 -46
- package/dist/cjs/map-interface.24a1c14e.js.map +0 -1
- package/dist/cjs/map-interface.26497065.css +0 -92
- package/dist/cjs/map-interface.26497065.css.map +0 -1
- package/dist/cjs/map-interface.28d1a6b7.js +0 -185
- package/dist/cjs/map-interface.28d1a6b7.js.map +0 -1
- package/dist/cjs/map-interface.31742bd3.js +0 -65
- package/dist/cjs/map-interface.31742bd3.js.map +0 -1
- package/dist/cjs/map-interface.354aaa39.js +0 -135
- package/dist/cjs/map-interface.354aaa39.js.map +0 -1
- package/dist/cjs/map-interface.368b346c.css +0 -45
- package/dist/cjs/map-interface.368b346c.css.map +0 -1
- package/dist/cjs/map-interface.3bc4f731.js +0 -33
- package/dist/cjs/map-interface.3bc4f731.js.map +0 -1
- package/dist/cjs/map-interface.3bcda63a.js +0 -66
- package/dist/cjs/map-interface.3bcda63a.js.map +0 -1
- package/dist/cjs/map-interface.441d3b83.css +0 -69
- package/dist/cjs/map-interface.441d3b83.css.map +0 -1
- package/dist/cjs/map-interface.46d1c77b.js +0 -189
- package/dist/cjs/map-interface.46d1c77b.js.map +0 -1
- package/dist/cjs/map-interface.4a401c1f.css +0 -584
- package/dist/cjs/map-interface.4a401c1f.css.map +0 -1
- package/dist/cjs/map-interface.4c5addca.js +0 -89
- package/dist/cjs/map-interface.4c5addca.js.map +0 -1
- package/dist/cjs/map-interface.5a4f4529.js +0 -38
- package/dist/cjs/map-interface.5a4f4529.js.map +0 -1
- package/dist/cjs/map-interface.633d24e6.css +0 -22
- package/dist/cjs/map-interface.633d24e6.css.map +0 -1
- package/dist/cjs/map-interface.64823b7c.js +0 -129
- package/dist/cjs/map-interface.64823b7c.js.map +0 -1
- package/dist/cjs/map-interface.66958831.js +0 -36
- package/dist/cjs/map-interface.66958831.js.map +0 -1
- package/dist/cjs/map-interface.69b2e2a9.js +0 -25
- package/dist/cjs/map-interface.69b2e2a9.js.map +0 -1
- package/dist/cjs/map-interface.70458f75.js +0 -26
- package/dist/cjs/map-interface.70458f75.js.map +0 -1
- package/dist/cjs/map-interface.71e61c74.js +0 -73
- package/dist/cjs/map-interface.71e61c74.js.map +0 -1
- package/dist/cjs/map-interface.7509f2c1.js +0 -29
- package/dist/cjs/map-interface.7509f2c1.js.map +0 -1
- package/dist/cjs/map-interface.7bdbe4b6.js +0 -220
- package/dist/cjs/map-interface.7bdbe4b6.js.map +0 -1
- package/dist/cjs/map-interface.860fcb7e.js +0 -67
- package/dist/cjs/map-interface.860fcb7e.js.map +0 -1
- package/dist/cjs/map-interface.8d67cc21.js +0 -100
- package/dist/cjs/map-interface.8d67cc21.js.map +0 -1
- package/dist/cjs/map-interface.99a048dc.js +0 -79
- package/dist/cjs/map-interface.99a048dc.js.map +0 -1
- package/dist/cjs/map-interface.a9fe0f5d.js +0 -170
- package/dist/cjs/map-interface.a9fe0f5d.js.map +0 -1
- package/dist/cjs/map-interface.abe5fe65.js +0 -50
- package/dist/cjs/map-interface.abe5fe65.js.map +0 -1
- package/dist/cjs/map-interface.adb45df9.css +0 -191
- package/dist/cjs/map-interface.adb45df9.css.map +0 -1
- package/dist/cjs/map-interface.ae4c52a6.css +0 -52
- package/dist/cjs/map-interface.ae4c52a6.css.map +0 -1
- package/dist/cjs/map-interface.bda26b27.js +0 -134
- package/dist/cjs/map-interface.bda26b27.js.map +0 -1
- package/dist/cjs/map-interface.cd485bb4.js +0 -41
- package/dist/cjs/map-interface.cd485bb4.js.map +0 -1
- package/dist/cjs/map-interface.cf6c9a68.js +0 -208
- package/dist/cjs/map-interface.cf6c9a68.js.map +0 -1
- package/dist/cjs/map-interface.dcbd3874.js +0 -112
- package/dist/cjs/map-interface.dcbd3874.js.map +0 -1
- package/dist/cjs/map-interface.dfaad4a1.js +0 -36
- package/dist/cjs/map-interface.dfaad4a1.js.map +0 -1
- package/dist/cjs/map-interface.e74ded77.js +0 -135
- package/dist/cjs/map-interface.e74ded77.js.map +0 -1
- package/dist/cjs/map-interface.e975d65c.js +0 -23
- package/dist/cjs/map-interface.e975d65c.js.map +0 -1
- package/dist/cjs/map-interface.e9bcd5c0.js +0 -268
- package/dist/cjs/map-interface.e9bcd5c0.js.map +0 -1
- package/dist/cjs/map-interface.f8826069.js +0 -46
- package/dist/cjs/map-interface.f8826069.js.map +0 -1
- package/dist/cjs/map-interface.f9611285.js +0 -32
- package/dist/cjs/map-interface.f9611285.js.map +0 -1
- package/dist/cjs/map-interface.ffb109ef.js +0 -46
- package/dist/cjs/map-interface.ffb109ef.js.map +0 -1
- package/dist/esm/index.d.ts +0 -365
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/map-interface.00ecf2ee.js +0 -56
- package/dist/esm/map-interface.00ecf2ee.js.map +0 -1
- package/dist/esm/map-interface.01826888.js +0 -67
- package/dist/esm/map-interface.01826888.js.map +0 -1
- package/dist/esm/map-interface.021cf79b.js +0 -18
- package/dist/esm/map-interface.021cf79b.js.map +0 -1
- package/dist/esm/map-interface.065737fe.js +0 -172
- package/dist/esm/map-interface.065737fe.js.map +0 -1
- package/dist/esm/map-interface.0b1aa8f2.js +0 -81
- package/dist/esm/map-interface.0b1aa8f2.js.map +0 -1
- package/dist/esm/map-interface.1843c708.js +0 -83
- package/dist/esm/map-interface.1843c708.js.map +0 -1
- package/dist/esm/map-interface.1d38872e.js +0 -385
- package/dist/esm/map-interface.1d38872e.js.map +0 -1
- package/dist/esm/map-interface.1db44824.js +0 -24
- package/dist/esm/map-interface.1db44824.js.map +0 -1
- package/dist/esm/map-interface.21fab792.js +0 -15
- package/dist/esm/map-interface.21fab792.js.map +0 -1
- package/dist/esm/map-interface.22ea3934.js +0 -41
- package/dist/esm/map-interface.22ea3934.js.map +0 -1
- package/dist/esm/map-interface.27587c50.js +0 -126
- package/dist/esm/map-interface.27587c50.js.map +0 -1
- package/dist/esm/map-interface.3033c825.js +0 -40
- package/dist/esm/map-interface.3033c825.js.map +0 -1
- package/dist/esm/map-interface.3ef9d0ae.js +0 -99
- package/dist/esm/map-interface.3ef9d0ae.js.map +0 -1
- package/dist/esm/map-interface.3f07937e.js +0 -124
- package/dist/esm/map-interface.3f07937e.js.map +0 -1
- package/dist/esm/map-interface.473f1f2b.js +0 -28
- package/dist/esm/map-interface.473f1f2b.js.map +0 -1
- package/dist/esm/map-interface.50edfdfd.js +0 -74
- package/dist/esm/map-interface.50edfdfd.js.map +0 -1
- package/dist/esm/map-interface.54ccd41f.js +0 -58
- package/dist/esm/map-interface.54ccd41f.js.map +0 -1
- package/dist/esm/map-interface.578a7505.js +0 -130
- package/dist/esm/map-interface.578a7505.js.map +0 -1
- package/dist/esm/map-interface.59896194.js +0 -37
- package/dist/esm/map-interface.59896194.js.map +0 -1
- package/dist/esm/map-interface.672c2e0b.js +0 -182
- package/dist/esm/map-interface.672c2e0b.js.map +0 -1
- package/dist/esm/map-interface.70d6a7ff.js +0 -16
- package/dist/esm/map-interface.70d6a7ff.js.map +0 -1
- package/dist/esm/map-interface.72b1bfba.js +0 -94
- package/dist/esm/map-interface.72b1bfba.js.map +0 -1
- package/dist/esm/map-interface.767fdc4a.js +0 -64
- package/dist/esm/map-interface.767fdc4a.js.map +0 -1
- package/dist/esm/map-interface.786d6e58.js +0 -258
- package/dist/esm/map-interface.786d6e58.js.map +0 -1
- package/dist/esm/map-interface.7ea8a1e0.js +0 -40
- package/dist/esm/map-interface.7ea8a1e0.js.map +0 -1
- package/dist/esm/map-interface.90d9023c.js +0 -13
- package/dist/esm/map-interface.90d9023c.js.map +0 -1
- package/dist/esm/map-interface.9152234b.js +0 -114
- package/dist/esm/map-interface.9152234b.js.map +0 -1
- package/dist/esm/map-interface.957e414c.js +0 -52
- package/dist/esm/map-interface.957e414c.js.map +0 -1
- package/dist/esm/map-interface.9fac5fa6.js +0 -50
- package/dist/esm/map-interface.9fac5fa6.js.map +0 -1
- package/dist/esm/map-interface.a03a7a23.js +0 -16
- package/dist/esm/map-interface.a03a7a23.js.map +0 -1
- package/dist/esm/map-interface.bdef07d2.js +0 -34
- package/dist/esm/map-interface.bdef07d2.js.map +0 -1
- package/dist/esm/map-interface.c4fa120d.js +0 -28
- package/dist/esm/map-interface.c4fa120d.js.map +0 -1
- package/dist/esm/map-interface.c52c2fec.js +0 -130
- package/dist/esm/map-interface.c52c2fec.js.map +0 -1
- package/dist/esm/map-interface.c99b53b6.js +0 -43
- package/dist/esm/map-interface.c99b53b6.js.map +0 -1
- package/dist/esm/map-interface.ca1ee406.js +0 -214
- package/dist/esm/map-interface.ca1ee406.js.map +0 -1
- package/dist/esm/map-interface.e20a9bac.js +0 -107
- package/dist/esm/map-interface.e20a9bac.js.map +0 -1
- package/dist/esm/map-interface.e50c290f.js +0 -61
- package/dist/esm/map-interface.e50c290f.js.map +0 -1
- package/dist/esm/map-interface.ec2278ab.js +0 -178
- package/dist/esm/map-interface.ec2278ab.js.map +0 -1
- package/dist/esm/map-interface.f7b8bdb7.js +0 -192
- package/dist/esm/map-interface.f7b8bdb7.js.map +0 -1
- package/dist/node/index.js +0 -2
- package/dist/node/index.js.map +0 -1
- package/dist/node/map-interface.07882229.css +0 -2
- package/dist/node/map-interface.07882229.css.map +0 -1
- package/dist/node/map-interface.0e71fd95.js +0 -2
- package/dist/node/map-interface.0e71fd95.js.map +0 -1
- package/dist/node/map-interface.10f5ef81.js +0 -2
- package/dist/node/map-interface.10f5ef81.js.map +0 -1
- package/dist/node/map-interface.1a5eecac.js +0 -2
- package/dist/node/map-interface.1a5eecac.js.map +0 -1
- package/dist/node/map-interface.1be49df8.css +0 -2
- package/dist/node/map-interface.1be49df8.css.map +0 -1
- package/dist/node/map-interface.254e457a.js +0 -2
- package/dist/node/map-interface.254e457a.js.map +0 -1
- package/dist/node/map-interface.2d12b35c.js +0 -2
- package/dist/node/map-interface.2d12b35c.js.map +0 -1
- package/dist/node/map-interface.33b7734a.js +0 -2
- package/dist/node/map-interface.33b7734a.js.map +0 -1
- package/dist/node/map-interface.3ea55e0c.js +0 -2
- package/dist/node/map-interface.3ea55e0c.js.map +0 -1
- package/dist/node/map-interface.42a4b05a.js +0 -2
- package/dist/node/map-interface.42a4b05a.js.map +0 -1
- package/dist/node/map-interface.42ef081d.css +0 -2
- package/dist/node/map-interface.42ef081d.css.map +0 -1
- package/dist/node/map-interface.47b81f95.js +0 -2
- package/dist/node/map-interface.47b81f95.js.map +0 -1
- package/dist/node/map-interface.48262cbb.js +0 -2
- package/dist/node/map-interface.48262cbb.js.map +0 -1
- package/dist/node/map-interface.4df6e2c7.js +0 -2
- package/dist/node/map-interface.4df6e2c7.js.map +0 -1
- package/dist/node/map-interface.55a1f38d.js +0 -2
- package/dist/node/map-interface.55a1f38d.js.map +0 -1
- package/dist/node/map-interface.56b5b2ee.js +0 -2
- package/dist/node/map-interface.56b5b2ee.js.map +0 -1
- package/dist/node/map-interface.6184dc0f.js +0 -2
- package/dist/node/map-interface.6184dc0f.js.map +0 -1
- package/dist/node/map-interface.62b147ce.js +0 -2
- package/dist/node/map-interface.62b147ce.js.map +0 -1
- package/dist/node/map-interface.713361a4.js +0 -2
- package/dist/node/map-interface.713361a4.js.map +0 -1
- package/dist/node/map-interface.722387fb.js +0 -2
- package/dist/node/map-interface.722387fb.js.map +0 -1
- package/dist/node/map-interface.7aaa58c9.js +0 -2
- package/dist/node/map-interface.7aaa58c9.js.map +0 -1
- package/dist/node/map-interface.7e13bea8.js +0 -2
- package/dist/node/map-interface.7e13bea8.js.map +0 -1
- package/dist/node/map-interface.83fa8028.js +0 -2
- package/dist/node/map-interface.83fa8028.js.map +0 -1
- package/dist/node/map-interface.9317d050.js +0 -2
- package/dist/node/map-interface.9317d050.js.map +0 -1
- package/dist/node/map-interface.971af4bc.js +0 -2
- package/dist/node/map-interface.971af4bc.js.map +0 -1
- package/dist/node/map-interface.9824c03a.js +0 -2
- package/dist/node/map-interface.9824c03a.js.map +0 -1
- package/dist/node/map-interface.992dea73.js +0 -2
- package/dist/node/map-interface.992dea73.js.map +0 -1
- package/dist/node/map-interface.9e6751ac.js +0 -2
- package/dist/node/map-interface.9e6751ac.js.map +0 -1
- package/dist/node/map-interface.a1252092.css +0 -2
- package/dist/node/map-interface.a1252092.css.map +0 -1
- package/dist/node/map-interface.a8a16138.js +0 -2
- package/dist/node/map-interface.a8a16138.js.map +0 -1
- package/dist/node/map-interface.aa4d45ff.js +0 -2
- package/dist/node/map-interface.aa4d45ff.js.map +0 -1
- package/dist/node/map-interface.ae3d2d83.js +0 -2
- package/dist/node/map-interface.ae3d2d83.js.map +0 -1
- package/dist/node/map-interface.b0e1ad1b.js +0 -2
- package/dist/node/map-interface.b0e1ad1b.js.map +0 -1
- package/dist/node/map-interface.b14f08e8.js +0 -2
- package/dist/node/map-interface.b14f08e8.js.map +0 -1
- package/dist/node/map-interface.bd78832e.css +0 -2
- package/dist/node/map-interface.bd78832e.css.map +0 -1
- package/dist/node/map-interface.c5c0ad06.js +0 -2
- package/dist/node/map-interface.c5c0ad06.js.map +0 -1
- package/dist/node/map-interface.ce86a010.js +0 -2
- package/dist/node/map-interface.ce86a010.js.map +0 -1
- package/dist/node/map-interface.d22d91e9.css +0 -2
- package/dist/node/map-interface.d22d91e9.css.map +0 -1
- package/dist/node/map-interface.d2fce135.css +0 -2
- package/dist/node/map-interface.d2fce135.css.map +0 -1
- package/dist/node/map-interface.d5eba479.css +0 -2
- package/dist/node/map-interface.d5eba479.css.map +0 -1
- package/dist/node/map-interface.d92b296e.js +0 -2
- package/dist/node/map-interface.d92b296e.js.map +0 -1
- package/dist/node/map-interface.e0032d67.js +0 -2
- package/dist/node/map-interface.e0032d67.js.map +0 -1
- package/dist/node/map-interface.e7598785.js +0 -2
- package/dist/node/map-interface.e7598785.js.map +0 -1
- package/dist/node/map-interface.ed6b5586.js +0 -2
- package/dist/node/map-interface.ed6b5586.js.map +0 -1
- package/dist/node/map-interface.f413c362.js +0 -2
- package/dist/node/map-interface.f413c362.js.map +0 -1
- package/dist/node/map-interface.f4d2a5eb.js +0 -2
- package/dist/node/map-interface.f4d2a5eb.js.map +0 -1
- package/dist/node/map-interface.fdd35e74.js +0 -2
- package/dist/node/map-interface.fdd35e74.js.map +0 -1
- package/src/location-details/info-blocks.module.styl +0 -39
- package/src/location-details/xdd-panel/Article.tsx +0 -69
- package/src/location-info/index.ts +0 -100
- package/src/location-info/utils.ts +0 -24
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const h$1 = require("@macrostrat/hyper");
|
|
4
|
+
const mapboxReact = require("@macrostrat/mapbox-react");
|
|
5
|
+
const mapboxUtils = require("@macrostrat/mapbox-utils");
|
|
6
|
+
const classNames = require("classnames");
|
|
7
|
+
const mapboxgl = require("mapbox-gl");
|
|
8
|
+
const React = require("react");
|
|
9
|
+
const main_module = require("./main.module.sass.cjs");
|
|
10
|
+
const helpers = require("./helpers.cjs");
|
|
11
|
+
;/* empty css */
|
|
12
|
+
const utils = require("./utils.cjs");
|
|
13
|
+
const uiComponents = require("@macrostrat/ui-components");
|
|
14
|
+
const h = h$1.styled(main_module.default);
|
|
15
|
+
function defaultInitializeMap(container, args = {}) {
|
|
16
|
+
const { mapPosition, ...rest } = args;
|
|
17
|
+
const map = new mapboxgl.Map({
|
|
18
|
+
container,
|
|
19
|
+
maxZoom: 18,
|
|
20
|
+
logoPosition: "bottom-left",
|
|
21
|
+
trackResize: false,
|
|
22
|
+
antialias: true,
|
|
23
|
+
// This is a legacy option for Mapbox GL v2
|
|
24
|
+
// @ts-ignore
|
|
25
|
+
optimizeForTerrain: true,
|
|
26
|
+
...rest
|
|
27
|
+
});
|
|
28
|
+
let _mapPosition = mapPosition;
|
|
29
|
+
if (_mapPosition == null && rest.center == null && rest.bounds == null) {
|
|
30
|
+
_mapPosition = defaultMapPosition;
|
|
31
|
+
}
|
|
32
|
+
if (_mapPosition != null) {
|
|
33
|
+
mapboxUtils.setMapPosition(map, _mapPosition);
|
|
34
|
+
}
|
|
35
|
+
return map;
|
|
36
|
+
}
|
|
37
|
+
const defaultMapPosition = {
|
|
38
|
+
camera: {
|
|
39
|
+
lat: 34,
|
|
40
|
+
lng: -120,
|
|
41
|
+
altitude: 3e5
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
function MapView(props) {
|
|
45
|
+
let { terrainSourceID } = props;
|
|
46
|
+
const {
|
|
47
|
+
enableTerrain = true,
|
|
48
|
+
style,
|
|
49
|
+
mapPosition,
|
|
50
|
+
initializeMap = defaultInitializeMap,
|
|
51
|
+
children,
|
|
52
|
+
mapboxToken,
|
|
53
|
+
// Deprecated
|
|
54
|
+
accessToken,
|
|
55
|
+
infoMarkerPosition,
|
|
56
|
+
transformRequest,
|
|
57
|
+
projection,
|
|
58
|
+
onMapLoaded = null,
|
|
59
|
+
onStyleLoaded = null,
|
|
60
|
+
onMapMoved = null,
|
|
61
|
+
standalone = false,
|
|
62
|
+
overlayStyles,
|
|
63
|
+
transformStyle,
|
|
64
|
+
trackResize = true,
|
|
65
|
+
loadingIgnoredSources = ["elevationMarker", "crossSectionEndpoints"],
|
|
66
|
+
id = "map",
|
|
67
|
+
className,
|
|
68
|
+
...rest
|
|
69
|
+
} = props;
|
|
70
|
+
if (enableTerrain) {
|
|
71
|
+
terrainSourceID ??= "mapbox-3d-dem";
|
|
72
|
+
}
|
|
73
|
+
React.useEffect(() => {
|
|
74
|
+
if (id != null) {
|
|
75
|
+
console.warn(
|
|
76
|
+
"Setting a specific element ID for the map is deprecated. Please use className instead."
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}, [id]);
|
|
80
|
+
const _mapboxToken = mapboxToken ?? accessToken;
|
|
81
|
+
if (_mapboxToken != null) {
|
|
82
|
+
mapboxgl.accessToken = _mapboxToken;
|
|
83
|
+
}
|
|
84
|
+
const dispatch = mapboxReact.useMapDispatch();
|
|
85
|
+
let mapRef = mapboxReact.useMapRef();
|
|
86
|
+
const ref = React.useRef();
|
|
87
|
+
const parentRef = React.useRef();
|
|
88
|
+
const [baseStyle, setBaseStyle] = React.useState(null);
|
|
89
|
+
const estMapPosition = mapRef.current == null ? mapPosition : mapboxUtils.getMapPosition(mapRef.current);
|
|
90
|
+
const { mapUse3D, mapIsRotated } = mapboxUtils.mapViewInfo(estMapPosition);
|
|
91
|
+
const is3DAvailable = (mapUse3D ?? false) && enableTerrain;
|
|
92
|
+
React.useEffect(() => {
|
|
93
|
+
if (baseStyle == null) return;
|
|
94
|
+
let map = mapRef.current;
|
|
95
|
+
let newStyle = baseStyle;
|
|
96
|
+
const overlayStyles2 = props.overlayStyles ?? [];
|
|
97
|
+
if (overlayStyles2.length > 0) {
|
|
98
|
+
newStyle = mapboxUtils.mergeStyles(newStyle, ...overlayStyles2);
|
|
99
|
+
}
|
|
100
|
+
if (is3DAvailable) {
|
|
101
|
+
const terrainStyle = mapboxReact.getTerrainLayerForStyle(newStyle, terrainSourceID);
|
|
102
|
+
newStyle = mapboxUtils.mergeStyles(newStyle, terrainStyle);
|
|
103
|
+
}
|
|
104
|
+
if (transformStyle != null) {
|
|
105
|
+
newStyle = transformStyle(newStyle);
|
|
106
|
+
}
|
|
107
|
+
if (map != null) {
|
|
108
|
+
dispatch({ type: "set-style-loaded", payload: false });
|
|
109
|
+
map.setStyle(newStyle);
|
|
110
|
+
} else {
|
|
111
|
+
const map2 = initializeMap(ref.current, {
|
|
112
|
+
style: newStyle,
|
|
113
|
+
projection,
|
|
114
|
+
mapPosition,
|
|
115
|
+
transformRequest,
|
|
116
|
+
...rest
|
|
117
|
+
});
|
|
118
|
+
dispatch({ type: "set-map", payload: map2 });
|
|
119
|
+
map2.setPadding(utils.getMapPadding(ref, parentRef), { animate: false });
|
|
120
|
+
onMapLoaded?.(map2);
|
|
121
|
+
}
|
|
122
|
+
}, [baseStyle, overlayStyles, transformStyle]);
|
|
123
|
+
uiComponents.useAsyncEffect(async () => {
|
|
124
|
+
let newStyle;
|
|
125
|
+
if (typeof style === "string") {
|
|
126
|
+
newStyle = await mapboxUtils.getMapboxStyle(style, {
|
|
127
|
+
access_token: mapboxgl.accessToken
|
|
128
|
+
});
|
|
129
|
+
} else {
|
|
130
|
+
newStyle = style;
|
|
131
|
+
}
|
|
132
|
+
setBaseStyle(newStyle);
|
|
133
|
+
}, [style]);
|
|
134
|
+
const _projection = mapRef.current?.getProjection()?.name ?? "mercator";
|
|
135
|
+
const mapClassName = classNames(
|
|
136
|
+
{
|
|
137
|
+
"is-rotated": mapIsRotated ?? false,
|
|
138
|
+
"is-3d-available": is3DAvailable
|
|
139
|
+
},
|
|
140
|
+
`${_projection}-projection`
|
|
141
|
+
);
|
|
142
|
+
const parentClassName = classNames(
|
|
143
|
+
{
|
|
144
|
+
standalone
|
|
145
|
+
},
|
|
146
|
+
className
|
|
147
|
+
);
|
|
148
|
+
return h(
|
|
149
|
+
"div.map-view-container.main-view",
|
|
150
|
+
{ ref: parentRef, className: parentClassName },
|
|
151
|
+
[
|
|
152
|
+
h("div.mapbox-map.map-view", { ref, className: mapClassName, id }),
|
|
153
|
+
h(helpers.MapLoadingReporter, {
|
|
154
|
+
ignoredSources: loadingIgnoredSources
|
|
155
|
+
}),
|
|
156
|
+
h(StyleLoadedReporter, { onStyleLoaded }),
|
|
157
|
+
h(helpers.MapMovedReporter, { onMapMoved }),
|
|
158
|
+
// Subsitute for trackResize: true that allows map resizing to
|
|
159
|
+
// be tied to a specific ref component
|
|
160
|
+
h.if(trackResize)(helpers.MapResizeManager, { containerRef: ref }),
|
|
161
|
+
h(helpers.MapPaddingManager, {
|
|
162
|
+
containerRef: ref,
|
|
163
|
+
parentRef,
|
|
164
|
+
infoMarkerPosition
|
|
165
|
+
}),
|
|
166
|
+
h(MapTerrainManager, { mapUse3D: is3DAvailable, terrainSourceID, style }),
|
|
167
|
+
children
|
|
168
|
+
]
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
function StyleLoadedReporter({ onStyleLoaded = null }) {
|
|
172
|
+
const isStyleLoaded = mapboxReact.useMapStatus((state) => state.isStyleLoaded);
|
|
173
|
+
const mapRef = mapboxReact.useMapRef();
|
|
174
|
+
const dispatch = mapboxReact.useMapDispatch();
|
|
175
|
+
React.useEffect(() => {
|
|
176
|
+
if (isStyleLoaded) return;
|
|
177
|
+
const interval = setInterval(() => {
|
|
178
|
+
const map = mapRef.current;
|
|
179
|
+
if (map == null) return;
|
|
180
|
+
if (map.isStyleLoaded()) {
|
|
181
|
+
dispatch({ type: "set-style-loaded", payload: true });
|
|
182
|
+
onStyleLoaded?.(map);
|
|
183
|
+
clearInterval(interval);
|
|
184
|
+
}
|
|
185
|
+
}, 50);
|
|
186
|
+
return () => clearInterval(interval);
|
|
187
|
+
}, [isStyleLoaded]);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
function MapTerrainManager({
|
|
191
|
+
mapUse3D,
|
|
192
|
+
terrainSourceID,
|
|
193
|
+
style
|
|
194
|
+
}) {
|
|
195
|
+
mapboxReact.use3DTerrain(mapUse3D, terrainSourceID);
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
exports.MapTerrainManager = MapTerrainManager;
|
|
199
|
+
exports.MapView = MapView;
|
|
200
|
+
//# sourceMappingURL=map-view.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-view.cjs","sources":["../src/map-view.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n useMapRef,\n useMapDispatch,\n use3DTerrain,\n getTerrainLayerForStyle,\n useMapStatus,\n} from \"@macrostrat/mapbox-react\";\nimport React from \"react\";\nimport {\n mapViewInfo,\n MapPosition,\n setMapPosition,\n getMapPosition,\n getMapboxStyle,\n mergeStyles,\n} from \"@macrostrat/mapbox-utils\";\nimport classNames from \"classnames\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useEffect, useRef, useState } from \"react\";\nimport styles from \"./main.module.sass\";\nimport {\n MapLoadingReporter,\n MapMovedReporter,\n MapPaddingManager,\n MapResizeManager,\n} from \"./helpers\";\nimport \"mapbox-gl/dist/mapbox-gl.css\";\nimport { getMapPadding } from \"./utils\";\nimport { useAsyncEffect } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\ntype MapboxCoreOptions = Omit<mapboxgl.MapboxOptions, \"container\">;\n\nexport interface MapViewProps extends MapboxCoreOptions {\n showLineSymbols?: boolean;\n children?: React.ReactNode;\n mapboxToken?: string;\n // Deprecated\n accessToken?: string;\n terrainSourceID?: string;\n enableTerrain?: boolean;\n infoMarkerPosition?: mapboxgl.LngLatLike;\n mapPosition?: MapPosition;\n initializeMap?: (\n container: HTMLElement,\n args: MapboxOptionsExt,\n ) => mapboxgl.Map;\n onMapLoaded?: (map: mapboxgl.Map) => void;\n onStyleLoaded?: (map: mapboxgl.Map) => void;\n onMapMoved?: (mapPosition: MapPosition, map: mapboxgl.Map) => void;\n /** This map sets its own viewport, rather than being positioned by a parent.\n * This is a hack to ensure that the map can overflow its \"safe area\" when false */\n standalone?: boolean;\n /** Overlay styles to apply to the map: a list of mapbox style objects or fragments to\n * overlay on top of the main map style at runtime */\n overlayStyles?: Partial<mapboxgl.StyleSpecification>[];\n /** A function to transform the map style before it is loaded */\n transformStyle?: (\n style: mapboxgl.StyleSpecification,\n ) => mapboxgl.StyleSpecification;\n loadingIgnoredSources?: string[];\n id?: string;\n className?: string;\n}\n\nexport interface MapboxOptionsExt extends MapboxCoreOptions {\n mapPosition?: MapPosition;\n}\n\nfunction defaultInitializeMap(container, args: MapboxOptionsExt = {}) {\n const { mapPosition, ...rest } = args;\n\n const map = new mapboxgl.Map({\n container,\n maxZoom: 18,\n logoPosition: \"bottom-left\",\n trackResize: false,\n antialias: true,\n // This is a legacy option for Mapbox GL v2\n // @ts-ignore\n optimizeForTerrain: true,\n ...rest,\n });\n\n let _mapPosition = mapPosition;\n if (_mapPosition == null && rest.center == null && rest.bounds == null) {\n // If no map positioning information is provided, we use the default\n _mapPosition = defaultMapPosition;\n }\n\n // set initial map position\n if (_mapPosition != null) {\n setMapPosition(map, _mapPosition);\n }\n\n return map;\n}\n\nconst defaultMapPosition: MapPosition = {\n camera: {\n lat: 34,\n lng: -120,\n altitude: 300000,\n },\n};\n\nexport function MapView(props: MapViewProps) {\n let { terrainSourceID } = props;\n const {\n enableTerrain = true,\n style,\n mapPosition,\n initializeMap = defaultInitializeMap,\n children,\n mapboxToken,\n // Deprecated\n accessToken,\n infoMarkerPosition,\n transformRequest,\n projection,\n onMapLoaded = null,\n onStyleLoaded = null,\n onMapMoved = null,\n standalone = false,\n overlayStyles,\n transformStyle,\n trackResize = true,\n loadingIgnoredSources = [\"elevationMarker\", \"crossSectionEndpoints\"],\n id = \"map\",\n className,\n ...rest\n } = props;\n if (enableTerrain) {\n terrainSourceID ??= \"mapbox-3d-dem\";\n }\n\n useEffect(() => {\n if (id != null) {\n console.warn(\n \"Setting a specific element ID for the map is deprecated. Please use className instead.\",\n );\n }\n }, [id]);\n\n const _mapboxToken = mapboxToken ?? accessToken;\n\n if (_mapboxToken != null) {\n mapboxgl.accessToken = _mapboxToken;\n }\n\n const dispatch = useMapDispatch();\n let mapRef = useMapRef();\n const ref = useRef<HTMLDivElement>();\n const parentRef = useRef<HTMLDivElement>();\n\n const [baseStyle, setBaseStyle] = useState<mapboxgl.Style>(null);\n\n const estMapPosition: MapPosition | null =\n mapRef.current == null ? mapPosition : getMapPosition(mapRef.current);\n const { mapUse3D, mapIsRotated } = mapViewInfo(estMapPosition);\n const is3DAvailable = (mapUse3D ?? false) && enableTerrain;\n\n useEffect(() => {\n /** Manager to update map style */\n if (baseStyle == null) return;\n let map = mapRef.current;\n\n let newStyle: mapboxgl.StyleSpecification = baseStyle;\n\n const overlayStyles = props.overlayStyles ?? [];\n\n if (overlayStyles.length > 0) {\n newStyle = mergeStyles(newStyle, ...overlayStyles);\n }\n\n /** If we can, we try to update the map style with terrain information\n * immediately, before the style is loaded. This allows us to avoid a\n * flash of the map without terrain.\n *\n * To do this, we need to estimate the map position before load, which\n * doesn't always work.\n */\n if (is3DAvailable) {\n // We can update the style with terrain layers immediately\n const terrainStyle = getTerrainLayerForStyle(newStyle, terrainSourceID);\n newStyle = mergeStyles(newStyle, terrainStyle);\n }\n\n if (transformStyle != null) {\n newStyle = transformStyle(newStyle);\n }\n\n if (map != null) {\n dispatch({ type: \"set-style-loaded\", payload: false });\n map.setStyle(newStyle);\n } else {\n const map = initializeMap(ref.current, {\n style: newStyle,\n projection,\n mapPosition,\n transformRequest,\n ...rest,\n });\n dispatch({ type: \"set-map\", payload: map });\n map.setPadding(getMapPadding(ref, parentRef), { animate: false });\n onMapLoaded?.(map);\n }\n }, [baseStyle, overlayStyles, transformStyle]);\n\n useAsyncEffect(async () => {\n /** Manager to update map style */\n let newStyle: mapboxgl.StyleSpecification;\n if (typeof style === \"string\") {\n newStyle = await getMapboxStyle(style, {\n access_token: mapboxgl.accessToken,\n });\n } else {\n newStyle = style;\n }\n setBaseStyle(newStyle);\n }, [style]);\n\n // Get map projection\n const _projection = mapRef.current?.getProjection()?.name ?? \"mercator\";\n\n const mapClassName = classNames(\n {\n \"is-rotated\": mapIsRotated ?? false,\n \"is-3d-available\": is3DAvailable,\n },\n `${_projection}-projection`,\n );\n\n const parentClassName = classNames(\n {\n standalone,\n },\n className,\n );\n\n return h(\n \"div.map-view-container.main-view\",\n { ref: parentRef, className: parentClassName },\n [\n h(\"div.mapbox-map.map-view\", { ref, className: mapClassName, id }),\n h(MapLoadingReporter, {\n ignoredSources: loadingIgnoredSources,\n }),\n h(StyleLoadedReporter, { onStyleLoaded }),\n h(MapMovedReporter, { onMapMoved }),\n // Subsitute for trackResize: true that allows map resizing to\n // be tied to a specific ref component\n h.if(trackResize)(MapResizeManager, { containerRef: ref }),\n h(MapPaddingManager, {\n containerRef: ref,\n parentRef,\n infoMarkerPosition,\n }),\n h(MapTerrainManager, { mapUse3D: is3DAvailable, terrainSourceID, style }),\n children,\n ],\n );\n}\n\nfunction StyleLoadedReporter({ onStyleLoaded = null }) {\n /** Check back every 0.1 seconds to see if the map has loaded.\n * We do it this way because mapboxgl loading events are unreliable */\n const isStyleLoaded = useMapStatus((state) => state.isStyleLoaded);\n const mapRef = useMapRef();\n const dispatch = useMapDispatch();\n\n useEffect(() => {\n if (isStyleLoaded) return;\n const interval = setInterval(() => {\n const map = mapRef.current;\n if (map == null) return;\n if (map.isStyleLoaded()) {\n // Wait a tick before setting the style loaded state\n dispatch({ type: \"set-style-loaded\", payload: true });\n onStyleLoaded?.(map);\n clearInterval(interval);\n }\n }, 50);\n return () => clearInterval(interval);\n }, [isStyleLoaded]);\n\n return null;\n}\n\nexport function MapTerrainManager({\n mapUse3D,\n terrainSourceID,\n style,\n}: {\n mapUse3D?: boolean;\n terrainSourceID?: string;\n style?: mapboxgl.StyleSpecification | string;\n}) {\n use3DTerrain(mapUse3D, terrainSourceID);\n\n return null;\n}\n"],"names":["hyper","styles","setMapPosition","useEffect","useMapDispatch","useMapRef","useRef","useState","getMapPosition","mapViewInfo","overlayStyles","mergeStyles","getTerrainLayerForStyle","map","getMapPadding","useAsyncEffect","getMapboxStyle","MapLoadingReporter","MapMovedReporter","MapResizeManager","MapPaddingManager","useMapStatus","use3DTerrain"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { MapPosition } from '@macrostrat/mapbox-utils';
|
|
3
|
+
type MapboxCoreOptions = Omit<mapboxgl.MapboxOptions, "container">;
|
|
4
|
+
export interface MapViewProps extends MapboxCoreOptions {
|
|
5
|
+
showLineSymbols?: boolean;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
mapboxToken?: string;
|
|
8
|
+
accessToken?: string;
|
|
9
|
+
terrainSourceID?: string;
|
|
10
|
+
enableTerrain?: boolean;
|
|
11
|
+
infoMarkerPosition?: mapboxgl.LngLatLike;
|
|
12
|
+
mapPosition?: MapPosition;
|
|
13
|
+
initializeMap?: (container: HTMLElement, args: MapboxOptionsExt) => mapboxgl.Map;
|
|
14
|
+
onMapLoaded?: (map: mapboxgl.Map) => void;
|
|
15
|
+
onStyleLoaded?: (map: mapboxgl.Map) => void;
|
|
16
|
+
onMapMoved?: (mapPosition: MapPosition, map: mapboxgl.Map) => void;
|
|
17
|
+
/** This map sets its own viewport, rather than being positioned by a parent.
|
|
18
|
+
* This is a hack to ensure that the map can overflow its "safe area" when false */
|
|
19
|
+
standalone?: boolean;
|
|
20
|
+
/** Overlay styles to apply to the map: a list of mapbox style objects or fragments to
|
|
21
|
+
* overlay on top of the main map style at runtime */
|
|
22
|
+
overlayStyles?: Partial<mapboxgl.StyleSpecification>[];
|
|
23
|
+
/** A function to transform the map style before it is loaded */
|
|
24
|
+
transformStyle?: (style: mapboxgl.StyleSpecification) => mapboxgl.StyleSpecification;
|
|
25
|
+
loadingIgnoredSources?: string[];
|
|
26
|
+
id?: string;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface MapboxOptionsExt extends MapboxCoreOptions {
|
|
30
|
+
mapPosition?: MapPosition;
|
|
31
|
+
}
|
|
32
|
+
export declare function MapView(props: MapViewProps): import('react').ReactElement<{
|
|
33
|
+
ref: React.MutableRefObject<HTMLDivElement>;
|
|
34
|
+
className: string;
|
|
35
|
+
}, string | import('react').JSXElementConstructor<any>>;
|
|
36
|
+
export declare function MapTerrainManager({ mapUse3D, terrainSourceID, style, }: {
|
|
37
|
+
mapUse3D?: boolean;
|
|
38
|
+
terrainSourceID?: string;
|
|
39
|
+
style?: mapboxgl.StyleSpecification | string;
|
|
40
|
+
}): any;
|
|
41
|
+
export {};
|
package/dist/map-view.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import h$1 from "@macrostrat/hyper";
|
|
2
|
+
import { use3DTerrain, useMapDispatch, useMapRef, getTerrainLayerForStyle, useMapStatus } from "@macrostrat/mapbox-react";
|
|
3
|
+
import { getMapPosition, mapViewInfo, mergeStyles, getMapboxStyle, setMapPosition } from "@macrostrat/mapbox-utils";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
import mapboxgl from "mapbox-gl";
|
|
6
|
+
import { useEffect, useRef, useState } from "react";
|
|
7
|
+
import styles from "./main.module.sass.js";
|
|
8
|
+
import { MapLoadingReporter, MapMovedReporter, MapResizeManager, MapPaddingManager } from "./helpers.js";
|
|
9
|
+
/* empty css */
|
|
10
|
+
import { getMapPadding } from "./utils.js";
|
|
11
|
+
import { useAsyncEffect } from "@macrostrat/ui-components";
|
|
12
|
+
const h = h$1.styled(styles);
|
|
13
|
+
function defaultInitializeMap(container, args = {}) {
|
|
14
|
+
const { mapPosition, ...rest } = args;
|
|
15
|
+
const map = new mapboxgl.Map({
|
|
16
|
+
container,
|
|
17
|
+
maxZoom: 18,
|
|
18
|
+
logoPosition: "bottom-left",
|
|
19
|
+
trackResize: false,
|
|
20
|
+
antialias: true,
|
|
21
|
+
// This is a legacy option for Mapbox GL v2
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
optimizeForTerrain: true,
|
|
24
|
+
...rest
|
|
25
|
+
});
|
|
26
|
+
let _mapPosition = mapPosition;
|
|
27
|
+
if (_mapPosition == null && rest.center == null && rest.bounds == null) {
|
|
28
|
+
_mapPosition = defaultMapPosition;
|
|
29
|
+
}
|
|
30
|
+
if (_mapPosition != null) {
|
|
31
|
+
setMapPosition(map, _mapPosition);
|
|
32
|
+
}
|
|
33
|
+
return map;
|
|
34
|
+
}
|
|
35
|
+
const defaultMapPosition = {
|
|
36
|
+
camera: {
|
|
37
|
+
lat: 34,
|
|
38
|
+
lng: -120,
|
|
39
|
+
altitude: 3e5
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
function MapView(props) {
|
|
43
|
+
let { terrainSourceID } = props;
|
|
44
|
+
const {
|
|
45
|
+
enableTerrain = true,
|
|
46
|
+
style,
|
|
47
|
+
mapPosition,
|
|
48
|
+
initializeMap = defaultInitializeMap,
|
|
49
|
+
children,
|
|
50
|
+
mapboxToken,
|
|
51
|
+
// Deprecated
|
|
52
|
+
accessToken,
|
|
53
|
+
infoMarkerPosition,
|
|
54
|
+
transformRequest,
|
|
55
|
+
projection,
|
|
56
|
+
onMapLoaded = null,
|
|
57
|
+
onStyleLoaded = null,
|
|
58
|
+
onMapMoved = null,
|
|
59
|
+
standalone = false,
|
|
60
|
+
overlayStyles,
|
|
61
|
+
transformStyle,
|
|
62
|
+
trackResize = true,
|
|
63
|
+
loadingIgnoredSources = ["elevationMarker", "crossSectionEndpoints"],
|
|
64
|
+
id = "map",
|
|
65
|
+
className,
|
|
66
|
+
...rest
|
|
67
|
+
} = props;
|
|
68
|
+
if (enableTerrain) {
|
|
69
|
+
terrainSourceID ??= "mapbox-3d-dem";
|
|
70
|
+
}
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (id != null) {
|
|
73
|
+
console.warn(
|
|
74
|
+
"Setting a specific element ID for the map is deprecated. Please use className instead."
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}, [id]);
|
|
78
|
+
const _mapboxToken = mapboxToken ?? accessToken;
|
|
79
|
+
if (_mapboxToken != null) {
|
|
80
|
+
mapboxgl.accessToken = _mapboxToken;
|
|
81
|
+
}
|
|
82
|
+
const dispatch = useMapDispatch();
|
|
83
|
+
let mapRef = useMapRef();
|
|
84
|
+
const ref = useRef();
|
|
85
|
+
const parentRef = useRef();
|
|
86
|
+
const [baseStyle, setBaseStyle] = useState(null);
|
|
87
|
+
const estMapPosition = mapRef.current == null ? mapPosition : getMapPosition(mapRef.current);
|
|
88
|
+
const { mapUse3D, mapIsRotated } = mapViewInfo(estMapPosition);
|
|
89
|
+
const is3DAvailable = (mapUse3D ?? false) && enableTerrain;
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (baseStyle == null) return;
|
|
92
|
+
let map = mapRef.current;
|
|
93
|
+
let newStyle = baseStyle;
|
|
94
|
+
const overlayStyles2 = props.overlayStyles ?? [];
|
|
95
|
+
if (overlayStyles2.length > 0) {
|
|
96
|
+
newStyle = mergeStyles(newStyle, ...overlayStyles2);
|
|
97
|
+
}
|
|
98
|
+
if (is3DAvailable) {
|
|
99
|
+
const terrainStyle = getTerrainLayerForStyle(newStyle, terrainSourceID);
|
|
100
|
+
newStyle = mergeStyles(newStyle, terrainStyle);
|
|
101
|
+
}
|
|
102
|
+
if (transformStyle != null) {
|
|
103
|
+
newStyle = transformStyle(newStyle);
|
|
104
|
+
}
|
|
105
|
+
if (map != null) {
|
|
106
|
+
dispatch({ type: "set-style-loaded", payload: false });
|
|
107
|
+
map.setStyle(newStyle);
|
|
108
|
+
} else {
|
|
109
|
+
const map2 = initializeMap(ref.current, {
|
|
110
|
+
style: newStyle,
|
|
111
|
+
projection,
|
|
112
|
+
mapPosition,
|
|
113
|
+
transformRequest,
|
|
114
|
+
...rest
|
|
115
|
+
});
|
|
116
|
+
dispatch({ type: "set-map", payload: map2 });
|
|
117
|
+
map2.setPadding(getMapPadding(ref, parentRef), { animate: false });
|
|
118
|
+
onMapLoaded?.(map2);
|
|
119
|
+
}
|
|
120
|
+
}, [baseStyle, overlayStyles, transformStyle]);
|
|
121
|
+
useAsyncEffect(async () => {
|
|
122
|
+
let newStyle;
|
|
123
|
+
if (typeof style === "string") {
|
|
124
|
+
newStyle = await getMapboxStyle(style, {
|
|
125
|
+
access_token: mapboxgl.accessToken
|
|
126
|
+
});
|
|
127
|
+
} else {
|
|
128
|
+
newStyle = style;
|
|
129
|
+
}
|
|
130
|
+
setBaseStyle(newStyle);
|
|
131
|
+
}, [style]);
|
|
132
|
+
const _projection = mapRef.current?.getProjection()?.name ?? "mercator";
|
|
133
|
+
const mapClassName = classNames(
|
|
134
|
+
{
|
|
135
|
+
"is-rotated": mapIsRotated ?? false,
|
|
136
|
+
"is-3d-available": is3DAvailable
|
|
137
|
+
},
|
|
138
|
+
`${_projection}-projection`
|
|
139
|
+
);
|
|
140
|
+
const parentClassName = classNames(
|
|
141
|
+
{
|
|
142
|
+
standalone
|
|
143
|
+
},
|
|
144
|
+
className
|
|
145
|
+
);
|
|
146
|
+
return h(
|
|
147
|
+
"div.map-view-container.main-view",
|
|
148
|
+
{ ref: parentRef, className: parentClassName },
|
|
149
|
+
[
|
|
150
|
+
h("div.mapbox-map.map-view", { ref, className: mapClassName, id }),
|
|
151
|
+
h(MapLoadingReporter, {
|
|
152
|
+
ignoredSources: loadingIgnoredSources
|
|
153
|
+
}),
|
|
154
|
+
h(StyleLoadedReporter, { onStyleLoaded }),
|
|
155
|
+
h(MapMovedReporter, { onMapMoved }),
|
|
156
|
+
// Subsitute for trackResize: true that allows map resizing to
|
|
157
|
+
// be tied to a specific ref component
|
|
158
|
+
h.if(trackResize)(MapResizeManager, { containerRef: ref }),
|
|
159
|
+
h(MapPaddingManager, {
|
|
160
|
+
containerRef: ref,
|
|
161
|
+
parentRef,
|
|
162
|
+
infoMarkerPosition
|
|
163
|
+
}),
|
|
164
|
+
h(MapTerrainManager, { mapUse3D: is3DAvailable, terrainSourceID, style }),
|
|
165
|
+
children
|
|
166
|
+
]
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
function StyleLoadedReporter({ onStyleLoaded = null }) {
|
|
170
|
+
const isStyleLoaded = useMapStatus((state) => state.isStyleLoaded);
|
|
171
|
+
const mapRef = useMapRef();
|
|
172
|
+
const dispatch = useMapDispatch();
|
|
173
|
+
useEffect(() => {
|
|
174
|
+
if (isStyleLoaded) return;
|
|
175
|
+
const interval = setInterval(() => {
|
|
176
|
+
const map = mapRef.current;
|
|
177
|
+
if (map == null) return;
|
|
178
|
+
if (map.isStyleLoaded()) {
|
|
179
|
+
dispatch({ type: "set-style-loaded", payload: true });
|
|
180
|
+
onStyleLoaded?.(map);
|
|
181
|
+
clearInterval(interval);
|
|
182
|
+
}
|
|
183
|
+
}, 50);
|
|
184
|
+
return () => clearInterval(interval);
|
|
185
|
+
}, [isStyleLoaded]);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
function MapTerrainManager({
|
|
189
|
+
mapUse3D,
|
|
190
|
+
terrainSourceID,
|
|
191
|
+
style
|
|
192
|
+
}) {
|
|
193
|
+
use3DTerrain(mapUse3D, terrainSourceID);
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
export {
|
|
197
|
+
MapTerrainManager,
|
|
198
|
+
MapView
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=map-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-view.js","sources":["../src/map-view.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n useMapRef,\n useMapDispatch,\n use3DTerrain,\n getTerrainLayerForStyle,\n useMapStatus,\n} from \"@macrostrat/mapbox-react\";\nimport React from \"react\";\nimport {\n mapViewInfo,\n MapPosition,\n setMapPosition,\n getMapPosition,\n getMapboxStyle,\n mergeStyles,\n} from \"@macrostrat/mapbox-utils\";\nimport classNames from \"classnames\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useEffect, useRef, useState } from \"react\";\nimport styles from \"./main.module.sass\";\nimport {\n MapLoadingReporter,\n MapMovedReporter,\n MapPaddingManager,\n MapResizeManager,\n} from \"./helpers\";\nimport \"mapbox-gl/dist/mapbox-gl.css\";\nimport { getMapPadding } from \"./utils\";\nimport { useAsyncEffect } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\ntype MapboxCoreOptions = Omit<mapboxgl.MapboxOptions, \"container\">;\n\nexport interface MapViewProps extends MapboxCoreOptions {\n showLineSymbols?: boolean;\n children?: React.ReactNode;\n mapboxToken?: string;\n // Deprecated\n accessToken?: string;\n terrainSourceID?: string;\n enableTerrain?: boolean;\n infoMarkerPosition?: mapboxgl.LngLatLike;\n mapPosition?: MapPosition;\n initializeMap?: (\n container: HTMLElement,\n args: MapboxOptionsExt,\n ) => mapboxgl.Map;\n onMapLoaded?: (map: mapboxgl.Map) => void;\n onStyleLoaded?: (map: mapboxgl.Map) => void;\n onMapMoved?: (mapPosition: MapPosition, map: mapboxgl.Map) => void;\n /** This map sets its own viewport, rather than being positioned by a parent.\n * This is a hack to ensure that the map can overflow its \"safe area\" when false */\n standalone?: boolean;\n /** Overlay styles to apply to the map: a list of mapbox style objects or fragments to\n * overlay on top of the main map style at runtime */\n overlayStyles?: Partial<mapboxgl.StyleSpecification>[];\n /** A function to transform the map style before it is loaded */\n transformStyle?: (\n style: mapboxgl.StyleSpecification,\n ) => mapboxgl.StyleSpecification;\n loadingIgnoredSources?: string[];\n id?: string;\n className?: string;\n}\n\nexport interface MapboxOptionsExt extends MapboxCoreOptions {\n mapPosition?: MapPosition;\n}\n\nfunction defaultInitializeMap(container, args: MapboxOptionsExt = {}) {\n const { mapPosition, ...rest } = args;\n\n const map = new mapboxgl.Map({\n container,\n maxZoom: 18,\n logoPosition: \"bottom-left\",\n trackResize: false,\n antialias: true,\n // This is a legacy option for Mapbox GL v2\n // @ts-ignore\n optimizeForTerrain: true,\n ...rest,\n });\n\n let _mapPosition = mapPosition;\n if (_mapPosition == null && rest.center == null && rest.bounds == null) {\n // If no map positioning information is provided, we use the default\n _mapPosition = defaultMapPosition;\n }\n\n // set initial map position\n if (_mapPosition != null) {\n setMapPosition(map, _mapPosition);\n }\n\n return map;\n}\n\nconst defaultMapPosition: MapPosition = {\n camera: {\n lat: 34,\n lng: -120,\n altitude: 300000,\n },\n};\n\nexport function MapView(props: MapViewProps) {\n let { terrainSourceID } = props;\n const {\n enableTerrain = true,\n style,\n mapPosition,\n initializeMap = defaultInitializeMap,\n children,\n mapboxToken,\n // Deprecated\n accessToken,\n infoMarkerPosition,\n transformRequest,\n projection,\n onMapLoaded = null,\n onStyleLoaded = null,\n onMapMoved = null,\n standalone = false,\n overlayStyles,\n transformStyle,\n trackResize = true,\n loadingIgnoredSources = [\"elevationMarker\", \"crossSectionEndpoints\"],\n id = \"map\",\n className,\n ...rest\n } = props;\n if (enableTerrain) {\n terrainSourceID ??= \"mapbox-3d-dem\";\n }\n\n useEffect(() => {\n if (id != null) {\n console.warn(\n \"Setting a specific element ID for the map is deprecated. Please use className instead.\",\n );\n }\n }, [id]);\n\n const _mapboxToken = mapboxToken ?? accessToken;\n\n if (_mapboxToken != null) {\n mapboxgl.accessToken = _mapboxToken;\n }\n\n const dispatch = useMapDispatch();\n let mapRef = useMapRef();\n const ref = useRef<HTMLDivElement>();\n const parentRef = useRef<HTMLDivElement>();\n\n const [baseStyle, setBaseStyle] = useState<mapboxgl.Style>(null);\n\n const estMapPosition: MapPosition | null =\n mapRef.current == null ? mapPosition : getMapPosition(mapRef.current);\n const { mapUse3D, mapIsRotated } = mapViewInfo(estMapPosition);\n const is3DAvailable = (mapUse3D ?? false) && enableTerrain;\n\n useEffect(() => {\n /** Manager to update map style */\n if (baseStyle == null) return;\n let map = mapRef.current;\n\n let newStyle: mapboxgl.StyleSpecification = baseStyle;\n\n const overlayStyles = props.overlayStyles ?? [];\n\n if (overlayStyles.length > 0) {\n newStyle = mergeStyles(newStyle, ...overlayStyles);\n }\n\n /** If we can, we try to update the map style with terrain information\n * immediately, before the style is loaded. This allows us to avoid a\n * flash of the map without terrain.\n *\n * To do this, we need to estimate the map position before load, which\n * doesn't always work.\n */\n if (is3DAvailable) {\n // We can update the style with terrain layers immediately\n const terrainStyle = getTerrainLayerForStyle(newStyle, terrainSourceID);\n newStyle = mergeStyles(newStyle, terrainStyle);\n }\n\n if (transformStyle != null) {\n newStyle = transformStyle(newStyle);\n }\n\n if (map != null) {\n dispatch({ type: \"set-style-loaded\", payload: false });\n map.setStyle(newStyle);\n } else {\n const map = initializeMap(ref.current, {\n style: newStyle,\n projection,\n mapPosition,\n transformRequest,\n ...rest,\n });\n dispatch({ type: \"set-map\", payload: map });\n map.setPadding(getMapPadding(ref, parentRef), { animate: false });\n onMapLoaded?.(map);\n }\n }, [baseStyle, overlayStyles, transformStyle]);\n\n useAsyncEffect(async () => {\n /** Manager to update map style */\n let newStyle: mapboxgl.StyleSpecification;\n if (typeof style === \"string\") {\n newStyle = await getMapboxStyle(style, {\n access_token: mapboxgl.accessToken,\n });\n } else {\n newStyle = style;\n }\n setBaseStyle(newStyle);\n }, [style]);\n\n // Get map projection\n const _projection = mapRef.current?.getProjection()?.name ?? \"mercator\";\n\n const mapClassName = classNames(\n {\n \"is-rotated\": mapIsRotated ?? false,\n \"is-3d-available\": is3DAvailable,\n },\n `${_projection}-projection`,\n );\n\n const parentClassName = classNames(\n {\n standalone,\n },\n className,\n );\n\n return h(\n \"div.map-view-container.main-view\",\n { ref: parentRef, className: parentClassName },\n [\n h(\"div.mapbox-map.map-view\", { ref, className: mapClassName, id }),\n h(MapLoadingReporter, {\n ignoredSources: loadingIgnoredSources,\n }),\n h(StyleLoadedReporter, { onStyleLoaded }),\n h(MapMovedReporter, { onMapMoved }),\n // Subsitute for trackResize: true that allows map resizing to\n // be tied to a specific ref component\n h.if(trackResize)(MapResizeManager, { containerRef: ref }),\n h(MapPaddingManager, {\n containerRef: ref,\n parentRef,\n infoMarkerPosition,\n }),\n h(MapTerrainManager, { mapUse3D: is3DAvailable, terrainSourceID, style }),\n children,\n ],\n );\n}\n\nfunction StyleLoadedReporter({ onStyleLoaded = null }) {\n /** Check back every 0.1 seconds to see if the map has loaded.\n * We do it this way because mapboxgl loading events are unreliable */\n const isStyleLoaded = useMapStatus((state) => state.isStyleLoaded);\n const mapRef = useMapRef();\n const dispatch = useMapDispatch();\n\n useEffect(() => {\n if (isStyleLoaded) return;\n const interval = setInterval(() => {\n const map = mapRef.current;\n if (map == null) return;\n if (map.isStyleLoaded()) {\n // Wait a tick before setting the style loaded state\n dispatch({ type: \"set-style-loaded\", payload: true });\n onStyleLoaded?.(map);\n clearInterval(interval);\n }\n }, 50);\n return () => clearInterval(interval);\n }, [isStyleLoaded]);\n\n return null;\n}\n\nexport function MapTerrainManager({\n mapUse3D,\n terrainSourceID,\n style,\n}: {\n mapUse3D?: boolean;\n terrainSourceID?: string;\n style?: mapboxgl.StyleSpecification | string;\n}) {\n use3DTerrain(mapUse3D, terrainSourceID);\n\n return null;\n}\n"],"names":["hyper","overlayStyles","map"],"mappings":"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"}
|
package/dist/utils.cjs
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const mapboxgl = require("mapbox-gl");
|
|
5
|
+
function calcMapPadding(rect, childRect) {
|
|
6
|
+
return {
|
|
7
|
+
left: Math.max(rect.left - childRect.left, 0),
|
|
8
|
+
top: Math.max(rect.top - childRect.top, 0),
|
|
9
|
+
right: Math.max(childRect.right - rect.right, 0),
|
|
10
|
+
bottom: Math.max(childRect.bottom - rect.bottom, 0)
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function getMapPadding(ref, parentRef) {
|
|
14
|
+
const rect = parentRef.current?.getBoundingClientRect();
|
|
15
|
+
const childRect = ref.current?.getBoundingClientRect();
|
|
16
|
+
if (rect == null || childRect == null) return;
|
|
17
|
+
return calcMapPadding(rect, childRect);
|
|
18
|
+
}
|
|
19
|
+
function useMapMarker(mapRef, markerRef, markerPosition) {
|
|
20
|
+
React.useEffect(() => {
|
|
21
|
+
const map = mapRef.current;
|
|
22
|
+
if (map == null) return;
|
|
23
|
+
if (markerPosition == null) {
|
|
24
|
+
markerRef.current?.remove();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const marker = markerRef.current ?? new mapboxgl.Marker();
|
|
28
|
+
marker.setLngLat(markerPosition).addTo(map);
|
|
29
|
+
markerRef.current = marker;
|
|
30
|
+
return () => marker.remove();
|
|
31
|
+
}, [mapRef.current, markerPosition]);
|
|
32
|
+
}
|
|
33
|
+
exports.getMapPadding = getMapPadding;
|
|
34
|
+
exports.useMapMarker = useMapMarker;
|
|
35
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../src/utils.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Marker } from \"mapbox-gl\";\n\nfunction calcMapPadding(rect, childRect) {\n return {\n left: Math.max(rect.left - childRect.left, 0),\n top: Math.max(rect.top - childRect.top, 0),\n right: Math.max(childRect.right - rect.right, 0),\n bottom: Math.max(childRect.bottom - rect.bottom, 0),\n };\n}\n\nexport function getMapPadding(ref, parentRef) {\n const rect = parentRef.current?.getBoundingClientRect();\n const childRect = ref.current?.getBoundingClientRect();\n if (rect == null || childRect == null) return;\n return calcMapPadding(rect, childRect);\n}\n\nexport function useMapMarker(mapRef, markerRef, markerPosition) {\n useEffect(() => {\n const map = mapRef.current;\n if (map == null) return;\n if (markerPosition == null) {\n markerRef.current?.remove();\n return;\n }\n const marker = markerRef.current ?? new Marker();\n marker.setLngLat(markerPosition).addTo(map);\n markerRef.current = marker;\n return () => marker.remove();\n }, [mapRef.current, markerPosition]);\n}\n"],"names":["useEffect","Marker"],"mappings":";;;;AAGA,SAAS,eAAe,MAAM,WAAW;AACvC,SAAO;AAAA,IACL,MAAM,KAAK,IAAI,KAAK,OAAO,UAAU,MAAM,CAAC;AAAA,IAC5C,KAAK,KAAK,IAAI,KAAK,MAAM,UAAU,KAAK,CAAC;AAAA,IACzC,OAAO,KAAK,IAAI,UAAU,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC/C,QAAQ,KAAK,IAAI,UAAU,SAAS,KAAK,QAAQ,CAAC;AAAA,EAAA;AAEtD;AAEO,SAAS,cAAc,KAAK,WAAW;AAC5C,QAAM,OAAO,UAAU,SAAS,sBAAA;AAChC,QAAM,YAAY,IAAI,SAAS,sBAAA;AAC/B,MAAI,QAAQ,QAAQ,aAAa,KAAM;AACvC,SAAO,eAAe,MAAM,SAAS;AACvC;AAEO,SAAS,aAAa,QAAQ,WAAW,gBAAgB;AAC9DA,QAAAA,UAAU,MAAM;AACd,UAAM,MAAM,OAAO;AACnB,QAAI,OAAO,KAAM;AACjB,QAAI,kBAAkB,MAAM;AAC1B,gBAAU,SAAS,OAAA;AACnB;AAAA,IACF;AACA,UAAM,SAAS,UAAU,WAAW,IAAIC,SAAAA,OAAA;AACxC,WAAO,UAAU,cAAc,EAAE,MAAM,GAAG;AAC1C,cAAU,UAAU;AACpB,WAAO,MAAM,OAAO,OAAA;AAAA,EACtB,GAAG,CAAC,OAAO,SAAS,cAAc,CAAC;AACrC;;;"}
|
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { Marker } from "mapbox-gl";
|
|
3
|
+
function calcMapPadding(rect, childRect) {
|
|
4
|
+
return {
|
|
5
|
+
left: Math.max(rect.left - childRect.left, 0),
|
|
6
|
+
top: Math.max(rect.top - childRect.top, 0),
|
|
7
|
+
right: Math.max(childRect.right - rect.right, 0),
|
|
8
|
+
bottom: Math.max(childRect.bottom - rect.bottom, 0)
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function getMapPadding(ref, parentRef) {
|
|
12
|
+
const rect = parentRef.current?.getBoundingClientRect();
|
|
13
|
+
const childRect = ref.current?.getBoundingClientRect();
|
|
14
|
+
if (rect == null || childRect == null) return;
|
|
15
|
+
return calcMapPadding(rect, childRect);
|
|
16
|
+
}
|
|
17
|
+
function useMapMarker(mapRef, markerRef, markerPosition) {
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const map = mapRef.current;
|
|
20
|
+
if (map == null) return;
|
|
21
|
+
if (markerPosition == null) {
|
|
22
|
+
markerRef.current?.remove();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const marker = markerRef.current ?? new Marker();
|
|
26
|
+
marker.setLngLat(markerPosition).addTo(map);
|
|
27
|
+
markerRef.current = marker;
|
|
28
|
+
return () => marker.remove();
|
|
29
|
+
}, [mapRef.current, markerPosition]);
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
getMapPadding,
|
|
33
|
+
useMapMarker
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Marker } from \"mapbox-gl\";\n\nfunction calcMapPadding(rect, childRect) {\n return {\n left: Math.max(rect.left - childRect.left, 0),\n top: Math.max(rect.top - childRect.top, 0),\n right: Math.max(childRect.right - rect.right, 0),\n bottom: Math.max(childRect.bottom - rect.bottom, 0),\n };\n}\n\nexport function getMapPadding(ref, parentRef) {\n const rect = parentRef.current?.getBoundingClientRect();\n const childRect = ref.current?.getBoundingClientRect();\n if (rect == null || childRect == null) return;\n return calcMapPadding(rect, childRect);\n}\n\nexport function useMapMarker(mapRef, markerRef, markerPosition) {\n useEffect(() => {\n const map = mapRef.current;\n if (map == null) return;\n if (markerPosition == null) {\n markerRef.current?.remove();\n return;\n }\n const marker = markerRef.current ?? new Marker();\n marker.setLngLat(markerPosition).addTo(map);\n markerRef.current = marker;\n return () => marker.remove();\n }, [mapRef.current, markerPosition]);\n}\n"],"names":[],"mappings":";;AAGA,SAAS,eAAe,MAAM,WAAW;AACvC,SAAO;AAAA,IACL,MAAM,KAAK,IAAI,KAAK,OAAO,UAAU,MAAM,CAAC;AAAA,IAC5C,KAAK,KAAK,IAAI,KAAK,MAAM,UAAU,KAAK,CAAC;AAAA,IACzC,OAAO,KAAK,IAAI,UAAU,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC/C,QAAQ,KAAK,IAAI,UAAU,SAAS,KAAK,QAAQ,CAAC;AAAA,EAAA;AAEtD;AAEO,SAAS,cAAc,KAAK,WAAW;AAC5C,QAAM,OAAO,UAAU,SAAS,sBAAA;AAChC,QAAM,YAAY,IAAI,SAAS,sBAAA;AAC/B,MAAI,QAAQ,QAAQ,aAAa,KAAM;AACvC,SAAO,eAAe,MAAM,SAAS;AACvC;AAEO,SAAS,aAAa,QAAQ,WAAW,gBAAgB;AAC9D,YAAU,MAAM;AACd,UAAM,MAAM,OAAO;AACnB,QAAI,OAAO,KAAM;AACjB,QAAI,kBAAkB,MAAM;AAC1B,gBAAU,SAAS,OAAA;AACnB;AAAA,IACF;AACA,UAAM,SAAS,UAAU,WAAW,IAAI,OAAA;AACxC,WAAO,UAAU,cAAc,EAAE,MAAM,GAAG;AAC1C,cAAU,UAAU;AACpB,WAAO,MAAM,OAAO,OAAA;AAAA,EACtB,GAAG,CAAC,OAAO,SAAS,cAAc,CAAC;AACrC;"}
|