/******/ (function() { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	!function() {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = function(exports, definition) {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	!function() {
/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	!function() {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = function(exports) {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	}();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "default": function() { return /* binding */ map_getter; }
});

;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}
;// CONCATENATED MODULE: external "@zpc_npm/vue-iclient-leaflet/_utils/util"
var util_namespaceObject = require("@zpc_npm/vue-iclient-leaflet/_utils/util");
;// CONCATENATED MODULE: ./src/common/_utils/mitt.js


/**
 * 向外暴露的默认函数
 * @param 入参为 EventHandlerMap
 * @returns 返回一个对象，对象包含属性 all，方法 on，off，emit
 */

class Mitt {
  /*
      此处实参可传一个EventHandlerMap对象，实现多个 mitt 的合并。例如：
      const m1 = mitt();
      m1.on('hi', () => { console.log('Hi, I am belongs to m1.'); });
      const m2 = mitt(m1.all);
      m2.emit('hi') // Hi, I am belongs to m1.
      m2.on('hello', () => { console.log('Hello, I am belongs to m2.'); });
      m1.emit('hello'); // Hello, I am belongs to m2.
      m1.all === m2.all // true
    */
  constructor(all) {
    _defineProperty(this, "all", null);

    this.all = all || new Map();
  }
  /**
   * 注册一个命名的事件处理
   * @param type 事件名，官方表示事件名如是 *，用来标记为通用事件，调用任何事件，都会触发命名为 * 的事件
   * @param handler 事件处理函数
   */


  on(type, handler) {
    // 根据type去查找事件
    const handlers = this.all.get(type);

    if (handlers) {
      for (let i = 0; i < handlers.length; i++) {
        // 防止重复监听 事件执行的方法相同时 不添加
        if (handlers[i] === handler) {
          return;
        }
      }

      handlers.push(handler);
    } else {
      this.all.set(type, [handler]);
    }
  }
  /**
   * 只执行一次 就会被移除
   * @param type
   * @param fn
   */


  once(type, fn) {
    const handler = (0,util_namespaceObject.bind)(function () {
      this.off(type, fn);
      this.off(type, handler);
    }, this); // 添加执行事件和移除执行事件的监听

    this.on(type, fn);
    this.on(type, handler);
  }
  /**
   * 移除指定的事件处理
   * @param type 事件名，和第二个参数一起用来移除指定的事件，
   * @param handler 事件处理函数
   */


  off(type, handler) {
    if (!type) {
      this.all.clear();
      return;
    } // 根据type去查找事件


    const handlers = this.all.get(type); // 如果找到则进行删除操作

    if (handlers) {
      // 这里用了个骚操作，其实就是找到了，则删除(多个相同的只会删除找到的第一个)，没找到则不会对原数组有任何影响
      handlers.splice(handlers.indexOf(handler) >>> 0, 1);
    }
  }
  /**
   * 触发所有 type 事件，如果有type为 * 的事件，则最后会执行。
   * @param type 事件名
   * @param evt 传递给处理函数的参数
   */


  fire(type, evt) {
    // 找到type的事件循环执行
    (this.all.get(type) || []).slice().map(handler => {
      handler(evt);
    }); // 然后找到所有为*的事件，循环执行

    (this.all.get("*") || []).slice().map(handler => {
      handler(type, evt);
    });
  }

}
;// CONCATENATED MODULE: ./src/leaflet/_types/map-event.js
/**
 * ZL 20220606 mapview对象控制类，mapview对象控制类、删除、获取和mapview操作的监听事件处理mitt
 */

/* harmony default export */ var map_event = ({
  webMapCache: {},
  // 事件监听对象
  mitt: new Mitt(),
  getWebMap: function (webmapTarget) {
    return this.webMapCache[webmapTarget];
  },
  getAllWebMap: function () {
    return this.webMapCache;
  },
  setWebMap: function (webmapTarget, webmap) {
    this.destroy();
    this.webMapCache[webmapTarget] = webmap;
  },
  deleteWebMap: function (webmapTarget) {
    delete this.webMapCache[webmapTarget];
  },

  // zl 为防止以特殊方式移除map的dom元素，但是map、mapview对象未销毁，
  // 特添加此方法，删除map对象绑定的div已经找不到的情况
  // 当前是为解决storybook频繁切换属性参数，组件不执行销毁的问题
  destroy() {
    Object.keys(this.webMapCache).forEach(key => {
      let target = this.webMapCache[key].target; // 绑定的div已经被移除

      if (!document.getElementById(target)) {
        this.webMapCache[key].destroy(); //this.deleteMap(target);

        this.deleteWebMap(target);
      }
    });
  }

});
;// CONCATENATED MODULE: external {"root":"Vue","commonjs":"vue","commonjs2":"vue","amd":"vue"}
var external_root_Vue_commonjs_vue_commonjs2_vue_amd_vue_namespaceObject = require("vue");
;// CONCATENATED MODULE: ./src/leaflet/_mixin/map-getter.js
/**
 *  zl 20220817
 *  map对象获取绑定的操作对象
 */


/* harmony default export */ var map_getter = ({
  getTargetName(cb) {
    const {
      proxy
    } = (0,external_root_Vue_commonjs_vue_commonjs2_vue_amd_vue_namespaceObject.getCurrentInstance)();
    /**
     * 便于区分存在多个map时，子组件对应的map的渲染；
     * map 和 webmap  的 props 属性是 target 其他组件都叫 mapTarget
     * 如果子组件包裹在 map 组件里面，若没有传 mapTarget, 则 targetName 直接取父元素的target 的值
     * 如果子组件和 map 同层级，且没有设置 mapTarget 时，则默认渲染到第一个 map 上
     */

    const selfParent = proxy.$parent;
    const parentTarget = selfParent && selfParent.$options.name && selfParent.$options.name.toLowerCase() === "kqmapview" && selfParent.$props.target;

    if (!parentTarget) {
      const _webmaps = Object.keys(map_event.getAllWebMap());

      if (_webmaps.length === 0) {
        map_event.mitt.on("load-map", e => {
          cb(e.eventTarget);
        });
      } else {
        cb(_webmaps[0]);
      }
    } else {
      cb(parentTarget);
    }
  },

  getWebMap(cb, targetName) {
    let webmap = map_event.getWebMap(targetName);

    if (webmap && webmap.map) {
      cb(webmap);
    } else {
      // 添加map对象加载监听事件
      // 清除事件的时间：在load-map执行后就立即清空了
      map_event.mitt.on("load-map", () => {
        webmap = map_event.getWebMap(targetName);

        if (webmap) {
          cb(webmap);
        }
      });
    }
  }

});
module.exports = __webpack_exports__;
/******/ })()
;