async init(mapEl, basemap, startingCoords, startingZoom, userDefinedView = false, attribution) {
		if (!Leaflet) {
			this.#sharedPromise.start();
			Leaflet = await import('leaflet')
				.then((m) => {
					const Leaflet = m.default;
					initSmoothZoom(Leaflet); // Initialize smooth zoom after importing Leaflet
					return Leaflet;
				})
				.catch((e) => {
					this.#sharedPromise.reject(e);
				});
		}

		this.#initZoom = startingZoom;

		if (this.#mapEl) {
			const e = new Error('Evidence Map already initialized');
			this.#sharedPromise.reject(e);
			throw e;
		}

		this.#mapEl = mapEl;

		this.#map = Leaflet.map(this.#mapEl, {
			zoomControl: false,
			scrollWheelZoom: false, // disable original zoom function
			smoothWheelZoom: true, // enable smooth zoom
			smoothSensitivity: 5 // zoom speed. default is 1
		}).setView(startingCoords, startingZoom ?? 5);

		if (userDefinedView) {
			this.#initialViewSet = true; // Mark initial view as set
		}

		const processedBasemap = this.processBasemapUrl(basemap);
		Leaflet.tileLayer(processedBasemap, {
			subdomains: 'abcd',
			maxZoom: 20,
			className: '__evidence-leaflet-tile-layer__',
			attribution: attribution
		}).addTo(this.#map);

		if (!attribution) {
			this.#map.removeControl(this.#map.attributionControl);
		}

		this.#bounds = Leaflet.latLngBounds();

		this.#sharedPromise.resolve();
	}
Initializes the map within the provided HTML element with specified starting coordinates and zoom level.
@param {HTMLDivElement} mapEl - The HTML element to initialize the map in.
@param {string} basemap - The URL template for the basemap.
@param {import('leaflet').LatLngExpression} [startingCoords] - The starting coordinates for the map.
@param {number} [startingZoom] - The starting zoom level for the map.
@param {boolean} [userDefinedView=false]
@param {string} [attribution] - The attribution text to display on the map.
@returns {Promise<void>}