/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunkcomplexForFunnel"] = self["webpackChunkcomplexForFunnel"] || []).push([["src_pages_HomePage_ViewHome_vue"],{
/***/ "./node_modules/rbush/rbush.min.js":
/*!*****************************************!*\
!*** ./node_modules/rbush/rbush.min.js ***!
\*****************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n!function (t, i) {\n true ? module.exports = i() : 0;\n}(this, function () {\n \"use strict\";\n\n function t(t, r, e, a, h) {\n !function t(n, r, e, a, h) {\n for (; a > e;) {\n if (a - e > 600) {\n var o = a - e + 1,\n s = r - e + 1,\n l = Math.log(o),\n f = .5 * Math.exp(2 * l / 3),\n u = .5 * Math.sqrt(l * f * (o - f) / o) * (s - o / 2 < 0 ? -1 : 1),\n m = Math.max(e, Math.floor(r - s * f / o + u)),\n c = Math.min(a, Math.floor(r + (o - s) * f / o + u));\n t(n, r, m, c, h);\n }\n var p = n[r],\n d = e,\n x = a;\n for (i(n, e, r), h(n[a], p) > 0 && i(n, e, a); d < x;) {\n for (i(n, d, x), d++, x--; h(n[d], p) < 0;) d++;\n for (; h(n[x], p) > 0;) x--;\n }\n 0 === h(n[e], p) ? i(n, e, x) : i(n, ++x, a), x <= r && (e = x + 1), r <= x && (a = x - 1);\n }\n }(t, r, e || 0, a || t.length - 1, h || n);\n }\n function i(t, i, n) {\n var r = t[i];\n t[i] = t[n], t[n] = r;\n }\n function n(t, i) {\n return t < i ? -1 : t > i ? 1 : 0;\n }\n var r = function (t) {\n void 0 === t && (t = 9), this._maxEntries = Math.max(4, t), this._minEntries = Math.max(2, Math.ceil(.4 * this._maxEntries)), this.clear();\n };\n function e(t, i, n) {\n if (!n) return i.indexOf(t);\n for (var r = 0; r < i.length; r++) if (n(t, i[r])) return r;\n return -1;\n }\n function a(t, i) {\n h(t, 0, t.children.length, i, t);\n }\n function h(t, i, n, r, e) {\n e || (e = p(null)), e.minX = 1 / 0, e.minY = 1 / 0, e.maxX = -1 / 0, e.maxY = -1 / 0;\n for (var a = i; a < n; a++) {\n var h = t.children[a];\n o(e, t.leaf ? r(h) : h);\n }\n return e;\n }\n function o(t, i) {\n return t.minX = Math.min(t.minX, i.minX), t.minY = Math.min(t.minY, i.minY), t.maxX = Math.max(t.maxX, i.maxX), t.maxY = Math.max(t.maxY, i.maxY), t;\n }\n function s(t, i) {\n return t.minX - i.minX;\n }\n function l(t, i) {\n return t.minY - i.minY;\n }\n function f(t) {\n return (t.maxX - t.minX) * (t.maxY - t.minY);\n }\n function u(t) {\n return t.maxX - t.minX + (t.maxY - t.minY);\n }\n function m(t, i) {\n return t.minX <= i.minX && t.minY <= i.minY && i.maxX <= t.maxX && i.maxY <= t.maxY;\n }\n function c(t, i) {\n return i.minX <= t.maxX && i.minY <= t.maxY && i.maxX >= t.minX && i.maxY >= t.minY;\n }\n function p(t) {\n return {\n children: t,\n height: 1,\n leaf: !0,\n minX: 1 / 0,\n minY: 1 / 0,\n maxX: -1 / 0,\n maxY: -1 / 0\n };\n }\n function d(i, n, r, e, a) {\n for (var h = [n, r]; h.length;) if (!((r = h.pop()) - (n = h.pop()) <= e)) {\n var o = n + Math.ceil((r - n) / e / 2) * e;\n t(i, o, n, r, a), h.push(n, o, o, r);\n }\n }\n return r.prototype.all = function () {\n return this._all(this.data, []);\n }, r.prototype.search = function (t) {\n var i = this.data,\n n = [];\n if (!c(t, i)) return n;\n for (var r = this.toBBox, e = []; i;) {\n for (var a = 0; a < i.children.length; a++) {\n var h = i.children[a],\n o = i.leaf ? r(h) : h;\n c(t, o) && (i.leaf ? n.push(h) : m(t, o) ? this._all(h, n) : e.push(h));\n }\n i = e.pop();\n }\n return n;\n }, r.prototype.collides = function (t) {\n var i = this.data;\n if (!c(t, i)) return !1;\n for (var n = []; i;) {\n for (var r = 0; r < i.children.length; r++) {\n var e = i.children[r],\n a = i.leaf ? this.toBBox(e) : e;\n if (c(t, a)) {\n if (i.leaf || m(t, a)) return !0;\n n.push(e);\n }\n }\n i = n.pop();\n }\n return !1;\n }, r.prototype.load = function (t) {\n if (!t || !t.length) return this;\n if (t.length < this._minEntries) {\n for (var i = 0; i < t.length; i++) this.insert(t[i]);\n return this;\n }\n var n = this._build(t.slice(), 0, t.length - 1, 0);\n if (this.data.children.length) {\n if (this.data.height === n.height) this._splitRoot(this.data, n);else {\n if (this.data.height < n.height) {\n var r = this.data;\n this.data = n, n = r;\n }\n this._insert(n, this.data.height - n.height - 1, !0);\n }\n } else this.data = n;\n return this;\n }, r.prototype.insert = function (t) {\n return t && this._insert(t, this.data.height - 1), this;\n }, r.prototype.clear = function () {\n return this.data = p([]), this;\n }, r.prototype.remove = function (t, i) {\n if (!t) return this;\n for (var n, r, a, h = this.data, o = this.toBBox(t), s = [], l = []; h || s.length;) {\n if (h || (h = s.pop(), r = s[s.length - 1], n = l.pop(), a = !0), h.leaf) {\n var f = e(t, h.children, i);\n if (-1 !== f) return h.children.splice(f, 1), s.push(h), this._condense(s), this;\n }\n a || h.leaf || !m(h, o) ? r ? (n++, h = r.children[n], a = !1) : h = null : (s.push(h), l.push(n), n = 0, r = h, h = h.children[0]);\n }\n return this;\n }, r.prototype.toBBox = function (t) {\n return t;\n }, r.prototype.compareMinX = function (t, i) {\n return t.minX - i.minX;\n }, r.prototype.compareMinY = function (t, i) {\n return t.minY - i.minY;\n }, r.prototype.toJSON = function () {\n return this.data;\n }, r.prototype.fromJSON = function (t) {\n return this.data = t, this;\n }, r.prototype._all = function (t, i) {\n for (var n = []; t;) t.leaf ? i.push.apply(i, t.children) : n.push.apply(n, t.children), t = n.pop();\n return i;\n }, r.prototype._build = function (t, i, n, r) {\n var e,\n h = n - i + 1,\n o = this._maxEntries;\n if (h <= o) return a(e = p(t.slice(i, n + 1)), this.toBBox), e;\n r || (r = Math.ceil(Math.log(h) / Math.log(o)), o = Math.ceil(h / Math.pow(o, r - 1))), (e = p([])).leaf = !1, e.height = r;\n var s = Math.ceil(h / o),\n l = s * Math.ceil(Math.sqrt(o));\n d(t, i, n, l, this.compareMinX);\n for (var f = i; f <= n; f += l) {\n var u = Math.min(f + l - 1, n);\n d(t, f, u, s, this.compareMinY);\n for (var m = f; m <= u; m += s) {\n var c = Math.min(m + s - 1, u);\n e.children.push(this._build(t, m, c, r - 1));\n }\n }\n return a(e, this.toBBox), e;\n }, r.prototype._chooseSubtree = function (t, i, n, r) {\n for (; r.push(i), !i.leaf && r.length - 1 !== n;) {\n for (var e = 1 / 0, a = 1 / 0, h = void 0, o = 0; o < i.children.length; o++) {\n var s = i.children[o],\n l = f(s),\n u = (m = t, c = s, (Math.max(c.maxX, m.maxX) - Math.min(c.minX, m.minX)) * (Math.max(c.maxY, m.maxY) - Math.min(c.minY, m.minY)) - l);\n u < a ? (a = u, e = l < e ? l : e, h = s) : u === a && l < e && (e = l, h = s);\n }\n i = h || i.children[0];\n }\n var m, c;\n return i;\n }, r.prototype._insert = function (t, i, n) {\n var r = n ? t : this.toBBox(t),\n e = [],\n a = this._chooseSubtree(r, this.data, i, e);\n for (a.children.push(t), o(a, r); i >= 0 && e[i].children.length > this._maxEntries;) this._split(e, i), i--;\n this._adjustParentBBoxes(r, e, i);\n }, r.prototype._split = function (t, i) {\n var n = t[i],\n r = n.children.length,\n e = this._minEntries;\n this._chooseSplitAxis(n, e, r);\n var h = this._chooseSplitIndex(n, e, r),\n o = p(n.children.splice(h, n.children.length - h));\n o.height = n.height, o.leaf = n.leaf, a(n, this.toBBox), a(o, this.toBBox), i ? t[i - 1].children.push(o) : this._splitRoot(n, o);\n }, r.prototype._splitRoot = function (t, i) {\n this.data = p([t, i]), this.data.height = t.height + 1, this.data.leaf = !1, a(this.data, this.toBBox);\n }, r.prototype._chooseSplitIndex = function (t, i, n) {\n for (var r, e, a, o, s, l, u, m = 1 / 0, c = 1 / 0, p = i; p <= n - i; p++) {\n var d = h(t, 0, p, this.toBBox),\n x = h(t, p, n, this.toBBox),\n v = (e = d, a = x, o = void 0, s = void 0, l = void 0, u = void 0, o = Math.max(e.minX, a.minX), s = Math.max(e.minY, a.minY), l = Math.min(e.maxX, a.maxX), u = Math.min(e.maxY, a.maxY), Math.max(0, l - o) * Math.max(0, u - s)),\n M = f(d) + f(x);\n v < m ? (m = v, r = p, c = M < c ? M : c) : v === m && M < c && (c = M, r = p);\n }\n return r || n - i;\n }, r.prototype._chooseSplitAxis = function (t, i, n) {\n var r = t.leaf ? this.compareMinX : s,\n e = t.leaf ? this.compareMinY : l;\n this._allDistMargin(t, i, n, r) < this._allDistMargin(t, i, n, e) && t.children.sort(r);\n }, r.prototype._allDistMargin = function (t, i, n, r) {\n t.children.sort(r);\n for (var e = this.toBBox, a = h(t, 0, i, e), s = h(t, n - i, n, e), l = u(a) + u(s), f = i; f < n - i; f++) {\n var m = t.children[f];\n o(a, t.leaf ? e(m) : m), l += u(a);\n }\n for (var c = n - i - 1; c >= i; c--) {\n var p = t.children[c];\n o(s, t.leaf ? e(p) : p), l += u(s);\n }\n return l;\n }, r.prototype._adjustParentBBoxes = function (t, i, n) {\n for (var r = n; r >= 0; r--) o(i[r], t);\n }, r.prototype._condense = function (t) {\n for (var i = t.length - 1, n = void 0; i >= 0; i--) 0 === t[i].children.length ? i > 0 ? (n = t[i - 1].children).splice(n.indexOf(t[i]), 1) : this.clear() : a(t[i], this.toBBox);\n }, r;\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/rbush/rbush.min.js?");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=script&setup=true&lang=js":
/*!********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=script&setup=true&lang=js ***!
\********************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'chessLayoutsItem',\n props: [\"plan\", \"isDetailsOpened\"],\n emits: [\"openWindow\"],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n __expose();\n const emits = __emit;\n const props = __props;\n const selectedPlanRoom = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)({});\n const filteredRooms = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(() => {\n return props.plan.rooms.filter(room => room.visible);\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(filteredRooms, (newV, old) => {\n if (newV.length != old.length) {\n selectedPlanRoom.value = newV[0];\n }\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.onMounted)(() => {\n if (!selectedPlanRoom.value.id) selectedPlanRoom.value = filteredRooms.value[0];\n });\n const __returned__ = {\n emits,\n props,\n selectedPlanRoom,\n filteredRooms,\n get formatNumber() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_0__.formatNumber;\n },\n computed: vue__WEBPACK_IMPORTED_MODULE_1__.computed,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_1__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_1__.ref,\n watch: vue__WEBPACK_IMPORTED_MODULE_1__.watch\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=script&setup=true&lang=js":
/*!*********************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=script&setup=true&lang=js ***!
\*********************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _widgets_homePage_viewHome_chessTile_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/widgets/homePage/viewHome/chessTile.vue */ \"./src/widgets/homePage/viewHome/chessTile.vue\");\n/* harmony import */ var _widgets_homePage_viewHome_chessLayouts_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/widgets/homePage/viewHome/chessLayouts.vue */ \"./src/widgets/homePage/viewHome/chessLayouts.vue\");\n/* harmony import */ var _widgets_homePage_viewHome_chessFloors_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/widgets/homePage/viewHome/chessFloors.vue */ \"./src/widgets/homePage/viewHome/chessFloors.vue\");\n/* harmony import */ var _widgets_homePage_viewHome_chessList_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/widgets/homePage/viewHome/chessList.vue */ \"./src/widgets/homePage/viewHome/chessList.vue\");\n/* harmony import */ var _widgets_homePage_viewHome_viewHead_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/widgets/homePage/viewHome/viewHead.vue */ \"./src/widgets/homePage/viewHome/viewHead.vue\");\n/* harmony import */ var _widgets_homePage_viewHome_windowInfoForList_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/widgets/homePage/viewHome/windowInfoForList.vue */ \"./src/widgets/homePage/viewHome/windowInfoForList.vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _widgets_homePage_viewHome_chessFacade_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/widgets/homePage/viewHome/chessFacade.vue */ \"./src/widgets/homePage/viewHome/chessFacade.vue\");\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! vue-router */ \"./node_modules/vue-router/dist/vue-router.mjs\");\n/* harmony import */ var _shared_api__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/shared/api */ \"./src/shared/api.js\");\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n/* harmony import */ var _eventBus__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/eventBus */ \"./src/eventBus.js\");\n/* harmony import */ var _app_store_fields__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/app/store/fields */ \"./src/app/store/fields.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'ViewHome',\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const viewHome = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)();\n const isOpenFiltersMenu = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(false);\n const isOpenWindow = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(false);\n const viewType = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(\"park\");\n const INITIAL_FILTERS = {\n rooms: [],\n selectedTypes: [],\n selectedDecorations: [],\n floor: {\n from: '',\n to: ''\n },\n price: {\n min: \"\",\n max: \"\"\n },\n square: {\n min: \"\",\n max: \"\"\n },\n squareKitchen: {\n min: \"\",\n max: \"\"\n },\n useSquarePrice: false,\n hiddenPrice: false,\n onlyFree: false,\n view: {\n name: \"Плитка\",\n value: \"tile\",\n icon: \"tile\",\n visible: true\n }\n };\n const apartmentsLoader = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(true);\n const filters = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)((0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_10__.copyObject)(INITIAL_FILTERS));\n const openedApartment = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({});\n const entrances = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)([]);\n const plans = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)([]);\n const house = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const complex = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const route = (0,vue_router__WEBPACK_IMPORTED_MODULE_13__.useRoute)();\n const router = (0,vue_router__WEBPACK_IMPORTED_MODULE_13__.useRouter)();\n const fieldsStore = (0,_app_store_fields__WEBPACK_IMPORTED_MODULE_12__.useFieldsStore)();\n const clearFilters = () => {\n filters.value = (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_10__.copyObject)({\n ...INITIAL_FILTERS,\n view: filters.value.view\n });\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.watch)(filters, newV => {\n if (newV) {\n entrances.value.forEach(entrance => {\n entrance.floors.forEach(floor => {\n floor.rooms.forEach(room => (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_10__.fixRoomVisible)(room, filters.value));\n });\n });\n plans.value.forEach(plan => {\n plan.rooms.forEach(room => (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_10__.fixRoomVisible)(room, filters.value));\n });\n }\n }, {\n deep: true\n });\n const filterCounter = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n switch (filters.value.view?.value) {\n case 'layouts':\n return countFilteredPlansRooms;\n default:\n return countFilteredRooms;\n }\n });\n const countFilteredPlansRooms = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n return (plans.value || []).reduce((acc, plan) => {\n return acc + plan.rooms.reduce((roomsAcc, room) => {\n return roomsAcc + +room.visible;\n }, 0);\n }, 0);\n });\n const countFilteredRooms = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n return (entrances.value || []).reduce((acc, entrance) => {\n return acc + entrance.floors.reduce((floorAcc, floor) => {\n return floorAcc + floor.rooms.reduce((roomsAcc, room) => {\n return roomsAcc + +room.visible;\n }, 0);\n }, 0);\n }, 0);\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.onMounted)(async () => {\n if (route.params.house_id) {\n await _shared_api__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getHouseEntrances(route.params.house_id, ['rooms']).then(response => {\n const updatedEntrances = response.data.sort((a, b) => a.position > b.position ? 1 : -1);\n updatedEntrances.forEach(entrance => entrance.floors = entrance.floors.sort((a, b) => a.position > b.position ? 1 : -1));\n updatedEntrances.forEach(entrance => entrance.floors.forEach(floor => floor.rooms.forEach(room => {\n room.visible = true;\n })));\n entrances.value = updatedEntrances;\n }).finally(() => {\n apartmentsLoader.value = false;\n if (route.params.entrance_id && route.params.floor_id && route.params.apartment_id) {\n const entrance = entrances.value.find(entrance => entrance.id == route.params.entrance_id);\n const floor = entrance.floors.find(entranceFloor => entranceFloor.id == route.params.floor_id);\n openApartment(floor.rooms.find(room => room.id == route.params.apartment_id));\n }\n });\n await _shared_api__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getHousePlans(route.params.house_id).then(response => {\n var res = response.data;\n if (res) {\n const filteredPlans = res.filter(plan => plan.rooms.length);\n filteredPlans.forEach(plan => {\n plan.rooms.forEach(room => {\n room.visible = true;\n });\n });\n plans.value = filteredPlans;\n }\n });\n await _shared_api__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getHouseOne(route.params.house_id, ['rooms']).then(response => {\n if (response.data) {\n if (!response.data.house.rooms_count) router.push(`/my-objects/${route.params.id}/home/${route.params.house_id}`);\n complex.value = response.data.complex;\n house.value = response.data.house;\n }\n });\n }\n _eventBus__WEBPACK_IMPORTED_MODULE_11__[\"default\"].$on('clear-filters', clearFilters);\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.onUnmounted)(() => {\n _eventBus__WEBPACK_IMPORTED_MODULE_11__[\"default\"].$off('clear-filters', clearFilters);\n });\n const openApartment = apartment => {\n openedApartment.value = apartment;\n isOpenWindow.value = true;\n };\n const closeApartment = () => {\n isOpenWindow.value = false;\n setTimeout(() => {\n openedApartment.value = {};\n }, 350);\n };\n const changeApartment = floorPosition => {\n const floor = openedApartmentEntrance.value.floors.find(entranceFloor => entranceFloor.position == floorPosition);\n openApartment(floor.rooms.find(room => room.position == openedApartment.value.position));\n };\n const openedApartmentEntrance = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n if (openedApartment.value) {\n return entrances.value.find(entrance => entrance.id == openedApartment.value.entrance_id);\n }\n return null;\n });\n const openApartmentAvailableFloors = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n if (openedApartment.value && openedApartmentEntrance.value) {\n return openedApartmentEntrance.value.floors.filter(floor => floor.rooms.find(room => room.position == openedApartment.value.position));\n }\n return [];\n });\n const __returned__ = {\n viewHome,\n isOpenFiltersMenu,\n isOpenWindow,\n viewType,\n INITIAL_FILTERS,\n apartmentsLoader,\n filters,\n openedApartment,\n entrances,\n plans,\n house,\n complex,\n route,\n router,\n fieldsStore,\n clearFilters,\n filterCounter,\n countFilteredPlansRooms,\n countFilteredRooms,\n openApartment,\n closeApartment,\n changeApartment,\n openedApartmentEntrance,\n openApartmentAvailableFloors,\n ChessTile: _widgets_homePage_viewHome_chessTile_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n ChessLayouts: _widgets_homePage_viewHome_chessLayouts_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n ChessFloors: _widgets_homePage_viewHome_chessFloors_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n ChessList: _widgets_homePage_viewHome_chessList_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n ViewHead: _widgets_homePage_viewHome_viewHead_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n WindowInfoForList: _widgets_homePage_viewHome_windowInfoForList_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n computed: vue__WEBPACK_IMPORTED_MODULE_7__.computed,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_7__.onMounted,\n onUnmounted: vue__WEBPACK_IMPORTED_MODULE_7__.onUnmounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_7__.ref,\n watch: vue__WEBPACK_IMPORTED_MODULE_7__.watch,\n ChessFacade: _widgets_homePage_viewHome_chessFacade_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n get useRoute() {\n return vue_router__WEBPACK_IMPORTED_MODULE_13__.useRoute;\n },\n get useRouter() {\n return vue_router__WEBPACK_IMPORTED_MODULE_13__.useRouter;\n },\n get api() {\n return _shared_api__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n },\n get copyObject() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_10__.copyObject;\n },\n get fixRoomVisible() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_10__.fixRoomVisible;\n },\n get eventBus() {\n return _eventBus__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n },\n get useFieldsStore() {\n return _app_store_fields__WEBPACK_IMPORTED_MODULE_12__.useFieldsStore;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=script&setup=true&lang=js":
/*!***********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=script&setup=true&lang=js ***!
\***********************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _features_useViewFacades__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/features/useViewFacades */ \"./src/features/useViewFacades.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _popupWindowViewFacade_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./popupWindowViewFacade.vue */ \"./src/widgets/homePage/viewHome/popupWindowViewFacade.vue\");\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-router */ \"./node_modules/vue-router/dist/vue-router.mjs\");\n/* harmony import */ var _windowInfoForListAppartments_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./windowInfoForListAppartments.vue */ \"./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue\");\n/* harmony import */ var _shared_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/shared/api */ \"./src/shared/api.js\");\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'chessFacade',\n props: {\n viewType: String,\n house_name: String,\n complex_name: String,\n filters: Object,\n decorations: Array,\n windowsPlacements: Array\n },\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const props = __props;\n const wrapper = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)();\n const route = (0,vue_router__WEBPACK_IMPORTED_MODULE_6__.useRoute)();\n const facades = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)([]);\n const {\n start,\n optionsFloor,\n changeFacade,\n openModal,\n openedFigure,\n currentFacade,\n closeOverlay,\n changeFeatureRooms\n } = (0,_features_useViewFacades__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n const openFigureAvailableFloors = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(() => {\n if (!openedFigure.value.entrance) {\n return [];\n }\n return uniqueArrayOfObject(currentFacade.value?.figures.filter(figure => figure.entrance && figure.entrance.id == openedFigure.value.entrance.id).map(figure => figure.floor) || [], 'id');\n });\n function uniqueArrayOfObject(array, keyToBeUnique) {\n let arrToReturn = [...array];\n // Filter by looking at the next objects if the key is present a second time\n return arrToReturn.filter((x, xi) => !arrToReturn.slice(xi + 1).some(y => y[keyToBeUnique] === x[keyToBeUnique]));\n }\n const changeFigure = floorPosition => {\n const figure = currentFacade.value.figures.find(figure => figure.floor.position == floorPosition);\n openFigure(figure);\n };\n const openFigure = figure => {\n openedFigure.value = figure;\n openModal.value = true;\n };\n const closeFigure = () => {\n openModal.value = false;\n setTimeout(() => {\n openedFigure.value = {\n floor: null,\n entrance: null,\n rooms: [],\n id: null\n };\n }, 350);\n };\n const filteredRooms = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(() => {\n return openedFigure.value?.rooms.filter(room => room.visible) || [];\n });\n const filteredOptionsFloorRooms = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(() => {\n return optionsFloor.value?.rooms.filter(room => room.visible) || [];\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(props.filters, () => {\n facades.value?.forEach(facade => {\n facade.figures.forEach(figure => {\n figure.rooms?.forEach(room => {\n return (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_5__.fixRoomVisible)(room, props.filters);\n });\n });\n });\n });\n const handelRoomsStatusChanged = apartamentId => {\n openedFigure.value.rooms = openedFigure.value.rooms.filter(room => room.id != apartamentId);\n changeFeatureRooms(openedFigure.value.id, openedFigure.value.rooms);\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.onMounted)(() => {\n _shared_api__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getFacades(route.params.house_id, ['rooms', 'floor', 'entrance']).then(response => {\n if (response.data && Array.isArray(response.data)) {\n const facadesData = response.data;\n facadesData.forEach(facade => {\n facade.figures.forEach(figure => {\n figure.rooms.forEach(room => {\n room.visible = true;\n (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_5__.fixRoomVisible)(room, props.filters);\n });\n });\n });\n facades.value = response.data;\n start(facades.value);\n }\n });\n });\n const __returned__ = {\n props,\n wrapper,\n route,\n facades,\n start,\n optionsFloor,\n changeFacade,\n openModal,\n openedFigure,\n currentFacade,\n closeOverlay,\n changeFeatureRooms,\n openFigureAvailableFloors,\n uniqueArrayOfObject,\n changeFigure,\n openFigure,\n closeFigure,\n filteredRooms,\n filteredOptionsFloorRooms,\n handelRoomsStatusChanged,\n get useViewFacades() {\n return _features_useViewFacades__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n },\n get Facade() {\n return _features_useViewFacades__WEBPACK_IMPORTED_MODULE_0__.Facade;\n },\n computed: vue__WEBPACK_IMPORTED_MODULE_1__.computed,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_1__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_1__.ref,\n watch: vue__WEBPACK_IMPORTED_MODULE_1__.watch,\n PopupWindowViewFacade: _popupWindowViewFacade_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n get useRoute() {\n return vue_router__WEBPACK_IMPORTED_MODULE_6__.useRoute;\n },\n WindowInfoForListAppartments: _windowInfoForListAppartments_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n get api() {\n return _shared_api__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n },\n get fixRoomVisible() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_5__.fixRoomVisible;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=script&setup=true&lang=js":
/*!***********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=script&setup=true&lang=js ***!
\***********************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _app_store_fields__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/app/store/fields */ \"./src/app/store/fields.js\");\n/* harmony import */ var _eventBus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/eventBus */ \"./src/eventBus.js\");\n/* harmony import */ var _features_useViewFloors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/features/useViewFloors */ \"./src/features/useViewFloors.js\");\n/* harmony import */ var _shared_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/shared/api */ \"./src/shared/api.js\");\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n/* harmony import */ var primevue_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! primevue/dropdown */ \"./node_modules/primevue/dropdown/dropdown.esm.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-router */ \"./node_modules/vue-router/dist/vue-router.mjs\");\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'chessFloors',\n props: [\"house_name\", \"complex_name\", 'filters'],\n emits: [\"update:activeFloor\", \"update:viewGrid\", \"update:is-open-window\"],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n __expose();\n const emits = __emit;\n const props = __props;\n const zoomSlider = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(HTMLElement);\n const container = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(HTMLElement);\n const map = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(HTMLElement);\n const popup = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(HTMLElement);\n const activeFloor = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(null);\n const entrances = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)([]);\n const selectedEntranceID = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(null);\n const selectedEntrance = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(null);\n const hoveredFigure = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(null);\n const useViewFloor = (0,_features_useViewFloors__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const fieldsStore = (0,_app_store_fields__WEBPACK_IMPORTED_MODULE_0__.useFieldsStore)();\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.watch)(selectedEntranceID, id => {\n selectedEntrance.value = entrances.value.find(entrance => entrance.id === id);\n activeFloor.value = selectedEntrance.value.floors[selectedEntrance.value.floors.length - 1];\n });\n const setHoveredFigureVisible = id => {\n hoveredFigure.value = activeFloor.value.plan.figures.find(figure => figure.id === id);\n if (useViewFloor.hoveredFigure.value) {\n useViewFloor.hoveredFigure.value.visible = hoveredFigure.value && hoveredFigure.value.room.visible;\n }\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.watch)(() => useViewFloor.hoveredFigure.value?.id_, setHoveredFigureVisible);\n const figuresData = (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)([]);\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.watch)(figuresData, value => {\n useViewFloor.start(map.value, container.value, zoomSlider.value, popup.value, activeFloor.value.plan.image, value // newV.plan.figures ? newV.plan.figures.map((figure) => ({ id: figure.id, points: figure.points.map((point) => ([point.y, point.x])) })) : []\n );\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.watch)(activeFloor, newV => {\n figuresData.value = newV.plan.figures && newV.plan.figures.map(figure => {\n return {\n id: figure.id,\n visible: figure.room.visible,\n points: figure.points.map(point => {\n return [point.x, point.y];\n })\n };\n });\n });\n const route = (0,vue_router__WEBPACK_IMPORTED_MODULE_7__.useRoute)();\n const house_id = route.params.house_id;\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.watch)(props.filters, () => {\n entrances.value.forEach(entrance => {\n entrance.floors.forEach(floor => {\n floor.plan.figures.forEach(figure => (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_4__.fixRoomVisible)(figure.room, props.filters));\n });\n });\n figuresData.value = activeFloor.value.plan.figures && activeFloor.value.plan.figures.map(figure => {\n return {\n id: figure.id,\n visible: figure.room.visible,\n points: figure.points.map(point => {\n return [point.x, point.y];\n })\n };\n });\n });\n const handleApartmentStatusChanged = (apartmentId, statusId) => {\n const statuses = fieldsStore.complex_status;\n const status = statuses.find(s => s.id == statusId);\n const statusFields = {\n status_name: status.name,\n status_type: status.status,\n status_color: status.color,\n complex_status_id: status.id\n };\n activeFloor.value.plan.figures.map(figure => figure.room = figure.room.id == apartmentId ? {\n ...figure.room,\n ...statusFields\n } : figure.room);\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.onMounted)(async () => {\n await _shared_api__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getHouseFloorPlans(house_id).then(response => {\n if (response.data && Array.isArray(response.data)) {\n const entrancesData = response.data;\n entrancesData.forEach(entrance => {\n entrance.floors.forEach(floor => {\n floor.plan.figures.forEach(figure => {\n figure.room.visible = true;\n (0,_shared_utils_util__WEBPACK_IMPORTED_MODULE_4__.fixRoomVisible)(figure.room, props.filters);\n });\n });\n });\n entrances.value = response.data;\n selectedEntranceID.value = entrances.value[0].id;\n activeFloor.value = entrances.value[0].floors[entrances.value[0].floors.length - 1];\n // useViewFloor.start(map.value, container.value, zoomSlider.value, popup.value, activeFloor.value.plan.image)\n }\n setHoveredFigureVisible(useViewFloor.hoveredFigure.value?.id_);\n });\n _eventBus__WEBPACK_IMPORTED_MODULE_1__[\"default\"].$on('change-apartment-status', handleApartmentStatusChanged);\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_6__.onUnmounted)(() => {\n _eventBus__WEBPACK_IMPORTED_MODULE_1__[\"default\"].$off('change-apartment-status', handleApartmentStatusChanged);\n });\n const __returned__ = {\n emits,\n props,\n zoomSlider,\n container,\n map,\n popup,\n activeFloor,\n entrances,\n selectedEntranceID,\n selectedEntrance,\n hoveredFigure,\n useViewFloor,\n fieldsStore,\n setHoveredFigureVisible,\n figuresData,\n route,\n house_id,\n handleApartmentStatusChanged,\n get useFieldsStore() {\n return _app_store_fields__WEBPACK_IMPORTED_MODULE_0__.useFieldsStore;\n },\n get eventBus() {\n return _eventBus__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n },\n get useViewFloors() {\n return _features_useViewFloors__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n },\n get api() {\n return _shared_api__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n },\n get fixRoomVisible() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_4__.fixRoomVisible;\n },\n get formatNumber() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_4__.formatNumber;\n },\n get Dropdown() {\n return primevue_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n },\n onMounted: vue__WEBPACK_IMPORTED_MODULE_6__.onMounted,\n onUnmounted: vue__WEBPACK_IMPORTED_MODULE_6__.onUnmounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_6__.ref,\n watch: vue__WEBPACK_IMPORTED_MODULE_6__.watch,\n get useRoute() {\n return vue_router__WEBPACK_IMPORTED_MODULE_7__.useRoute;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=script&setup=true&lang=js":
/*!************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=script&setup=true&lang=js ***!
\************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _entities_viewHome_chessLayoutsItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/entities/viewHome/chessLayoutsItem.vue */ \"./src/entities/viewHome/chessLayoutsItem.vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-router */ \"./node_modules/vue-router/dist/vue-router.mjs\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'chessLayouts',\n props: {\n plans: Array,\n complex_name: String,\n house_name: String,\n isDetailsOpened: Boolean\n },\n emits: [\"update:is-open-window\"],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n __expose();\n const route = (0,vue_router__WEBPACK_IMPORTED_MODULE_2__.useRoute)();\n const filteredPlans = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(() => {\n if (route.query) {\n return props.plans.filter(plan => {\n return plan.rooms.some(room => room.visible);\n });\n }\n return props.plans;\n });\n const props = __props;\n const emits = __emit;\n const __returned__ = {\n route,\n filteredPlans,\n props,\n emits,\n ChessLayoutsItem: _entities_viewHome_chessLayoutsItem_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n computed: vue__WEBPACK_IMPORTED_MODULE_1__.computed,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_1__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_1__.ref,\n get useRoute() {\n return vue_router__WEBPACK_IMPORTED_MODULE_2__.useRoute;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessLayouts.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=script&setup=true&lang=js":
/*!*********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=script&setup=true&lang=js ***!
\*********************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _eventBus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/eventBus */ \"./src/eventBus.js\");\n\n\n\n\n\n/*enum StatusApartament {\n FREE = \"free\",\n BOOKING = \"booking\",\n SOLD = \"sold\",\n UNAVAILABLE = \"unavailable\",\n}\n\ninterface Apartament {\n rooms_count: number;\n status: StatusApartament;\n}\n\ntype floor = {\n apartments: Apartament[];\n};*/\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'chessTile',\n props: {\n typeView: String | undefined,\n hiddenPrice: Boolean,\n openedApartment: Boolean,\n entrances: {\n type: Array,\n default: []\n }\n },\n emits: [\"openWindow\"],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n __expose();\n const props = __props;\n const pdfButton = (0,vue__WEBPACK_IMPORTED_MODULE_2__.ref)({});\n const emits = __emit;\n const apartments = (0,vue__WEBPACK_IMPORTED_MODULE_2__.computed)(() => props.entrances.reduce((accumulator, currentEntrance) => {\n currentEntrance.floors.forEach(floor => {\n accumulator.push(...floor.rooms.map(room => {\n room.euroPlan = room.layout_feature === \"european_layout\";\n room.studio = room.layout_feature === \"studio\";\n room.freePlane = room.layout_feature === \"available\";\n room.formatFile = \"pdf\";\n return room;\n }));\n });\n return accumulator;\n }, []));\n const isDifferentFloors = (0,vue__WEBPACK_IMPORTED_MODULE_2__.computed)(() => {\n return !props.entrances.every(entrance => entrance.floors.every((floor, index) => {\n return props.entrances[0].floors.length === entrance.floors.length && props.entrances[0].floors[index] && floor.position == props.entrances[0].floors[index].position;\n }));\n });\n const handlePdfStateChanged = apartamentId => {\n if (props.openedApartment.id && props.openedApartment.id == apartamentId) return;\n const apartment = apartments.value.find(apartment => apartment.id == apartamentId);\n console.log(apartment, 'apartment');\n if (apartment) {\n apartment.inPdf = !apartment.inPdf;\n }\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_2__.onMounted)(() => {\n _eventBus__WEBPACK_IMPORTED_MODULE_3__[\"default\"].$on('pdf-state-changed', handlePdfStateChanged);\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_2__.onUnmounted)(() => {\n _eventBus__WEBPACK_IMPORTED_MODULE_3__[\"default\"].$off(\"pdf-state-changed\", handlePdfStateChanged);\n });\n const floorsNumbers = (0,vue__WEBPACK_IMPORTED_MODULE_2__.computed)(() => {\n let max = 0;\n let min = 0;\n if (props.entrances.length) {\n props.entrances.forEach(entrance => {\n const positions = entrance.floors.map(floor => floor.position);\n const floorMaxPosition = Math.max(...positions);\n const floorMinPosition = Math.min(...positions);\n if (floorMinPosition < min) {\n min = floorMinPosition;\n }\n if (floorMaxPosition > max) {\n max = floorMaxPosition;\n }\n });\n return Array(max - min + 1).fill().map((_, index) => min + index).filter(num => num !== 0);\n }\n return [];\n });\n\n // const computedEntrances = computed(() => {\n\n // if (props.entrances.length) {\n // return props.entrances.map( (entrance) => {\n // const positions = entrance.floors.map((floor) => floor.position)\n // const floorMaxPosition = Math.max(...positions)\n // const floorMinPosition = Math.min(...positions)\n // entrance.floorNumbers = Array(floorMaxPosition - floorMinPosition + 1).fill().map((_, index) => floorMinPosition + index).filter(num => num !== 0)\n // return entrance\n // })\n // }\n // return []\n\n // });\n\n const __returned__ = {\n props,\n pdfButton,\n emits,\n apartments,\n isDifferentFloors,\n handlePdfStateChanged,\n floorsNumbers,\n get formatNumber() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_1__.formatNumber;\n },\n computed: vue__WEBPACK_IMPORTED_MODULE_2__.computed,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_2__.onMounted,\n onUnmounted: vue__WEBPACK_IMPORTED_MODULE_2__.onUnmounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_2__.ref,\n get eventBus() {\n return _eventBus__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js ***!
\*********************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'popupWindowViewFacade',\n props: {\n numberFloor: Number,\n numberEntrance: Number,\n rooms: Array,\n floorData: []\n },\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const props = __props;\n const computedRooms = (0,vue__WEBPACK_IMPORTED_MODULE_2__.computed)(() => {\n if (!props.rooms.length) return [];\n return props.rooms.reduce((acc, room) => {\n const {\n rooms_count\n } = room;\n const {\n layout_feature\n } = room;\n if (layout_feature && layout_feature == 'studio') {\n if (!acc['studio']) {\n acc['studio'] = [];\n }\n acc['studio'].push(room);\n return acc;\n }\n if (!acc[rooms_count]) {\n acc[rooms_count] = [];\n }\n acc[rooms_count].push(room);\n return acc;\n }, {});\n });\n const __returned__ = {\n props,\n computedRooms,\n get formatNumber() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_1__.formatNumber;\n },\n computed: vue__WEBPACK_IMPORTED_MODULE_2__.computed,\n watch: vue__WEBPACK_IMPORTED_MODULE_2__.watch\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js":
/*!****************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js ***!
\****************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _shared_utils_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/shared/utils/util */ \"./src/shared/utils/util.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _windowInfoForList_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./windowInfoForList.vue */ \"./src/widgets/homePage/viewHome/windowInfoForList.vue\");\n/* harmony import */ var _eventBus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/eventBus */ \"./src/eventBus.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'windowInfoForListAppartments',\n props: {\n isOpen: Boolean,\n figure: Object,\n availableFloors: Array,\n decorations: Array,\n windowsPlacements: Array\n // house: Object\n },\n emits: [\"update:isOpen\", \"change-apartment-status\", \"rooms:status:changed\"],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n __expose();\n\n //import { PTOptions } from \"primevue/ts-helpers\";\n const props = __props;\n const emits = __emit;\n const {\n isOpen\n } = (0,vue__WEBPACK_IMPORTED_MODULE_1__.toRefs)(props);\n const window = vue__WEBPACK_IMPORTED_MODULE_1__.ref < HTMLElement > HTMLElement;\n const openedApartment = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const openFullImage = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(false);\n // const floors = ref([\"10 этаж\", \"9 этаж\", \"7 этаж\"]);\n const activeFloor = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const availableFloorsNames = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(() => props.availableFloors.map(floor => ({\n label: `${floor.position} Этаж`,\n value: floor.position\n })));\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(() => props.figure, value => {\n if (value && value.floor) {\n activeFloor.value = value.floor.position;\n }\n });\n const floorChanged = event => {\n emits(\"floor:changed\", event.value);\n };\n const handleApartmentStatusChanged = () => {\n if (openedApartment.value.status_type != 'available') {\n props.figure.rooms = props.figure.rooms.filter(room => room.id != openedApartment.value.id);\n emits('rooms:status:changed', openedApartment.value.id);\n }\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.onMounted)(() => {\n _eventBus__WEBPACK_IMPORTED_MODULE_3__[\"default\"].$on('change-apartment-status', handleApartmentStatusChanged);\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.onUnmounted)(() => {\n _eventBus__WEBPACK_IMPORTED_MODULE_3__[\"default\"].$off('change-apartment-status', handleApartmentStatusChanged);\n });\n const dropdownStyle = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)({\n root: {\n class: [\"!border-0\"]\n },\n input: {\n class: [\"!text-black\"]\n }\n });\n const __returned__ = {\n props,\n emits,\n isOpen,\n window,\n openedApartment,\n openFullImage,\n activeFloor,\n availableFloorsNames,\n floorChanged,\n handleApartmentStatusChanged,\n dropdownStyle,\n get room_types() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_0__.room_types;\n },\n get formatNumber() {\n return _shared_utils_util__WEBPACK_IMPORTED_MODULE_0__.formatNumber;\n },\n computed: vue__WEBPACK_IMPORTED_MODULE_1__.computed,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_1__.onMounted,\n onUnmounted: vue__WEBPACK_IMPORTED_MODULE_1__.onUnmounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_1__.ref,\n toRefs: vue__WEBPACK_IMPORTED_MODULE_1__.toRefs,\n watch: vue__WEBPACK_IMPORTED_MODULE_1__.watch,\n WindowInfoForList: _windowInfoForList_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n get eventBus() {\n return _eventBus__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true ***!
\*************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"chessLayoutsCart chessLayouts__item rounded-md border border-grey-400 p-5\",\n style: {\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_2 = {\n class: \"chessLayoutsCart__found\"\n};\nconst _hoisted_3 = {\n class: \"chessLayoutsCart__countRoom\"\n};\nconst _hoisted_4 = {\n class: \"chessLayoutsCart__text\"\n};\nconst _hoisted_5 = [\"src\", \"alt\"];\nconst _hoisted_6 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\"\n }\n};\nconst _hoisted_7 = {\n class: \"chessLayoutsCart__price border-r border-grey-400 grow\"\n};\nconst _hoisted_8 = {\n class: \"mainPrice font-bold mb-2\"\n};\nconst _hoisted_9 = {\n class: \"desc text-xs\"\n};\nconst _hoisted_10 = {\n class: \"text-grey-900\"\n};\nconst _hoisted_11 = {\n class: \"chessLayoutsCart__floor flex flex-col ml-5 py-1 xl:ml-2\"\n};\nconst _hoisted_12 = {\n class: \"floor text-xs text-black mb-2.5\"\n};\nconst _hoisted_13 = {\n class: \"numberRoom text-grey-900 text-xs\"\n};\nconst _hoisted_14 = {\n class: \"chessLayoutsCart__price border-r border-grey-400 grow\"\n};\nconst _hoisted_15 = {\n class: \"mainPrice font-bold mb-2\"\n};\nconst _hoisted_16 = {\n class: \"mainPrice font-bold mb-2\"\n};\nconst _hoisted_17 = {\n class: \"desc text-xs\"\n};\nconst _hoisted_18 = {\n class: \"text-grey-900\"\n};\nconst _hoisted_19 = {\n class: \"chessLayoutsCart__floor flex flex-col ml-5 py-1 xl:ml-2\"\n};\nconst _hoisted_20 = {\n class: \"floor text-xs text-black mb-2.5\"\n};\nconst _hoisted_21 = {\n class: \"numberRoom text-grey-900 text-xs\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_Dropdown = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"Dropdown\");\n const _component_MyButton = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"MyButton\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.plan.rooms.length && $props.plan.rooms[0].rooms_count), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.plan.rooms.length) + \" квартир найдено\", 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"chessLayoutsCart__image\",\n onClick: _cache[0] || (_cache[0] = $event => $setup.emits('openWindow', {\n ...$setup.selectedPlanRoom,\n complex_name: $props.plan.complex_name,\n house_name: $props.plan.house_name\n }))\n }, [_cache[4] || (_cache[4] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"image__hover\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"svg\", {\n width: \"80\",\n height: \"80\",\n viewBox: \"0 0 80 80\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"path\", {\n d: \"M72.8025 62.1975L60.3037 49.6975C58.0856 47.4794 54.5888 47.0231 51.8113 48.2762L49.3456 45.8106C52.8763 41.4994 55 35.9944 55 30C55 16.2144 43.7856 5 30 5C16.2144 5 5 16.2144 5 30C5 43.7856 16.2144 55 30 55C35.9944 55 41.4994 52.8763 45.8106 49.3456L48.2506 51.7856C47.7756 52.7806 47.5 53.865 47.5 55C47.5 57.0031 48.28 58.8869 49.6975 60.3025L62.1963 72.8025C63.6138 74.22 65.4969 75 67.5 75C69.5031 75 71.3869 74.22 72.8025 72.8037C74.22 71.3863 75 69.5031 75 67.5C75 65.4969 74.22 63.6131 72.8025 62.1975ZM30 50C18.9719 50 10 41.0281 10 30C10 18.9719 18.9719 10 30 10C41.0281 10 50 18.9719 50 30C50 41.0281 41.0281 50 30 50ZM69.2663 69.2675C68.3237 70.2125 66.6769 70.2125 65.7325 69.2675L53.2325 56.7675C53.2325 56.7675 53.2325 56.7675 53.2325 56.7662C52.76 56.295 52.5 55.6675 52.5 55C52.5 54.3325 52.76 53.705 53.2338 53.2325C53.705 52.76 54.3325 52.5 55 52.5C55.6675 52.5 56.295 52.76 56.7675 53.2325L69.2675 65.7338C69.74 66.205 70 66.8325 70 67.5C70 68.1675 69.74 68.795 69.2663 69.2675ZM40 30C40 31.3806 38.8806 32.5 37.5 32.5H32.5V37.5C32.5 38.8806 31.3806 40 30 40C28.6194 40 27.5 38.8806 27.5 37.5V32.5H22.5C21.1194 32.5 20 31.3806 20 30C20 28.6194 21.1194 27.5 22.5 27.5H27.5V22.5C27.5 21.1194 28.6194 20 30 20C31.3806 20 32.5 21.1194 32.5 22.5V27.5H37.5C38.8806 27.5 40 28.6194 40 30Z\",\n fill: \"#222222\"\n })])], -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"img\", {\n src: $props.plan.images[0].url,\n alt: $props.plan.images[0].name\n }, null, 8 /* PROPS */, _hoisted_5)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Dropdown, {\n class: \"mb-2.5\",\n options: $setup.filteredRooms,\n modelValue: $setup.selectedPlanRoom,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $setup.selectedPlanRoom = $event),\n onChange: _cache[2] || (_cache[2] = event => $props.isDetailsOpened && $setup.emits('openWindow', {\n ...event.value,\n complex_name: $props.plan.complex_name,\n house_name: $props.plan.house_name\n })),\n pt: {\n root: {\n class: ['!h-max']\n },\n input: {\n class: ['!p-0 !flex !h-max']\n },\n trigger: {\n class: ['ml-2']\n },\n item: {\n class: ['!flex']\n }\n }\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n dropdownicon: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [_cache[5] || (_cache[5] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"path\", {\n d: \"M6.76693 8.7418L10.0003 11.9752L13.2336 8.7418C13.5586 8.4168 14.0836 8.4168 14.4086 8.7418C14.7336 9.0668 14.7336 9.59183 14.4086 9.91683L10.5836 13.7418C10.2586 14.0668 9.73362 14.0668 9.40862 13.7418L5.58359 9.91683C5.25859 9.59183 5.25859 9.0668 5.58359 8.7418C5.90859 8.42513 6.44193 8.4168 6.76693 8.7418Z\",\n fill: \"#666666\"\n })], -1 /* HOISTED */))]),\n option: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(slotProps => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"chessLayoutsCart__status\",\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)('background-color:' + slotProps.option.status_color)\n }, null, 4 /* STYLE */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_15, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.option.price), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(slotProps.option.total_amount)) + \" руб.\", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.option.area) + \" м2 \", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_18, \"- \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(((slotProps.option.total_amount || 0) / (slotProps.option.area || 0)).toFixed(2))) + \" руб./м2\", 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.option.floor) + \" этаж \", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, \" №\" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.option.number), 1 /* TEXT */)])]),\n _: 2 /* DYNAMIC */\n }, [$setup.selectedPlanRoom ? {\n name: \"value\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"chessLayoutsCart__status\",\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)('background-color:' + $setup.selectedPlanRoom.status_color)\n }, null, 4 /* STYLE */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_8, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber($setup.selectedPlanRoom.total_amount)) + \" руб.\", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.selectedPlanRoom.area) + \" м2 \", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_10, \"- \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber((($setup.selectedPlanRoom.total_amount || 0) / ($setup.selectedPlanRoom.area || 0)).toFixed(2))) + \" руб./м2\", 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_11, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_12, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.selectedPlanRoom.floor) + \" этаж\", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_13, \"№ \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.selectedPlanRoom.number), 1 /* TEXT */)])]),\n key: \"0\"\n } : undefined]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"options\", \"modelValue\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_MyButton, {\n theme: 'green',\n class: \"!w-max !rounded-2xl mx-auto !px-5\",\n onClick: _cache[3] || (_cache[3] = $event => $setup.emits('openWindow', {\n ...$setup.selectedPlanRoom,\n complex_name: $props.plan.complex_name,\n house_name: $props.plan.house_name\n }))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[6] || (_cache[6] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"Подробнее\")])),\n _: 1 /* STABLE */\n })])]);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true":
/*!**************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true ***!
\**************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _app_images_rocket_spinner_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/app/images/rocket-spinner.svg */ \"./src/app/images/rocket-spinner.svg\");\n\n\nconst _hoisted_1 = {\n key: 0,\n class: \"loader-div\"\n};\nconst _hoisted_2 = {\n class: \"viewHome__body w-full h-full\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"viewHome flex flex-col w-full h-full min-h-full justify-start items-start\", [$setup.filters.view?.value !== 'facades' ? 'px-7.5' : '']]),\n ref: \"viewHome\"\n }, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Teleport, {\n to: \"body\"\n }, [$setup.openedApartment ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"WindowInfoForList\"], {\n key: 0,\n house: $setup.house,\n isOpen: $setup.isOpenWindow,\n apartment: $setup.openedApartment,\n availableFloors: $setup.openApartmentAvailableFloors,\n \"onUpdate:isOpen\": $setup.closeApartment,\n \"onFloor:changed\": $setup.changeApartment,\n decorations: $setup.fieldsStore.decorations,\n windowsPlacements: $setup.fieldsStore.windowsPlacements\n }, null, 8 /* PROPS */, [\"house\", \"isOpen\", \"apartment\", \"availableFloors\", \"decorations\", \"windowsPlacements\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])), $setup.apartmentsLoader ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, _cache[2] || (_cache[2] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"img\", {\n src: _app_images_rocket_spinner_svg__WEBPACK_IMPORTED_MODULE_1__\n }, null, -1 /* HOISTED */)]))) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: 1\n }, [$setup.house ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ViewHead\"], {\n key: 0,\n show_plans: !!$setup.plans.filter(plan => {\n return plan.rooms.some(room => room.visible);\n }).length,\n show_floors: !!$setup.house.floors_plans_count_where_has_floor,\n show_facades: !!$setup.house.facades_count,\n \"onUpdate:isOpenFiltersMenu\": _cache[0] || (_cache[0] = $event => $setup.isOpenFiltersMenu = $event),\n filters: $setup.filters,\n filteredCount: $setup.filterCounter,\n \"onUpdate:viewType\": _cache[1] || (_cache[1] = $event => $setup.viewType = $event),\n complex_status: $setup.fieldsStore.complex_status\n }, null, 8 /* PROPS */, [\"show_plans\", \"show_floors\", \"show_facades\", \"filters\", \"filteredCount\", \"complex_status\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [$setup.filters.view?.value === 'tile' || $setup.filters.view?.value === 'grid' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ChessTile\"], {\n key: 0,\n typeView: $setup.filters.view?.value,\n entrances: $setup.entrances,\n \"hidden-price\": $setup.filters.hiddenPrice,\n house_name: $setup.house?.name,\n complex_name: $setup.complex?.name,\n onOpenWindow: $setup.openApartment,\n openedApartment: $setup.openedApartment\n }, null, 8 /* PROPS */, [\"typeView\", \"entrances\", \"hidden-price\", \"house_name\", \"complex_name\", \"openedApartment\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $setup.filters.view?.value === 'layouts' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ChessLayouts\"], {\n key: 1,\n \"onUpdate:isOpenWindow\": $setup.openApartment,\n plans: $setup.plans,\n house_name: $setup.house?.name,\n complex_name: $setup.complex?.name,\n isDetailsOpened: $setup.isOpenWindow\n }, null, 8 /* PROPS */, [\"plans\", \"house_name\", \"complex_name\", \"isDetailsOpened\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $setup.filters.view?.value === 'floors' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ChessFloors\"], {\n key: 2,\n \"onUpdate:isOpenWindow\": $setup.openApartment,\n house_name: $setup.house?.name,\n complex_name: $setup.complex?.name,\n filters: $setup.filters\n }, null, 8 /* PROPS */, [\"house_name\", \"complex_name\", \"filters\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $setup.filters.view?.value === 'facades' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ChessFacade\"], {\n key: 3,\n \"view-type\": $setup.viewType,\n house_name: $setup.house?.name,\n complex_name: $setup.complex?.name,\n filters: $setup.filters,\n decorations: $setup.fieldsStore.decorations,\n windowsPlacements: $setup.fieldsStore.windowsPlacements\n }, null, 8 /* PROPS */, [\"view-type\", \"house_name\", \"complex_name\", \"filters\", \"decorations\", \"windowsPlacements\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $setup.filters.view?.value === 'list' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ChessList\"], {\n key: 4,\n \"onUpdate:isOpenWindow\": $setup.openApartment,\n entrances: $setup.entrances,\n decorations: $setup.fieldsStore.decorations,\n windowsPlacements: $setup.fieldsStore.windowsPlacements,\n openedApartment: $setup.openedApartment\n }, null, 8 /* PROPS */, [\"entrances\", \"decorations\", \"windowsPlacements\", \"openedApartment\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])], 64 /* STABLE_FRAGMENT */))], 2 /* CLASS */);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=template&id=2ee50347&scoped=true":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=template&id=2ee50347&scoped=true ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"chessFacade\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [$setup.facades.length > 1 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 0,\n class: \"prev\",\n onClick: _cache[0] || (_cache[0] = $event => $setup.changeFacade('prev'))\n }, _cache[3] || (_cache[3] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)(\"\", 1)]))) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), _cache[5] || (_cache[5] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"map\",\n id: \"map\"\n }, null, -1 /* HOISTED */)), $setup.facades.length > 1 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 1,\n class: \"next\",\n onClick: _cache[1] || (_cache[1] = $event => $setup.changeFacade('next'))\n }, _cache[4] || (_cache[4] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)(\"\", 1)]))) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"PopupWindowViewFacade\"], {\n \"floor-data\": [],\n \"number-floor\": Number($setup.optionsFloor.floor?.position),\n \"number-entrance\": Number($setup.optionsFloor.entrance?.position),\n rooms: $setup.filteredOptionsFloorRooms,\n onOpenDetails: _cache[2] || (_cache[2] = $event => {\n $setup.openModal = true;\n $setup.closeOverlay();\n })\n }, null, 8 /* PROPS */, [\"number-floor\", \"number-entrance\", \"rooms\"]), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Teleport, {\n to: \"body\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"WindowInfoForListAppartments\"], {\n isOpen: $setup.openModal,\n figure: {\n ...$setup.openedFigure,\n house_name: $setup.props.house_name,\n complex_name: $setup.props.complex_name,\n rooms: $setup.filteredRooms\n },\n \"onUpdate:isOpen\": $setup.closeFigure,\n availableFloors: $setup.openFigureAvailableFloors,\n \"onFloor:changed\": $setup.changeFigure,\n decorations: $props.decorations,\n windowsPlacements: $props.windowsPlacements,\n \"onRooms:status:changed\": $setup.handelRoomsStatusChanged\n }, null, 8 /* PROPS */, [\"isOpen\", \"figure\", \"availableFloors\", \"decorations\", \"windowsPlacements\"])]))]);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=template&id=69a44214":
/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=template&id=69a44214 ***!
\****************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"popup__number\"\n};\nconst _hoisted_2 = {\n class: \"popup__price\"\n};\nconst _hoisted_3 = {\n class: \"popup__square\"\n};\nconst _hoisted_4 = {\n class: \"chessFloors relative\"\n};\nconst _hoisted_5 = {\n class: \"chessFloors__head col-span-2 flex flex-row justify-start items-center sticky top-0 bg-white z-10\"\n};\nconst _hoisted_6 = {\n key: 0,\n class: \"chessFloors__title text-2xl mr-12\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"w-full flex justify-center\",\n style: {\n \"align-items\": \"center\",\n \"flex-direction\": \"column\",\n \"gap\": \"10px\",\n \"width\": \"120px\",\n \"margin-top\": \"10px\"\n }\n};\nconst _hoisted_8 = [\"src\"];\nconst _hoisted_9 = {\n class: \"chessFloors__resize\",\n ref: \"zoomSlider\"\n};\nconst _hoisted_10 = {\n key: 0,\n class: \"chessFloors__listFloor\"\n};\nconst _hoisted_11 = [\"onClick\"];\nconst _hoisted_12 = {\n class: \"chessFloors__mapFloor overflow-x-auto relative\",\n ref: \"container\"\n};\nconst _hoisted_13 = {\n class: \"map ol-map\",\n id: \"map\",\n ref: \"map\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Teleport, {\n to: \"body\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n onClick: _cache[0] || (_cache[0] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $setup.emits('update:is-open-window', {\n ...$setup.hoveredFigure.room,\n complex_name: $props.complex_name,\n house_name: $props.house_name,\n floor: $setup.activeFloor.position,\n entrance_name: $setup.selectedEntrance.name\n }), [\"stop\"])),\n id: \"popup\",\n class: \"popup\",\n ref: \"popup\"\n }, [$setup.hoveredFigure ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: 0\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"popup__countRoom\",\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)({\n 'background-color': $setup.hoveredFigure.room.status_color\n })\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.hoveredFigure.room.layout_feature !== 'studio' ? $setup.hoveredFigure.room.rooms_count + ' к' : 'ст'), 5 /* TEXT, STYLE */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, \"№ \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.hoveredFigure.room.number), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber($setup.hoveredFigure.room.total_amount)) + \" руб.\", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.hoveredFigure.room.area) + \" м2 \", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"- \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber((($setup.hoveredFigure.room.total_amount || 0) / ($setup.hoveredFigure.room.area || 0)).toFixed(2))) + \" руб./м2\", 1 /* TEXT */)])], 64 /* STABLE_FRAGMENT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 512 /* NEED_PATCH */)])), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [$setup.activeFloor ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_6, \"План \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.activeFloor.position) + \" этажа\", 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"Dropdown\"], {\n modelValue: $setup.selectedEntranceID,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $setup.selectedEntranceID = $event),\n options: $setup.entrances,\n \"option-label\": \"name\",\n \"option-value\": \"id\",\n class: \"mr-12\"\n }, null, 8 /* PROPS */, [\"modelValue\", \"options\"]), $setup.activeFloor?.plan.has_light_angle ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_7, [_cache[2] || (_cache[2] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"strong\", null, \"Стороны света \", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"img\", {\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)(`width: 80px; transform: rotate(${$setup.activeFloor.plan.light_angle}deg);`),\n src: __webpack_require__(/*! @/shared/assets/images/said.png */ \"./src/shared/assets/images/said.png\"),\n alt: \"\"\n }, null, 12 /* STYLE, PROPS */, _hoisted_8)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" Показать этаж на фасаде\\n \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, null, 512 /* NEED_PATCH */)]), $setup.selectedEntrance ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_10, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.selectedEntrance.floors, floor => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: floor.id,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"floor flex flex-row py-2.5 px-3 gap-4 text-grey-900 rounded-md w-max\", $setup.activeFloor.id === floor.id ? 'bg-green text-white cursor-default' : 'cursor-pointer']),\n onClick: $event => $setup.activeFloor = floor\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"after text-white\", $setup.activeFloor.id !== floor.id ? 'hidden' : ''])\n }, \" План \", 2 /* CLASS */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(floor.position) + \" \", 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"before text-white\", $setup.activeFloor.id !== floor.id ? 'hidden' : ''])\n }, \" этажа \", 2 /* CLASS */)], 10 /* CLASS, PROPS */, _hoisted_11);\n }), 128 /* KEYED_FRAGMENT */))])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_13, null, 512 /* NEED_PATCH */)], 512 /* NEED_PATCH */)])], 64 /* STABLE_FRAGMENT */);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=template&id=37d7d62c":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=template&id=37d7d62c ***!
\*****************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"chessLayouts grid grid-cols-4 gap-[25px] xl:grid-cols-3 xl:gap-[20px]\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.filteredPlans, plan => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"ChessLayoutsItem\"], {\n key: plan.id,\n isDetailsOpened: $props.isDetailsOpened,\n plan: {\n ...plan,\n complex_name: $props.complex_name,\n house_name: $props.house_name\n },\n onOpenWindow: _cache[0] || (_cache[0] = room => $setup.emits('update:is-open-window', room))\n }, null, 8 /* PROPS */, [\"isDetailsOpened\", \"plan\"]);\n }), 128 /* KEYED_FRAGMENT */))]);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessLayouts.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n key: 0,\n class: \"chessTile__left mx-5 flex flex-col-reverse gap-y-2.5\"\n};\nconst _hoisted_2 = {\n style: {\n \"width\": \"25px\"\n },\n class: \"cell text-grey-900\"\n};\nconst _hoisted_3 = {\n class: \"chessTile__main w-full flex flex-row justify-start items-start gap-x-12.5 overflow-x-scroll\"\n};\nconst _hoisted_4 = {\n class: \"row flex flex-row gap-x-2.5\"\n};\nconst _hoisted_5 = {\n class: \"cell text-grey-900 !w-max\"\n};\nconst _hoisted_6 = {\n class: \"flex\"\n};\nconst _hoisted_7 = {\n class: \"flex flex-col-reverse gap-y-2.5\"\n};\nconst _hoisted_8 = [\"set\"];\nconst _hoisted_9 = {\n style: {\n \"width\": \"25px\"\n },\n class: \"cell text-grey-900\"\n};\nconst _hoisted_10 = [\"onClick\"];\nconst _hoisted_11 = [\"onClick\"];\nconst _hoisted_12 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"justify-content\": \"space-between\",\n \"height\": \"100%\",\n \"width\": \"70px\"\n }\n};\nconst _hoisted_13 = {\n style: {\n \"text-wrap\": \"nowrap\",\n \"overflow\": \"hidden\",\n \"text-overflow\": \"ellipsis\",\n \"max-width\": \"70px\"\n },\n class: \"cell__number col-start-1 row-start-2\"\n};\nconst _hoisted_14 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"justify-content\": \"space-between\",\n \"height\": \"100%\"\n }\n};\nconst _hoisted_15 = {\n class: \"flex\",\n style: {\n \"gap\": \"2px\"\n }\n};\nconst _hoisted_16 = {\n style: {\n \"display\": \"flex\",\n \"font-size\": \"10px\",\n \"gap\": \"2px\"\n }\n};\nconst _hoisted_17 = {\n class: \"cell__desc\"\n};\nconst _hoisted_18 = {\n style: {\n \"text-wrap\": \"nowrap\",\n \"display\": \"flex\"\n }\n};\nconst _hoisted_19 = {\n style: {\n \"max-width\": \"100px\",\n \"overflow\": \"hidden\",\n \"text-overflow\": \"ellipsis\",\n \"text-wrap\": \"nowrap\"\n }\n};\nconst _hoisted_20 = {\n key: 1,\n class: \"chessTile__right mx-5 flex flex-col-reverse gap-y-2.5\"\n};\nconst _hoisted_21 = {\n style: {\n \"width\": \"25px\"\n },\n class: \"cell text-grey-900\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _directive_tooltip = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDirective)(\"tooltip\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"chessTile flex flex-row w-full justify-start items-center\", $props.typeView === 'grid' ? 'typeGrid' : ''])\n }, [_cache[0] || (_cache[0] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"labelLeft h-full flex justify-center items-center\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"text -rotate-90 text-grey-900\"\n }, \"ЭТАЖИ\")], -1 /* HOISTED */)), !$setup.isDifferentFloors ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.floorsNumbers, index => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: \"row\",\n key: `floor${index}`\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(Number(index)), 1 /* TEXT */)]);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"
\")])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.entrances, entrance => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: \"chessTile__section flex flex-col gap-y-2.5 w-max\",\n key: entrance.id\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(entrance.name), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" \\n
\\n
{{ Number(index) }}
\\n
\\n
\"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.floorsNumbers, index => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: \"row flex flex-row gap-x-2.5 w-100 !justify-start\",\n set: _ctx.floor = entrance.floors.find(floor => floor.position == index),\n key: index\n }, [_ctx.floor && $setup.isDifferentFloors ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: \"row flex-row-reverse\",\n key: `floor${index}`\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(Number(index)), 1 /* TEXT */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $setup.props.typeView === 'tile' && _ctx.floor ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 1,\n class: \"row flex flex-row gap-x-2.5 w-100\",\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)([_ctx.floor && _ctx.floor.alignment == 'right' ? 'justify-content: end;' : 'justify-content: start;', {\n \"width\": \"100%\"\n }])\n }, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.floor.rooms, (apartament, apartamentIndex) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: `floor${index}apartament${apartamentIndex}`,\n class: \"cell text-white rounded cursor-pointer\",\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)({\n 'opacity': apartament.visible ? 1 : 0.1,\n 'background-color': apartament.status_color\n }),\n onClick: $event => $setup.emits('openWindow', apartament)\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(apartament.layout_feature === 'studio' ? 'ст' : apartament.rooms_count), 13 /* TEXT, STYLE, PROPS */, _hoisted_10);\n }), 128 /* KEYED_FRAGMENT */))], 4 /* STYLE */)) : $setup.props.typeView === 'grid' && _ctx.floor ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: 2\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.floor.rooms, (apartament, apartamentIndex) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)(((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)([{\n \"display\": \"flex !important\",\n \"justify-content\": \"start\"\n }, `opacity: ${apartament.visible ? 1 : 0.1}`]),\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['chess-item', 'cell cell--grid grid grid-cols-[30px_1fr] gap-y-1 gap-x-4 grid-rows-2', 'border border-grey-400 rounded p-2.5 w-max cursor-pointer']),\n key: `floor${index}apartament${apartamentIndex}`,\n onClick: $event => $setup.emits('openWindow', apartament)\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['cell__countRoom min-w-6 min-h-6 rounded-3xl', 'flex justify-center items-center text-white']),\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)({\n 'background-color': apartament.status_color\n })\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(apartament.layout_feature !== 'studio' ? apartament.rooms_count + ' к' : 'cт'), 5 /* TEXT, STYLE */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_13, \"№ \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(apartament.number), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"max-width\": \"102px\",\n \"overflow\": \"hidden\",\n \"text-overflow\": \"ellipsis\",\n \"text-wrap\": \"nowrap\"\n },\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"cell__price\", $props.hiddenPrice ? 'hidden' : ''])\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(apartament.total_amount)), 3 /* TEXT, CLASS */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"cell__price\", $props.hiddenPrice ? 'hidden' : ''])\n }, \" руб. \", 2 /* CLASS */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"display\": \"block\",\n \"max-width\": \"56px\",\n \"overflow\": \"hidden\",\n \"text-overflow\": \"ellipsis\",\n \"text-wrap\": \"nowrap\"\n },\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.hiddenPrice ? 'hidden' : '')\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(((apartament.total_amount || 0) / (apartament.area || 0)).toFixed(2))), 3 /* TEXT, CLASS */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"text-wrap\": \"nowrap\"\n },\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.hiddenPrice ? 'hidden' : '')\n }, \" руб./м2\", 2 /* CLASS */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_18, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_19, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(apartament.area + ' м2'), 1 /* TEXT */)])])])], 12 /* STYLE, PROPS */, _hoisted_11)), [[_directive_tooltip, {\n value: `\n ${apartament.rooms_count}к
\n №${apartament.number}
\n \n ${$setup.formatNumber(apartament.total_amount)} руб.\n
\n \n ${apartament.area} м2\n - ${$setup.formatNumber(((apartament.total_amount || 0) / (apartament.area || 0)).toFixed(2))} руб./м2\n
`,\n escape: true,\n disabled: !$props.hiddenPrice,\n hideDelay: 100,\n pt: {\n text: {\n class: ['!border !border-green !bg-white !color-black !h-auto !whitespace-normal !w-max', '!grid !grid-cols-[30px,_1fr] !gap-y-1 !gap-x-4 !grid-rows-2 !p-2.5 !break-normal']\n },\n arrow: {\n class: ['!border-t-green']\n }\n }\n }, void 0, {\n top: true\n }]]);\n }), 128 /* KEYED_FRAGMENT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 8 /* PROPS */, _hoisted_8);\n }), 128 /* KEYED_FRAGMENT */))])])]);\n }), 128 /* KEYED_FRAGMENT */))]), !$setup.isDifferentFloors ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_20, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.floorsNumbers, index => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n class: \"row\",\n key: `floor${index}`\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(Number(index)), 1 /* TEXT */)]);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" \")])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), _cache[1] || (_cache[1] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"labelRight h-full flex justify-center items-center\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: \"text rotate-90 text-grey-900\"\n }, \"ЭТАЖИ\")], -1 /* HOISTED */))], 2 /* CLASS */);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n id: \"popup\",\n class: \"popup\"\n};\nconst _hoisted_2 = {\n class: \"popup__body\"\n};\nconst _hoisted_3 = {\n class: \"popup__title\"\n};\nconst _hoisted_4 = {\n key: 0,\n class: \"popup__listPartament\"\n};\nconst _hoisted_5 = {\n class: \"icon\"\n};\nconst _hoisted_6 = {\n class: \"text\"\n};\nconst _hoisted_7 = {\n key: 1\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Teleport, {\n to: \"body\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, \"Подъезд \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.numberEntrance) + \", Этаж \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.numberFloor), 1 /* TEXT */), $props.rooms.length ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_4, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.computedRooms, (groupedRooms, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: index,\n class: \"partament\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('openDetails'))\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(groupedRooms[0].layout_feature == 'studio' ? 'ст' : groupedRooms[0].rooms_count + ' к'), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(groupedRooms.length) + \" помещени\" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(groupedRooms.length > 1 ? 'й' : 'е') + \", от \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(Math.min(...groupedRooms.map(room => room.total_amount || 0)))) + \" ₽\", 1 /* TEXT */)]);\n }), 128 /* KEYED_FRAGMENT */))])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_7, \"Нет свободных помещений\"))])])]);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true ***!
\*********************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _shared_assets_images_complexes_gallery_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/shared/assets/images/complexes/gallery.svg */ \"./src/shared/assets/images/complexes/gallery.svg\");\n\n\nconst _hoisted_1 = {\n class: \"modelWindow__content\"\n};\nconst _hoisted_2 = {\n class: \"modelWindow__head\"\n};\nconst _hoisted_3 = {\n class: \"head-content\"\n};\nconst _hoisted_4 = {\n class: \"modelWindow__info\"\n};\nconst _hoisted_5 = {\n class: \"modelWindow__image\"\n};\nconst _hoisted_6 = {\n class: \"image\"\n};\nconst _hoisted_7 = [\"src\"];\nconst _hoisted_8 = {\n key: 1,\n style: {\n \"width\": \"120px\"\n },\n src: _shared_assets_images_complexes_gallery_svg__WEBPACK_IMPORTED_MODULE_1__,\n alt: \"\",\n class: \"\"\n};\nconst _hoisted_9 = {\n key: 0,\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"118px\",\n height: \"117px\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_10 = {\n key: 1,\n width: \"118\",\n height: \"117\",\n viewBox: \"0 0 1024 1024\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_11 = {\n style: {\n \"color\": \"#868A95\",\n \"letter-spacing\": \".28px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_12 = {\n style: {\n \"color\": \"#222835\"\n }\n};\nconst _hoisted_13 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"width\": \"100%\",\n \"gap\": \"20px\"\n }\n};\nconst _hoisted_14 = [\"onClick\"];\nconst _hoisted_15 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"gap\": \"20px\"\n }\n};\nconst _hoisted_16 = {\n style: {\n \"width\": \"80px\"\n }\n};\nconst _hoisted_17 = [\"src\"];\nconst _hoisted_18 = {\n key: 1,\n style: {\n \"width\": \"60px\"\n },\n src: _shared_assets_images_complexes_gallery_svg__WEBPACK_IMPORTED_MODULE_1__,\n alt: \"\",\n class: \"\"\n};\nconst _hoisted_19 = {\n style: {\n \"color\": \"#868A95\"\n }\n};\nconst _hoisted_20 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"gap\": \"8px\"\n }\n};\nconst _hoisted_21 = {\n style: {\n \"text-align\": \"right\",\n \"font-size\": \"14px\"\n }\n};\nconst _hoisted_22 = [\"src\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_Dropdown = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"Dropdown\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Teleport, {\n to: \"body\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" :house=\\\"house\\\" \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" @floor:changed=\\\"changeApartment\\\" \"), $setup.openedApartment ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"WindowInfoForList\"], {\n key: 0,\n isOpen: $setup.openedApartment,\n apartment: $setup.openedApartment,\n availableFloors: [$props.figure.floor],\n \"onUpdate:isOpen\": _cache[0] || (_cache[0] = $event => $setup.openedApartment = null),\n decorations: $props.decorations,\n windowsPlacements: $props.windowsPlacements\n }, null, 8 /* PROPS */, [\"isOpen\", \"apartment\", \"availableFloors\", \"decorations\", \"windowsPlacements\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"modelWindow\", [$setup.isOpen ? 'open' : '', $setup.openFullImage ? 'openFull' : '']]),\n ref: \"window\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" \\n {{ room_types[\\\"apartment.type\\\"] }} № {{ apartment.number }}\\n
\"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.figure.complex_name), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.figure.house_name), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Dropdown, {\n options: $setup.availableFloorsNames,\n optionLabel: \"label\",\n optionValue: \"value\",\n modelValue: $setup.activeFloor,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $setup.activeFloor = $event),\n onChange: $setup.floorChanged,\n pt: $setup.dropdownStyle\n }, null, 8 /* PROPS */, [\"options\", \"modelValue\", \"pt\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"button\", {\n class: \"modelWindow__close\",\n onClick: _cache[2] || (_cache[2] = $event => ($setup.emits('update:isOpen'), $setup.openFullImage = false))\n }, _cache[4] || (_cache[4] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"svg\", {\n width: \"40\",\n height: \"40\",\n viewBox: \"0 0 40 40\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"path\", {\n d: \"M22.8281 20L31.4141 11.4141C32.1953 10.6328 32.1953 9.36719 31.4141 8.58594C30.6328 7.80469 29.3672 7.80469 28.5859 8.58594L20 17.1719L11.4141 8.58594C10.6328 7.80469 9.36719 7.80469 8.58594 8.58594C7.80469 9.36719 7.80469 10.6328 8.58594 11.4141L17.1719 20L8.58594 28.5859C7.80469 29.3672 7.80469 30.6328 8.58594 31.4141C8.97656 31.8047 9.48828 32 10 32C10.5117 32 11.0234 31.8047 11.4141 31.4141L20 22.8281L28.5859 31.4141C28.9766 31.8047 29.4883 32 30 32C30.5117 32 31.0234 31.8047 31.4141 31.4141C32.1953 30.6328 32.1953 29.3672 31.4141 28.5859L22.8281 20Z\",\n fill: \"#757575\"\n })], -1 /* HOISTED */)]))]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [$props.figure.floor?.plan_url ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"img\", {\n key: 0,\n src: $props.figure.floor?.plan_url,\n alt: \"\",\n class: \"\"\n }, null, 8 /* PROPS */, _hoisted_7)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"img\", _hoisted_8))]), $props.figure.floor?.plan_url ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 0,\n class: \"image__loop\",\n onClick: _cache[3] || (_cache[3] = $event => $setup.openFullImage = !$setup.openFullImage)\n }, [$setup.openFullImage ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"svg\", _hoisted_9, _cache[5] || (_cache[5] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"path\", {\n fill: \"#000000\",\n d: \"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704zM352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64z\"\n }, null, -1 /* HOISTED */)]))) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"svg\", _hoisted_10, _cache[6] || (_cache[6] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"path\", {\n fill: \"#000000\",\n d: \"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704zm-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96z\"\n }, null, -1 /* HOISTED */)])))])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_11, [_cache[7] || (_cache[7] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" Найдно: \")), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_12, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.figure.rooms.length) + \" помещений \", 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_13, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.figure.rooms, room => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $setup.openedApartment = {\n ...room,\n house_name: $props.figure.house_name,\n complex_name: $props.figure.complex_name\n }, [\"stop\"]),\n key: room.id,\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"space-between\",\n \"align-items\": \"center\",\n \"border-radius\": \"4px\",\n \"border\": \"1px solid #CFD8E1\",\n \"padding\": \"12px 16px\",\n \"cursor\": \"pointer\"\n }\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, [room.plan_url ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"img\", {\n key: 0,\n style: {\n \"max-width\": \"80px\",\n \"max-height\": \"60px\",\n \"object-fit\": \"contain\"\n },\n src: room.plan_url,\n alt: \"\"\n }, null, 8 /* PROPS */, _hoisted_17)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"img\", _hoisted_18))]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(room.total_amount)), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_19, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatNumber(((room.total_amount || 0) / (room.area || 0)).toFixed(2))) + \" ₽./м2 \", 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle)([{\n \"min-width\": \"85px\",\n \"padding\": \"0 10px\",\n \"height\": \"28px\",\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\",\n \"color\": \"#fff\",\n \"border-radius\": \"4px\"\n }, {\n 'background-color': room.status_color\n }])\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(room.status_name), 5 /* TEXT, STYLE */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", _hoisted_21, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(room.floor) + \" этаж \", 1 /* TEXT */)])], 8 /* PROPS */, _hoisted_14);\n }), 128 /* KEYED_FRAGMENT */))]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" {{ apartment.rooms_count }}
\\n {{ apartment.area }} м2
\")])]), $props.figure.floor?.plan_url ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 0,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([\"modelWindow__fullImage\", $setup.openFullImage ? 'open' : ''])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"img\", {\n src: $props.figure.floor?.plan_url,\n alt: \"\",\n class: \"\"\n }, null, 8 /* PROPS */, _hoisted_22)], 2 /* CLASS */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 2 /* CLASS */)], 64 /* STABLE_FRAGMENT */);\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./src/app/types/facadeViewCanvas.js":
/*!*******************************************!*\
!*** ./src/app/types/facadeViewCanvas.js ***!
\*******************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var ol_proj__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ol/proj */ \"./node_modules/ol/proj.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*export type TOlMap = {\n map: Map;\n target: string;\n imageElement: HTMLImageElement;\n imageLayer: ImageLayer;\n vector: VectorLayer;\n sourceVector: VectorSource;\n features: Collection>;\n overlay: Overlay;\n opacity: number;\n color: string;\n modify: TModify;\n select: TSelect;\n hovered: boolean;\n selectFeature: Feature;\n onImageLoad: () => void;\n createMap: (imageElement: HTMLImageElement, target: string) => void;\n createImageLayer: (imageElement: HTMLImageElement) => ImageLayer;\n createImageStatic: (imageElement: HTMLImageElement) => Static;\n createView: (\n imageElement: HTMLImageElement,\n targetElement: HTMLElement\n ) => View;\n createProjection: (imageElement: HTMLImageElement) => Projection;\n createVector: () => VectorLayer;\n createSourceVector: () => VectorSource;\n createStyle: () => Style;\n createOverlay: (container: HTMLElement) => Overlay;\n addInteractionsToMap: (map: Map, vector: VectorLayer) => void;\n addEvents: () => void;\n hexToRgba: (color: string, opacity?: number) => string;\n removeStyleFromFeatures: (currentFeature?: Feature) => void;\n resize: () => void;\n setColor: (color: string, opacity?: number) => void;\n};\n\nexport type TModify = {\n interaction: Modify;\n setActive: (active: boolean) => void;\n};\n\nexport type TSelect = {\n interaction: Select;\n setEvents: () => void;\n setActive: (active: boolean) => void;\n clear: () => void;\n};\n\nexport type TDraw = {\n interaction: Draw;\n setActive: (active: boolean) => void;\n coordToString: (coordXY: Coordinate) => string;\n isOnePoint: (coords: Coordinate[]) => boolean;\n getFeature: () => Feature;\n};\n\nexport type Area = {\n id: string;\n points: Coordinate[];\n section?: string;\n floor?: string;\n};\n\nexport interface MyFeature extends Feature {\n floor: string;\n section: string;\n}*/\n\n//# sourceURL=webpack://complexForFunnel/./src/app/types/facadeViewCanvas.js?");
/***/ }),
/***/ "./src/features/useViewFacades.js":
/*!****************************************!*\
!*** ./src/features/useViewFacades.js ***!
\****************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ useViewFacades; }\n/* harmony export */ });\n/* harmony import */ var ol_Map__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ol/Map */ \"./node_modules/ol/Map.js\");\n/* harmony import */ var ol_View__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ol/View */ \"./node_modules/ol/View.js\");\n/* harmony import */ var ol_layer_Image__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ol/layer/Image */ \"./node_modules/ol/layer/Image.js\");\n/* harmony import */ var ol_proj_Projection__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ol/proj/Projection */ \"./node_modules/ol/proj/Projection.js\");\n/* harmony import */ var ol_interaction_defaults__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ol/interaction/defaults */ \"./node_modules/ol/interaction/defaults.js\");\n/* harmony import */ var ol_control_defaults__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ol/control/defaults */ \"./node_modules/ol/control/defaults.js\");\n/* harmony import */ var ol_source_ImageStatic__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ol/source/ImageStatic */ \"./node_modules/ol/source/ImageStatic.js\");\n/* harmony import */ var ol_extent__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ol/extent */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var ol_layer_Vector__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ol/layer/Vector */ \"./node_modules/ol/layer/Vector.js\");\n/* harmony import */ var ol_source_Vector__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ol/source/Vector */ \"./node_modules/ol/source/Vector.js\");\n/* harmony import */ var ol_Collection__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ol/Collection */ \"./node_modules/ol/Collection.js\");\n/* harmony import */ var ol_style_Style__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ol/style/Style */ \"./node_modules/ol/style/Style.js\");\n/* harmony import */ var ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ol/style/Fill */ \"./node_modules/ol/style/Fill.js\");\n/* harmony import */ var ol_style_Stroke__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ol/style/Stroke */ \"./node_modules/ol/style/Stroke.js\");\n/* harmony import */ var ol_style_Circle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ol/style/Circle */ \"./node_modules/ol/style/Circle.js\");\n/* harmony import */ var ol_Overlay__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ol/Overlay */ \"./node_modules/ol/Overlay.js\");\n/* harmony import */ var ol_interaction_Select__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ol/interaction/Select */ \"./node_modules/ol/interaction/Select.js\");\n/* harmony import */ var ol_interaction_Modify__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ol/interaction/Modify */ \"./node_modules/ol/interaction/Modify.js\");\n/* harmony import */ var ol_Feature__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ol/Feature */ \"./node_modules/ol/Feature.js\");\n/* harmony import */ var ol_geom__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ol/geom */ \"./node_modules/ol/geom/Polygon.js\");\n/* harmony import */ var _app_types_facadeViewCanvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/app/types/facadeViewCanvas */ \"./src/app/types/facadeViewCanvas.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//import { Coordinate } from \"ol/coordinate\";\n\n/*export type Facade = {\n id: string;\n image: string;\n figures: Area[];\n};*/\n\nfunction useViewFacades() {\n const mapObj = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const activeFacade = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(0);\n const currentFacade = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const facades = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const optionsFloor = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)({\n floor: null,\n entrance: null,\n rooms: [],\n id: null\n });\n const openedFigure = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)({\n floor: null,\n entrance: null,\n rooms: [],\n id: null\n });\n const openModal = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(false);\n const existingOverlays = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const opacity = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)();\n const emptyHoverStyle = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)();\n const hoverStyle = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)();\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(currentFacade, () => {\n opacity.value = currentFacade.value.opacity === 1 ? 0.99 : currentFacade.value.opacity;\n hoverStyle.value = new ol_style_Style__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n color: mapObj.value.hexToRgba(currentFacade.value.hover_color, 1 - opacity.value)\n }),\n stroke: new ol_style_Stroke__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n color: mapObj.value.hexToRgba(currentFacade.value.hover_color),\n width: 2\n }),\n image: new ol_style_Circle__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n radius: 7,\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n color: mapObj.value.hexToRgba(currentFacade.value.hover_color)\n })\n })\n });\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(mapObj, mapObjValue => {\n emptyHoverStyle.value = new ol_style_Style__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n color: mapObjValue.hexToRgba('#adadad', 0.8)\n }),\n stroke: new ol_style_Stroke__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n color: mapObjValue.hexToRgba('#adadad'),\n width: 2\n }),\n image: new ol_style_Circle__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n radius: 7,\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n color: mapObjValue.hexToRgba('#adadad')\n })\n })\n });\n });\n function start(facadesList) {\n if (facadesList) facades.value = facadesList;\n currentFacade.value = facades.value[activeFacade.value];\n mapObj.value = new OlMap(currentFacade.value.image, \"map\", function (olMap) {\n onMapLoad(olMap);\n });\n window.addEventListener(\"resize\", () => {\n if (mapObj.value) {\n mapObj.value.resize();\n }\n });\n }\n function OlMap(imageUrl, target, onMapLoad) {\n this.target = target;\n this.imageElement = new Image();\n this.imageElement.onload = () => {\n this.onImageLoad();\n onMapLoad(this);\n };\n this.imageElement.src = imageUrl;\n }\n OlMap.prototype.onImageLoad = function () {\n this.createMap(this.imageElement, this.target);\n };\n OlMap.prototype.createMap = function (imageElement, target) {\n this.imageLayer = this.createImageLayer(imageElement);\n const targetElement = document.getElementById(target);\n const view = this.createView(imageElement, targetElement);\n this.vector = this.createVector();\n this.map = new ol_Map__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n layers: [this.imageLayer, this.vector],\n overlays: [],\n controls: (0,ol_control_defaults__WEBPACK_IMPORTED_MODULE_7__.defaults)({\n zoom: false,\n rotate: false\n }),\n target: \"map\",\n view: view,\n pixelRatio: 1,\n interactions: (0,ol_interaction_defaults__WEBPACK_IMPORTED_MODULE_8__.defaults)({\n mouseWheelZoom: false,\n dragPan: false\n })\n });\n this.addInteractionsToMap(this.map, this.vector);\n this.addEvents();\n const containerHeight = targetElement.clientHeight;\n const imageWidth = imageElement.width;\n const imageHeight = imageElement.height;\n const mapWidth = containerHeight / imageHeight * imageWidth;\n this.map.setSize([mapWidth, containerHeight]);\n if (existingOverlays.value) {\n mapObj.value.map.addOverlay(existingOverlays.value);\n this.overlay = existingOverlays.value;\n } else {\n this.overlay = this.createOverlay(document.getElementById(\"popup\"));\n mapObj.value.map.addOverlay(this.overlay);\n mapObj.value.overlay.setPosition(undefined);\n }\n };\n OlMap.prototype.createImageLayer = function (imageElement) {\n const imageStatic = this.createImageStatic(imageElement);\n return new ol_layer_Image__WEBPACK_IMPORTED_MODULE_9__[\"default\"]({\n source: imageStatic\n });\n };\n OlMap.prototype.createImageStatic = function (imageElement) {\n return new ol_source_ImageStatic__WEBPACK_IMPORTED_MODULE_10__[\"default\"]({\n url: imageElement.src,\n imageExtent: [0, 0, imageElement.width, imageElement.height]\n });\n };\n OlMap.prototype.createView = function (imageElement, targetElement) {\n const projection = this.createProjection(imageElement);\n const containerHeight = document.getElementById(\"map\").clientHeight;\n const imageResolution = imageElement.naturalHeight / containerHeight;\n return new ol_View__WEBPACK_IMPORTED_MODULE_11__[\"default\"]({\n resolution: imageResolution,\n projection: projection,\n center: (0,ol_extent__WEBPACK_IMPORTED_MODULE_12__.getCenter)([0, 0, imageElement.width, imageElement.height]),\n zoom: 0\n });\n };\n OlMap.prototype.createProjection = function (imageElement) {\n return new ol_proj_Projection__WEBPACK_IMPORTED_MODULE_13__[\"default\"]({\n code: \"olimage\",\n units: \"pixels\",\n extent: [0, 0, imageElement.width, imageElement.height]\n });\n };\n OlMap.prototype.createVector = function () {\n this.sourceVector = this.createSourceVector();\n const style = this.createStyle();\n return new ol_layer_Vector__WEBPACK_IMPORTED_MODULE_14__[\"default\"]({\n source: this.sourceVector,\n style: style\n });\n };\n OlMap.prototype.createSourceVector = function () {\n this.features = new ol_Collection__WEBPACK_IMPORTED_MODULE_15__[\"default\"]();\n return new ol_source_Vector__WEBPACK_IMPORTED_MODULE_16__[\"default\"]({\n features: this.features\n });\n };\n OlMap.prototype.createStyle = function () {\n return new ol_style_Style__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n color: this.hexToRgba(currentFacade.value.hover_color, 0.2)\n }),\n image: new ol_style_Circle__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n radius: 7,\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n color: this.hexToRgba(currentFacade.value.hover_color)\n })\n })\n });\n };\n OlMap.prototype.createOverlay = function (container) {\n return new ol_Overlay__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n element: container,\n autoPan: {\n animation: {\n duration: 0\n }\n }\n });\n };\n OlMap.prototype.addInteractionsToMap = function (map, vector) {\n this.modify = new Modify(map);\n this.modify.setActive(true);\n };\n OlMap.prototype.addEvents = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const mapObj = this;\n this.map.on(\"click\", function (event) {\n let currentFeature;\n this.forEachFeatureAtPixel(event.pixel, function (feature) {\n if (feature.getGeometry().getType() == \"Polygon\") {\n currentFeature = feature;\n }\n });\n if (currentFeature) {\n if (openModal.value) openModal.value = false;\n if (openedFigure.value.id) {\n closeOverlay();\n openedFigure.value = {\n floor: null,\n entrance: null,\n rooms: [],\n id: null\n };\n } else {\n openedFigure.value = {\n floor: currentFeature.get(\"floor\"),\n entrance: currentFeature.get(\"entrance\"),\n rooms: currentFeature.get(\"rooms\"),\n id: currentFeature.getId()\n };\n showOverLay(currentFeature);\n }\n } else {\n closeOverlay();\n openedFigure.value = {\n floor: null,\n entrance: null,\n rooms: [],\n id: null\n };\n openModal.value = false;\n }\n });\n this.map.on(\"pointermove\", function (event) {\n if (openedFigure.value.id) return;\n let currentFeature;\n this.forEachFeatureAtPixel(event.pixel, function (feature) {\n if (feature.getGeometry().getType() == \"Polygon\") {\n currentFeature = feature;\n }\n });\n if (currentFeature && mapObj.features.getArray().indexOf(currentFeature) > -1) {\n optionsFloor.value = {\n floor: currentFeature.get(\"floor\"),\n entrance: currentFeature.get(\"entrance\"),\n rooms: currentFeature.get(\"rooms\"),\n id: currentFeature.getId()\n };\n mapObj.hovered = true;\n currentFeature.setStyle(currentFeature.get(\"rooms\").filter(room => room.visible).length ? hoverStyle.value : emptyHoverStyle.value);\n mapObj.removeStyleFromFeatures(currentFeature, mapObj);\n } else if (mapObj.hovered) {\n mapObj.hovered = false;\n mapObj.removeStyleFromFeatures(null, mapObj);\n }\n });\n };\n OlMap.prototype.hexToRgba = function (hex, opacity) {\n if (!hex) return;\n hex = hex.replace(\"#\", \"\");\n const color = {\n r: parseInt(hex.substring(0, 2), 16),\n g: parseInt(hex.substring(2, 4), 16),\n b: parseInt(hex.substring(4, 6), 16)\n };\n if (opacity) {\n opacity = opacity > 1 ? opacity / 100 : opacity;\n return \"rgba(\" + color.r + \", \" + color.g + \", \" + color.b + \", \" + opacity + \")\";\n } else {\n return \"rgba(\" + color.r + \", \" + color.g + \", \" + color.b + \")\";\n }\n };\n OlMap.prototype.removeStyleFromFeatures = function (currentFeature, mapObj) {\n this.sourceVector?.getFeatures().forEach(function (feature) {\n if (currentFeature) {\n if (feature.getId() !== currentFeature.getId()) {\n feature.setStyle(mapObj.createStyle());\n }\n } else {\n feature.setStyle(mapObj.createStyle());\n }\n });\n };\n OlMap.prototype.resize = function () {\n if (this.map) {\n const image = this.imageElement;\n const container = document.getElementById(\"map\");\n if (container) {\n const containerHeight = container.clientHeight;\n const imageResolution = image.naturalHeight / containerHeight;\n this.map.getView().setResolution(imageResolution);\n }\n }\n };\n OlMap.prototype.setColor = function (color, opacity) {\n this.color = color;\n this.opacity = opacity || 20;\n const style = this.vector.getStyle();\n style.getFill().setColor(this.hexToRgba(this.color, this.opacity));\n };\n\n /* Interactions */\n\n function Modify(map) {\n this.interaction = new ol_interaction_Modify__WEBPACK_IMPORTED_MODULE_18__[\"default\"]({\n features: mapObj.value ? mapObj.value.features : new ol_Collection__WEBPACK_IMPORTED_MODULE_15__[\"default\"]()\n // deleteCondition: function (event) {\n // return shiftKeyOnly(event) && singleClick(event);\n // },\n });\n\n // map.addInteraction(this.interaction);\n }\n Modify.prototype.setActive = function (active) {\n // this.interaction.setActive(active);\n };\n function Select(map) {\n this.interaction = new ol_interaction_Select__WEBPACK_IMPORTED_MODULE_19__[\"default\"]();\n map.addInteraction(this.interaction);\n }\n Select.prototype.setActive = function (active) {\n this.interaction.setActive(active);\n };\n Select.prototype.clear = function () {\n const selectedFeatures = this.interaction.getFeatures();\n\n // selectedFeatures.forEach(selectedFeatures.remove, selectedFeatures);\n };\n function onMapLoad(mapObj) {\n initFeatures();\n addMapEvents(mapObj);\n colorInit();\n }\n function changeFeatureRooms(id, rooms) {\n mapObj.value.features.forEach(feature => {\n if (feature.getId() == id) {\n feature.set('rooms', rooms);\n }\n });\n }\n function initFeatures() {\n const figures = currentFacade.value.figures;\n figures.forEach(function (item) {\n const polygon = new ol_geom__WEBPACK_IMPORTED_MODULE_20__[\"default\"]([item.points]);\n const feature = new ol_Feature__WEBPACK_IMPORTED_MODULE_21__[\"default\"]({\n geometry: polygon\n });\n feature.setStyle(mapObj.value.createStyle());\n feature.setId(item.id);\n feature.set(\"entrance\", item.entrance);\n feature.set(\"floor\", item.floor);\n feature.set('rooms', item.rooms);\n try {\n mapObj.value.sourceVector.addFeature(feature);\n } catch (e) {\n location.reload();\n }\n });\n }\n function addMapEvents(mapObj) {\n if (!mapObj.value) return;\n mapObj.value.map.getViewport().addEventListener(\"mousemove\", function (event) {\n event.preventDefault();\n });\n mapObj.value.map.getViewport().addEventListener(\"click\", function (event) {\n event.preventDefault();\n });\n }\n function showOverLay(feature) {\n const popup = document.querySelector(\"#popup\");\n if (popup.style.left != 'unset') {\n popup.style.left = 'unset';\n }\n // mapObj.value.select.interaction.getFeatures().push(feature);\n // mapObj.value.selectFeature = feature;\n\n const coordinates = feature.getGeometry().getCoordinates()[0];\n let currentCoordinate = coordinates[0];\n coordinates.forEach(function (coord) {\n if (coord[0] > currentCoordinate[0] && coord[1] > currentCoordinate[1]) {\n currentCoordinate = coord;\n }\n });\n mapObj.value.overlay.setPosition(currentCoordinate);\n // const popup = document.querySelector(\"#popup\");\n popup.style.display = \"block\";\n }\n function closeOverlay() {\n mapObj.value.overlay.setPosition(undefined);\n mapObj.value.selectFeature = null;\n return false;\n }\n const colorInit = () => {\n mapObj.value.setColor(currentFacade.value.hover_color, currentFacade.value.opacity);\n };\n const changeFacade = type => {\n if (type === \"next\") {\n activeFacade.value++;\n if (activeFacade.value === facades.value.length) activeFacade.value = 0;\n currentFacade.value = facades.value[activeFacade.value];\n }\n if (type === \"prev\") {\n if (activeFacade.value === 0) {\n activeFacade.value = facades.value.length - 1;\n } else {\n activeFacade.value--;\n }\n currentFacade.value = facades.value[activeFacade.value];\n }\n existingOverlays.value = mapObj.value.map.getOverlays().getArray().slice()[0];\n mapObj.value.map.setTarget(null);\n mapObj.value = null;\n start();\n };\n return {\n start,\n optionsFloor,\n changeFacade,\n currentFacade,\n openedFigure,\n openModal,\n closeOverlay,\n changeFeatureRooms\n };\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/features/useViewFacades.js?");
/***/ }),
/***/ "./src/features/useViewFloors.js":
/*!***************************************!*\
!*** ./src/features/useViewFloors.js ***!
\***************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ useViewFloors; }\n/* harmony export */ });\n/* harmony import */ var ol_Map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ol/Map */ \"./node_modules/ol/Map.js\");\n/* harmony import */ var ol_control_ZoomSlider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ol/control/ZoomSlider */ \"./node_modules/ol/control/ZoomSlider.js\");\n/* harmony import */ var ol_control_Zoom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ol/control/Zoom */ \"./node_modules/ol/control/Zoom.js\");\n/* harmony import */ var ol_layer_Vector__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ol/layer/Vector */ \"./node_modules/ol/layer/Vector.js\");\n/* harmony import */ var ol_source_Vector__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ol/source/Vector */ \"./node_modules/ol/source/Vector.js\");\n/* harmony import */ var ol_Collection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ol/Collection */ \"./node_modules/ol/Collection.js\");\n/* harmony import */ var ol_style_Style__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ol/style/Style */ \"./node_modules/ol/style/Style.js\");\n/* harmony import */ var ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ol/style/Fill */ \"./node_modules/ol/style/Fill.js\");\n/* harmony import */ var ol_style_Stroke__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ol/style/Stroke */ \"./node_modules/ol/style/Stroke.js\");\n/* harmony import */ var ol_style_Circle__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ol/style/Circle */ \"./node_modules/ol/style/Circle.js\");\n/* harmony import */ var ol_View__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ol/View */ \"./node_modules/ol/View.js\");\n/* harmony import */ var ol_layer_Image__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ol/layer/Image */ \"./node_modules/ol/layer/Image.js\");\n/* harmony import */ var ol_source_ImageStatic__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ol/source/ImageStatic */ \"./node_modules/ol/source/ImageStatic.js\");\n/* harmony import */ var ol_extent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ol/extent */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var ol_proj__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ol/proj */ \"./node_modules/ol/proj.js\");\n/* harmony import */ var ol_Overlay__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ol/Overlay */ \"./node_modules/ol/Overlay.js\");\n/* harmony import */ var ol_interaction_Modify__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ol/interaction/Modify */ \"./node_modules/ol/interaction/Modify.js\");\n/* harmony import */ var ol_events_condition__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ol/events/condition */ \"./node_modules/ol/events/condition.js\");\n/* harmony import */ var ol_interaction_Select__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ol/interaction/Select */ \"./node_modules/ol/interaction/Select.js\");\n/* harmony import */ var ol_interaction_Draw__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ol/interaction/Draw */ \"./node_modules/ol/interaction/Draw.js\");\n/* harmony import */ var ol_coordinate__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ol/coordinate */ \"./node_modules/ol/coordinate.js\");\n/* harmony import */ var ol_interaction_Snap__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ol/interaction/Snap */ \"./node_modules/ol/interaction/Snap.js\");\n/* harmony import */ var ol_geom__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ol/geom */ \"./node_modules/ol/geom/Polygon.js\");\n/* harmony import */ var ol_Feature__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ol/Feature */ \"./node_modules/ol/Feature.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // Coordinate, \n\n // Geometry, Point, \n\n// import { Pixel } from \"ol/pixel\";\n// import { Area, TDraw, TModify, TSelect } from \"@/app/types/facadeViewCanvas\";\n\n\n/*type TOlMap = {\n map: Map;\n features: any;\n sourceVector: VectorSource;\n draw: TDraw;\n modify: TModify;\n select: TSelect;\n snap: OlSnap;\n imageElement: HTMLImageElement;\n imageLayer: ImageLayer;\n target: string;\n vector: VectorLayer;\n overlay: Overlay;\n color: string;\n opacity: number;\n hovered: boolean;\n zoomSliderWrapper: HTMLElement;\n popupWrapper: HTMLElement;\n isMouseOverMap: boolean;\n onImageLoad: () => void;\n createMap: (imageElement: HTMLImageElement, target: string) => void;\n addInteractionsToMap: (map: Map, vector: VectorLayer) => void;\n setColor: (color: string, opacity: number) => void;\n hexToRgba: (hex: string, opacity?: number) => string;\n addEvents: () => void;\n removeStyleFromFeatures: (currentFeature?: Feature) => void;\n createVector: () => VectorLayer;\n createSourceVector: () => VectorSource;\n createStyle: () => Style;\n createView: (imageElement: HTMLImageElement) => View;\n createProjection: (imageElement: HTMLImageElement) => Projection;\n createImageLayer: (imageElement: HTMLImageElement) => ImageLayer;\n createImageStatic: (imageElement: HTMLImageElement) => Static;\n createOverlay: (container: HTMLElement) => Overlay;\n};*/\nfunction useViewFloors() {\n const olMap = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)();\n const openWindowInfo = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(false);\n const windowInfoData = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)({});\n const areas = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)([]);\n const image = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n const hoveredFigure = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);\n function start(map, container, zoomSliderWrapper, popupWrapper, imageUrl, figures) {\n areas.value = figures;\n image.value = imageUrl;\n olMap.value = new OlMap(image.value, \"map\", zoomSliderWrapper, popupWrapper, function (olMap) {\n onMapLoad(olMap);\n });\n\n // setMapHeight(map, container);\n }\n\n // const setMapHeight = function (map, container) {\n // const scrollTop =\n // window.pageYOffset ||\n // document.documentElement.scrollTop ||\n // document.body.scrollTop;\n\n // const marginY =\n // parseInt(container.style.marginTop) +\n // parseInt(container.style.marginBottom);\n\n // map.style.height = container.clientHeight -\n // (map.getBoundingClientRect().top - scrollTop) -\n // marginY +\n // \"px\";\n // };\n\n function OlMap(imageUrl, target, zoomContainer, popupWrapper, onMapLoad) {\n this.target = target;\n this.imageElement = new Image();\n this.zoomSliderWrapper = zoomContainer;\n this.popupWrapper = popupWrapper;\n this.imageElement.onload = () => {\n this.onImageLoad();\n onMapLoad(this);\n };\n this.imageElement.src = imageUrl;\n }\n OlMap.prototype.onImageLoad = function () {\n this.createMap(this.imageElement, this.target);\n };\n OlMap.prototype.createMap = function (imageElement, target) {\n document.querySelector('.ol-map__zoom')?.remove();\n document.querySelector('.ol-map__pane')?.remove();\n this.imageLayer = this.createImageLayer(imageElement);\n const targetElement = document.getElementById(target);\n const view = this.createView(imageElement);\n this.vector = this.createVector();\n this.overlay = this.createOverlay(this.popupWrapper);\n const paneNode = document.createElement(\"div\");\n paneNode.className = \"ol-map__pane\";\n targetElement.appendChild(paneNode);\n this.map = new ol_Map__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n layers: [this.imageLayer, this.vector],\n overlays: [this.overlay],\n controls: [],\n target: paneNode,\n view: view,\n pixelRatio: 1\n });\n const zoomNode = document.createElement(\"div\");\n zoomNode.className = \"ol-map__zoom\";\n const zoomSlider = new ol_control_ZoomSlider__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n className: \"ol-map__zoom-slider\"\n });\n this.zoomSliderWrapper.prepend(zoomNode);\n zoomSlider.setTarget(zoomNode);\n this.map.addControl(zoomSlider);\n const ctrlButtons = new ol_control_Zoom__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n target: zoomNode,\n className: \"ol-map__zoom-btns\",\n zoomInLabel: \"+\",\n zoomOutLabel: \"\\u2212\",\n delta: 1\n });\n const zoomLabelNode = document.createElement(\"div\");\n zoomLabelNode.className = \"ol-map__zoom-label\";\n zoomLabelNode.textContent = \"масштаб\";\n zoomNode.appendChild(zoomLabelNode);\n this.map.addControl(ctrlButtons);\n this.addInteractionsToMap(this.map, this.vector);\n this.addEvents();\n };\n OlMap.prototype.addInteractionsToMap = function (map, vector) {\n // this.modify = new Modify(map);\n // this.modify.setActive(true);\n\n // this.select = new Select(map);\n // this.select.setActive(true);\n\n // this.draw = new Draw(map, vector);\n // this.draw.setActive(true);\n\n this.snap = new Snap(map, vector);\n };\n OlMap.prototype.setColor = function (color, opacity) {\n this.color = color;\n this.opacity = opacity || 20;\n const style = this.vector.getStyle();\n style.getFill().setColor(this.hexToRgba(this.color, this.opacity / 100));\n };\n OlMap.prototype.hexToRgba = function (hex, opacity) {\n if (!hex) return;\n hex = hex.replace(\"#\", \"\");\n const color = {\n r: parseInt(hex.substring(0, 2), 16),\n g: parseInt(hex.substring(2, 4), 16),\n b: parseInt(hex.substring(4, 6), 16)\n };\n if (opacity) {\n opacity = opacity > 1 ? opacity / 100 : opacity;\n return \"rgba(\" + color.r + \", \" + color.g + \", \" + color.b + \", \" + opacity + \")\";\n } else {\n return \"rgba(\" + color.r + \", \" + color.g + \", \" + color.b + \")\";\n }\n };\n\n /* Events */\n\n OlMap.prototype.addEvents = function () {\n this.map.on(\"click\", function (event) {\n let currentFeature;\n this.forEachFeatureAtPixel(event.pixel, function (feature) {\n if (feature.getGeometry().getType() == \"Polygon\") {\n currentFeature = feature;\n }\n });\n openWindowInfo.value = true;\n windowInfoData.value = {};\n });\n this.map.getViewport().addEventListener(\"mouseover\", () => {\n this.isMouseOverMap = true;\n });\n this.map.getViewport().addEventListener(\"mouseout\", () => {\n this.isMouseOverMap = false;\n });\n this.map.getViewport().addEventListener(\"wheel\", event => {\n if (!this.isMouseOverMap) {\n event.preventDefault();\n }\n });\n this.map.on(\"pointermove\", function (event) {\n let currentFeature;\n this.forEachFeatureAtPixel(event.pixel, function (feature) {\n if (feature.getGeometry().getType() == \"Polygon\") {\n currentFeature = feature;\n }\n });\n olMap.value.removeStyleFromFeatures(currentFeature);\n if (currentFeature && olMap.value.features.getArray().indexOf(currentFeature) > -1) {\n olMap.value.hovered = true;\n showOverLay(currentFeature);\n this.getTargetElement().style.cursor = \"pointer\";\n } else if (olMap.value.hovered) {\n closeOverlay();\n olMap.value.hovered = false;\n this.getTargetElement().style.cursor = \"default\";\n }\n });\n };\n OlMap.prototype.removeStyleFromFeatures = function (currentFeature) {\n this.sourceVector?.getFeatures().forEach(function (feature) {\n if (feature !== currentFeature) {\n feature.setStyle(new ol_style_Style__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n color: olMap.value.hexToRgba(feature.get('visible') ? \"#4caf50\" : \"#cfcfcf\", 0.7)\n })\n }));\n }\n });\n };\n\n /* Vector, Style */\n\n OlMap.prototype.createVector = function () {\n this.sourceVector = this.createSourceVector();\n const style = this.createStyle();\n return new ol_layer_Vector__WEBPACK_IMPORTED_MODULE_7__[\"default\"]({\n source: this.sourceVector,\n style: style\n });\n };\n OlMap.prototype.createSourceVector = function () {\n this.features = new ol_Collection__WEBPACK_IMPORTED_MODULE_8__[\"default\"]();\n return new ol_source_Vector__WEBPACK_IMPORTED_MODULE_9__[\"default\"]({\n features: this.features\n });\n };\n OlMap.prototype.createStyle = function () {\n return new ol_style_Style__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n color: \"rgba(255, 56, 56, 0.2)\"\n }),\n stroke: new ol_style_Stroke__WEBPACK_IMPORTED_MODULE_10__[\"default\"]({\n color: \"#ffcc33\",\n width: 0.1\n }),\n image: new ol_style_Circle__WEBPACK_IMPORTED_MODULE_11__[\"default\"]({\n radius: 7,\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n color: \"#ffcc33\"\n })\n })\n });\n };\n\n /* View, Layer, Image */\n\n OlMap.prototype.createView = function (imageElement) {\n const projection = this.createProjection(imageElement);\n return new ol_View__WEBPACK_IMPORTED_MODULE_12__[\"default\"]({\n projection: projection,\n center: (0,ol_extent__WEBPACK_IMPORTED_MODULE_13__.getCenter)([0, 0, imageElement.width, imageElement.height]),\n zoom: 0,\n minZoom: 1,\n maxZoom: 6\n });\n };\n OlMap.prototype.createProjection = function (imageElement) {\n return new ol_proj__WEBPACK_IMPORTED_MODULE_0__.Projection({\n code: \"olimage\",\n units: \"pixels\",\n extent: [0, 0, imageElement.width, imageElement.height]\n });\n };\n OlMap.prototype.createImageLayer = function (imageElement) {\n const imageStatic = this.createImageStatic(imageElement);\n return new ol_layer_Image__WEBPACK_IMPORTED_MODULE_14__[\"default\"]({\n source: imageStatic\n });\n };\n OlMap.prototype.createImageStatic = function (imageElement) {\n return new ol_source_ImageStatic__WEBPACK_IMPORTED_MODULE_15__[\"default\"]({\n url: imageElement.src,\n imageExtent: [0, 0, imageElement.width, imageElement.height]\n });\n };\n OlMap.prototype.createOverlay = function (container) {\n return new ol_Overlay__WEBPACK_IMPORTED_MODULE_16__[\"default\"]({\n element: container,\n autoPan: true,\n insertFirst: true\n });\n };\n\n /* Interactions */\n\n function Modify(map) {\n this.interaction = new ol_interaction_Modify__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n features: olMap.value ? olMap.value.features : new ol_Collection__WEBPACK_IMPORTED_MODULE_8__[\"default\"](),\n deleteCondition: function (event) {\n return (0,ol_events_condition__WEBPACK_IMPORTED_MODULE_18__.shiftKeyOnly)(event) && (0,ol_events_condition__WEBPACK_IMPORTED_MODULE_18__.singleClick)(event);\n }\n });\n map.addInteraction(this.interaction);\n }\n Modify.prototype.setActive = function (active) {\n this.interaction.setActive(active);\n };\n function Select(map) {\n this.interaction = new ol_interaction_Select__WEBPACK_IMPORTED_MODULE_19__[\"default\"]();\n map.addInteraction(this.interaction);\n this.setEvents();\n }\n Select.prototype.setEvents = function () {\n this.interaction.on(\"change:active\", function () {\n this.clear();\n }.bind(this));\n };\n Select.prototype.setActive = function (active) {\n this.interaction.setActive(active);\n };\n Select.prototype.clear = function () {\n const selectedFeatures = this.interaction.getFeatures();\n\n // selectedFeatures.forEach(selectedFeatures.remove, selectedFeatures);\n };\n\n /**\n * type TDraw\n */\n\n function Draw(map, vector) {\n this.interaction = new ol_interaction_Draw__WEBPACK_IMPORTED_MODULE_20__[\"default\"]({\n source: vector.getSource(),\n type: /** @type {ol.geom.GeometryType} */\"Polygon\",\n freehand: false,\n condition: function (event) {\n // Left Click\n return event.originalEvent.which == 1;\n }\n });\n this.interaction.setActive(false);\n map.addInteraction(this.interaction);\n }\n Draw.prototype.coordToString = function (coordXY) {\n return (0,ol_coordinate__WEBPACK_IMPORTED_MODULE_21__.toStringXY)(coordXY, 3);\n };\n Draw.prototype.isOnePoint = function (coords) {\n return coords.every(function (coordXY) {\n return this.coordToString(coords[0]) == this.coordToString(coordXY);\n }.bind(this));\n };\n Draw.prototype.getFeature = function () {\n // return this.interaction.sketchFeature_;\n };\n Draw.prototype.getActive = function () {\n return this.interaction && this.interaction.getActive();\n };\n Draw.prototype.setActive = function (active) {\n this.interaction.setActive(active);\n };\n function Snap(map, vector) {\n const snap = new ol_interaction_Snap__WEBPACK_IMPORTED_MODULE_22__[\"default\"]({\n source: vector.getSource()\n });\n map.addInteraction(snap);\n }\n const colorInit = () => {\n olMap.value.setColor(\"#FF3838\", 0.2);\n };\n function onMapLoad(olMap) {\n initFeatures();\n addMapEvents();\n colorInit();\n }\n function initFeatures() {\n areas.value.forEach(function (item) {\n // const feature = new Feature({\n // geometry: new Polygon([item.points]),\n // });\n\n const feature = new ol_Feature__WEBPACK_IMPORTED_MODULE_23__[\"default\"](new ol_geom__WEBPACK_IMPORTED_MODULE_24__[\"default\"]([item.points]));\n feature.setId(item.id);\n feature.set('visible', item.visible);\n feature.setStyle(new ol_style_Style__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n color: olMap.value.hexToRgba(item.visible ? \"#4caf50\" : \"#cfcfcf\", 0.7)\n })\n }));\n const geo = feature.getGeometry();\n const center = (0,ol_extent__WEBPACK_IMPORTED_MODULE_13__.getCenter)(geo.getExtent());\n const imageCenter = (0,ol_extent__WEBPACK_IMPORTED_MODULE_13__.getCenter)(olMap.value.imageLayer.values_.source.getImageExtent());\n // geo.setFlatCoordinates([item.points.map(([x, y]) => [x, y ])])\n geo.scale(1, -1, imageCenter);\n // geo.rotate(270, center)\n\n try {\n olMap.value.sourceVector.addFeature(feature);\n } catch (e) {\n location.reload();\n }\n });\n }\n function addMapEvents() {\n if (!olMap.value) return;\n olMap.value.map.getViewport().addEventListener(\"contextmenu\", function (event) {\n event.preventDefault();\n\n // rightClickHandler(event);\n });\n\n // olMap.value.draw.interaction.on(\"change\", function (event) {\n // console.log(event);\n // });\n\n // olMap.value.draw.interaction.on(\"drawstart\", function (event) {\n // console.log(event);\n // });\n\n // olMap.value.draw.interaction.on(\"drawend\", function (event) {\n // const feature: Feature = event.feature as Feature;\n // addFacade(feature);\n // });\n\n // olMap.value.modify.interaction.on(\"modifyend\", function (event) {\n // const calls = [];\n // });\n\n olMap.value.map.on(\"dblclick\", function (e) {\n if (olMap.value.draw?.interaction.getPointerCount()) {\n olMap.value.draw.interaction.removeLastPoint();\n olMap.value.draw.interaction.removeLastPoint();\n }\n showOverlayAtPixel(olMap.value.map.getEventPixel(e.originalEvent));\n });\n }\n function rightClickHandler(event) {\n if (olMap.value.draw.interaction.getPointerCount() !== 0) {\n olMap.value.draw.interaction.removeLastPoint();\n return;\n }\n if (olMap.value.draw.interaction.getPointerCount() !== 0) {\n return;\n }\n showOverlayAtPixel(olMap.value.map.getEventPixel(event));\n }\n function showOverlayAtPixel(pixel) {\n const feature = getFeatureAtPixel(pixel);\n if (!feature) {\n return;\n }\n }\n function getFeatureAtPixel(pixel) {\n let polygonFeature;\n olMap.value.map.forEachFeatureAtPixel(pixel, function (feature, layer) {\n if (feature.getGeometry().getType() == \"Polygon\" && olMap.value.features.getArray().indexOf(feature) > -1) {\n polygonFeature = feature;\n }\n });\n return polygonFeature;\n }\n\n // function addFacade(feature) {\n // const geom = feature.getGeometry();\n\n // const id = Math.random().toString(16).slice(2);\n // const data = {\n // id,\n // points: geom.getCoordinates()[0],\n // };\n\n // areas.push(data);\n\n // localStorage.setItem(\"areas\", JSON.stringify(areas));\n\n // showOverLay(feature);\n // }\n\n function showOverLay(feature) {\n closeOverlay();\n // onOverlayToggled(feature.id_)\n hoveredFigure.value = feature;\n // olMap.value.select.clear();\n // olMap.value.select.interaction.getFeatures().push(feature);\n\n const geo = feature.getGeometry();\n const center = (0,ol_extent__WEBPACK_IMPORTED_MODULE_13__.getCenter)(geo.getExtent());\n\n // hoveredFigure.value.visible\n feature.setStyle(new ol_style_Style__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n color: olMap.value.hexToRgba(\"#cfcfcf\", 0.1)\n }),\n stroke: new ol_style_Stroke__WEBPACK_IMPORTED_MODULE_10__[\"default\"]({\n color: \"#FF3838\",\n width: 0.1\n })\n }));\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => {\n if (!hoveredFigure.value.visible) {\n return;\n }\n olMap.value.overlay.setPosition(center);\n olMap.value.overlay.setPositioning(\"top-center\");\n addOverlayEvents(feature);\n });\n }\n function addOverlayEvents(feature) {\n const popup = document.querySelector(\"#popup\");\n popup.addEventListener(\"mousedown\", e => {\n e.stopPropagation();\n e.preventDefault();\n });\n }\n function closeOverlay(feature) {\n if (hoveredFigure.value) {\n hoveredFigure.value.setStyle(new ol_style_Style__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n fill: new ol_style_Fill__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n color: olMap.value.hexToRgba(hoveredFigure.value.visible ? \"#4caf50\" : \"#cfcfcf\", 0.7)\n })\n }));\n }\n hoveredFigure.value = null;\n olMap.value.overlay.setPosition(undefined);\n return false;\n }\n return {\n openWindowInfo,\n windowInfoData,\n start,\n hoveredFigure\n };\n}\n\n//# sourceURL=webpack://complexForFunnel/./src/features/useViewFloors.js?");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss ***!
\***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss":
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss ***!
\************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss":
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss ***!
\************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss":
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss ***!
\************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use%5B0%5D!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
/***/ }),
/***/ "./src/entities/viewHome/chessLayoutsItem.vue":
/*!****************************************************!*\
!*** ./src/entities/viewHome/chessLayoutsItem.vue ***!
\****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chessLayoutsItem_vue_vue_type_template_id_57c503f2_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true */ \"./src/entities/viewHome/chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true\");\n/* harmony import */ var _chessLayoutsItem_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chessLayoutsItem.vue?vue&type=script&setup=true&lang=js */ \"./src/entities/viewHome/chessLayoutsItem.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _chessLayoutsItem_vue_vue_type_style_index_0_id_57c503f2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss */ \"./src/entities/viewHome/chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_chessLayoutsItem_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_chessLayoutsItem_vue_vue_type_template_id_57c503f2_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-57c503f2\"],['__file',\"src/entities/viewHome/chessLayoutsItem.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?");
/***/ }),
/***/ "./src/pages/HomePage/ViewHome.vue":
/*!*****************************************!*\
!*** ./src/pages/HomePage/ViewHome.vue ***!
\*****************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ViewHome_vue_vue_type_template_id_5ba139b1_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true */ \"./src/pages/HomePage/ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true\");\n/* harmony import */ var _ViewHome_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ViewHome.vue?vue&type=script&setup=true&lang=js */ \"./src/pages/HomePage/ViewHome.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _ViewHome_vue_vue_type_style_index_0_id_5ba139b1_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss */ \"./src/pages/HomePage/ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_ViewHome_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ViewHome_vue_vue_type_template_id_5ba139b1_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-5ba139b1\"],['__file',\"src/pages/HomePage/ViewHome.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFacade.vue":
/*!*******************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFacade.vue ***!
\*******************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chessFacade_vue_vue_type_template_id_2ee50347_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chessFacade.vue?vue&type=template&id=2ee50347&scoped=true */ \"./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=template&id=2ee50347&scoped=true\");\n/* harmony import */ var _chessFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chessFacade.vue?vue&type=script&setup=true&lang=js */ \"./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _chessFacade_vue_vue_type_style_index_0_id_2ee50347_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss */ \"./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_chessFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_chessFacade_vue_vue_type_template_id_2ee50347_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-2ee50347\"],['__file',\"src/widgets/homePage/viewHome/chessFacade.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFloors.vue":
/*!*******************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFloors.vue ***!
\*******************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chessFloors_vue_vue_type_template_id_69a44214__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chessFloors.vue?vue&type=template&id=69a44214 */ \"./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=template&id=69a44214\");\n/* harmony import */ var _chessFloors_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chessFloors.vue?vue&type=script&setup=true&lang=js */ \"./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _chessFloors_vue_vue_type_style_index_0_id_69a44214_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss */ \"./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_chessFloors_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_chessFloors_vue_vue_type_template_id_69a44214__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/widgets/homePage/viewHome/chessFloors.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessLayouts.vue":
/*!********************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessLayouts.vue ***!
\********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chessLayouts_vue_vue_type_template_id_37d7d62c__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chessLayouts.vue?vue&type=template&id=37d7d62c */ \"./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=template&id=37d7d62c\");\n/* harmony import */ var _chessLayouts_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chessLayouts.vue?vue&type=script&setup=true&lang=js */ \"./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_chessLayouts_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_chessLayouts_vue_vue_type_template_id_37d7d62c__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/widgets/homePage/viewHome/chessLayouts.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessLayouts.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessTile.vue":
/*!*****************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessTile.vue ***!
\*****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chessTile_vue_vue_type_template_id_3f36bc9b_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true */ \"./src/widgets/homePage/viewHome/chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true\");\n/* harmony import */ var _chessTile_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chessTile.vue?vue&type=script&setup=true&lang=js */ \"./src/widgets/homePage/viewHome/chessTile.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _chessTile_vue_vue_type_style_index_0_id_3f36bc9b_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss */ \"./src/widgets/homePage/viewHome/chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_chessTile_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_chessTile_vue_vue_type_template_id_3f36bc9b_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-3f36bc9b\"],['__file',\"src/widgets/homePage/viewHome/chessTile.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/popupWindowViewFacade.vue":
/*!*****************************************************************!*\
!*** ./src/widgets/homePage/viewHome/popupWindowViewFacade.vue ***!
\*****************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popupWindowViewFacade_vue_vue_type_template_id_faa98d70_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true */ \"./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true\");\n/* harmony import */ var _popupWindowViewFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js */ \"./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _popupWindowViewFacade_vue_vue_type_style_index_0_id_faa98d70_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss */ \"./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_popupWindowViewFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_popupWindowViewFacade_vue_vue_type_template_id_faa98d70_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-faa98d70\"],['__file',\"src/widgets/homePage/viewHome/popupWindowViewFacade.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue":
/*!************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue ***!
\************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _windowInfoForListAppartments_vue_vue_type_template_id_c16734e6_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true */ \"./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true\");\n/* harmony import */ var _windowInfoForListAppartments_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js */ \"./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js\");\n/* harmony import */ var _windowInfoForListAppartments_vue_vue_type_style_index_0_id_c16734e6_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss */ \"./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_windowInfoForListAppartments_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_windowInfoForListAppartments_vue_vue_type_template_id_c16734e6_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-c16734e6\"],['__file',\"src/widgets/homePage/viewHome/windowInfoForListAppartments.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?");
/***/ }),
/***/ "./src/entities/viewHome/chessLayoutsItem.vue?vue&type=script&setup=true&lang=js":
/*!***************************************************************************************!*\
!*** ./src/entities/viewHome/chessLayoutsItem.vue?vue&type=script&setup=true&lang=js ***!
\***************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayoutsItem_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayoutsItem_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessLayoutsItem.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?");
/***/ }),
/***/ "./src/pages/HomePage/ViewHome.vue?vue&type=script&setup=true&lang=js":
/*!****************************************************************************!*\
!*** ./src/pages/HomePage/ViewHome.vue?vue&type=script&setup=true&lang=js ***!
\****************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ViewHome_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ViewHome_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ViewHome.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=script&setup=true&lang=js":
/*!******************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=script&setup=true&lang=js ***!
\******************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessFacade.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=script&setup=true&lang=js":
/*!******************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=script&setup=true&lang=js ***!
\******************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFloors_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFloors_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessFloors.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=script&setup=true&lang=js":
/*!*******************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=script&setup=true&lang=js ***!
\*******************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayouts_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayouts_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessLayouts.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessLayouts.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessTile.vue?vue&type=script&setup=true&lang=js":
/*!****************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessTile.vue?vue&type=script&setup=true&lang=js ***!
\****************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessTile_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessTile_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessTile.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js":
/*!****************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js ***!
\****************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_popupWindowViewFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_popupWindowViewFacade_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js":
/*!***********************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js ***!
\***********************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_windowInfoForListAppartments_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_windowInfoForListAppartments_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=script&setup=true&lang=js\");\n \n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?");
/***/ }),
/***/ "./src/entities/viewHome/chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true":
/*!**********************************************************************************************!*\
!*** ./src/entities/viewHome/chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true ***!
\**********************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayoutsItem_vue_vue_type_template_id_57c503f2_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayoutsItem_vue_vue_type_template_id_57c503f2_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=template&id=57c503f2&scoped=true\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?");
/***/ }),
/***/ "./src/pages/HomePage/ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true":
/*!***********************************************************************************!*\
!*** ./src/pages/HomePage/ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true ***!
\***********************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ViewHome_vue_vue_type_template_id_5ba139b1_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ViewHome_vue_vue_type_template_id_5ba139b1_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=template&id=5ba139b1&scoped=true\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=template&id=2ee50347&scoped=true":
/*!*************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=template&id=2ee50347&scoped=true ***!
\*************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFacade_vue_vue_type_template_id_2ee50347_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFacade_vue_vue_type_template_id_2ee50347_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessFacade.vue?vue&type=template&id=2ee50347&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=template&id=2ee50347&scoped=true\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=template&id=69a44214":
/*!*************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=template&id=69a44214 ***!
\*************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFloors_vue_vue_type_template_id_69a44214__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFloors_vue_vue_type_template_id_69a44214__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessFloors.vue?vue&type=template&id=69a44214 */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=template&id=69a44214\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=template&id=37d7d62c":
/*!**************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=template&id=37d7d62c ***!
\**************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayouts_vue_vue_type_template_id_37d7d62c__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayouts_vue_vue_type_template_id_37d7d62c__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessLayouts.vue?vue&type=template&id=37d7d62c */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessLayouts.vue?vue&type=template&id=37d7d62c\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessLayouts.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true":
/*!***********************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true ***!
\***********************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessTile_vue_vue_type_template_id_3f36bc9b_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessTile_vue_vue_type_template_id_3f36bc9b_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=template&id=3f36bc9b&scoped=true\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true":
/*!***********************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true ***!
\***********************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_popupWindowViewFacade_vue_vue_type_template_id_faa98d70_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_popupWindowViewFacade_vue_vue_type_template_id_faa98d70_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=template&id=faa98d70&scoped=true\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true":
/*!******************************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true ***!
\******************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_windowInfoForListAppartments_vue_vue_type_template_id_c16734e6_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_windowInfoForListAppartments_vue_vue_type_template_id_c16734e6_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=template&id=c16734e6&scoped=true\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?");
/***/ }),
/***/ "./src/entities/viewHome/chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss":
/*!*************************************************************************************************************!*\
!*** ./src/entities/viewHome/chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss ***!
\*************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessLayoutsItem_vue_vue_type_style_index_0_id_57c503f2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/entities/viewHome/chessLayoutsItem.vue?vue&type=style&index=0&id=57c503f2&scoped=true&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/entities/viewHome/chessLayoutsItem.vue?");
/***/ }),
/***/ "./src/pages/HomePage/ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss":
/*!**************************************************************************************************!*\
!*** ./src/pages/HomePage/ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss ***!
\**************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ViewHome_vue_vue_type_style_index_0_id_5ba139b1_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/pages/HomePage/ViewHome.vue?vue&type=style&index=0&id=5ba139b1&scoped=true&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/pages/HomePage/ViewHome.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss":
/*!****************************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss ***!
\****************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFacade_vue_vue_type_style_index_0_id_2ee50347_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFacade.vue?vue&type=style&index=0&id=2ee50347&scoped=true&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss":
/*!****************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss ***!
\****************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessFloors_vue_vue_type_style_index_0_id_69a44214_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessFloors.vue?vue&type=style&index=0&id=69a44214&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessFloors.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss":
/*!**************************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss ***!
\**************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_chessTile_vue_vue_type_style_index_0_id_3f36bc9b_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/chessTile.vue?vue&type=style&index=0&id=3f36bc9b&scoped=true&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/chessTile.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss":
/*!**************************************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss ***!
\**************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_popupWindowViewFacade_vue_vue_type_style_index_0_id_faa98d70_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?vue&type=style&index=0&id=faa98d70&scoped=true&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/popupWindowViewFacade.vue?");
/***/ }),
/***/ "./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss":
/*!*********************************************************************************************************************************!*\
!*** ./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss ***!
\*********************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_clonedRuleSet_22_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_windowInfoForListAppartments_vue_vue_type_style_index_0_id_c16734e6_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss */ \"./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?vue&type=style&index=0&id=c16734e6&scoped=true&lang=scss\");\n\n\n//# sourceURL=webpack://complexForFunnel/./src/widgets/homePage/viewHome/windowInfoForListAppartments.vue?");
/***/ }),
/***/ "./node_modules/color-parse/index.js":
/*!*******************************************!*\
!*** ./node_modules/color-parse/index.js ***!
\*******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var color_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! color-name */ \"./node_modules/color-parse/node_modules/color-name/index.js\");\n/**\n * @module color-parse\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (parse);\n\n/**\n * Base hues\n * http://dev.w3.org/csswg/css-color/#typedef-named-hue\n */\n//FIXME: use external hue detector\nvar baseHues = {\n red: 0,\n orange: 60,\n yellow: 120,\n green: 180,\n blue: 240,\n purple: 300\n};\n\n/**\n * Parse color from the string passed\n *\n * @return {Object} A space indicator `space`, an array `values` and `alpha`\n */\nfunction parse(cstr) {\n var m,\n parts = [],\n alpha = 1,\n space;\n\n //numeric case\n if (typeof cstr === 'number') {\n return {\n space: 'rgb',\n values: [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff],\n alpha: 1\n };\n }\n if (typeof cstr === 'number') return {\n space: 'rgb',\n values: [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff],\n alpha: 1\n };\n cstr = String(cstr).toLowerCase();\n\n //keyword\n if (color_name__WEBPACK_IMPORTED_MODULE_0__[\"default\"][cstr]) {\n parts = color_name__WEBPACK_IMPORTED_MODULE_0__[\"default\"][cstr].slice();\n space = 'rgb';\n }\n\n //reserved words\n else if (cstr === 'transparent') {\n alpha = 0;\n space = 'rgb';\n parts = [0, 0, 0];\n }\n\n //hex\n else if (cstr[0] === '#') {\n var base = cstr.slice(1);\n var size = base.length;\n var isShort = size <= 4;\n alpha = 1;\n if (isShort) {\n parts = [parseInt(base[0] + base[0], 16), parseInt(base[1] + base[1], 16), parseInt(base[2] + base[2], 16)];\n if (size === 4) {\n alpha = parseInt(base[3] + base[3], 16) / 255;\n }\n } else {\n parts = [parseInt(base[0] + base[1], 16), parseInt(base[2] + base[3], 16), parseInt(base[4] + base[5], 16)];\n if (size === 8) {\n alpha = parseInt(base[6] + base[7], 16) / 255;\n }\n }\n if (!parts[0]) parts[0] = 0;\n if (!parts[1]) parts[1] = 0;\n if (!parts[2]) parts[2] = 0;\n space = 'rgb';\n }\n\n // color space\n else if (m = /^((?:rgba?|hs[lvb]a?|hwba?|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms|oklch|oklab|color))\\s*\\(([^\\)]*)\\)/.exec(cstr)) {\n var name = m[1];\n space = name.replace(/a$/, '');\n var dims = space === 'cmyk' ? 4 : space === 'gray' ? 1 : 3;\n parts = m[2].trim().split(/\\s*[,\\/]\\s*|\\s+/);\n\n // color(srgb-linear x x x) -> srgb-linear(x x x)\n if (space === 'color') space = parts.shift();\n parts = parts.map(function (x, i) {\n //\n if (x[x.length - 1] === '%') {\n x = parseFloat(x) / 100;\n // alpha -> 0..1\n if (i === 3) return x;\n // rgb -> 0..255\n if (space === 'rgb') return x * 255;\n // hsl, hwb H -> 0..100\n if (space[0] === 'h') return x * 100;\n // lch, lab L -> 0..100\n if (space[0] === 'l' && !i) return x * 100;\n // lab A B -> -125..125\n if (space === 'lab') return x * 125;\n // lch C -> 0..150, H -> 0..360\n if (space === 'lch') return i < 2 ? x * 150 : x * 360;\n // oklch/oklab L -> 0..1\n if (space[0] === 'o' && !i) return x;\n // oklab A B -> -0.4..0.4\n if (space === 'oklab') return x * 0.4;\n // oklch C -> 0..0.4, H -> 0..360\n if (space === 'oklch') return i < 2 ? x * 0.4 : x * 360;\n // color(xxx) -> 0..1\n return x;\n }\n\n //hue\n if (space[i] === 'h' || i === 2 && space[space.length - 1] === 'h') {\n //\n if (baseHues[x] !== undefined) return baseHues[x];\n //\n if (x.endsWith('deg')) return parseFloat(x);\n //\n if (x.endsWith('turn')) return parseFloat(x) * 360;\n if (x.endsWith('grad')) return parseFloat(x) * 360 / 400;\n if (x.endsWith('rad')) return parseFloat(x) * 180 / Math.PI;\n }\n if (x === 'none') return 0;\n return parseFloat(x);\n });\n alpha = parts.length > dims ? parts.pop() : 1;\n }\n\n //named channels case\n else if (/[0-9](?:\\s|\\/|,)/.test(cstr)) {\n parts = cstr.match(/([0-9]+)/g).map(function (value) {\n return parseFloat(value);\n });\n space = cstr.match(/([a-z])/ig)?.join('')?.toLowerCase() || 'rgb';\n }\n return {\n space,\n values: parts,\n alpha\n };\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-parse/index.js?");
/***/ }),
/***/ "./node_modules/color-parse/node_modules/color-name/index.js":
/*!*******************************************************************!*\
!*** ./node_modules/color-parse/node_modules/color-name/index.js ***!
\*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n grey: [128, 128, 128],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n rebeccapurple: [102, 51, 153],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50]\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-parse/node_modules/color-name/index.js?");
/***/ }),
/***/ "./node_modules/color-rgba/index.js":
/*!******************************************!*\
!*** ./node_modules/color-rgba/index.js ***!
\******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ rgba; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var color_parse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! color-parse */ \"./node_modules/color-parse/index.js\");\n/* harmony import */ var color_space_rgb_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! color-space/rgb.js */ \"./node_modules/color-space/rgb.js\");\n/* harmony import */ var color_space_hsl_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! color-space/hsl.js */ \"./node_modules/color-space/hsl.js\");\n\n/** @module color-rgba */\n\n\n\nfunction rgba(color) {\n // template literals\n if (Array.isArray(color) && color.raw) color = String.raw(...arguments);\n if (color instanceof Number) color = +color;\n var values, i, l;\n\n //attempt to parse non-array arguments\n var parsed = (0,color_parse__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(color);\n if (!parsed.space) return [];\n const min = parsed.space[0] === 'h' ? color_space_hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].min : color_space_rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].min;\n const max = parsed.space[0] === 'h' ? color_space_hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].max : color_space_rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].max;\n values = Array(3);\n values[0] = Math.min(Math.max(parsed.values[0], min[0]), max[0]);\n values[1] = Math.min(Math.max(parsed.values[1], min[1]), max[1]);\n values[2] = Math.min(Math.max(parsed.values[2], min[2]), max[2]);\n if (parsed.space[0] === 'h') {\n values = color_space_hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].rgb(values);\n }\n values.push(Math.min(Math.max(parsed.alpha, 0), 1));\n return values;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-rgba/index.js?");
/***/ }),
/***/ "./node_modules/color-space/hsl.js":
/*!*****************************************!*\
!*** ./node_modules/color-space/hsl.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rgb.js */ \"./node_modules/color-space/rgb.js\");\n/**\n * @module color-space/hsl\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'hsl',\n min: [0, 0, 0],\n max: [360, 100, 100],\n channel: ['hue', 'saturation', 'lightness'],\n alias: ['HSL'],\n rgb: function (hsl) {\n var h = hsl[0] / 360,\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n t1,\n t2,\n t3,\n rgb,\n val,\n i = 0;\n if (s === 0) return val = l * 255, [val, val, val];\n t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n t1 = 2 * l - t2;\n rgb = [0, 0, 0];\n for (; i < 3;) {\n t3 = h + 1 / 3 * -(i - 1);\n t3 < 0 ? t3++ : t3 > 1 && t3--;\n val = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 : 2 * t3 < 1 ? t2 : 3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 : t1;\n rgb[i++] = val * 255;\n }\n return rgb;\n }\n});\n\n//extend rgb\n_rgb_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hsl = function (rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h,\n s,\n l;\n if (max === min) {\n h = 0;\n } else if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else if (b === max) {\n h = 4 + (r - g) / delta;\n }\n h = Math.min(h * 60, 360);\n if (h < 0) {\n h += 360;\n }\n l = (min + max) / 2;\n if (max === min) {\n s = 0;\n } else if (l <= 0.5) {\n s = delta / (max + min);\n } else {\n s = delta / (2 - max - min);\n }\n return [h, s * 100, l * 100];\n};\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-space/hsl.js?");
/***/ }),
/***/ "./node_modules/color-space/lchuv.js":
/*!*******************************************!*\
!*** ./node_modules/color-space/lchuv.js ***!
\*******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _luv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./luv.js */ \"./node_modules/color-space/luv.js\");\n/* harmony import */ var _xyz_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xyz.js */ \"./node_modules/color-space/xyz.js\");\n/**\n * Cylindrical CIE LUV\n *\n * @module color-space/lchuv\n */\n\n\n\n//cylindrical luv\nvar lchuv = {\n name: 'lchuv',\n channel: ['lightness', 'chroma', 'hue'],\n alias: ['LCHuv', 'cielchuv'],\n min: [0, 0, 0],\n max: [100, 100, 360],\n luv: function (luv) {\n var l = luv[0],\n c = luv[1],\n h = luv[2],\n u,\n v,\n hr;\n hr = h / 360 * 2 * Math.PI;\n u = c * Math.cos(hr);\n v = c * Math.sin(hr);\n return [l, u, v];\n },\n xyz: function (arg) {\n return _luv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].xyz(lchuv.luv(arg));\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (lchuv);\n_luv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lchuv = function (luv) {\n var l = luv[0],\n u = luv[1],\n v = luv[2];\n var c = Math.sqrt(u * u + v * v);\n var hr = Math.atan2(v, u);\n var h = hr * 360 / 2 / Math.PI;\n if (h < 0) {\n h += 360;\n }\n return [l, c, h];\n};\n_xyz_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lchuv = function (arg) {\n return _luv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lchuv(_xyz_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].luv(arg));\n};\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-space/lchuv.js?");
/***/ }),
/***/ "./node_modules/color-space/luv.js":
/*!*****************************************!*\
!*** ./node_modules/color-space/luv.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _xyz_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xyz.js */ \"./node_modules/color-space/xyz.js\");\n/**\n * CIE LUV (C'est la vie)\n *\n * @module color-space/luv\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'luv',\n //NOTE: luv has no rigidly defined limits\n //easyrgb fails to get proper coords\n //boronine states no rigid limits\n //colorMine refers this ones:\n min: [0, -134, -140],\n max: [100, 224, 122],\n channel: ['lightness', 'u', 'v'],\n alias: ['LUV', 'cieluv', 'cie1976'],\n xyz: function (arg, i, o) {\n var _u, _v, l, u, v, x, y, z, xn, yn, zn, un, vn;\n l = arg[0], u = arg[1], v = arg[2];\n if (l === 0) return [0, 0, 0];\n\n //get constants\n //var e = 0.008856451679035631; //(6/29)^3\n var k = 0.0011070564598794539; //(3/29)^3\n\n //get illuminant/observer\n i = i || 'D65';\n o = o || 2;\n xn = _xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitepoint[o][i][0];\n yn = _xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitepoint[o][i][1];\n zn = _xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitepoint[o][i][2];\n un = 4 * xn / (xn + 15 * yn + 3 * zn);\n vn = 9 * yn / (xn + 15 * yn + 3 * zn);\n // un = 0.19783000664283;\n // vn = 0.46831999493879;\n\n _u = u / (13 * l) + un || 0;\n _v = v / (13 * l) + vn || 0;\n y = l > 8 ? yn * Math.pow((l + 16) / 116, 3) : yn * l * k;\n\n //wikipedia method\n x = y * 9 * _u / (4 * _v) || 0;\n z = y * (12 - 3 * _u - 20 * _v) / (4 * _v) || 0;\n\n //boronine method\n //https://github.com/boronine/husl/blob/master/husl.coffee#L201\n // x = 0 - (9 * y * _u) / ((_u - 4) * _v - _u * _v);\n // z = (9 * y - (15 * _v * y) - (_v * x)) / (3 * _v);\n\n return [x, y, z];\n }\n});\n\n// http://www.brucelindbloom.com/index.html?Equations.html\n// https://github.com/boronine/husl/blob/master/husl.coffee\n//i - illuminant\n//o - observer\n_xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].luv = function (arg, i, o) {\n var _u, _v, l, u, v, x, y, z, xn, yn, zn, un, vn;\n\n //get constants\n var e = 0.008856451679035631; //(6/29)^3\n var k = 903.2962962962961; //(29/3)^3\n\n //get illuminant/observer coords\n i = i || 'D65';\n o = o || 2;\n xn = _xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitepoint[o][i][0];\n yn = _xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitepoint[o][i][1];\n zn = _xyz_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitepoint[o][i][2];\n un = 4 * xn / (xn + 15 * yn + 3 * zn);\n vn = 9 * yn / (xn + 15 * yn + 3 * zn);\n x = arg[0], y = arg[1], z = arg[2];\n _u = 4 * x / (x + 15 * y + 3 * z) || 0;\n _v = 9 * y / (x + 15 * y + 3 * z) || 0;\n var yr = y / yn;\n l = yr <= e ? k * yr : 116 * Math.pow(yr, 1 / 3) - 16;\n u = 13 * l * (_u - un);\n v = 13 * l * (_v - vn);\n return [l, u, v];\n};\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-space/luv.js?");
/***/ }),
/***/ "./node_modules/color-space/rgb.js":
/*!*****************************************!*\
!*** ./node_modules/color-space/rgb.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * RGB space.\n *\n * @module color-space/rgb\n */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'rgb',\n min: [0, 0, 0],\n max: [255, 255, 255],\n channel: ['red', 'green', 'blue'],\n alias: ['RGB']\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-space/rgb.js?");
/***/ }),
/***/ "./node_modules/color-space/xyz.js":
/*!*****************************************!*\
!*** ./node_modules/color-space/xyz.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rgb.js */ \"./node_modules/color-space/rgb.js\");\n/**\n * CIE XYZ\n *\n * @module color-space/xyz\n */\n\nvar xyz = {\n name: 'xyz',\n min: [0, 0, 0],\n channel: ['X', 'Y', 'Z'],\n alias: ['XYZ', 'ciexyz', 'cie1931']\n};\n\n/**\n * Whitepoint reference values with observer/illuminant\n *\n * http://en.wikipedia.org/wiki/Standard_illuminant\n */\nxyz.whitepoint = {\n //1931 2°\n 2: {\n //incadescent\n A: [109.85, 100, 35.585],\n // B:[],\n C: [98.074, 100, 118.232],\n D50: [96.422, 100, 82.521],\n D55: [95.682, 100, 92.149],\n //daylight\n D65: [95.045592705167, 100, 108.9057750759878],\n D75: [94.972, 100, 122.638],\n //flourescent\n // F1: [],\n F2: [99.187, 100, 67.395],\n // F3: [],\n // F4: [],\n // F5: [],\n // F6:[],\n F7: [95.044, 100, 108.755],\n // F8: [],\n // F9: [],\n // F10: [],\n F11: [100.966, 100, 64.370],\n // F12: [],\n E: [100, 100, 100]\n },\n //1964 10°\n 10: {\n //incadescent\n A: [111.144, 100, 35.200],\n C: [97.285, 100, 116.145],\n D50: [96.720, 100, 81.427],\n D55: [95.799, 100, 90.926],\n //daylight\n D65: [94.811, 100, 107.304],\n D75: [94.416, 100, 120.641],\n //flourescent\n F2: [103.280, 100, 69.026],\n F7: [95.792, 100, 107.687],\n F11: [103.866, 100, 65.627],\n E: [100, 100, 100]\n }\n};\n\n/**\n * Top values are the whitepoint’s top values, default are D65\n */\nxyz.max = xyz.whitepoint[2].D65;\n\n/**\n * Transform xyz to rgb\n *\n * @param {Array} xyz Array of xyz values\n *\n * @return {Array} RGB values\n */\nxyz.rgb = function (_xyz, white) {\n //FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then\n white = white || xyz.whitepoint[2].E;\n var x = _xyz[0] / white[0],\n y = _xyz[1] / white[1],\n z = _xyz[2] / white[2],\n r,\n g,\n b;\n\n // assume sRGB\n // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n r = x * 3.240969941904521 + y * -1.537383177570093 + z * -0.498610760293;\n g = x * -0.96924363628087 + y * 1.87596750150772 + z * 0.041555057407175;\n b = x * 0.055630079696993 + y * -0.20397695888897 + z * 1.056971514242878;\n r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r = r * 12.92;\n g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g = g * 12.92;\n b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b = b * 12.92;\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n return [r * 255, g * 255, b * 255];\n};\n\n/**\n * RGB to XYZ\n *\n * @param {Array} rgb RGB channels\n *\n * @return {Array} XYZ channels\n */\n_rgb_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].xyz = function (rgb, white) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255;\n\n // assume sRGB\n r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n var x = r * 0.41239079926595 + g * 0.35758433938387 + b * 0.18048078840183;\n var y = r * 0.21263900587151 + g * 0.71516867876775 + b * 0.072192315360733;\n var z = r * 0.019330818715591 + g * 0.11919477979462 + b * 0.95053215224966;\n white = white || xyz.whitepoint[2].E;\n return [x * white[0], y * white[1], z * white[2]];\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (xyz);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/color-space/xyz.js?");
/***/ }),
/***/ "./node_modules/ol/Collection.js":
/*!***************************************!*\
!*** ./node_modules/ol/Collection.js ***!
\***************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CollectionEvent: function() { return /* binding */ CollectionEvent; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _CollectionEventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CollectionEventType.js */ \"./node_modules/ol/CollectionEventType.js\");\n/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events/Event.js */ \"./node_modules/ol/events/Event.js\");\n\n/**\n * @module ol/Collection\n */\n\n\n\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LENGTH: 'length'\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n * @template T\n */\nclass CollectionEvent extends _events_Event_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {T} element Element.\n * @param {number} index The index of the added or removed element.\n */\n constructor(type, element, index) {\n super(type);\n\n /**\n * The element that is added to or removed from the collection.\n * @type {T}\n * @api\n */\n this.element = element;\n\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n this.index = index;\n }\n}\n\n/***\n * @template T\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nclass Collection extends _Object_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n /**\n * @param {Array} [array] Array.\n * @param {Options} [options] Collection options.\n */\n constructor(array, options) {\n super();\n\n /***\n * @type {CollectionOnSignature}\n */\n this.on;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.once;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.un;\n options = options || {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.unique_ = !!options.unique;\n\n /**\n * @private\n * @type {!Array}\n */\n this.array_ = array ? array : [];\n if (this.unique_) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n this.assertUnique_(this.array_[i], i);\n }\n }\n this.updateLength_();\n }\n\n /**\n * Remove all elements from the collection.\n * @api\n */\n clear() {\n while (this.getLength() > 0) {\n this.pop();\n }\n }\n\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n extend(arr) {\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n }\n\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n forEach(f) {\n const array = this.array_;\n for (let i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n }\n\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n getArray() {\n return this.array_;\n }\n\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n item(index) {\n return this.array_[index];\n }\n\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n getLength() {\n return this.get(Property.LENGTH);\n }\n\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n insertAt(index, elem) {\n if (index < 0 || index > this.getLength()) {\n throw new Error('Index out of bounds: ' + index);\n }\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ADD, elem, index));\n }\n\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n pop() {\n return this.removeAt(this.getLength() - 1);\n }\n\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n push(elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n const n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n }\n\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n remove(elem) {\n const arr = this.array_;\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n }\n\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n removeAt(index) {\n if (index < 0 || index >= this.getLength()) {\n return undefined;\n }\n const prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(/** @type {CollectionEvent} */\n new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].REMOVE, prev, index));\n return prev;\n }\n\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n setAt(index, elem) {\n const n = this.getLength();\n if (index >= n) {\n this.insertAt(index, elem);\n return;\n }\n if (index < 0) {\n throw new Error('Index out of bounds: ' + index);\n }\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n const prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(/** @type {CollectionEvent} */\n new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].REMOVE, prev, index));\n this.dispatchEvent(/** @type {CollectionEvent} */\n new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ADD, elem, index));\n }\n\n /**\n * @private\n */\n updateLength_() {\n this.set(Property.LENGTH, this.array_.length);\n }\n\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [except] Optional index to ignore.\n */\n assertUnique_(elem, except) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== except) {\n throw new Error('Duplicate item added to a unique collection');\n }\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Collection);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Collection.js?");
/***/ }),
/***/ "./node_modules/ol/CollectionEventType.js":
/*!************************************************!*\
!*** ./node_modules/ol/CollectionEventType.js ***!
\************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove'\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/CollectionEventType.js?");
/***/ }),
/***/ "./node_modules/ol/Disposable.js":
/*!***************************************!*\
!*** ./node_modules/ol/Disposable.js ***!
\***************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/Disposable\n */\n\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nclass Disposable {\n constructor() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n\n /**\n * Clean up.\n */\n dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n }\n\n /**\n * Extension point for disposable objects.\n * @protected\n */\n disposeInternal() {}\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Disposable);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Disposable.js?");
/***/ }),
/***/ "./node_modules/ol/Feature.js":
/*!************************************!*\
!*** ./node_modules/ol/Feature.js ***!
\************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createStyleFunction: function() { return /* binding */ createStyleFunction; }\n/* harmony export */ });\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./asserts.js */ \"./node_modules/ol/asserts.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events.js */ \"./node_modules/ol/events.js\");\n/**\n * @module ol/Feature\n */\n\n\n\n\n\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} FeatureOnSignature\n */\n\n/***\n * @template {import(\"./geom/Geometry.js\").default} [Geometry=import(\"./geom/Geometry.js\").default]\n * @typedef {Object & { geometry?: Geometry }} ObjectWithGeometry\n */\n\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object~BaseObject} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature. For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature.js';\n * import Polygon from 'ol/geom/Polygon.js';\n * import Point from 'ol/geom/Point.js';\n *\n * const feature = new Feature({\n * geometry: new Polygon(polyCoords),\n * labelPoint: new Point(labelCoords),\n * name: 'My Polygon',\n * });\n *\n * // get the polygon geometry\n * const poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * const point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} [Geometry=import(\"./geom/Geometry.js\").default]\n */\nclass Feature extends _Object_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {Geometry|ObjectWithGeometry} [geometryOrProperties]\n * You may pass a Geometry object directly, or an object literal containing\n * properties. If you pass an object literal, you may include a Geometry\n * associated with a `geometry` key.\n */\n constructor(geometryOrProperties) {\n super();\n\n /***\n * @type {FeatureOnSignature}\n */\n this.on;\n\n /***\n * @type {FeatureOnSignature}\n */\n this.once;\n\n /***\n * @type {FeatureOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = undefined;\n\n /**\n * @type {string}\n * @private\n */\n this.geometryName_ = 'geometry';\n\n /**\n * User provided style.\n * @private\n * @type {import(\"./style/Style.js\").StyleLike}\n */\n this.style_ = null;\n\n /**\n * @private\n * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction_ = undefined;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.geometryChangeKey_ = null;\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n if (geometryOrProperties) {\n if (typeof (/** @type {?} */geometryOrProperties.getSimplifiedGeometry) === 'function') {\n const geometry = /** @type {Geometry} */geometryOrProperties;\n this.setGeometry(geometry);\n } else {\n /** @type {Object} */\n const properties = geometryOrProperties;\n this.setProperties(properties);\n }\n }\n }\n\n /**\n * Clone this feature. If the original feature has a geometry it\n * is also cloned. The feature id is not set in the clone.\n * @return {Feature} The clone.\n * @api\n */\n clone() {\n const clone = /** @type {Feature} */\n new Feature(this.hasProperties() ? this.getProperties() : null);\n clone.setGeometryName(this.getGeometryName());\n const geometry = this.getGeometry();\n if (geometry) {\n clone.setGeometry(/** @type {Geometry} */geometry.clone());\n }\n const style = this.getStyle();\n if (style) {\n clone.setStyle(style);\n }\n return clone;\n }\n\n /**\n * Get the feature's default geometry. A feature may have any number of named\n * geometries. The \"default\" geometry (the one that is rendered by default) is\n * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n * @return {Geometry|undefined} The default geometry for the feature.\n * @api\n * @observable\n */\n getGeometry() {\n return /** @type {Geometry|undefined} */this.get(this.geometryName_);\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is either set when reading data from a remote source or set explicitly by\n * calling {@link module:ol/Feature~Feature#setId}.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * Get the name of the feature's default geometry. By default, the default\n * geometry is named `geometry`.\n * @return {string} Get the property name associated with the default geometry\n * for this feature.\n * @api\n */\n getGeometryName() {\n return this.geometryName_;\n }\n\n /**\n * Get the feature's style. Will return what was provided to the\n * {@link module:ol/Feature~Feature#setStyle} method.\n * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n * @api\n */\n getStyle() {\n return this.style_;\n }\n\n /**\n * Get the feature's style function.\n * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n * representing the current style of this feature.\n * @api\n */\n getStyleFunction() {\n return this.styleFunction_;\n }\n\n /**\n * @private\n */\n handleGeometryChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleGeometryChanged_() {\n if (this.geometryChangeKey_) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.unlistenByKey)(this.geometryChangeKey_);\n this.geometryChangeKey_ = null;\n }\n const geometry = this.getGeometry();\n if (geometry) {\n this.geometryChangeKey_ = (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.listen)(geometry, _events_EventType_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].CHANGE, this.handleGeometryChange_, this);\n }\n this.changed();\n }\n\n /**\n * Set the default geometry for the feature. This will update the property\n * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n * @param {Geometry|undefined} geometry The new geometry.\n * @api\n * @observable\n */\n setGeometry(geometry) {\n this.set(this.geometryName_, geometry);\n }\n\n /**\n * Set the style for the feature to override the layer style. This can be a\n * single style object, an array of styles, or a function that takes a\n * resolution and returns an array of styles. To unset the feature style, call\n * `setStyle()` without arguments or a falsey value.\n * @param {import(\"./style/Style.js\").StyleLike} [style] Style for this feature.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n setStyle(style) {\n this.style_ = style;\n this.styleFunction_ = !style ? undefined : createStyleFunction(style);\n this.changed();\n }\n\n /**\n * Set the feature id. The feature id is considered stable and may be used when\n * requesting features or comparing identifiers returned from a remote source.\n * The feature id can be used with the\n * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n * @param {number|string|undefined} id The feature id.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n setId(id) {\n this.id_ = id;\n this.changed();\n }\n\n /**\n * Set the property name to be used when getting the feature's default geometry.\n * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n * this name will be returned.\n * @param {string} name The property name of the default geometry.\n * @api\n */\n setGeometryName(name) {\n this.removeChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.geometryName_ = name;\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.handleGeometryChanged_();\n }\n}\n\n/**\n * Convert the provided object into a feature style function. Functions passed\n * through unchanged. Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array|!import(\"./style/Style.js\").default} obj\n * A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nfunction createStyleFunction(obj) {\n if (typeof obj === 'function') {\n return obj;\n }\n /**\n * @type {Array}\n */\n let styles;\n if (Array.isArray(obj)) {\n styles = obj;\n } else {\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_3__.assert)(typeof (/** @type {?} */obj.getZIndex) === 'function', 'Expected an `ol/style/Style` or an array of `ol/style/Style.js`');\n const style = /** @type {import(\"./style/Style.js\").default} */obj;\n styles = [style];\n }\n return function () {\n return styles;\n };\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Feature);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Feature.js?");
/***/ }),
/***/ "./node_modules/ol/Image.js":
/*!**********************************!*\
!*** ./node_modules/ol/Image.js ***!
\**********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decode: function() { return /* binding */ decode; },\n/* harmony export */ decodeFallback: function() { return /* binding */ decodeFallback; },\n/* harmony export */ listenImage: function() { return /* binding */ listenImage; },\n/* harmony export */ load: function() { return /* binding */ load; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _events_Target_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events/Target.js */ \"./node_modules/ol/events/Target.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _ImageState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ImageState.js */ \"./node_modules/ol/ImageState.js\");\n/* harmony import */ var _has_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./has.js */ \"./node_modules/ol/has.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./events.js */ \"./node_modules/ol/events.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./functions.js */ \"./node_modules/ol/functions.js\");\n\n/**\n * @module ol/Image\n */\n\n\n\n\n\n\n\n/**\n * A function that takes an {@link module:ol/Image~ImageWrapper} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~ImageWrapper#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n * function(image, src) {\n * image.getImage().src = src;\n * }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(import(\"./Image.js\").default, string): void} LoadFunction\n * @api\n */\n\n/**\n * @typedef {Object} ImageObject\n * @property {import(\"./extent.js\").Extent} [extent] Extent, if different from the requested one.\n * @property {import(\"./resolution.js\").ResolutionLike} [resolution] Resolution, if different from the requested one.\n * When x and y resolution are different, use the array type (`[xResolution, yResolution]`).\n * @property {number} [pixelRatio] Pixel ratio, if different from the requested one.\n * @property {import('./DataTile.js').ImageLike} image Image.\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * For images that cover any extent and resolution (static images), the loader function should not accept\n * any arguments. The function returns an {@link import(\"./DataTile.js\").ImageLike image}, an\n * {@link import(\"./Image.js\").ImageObject image object}, or a promise for the same.\n * For loaders that generate images, the promise should not resolve until the image is loaded.\n * If the returned image does not match the extent, resolution or pixel ratio passed to the loader,\n * it has to return an {@link import(\"./Image.js\").ImageObject image object} with the `image` and the\n * correct `extent`, `resolution` and `pixelRatio`.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise} Loader\n * @api\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * The function returns a promise for an {@link import(\"./Image.js\").ImageObject image object}.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise} ImageObjectPromiseLoader\n */\n\nclass ImageWrapper extends _events_Target_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|Array|undefined} resolution Resolution. If provided as array, x and y\n * resolution will be assumed.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default|import(\"./Image.js\").Loader} stateOrLoader State.\n */\n constructor(extent, resolution, pixelRatio, stateOrLoader) {\n super();\n\n /**\n * @protected\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = extent;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @protected\n * @type {number|Array|undefined}\n */\n this.resolution = resolution;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state = typeof stateOrLoader === 'function' ? _ImageState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].IDLE : stateOrLoader;\n\n /**\n * @private\n * @type {import('./DataTile.js').ImageLike|null}\n */\n this.image_ = null;\n\n /**\n * @protected\n * @type {import(\"./Image.js\").Loader}\n */\n this.loader = typeof stateOrLoader === 'function' ? stateOrLoader : null;\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(_events_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].CHANGE);\n }\n\n /**\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n getExtent() {\n return this.extent;\n }\n\n /**\n * @return {import('./DataTile.js').ImageLike} Image.\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * @return {number} PixelRatio.\n */\n getPixelRatio() {\n return this.pixelRatio_;\n }\n\n /**\n * @return {number|Array} Resolution.\n */\n getResolution() {\n return /** @type {number} */this.resolution;\n }\n\n /**\n * @return {import(\"./ImageState.js\").default} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.state == _ImageState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].IDLE) {\n if (this.loader) {\n this.state = _ImageState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].LOADING;\n this.changed();\n const resolution = this.getResolution();\n const requestResolution = Array.isArray(resolution) ? resolution[0] : resolution;\n (0,_functions_js__WEBPACK_IMPORTED_MODULE_4__.toPromise)(() => this.loader(this.getExtent(), requestResolution, this.getPixelRatio())).then(image => {\n if ('image' in image) {\n this.image_ = image.image;\n }\n if ('extent' in image) {\n this.extent = image.extent;\n }\n if ('resolution' in image) {\n this.resolution = image.resolution;\n }\n if ('pixelRatio' in image) {\n this.pixelRatio_ = image.pixelRatio;\n }\n if (image instanceof HTMLImageElement || image instanceof ImageBitmap || image instanceof HTMLCanvasElement || image instanceof HTMLVideoElement) {\n this.image_ = image;\n }\n this.state = _ImageState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].LOADED;\n }).catch(error => {\n this.state = _ImageState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERROR;\n console.error(error); // eslint-disable-line no-console\n }).finally(() => this.changed());\n }\n }\n }\n\n /**\n * @param {import('./DataTile.js').ImageLike} image The image.\n */\n setImage(image) {\n this.image_ = image;\n }\n\n /**\n * @param {number|Array} resolution Resolution.\n */\n setResolution(resolution) {\n this.resolution = resolution;\n }\n}\n\n/**\n * @param {import('./DataTile.js').ImageLike} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nfunction listenImage(image, loadHandler, errorHandler) {\n const img = /** @type {HTMLImageElement} */image;\n let listening = true;\n let decoding = false;\n let loaded = false;\n const listenerKeys = [(0,_events_js__WEBPACK_IMPORTED_MODULE_5__.listenOnce)(img, _events_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].LOAD, function () {\n loaded = true;\n if (!decoding) {\n loadHandler();\n }\n })];\n if (img.src && _has_js__WEBPACK_IMPORTED_MODULE_6__.IMAGE_DECODE) {\n decoding = true;\n img.decode().then(function () {\n if (listening) {\n loadHandler();\n }\n }).catch(function (error) {\n if (listening) {\n if (loaded) {\n loadHandler();\n } else {\n errorHandler();\n }\n }\n });\n } else {\n listenerKeys.push((0,_events_js__WEBPACK_IMPORTED_MODULE_5__.listenOnce)(img, _events_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ERROR, errorHandler));\n }\n return function unlisten() {\n listening = false;\n listenerKeys.forEach(_events_js__WEBPACK_IMPORTED_MODULE_5__.unlistenByKey);\n };\n}\n\n/**\n * Loads an image.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `HTMLImageElement`.\n * @api\n */\nfunction load(image, src) {\n return new Promise((resolve, reject) => {\n function handleLoad() {\n unlisten();\n resolve(image);\n }\n function handleError() {\n unlisten();\n reject(new Error('Image load error'));\n }\n function unlisten() {\n image.removeEventListener('load', handleLoad);\n image.removeEventListener('error', handleError);\n }\n image.addEventListener('load', handleLoad);\n image.addEventListener('error', handleError);\n if (src) {\n image.src = src;\n }\n });\n}\n\n/**\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `HTMLImageElement`.\n */\nfunction decodeFallback(image, src) {\n if (src) {\n image.src = src;\n }\n return image.src && _has_js__WEBPACK_IMPORTED_MODULE_6__.IMAGE_DECODE ? new Promise((resolve, reject) => image.decode().then(() => resolve(image)).catch(e => image.complete && image.width ? resolve(image) : reject(e))) : load(image);\n}\n\n/**\n * Loads an image and decodes it to an `ImageBitmap` if `createImageBitmap()` is supported. Returns\n * the loaded image otherwise.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `ImageBitmap` or an\n * `HTMLImageElement` if `createImageBitmap()` is not supported.\n * @api\n */\nfunction decode(image, src) {\n if (src) {\n image.src = src;\n }\n return image.src && _has_js__WEBPACK_IMPORTED_MODULE_6__.IMAGE_DECODE && _has_js__WEBPACK_IMPORTED_MODULE_6__.CREATE_IMAGE_BITMAP ? image.decode().then(() => createImageBitmap(image)).catch(e => {\n if (image.complete && image.width) {\n return image;\n }\n throw e;\n }) : decodeFallback(image);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (ImageWrapper);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Image.js?");
/***/ }),
/***/ "./node_modules/ol/ImageState.js":
/*!***************************************!*\
!*** ./node_modules/ol/ImageState.js ***!
\***************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/ImageState\n */\n\n/**\n * @enum {number}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/ImageState.js?");
/***/ }),
/***/ "./node_modules/ol/Kinetic.js":
/*!************************************!*\
!*** ./node_modules/ol/Kinetic.js ***!
\************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n\n/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Kinetic);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Kinetic.js?");
/***/ }),
/***/ "./node_modules/ol/Map.js":
/*!********************************!*\
!*** ./node_modules/ol/Map.js ***!
\********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _Collection_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Collection.js */ \"./node_modules/ol/Collection.js\");\n/* harmony import */ var _CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./CollectionEventType.js */ \"./node_modules/ol/CollectionEventType.js\");\n/* harmony import */ var _renderer_Composite_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./renderer/Composite.js */ \"./node_modules/ol/renderer/Composite.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _layer_Layer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layer/Layer.js */ \"./node_modules/ol/layer/Layer.js\");\n/* harmony import */ var _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./layer/Group.js */ \"./node_modules/ol/layer/Group.js\");\n/* harmony import */ var _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./MapBrowserEvent.js */ \"./node_modules/ol/MapBrowserEvent.js\");\n/* harmony import */ var _MapBrowserEventHandler_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./MapBrowserEventHandler.js */ \"./node_modules/ol/MapBrowserEventHandler.js\");\n/* harmony import */ var _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./MapBrowserEventType.js */ \"./node_modules/ol/MapBrowserEventType.js\");\n/* harmony import */ var _MapEvent_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./MapEvent.js */ \"./node_modules/ol/MapEvent.js\");\n/* harmony import */ var _MapEventType_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./MapEventType.js */ \"./node_modules/ol/MapEventType.js\");\n/* harmony import */ var _MapProperty_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./MapProperty.js */ \"./node_modules/ol/MapProperty.js\");\n/* harmony import */ var _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./ObjectEventType.js */ \"./node_modules/ol/ObjectEventType.js\");\n/* harmony import */ var _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./pointer/EventType.js */ \"./node_modules/ol/pointer/EventType.js\");\n/* harmony import */ var _render_EventType_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./render/EventType.js */ \"./node_modules/ol/render/EventType.js\");\n/* harmony import */ var _TileQueue_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./TileQueue.js */ \"./node_modules/ol/TileQueue.js\");\n/* harmony import */ var _View_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./View.js */ \"./node_modules/ol/View.js\");\n/* harmony import */ var _ViewHint_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ViewHint.js */ \"./node_modules/ol/ViewHint.js\");\n/* harmony import */ var _has_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./has.js */ \"./node_modules/ol/has.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./functions.js */ \"./node_modules/ol/functions.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./transform.js */ \"./node_modules/ol/transform.js\");\n/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./asserts.js */ \"./node_modules/ol/asserts.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _control_defaults_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./control/defaults.js */ \"./node_modules/ol/control/defaults.js\");\n/* harmony import */ var _interaction_defaults_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./interaction/defaults.js */ \"./node_modules/ol/interaction/defaults.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./array.js */ \"./node_modules/ol/array.js\");\n/* harmony import */ var _proj_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./proj.js */ \"./node_modules/ol/proj.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./util.js */ \"./node_modules/ol/util.js\");\n/* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./size.js */ \"./node_modules/ol/size.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./events.js */ \"./node_modules/ol/events.js\");\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/ol/dom.js\");\n/* harmony import */ var _console_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./console.js */ \"./node_modules/ol/console.js\");\n\n/**\n * @module ol/Map\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {import(\"rbush\").default} declutterTree DeclutterTree.\n * @property {null|import(\"./extent.js\").Extent} extent Extent (in view projection coordinates).\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(Map, ?FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} MapEventHandler\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/defaults.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction/defaults.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * **Note:** CSS `transform` support for the target element is limited to `scale`.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof _layer_Layer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {Map} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof _layer_Layer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map.js';\n * import View from 'ol/View.js';\n * import TileLayer from 'ol/layer/Tile.js';\n * import OSM from 'ol/source/OSM.js';\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM(),\n * }),\n * ],\n * target: 'map',\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass Map extends _Object_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"] {\n /**\n * @param {MapOptions} [options] Map options.\n */\n constructor(options) {\n super();\n options = options || {};\n\n /***\n * @type {MapEventHandler}\n */\n this.on;\n\n /***\n * @type {MapEventHandler}\n */\n this.once;\n\n /***\n * @type {MapEventHandler}\n */\n this.un;\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean|undefined}\n */\n this.renderComplete_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.loaded_ = true;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ = options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = options.pixelRatio !== undefined ? options.pixelRatio : _has_js__WEBPACK_IMPORTED_MODULE_5__.DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = this.animationDelay_.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = (0,_transform_js__WEBPACK_IMPORTED_MODULE_6__.create)();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = (0,_transform_js__WEBPACK_IMPORTED_MODULE_6__.create)();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className = 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @private\n * @type {HTMLElement|null}\n */\n this.targetElement_ = null;\n\n /**\n * @type {ResizeObserver}\n */\n this.resizeObserver_ = new ResizeObserver(() => this.updateSize());\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || (0,_control_defaults_js__WEBPACK_IMPORTED_MODULE_7__.defaults)();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions = optionsInternal.interactions || (0,_interaction_defaults_js__WEBPACK_IMPORTED_MODULE_8__.defaults)({\n onFocusOnly: true\n });\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default|null}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new _TileQueue_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this.getTilePriority.bind(this), this.handleTileChange_.bind(this));\n this.addChangeListener(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].LAYERGROUP, this.handleLayerGroupChanged_);\n this.addChangeListener(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].VIEW, this.handleViewChanged_);\n this.addChangeListener(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].SIZE, this.handleSizeChanged_);\n this.addChangeListener(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n const map = this;\n if (options.view && !(options.view instanceof _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])) {\n options.view.then(function (viewOptions) {\n map.setView(new _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"](viewOptions));\n });\n }\n this.controls.addEventListener(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"].ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent\n */\n event => {\n event.element.setMap(this);\n });\n this.controls.addEventListener(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"].REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n event => {\n event.element.setMap(null);\n });\n this.interactions.addEventListener(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"].ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n event => {\n event.element.setMap(this);\n });\n this.interactions.addEventListener(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"].REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n event => {\n event.element.setMap(null);\n });\n this.overlays_.addEventListener(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"].ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n event => {\n this.addOverlayInternal_(event.element);\n });\n this.overlays_.addEventListener(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"].REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n event => {\n const id = event.element.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n });\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n */\n control => {\n control.setMap(this);\n });\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n */\n interaction => {\n interaction.setMap(this);\n });\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteractions()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n */\n disposeInternal() {\n this.controls.clear();\n this.interactions.clear();\n this.overlays_.clear();\n this.resizeObserver_.disconnect();\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter = options.layerFilter !== undefined ? options.layerFilter : _functions_js__WEBPACK_IMPORTED_MODULE_13__.TRUE;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, callback, null, layerFilter, null);\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, options) {\n const features = [];\n this.forEachFeatureAtPixel(pixel, function (feature) {\n features.push(feature);\n }, options);\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through the `layerFilter` option.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, options) {\n if (!this.frameState_ || !this.renderer_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const layerFilter = options.layerFilter !== undefined ? options.layerFilter : _functions_js__WEBPACK_IMPORTED_MODULE_13__.TRUE;\n const hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, layerFilter, null);\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent|{clientX: number, clientY: number}} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewport = this.viewport_;\n const viewportPosition = viewport.getBoundingClientRect();\n const viewportSize = this.getSize();\n const scaleX = viewportPosition.width / viewportSize[0];\n const scaleY = viewportPosition.height / viewportSize[1];\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event ? /** @type {TouchEvent} */event.changedTouches[0] : (/** @type {MouseEvent} */event);\n return [(eventPosition.clientX - viewportPosition.left) / scaleX, (eventPosition.clientY - viewportPosition.top) / scaleY];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */this.get(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].TARGET);\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n return this.targetElement_;\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.toUserCoordinate)(this.getCoordinateFromPixelInternal(pixel), this.getView().getProjection());\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return (0,_transform_js__WEBPACK_IMPORTED_MODULE_6__.apply)(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */this.get(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].LAYERGROUP);\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof _Collection_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]) {\n group.setLayers(layers);\n return;\n }\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const state = layerStatesArray[i];\n if (!state.visible) {\n continue;\n }\n const renderer = state.layer.getRenderer();\n if (renderer && !renderer.ready) {\n return true;\n }\n const source = state.layer.getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(coordinate, this.getView().getProjection());\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return (0,_transform_js__WEBPACK_IMPORTED_MODULE_6__.apply)(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default|null} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */this.get(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].SIZE);\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */this.get(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].VIEW);\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return (0,_TileQueue_js__WEBPACK_IMPORTED_MODULE_9__.getTilePriority)(this.frameState_, tile, tileSourceKey, tileCenter, tileResolution);\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [type] Type.\n */\n handleBrowserEvent(browserEvent, type) {\n type = type || browserEvent.type;\n const mapBrowserEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */\n mapBrowserEvent.originalEvent;\n const eventType = originalEvent.type;\n if (eventType === _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].POINTERDOWN || eventType === _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WHEEL || eventType === _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].KEYDOWN) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode ? this.viewport_.getRootNode() : doc;\n const target = /** @type {Node} */originalEvent.target;\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (interaction.getMap() !== this || !interaction.getActive() || !this.getTargetElement()) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[_ViewHint_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"].ANIMATING] || hints[_ViewHint_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"].INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n if (frameState && this.renderer_ && !frameState.animate) {\n if (this.renderComplete_ === true) {\n if (this.hasListener(_render_EventType_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"].RENDERCOMPLETE)) {\n this.renderer_.dispatchRenderEvent(_render_EventType_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"].RENDERCOMPLETE, frameState);\n }\n if (this.loaded_ === false) {\n this.loaded_ = true;\n this.dispatchEvent(new _MapEvent_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].LOADEND, this, frameState));\n }\n } else if (this.loaded_ === true) {\n this.loaded_ = false;\n this.dispatchEvent(new _MapEvent_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].LOADSTART, this, frameState));\n }\n }\n const postRenderFunctions = this.postRenderFunctions_;\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.unlistenByKey)(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].CONTEXTMENU, this.boundHandleBrowserEvent_);\n this.viewport_.removeEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WHEEL, this.boundHandleBrowserEvent_);\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_23__.removeNode)(this.viewport_);\n }\n if (this.targetElement_) {\n this.resizeObserver_.unobserve(this.targetElement_);\n const rootNode = this.targetElement_.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.unobserve(rootNode.host);\n }\n this.setSize(undefined);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const target = this.getTarget();\n const targetElement = typeof target === 'string' ? document.getElementById(target) : target;\n this.targetElement_ = targetElement;\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = new _renderer_Composite_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"](this);\n }\n this.mapBrowserEventHandler_ = new _MapBrowserEventHandler_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"](this, this.moveTolerance_);\n for (const key in _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"]) {\n this.mapBrowserEventHandler_.addEventListener(_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"][key], this.handleMapBrowserEvent.bind(this));\n }\n this.viewport_.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].CONTEXTMENU, this.boundHandleBrowserEvent_, false);\n this.viewport_.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WHEEL, this.boundHandleBrowserEvent_, _has_js__WEBPACK_IMPORTED_MODULE_5__.PASSIVE_EVENT_LISTENERS ? {\n passive: false\n } : false);\n const keyboardEventTarget = !this.keyboardEventTarget_ ? targetElement : this.keyboardEventTarget_;\n this.targetChangeHandlerKeys_ = [(0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(keyboardEventTarget, _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].KEYDOWN, this.handleBrowserEvent, this), (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(keyboardEventTarget, _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].KEYPRESS, this.handleBrowserEvent, this)];\n const rootNode = targetElement.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.observe(rootNode.host);\n }\n this.resizeObserver_.observe(targetElement);\n }\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.unlistenByKey)(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.unlistenByKey)(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_(this.getSize());\n this.viewPropertyListenerKey_ = (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(view, _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"].PROPERTYCHANGE, this.handleViewPropertyChanged_, this);\n this.viewChangeListenerKey_ = (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(view, _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].CHANGE, this.handleViewPropertyChanged_, this);\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(_events_js__WEBPACK_IMPORTED_MODULE_22__.unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__.GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [(0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(layerGroup, _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"].PROPERTYCHANGE, this.render, this), (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(layerGroup, _events_EventType_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].CHANGE, this.render, this), (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(layerGroup, 'addlayer', this.handleLayerAdd_, this), (0,_events_js__WEBPACK_IMPORTED_MODULE_22__.listen)(layerGroup, 'removelayer', this.handleLayerRemove_, this)];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * @private\n */\n animationDelay_() {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * This method is meant to be called in a layer's `prerender` listener. It causes all collected\n * declutter items to be decluttered and rendered on the map immediately. This is useful for\n * layers that need to appear entirely above the decluttered items of layers lower in the layer\n * stack.\n * @api\n */\n flushDeclutterItems() {\n const frameState = this.frameState_;\n if (!frameState) {\n return;\n }\n this.renderer_.flushDeclutterItems(frameState);\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && (0,_size_js__WEBPACK_IMPORTED_MODULE_28__.hasArea)(size) && view && view.isDef()) {\n const viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: (0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.getForViewAndSize)(viewState.center, viewState.resolution, viewState.rotation, size),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: (0,_util_js__WEBPACK_IMPORTED_MODULE_30__.getUid)(this),\n renderTargets: {}\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation) ? viewState.rotation : viewState.nextRotation;\n frameState.nextExtent = (0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.getForViewAndSize)(viewState.nextCenter, viewState.nextResolution, rotation, size);\n }\n }\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);\n if (previousFrameState) {\n const moveStart = !this.previousExtent_ || !(0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.isEmpty)(this.previousExtent_) && !(0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.equals)(frameState.extent, this.previousExtent_);\n if (moveStart) {\n this.dispatchEvent(new _MapEvent_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].MOVESTART, this, previousFrameState));\n this.previousExtent_ = (0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.createOrUpdateEmpty)(this.previousExtent_);\n }\n }\n const idle = this.previousExtent_ && !frameState.viewHints[_ViewHint_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"].ANIMATING] && !frameState.viewHints[_ViewHint_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"].INTERACTING] && !(0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.equals)(frameState.extent, this.previousExtent_);\n if (idle) {\n this.dispatchEvent(new _MapEvent_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].MOVEEND, this, frameState));\n (0,_extent_js__WEBPACK_IMPORTED_MODULE_29__.clone)(frameState.extent, this.previousExtent_);\n }\n }\n this.dispatchEvent(new _MapEvent_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"](_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].POSTRENDER, this, frameState));\n this.renderComplete_ = this.hasListener(_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].LOADSTART) || this.hasListener(_MapEventType_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"].LOADEND) || this.hasListener(_render_EventType_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"].RENDERCOMPLETE) ? !this.tileQueue_.getTilesLoading() && !this.tileQueue_.getCount() && !this.getLoadingOrNotReady() : undefined;\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__.GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]) {\n this.set(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].VIEW, view);\n return;\n }\n this.set(_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].VIEW, new _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]());\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"](viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width = targetElement.offsetWidth - parseFloat(computedStyle['borderLeftWidth']) - parseFloat(computedStyle['paddingLeft']) - parseFloat(computedStyle['paddingRight']) - parseFloat(computedStyle['borderRightWidth']);\n const height = targetElement.offsetHeight - parseFloat(computedStyle['borderTopWidth']) - parseFloat(computedStyle['paddingTop']) - parseFloat(computedStyle['paddingBottom']) - parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height];\n if (!(0,_size_js__WEBPACK_IMPORTED_MODULE_28__.hasArea)(size) && !!(targetElement.offsetWidth || targetElement.offsetHeight || targetElement.getClientRects().length)) {\n (0,_console_js__WEBPACK_IMPORTED_MODULE_31__.warn)(\"No map visible because the map container's width or height are 0.\");\n }\n }\n }\n const oldSize = this.getSize();\n if (size && (!oldSize || !(0,_array_js__WEBPACK_IMPORTED_MODULE_32__.equals)(size, oldSize))) {\n this.setSize(size);\n this.updateViewportSize_(size);\n }\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @param {import(\"./size.js\").Size|undefined} size The size.\n * @private\n */\n updateViewportSize_(size) {\n const view = this.getView();\n if (view) {\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget = typeof options.keyboardEventTarget === 'string' ? document.getElementById(options.keyboardEventTarget) : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n const layerGroup = options.layers && typeof (/** @type {?} */options.layers.getLayers) === 'function' ? (/** @type {LayerGroup} */options.layers) : new _layer_Group_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n layers: (/** @type {Collection|Array} */\n options.layers)\n });\n values[_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].LAYERGROUP] = layerGroup;\n values[_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].TARGET] = options.target;\n values[_MapProperty_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"].VIEW] = options.view instanceof _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"] ? options.view : new _View_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]();\n\n /** @type {Collection} */\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new _Collection_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"](options.controls.slice());\n } else {\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_33__.assert)(typeof (/** @type {?} */options.controls.getArray) === 'function', 'Expected `controls` to be an array or an `ol/Collection.js`');\n controls = options.controls;\n }\n }\n\n /** @type {Collection} */\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new _Collection_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"](options.interactions.slice());\n } else {\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_33__.assert)(typeof (/** @type {?} */options.interactions.getArray) === 'function', 'Expected `interactions` to be an array or an `ol/Collection.js`');\n interactions = options.interactions;\n }\n }\n\n /** @type {Collection} */\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new _Collection_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"](options.overlays.slice());\n } else {\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_33__.assert)(typeof (/** @type {?} */options.overlays.getArray) === 'function', 'Expected `overlays` to be an array or an `ol/Collection.js`');\n overlays = options.overlays;\n }\n } else {\n overlays = new _Collection_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]();\n }\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values\n };\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Map);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Map.js?");
/***/ }),
/***/ "./node_modules/ol/MapBrowserEvent.js":
/*!********************************************!*\
!*** ./node_modules/ol/MapBrowserEvent.js ***!
\********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MapEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MapEvent.js */ \"./node_modules/ol/MapEvent.js\");\n/**\n * @module ol/MapBrowserEvent\n */\n\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nclass MapBrowserEvent extends _MapEvent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {string} type Event type.\n * @param {import(\"./Map.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [dragging] Is the map currently being dragged?\n * @param {import(\"./Map.js\").FrameState} [frameState] Frame state.\n * @param {Array} [activePointers] Active pointers.\n */\n constructor(type, map, originalEvent, dragging, frameState, activePointers) {\n super(type, map, frameState);\n\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n this.originalEvent = originalEvent;\n\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n this.pixel_ = null;\n\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.coordinate_ = null;\n\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n this.dragging = dragging !== undefined ? dragging : false;\n\n /**\n * @type {Array|undefined}\n */\n this.activePointers = activePointers;\n }\n\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get pixel() {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n }\n set pixel(pixel) {\n this.pixel_ = pixel;\n }\n\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get coordinate() {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n }\n set coordinate(coordinate) {\n this.coordinate_ = coordinate;\n }\n\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n preventDefault() {\n super.preventDefault();\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */this.originalEvent.preventDefault();\n }\n }\n\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n stopPropagation() {\n super.stopPropagation();\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */this.originalEvent.stopPropagation();\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (MapBrowserEvent);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/MapBrowserEvent.js?");
/***/ }),
/***/ "./node_modules/ol/MapBrowserEventHandler.js":
/*!***************************************************!*\
!*** ./node_modules/ol/MapBrowserEventHandler.js ***!
\***************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./MapBrowserEvent.js */ \"./node_modules/ol/MapBrowserEvent.js\");\n/* harmony import */ var _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./MapBrowserEventType.js */ \"./node_modules/ol/MapBrowserEventType.js\");\n/* harmony import */ var _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pointer/EventType.js */ \"./node_modules/ol/pointer/EventType.js\");\n/* harmony import */ var _events_Target_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events/Target.js */ \"./node_modules/ol/events/Target.js\");\n/* harmony import */ var _has_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./has.js */ \"./node_modules/ol/has.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.js */ \"./node_modules/ol/events.js\");\n\n/**\n * @module ol/MapBrowserEventHandler\n */\n\n\n\n\n\n\n\n\nclass MapBrowserEventHandler extends _events_Target_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {import(\"./Map.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./Map.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {ReturnType}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n const element = this.map_.getViewport();\n\n /**\n * @type {Array}\n * @private\n */\n this.activePointers_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(element, _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERDOWN, this.handlePointerDown_, this);\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(element, _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERMOVE, this.relayMoveEvent_, this);\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n this.element_.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].TOUCHMOVE, this.boundHandleTouchMove_, _has_js__WEBPACK_IMPORTED_MODULE_5__.PASSIVE_EVENT_LISTENERS ? {\n passive: false\n } : false);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].CLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].DBLCLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(() => {\n this.clickTimeoutId_ = undefined;\n const newEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].SINGLECLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }, 250);\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n const id = event.pointerId;\n if (event.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERUP || event.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERCANCEL) {\n delete this.trackedTouches_[id];\n for (const pointerId in this.trackedTouches_) {\n if (this.trackedTouches_[pointerId].target !== event.target) {\n // Some platforms assign a new pointerId when the target changes.\n // If this happens, delete one tracked pointer. If there is more\n // than one tracked pointer for the old target, it will be cleared\n // by subsequent POINTERUP events from other pointers.\n delete this.trackedTouches_[pointerId];\n break;\n }\n }\n } else if (event.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERDOWN || event.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERMOVE) {\n this.trackedTouches_[id] = event;\n }\n this.activePointers_ = Object.values(this.trackedTouches_);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERUP, this.map_, pointerEvent, undefined, undefined, this.activePointers_);\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (this.emulateClicks_ && !newEvent.defaultPrevented && !this.dragging_ && this.isMouseActionButton_(pointerEvent)) {\n this.emulateClick_(this.down_);\n }\n if (this.activePointers_.length === 0) {\n this.dragListenerKeys_.forEach(_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_.length === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERDOWN, this.map_, pointerEvent, undefined, undefined, this.activePointers_);\n this.dispatchEvent(newEvent);\n this.down_ = new PointerEvent(pointerEvent.type, pointerEvent);\n Object.defineProperty(this.down_, 'target', {\n writable: false,\n value: pointerEvent.target\n });\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push((0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(doc, _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERMOVE, this.handlePointerMove_, this), (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(doc, _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(this.element_, _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERCANCEL, this.handlePointerUp_, this));\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push((0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(this.element_.getRootNode(), _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERUP, this.handlePointerUp_, this));\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.updateActivePointers_(pointerEvent);\n this.dragging_ = true;\n const newEvent = new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERDRAG, this.map_, pointerEvent, this.dragging_, undefined, this.activePointers_);\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointermove event.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayMoveEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(new _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].POINTERMOVE, this.map_, pointerEvent, dragging));\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events,\n // when elm-pep is used as pointer events polyfill.\n const originalEvent = this.originalPointerMoveEvent_;\n if ((!originalEvent || originalEvent.defaultPrevented) && (typeof event.cancelable !== 'boolean' || event.cancelable === true)) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return this.dragging_ || Math.abs(pointerEvent.clientX - this.down_.clientX) > this.moveTolerance_ || Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey)(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].TOUCHMOVE, this.boundHandleTouchMove_);\n if (this.pointerdownListenerKey_) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey)(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n this.dragListenerKeys_.forEach(_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.element_ = null;\n super.disposeInternal();\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (MapBrowserEventHandler);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/MapBrowserEventHandler.js?");
/***/ }),
/***/ "./node_modules/ol/MapBrowserEventType.js":
/*!************************************************!*\
!*** ./node_modules/ol/MapBrowserEventType.js ***!
\************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/**\n * @module ol/MapBrowserEventType\n */\n\n\n/**\n * Constants for event names.\n * @enum {string}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].CLICK,\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].DBLCLICK,\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel'\n});\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/MapBrowserEventType.js?");
/***/ }),
/***/ "./node_modules/ol/MapEvent.js":
/*!*************************************!*\
!*** ./node_modules/ol/MapEvent.js ***!
\*************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/Event.js */ \"./node_modules/ol/events/Event.js\");\n/**\n * @module ol/MapEvent\n */\n\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map event.\n */\nclass MapEvent extends _events_Event_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {string} type Event type.\n * @param {import(\"./Map.js\").default} map Map.\n * @param {?import(\"./Map.js\").FrameState} [frameState] Frame state.\n */\n constructor(type, map, frameState) {\n super(type);\n\n /**\n * The map where the event occurred.\n * @type {import(\"./Map.js\").default}\n * @api\n */\n this.map = map;\n\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./Map.js\").FrameState}\n * @api\n */\n this.frameState = frameState !== undefined ? frameState : null;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (MapEvent);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/MapEvent.js?");
/***/ }),
/***/ "./node_modules/ol/MapEventType.js":
/*!*****************************************!*\
!*** ./node_modules/ol/MapEventType.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n /**\n * Triggered when loading of additional map data (tiles, images, features) starts.\n * @event module:ol/MapEvent~MapEvent#loadstart\n * @api\n */\n LOADSTART: 'loadstart',\n /**\n * Triggered when loading of additional map data has completed.\n * @event module:ol/MapEvent~MapEvent#loadend\n * @api\n */\n LOADEND: 'loadend'\n});\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/MapEventType.js?");
/***/ }),
/***/ "./node_modules/ol/MapProperty.js":
/*!****************************************!*\
!*** ./node_modules/ol/MapProperty.js ***!
\****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view'\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/MapProperty.js?");
/***/ }),
/***/ "./node_modules/ol/Object.js":
/*!***********************************!*\
!*** ./node_modules/ol/Object.js ***!
\***********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectEvent: function() { return /* binding */ ObjectEvent; }\n/* harmony export */ });\n/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/Event.js */ \"./node_modules/ol/events/Event.js\");\n/* harmony import */ var _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ObjectEventType.js */ \"./node_modules/ol/ObjectEventType.js\");\n/* harmony import */ var _Observable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Observable.js */ \"./node_modules/ol/Observable.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"./node_modules/ol/util.js\");\n/* harmony import */ var _obj_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./obj.js */ \"./node_modules/ol/obj.js\");\n/**\n * @module ol/Object\n */\n\n\n\n\n\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nclass ObjectEvent extends _events_Event_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n constructor(type, key, oldValue) {\n super(type);\n\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n this.key = key;\n\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n this.oldValue = oldValue;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nclass BaseObject extends _Observable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {Object} [values] An object with key-value pairs.\n */\n constructor(values) {\n super();\n\n /***\n * @type {ObjectOnSignature}\n */\n this.on;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.once;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.un;\n\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n (0,_util_js__WEBPACK_IMPORTED_MODULE_2__.getUid)(this);\n\n /**\n * @private\n * @type {Object|null}\n */\n this.values_ = null;\n if (values !== undefined) {\n this.setProperties(values);\n }\n }\n\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n get(key) {\n let value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n }\n\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n getKeys() {\n return this.values_ && Object.keys(this.values_) || [];\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n getProperties() {\n return this.values_ && Object.assign({}, this.values_) || {};\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return this.values_;\n }\n\n /**\n * @return {boolean} The object has properties.\n */\n hasProperties() {\n return !!this.values_;\n }\n\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n notify(key, oldValue) {\n let eventType;\n eventType = `change:${key}`;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n eventType = _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].PROPERTYCHANGE;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n addChangeListener(key, listener) {\n this.addEventListener(`change:${key}`, listener);\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n removeChangeListener(key, listener) {\n this.removeEventListener(`change:${key}`, listener);\n }\n\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [silent] Update without triggering an event.\n * @api\n */\n set(key, value, silent) {\n const values = this.values_ || (this.values_ = {});\n if (silent) {\n values[key] = value;\n } else {\n const oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n }\n\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [silent] Update without triggering an event.\n * @api\n */\n setProperties(values, silent) {\n for (const key in values) {\n this.set(key, values[key], silent);\n }\n }\n\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n applyProperties(source) {\n if (!source.values_) {\n return;\n }\n Object.assign(this.values_ || (this.values_ = {}), source.values_);\n }\n\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [silent] Unset without triggering an event.\n * @api\n */\n unset(key, silent) {\n if (this.values_ && key in this.values_) {\n const oldValue = this.values_[key];\n delete this.values_[key];\n if ((0,_obj_js__WEBPACK_IMPORTED_MODULE_4__.isEmpty)(this.values_)) {\n this.values_ = null;\n }\n if (!silent) {\n this.notify(key, oldValue);\n }\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseObject);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Object.js?");
/***/ }),
/***/ "./node_modules/ol/ObjectEventType.js":
/*!********************************************!*\
!*** ./node_modules/ol/ObjectEventType.js ***!
\********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange'\n});\n\n/**\n * @typedef {'propertychange'} Types\n */\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/ObjectEventType.js?");
/***/ }),
/***/ "./node_modules/ol/Observable.js":
/*!***************************************!*\
!*** ./node_modules/ol/Observable.js ***!
\***************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ unByKey: function() { return /* binding */ unByKey; }\n/* harmony export */ });\n/* harmony import */ var _events_Target_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/Target.js */ \"./node_modules/ol/events/Target.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.js */ \"./node_modules/ol/events.js\");\n/**\n * @module ol/Observable\n */\n\n\n\n\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nclass Observable extends _events_Target_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor() {\n super();\n this.on = /** @type {ObservableOnSignature} */\n this.onInternal;\n this.once = /** @type {ObservableOnSignature} */\n this.onceInternal;\n this.un = /** @type {ObservableOnSignature} */this.unInternal;\n\n /**\n * @private\n * @type {number}\n */\n this.revision_ = 0;\n }\n\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n changed() {\n ++this.revision_;\n this.dispatchEvent(_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CHANGE);\n }\n\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n getRevision() {\n return this.revision_;\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onInternal(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(this, type[i], listener);\n }\n return keys;\n }\n return (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listen)(this, /** @type {string} */type, listener);\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onceInternal(type, listener) {\n let key;\n if (Array.isArray(type)) {\n const len = type.length;\n key = new Array(len);\n for (let i = 0; i < len; ++i) {\n key[i] = (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listenOnce)(this, type[i], listener);\n }\n } else {\n key = (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.listenOnce)(this, /** @type {string} */type, listener);\n }\n /** @type {Object} */\n listener.ol_key = key;\n return key;\n }\n\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n unInternal(type, listener) {\n const key = /** @type {Object} */listener.ol_key;\n if (key) {\n unByKey(key);\n } else if (Array.isArray(type)) {\n for (let i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n } else {\n this.removeEventListener(type, listener);\n }\n }\n}\n\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nfunction unByKey(key) {\n if (Array.isArray(key)) {\n for (let i = 0, ii = key.length; i < ii; ++i) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey)(key[i]);\n }\n } else {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenByKey)(/** @type {import(\"./events.js\").EventsKey} */key);\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Observable);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Observable.js?");
/***/ }),
/***/ "./node_modules/ol/Overlay.js":
/*!************************************!*\
!*** ./node_modules/ol/Overlay.js ***!
\************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _MapEventType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./MapEventType.js */ \"./node_modules/ol/MapEventType.js\");\n/* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css.js */ \"./node_modules/ol/css.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./events.js */ \"./node_modules/ol/events.js\");\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/ol/dom.js\");\n/**\n * @module ol/Overlay\n */\n\n\n\n\n\n\n\n/**\n * @typedef {'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right'} Positioning\n * The overlay position: `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, or `'top-right'`.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number|string} [id] Set the overlay id. The overlay id can be used\n * with the {@link module:ol/Map~Map#getOverlayById} method.\n * @property {HTMLElement} [element] The overlay element.\n * @property {Array} [offset=[0, 0]] Offsets in pixels used when positioning\n * the overlay. The first element in the\n * array is the horizontal offset. A positive value shifts the overlay right.\n * The second element in the array is the vertical offset. A positive value\n * shifts the overlay down.\n * @property {import(\"./coordinate.js\").Coordinate} [position] The overlay position\n * in map projection.\n * @property {Positioning} [positioning='top-left'] Defines how\n * the overlay is actually positioned with respect to its `position` property.\n * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, and `'top-right'`.\n * @property {boolean} [stopEvent=true] Whether event propagation to the map\n * viewport should be stopped. If `true` the overlay is placed in the same\n * container as that of the controls (CSS class name\n * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container\n * with CSS class name specified by the `className` property.\n * @property {boolean} [insertFirst=true] Whether the overlay is inserted first\n * in the overlay container, or appended. If the overlay is placed in the same\n * container as that of the controls (see the `stopEvent` option) you will\n * probably set `insertFirst` to `true` so the overlay is displayed below the\n * controls.\n * @property {PanIntoViewOptions|boolean} [autoPan=false] Pan the map when calling\n * `setPosition`, so that the overlay is entirely visible in the current viewport.\n * @property {string} [className='ol-overlay-container ol-selectable'] CSS class\n * name.\n */\n\n/**\n * @typedef {Object} PanOptions\n * @property {number} [duration=1000] The duration of the animation in\n * milliseconds.\n * @property {function(number):number} [easing] The easing function to use. Can\n * be one from {@link module:ol/easing} or a custom function.\n * Default is {@link module:ol/easing.inAndOut}.\n */\n\n/**\n * @typedef {Object} PanIntoViewOptions\n * @property {PanOptions} [animation={}] The animation parameters for the pan\n * @property {number} [margin=20] The margin (in pixels) between the\n * overlay and the borders of the map when panning into view.\n */\n\n/**\n * @enum {string}\n * @protected\n */\nconst Property = {\n ELEMENT: 'element',\n MAP: 'map',\n OFFSET: 'offset',\n POSITION: 'position',\n POSITIONING: 'positioning'\n};\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:element'|'change:map'|'change:offset'|'change:position'|\n * 'change:positioning'} OverlayObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} OverlayOnSignature\n */\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location. Like {@link module:ol/control/Control~Control}, Overlays are\n * visible widgets. Unlike Controls, they are not in a fixed position on the\n * screen, but are tied to a geographical coordinate, so panning the map will\n * move an Overlay but not a Control.\n *\n * Example:\n *\n * import Overlay from 'ol/Overlay.js';\n *\n * // ...\n * const popup = new Overlay({\n * element: document.getElementById('popup'),\n * });\n * popup.setPosition(coordinate);\n * map.addOverlay(popup);\n *\n * @api\n */\nclass Overlay extends _Object_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {Options} options Overlay options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {OverlayOnSignature}\n */\n this.on;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.once;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.un;\n\n /**\n * @protected\n * @type {Options}\n */\n this.options = options;\n\n /**\n * @protected\n * @type {number|string|undefined}\n */\n this.id = options.id;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.insertFirst = options.insertFirst !== undefined ? options.insertFirst : true;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = document.createElement('div');\n this.element.className = options.className !== undefined ? options.className : 'ol-overlay-container ' + _css_js__WEBPACK_IMPORTED_MODULE_1__.CLASS_SELECTABLE;\n this.element.style.position = 'absolute';\n this.element.style.pointerEvents = 'auto';\n\n /**\n * @protected\n * @type {PanIntoViewOptions|undefined}\n */\n this.autoPan = options.autoPan === true ? {} : options.autoPan || undefined;\n\n /**\n * @protected\n * @type {{transform_: string,\n * visible: boolean}}\n */\n this.rendered = {\n transform_: '',\n visible: true\n };\n\n /**\n * @protected\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.mapPostrenderListenerKey = null;\n this.addChangeListener(Property.ELEMENT, this.handleElementChanged);\n this.addChangeListener(Property.MAP, this.handleMapChanged);\n this.addChangeListener(Property.OFFSET, this.handleOffsetChanged);\n this.addChangeListener(Property.POSITION, this.handlePositionChanged);\n this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged);\n if (options.element !== undefined) {\n this.setElement(options.element);\n }\n this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n this.setPositioning(options.positioning || 'top-left');\n if (options.position !== undefined) {\n this.setPosition(options.position);\n }\n }\n\n /**\n * Get the DOM element of this overlay.\n * @return {HTMLElement|undefined} The Element containing the overlay.\n * @observable\n * @api\n */\n getElement() {\n return /** @type {HTMLElement|undefined} */this.get(Property.ELEMENT);\n }\n\n /**\n * Get the overlay identifier which is set on constructor.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id;\n }\n\n /**\n * Get the map associated with this overlay.\n * @return {import(\"./Map.js\").default|null} The map that the\n * overlay is part of.\n * @observable\n * @api\n */\n getMap() {\n return /** @type {import(\"./Map.js\").default|null} */this.get(Property.MAP) || null;\n }\n\n /**\n * Get the offset of this overlay.\n * @return {Array} The offset.\n * @observable\n * @api\n */\n getOffset() {\n return /** @type {Array} */this.get(Property.OFFSET);\n }\n\n /**\n * Get the current position of this overlay.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The spatial point that the overlay is\n * anchored at.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */this.get(Property.POSITION);\n }\n\n /**\n * Get the current positioning of this overlay.\n * @return {Positioning} How the overlay is positioned\n * relative to its point on the map.\n * @observable\n * @api\n */\n getPositioning() {\n return /** @type {Positioning} */this.get(Property.POSITIONING);\n }\n\n /**\n * @protected\n */\n handleElementChanged() {\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_2__.removeChildren)(this.element);\n const element = this.getElement();\n if (element) {\n this.element.appendChild(element);\n }\n }\n\n /**\n * @protected\n */\n handleMapChanged() {\n if (this.mapPostrenderListenerKey) {\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_2__.removeNode)(this.element);\n (0,_events_js__WEBPACK_IMPORTED_MODULE_3__.unlistenByKey)(this.mapPostrenderListenerKey);\n this.mapPostrenderListenerKey = null;\n }\n const map = this.getMap();\n if (map) {\n this.mapPostrenderListenerKey = (0,_events_js__WEBPACK_IMPORTED_MODULE_3__.listen)(map, _MapEventType_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].POSTRENDER, this.render, this);\n this.updatePixelPosition();\n const container = this.stopEvent ? map.getOverlayContainerStopEvent() : map.getOverlayContainer();\n if (this.insertFirst) {\n container.insertBefore(this.element, container.childNodes[0] || null);\n } else {\n container.appendChild(this.element);\n }\n this.performAutoPan();\n }\n }\n\n /**\n * @protected\n */\n render() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handleOffsetChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handlePositionChanged() {\n this.updatePixelPosition();\n this.performAutoPan();\n }\n\n /**\n * @protected\n */\n handlePositioningChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * Set the DOM element to be associated with this overlay.\n * @param {HTMLElement|undefined} element The Element containing the overlay.\n * @observable\n * @api\n */\n setElement(element) {\n this.set(Property.ELEMENT, element);\n }\n\n /**\n * Set the map to be associated with this overlay.\n * @param {import(\"./Map.js\").default|null} map The map that the\n * overlay is part of. Pass `null` to just remove the overlay from the current map.\n * @observable\n * @api\n */\n setMap(map) {\n this.set(Property.MAP, map);\n }\n\n /**\n * Set the offset for this overlay.\n * @param {Array} offset Offset.\n * @observable\n * @api\n */\n setOffset(offset) {\n this.set(Property.OFFSET, offset);\n }\n\n /**\n * Set the position for this overlay. If the position is `undefined` the\n * overlay is hidden.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} position The spatial point that the overlay\n * is anchored at.\n * @observable\n * @api\n */\n setPosition(position) {\n this.set(Property.POSITION, position);\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary) using the configured autoPan parameters\n * @protected\n */\n performAutoPan() {\n if (this.autoPan) {\n this.panIntoView(this.autoPan);\n }\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary).\n * @param {PanIntoViewOptions} [panIntoViewOptions] Options for the pan action\n * @api\n */\n panIntoView(panIntoViewOptions) {\n const map = this.getMap();\n if (!map || !map.getTargetElement() || !this.get(Property.POSITION)) {\n return;\n }\n const mapRect = this.getRect(map.getTargetElement(), map.getSize());\n const element = this.getElement();\n const overlayRect = this.getRect(element, [(0,_dom_js__WEBPACK_IMPORTED_MODULE_2__.outerWidth)(element), (0,_dom_js__WEBPACK_IMPORTED_MODULE_2__.outerHeight)(element)]);\n panIntoViewOptions = panIntoViewOptions || {};\n const myMargin = panIntoViewOptions.margin === undefined ? 20 : panIntoViewOptions.margin;\n if (!(0,_extent_js__WEBPACK_IMPORTED_MODULE_5__.containsExtent)(mapRect, overlayRect)) {\n // the overlay is not completely inside the viewport, so pan the map\n const offsetLeft = overlayRect[0] - mapRect[0];\n const offsetRight = mapRect[2] - overlayRect[2];\n const offsetTop = overlayRect[1] - mapRect[1];\n const offsetBottom = mapRect[3] - overlayRect[3];\n const delta = [0, 0];\n if (offsetLeft < 0) {\n // move map to the left\n delta[0] = offsetLeft - myMargin;\n } else if (offsetRight < 0) {\n // move map to the right\n delta[0] = Math.abs(offsetRight) + myMargin;\n }\n if (offsetTop < 0) {\n // move map up\n delta[1] = offsetTop - myMargin;\n } else if (offsetBottom < 0) {\n // move map down\n delta[1] = Math.abs(offsetBottom) + myMargin;\n }\n if (delta[0] !== 0 || delta[1] !== 0) {\n const center = /** @type {import(\"./coordinate.js\").Coordinate} */\n map.getView().getCenterInternal();\n const centerPx = map.getPixelFromCoordinateInternal(center);\n if (!centerPx) {\n return;\n }\n const newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];\n const panOptions = panIntoViewOptions.animation || {};\n map.getView().animateInternal({\n center: map.getCoordinateFromPixelInternal(newCenterPx),\n duration: panOptions.duration,\n easing: panOptions.easing\n });\n }\n }\n }\n\n /**\n * Get the extent of an element relative to the document\n * @param {HTMLElement} element The element.\n * @param {import(\"./size.js\").Size} size The size of the element.\n * @return {import(\"./extent.js\").Extent} The extent.\n * @protected\n */\n getRect(element, size) {\n const box = element.getBoundingClientRect();\n const offsetX = box.left + window.pageXOffset;\n const offsetY = box.top + window.pageYOffset;\n return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];\n }\n\n /**\n * Set the positioning for this overlay.\n * @param {Positioning} positioning how the overlay is\n * positioned relative to its point on the map.\n * @observable\n * @api\n */\n setPositioning(positioning) {\n this.set(Property.POSITIONING, positioning);\n }\n\n /**\n * Modify the visibility of the element.\n * @param {boolean} visible Element visibility.\n * @protected\n */\n setVisible(visible) {\n if (this.rendered.visible !== visible) {\n this.element.style.display = visible ? '' : 'none';\n this.rendered.visible = visible;\n }\n }\n\n /**\n * Update pixel position.\n * @protected\n */\n updatePixelPosition() {\n const map = this.getMap();\n const position = this.getPosition();\n if (!map || !map.isRendered() || !position) {\n this.setVisible(false);\n return;\n }\n const pixel = map.getPixelFromCoordinate(position);\n const mapSize = map.getSize();\n this.updateRenderedPosition(pixel, mapSize);\n }\n\n /**\n * @param {import(\"./pixel.js\").Pixel} pixel The pixel location.\n * @param {import(\"./size.js\").Size|undefined} mapSize The map size.\n * @protected\n */\n updateRenderedPosition(pixel, mapSize) {\n const style = this.element.style;\n const offset = this.getOffset();\n const positioning = this.getPositioning();\n this.setVisible(true);\n const x = Math.round(pixel[0] + offset[0]) + 'px';\n const y = Math.round(pixel[1] + offset[1]) + 'px';\n let posX = '0%';\n let posY = '0%';\n if (positioning == 'bottom-right' || positioning == 'center-right' || positioning == 'top-right') {\n posX = '-100%';\n } else if (positioning == 'bottom-center' || positioning == 'center-center' || positioning == 'top-center') {\n posX = '-50%';\n }\n if (positioning == 'bottom-left' || positioning == 'bottom-center' || positioning == 'bottom-right') {\n posY = '-100%';\n } else if (positioning == 'center-left' || positioning == 'center-center' || positioning == 'center-right') {\n posY = '-50%';\n }\n const transform = `translate(${posX}, ${posY}) translate(${x}, ${y})`;\n if (this.rendered.transform_ != transform) {\n this.rendered.transform_ = transform;\n style.transform = transform;\n }\n }\n\n /**\n * returns the options this Overlay has been created with\n * @return {Options} overlay options\n */\n getOptions() {\n return this.options;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Overlay);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/Overlay.js?");
/***/ }),
/***/ "./node_modules/ol/TileQueue.js":
/*!**************************************!*\
!*** ./node_modules/ol/TileQueue.js ***!
\**************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getTilePriority: function() { return /* binding */ getTilePriority; }\n/* harmony export */ });\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _structs_PriorityQueue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./structs/PriorityQueue.js */ \"./node_modules/ol/structs/PriorityQueue.js\");\n/* harmony import */ var _TileState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TileState.js */ \"./node_modules/ol/TileState.js\");\n/**\n * @module ol/TileQueue\n */\n\n\n\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\n\nclass TileQueue extends _structs_PriorityQueue_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n },\n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */element[0].getKey();\n });\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */event.target;\n const state = tile.getState();\n if (state === _TileState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].LOADED || state === _TileState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERROR || state === _TileState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].EMPTY) {\n if (state !== _TileState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERROR) {\n tile.removeEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CHANGE, this.boundHandleTileChange_);\n }\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n let state, tile, tileKey;\n while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads && this.getCount() > 0) {\n tile = /** @type {import(\"./Tile.js\").default} */this.dequeue()[0];\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === _TileState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (TileQueue);\n\n/**\n * @param {import('./Map.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nfunction getTilePriority(frameState, tile, tileSourceKey, tileCenter, tileResolution) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return _structs_PriorityQueue_js__WEBPACK_IMPORTED_MODULE_0__.DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return _structs_PriorityQueue_js__WEBPACK_IMPORTED_MODULE_0__.DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/TileQueue.js?");
/***/ }),
/***/ "./node_modules/ol/TileState.js":
/*!**************************************!*\
!*** ./node_modules/ol/TileState.js ***!
\**************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/TileState.js?");
/***/ }),
/***/ "./node_modules/ol/View.js":
/*!*********************************!*\
!*** ./node_modules/ol/View.js ***!
\*********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createCenterConstraint: function() { return /* binding */ createCenterConstraint; },\n/* harmony export */ createResolutionConstraint: function() { return /* binding */ createResolutionConstraint; },\n/* harmony export */ createRotationConstraint: function() { return /* binding */ createRotationConstraint; },\n/* harmony export */ isNoopAnimation: function() { return /* binding */ isNoopAnimation; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _ViewHint_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ViewHint.js */ \"./node_modules/ol/ViewHint.js\");\n/* harmony import */ var _ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ViewProperty.js */ \"./node_modules/ol/ViewProperty.js\");\n/* harmony import */ var _tilegrid_common_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./tilegrid/common.js */ \"./node_modules/ol/tilegrid/common.js\");\n/* harmony import */ var _proj_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./proj.js */ \"./node_modules/ol/proj.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./functions.js */ \"./node_modules/ol/functions.js\");\n/* harmony import */ var _coordinate_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./coordinate.js */ \"./node_modules/ol/coordinate.js\");\n/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./asserts.js */ \"./node_modules/ol/asserts.js\");\n/* harmony import */ var _centerconstraint_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./centerconstraint.js */ \"./node_modules/ol/centerconstraint.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./math.js */ \"./node_modules/ol/math.js\");\n/* harmony import */ var _resolutionconstraint_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./resolutionconstraint.js */ \"./node_modules/ol/resolutionconstraint.js\");\n/* harmony import */ var _rotationconstraint_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./rotationconstraint.js */ \"./node_modules/ol/rotationconstraint.js\");\n/* harmony import */ var _easing_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./easing.js */ \"./node_modules/ol/easing.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./array.js */ \"./node_modules/ol/array.js\");\n/* harmony import */ var _geom_Polygon_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./geom/Polygon.js */ \"./node_modules/ol/geom/Polygon.js\");\n\n/**\n * @module ol/View\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to\n * fit the extent into. Defaults to the size of the map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired box size\n * (e.g. `map.getSize()`).\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center (in view projection coordinates).\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Like {@link import(\"./Map.js\").FrameState}, but just `viewState` and `extent`.\n * @typedef {Object} ViewStateLayerStateExtent\n * @property {State} viewState View state.\n * @property {import(\"./extent.js\").Extent} extent Extent (in user projection coordinates).\n * @property {Array} [layerStatesArray] Layer states.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends _Object_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n /**\n * @param {ViewOptions} [options] View options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n options = Object.assign({}, options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.createProjection)(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n if (options.projection) {\n (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.disableCoordinateWarning)();\n }\n if (options.center) {\n options.center = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserExtent)(options.extent, this.projection_);\n }\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = Object.assign({}, options);\n for (const key in _ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint\n };\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(options.center !== undefined ? options.center : null);\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenterInternal();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX = resolution / 2 * (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY = resolution / 2 * (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n return Object.assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = Object.assign({}, options);\n options.center = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(options.center, this.getProjection());\n }\n if (options.anchor) {\n options = Object.assign({}, options);\n options.anchor = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(options.anchor, this.getProjection());\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (animationCount > 1 && typeof arguments[animationCount - 1] === 'function') {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */arguments[i];\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || _easing_js__WEBPACK_IMPORTED_MODULE_4__.inAndOut,\n callback: callback\n };\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta = (0,_math_js__WEBPACK_IMPORTED_MODULE_5__.modulo)(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].ANIMATING, -this.hints_[_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction = animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution = progress === 1 ? animation.targetResolution : animation.sourceResolution + progress * (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(resolution, 0, size, true);\n this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor);\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (animation.sourceRotation !== undefined && animation.targetRotation !== undefined) {\n const rotation = progress === 1 ? (0,_math_js__WEBPACK_IMPORTED_MODULE_5__.modulo)(animation.targetRotation + Math.PI, 2 * Math.PI) - Math.PI : animation.sourceRotation + progress * (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(rotation, true);\n this.targetCenter_ = this.calculateCenterRotate(constrainedRotation, animation.anchor);\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this));\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n (0,_coordinate_js__WEBPACK_IMPORTED_MODULE_7__.rotate)(center, rotation - this.getRotation());\n (0,_coordinate_js__WEBPACK_IMPORTED_MODULE_7__.add)(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x = anchor[0] - resolution * (anchor[0] - currentCenter[0]) / currentResolution;\n const y = anchor[1] - resolution * (anchor[1] - currentCenter[1]) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(rotation) {\n const size = this.viewportSize_;\n if (rotation) {\n const w = size[0];\n const h = size[1];\n return [Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation)), Math.abs(w * Math.sin(rotation)) + Math.abs(h * Math.cos(rotation))];\n }\n return size;\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(size) {\n this.viewportSize_ = Array.isArray(size) ? size.slice() : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.toUserCoordinate)(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].CENTER);\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(hints) {\n if (hints !== undefined) {\n hints[0] = this.hints_[0];\n hints[1] = this.hints_[1];\n return hints;\n }\n return this.hints_.slice();\n }\n\n /**\n * Calculate the extent for the current view state and the passed box size.\n * @param {import(\"./size.js\").Size} [size] The pixel dimensions of the box\n * into which the calculated extent should fit. Defaults to the size of the\n * map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired\n * box size (e.g. `map.getSize()`).\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(size) {\n const extent = this.calculateExtentInternal(size);\n return (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.toUserExtent)(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(size) {\n size = size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */\n this.getCenterInternal();\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_8__.assert)(center, 'The view center is not defined');\n const resolution = /** @type {!number} */this.getResolution();\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_8__.assert)(resolution !== undefined, 'The view resolution is not defined');\n const rotation = /** @type {!number} */this.getRotation();\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_8__.assert)(rotation !== undefined, 'The view rotation is not defined');\n return (0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getForViewAndSize)(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */this.getZoomForResolution(this.minResolution_);\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({\n maxZoom: zoom\n }));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */this.getZoomForResolution(this.maxResolution_);\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({\n minZoom: zoom\n }));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({\n constrainResolution: enabled\n }));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].RESOLUTION);\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, size) {\n return this.getResolutionForExtentInternal((0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserExtent)(extent, this.getProjection()), size);\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, size) {\n size = size || this.getViewportSizeMinusPadding_();\n const xResolution = (0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getWidth)(extent) / size[0];\n const yResolution = (0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getHeight)(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(power) {\n power = power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ROTATION);\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(power) {\n const logPower = Math.log(power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(rotation) {\n let size = this.getViewportSize_(rotation);\n const padding = this.padding_;\n if (padding) {\n size = [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */\n this.getCenterInternal();\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(center, this.getViewportSize_(), [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom()\n };\n }\n\n /**\n * @return {ViewStateLayerStateExtent} Like `FrameState`, but just `viewState` and `extent`.\n */\n getViewStateAndExtent() {\n return {\n viewState: this.getState(),\n extent: this.calculateExtent()\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = (0,_array_js__WEBPACK_IMPORTED_MODULE_10__.linearFindNearest)(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n const baseLevel = (0,_math_js__WEBPACK_IMPORTED_MODULE_5__.clamp)(Math.floor(zoom), 0, this.resolutions_.length - 2);\n const zoomFactor = this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return this.resolutions_[baseLevel] / Math.pow(zoomFactor, (0,_math_js__WEBPACK_IMPORTED_MODULE_5__.clamp)(zoom - baseLevel, 0, 1));\n }\n return this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_);\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [options] Options.\n * @api\n */\n fit(geometryOrExtent, options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_8__.assert)(Array.isArray(geometryOrExtent) || typeof (/** @type {?} */geometryOrExtent.getSimplifiedGeometry) === 'function', 'Invalid extent or geometry provided as `geometry`');\n if (Array.isArray(geometryOrExtent)) {\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_8__.assert)(!(0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.isEmpty)(geometryOrExtent), 'Cannot fit empty extent provided as `geometry`');\n const extent = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserExtent)(geometryOrExtent, this.getProjection());\n geometry = (0,_geom_Polygon_js__WEBPACK_IMPORTED_MODULE_11__.fromExtent)(extent);\n } else if (geometryOrExtent.getType() === 'Circle') {\n const extent = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserExtent)(geometryOrExtent.getExtent(), this.getProjection());\n geometry = (0,_geom_Polygon_js__WEBPACK_IMPORTED_MODULE_11__.fromExtent)(extent);\n geometry.rotate(this.getRotation(), (0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getCenter)(extent));\n } else {\n const userProjection = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.getUserProjection)();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n geometryOrExtent.clone().transform(userProjection, this.getProjection());\n } else {\n geometry = geometryOrExtent;\n }\n }\n this.fitInternal(geometry, options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [options] Options.\n */\n fitInternal(geometry, options) {\n options = options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);\n resolution = isNaN(resolution) ? minResolution : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = (0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getCenter)(rotatedExtent);\n centerRot[0] += (padding[1] - padding[3]) / 2 * resolution;\n centerRot[1] += (padding[0] - padding[2]) / 2 * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : _functions_js__WEBPACK_IMPORTED_MODULE_12__.VOID;\n if (options.duration !== undefined) {\n this.animateInternal({\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing\n }, callback);\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal((0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(coordinate, this.getProjection()), size, position);\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(calculateCenterOn(coordinate, size, position, this.getResolution(), this.getRotation()));\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(center, size, [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n centerShift = [center[0] - shiftedCenter[0], center[1] - shiftedCenter[1]];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.toUserCoordinate)(this.targetCenter_, this.getProjection());\n this.setCenter([center[0] + deltaCoordinates[0], center[1] + deltaCoordinates[1]]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([center[0] + deltaCoordinates[0], center[1] + deltaCoordinates[1]]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, anchor) {\n anchor = anchor && (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving);\n if (anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, anchor);\n }\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, anchor) {\n if (anchor) {\n anchor = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n */\n adjustRotationInternal(delta, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(this.targetRotation_ + delta, isMoving);\n if (anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(center ? (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(center, this.getProjection()) : center);\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(doNotCancelAnims, forceMoving) {\n const isMoving = this.getAnimating() || this.getInteracting() || forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(this.targetRotation_, isMoving);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving);\n const newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ROTATION) !== newRotation) {\n this.set(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ROTATION, newRotation);\n }\n if (this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].RESOLUTION) !== newResolution) {\n this.set(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (!newCenter || !this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].CENTER) || !(0,_coordinate_js__WEBPACK_IMPORTED_MODULE_7__.equals)(this.get(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].CENTER), newCenter)) {\n this.set(_ViewProperty_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].CENTER, newCenter);\n }\n if (this.getAnimating() && !doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [duration] The animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n resolveConstraints(duration, resolutionDirection, anchor) {\n duration = duration !== undefined ? duration : 200;\n const direction = resolutionDirection || 0;\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(this.targetResolution_, direction, size);\n const newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, false, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n anchor = anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n if (this.getResolution() !== newResolution || this.getRotation() !== newRotation || !this.getCenterInternal() || !(0,_coordinate_js__WEBPACK_IMPORTED_MODULE_7__.equals)(this.getCenterInternal(), newCenter)) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: _easing_js__WEBPACK_IMPORTED_MODULE_4__.easeOut,\n anchor: anchor\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n this.setHint(_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n endInteraction(duration, resolutionDirection, anchor) {\n anchor = anchor && (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.fromUserCoordinate)(anchor, this.getProjection());\n this.endInteractionInternal(duration, resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n endInteractionInternal(duration, resolutionDirection, anchor) {\n if (!this.getInteracting()) {\n return;\n }\n this.setHint(_ViewHint_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].INTERACTING, -1);\n this.resolveConstraints(duration, resolutionDirection, anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(targetCenter, targetResolution || this.getResolution(), size);\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(this.getConstrainedResolution(targetRes, direction));\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, direction) {\n direction = direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nfunction createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth = options.smoothExtentConstraint !== undefined ? options.smoothExtentConstraint : true;\n return (0,_centerconstraint_js__WEBPACK_IMPORTED_MODULE_13__.createExtent)(options.extent, options.constrainOnlyCenter, smooth);\n }\n const projection = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.createProjection)(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return (0,_centerconstraint_js__WEBPACK_IMPORTED_MODULE_13__.createExtent)(extent, false, false);\n }\n return _centerconstraint_js__WEBPACK_IMPORTED_MODULE_13__.none;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nfunction createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n let minZoom = options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n let maxZoom = options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n const zoomFactor = options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n const multiWorld = options.multiWorld !== undefined ? options.multiWorld : false;\n const smooth = options.smoothResolutionConstraint !== undefined ? options.smoothResolutionConstraint : true;\n const showFullExtent = options.showFullExtent !== undefined ? options.showFullExtent : false;\n const projection = (0,_proj_js__WEBPACK_IMPORTED_MODULE_1__.createProjection)(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution = resolutions[maxZoom] !== undefined ? resolutions[maxZoom] : resolutions[resolutions.length - 1];\n if (options.constrainResolution) {\n resolutionConstraint = (0,_resolutionconstraint_js__WEBPACK_IMPORTED_MODULE_14__.createSnapToResolutions)(resolutions, smooth, !constrainOnlyCenter && extent, showFullExtent);\n } else {\n resolutionConstraint = (0,_resolutionconstraint_js__WEBPACK_IMPORTED_MODULE_14__.createMinMaxResolution)(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent ?\n // use an extent that can fit the whole world if need be\n 360 * _proj_js__WEBPACK_IMPORTED_MODULE_1__.METERS_PER_UNIT.degrees / projection.getMetersPerUnit() : Math.max((0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getWidth)(projExtent), (0,_extent_js__WEBPACK_IMPORTED_MODULE_9__.getHeight)(projExtent));\n const defaultMaxResolution = size / _tilegrid_common_js__WEBPACK_IMPORTED_MODULE_15__.DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n const defaultMinResolution = defaultMaxResolution / Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom = minZoom + Math.floor(Math.log(maxResolution / minResolution) / Math.log(zoomFactor));\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n if (options.constrainResolution) {\n resolutionConstraint = (0,_resolutionconstraint_js__WEBPACK_IMPORTED_MODULE_14__.createSnapToPower)(zoomFactor, maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n } else {\n resolutionConstraint = (0,_resolutionconstraint_js__WEBPACK_IMPORTED_MODULE_14__.createMinMaxResolution)(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nfunction createRotationConstraint(options) {\n const enableRotation = options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return (0,_rotationconstraint_js__WEBPACK_IMPORTED_MODULE_16__.createSnapToZero)();\n }\n if (constrainRotation === false) {\n return _rotationconstraint_js__WEBPACK_IMPORTED_MODULE_16__.none;\n }\n if (typeof constrainRotation === 'number') {\n return (0,_rotationconstraint_js__WEBPACK_IMPORTED_MODULE_16__.createSnapToN)(constrainRotation);\n }\n return _rotationconstraint_js__WEBPACK_IMPORTED_MODULE_16__.none;\n }\n return _rotationconstraint_js__WEBPACK_IMPORTED_MODULE_16__.disable;\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nfunction isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!(0,_coordinate_js__WEBPACK_IMPORTED_MODULE_7__.equals)(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n return [centerX, centerY];\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (View);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/View.js?");
/***/ }),
/***/ "./node_modules/ol/ViewHint.js":
/*!*************************************!*\
!*** ./node_modules/ol/ViewHint.js ***!
\*************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n ANIMATING: 0,\n INTERACTING: 1\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/ViewHint.js?");
/***/ }),
/***/ "./node_modules/ol/ViewProperty.js":
/*!*****************************************!*\
!*** ./node_modules/ol/ViewProperty.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation'\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/ViewProperty.js?");
/***/ }),
/***/ "./node_modules/ol/array.js":
/*!**********************************!*\
!*** ./node_modules/ol/array.js ***!
\**********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ascending: function() { return /* binding */ ascending; },\n/* harmony export */ binarySearch: function() { return /* binding */ binarySearch; },\n/* harmony export */ descending: function() { return /* binding */ descending; },\n/* harmony export */ equals: function() { return /* binding */ equals; },\n/* harmony export */ extend: function() { return /* binding */ extend; },\n/* harmony export */ isSorted: function() { return /* binding */ isSorted; },\n/* harmony export */ linearFindNearest: function() { return /* binding */ linearFindNearest; },\n/* harmony export */ remove: function() { return /* binding */ remove; },\n/* harmony export */ reverseSubArray: function() { return /* binding */ reverseSubArray; },\n/* harmony export */ stableSort: function() { return /* binding */ stableSort; }\n/* harmony export */ });\n/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nfunction binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || ascending;\n let low = 0;\n let high = haystack.length;\n let found = false;\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + (high - low >> 1);\n cmp = +comparator(haystack[mid], needle);\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nfunction ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is greater than, equal to, or less than the second.\n */\nfunction descending(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nfunction linearFindNearest(arr, target, direction) {\n if (arr[0] <= target) {\n return 0;\n }\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nfunction reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nfunction extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nfunction remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nfunction equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nfunction stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {\n index: i,\n value: arr[i]\n };\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nfunction isSorted(arr, func, strict) {\n const compare = func || ascending;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || strict && res === 0);\n });\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/array.js?");
/***/ }),
/***/ "./node_modules/ol/asserts.js":
/*!************************************!*\
!*** ./node_modules/ol/asserts.js ***!
\************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ assert: function() { return /* binding */ assert; }\n/* harmony export */ });\n/**\n * @module ol/asserts\n */\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {string} errorMessage Error message.\n */\nfunction assert(assertion, errorMessage) {\n if (!assertion) {\n throw new Error(errorMessage);\n }\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/asserts.js?");
/***/ }),
/***/ "./node_modules/ol/centerconstraint.js":
/*!*********************************************!*\
!*** ./node_modules/ol/centerconstraint.js ***!
\*********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createExtent: function() { return /* binding */ createExtent; },\n/* harmony export */ none: function() { return /* binding */ none; }\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"./node_modules/ol/math.js\");\n/**\n * @module ol/centerconstraint\n */\n\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nfunction createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @param {Array} [centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, isMoving, centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = centerShift ? centerShift[0] : 0;\n const shiftY = centerShift ? centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n let x = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.clamp)(center[0], minX, maxX);\n let y = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.clamp)(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x += -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) + ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y += -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) + ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nfunction none(center) {\n return center;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/centerconstraint.js?");
/***/ }),
/***/ "./node_modules/ol/color.js":
/*!**********************************!*\
!*** ./node_modules/ol/color.js ***!
\**********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ asArray: function() { return /* binding */ asArray; },\n/* harmony export */ asString: function() { return /* binding */ asString; },\n/* harmony export */ fromString: function() { return /* binding */ fromString; },\n/* harmony export */ isStringColor: function() { return /* binding */ isStringColor; },\n/* harmony export */ lchaToRgba: function() { return /* binding */ lchaToRgba; },\n/* harmony export */ normalize: function() { return /* binding */ normalize; },\n/* harmony export */ rgbaToLcha: function() { return /* binding */ rgbaToLcha; },\n/* harmony export */ toString: function() { return /* binding */ toString; },\n/* harmony export */ withAlpha: function() { return /* binding */ withAlpha; }\n/* harmony export */ });\n/* harmony import */ var color_space_lchuv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! color-space/lchuv.js */ \"./node_modules/color-space/lchuv.js\");\n/* harmony import */ var color_rgba__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! color-rgba */ \"./node_modules/color-rgba/index.js\");\n/* harmony import */ var color_space_rgb_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! color-space/rgb.js */ \"./node_modules/color-space/rgb.js\");\n/* harmony import */ var color_space_xyz_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! color-space/xyz.js */ \"./node_modules/color-space/xyz.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./math.js */ \"./node_modules/ol/math.js\");\n/**\n * @module ol/color\n */\n\n\n\n\n\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nfunction asString(color) {\n if (typeof color === 'string') {\n return color;\n }\n return toString(color);\n}\n\n/**\n * @type {number}\n */\nconst MAX_CACHE_SIZE = 1024;\n\n/**\n * We maintain a small cache of parsed strings. Whenever the cache grows too large,\n * we delete an arbitrary set of the entries.\n *\n * @type {Object}\n */\nconst cache = {};\n\n/**\n * @type {number}\n */\nlet cacheSize = 0;\n\n/**\n * @param {Color} color A color that may or may not have an alpha channel.\n * @return {Color} The input color with an alpha channel. If the input color has\n * an alpha channel, the input color will be returned unchanged. Otherwise, a new\n * array will be returned with the input color and an alpha channel of 1.\n */\nfunction withAlpha(color) {\n if (color.length === 4) {\n return color;\n }\n const output = color.slice();\n output[3] = 1;\n return output;\n}\n\n/**\n * @param {Color} color RGBA color.\n * @return {Color} LCHuv color with alpha.\n */\nfunction rgbaToLcha(color) {\n const output = color_space_xyz_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].lchuv(color_space_rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].xyz(color));\n output[3] = color[3];\n return output;\n}\n\n/**\n * @param {Color} color LCHuv color with alpha.\n * @return {Color} RGBA color.\n */\nfunction lchaToRgba(color) {\n const output = color_space_xyz_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].rgb(color_space_lchuv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].xyz(color));\n output[3] = color[3];\n return output;\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nfunction fromString(s) {\n if (cache.hasOwnProperty(s)) {\n return cache[s];\n }\n if (cacheSize >= MAX_CACHE_SIZE) {\n let i = 0;\n for (const key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n const color = (0,color_rgba__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(s);\n if (color.length !== 4) {\n throw new Error('Failed to parse \"' + s + '\" as color');\n }\n for (const c of color) {\n if (isNaN(c)) {\n throw new Error('Failed to parse \"' + s + '\" as color');\n }\n }\n normalize(color);\n cache[s] = color;\n ++cacheSize;\n return color;\n}\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nfunction asArray(color) {\n if (Array.isArray(color)) {\n return color;\n }\n return fromString(color);\n}\n\n/**\n * Exported for the tests.\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nfunction normalize(color) {\n color[0] = (0,_math_js__WEBPACK_IMPORTED_MODULE_4__.clamp)(color[0] + 0.5 | 0, 0, 255);\n color[1] = (0,_math_js__WEBPACK_IMPORTED_MODULE_4__.clamp)(color[1] + 0.5 | 0, 0, 255);\n color[2] = (0,_math_js__WEBPACK_IMPORTED_MODULE_4__.clamp)(color[2] + 0.5 | 0, 0, 255);\n color[3] = (0,_math_js__WEBPACK_IMPORTED_MODULE_4__.clamp)(color[3], 0, 1);\n return color;\n}\n\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nfunction toString(color) {\n let r = color[0];\n if (r != (r | 0)) {\n r = r + 0.5 | 0;\n }\n let g = color[1];\n if (g != (g | 0)) {\n g = g + 0.5 | 0;\n }\n let b = color[2];\n if (b != (b | 0)) {\n b = b + 0.5 | 0;\n }\n const a = color[3] === undefined ? 1 : Math.round(color[3] * 100) / 100;\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nfunction isStringColor(s) {\n try {\n fromString(s);\n return true;\n } catch (_) {\n return false;\n }\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/color.js?");
/***/ }),
/***/ "./node_modules/ol/colorlike.js":
/*!**************************************!*\
!*** ./node_modules/ol/colorlike.js ***!
\**************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ asColorLike: function() { return /* binding */ asColorLike; }\n/* harmony export */ });\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"./node_modules/ol/color.js\");\n/**\n * @module ol/colorlike\n */\n\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nfunction asColorLike(color) {\n if (Array.isArray(color)) {\n return (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.toString)(color);\n }\n return color;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/colorlike.js?");
/***/ }),
/***/ "./node_modules/ol/console.js":
/*!************************************!*\
!*** ./node_modules/ol/console.js ***!
\************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ error: function() { return /* binding */ error; },\n/* harmony export */ log: function() { return /* binding */ log; },\n/* harmony export */ setLevel: function() { return /* binding */ setLevel; },\n/* harmony export */ warn: function() { return /* binding */ warn; }\n/* harmony export */ });\n/**\n * @module ol/console\n */\n\n/**\n * @typedef {'info'|'warn'|'error'|'none'} Level\n */\n\n/**\n * @type {Object}\n */\nconst levels = {\n info: 1,\n warn: 2,\n error: 3,\n none: 4\n};\n\n/**\n * @type {number}\n */\nlet level = levels.info;\n\n/**\n * Set the logging level. By default, the level is set to 'info' and all\n * messages will be logged. Set to 'warn' to only display warnings and errors.\n * Set to 'error' to only display errors. Set to 'none' to silence all messages.\n *\n * @param {Level} l The new level.\n */\nfunction setLevel(l) {\n level = levels[l];\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nfunction log(...args) {\n if (level > levels.info) {\n return;\n }\n console.log(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nfunction warn(...args) {\n if (level > levels.warn) {\n return;\n }\n console.warn(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nfunction error(...args) {\n if (level > levels.error) {\n return;\n }\n console.error(...args); // eslint-disable-line no-console\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/console.js?");
/***/ }),
/***/ "./node_modules/ol/control/Attribution.js":
/*!************************************************!*\
!*** ./node_modules/ol/control/Attribution.js ***!
\************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.set.difference.v2.js */ \"./node_modules/core-js/modules/es.set.difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.set.intersection.v2.js */ \"./node_modules/core-js/modules/es.set.intersection.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.set.is-disjoint-from.v2.js */ \"./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.set.is-subset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-subset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.set.is-superset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-superset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.set.symmetric-difference.v2.js */ \"./node_modules/core-js/modules/es.set.symmetric-difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.set.union.v2.js */ \"./node_modules/core-js/modules/es.set.union.v2.js\");\n/* harmony import */ var _Control_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Control.js */ \"./node_modules/ol/control/Control.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../css.js */ \"./node_modules/ol/css.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../array.js */ \"./node_modules/ol/array.js\");\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../dom.js */ \"./node_modules/ol/dom.js\");\n\n\n\n\n\n\n\n/**\n * @module ol/control/Attribution\n */\n\n\n\n\n\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends _Control_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"] {\n /**\n * @param {Options} [options] Attribution options.\n */\n constructor(options) {\n options = options ? options : {};\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ = options.collapsible !== undefined ? options.collapsible : true;\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n const className = options.className !== undefined ? options.className : 'ol-attribution';\n const tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n const expandClassName = options.expandClassName !== undefined ? options.expandClassName : className + '-expand';\n const collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n const collapseClassName = options.collapseClassName !== undefined ? options.collapseClassName : className + '-collapse';\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n const label = options.label !== undefined ? options.label : 'i';\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n const activeLabel = this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n this.toggleButton_.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].CLICK, this.handleClick_.bind(this), false);\n const cssClasses = className + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_9__.CLASS_UNSELECTABLE + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_9__.CLASS_CONTROL + (this.collapsed_ && this.collapsible_ ? ' ' + _css_js__WEBPACK_IMPORTED_MODULE_9__.CLASS_COLLAPSED : '') + (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n const visibleAttributions = Array.from(new Set(this.getMap().getAllLayers().flatMap(layer => layer.getAttributions(frameState))));\n const collapsible = !this.getMap().getAllLayers().some(layer => layer.getSource() && layer.getSource().getAttributionsCollapsible() === false);\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n }\n\n /**\n * @private\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n const attributions = this.collectSourceAttributions_(frameState);\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n if ((0,_array_js__WEBPACK_IMPORTED_MODULE_10__.equals)(attributions, this.renderedAttributions_)) {\n return;\n }\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_11__.removeChildren)(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(_css_js__WEBPACK_IMPORTED_MODULE_9__.CLASS_COLLAPSED);\n if (this.collapsed_) {\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_11__.replaceNode)(this.collapseLabel_, this.label_);\n } else {\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_11__.replaceNode)(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Attribution);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/control/Attribution.js?");
/***/ }),
/***/ "./node_modules/ol/control/Control.js":
/*!********************************************!*\
!*** ./node_modules/ol/control/Control.js ***!
\********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _MapEventType_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../MapEventType.js */ \"./node_modules/ol/MapEventType.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../functions.js */ \"./node_modules/ol/functions.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../events.js */ \"./node_modules/ol/events.js\");\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom.js */ \"./node_modules/ol/dom.js\");\n\n/**\n * @module ol/control/Control\n */\n\n\n\n\n\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * const myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends _Object_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n if (options.render) {\n this.render = options.render;\n }\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_2__.removeNode)(this.element);\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n (0,_dom_js__WEBPACK_IMPORTED_MODULE_2__.removeNode)(this.element);\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n (0,_events_js__WEBPACK_IMPORTED_MODULE_3__.unlistenByKey)(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_ ? this.target_ : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== _functions_js__WEBPACK_IMPORTED_MODULE_4__.VOID) {\n this.listenerKeys.push((0,_events_js__WEBPACK_IMPORTED_MODULE_3__.listen)(map, _MapEventType_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].POSTRENDER, this.render, this));\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ = typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Control);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/control/Control.js?");
/***/ }),
/***/ "./node_modules/ol/control/Rotate.js":
/*!*******************************************!*\
!*** ./node_modules/ol/control/Rotate.js ***!
\*******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Control_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Control.js */ \"./node_modules/ol/control/Control.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../css.js */ \"./node_modules/ol/css.js\");\n/* harmony import */ var _easing_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../easing.js */ \"./node_modules/ol/easing.js\");\n/**\n * @module ol/control/Rotate\n */\n\n\n\n\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends _Control_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {Options} [options] Rotate options.\n */\n constructor(options) {\n options = options ? options : {};\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target\n });\n const className = options.className !== undefined ? options.className : 'ol-rotate';\n const label = options.label !== undefined ? options.label : '\\u21E7';\n const compassClassName = options.compassClassName !== undefined ? options.compassClassName : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n button.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CLICK, this.handleClick_.bind(this), false);\n const cssClasses = className + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_UNSELECTABLE + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n if (this.autoHide_) {\n this.element.classList.add(_css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: _easing_js__WEBPACK_IMPORTED_MODULE_3__.easeOut\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(_css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(_css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(_css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rotate);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/control/Rotate.js?");
/***/ }),
/***/ "./node_modules/ol/control/Zoom.js":
/*!*****************************************!*\
!*** ./node_modules/ol/control/Zoom.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Control_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Control.js */ \"./node_modules/ol/control/Control.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../css.js */ \"./node_modules/ol/css.js\");\n/* harmony import */ var _easing_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../easing.js */ \"./node_modules/ol/easing.js\");\n/**\n * @module ol/control/Zoom\n */\n\n\n\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends _Control_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {Options} [options] Zoom options.\n */\n constructor(options) {\n options = options ? options : {};\n super({\n element: document.createElement('div'),\n target: options.target\n });\n const className = options.className !== undefined ? options.className : 'ol-zoom';\n const delta = options.delta !== undefined ? options.delta : 1;\n const zoomInClassName = options.zoomInClassName !== undefined ? options.zoomInClassName : className + '-in';\n const zoomOutClassName = options.zoomOutClassName !== undefined ? options.zoomOutClassName : className + '-out';\n const zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n const zoomInTipLabel = options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel = options.zoomOutTipLabel !== undefined ? options.zoomOutTipLabel : 'Zoom out';\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(typeof zoomInLabel === 'string' ? document.createTextNode(zoomInLabel) : zoomInLabel);\n inElement.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CLICK, this.handleClick_.bind(this, delta), false);\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(typeof zoomOutLabel === 'string' ? document.createTextNode(zoomOutLabel) : zoomOutLabel);\n outElement.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CLICK, this.handleClick_.bind(this, -delta), false);\n const cssClasses = className + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_UNSELECTABLE + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: _easing_js__WEBPACK_IMPORTED_MODULE_3__.easeOut\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Zoom);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/control/Zoom.js?");
/***/ }),
/***/ "./node_modules/ol/control/ZoomSlider.js":
/*!***********************************************!*\
!*** ./node_modules/ol/control/ZoomSlider.js ***!
\***********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Control_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Control.js */ \"./node_modules/ol/control/Control.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pointer/EventType.js */ \"./node_modules/ol/pointer/EventType.js\");\n/* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../css.js */ \"./node_modules/ol/css.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../math.js */ \"./node_modules/ol/math.js\");\n/* harmony import */ var _easing_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../easing.js */ \"./node_modules/ol/easing.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../events.js */ \"./node_modules/ol/events.js\");\n/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../events/Event.js */ \"./node_modules/ol/events/Event.js\");\n\n/**\n * @module ol/control/ZoomSlider\n */\n\n\n\n\n\n\n\n\n\n\n/**\n * The enum for available directions.\n *\n * @enum {number}\n */\nconst Direction = {\n VERTICAL: 0,\n HORIZONTAL: 1\n};\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-zoomslider'] CSS class name.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A slider type of control for zooming.\n *\n * Example:\n *\n * map.addControl(new ZoomSlider());\n *\n * @api\n */\nclass ZoomSlider extends _Control_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {Options} [options] Zoom slider options.\n */\n constructor(options) {\n options = options ? options : {};\n super({\n target: options.target,\n element: document.createElement('div'),\n render: options.render\n });\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * Will hold the current resolution of the view.\n *\n * @type {number|undefined}\n * @private\n */\n this.currentResolution_ = undefined;\n\n /**\n * The direction of the slider. Will be determined from actual display of the\n * container and defaults to Direction.VERTICAL.\n *\n * @type {Direction}\n * @private\n */\n this.direction_ = Direction.VERTICAL;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_;\n\n /**\n * @type {number}\n * @private\n */\n this.heightLimit_ = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.widthLimit_ = 0;\n\n /**\n * @type {number|undefined}\n * @private\n */\n this.startX_;\n\n /**\n * @type {number|undefined}\n * @private\n */\n this.startY_;\n\n /**\n * The calculated thumb size (border box plus margins). Set when initSlider_\n * is called.\n * @type {import(\"../size.js\").Size}\n * @private\n */\n this.thumbSize_ = null;\n\n /**\n * Whether the slider is initialized.\n * @type {boolean}\n * @private\n */\n this.sliderInitialized_ = false;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n const className = options.className !== undefined ? options.className : 'ol-zoomslider';\n const thumbElement = document.createElement('button');\n thumbElement.setAttribute('type', 'button');\n thumbElement.className = className + '-thumb ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_UNSELECTABLE;\n const containerElement = this.element;\n containerElement.className = className + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_UNSELECTABLE + ' ' + _css_js__WEBPACK_IMPORTED_MODULE_2__.CLASS_CONTROL;\n containerElement.appendChild(thumbElement);\n containerElement.addEventListener(_pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERDOWN, this.handleDraggerStart_.bind(this), false);\n containerElement.addEventListener(_pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERMOVE, this.handleDraggerDrag_.bind(this), false);\n containerElement.addEventListener(_pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERUP, this.handleDraggerEnd_.bind(this), false);\n containerElement.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].CLICK, this.handleContainerClick_.bind(this), false);\n thumbElement.addEventListener(_events_EventType_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].CLICK, _events_Event_js__WEBPACK_IMPORTED_MODULE_5__.stopPropagation, false);\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n super.setMap(map);\n if (map) {\n map.render();\n }\n }\n\n /**\n * Initializes the slider element. This will determine and set this controls\n * direction_ and also constrain the dragging of the thumb to always be within\n * the bounds of the container.\n *\n * @return {boolean} Initialization successful\n * @private\n */\n initSlider_() {\n const container = this.element;\n let containerWidth = container.offsetWidth;\n let containerHeight = container.offsetHeight;\n if (containerWidth === 0 && containerHeight === 0) {\n return this.sliderInitialized_ = false;\n }\n const containerStyle = getComputedStyle(container);\n containerWidth -= parseFloat(containerStyle['paddingRight']) + parseFloat(containerStyle['paddingLeft']);\n containerHeight -= parseFloat(containerStyle['paddingTop']) + parseFloat(containerStyle['paddingBottom']);\n const thumb = /** @type {HTMLElement} */container.firstElementChild;\n const thumbStyle = getComputedStyle(thumb);\n const thumbWidth = thumb.offsetWidth + parseFloat(thumbStyle['marginRight']) + parseFloat(thumbStyle['marginLeft']);\n const thumbHeight = thumb.offsetHeight + parseFloat(thumbStyle['marginTop']) + parseFloat(thumbStyle['marginBottom']);\n this.thumbSize_ = [thumbWidth, thumbHeight];\n if (containerWidth > containerHeight) {\n this.direction_ = Direction.HORIZONTAL;\n this.widthLimit_ = containerWidth - thumbWidth;\n } else {\n this.direction_ = Direction.VERTICAL;\n this.heightLimit_ = containerHeight - thumbHeight;\n }\n return this.sliderInitialized_ = true;\n }\n\n /**\n * @param {PointerEvent} event The browser event to handle.\n * @private\n */\n handleContainerClick_(event) {\n const view = this.getMap().getView();\n const relativePosition = this.getRelativePosition_(event.offsetX - this.thumbSize_[0] / 2, event.offsetY - this.thumbSize_[1] / 2);\n const resolution = this.getResolutionForPosition_(relativePosition);\n const zoom = view.getConstrainedZoom(view.getZoomForResolution(resolution));\n view.animateInternal({\n zoom: zoom,\n duration: this.duration_,\n easing: _easing_js__WEBPACK_IMPORTED_MODULE_6__.easeOut\n });\n }\n\n /**\n * Handle dragger start events.\n * @param {PointerEvent} event The drag event.\n * @private\n */\n handleDraggerStart_(event) {\n if (!this.dragging_ && event.target === this.element.firstElementChild) {\n const element = /** @type {HTMLElement} */\n this.element.firstElementChild;\n this.getMap().getView().beginInteraction();\n this.startX_ = event.clientX - parseFloat(element.style.left);\n this.startY_ = event.clientY - parseFloat(element.style.top);\n this.dragging_ = true;\n if (this.dragListenerKeys_.length === 0) {\n const drag = this.handleDraggerDrag_;\n const end = this.handleDraggerEnd_;\n const doc = this.getMap().getOwnerDocument();\n this.dragListenerKeys_.push((0,_events_js__WEBPACK_IMPORTED_MODULE_7__.listen)(doc, _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERMOVE, drag, this), (0,_events_js__WEBPACK_IMPORTED_MODULE_7__.listen)(doc, _pointer_EventType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].POINTERUP, end, this));\n }\n }\n }\n\n /**\n * Handle dragger drag events.\n *\n * @param {PointerEvent} event The drag event.\n * @private\n */\n handleDraggerDrag_(event) {\n if (this.dragging_) {\n const deltaX = event.clientX - this.startX_;\n const deltaY = event.clientY - this.startY_;\n const relativePosition = this.getRelativePosition_(deltaX, deltaY);\n this.currentResolution_ = this.getResolutionForPosition_(relativePosition);\n this.getMap().getView().setResolution(this.currentResolution_);\n }\n }\n\n /**\n * Handle dragger end events.\n * @param {PointerEvent} event The drag event.\n * @private\n */\n handleDraggerEnd_(event) {\n if (this.dragging_) {\n const view = this.getMap().getView();\n view.endInteraction();\n this.dragging_ = false;\n this.startX_ = undefined;\n this.startY_ = undefined;\n this.dragListenerKeys_.forEach(_events_js__WEBPACK_IMPORTED_MODULE_7__.unlistenByKey);\n this.dragListenerKeys_.length = 0;\n }\n }\n\n /**\n * Positions the thumb inside its container according to the given resolution.\n *\n * @param {number} res The res.\n * @private\n */\n setThumbPosition_(res) {\n const position = this.getPositionForResolution_(res);\n const thumb = /** @type {HTMLElement} */this.element.firstElementChild;\n if (this.direction_ == Direction.HORIZONTAL) {\n thumb.style.left = this.widthLimit_ * position + 'px';\n } else {\n thumb.style.top = this.heightLimit_ * position + 'px';\n }\n }\n\n /**\n * Calculates the relative position of the thumb given x and y offsets. The\n * relative position scales from 0 to 1. The x and y offsets are assumed to be\n * in pixel units within the dragger limits.\n *\n * @param {number} x Pixel position relative to the left of the slider.\n * @param {number} y Pixel position relative to the top of the slider.\n * @return {number} The relative position of the thumb.\n * @private\n */\n getRelativePosition_(x, y) {\n let amount;\n if (this.direction_ === Direction.HORIZONTAL) {\n amount = x / this.widthLimit_;\n } else {\n amount = y / this.heightLimit_;\n }\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_8__.clamp)(amount, 0, 1);\n }\n\n /**\n * Calculates the corresponding resolution of the thumb given its relative\n * position (where 0 is the minimum and 1 is the maximum).\n *\n * @param {number} position The relative position of the thumb.\n * @return {number} The corresponding resolution.\n * @private\n */\n getResolutionForPosition_(position) {\n const fn = this.getMap().getView().getResolutionForValueFunction();\n return fn(1 - position);\n }\n\n /**\n * Determines the relative position of the slider for the given resolution. A\n * relative position of 0 corresponds to the minimum view resolution. A\n * relative position of 1 corresponds to the maximum view resolution.\n *\n * @param {number} res The resolution.\n * @return {number} The relative position value (between 0 and 1).\n * @private\n */\n getPositionForResolution_(res) {\n const fn = this.getMap().getView().getValueForResolutionFunction();\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_8__.clamp)(1 - fn(res), 0, 1);\n }\n\n /**\n * Update the zoomslider element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n if (!mapEvent.frameState) {\n return;\n }\n if (!this.sliderInitialized_ && !this.initSlider_()) {\n return;\n }\n const res = mapEvent.frameState.viewState.resolution;\n this.currentResolution_ = res;\n this.setThumbPosition_(res);\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (ZoomSlider);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/control/ZoomSlider.js?");
/***/ }),
/***/ "./node_modules/ol/control/defaults.js":
/*!*********************************************!*\
!*** ./node_modules/ol/control/defaults.js ***!
\*********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defaults: function() { return /* binding */ defaults; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Attribution_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Attribution.js */ \"./node_modules/ol/control/Attribution.js\");\n/* harmony import */ var _Collection_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Collection.js */ \"./node_modules/ol/Collection.js\");\n/* harmony import */ var _Rotate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Rotate.js */ \"./node_modules/ol/control/Rotate.js\");\n/* harmony import */ var _Zoom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Zoom.js */ \"./node_modules/ol/control/Zoom.js\");\n\n/**\n * @module ol/control/defaults\n */\n\n\n\n\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [options] Options for the default controls.\n * @return {Collection} A collection of controls\n * to be used with the {@link module:ol/Map~Map} constructor's `controls` option.\n * @api\n */\nfunction defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const controls = new _Collection_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n const zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new _Zoom_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](options.zoomOptions));\n }\n const rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new _Rotate_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](options.rotateOptions));\n }\n const attributionControl = options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new _Attribution_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"](options.attributionOptions));\n }\n return controls;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/control/defaults.js?");
/***/ }),
/***/ "./node_modules/ol/coordinate.js":
/*!***************************************!*\
!*** ./node_modules/ol/coordinate.js ***!
\***************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ add: function() { return /* binding */ add; },\n/* harmony export */ closestOnCircle: function() { return /* binding */ closestOnCircle; },\n/* harmony export */ closestOnSegment: function() { return /* binding */ closestOnSegment; },\n/* harmony export */ createStringXY: function() { return /* binding */ createStringXY; },\n/* harmony export */ degreesToStringHDMS: function() { return /* binding */ degreesToStringHDMS; },\n/* harmony export */ distance: function() { return /* binding */ distance; },\n/* harmony export */ equals: function() { return /* binding */ equals; },\n/* harmony export */ format: function() { return /* binding */ format; },\n/* harmony export */ getWorldsAway: function() { return /* binding */ getWorldsAway; },\n/* harmony export */ rotate: function() { return /* binding */ rotate; },\n/* harmony export */ scale: function() { return /* binding */ scale; },\n/* harmony export */ squaredDistance: function() { return /* binding */ squaredDistance; },\n/* harmony export */ squaredDistanceToSegment: function() { return /* binding */ squaredDistanceToSegment; },\n/* harmony export */ toStringHDMS: function() { return /* binding */ toStringHDMS; },\n/* harmony export */ toStringXY: function() { return /* binding */ toStringXY; },\n/* harmony export */ wrapX: function() { return /* binding */ wrapX; }\n/* harmony export */ });\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"./node_modules/ol/math.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string.js */ \"./node_modules/ol/string.js\");\n/**\n * @module ol/coordinate\n */\n\n\n\n\n/**\n * An array of numbers representing an `xy`, `xyz` or `xyzm` coordinate.\n * Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nfunction add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nfunction closestOnCircle(coordinate, circle) {\n const r = circle.getRadius();\n const center = circle.getCenter();\n const x0 = center[0];\n const y0 = center[1];\n const x1 = coordinate[0];\n const y1 = coordinate[1];\n let dx = x1 - x0;\n const dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n const d = Math.sqrt(dx * dx + dy * dy);\n const x = x0 + r * dx / d;\n const y = y0 + r * dy / d;\n return [x, y];\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nfunction closestOnSegment(coordinate, segment) {\n const x0 = coordinate[0];\n const y0 = coordinate[1];\n const start = segment[0];\n const end = segment[1];\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n const along = dx === 0 && dy === 0 ? 0 : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n let x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n } else if (along >= 1) {\n x = x2;\n y = y2;\n } else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const stringifyFunc = createStringXY();\n * const out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const stringifyFunc = createStringXY(2);\n * const out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nfunction createStringXY(fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, fractionDigits);\n }\n );\n}\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nfunction degreesToStringHDMS(hemispheres, degrees, fractionDigits) {\n const normalizedDegrees = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.modulo)(degrees + 180, 360) - 180;\n const x = Math.abs(3600 * normalizedDegrees);\n const decimals = fractionDigits || 0;\n let deg = Math.floor(x / 3600);\n let min = Math.floor((x - deg * 3600) / 60);\n let sec = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.toFixed)(x - deg * 3600 - min * 60, decimals);\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n let hdms = deg + '\\u00b0';\n if (min !== 0 || sec !== 0) {\n hdms += ' ' + (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.padNumber)(min, 2) + '\\u2032';\n }\n if (sec !== 0) {\n hdms += ' ' + (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.padNumber)(sec, 2, decimals) + '\\u2033';\n }\n if (normalizedDegrees !== 0) {\n hdms += ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n }\n return hdms;\n}\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const template = 'Coordinate is ({x}|{y}).';\n * const out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const template = 'Coordinate is ({x}|{y}).';\n * const out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nfunction format(coordinate, template, fractionDigits) {\n if (coordinate) {\n return template.replace('{x}', coordinate[0].toFixed(fractionDigits)).replace('{y}', coordinate[1].toFixed(fractionDigits));\n }\n return '';\n}\n\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nfunction equals(coordinate1, coordinate2) {\n let equals = true;\n for (let i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nfunction rotate(coordinate, angle) {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nfunction scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nfunction squaredDistance(coord1, coord2) {\n const dx = coord1[0] - coord2[0];\n const dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nfunction distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nfunction squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nfunction toStringHDMS(coordinate, fractionDigits) {\n if (coordinate) {\n return degreesToStringHDMS('NS', coordinate[1], fractionDigits) + ' ' + degreesToStringHDMS('EW', coordinate[0], fractionDigits);\n }\n return '';\n}\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nfunction toStringXY(coordinate, fractionDigits) {\n return format(coordinate, '{x}, {y}', fractionDigits);\n}\n\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nfunction wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n const worldWidth = (0,_extent_js__WEBPACK_IMPORTED_MODULE_2__.getWidth)(projection.getExtent());\n const worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nfunction getWorldsAway(coordinate, projection, sourceExtentWidth) {\n const projectionExtent = projection.getExtent();\n let worldsAway = 0;\n if (projection.canWrapX() && (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])) {\n sourceExtentWidth = sourceExtentWidth || (0,_extent_js__WEBPACK_IMPORTED_MODULE_2__.getWidth)(projectionExtent);\n worldsAway = Math.floor((coordinate[0] - projectionExtent[0]) / sourceExtentWidth);\n }\n return worldsAway;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/coordinate.js?");
/***/ }),
/***/ "./node_modules/ol/css.js":
/*!********************************!*\
!*** ./node_modules/ol/css.js ***!
\********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CLASS_COLLAPSED: function() { return /* binding */ CLASS_COLLAPSED; },\n/* harmony export */ CLASS_CONTROL: function() { return /* binding */ CLASS_CONTROL; },\n/* harmony export */ CLASS_HIDDEN: function() { return /* binding */ CLASS_HIDDEN; },\n/* harmony export */ CLASS_SELECTABLE: function() { return /* binding */ CLASS_SELECTABLE; },\n/* harmony export */ CLASS_UNSELECTABLE: function() { return /* binding */ CLASS_UNSELECTABLE; },\n/* harmony export */ CLASS_UNSUPPORTED: function() { return /* binding */ CLASS_UNSUPPORTED; },\n/* harmony export */ getFontParameters: function() { return /* binding */ getFontParameters; }\n/* harmony export */ });\n/**\n * @module ol/css\n */\n\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nconst CLASS_HIDDEN = 'ol-hidden';\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nconst CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nconst CLASS_UNSELECTABLE = 'ol-unselectable';\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nconst CLASS_UNSUPPORTED = 'ol-unsupported';\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nconst CLASS_CONTROL = 'ol-control';\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nconst CLASS_COLLAPSED = 'ol-collapsed';\n\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nconst fontRegEx = new RegExp(['^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)', '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)', '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)', '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?', '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))', '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))', '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$'].join(''), 'i');\n/** @type {Array<'style'|'variant'|'weight'|'size'|'lineHeight'|'family'>} */\nconst fontRegExMatchIndex = ['style', 'variant', 'weight', 'size', 'lineHeight', 'family'];\n\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nconst getFontParameters = function (fontSpec) {\n const match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n const style = /** @type {FontParameters} */{\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal'\n };\n for (let i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n const value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/css.js?");
/***/ }),
/***/ "./node_modules/ol/dom.js":
/*!********************************!*\
!*** ./node_modules/ol/dom.js ***!
\********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createCanvasContext2D: function() { return /* binding */ createCanvasContext2D; },\n/* harmony export */ outerHeight: function() { return /* binding */ outerHeight; },\n/* harmony export */ outerWidth: function() { return /* binding */ outerWidth; },\n/* harmony export */ releaseCanvas: function() { return /* binding */ releaseCanvas; },\n/* harmony export */ removeChildren: function() { return /* binding */ removeChildren; },\n/* harmony export */ removeNode: function() { return /* binding */ removeNode; },\n/* harmony export */ replaceChildren: function() { return /* binding */ replaceChildren; },\n/* harmony export */ replaceNode: function() { return /* binding */ replaceNode; }\n/* harmony export */ });\n/* harmony import */ var _has_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./has.js */ \"./node_modules/ol/has.js\");\n\n\n/**\n * @module ol/dom\n */\n\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [width] Canvas width.\n * @param {number} [height] Canvas height.\n * @param {Array} [canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [settings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nfunction createCanvasContext2D(width, height, canvasPool, settings) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n let canvas;\n if (canvasPool && canvasPool.length) {\n canvas = /** @type {HTMLCanvasElement} */canvasPool.shift();\n } else if (_has_js__WEBPACK_IMPORTED_MODULE_0__.WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(width || 300, height || 300);\n } else {\n canvas = document.createElement('canvas');\n }\n if (width) {\n canvas.width = width;\n }\n if (height) {\n canvas.height = height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */canvas.getContext('2d', settings);\n}\n\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction releaseCanvas(context) {\n const canvas = context.canvas;\n canvas.width = 1;\n canvas.height = 1;\n context.clearRect(0, 0, 1, 1);\n}\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nfunction outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n return width;\n}\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nfunction outerHeight(element) {\n let height = element.offsetHeight;\n const style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nfunction replaceNode(newNode, oldNode) {\n const parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n\n/**\n * @param {Node} node The node to remove.\n * @return {Node|null} The node that was removed or null.\n */\nfunction removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nfunction removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nfunction replaceChildren(node, children) {\n const oldChildren = node.childNodes;\n for (let i = 0; true; ++i) {\n const oldChild = oldChildren[i];\n const newChild = children[i];\n\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/dom.js?");
/***/ }),
/***/ "./node_modules/ol/easing.js":
/*!***********************************!*\
!*** ./node_modules/ol/easing.js ***!
\***********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ easeIn: function() { return /* binding */ easeIn; },\n/* harmony export */ easeOut: function() { return /* binding */ easeOut; },\n/* harmony export */ inAndOut: function() { return /* binding */ inAndOut; },\n/* harmony export */ linear: function() { return /* binding */ linear; },\n/* harmony export */ upAndDown: function() { return /* binding */ upAndDown; }\n/* harmony export */ });\n/**\n * @module ol/easing\n */\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nfunction easeIn(t) {\n return Math.pow(t, 3);\n}\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nfunction easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nfunction inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nfunction linear(t) {\n return t;\n}\n\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nfunction upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n }\n return 1 - inAndOut(2 * (t - 0.5));\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/easing.js?");
/***/ }),
/***/ "./node_modules/ol/events.js":
/*!***********************************!*\
!*** ./node_modules/ol/events.js ***!
\***********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ listen: function() { return /* binding */ listen; },\n/* harmony export */ listenOnce: function() { return /* binding */ listenOnce; },\n/* harmony export */ unlistenByKey: function() { return /* binding */ unlistenByKey; }\n/* harmony export */ });\n/* harmony import */ var _obj_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./obj.js */ \"./node_modules/ol/obj.js\");\n/**\n * @module ol/events\n */\n\n\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nfunction listen(target, type, listener, thisArg, once) {\n if (thisArg && thisArg !== target) {\n listener = listener.bind(thisArg);\n }\n if (once) {\n const originalListener = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener.apply(this, arguments);\n };\n }\n const eventsKey = {\n target: target,\n type: type,\n listener: listener\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nfunction listenOnce(target, type, listener, thisArg) {\n return listen(target, type, listener, thisArg, true);\n}\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nfunction unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n (0,_obj_js__WEBPACK_IMPORTED_MODULE_0__.clear)(key);\n }\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events.js?");
/***/ }),
/***/ "./node_modules/ol/events/Event.js":
/*!*****************************************!*\
!*** ./node_modules/ol/events/Event.js ***!
\*****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ preventDefault: function() { return /* binding */ preventDefault; },\n/* harmony export */ stopPropagation: function() { return /* binding */ stopPropagation; }\n/* harmony export */ });\n/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass BaseEvent {\n /**\n * @param {string} type Type.\n */\n constructor(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n /**\n * Stop event propagation.\n * @api\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nfunction stopPropagation(evt) {\n evt.stopPropagation();\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nfunction preventDefault(evt) {\n evt.preventDefault();\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseEvent);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events/Event.js?");
/***/ }),
/***/ "./node_modules/ol/events/EventType.js":
/*!*********************************************!*\
!*** ./node_modules/ol/events/EventType.js ***!
\*********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel'\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events/EventType.js?");
/***/ }),
/***/ "./node_modules/ol/events/Key.js":
/*!***************************************!*\
!*** ./node_modules/ol/events/Key.js ***!
\***************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/events/Key\n */\n\n/**\n * @enum {string}\n * @const\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n LEFT: 'ArrowLeft',\n UP: 'ArrowUp',\n RIGHT: 'ArrowRight',\n DOWN: 'ArrowDown'\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events/Key.js?");
/***/ }),
/***/ "./node_modules/ol/events/SnapEvent.js":
/*!*********************************************!*\
!*** ./node_modules/ol/events/SnapEvent.js ***!
\*********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SnapEvent: function() { return /* binding */ SnapEvent; },\n/* harmony export */ SnapEventType: function() { return /* binding */ SnapEventType; }\n/* harmony export */ });\n/* harmony import */ var _Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Event.js */ \"./node_modules/ol/events/Event.js\");\n/**\n * @module ol/events/SnapEvent\n */\n\n\n/**\n * @enum {string}\n */\nconst SnapEventType = {\n /**\n * Triggered upon snapping to vertex or edge\n * @event SnapEvent#snap\n * @api\n */\n SNAP: 'snap'\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Snap~Snap} instances are instances of this\n */\nclass SnapEvent extends _Event_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {SnapEventType} type Type.\n * @param {Object} options Options.\n * @param {import(\"../coordinate.js\").Coordinate} options.vertex The snapped vertex.\n * @param {import(\"../coordinate.js\").Coordinate} options.vertexPixel The pixel of the snapped vertex.\n * @param {import(\"../Feature.js\").default} options.feature The feature being snapped.\n * @param {Array|null} options.segment Segment, or `null` if snapped to a vertex.\n */\n constructor(type, options) {\n super(type);\n /**\n * The Map coordinate of the snapped point.\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.vertex = options.vertex;\n /**\n * The Map pixel of the snapped point.\n * @type {Array&Array}\n * @api\n */\n this.vertexPixel = options.vertexPixel;\n /**\n * The feature closest to the snapped point.\n * @type {import(\"../Feature.js\").default}\n * @api\n */\n this.feature = options.feature;\n /**\n * The segment closest to the snapped point, if snapped to a segment.\n * @type {Array|null}\n * @api\n */\n this.segment = options.segment;\n }\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events/SnapEvent.js?");
/***/ }),
/***/ "./node_modules/ol/events/Target.js":
/*!******************************************!*\
!*** ./node_modules/ol/events/Target.js ***!
\******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _Disposable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Disposable.js */ \"./node_modules/ol/Disposable.js\");\n/* harmony import */ var _Event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Event.js */ \"./node_modules/ol/events/Event.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../functions.js */ \"./node_modules/ol/functions.js\");\n/* harmony import */ var _obj_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../obj.js */ \"./node_modules/ol/obj.js\");\n\n/**\n * @module ol/events/Target\n */\n\n\n\n\n\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nclass Target extends _Disposable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {*} [target] Default event target for dispatched events.\n */\n constructor(target) {\n super();\n\n /**\n * @private\n * @type {*}\n */\n this.eventTarget_ = target;\n\n /**\n * @private\n * @type {Object|null}\n */\n this.pendingRemovals_ = null;\n\n /**\n * @private\n * @type {Object|null}\n */\n this.dispatching_ = null;\n\n /**\n * @private\n * @type {Object>|null}\n */\n this.listeners_ = null;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n addEventListener(type, listener) {\n if (!type || !listener) {\n return;\n }\n const listeners = this.listeners_ || (this.listeners_ = {});\n const listenersForType = listeners[type] || (listeners[type] = []);\n if (!listenersForType.includes(listener)) {\n listenersForType.push(listener);\n }\n }\n\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n dispatchEvent(event) {\n const isString = typeof event === 'string';\n const type = isString ? event : event.type;\n const listeners = this.listeners_ && this.listeners_[type];\n if (!listeners) {\n return;\n }\n const evt = isString ? new _Event_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](event) : (/** @type {Event} */event);\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n const dispatching = this.dispatching_ || (this.dispatching_ = {});\n const pendingRemovals = this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n let propagate;\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */listeners[i].handleEvent(evt);\n } else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */listeners[i].call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n if (--dispatching[type] === 0) {\n let pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, _functions_js__WEBPACK_IMPORTED_MODULE_3__.VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.listeners_ && (0,_obj_js__WEBPACK_IMPORTED_MODULE_4__.clear)(this.listeners_);\n }\n\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n getListeners(type) {\n return this.listeners_ && this.listeners_[type] || undefined;\n }\n\n /**\n * @param {string} [type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n hasListener(type) {\n if (!this.listeners_) {\n return false;\n }\n return type ? type in this.listeners_ : Object.keys(this.listeners_).length > 0;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n removeEventListener(type, listener) {\n if (!this.listeners_) {\n return;\n }\n const listeners = this.listeners_[type];\n if (!listeners) {\n return;\n }\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = _functions_js__WEBPACK_IMPORTED_MODULE_3__.VOID;\n ++this.pendingRemovals_[type];\n } else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Target);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events/Target.js?");
/***/ }),
/***/ "./node_modules/ol/events/condition.js":
/*!*********************************************!*\
!*** ./node_modules/ol/events/condition.js ***!
\*********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ all: function() { return /* binding */ all; },\n/* harmony export */ altKeyOnly: function() { return /* binding */ altKeyOnly; },\n/* harmony export */ altShiftKeysOnly: function() { return /* binding */ altShiftKeysOnly; },\n/* harmony export */ always: function() { return /* binding */ always; },\n/* harmony export */ click: function() { return /* binding */ click; },\n/* harmony export */ doubleClick: function() { return /* binding */ doubleClick; },\n/* harmony export */ focus: function() { return /* binding */ focus; },\n/* harmony export */ focusWithTabindex: function() { return /* binding */ focusWithTabindex; },\n/* harmony export */ mouseActionButton: function() { return /* binding */ mouseActionButton; },\n/* harmony export */ mouseOnly: function() { return /* binding */ mouseOnly; },\n/* harmony export */ never: function() { return /* binding */ never; },\n/* harmony export */ noModifierKeys: function() { return /* binding */ noModifierKeys; },\n/* harmony export */ penOnly: function() { return /* binding */ penOnly; },\n/* harmony export */ platformModifierKey: function() { return /* binding */ platformModifierKey; },\n/* harmony export */ platformModifierKeyOnly: function() { return /* binding */ platformModifierKeyOnly; },\n/* harmony export */ pointerMove: function() { return /* binding */ pointerMove; },\n/* harmony export */ primaryAction: function() { return /* binding */ primaryAction; },\n/* harmony export */ shiftKeyOnly: function() { return /* binding */ shiftKeyOnly; },\n/* harmony export */ singleClick: function() { return /* binding */ singleClick; },\n/* harmony export */ targetNotEditable: function() { return /* binding */ targetNotEditable; },\n/* harmony export */ touchOnly: function() { return /* binding */ touchOnly; }\n/* harmony export */ });\n/* harmony import */ var _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../MapBrowserEventType.js */ \"./node_modules/ol/MapBrowserEventType.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions.js */ \"./node_modules/ol/functions.js\");\n/* harmony import */ var _has_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../has.js */ \"./node_modules/ol/has.js\");\n/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../asserts.js */ \"./node_modules/ol/asserts.js\");\n/**\n * @module ol/events/condition\n */\n\n\n\n\n\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nfunction all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nconst altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n return originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && !originalEvent.shiftKey;\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nconst altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n return originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && originalEvent.shiftKey;\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. ``.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nconst focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const activeElement = event.map.getOwnerDocument().activeElement;\n return targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nconst focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex') ? focus(event) : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nconst always = _functions_js__WEBPACK_IMPORTED_MODULE_0__.TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nconst click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nconst mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */\n mapBrowserEvent.originalEvent;\n return originalEvent.button == 0 && !(_has_js__WEBPACK_IMPORTED_MODULE_2__.WEBKIT && _has_js__WEBPACK_IMPORTED_MODULE_2__.MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nconst never = _functions_js__WEBPACK_IMPORTED_MODULE_0__.FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nconst pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nconst singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nconst doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nconst noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n return !originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && !originalEvent.shiftKey;\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nconst platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n return !originalEvent.altKey && (_has_js__WEBPACK_IMPORTED_MODULE_2__.MAC ? originalEvent.metaKey : originalEvent.ctrlKey) && !originalEvent.shiftKey;\n};\n\n/**\n * Return `true` if the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the platform modifier key is pressed.\n * @api\n */\nconst platformModifierKey = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n return _has_js__WEBPACK_IMPORTED_MODULE_2__.MAC ? originalEvent.metaKey : originalEvent.ctrlKey;\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nconst shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n return !originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && originalEvent.shiftKey;\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nconst targetNotEditable = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */\n mapBrowserEvent.originalEvent;\n const tagName = /** @type {Element} */originalEvent.target.tagName;\n return tagName !== 'INPUT' && tagName !== 'SELECT' && tagName !== 'TEXTAREA' &&\n // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n // different type like `SVGElement`.\n // @ts-ignore\n !originalEvent.target.isContentEditable;\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nconst mouseOnly = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */mapBrowserEvent.originalEvent;\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_3__.assert)(pointerEvent !== undefined, 'mapBrowserEvent must originate from a pointer event');\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nconst touchOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */mapBrowserEvent.originalEvent;\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_3__.assert)(pointerEvt !== undefined, 'mapBrowserEvent must originate from a pointer event');\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nconst penOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */mapBrowserEvent.originalEvent;\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_3__.assert)(pointerEvt !== undefined, 'mapBrowserEvent must originate from a pointer event');\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nconst primaryAction = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */mapBrowserEvent.originalEvent;\n (0,_asserts_js__WEBPACK_IMPORTED_MODULE_3__.assert)(pointerEvent !== undefined, 'mapBrowserEvent must originate from a pointer event');\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/events/condition.js?");
/***/ }),
/***/ "./node_modules/ol/expr/cpu.js":
/*!*************************************!*\
!*** ./node_modules/ol/expr/cpu.js ***!
\*************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ buildExpression: function() { return /* binding */ buildExpression; },\n/* harmony export */ newEvaluationContext: function() { return /* binding */ newEvaluationContext; }\n/* harmony export */ });\n/* harmony import */ var _expression_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expression.js */ \"./node_modules/ol/expr/expression.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../color.js */ \"./node_modules/ol/color.js\");\n/**\n * @module ol/expr/cpu\n */\n\n\n\n\n/**\n * @fileoverview This module includes functions to build expressions for evaluation on the CPU.\n * Building is composed of two steps: parsing and compiling. The parsing step takes an encoded\n * expression and returns an instance of one of the expression classes. The compiling step takes\n * the expression instance and returns a function that can be evaluated in to return a literal\n * value. The evaluator function should do as little allocation and work as possible.\n */\n\n/**\n * @typedef {Object} EvaluationContext\n * @property {Object} properties The values for properties used in 'get' expressions.\n * @property {Object} variables The values for variables used in 'var' expressions.\n * @property {number} resolution The map resolution.\n * @property {string|number|null} featureId The feature id.\n */\n\n/**\n * @return {EvaluationContext} A new evaluation context.\n */\nfunction newEvaluationContext() {\n return {\n variables: {},\n properties: {},\n resolution: NaN,\n featureId: null\n };\n}\n\n/**\n * @typedef {function(EvaluationContext):import(\"./expression.js\").LiteralValue} ExpressionEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):boolean} BooleanEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):number} NumberEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):string} StringEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array
|string)} ColorLikeEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):Array} NumberArrayEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):Array} CoordinateEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array|number)} SizeLikeEvaluator\n */\n\n/**\n * @param {import('./expression.js').EncodedExpression} encoded The encoded expression.\n * @param {number} type The expected type.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The expression evaluator.\n */\nfunction buildExpression(encoded, type, context) {\n const expression = (0,_expression_js__WEBPACK_IMPORTED_MODULE_0__.parse)(encoded, context);\n if (!(0,_expression_js__WEBPACK_IMPORTED_MODULE_0__.overlapsType)(type, expression.type)) {\n const expected = (0,_expression_js__WEBPACK_IMPORTED_MODULE_0__.typeName)(type);\n const actual = (0,_expression_js__WEBPACK_IMPORTED_MODULE_0__.typeName)(expression.type);\n throw new Error(`Expected expression to be of type ${expected}, got ${actual}`);\n }\n return compileExpression(expression, context);\n}\n\n/**\n * @param {import(\"./expression.js\").Expression} expression The expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileExpression(expression, context) {\n if (expression instanceof _expression_js__WEBPACK_IMPORTED_MODULE_0__.LiteralExpression) {\n // convert colors to array if possible\n if (expression.type === _expression_js__WEBPACK_IMPORTED_MODULE_0__.ColorType && typeof expression.value === 'string') {\n const colorValue = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__.fromString)(expression.value);\n return function () {\n return colorValue;\n };\n }\n return function () {\n return expression.value;\n };\n }\n const operator = expression.operator;\n switch (operator) {\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Number:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.String:\n {\n return compileAssertionExpression(expression, context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Get:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Var:\n {\n return compileAccessorExpression(expression, context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Id:\n {\n return expression => expression.featureId;\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Concat:\n {\n const args = expression.args.map(e => compileExpression(e, context));\n return context => ''.concat(...args.map(arg => arg(context).toString()));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Resolution:\n {\n return context => context.resolution;\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Any:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.All:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Not:\n {\n return compileLogicalExpression(expression, context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Equal:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.NotEqual:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.LessThan:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.LessThanOrEqualTo:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.GreaterThan:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.GreaterThanOrEqualTo:\n {\n return compileComparisonExpression(expression, context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Multiply:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Divide:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Add:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Subtract:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Clamp:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Mod:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Pow:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Abs:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Floor:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Ceil:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Round:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Sin:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Cos:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Atan:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Sqrt:\n {\n return compileNumericExpression(expression, context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Match:\n {\n return compileMatchExpression(expression, context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Interpolate:\n {\n return compileInterpolateExpression(expression, context);\n }\n default:\n {\n throw new Error(`Unsupported operator ${operator}`);\n }\n // TODO: unimplemented\n // Ops.GeometryType\n // Ops.Zoom\n // Ops.Time\n // Ops.Between\n // Ops.Case\n // Ops.In\n // Ops.Array\n // Ops.Color\n // Ops.Band\n // Ops.Palette\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileAssertionExpression(expression, context) {\n const type = expression.operator;\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (type) {\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Number:\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.String:\n {\n return context => {\n for (let i = 0; i < length; ++i) {\n const value = args[i](context);\n if (typeof value === type) {\n return value;\n }\n }\n throw new Error(`Expected one of the values to be a ${type}`);\n };\n }\n default:\n {\n throw new Error(`Unsupported assertion operator ${type}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileAccessorExpression(expression, context) {\n const nameExpression = /** @type {LiteralExpression} */expression.args[0];\n const name = /** @type {string} */nameExpression.value;\n switch (expression.operator) {\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Get:\n {\n return context => context.properties[name];\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Var:\n {\n return context => context.variables[name];\n }\n default:\n {\n throw new Error(`Unsupported accessor operator ${expression.operator}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {BooleanEvaluator} The evaluator function.\n */\nfunction compileComparisonExpression(expression, context) {\n const op = expression.operator;\n const left = compileExpression(expression.args[0], context);\n const right = compileExpression(expression.args[1], context);\n switch (op) {\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Equal:\n {\n return context => left(context) === right(context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.NotEqual:\n {\n return context => left(context) !== right(context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.LessThan:\n {\n return context => left(context) < right(context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.LessThanOrEqualTo:\n {\n return context => left(context) <= right(context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.GreaterThan:\n {\n return context => left(context) > right(context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.GreaterThanOrEqualTo:\n {\n return context => left(context) >= right(context);\n }\n default:\n {\n throw new Error(`Unsupported comparison operator ${op}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {BooleanEvaluator} The evaluator function.\n */\nfunction compileLogicalExpression(expression, context) {\n const op = expression.operator;\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (op) {\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Any:\n {\n return context => {\n for (let i = 0; i < length; ++i) {\n if (args[i](context)) {\n return true;\n }\n }\n return false;\n };\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.All:\n {\n return context => {\n for (let i = 0; i < length; ++i) {\n if (!args[i](context)) {\n return false;\n }\n }\n return true;\n };\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Not:\n {\n return context => !args[0](context);\n }\n default:\n {\n throw new Error(`Unsupported logical operator ${op}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {NumberEvaluator} The evaluator function.\n */\nfunction compileNumericExpression(expression, context) {\n const op = expression.operator;\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (op) {\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Multiply:\n {\n return context => {\n let value = 1;\n for (let i = 0; i < length; ++i) {\n value *= args[i](context);\n }\n return value;\n };\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Divide:\n {\n return context => args[0](context) / args[1](context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Add:\n {\n return context => {\n let value = 0;\n for (let i = 0; i < length; ++i) {\n value += args[i](context);\n }\n return value;\n };\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Subtract:\n {\n return context => args[0](context) - args[1](context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Clamp:\n {\n return context => {\n const value = args[0](context);\n const min = args[1](context);\n if (value < min) {\n return min;\n }\n const max = args[2](context);\n if (value > max) {\n return max;\n }\n return value;\n };\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Mod:\n {\n return context => args[0](context) % args[1](context);\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Pow:\n {\n return context => Math.pow(args[0](context), args[1](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Abs:\n {\n return context => Math.abs(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Floor:\n {\n return context => Math.floor(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Ceil:\n {\n return context => Math.ceil(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Round:\n {\n return context => Math.round(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Sin:\n {\n return context => Math.sin(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Cos:\n {\n return context => Math.cos(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Atan:\n {\n if (length === 2) {\n return context => Math.atan2(args[0](context), args[1](context));\n }\n return context => Math.atan(args[0](context));\n }\n case _expression_js__WEBPACK_IMPORTED_MODULE_0__.Ops.Sqrt:\n {\n return context => Math.sqrt(args[0](context));\n }\n default:\n {\n throw new Error(`Unsupported numeric operator ${op}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileMatchExpression(expression, context) {\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n return context => {\n const value = args[0](context);\n for (let i = 1; i < length; i += 2) {\n if (value === args[i](context)) {\n return args[i + 1](context);\n }\n }\n return args[length - 1](context);\n };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileInterpolateExpression(expression, context) {\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n return context => {\n const base = args[0](context);\n const value = args[1](context);\n let previousInput;\n let previousOutput;\n for (let i = 2; i < length; i += 2) {\n const input = args[i](context);\n let output = args[i + 1](context);\n const isColor = Array.isArray(output);\n if (isColor) {\n output = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__.withAlpha)(output);\n }\n if (input >= value) {\n if (i === 2) {\n return output;\n }\n if (isColor) {\n return interpolateColor(base, value, previousInput, previousOutput, input, output);\n }\n return interpolateNumber(base, value, previousInput, previousOutput, input, output);\n }\n previousInput = input;\n previousOutput = output;\n }\n return previousOutput;\n };\n}\n\n/**\n * @param {number} base The base.\n * @param {number} value The value.\n * @param {number} input1 The first input value.\n * @param {number} output1 The first output value.\n * @param {number} input2 The second input value.\n * @param {number} output2 The second output value.\n * @return {number} The interpolated value.\n */\nfunction interpolateNumber(base, value, input1, output1, input2, output2) {\n const delta = input2 - input1;\n if (delta === 0) {\n return output1;\n }\n const along = value - input1;\n const factor = base === 1 ? along / delta : (Math.pow(base, along) - 1) / (Math.pow(base, delta) - 1);\n return output1 + factor * (output2 - output1);\n}\n\n/**\n * @param {number} base The base.\n * @param {number} value The value.\n * @param {number} input1 The first input value.\n * @param {import('../color.js').Color} rgba1 The first output value.\n * @param {number} input2 The second input value.\n * @param {import('../color.js').Color} rgba2 The second output value.\n * @return {import('../color.js').Color} The interpolated color.\n */\nfunction interpolateColor(base, value, input1, rgba1, input2, rgba2) {\n const delta = input2 - input1;\n if (delta === 0) {\n return rgba1;\n }\n const lcha1 = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__.rgbaToLcha)(rgba1);\n const lcha2 = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__.rgbaToLcha)(rgba2);\n let deltaHue = lcha2[2] - lcha1[2];\n if (deltaHue > 180) {\n deltaHue -= 360;\n } else if (deltaHue < -180) {\n deltaHue += 360;\n }\n const lcha = [interpolateNumber(base, value, input1, lcha1[0], input2, lcha2[0]), interpolateNumber(base, value, input1, lcha1[1], input2, lcha2[1]), lcha1[2] + interpolateNumber(base, value, input1, 0, input2, deltaHue), interpolateNumber(base, value, input1, rgba1[3], input2, rgba2[3])];\n return (0,_color_js__WEBPACK_IMPORTED_MODULE_1__.normalize)((0,_color_js__WEBPACK_IMPORTED_MODULE_1__.lchaToRgba)(lcha));\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/expr/cpu.js?");
/***/ }),
/***/ "./node_modules/ol/expr/expression.js":
/*!********************************************!*\
!*** ./node_modules/ol/expr/expression.js ***!
\********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AnyType: function() { return /* binding */ AnyType; },\n/* harmony export */ BooleanType: function() { return /* binding */ BooleanType; },\n/* harmony export */ CallExpression: function() { return /* binding */ CallExpression; },\n/* harmony export */ ColorType: function() { return /* binding */ ColorType; },\n/* harmony export */ LiteralExpression: function() { return /* binding */ LiteralExpression; },\n/* harmony export */ NoneType: function() { return /* binding */ NoneType; },\n/* harmony export */ NumberArrayType: function() { return /* binding */ NumberArrayType; },\n/* harmony export */ NumberType: function() { return /* binding */ NumberType; },\n/* harmony export */ Ops: function() { return /* binding */ Ops; },\n/* harmony export */ StringType: function() { return /* binding */ StringType; },\n/* harmony export */ includesType: function() { return /* binding */ includesType; },\n/* harmony export */ isType: function() { return /* binding */ isType; },\n/* harmony export */ newParsingContext: function() { return /* binding */ newParsingContext; },\n/* harmony export */ overlapsType: function() { return /* binding */ overlapsType; },\n/* harmony export */ parse: function() { return /* binding */ parse; },\n/* harmony export */ typeName: function() { return /* binding */ typeName; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.set.difference.v2.js */ \"./node_modules/core-js/modules/es.set.difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.set.intersection.v2.js */ \"./node_modules/core-js/modules/es.set.intersection.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.set.is-disjoint-from.v2.js */ \"./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.set.is-subset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-subset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.set.is-superset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-superset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.set.symmetric-difference.v2.js */ \"./node_modules/core-js/modules/es.set.symmetric-difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.set.union.v2.js */ \"./node_modules/core-js/modules/es.set.union.v2.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../array.js */ \"./node_modules/ol/array.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../color.js */ \"./node_modules/ol/color.js\");\n\n\n\n\n\n\n\n\n/**\n * @module ol/expr/expression\n */\n\n\n\n/**\n * @fileoverview This module includes types and functions for parsing array encoded expressions.\n * The result of parsing an encoded expression is one of the specific expression classes.\n * During parsing, information is added to the parsing context about the data accessed by the\n * expression.\n */\n\n/**\n * Base type used for literal style parameters; can be a number literal or the output of an operator,\n * which in turns takes {@link import(\"./expression.js\").ExpressionValue} arguments.\n *\n * The following operators can be used:\n *\n * * Reading operators:\n * * `['band', bandIndex, xOffset, yOffset]` For tile layers only. Fetches pixel values from band\n * `bandIndex` of the source's data. The first `bandIndex` of the source data is `1`. Fetched values\n * are in the 0..1 range. {@link import(\"../source/TileImage.js\").default} sources have 4 bands: red,\n * green, blue and alpha. {@link import(\"../source/DataTile.js\").default} sources can have any number\n * of bands, depending on the underlying data source and\n * {@link import(\"../source/GeoTIFF.js\").Options configuration}. `xOffset` and `yOffset` are optional\n * and allow specifying pixel offsets for x and y. This is used for sampling data from neighboring pixels.\n * * `['get', 'attributeName', typeHint]` fetches a feature property value, similar to `feature.get('attributeName')`\n * A type hint can optionally be specified, in case the resulting expression contains a type ambiguity which\n * will make it invalid. Type hints can be one of: 'string', 'color', 'number', 'boolean', 'number[]'\n * * `['geometry-type']` returns a feature's geometry type as string, either: 'LineString', 'Point' or 'Polygon'\n * `Multi*` values are returned as their singular equivalent\n * `Circle` geometries are returned as 'Polygon'\n * `GeometryCollection` geometries are returned as the type of the first geometry found in the collection\n * * `['resolution']` returns the current resolution\n * * `['time']` returns the time in seconds since the creation of the layer\n * * `['var', 'varName']` fetches a value from the style variables; will throw an error if that variable is undefined\n * * `['zoom']` returns the current zoom level\n *\n * * Math operators:\n * * `['*', value1, value2, ...]` multiplies the values (either numbers or colors)\n * * `['/', value1, value2]` divides `value1` by `value2`\n * * `['+', value1, value2, ...]` adds the values\n * * `['-', value1, value2]` subtracts `value2` from `value1`\n * * `['clamp', value, low, high]` clamps `value` between `low` and `high`\n * * `['%', value1, value2]` returns the result of `value1 % value2` (modulo)\n * * `['^', value1, value2]` returns the value of `value1` raised to the `value2` power\n * * `['abs', value1]` returns the absolute value of `value1`\n * * `['floor', value1]` returns the nearest integer less than or equal to `value1`\n * * `['round', value1]` returns the nearest integer to `value1`\n * * `['ceil', value1]` returns the nearest integer greater than or equal to `value1`\n * * `['sin', value1]` returns the sine of `value1`\n * * `['cos', value1]` returns the cosine of `value1`\n * * `['atan', value1, value2]` returns `atan2(value1, value2)`. If `value2` is not provided, returns `atan(value1)`\n * * `['sqrt', value1]` returns the square root of `value1`\n *\n * * Transform operators:\n * * `['case', condition1, output1, ...conditionN, outputN, fallback]` selects the first output whose corresponding\n * condition evaluates to `true`. If no match is found, returns the `fallback` value.\n * All conditions should be `boolean`, output and fallback can be any kind.\n * * `['match', input, match1, output1, ...matchN, outputN, fallback]` compares the `input` value against all\n * provided `matchX` values, returning the output associated with the first valid match. If no match is found,\n * returns the `fallback` value.\n * `input` and `matchX` values must all be of the same type, and can be `number` or `string`. `outputX` and\n * `fallback` values must be of the same type, and can be of any kind.\n * * `['interpolate', interpolation, input, stop1, output1, ...stopN, outputN]` returns a value by interpolating between\n * pairs of inputs and outputs; `interpolation` can either be `['linear']` or `['exponential', base]` where `base` is\n * the rate of increase from stop A to stop B (i.e. power to which the interpolation ratio is raised); a value\n * of 1 is equivalent to `['linear']`.\n * `input` and `stopX` values must all be of type `number`. `outputX` values can be `number` or `color` values.\n * Note: `input` will be clamped between `stop1` and `stopN`, meaning that all output values will be comprised\n * between `output1` and `outputN`.\n *\n * * Logical operators:\n * * `['<', value1, value2]` returns `true` if `value1` is strictly lower than `value2`, or `false` otherwise.\n * * `['<=', value1, value2]` returns `true` if `value1` is lower than or equals `value2`, or `false` otherwise.\n * * `['>', value1, value2]` returns `true` if `value1` is strictly greater than `value2`, or `false` otherwise.\n * * `['>=', value1, value2]` returns `true` if `value1` is greater than or equals `value2`, or `false` otherwise.\n * * `['==', value1, value2]` returns `true` if `value1` equals `value2`, or `false` otherwise.\n * * `['!=', value1, value2]` returns `true` if `value1` does not equal `value2`, or `false` otherwise.\n * * `['!', value1]` returns `false` if `value1` is `true` or greater than `0`, or `true` otherwise.\n * * `['all', value1, value2, ...]` returns `true` if all the inputs are `true`, `false` otherwise.\n * * `['any', value1, value2, ...]` returns `true` if any of the inputs are `true`, `false` otherwise.\n * * `['between', value1, value2, value3]` returns `true` if `value1` is contained between `value2` and `value3`\n * (inclusively), or `false` otherwise.\n * * `['in', needle, haystack]` returns `true` if `needle` is found in `haystack`, and\n * `false` otherwise.\n * This operator has the following limitations:\n * * `haystack` has to be an array of numbers or strings (searching for a substring in a string is not supported yet)\n * * Only literal arrays are supported as `haystack` for now; this means that `haystack` cannot be the result of an\n * expression. If `haystack` is an array of strings, use the `literal` operator to disambiguate from an expression:\n * `['literal', ['abc', 'def', 'ghi']]`\n *\n * * Conversion operators:\n * * `['array', value1, ...valueN]` creates a numerical array from `number` values; please note that the amount of\n * values can currently only be 2, 3 or 4.\n * * `['color', red, green, blue, alpha]` creates a `color` value from `number` values; the `alpha` parameter is\n * optional; if not specified, it will be set to 1.\n * Note: `red`, `green` and `blue` components must be values between 0 and 255; `alpha` between 0 and 1.\n * * `['palette', index, colors]` picks a `color` value from an array of colors using the given index; the `index`\n * expression must evaluate to a number; the items in the `colors` array must be strings with hex colors\n * (e.g. `'#86A136'`), colors using the rgba[a] functional notation (e.g. `'rgb(134, 161, 54)'` or `'rgba(134, 161, 54, 1)'`),\n * named colors (e.g. `'red'`), or array literals with 3 ([r, g, b]) or 4 ([r, g, b, a]) values (with r, g, and b\n * in the 0-255 range and a in the 0-1 range).\n *\n * Values can either be literals or another operator, as they will be evaluated recursively.\n * Literal values can be of the following types:\n * * `boolean`\n * * `number`\n * * `number[]` (number arrays can only have a length of 2, 3 or 4)\n * * `string`\n * * {@link module:ol/color~Color}\n *\n * @typedef {Array<*>|import(\"../color.js\").Color|string|number|boolean} ExpressionValue\n * @api\n */\n\nlet numTypes = 0;\nconst NoneType = 0;\nconst BooleanType = 1 << numTypes++;\nconst NumberType = 1 << numTypes++;\nconst StringType = 1 << numTypes++;\nconst ColorType = 1 << numTypes++;\nconst NumberArrayType = 1 << numTypes++;\nconst AnyType = Math.pow(2, numTypes) - 1;\nconst typeNames = {\n [BooleanType]: 'boolean',\n [NumberType]: 'number',\n [StringType]: 'string',\n [ColorType]: 'color',\n [NumberArrayType]: 'number[]'\n};\nconst namedTypes = Object.keys(typeNames).map(Number).sort(_array_js__WEBPACK_IMPORTED_MODULE_8__.ascending);\n\n/**\n * Get a string representation for a type.\n * @param {number} type The type.\n * @return {string} The type name.\n */\nfunction typeName(type) {\n const names = [];\n for (const namedType of namedTypes) {\n if (includesType(type, namedType)) {\n names.push(typeNames[namedType]);\n }\n }\n if (names.length === 0) {\n return 'untyped';\n }\n if (names.length < 3) {\n return names.join(' or ');\n }\n return names.slice(0, -1).join(', ') + ', or ' + names[names.length - 1];\n}\n\n/**\n * @param {number} broad The broad type.\n * @param {number} specific The specific type.\n * @return {boolean} The broad type includes the specific type.\n */\nfunction includesType(broad, specific) {\n return (broad & specific) === specific;\n}\n\n/**\n * @param {number} oneType One type.\n * @param {number} otherType Another type.\n * @return {boolean} The set of types overlap (share a common specific type)\n */\nfunction overlapsType(oneType, otherType) {\n return !!(oneType & otherType);\n}\n\n/**\n * @param {number} type The type.\n * @param {number} expected The expected type.\n * @return {boolean} The given type is exactly the expected type.\n */\nfunction isType(type, expected) {\n return type === expected;\n}\n\n/**\n * @typedef {boolean|number|string|Array} LiteralValue\n */\n\nclass LiteralExpression {\n /**\n * @param {number} type The value type.\n * @param {LiteralValue} value The literal value.\n */\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n}\nclass CallExpression {\n /**\n * @param {number} type The return type.\n * @param {string} operator The operator.\n * @param {...Expression} args The arguments.\n */\n constructor(type, operator, ...args) {\n this.type = type;\n this.operator = operator;\n this.args = args;\n }\n}\n\n/**\n * @typedef {LiteralExpression|CallExpression} Expression\n */\n\n/**\n * @typedef {Object} ParsingContext\n * @property {Set} variables Variables referenced with the 'var' operator.\n * @property {Set} properties Properties referenced with the 'get' operator.\n * @property {boolean} featureId The style uses the feature id.\n * @property {import(\"../style/flat.js\").FlatStyle|import(\"../style/webgl.js\").WebGLStyle} style The style being parsed\n */\n\n/**\n * @return {ParsingContext} A new parsing context.\n */\nfunction newParsingContext() {\n return {\n variables: new Set(),\n properties: new Set(),\n featureId: false,\n style: {}\n };\n}\n\n/**\n * @param {string} typeHint Type hint\n * @return {number} Resulting value type (will be a single type)\n */\nfunction getTypeFromHint(typeHint) {\n switch (typeHint) {\n case 'string':\n return StringType;\n case 'color':\n return ColorType;\n case 'number':\n return NumberType;\n case 'boolean':\n return BooleanType;\n case 'number[]':\n return NumberArrayType;\n default:\n throw new Error(`Unrecognized type hint: ${typeHint}`);\n }\n}\n\n/**\n * @typedef {LiteralValue|Array} EncodedExpression\n */\n\n/**\n * @param {EncodedExpression} encoded The encoded expression.\n * @param {ParsingContext} context The parsing context.\n * @param {number} [typeHint] Optional type hint\n * @return {Expression} The parsed expression result.\n */\nfunction parse(encoded, context, typeHint) {\n switch (typeof encoded) {\n case 'boolean':\n {\n return new LiteralExpression(BooleanType, encoded);\n }\n case 'number':\n {\n return new LiteralExpression(NumberType, encoded);\n }\n case 'string':\n {\n let type = StringType;\n if ((0,_color_js__WEBPACK_IMPORTED_MODULE_9__.isStringColor)(encoded)) {\n type |= ColorType;\n }\n // apply the given type hint only if it won't result in an empty type\n if (!isType(type & typeHint, NoneType)) {\n type &= typeHint;\n }\n return new LiteralExpression(type, encoded);\n }\n default:\n {\n // pass\n }\n }\n if (!Array.isArray(encoded)) {\n throw new Error('Expression must be an array or a primitive value');\n }\n if (encoded.length === 0) {\n throw new Error('Empty expression');\n }\n if (typeof encoded[0] === 'string') {\n return parseCallExpression(encoded, context, typeHint);\n }\n for (const item of encoded) {\n if (typeof item !== 'number') {\n throw new Error('Expected an array of numbers');\n }\n }\n let type = NumberArrayType;\n if (encoded.length === 3 || encoded.length === 4) {\n type |= ColorType;\n }\n if (typeHint) {\n type &= typeHint;\n }\n return new LiteralExpression(type, encoded);\n}\n\n/**\n * @type {Object}\n */\nconst Ops = {\n Get: 'get',\n Var: 'var',\n Concat: 'concat',\n GeometryType: 'geometry-type',\n Any: 'any',\n All: 'all',\n Not: '!',\n Resolution: 'resolution',\n Zoom: 'zoom',\n Time: 'time',\n Equal: '==',\n NotEqual: '!=',\n GreaterThan: '>',\n GreaterThanOrEqualTo: '>=',\n LessThan: '<',\n LessThanOrEqualTo: '<=',\n Multiply: '*',\n Divide: '/',\n Add: '+',\n Subtract: '-',\n Clamp: 'clamp',\n Mod: '%',\n Pow: '^',\n Abs: 'abs',\n Floor: 'floor',\n Ceil: 'ceil',\n Round: 'round',\n Sin: 'sin',\n Cos: 'cos',\n Atan: 'atan',\n Sqrt: 'sqrt',\n Match: 'match',\n Between: 'between',\n Interpolate: 'interpolate',\n Case: 'case',\n In: 'in',\n Number: 'number',\n String: 'string',\n Array: 'array',\n Color: 'color',\n Id: 'id',\n Band: 'band',\n Palette: 'palette'\n};\n\n/**\n * @typedef {function(Array, ParsingContext, number):Expression} Parser\n * Third argument is a type hint\n */\n\n/**\n * @type {Object}\n */\nconst parsers = {\n [Ops.Get]: createParser(([_, typeHint]) => {\n if (typeHint !== undefined) {\n return getTypeFromHint(/** @type {string} */\n /** @type {LiteralExpression} */typeHint.value);\n }\n return AnyType;\n }, withArgsCount(1, 2), withGetArgs),\n [Ops.Var]: createParser(([firstArg]) => firstArg.type, withArgsCount(1, 1), withVarArgs),\n [Ops.Id]: createParser(NumberType | StringType, withNoArgs, usesFeatureId),\n [Ops.Concat]: createParser(StringType, withArgsCount(2, Infinity), parseArgsOfType(AnyType)),\n [Ops.GeometryType]: createParser(StringType, withNoArgs),\n [Ops.Resolution]: createParser(NumberType, withNoArgs),\n [Ops.Zoom]: createParser(NumberType, withNoArgs),\n [Ops.Time]: createParser(NumberType, withNoArgs),\n [Ops.Any]: createParser(BooleanType, withArgsCount(2, Infinity), parseArgsOfType(BooleanType)),\n [Ops.All]: createParser(BooleanType, withArgsCount(2, Infinity), parseArgsOfType(BooleanType)),\n [Ops.Not]: createParser(BooleanType, withArgsCount(1, 1), parseArgsOfType(BooleanType)),\n [Ops.Equal]: createParser(BooleanType, withArgsCount(2, 2), parseArgsOfType(AnyType), narrowArgsType),\n [Ops.NotEqual]: createParser(BooleanType, withArgsCount(2, 2), parseArgsOfType(AnyType), narrowArgsType),\n [Ops.GreaterThan]: createParser(BooleanType, withArgsCount(2, 2), parseArgsOfType(AnyType), narrowArgsType),\n [Ops.GreaterThanOrEqualTo]: createParser(BooleanType, withArgsCount(2, 2), parseArgsOfType(AnyType), narrowArgsType),\n [Ops.LessThan]: createParser(BooleanType, withArgsCount(2, 2), parseArgsOfType(AnyType), narrowArgsType),\n [Ops.LessThanOrEqualTo]: createParser(BooleanType, withArgsCount(2, 2), parseArgsOfType(AnyType), narrowArgsType),\n [Ops.Multiply]: createParser(parsedArgs => {\n let outputType = NumberType | ColorType;\n for (let i = 0; i < parsedArgs.length; i++) {\n outputType &= parsedArgs[i].type;\n }\n return outputType;\n }, withArgsCount(2, Infinity), parseArgsOfType(NumberType | ColorType), narrowArgsType),\n [Ops.Divide]: createParser(NumberType, withArgsCount(2, 2), parseArgsOfType(NumberType)),\n [Ops.Add]: createParser(NumberType, withArgsCount(2, Infinity), parseArgsOfType(NumberType)),\n [Ops.Subtract]: createParser(NumberType, withArgsCount(2, 2), parseArgsOfType(NumberType)),\n [Ops.Clamp]: createParser(NumberType, withArgsCount(3, 3), parseArgsOfType(NumberType)),\n [Ops.Mod]: createParser(NumberType, withArgsCount(2, 2), parseArgsOfType(NumberType)),\n [Ops.Pow]: createParser(NumberType, withArgsCount(2, 2), parseArgsOfType(NumberType)),\n [Ops.Abs]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Floor]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Ceil]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Round]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Sin]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Cos]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Atan]: createParser(NumberType, withArgsCount(1, 2), parseArgsOfType(NumberType)),\n [Ops.Sqrt]: createParser(NumberType, withArgsCount(1, 1), parseArgsOfType(NumberType)),\n [Ops.Match]: createParser(parsedArgs => {\n let type = AnyType;\n for (let i = 2; i < parsedArgs.length; i += 2) {\n type &= parsedArgs[i].type;\n }\n type &= parsedArgs[parsedArgs.length - 1].type;\n return type;\n }, withArgsCount(4, Infinity), withEvenArgs, parseMatchArgs),\n [Ops.Between]: createParser(BooleanType, withArgsCount(3, 3), parseArgsOfType(NumberType)),\n [Ops.Interpolate]: createParser(parsedArgs => {\n let type = ColorType | NumberType;\n for (let i = 3; i < parsedArgs.length; i += 2) {\n type &= parsedArgs[i].type;\n }\n return type;\n }, withArgsCount(6, Infinity), withEvenArgs, parseInterpolateArgs),\n [Ops.Case]: createParser(parsedArgs => {\n let type = AnyType;\n for (let i = 1; i < parsedArgs.length; i += 2) {\n type &= parsedArgs[i].type;\n }\n type &= parsedArgs[parsedArgs.length - 1].type;\n return type;\n }, withArgsCount(3, Infinity), withOddArgs, parseCaseArgs),\n [Ops.In]: createParser(BooleanType, withArgsCount(2, 2), parseInArgs),\n [Ops.Number]: createParser(NumberType, withArgsCount(1, Infinity), parseArgsOfType(AnyType)),\n [Ops.String]: createParser(StringType, withArgsCount(1, Infinity), parseArgsOfType(AnyType)),\n [Ops.Array]: createParser(parsedArgs => {\n return parsedArgs.length === 3 || parsedArgs.length === 4 ? NumberArrayType | ColorType : NumberArrayType;\n }, withArgsCount(1, Infinity), parseArgsOfType(NumberType)),\n [Ops.Color]: createParser(ColorType, withArgsCount(3, 4), parseArgsOfType(NumberType)),\n [Ops.Band]: createParser(NumberType, withArgsCount(1, 3), parseArgsOfType(NumberType)),\n [Ops.Palette]: createParser(ColorType, withArgsCount(2, 2), parsePaletteArgs)\n};\n\n/**\n * @typedef {function(Array, ParsingContext, Array, number?):Array|void} ArgValidator\n * An argument validator applies various checks to an encoded expression arguments\n * Returns the parsed arguments if any.\n * Third argument is the array of parsed arguments from previous validators\n * Fourth argument is an optional type hint\n */\n\n/**\n * @type ArgValidator\n */\nfunction withGetArgs(encoded, context) {\n const arg = parse(encoded[1], context);\n if (!(arg instanceof LiteralExpression)) {\n throw new Error('Expected a literal argument for get operation');\n }\n if (typeof arg.value !== 'string') {\n throw new Error('Expected a string argument for get operation');\n }\n context.properties.add(arg.value);\n if (encoded.length === 3) {\n const hint = parse(encoded[2], context);\n return [arg, hint];\n }\n return [arg];\n}\n\n/**\n * @type ArgValidator\n */\nfunction withVarArgs(encoded, context, parsedArgs, typeHint) {\n const varName = encoded[1];\n if (typeof varName !== 'string') {\n throw new Error('Expected a string argument for var operation');\n }\n context.variables.add(varName);\n if (!('variables' in context.style) || context.style.variables[varName] === undefined) {\n return [new LiteralExpression(AnyType, varName)];\n }\n const initialValue = context.style.variables[varName];\n const arg = /** @type {LiteralExpression} */parse(initialValue, context);\n arg.value = varName;\n if (typeHint && !overlapsType(typeHint, arg.type)) {\n throw new Error(`The variable ${varName} has type ${typeName(arg.type)} but the following type was expected: ${typeName(typeHint)}`);\n }\n return [arg];\n}\n\n/**\n * @type ArgValidator\n */\nfunction usesFeatureId(encoded, context) {\n context.featureId = true;\n}\n\n/**\n * @type ArgValidator\n */\nfunction withNoArgs(encoded, context) {\n const operation = encoded[0];\n if (encoded.length !== 1) {\n throw new Error(`Expected no arguments for ${operation} operation`);\n }\n return [];\n}\n\n/**\n * @param {number} minArgs The minimum number of arguments.\n * @param {number} maxArgs The maximum number of arguments.\n * @return {ArgValidator} The argument validator\n */\nfunction withArgsCount(minArgs, maxArgs) {\n return function (encoded, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n if (minArgs === maxArgs) {\n if (argCount !== minArgs) {\n const plural = minArgs === 1 ? '' : 's';\n throw new Error(`Expected ${minArgs} argument${plural} for ${operation}, got ${argCount}`);\n }\n } else if (argCount < minArgs || argCount > maxArgs) {\n const range = maxArgs === Infinity ? `${minArgs} or more` : `${minArgs} to ${maxArgs}`;\n throw new Error(`Expected ${range} arguments for ${operation}, got ${argCount}`);\n }\n };\n}\n\n/**\n * @param {number} argType The argument type.\n * @return {ArgValidator} The argument validator\n */\nfunction parseArgsOfType(argType) {\n return function (encoded, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n /**\n * @type {Array}\n */\n const args = new Array(argCount);\n for (let i = 0; i < argCount; ++i) {\n const expression = parse(encoded[i + 1], context);\n if (!overlapsType(argType, expression.type)) {\n const gotType = typeName(argType);\n const expectedType = typeName(expression.type);\n throw new Error(`Unexpected type for argument ${i} of ${operation} operation` + `, got ${gotType} but expected ${expectedType}`);\n }\n expression.type &= argType;\n args[i] = expression;\n }\n return args;\n };\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction narrowArgsType(encoded, context, parsedArgs) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n\n // first pass to determine a narrowed down type\n let sameType = AnyType;\n for (let i = 0; i < parsedArgs.length; ++i) {\n sameType &= parsedArgs[i].type;\n }\n if (sameType === NoneType) {\n throw new Error(`No common type could be found for arguments of ${operation} operation`);\n }\n\n // re-parse args\n const args = new Array(argCount);\n for (let i = 0; i < argCount; ++i) {\n args[i] = parse(encoded[i + 1], context, sameType);\n }\n return args;\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withOddArgs(encoded, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n if (argCount % 2 === 0) {\n throw new Error(`An odd amount of arguments was expected for operation ${operation}, got ${JSON.stringify(argCount)} instead`);\n }\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withEvenArgs(encoded, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n if (argCount % 2 === 1) {\n throw new Error(`An even amount of arguments was expected for operation ${operation}, got ${JSON.stringify(argCount)} instead`);\n }\n}\n\n/**\n * @type ArgValidator\n */\nfunction parseMatchArgs(encoded, context, parsedArgs, typeHint) {\n const argsCount = encoded.length - 1;\n const input = parse(encoded[1], context);\n let inputType = input.type;\n const fallback = parse(encoded[encoded.length - 1], context);\n let outputType = typeHint !== undefined ? typeHint & fallback.type : fallback.type;\n\n // first parse args to figure out possible types\n const args = new Array(argsCount - 2);\n for (let i = 0; i < argsCount - 2; i += 2) {\n const match = parse(encoded[i + 2], context);\n const output = parse(encoded[i + 3], context);\n inputType &= match.type;\n outputType &= output.type;\n args[i] = match;\n args[i + 1] = output;\n }\n\n // check input and output types validity\n const expectedInputType = StringType | NumberType | BooleanType;\n if (!overlapsType(expectedInputType, inputType)) {\n throw new Error(`Expected an input of type ${typeName(expectedInputType)} for the interpolate operation` + `, got ${typeName(inputType)} instead`);\n }\n if (isType(outputType, NoneType)) {\n throw new Error(`Could not find a common output type for the following match operation: ` + JSON.stringify(encoded));\n }\n\n // parse again inputs and outputs with common type\n for (let i = 0; i < argsCount - 2; i += 2) {\n const match = parse(encoded[i + 2], context, inputType);\n const output = parse(encoded[i + 3], context, outputType);\n args[i] = match;\n args[i + 1] = output;\n }\n return [parse(encoded[1], context, inputType), ...args, parse(encoded[encoded.length - 1], context, outputType)];\n}\n\n/**\n * @type ArgValidator\n */\nfunction parseInterpolateArgs(encoded, context, parsedArgs, typeHint) {\n const interpolationType = encoded[1];\n let interpolation;\n switch (interpolationType[0]) {\n case 'linear':\n interpolation = 1;\n break;\n case 'exponential':\n interpolation = interpolationType[1];\n if (typeof interpolation !== 'number') {\n throw new Error(`Expected a number base for exponential interpolation` + `, got ${JSON.stringify(interpolation)} instead`);\n }\n break;\n default:\n interpolation = null;\n }\n if (!interpolation) {\n throw new Error(`Invalid interpolation type: ${JSON.stringify(interpolationType)}`);\n }\n interpolation = parse(interpolation, context);\n\n // check input types\n let input = parse(encoded[2], context);\n if (!overlapsType(NumberType, input.type)) {\n throw new Error(`Expected an input of type number for the interpolate operation` + `, got ${typeName(input.type)} instead`);\n }\n input = parse(encoded[2], context, NumberType); // parse again with narrower output\n\n const args = new Array(encoded.length - 3);\n for (let i = 0; i < args.length; i += 2) {\n let stop = parse(encoded[i + 3], context);\n if (!overlapsType(NumberType, stop.type)) {\n throw new Error(`Expected all stop input values in the interpolate operation to be of type number` + `, got ${typeName(stop.type)} at position ${i + 2} instead`);\n }\n let output = parse(encoded[i + 4], context);\n if (!overlapsType(NumberType | ColorType, output.type)) {\n throw new Error(`Expected all stop output values in the interpolate operation to be a number or color` + `, got ${typeName(output.type)} at position ${i + 3} instead`);\n }\n // parse again with narrower types\n stop = parse(encoded[i + 3], context, NumberType);\n output = parse(encoded[i + 4], context, NumberType | ColorType);\n args[i] = stop;\n args[i + 1] = output;\n }\n return [interpolation, input, ...args];\n}\n\n/**\n * @type ArgValidator\n */\nfunction parseCaseArgs(encoded, context, parsedArgs, typeHint) {\n const fallback = parse(encoded[encoded.length - 1], context);\n let outputType = typeHint !== undefined ? typeHint & fallback.type : fallback.type;\n\n // first parse args to figure out possible types\n const args = new Array(encoded.length - 1);\n for (let i = 0; i < args.length - 1; i += 2) {\n const condition = parse(encoded[i + 1], context);\n const output = parse(encoded[i + 2], context);\n if (!overlapsType(BooleanType, condition.type)) {\n throw new Error(`Expected all conditions in the case operation to be of type boolean` + `, got ${typeName(condition.type)} at position ${i} instead`);\n }\n outputType &= output.type;\n args[i] = condition;\n args[i + 1] = output;\n }\n if (isType(outputType, NoneType)) {\n throw new Error(`Could not find a common output type for the following case operation: ` + JSON.stringify(encoded));\n }\n\n // parse again args with common output type\n for (let i = 0; i < args.length - 1; i += 2) {\n args[i + 1] = parse(encoded[i + 2], context, outputType);\n }\n args[args.length - 1] = parse(encoded[encoded.length - 1], context, outputType);\n return args;\n}\n\n/**\n * @type ArgValidator\n */\nfunction parseInArgs(encoded, context) {\n /** @type {Array} */\n let haystack = /** @type {any} */encoded[2];\n if (!Array.isArray(haystack)) {\n throw new Error(`The \"in\" operator was provided a literal value which was not an array as second argument.`);\n }\n if (typeof haystack[0] === 'string') {\n if (haystack[0] !== 'literal') {\n throw new Error(`For the \"in\" operator, a string array should be wrapped in a \"literal\" operator to disambiguate from expressions.`);\n }\n if (!Array.isArray(haystack[1])) {\n throw new Error(`The \"in\" operator was provided a literal value which was not an array as second argument.`);\n }\n haystack = haystack[1];\n }\n let needleType = StringType | NumberType;\n const args = new Array(haystack.length);\n for (let i = 0; i < args.length; i++) {\n const arg = parse(haystack[i], context);\n needleType &= arg.type;\n args[i] = arg;\n }\n if (isType(needleType, NoneType)) {\n throw new Error(`Could not find a common type for the following in operation: ` + JSON.stringify(encoded));\n }\n const needle = parse(encoded[1], context, needleType);\n return [needle, ...args];\n}\n\n/**\n * @type ArgValidator\n */\nfunction parsePaletteArgs(encoded, context) {\n const index = parse(encoded[1], context, NumberType);\n if (index.type !== NumberType) {\n throw new Error(`The first argument of palette must be an number, got ${typeName(index.type)} instead`);\n }\n const colors = encoded[2];\n if (!Array.isArray(colors)) {\n throw new Error('The second argument of palette must be an array');\n }\n const parsedColors = new Array(colors.length);\n for (let i = 0; i < parsedColors.length; i++) {\n const color = parse(colors[i], context, ColorType);\n if (!(color instanceof LiteralExpression)) {\n throw new Error(`The palette color at index ${i} must be a literal value`);\n }\n if (!overlapsType(color.type, ColorType)) {\n throw new Error(`The palette color at index ${i} should be of type color, got ${typeName(color.type)} instead`);\n }\n parsedColors[i] = color;\n }\n return [index, ...parsedColors];\n}\n\n/**\n * @param {number|function(Array):number} returnType The return type of the operator; can be a fixed value or a callback taking the parsed\n * arguments\n * @param {Array} argValidators A chain of argument validators; the return value of the last validator\n * will be used as parsed arguments\n * @return {Parser} The parser.\n */\nfunction createParser(returnType, ...argValidators) {\n return function (encoded, context, typeHint) {\n const operator = encoded[0];\n let parsedArgs = [];\n for (let i = 0; i < argValidators.length; i++) {\n parsedArgs = argValidators[i](encoded, context, parsedArgs, typeHint) || parsedArgs;\n }\n let actualType = typeof returnType === 'function' ? returnType(parsedArgs) : returnType;\n if (typeHint !== undefined) {\n if (!overlapsType(actualType, typeHint)) {\n throw new Error(`The following expression was expected to return ${typeName(typeHint)}, but returns ${typeName(actualType)} instead: ${JSON.stringify(encoded)}`);\n }\n actualType &= typeHint;\n }\n if (actualType === NoneType) {\n throw new Error(`No matching type was found for the following expression: ${JSON.stringify(encoded)}`);\n }\n return new CallExpression(actualType, operator, ...parsedArgs);\n };\n}\n\n/**\n * @param {Array} encoded The encoded expression.\n * @param {ParsingContext} context The parsing context.\n * @param {number} [typeHint] Optional type hint\n * @return {Expression} The parsed expression.\n */\nfunction parseCallExpression(encoded, context, typeHint) {\n const operator = encoded[0];\n const parser = parsers[operator];\n if (!parser) {\n throw new Error(`Unknown operator: ${operator}`);\n }\n return parser(encoded, context, typeHint);\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/expr/expression.js?");
/***/ }),
/***/ "./node_modules/ol/extent.js":
/*!***********************************!*\
!*** ./node_modules/ol/extent.js ***!
\***********************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyTransform: function() { return /* binding */ applyTransform; },\n/* harmony export */ approximatelyEquals: function() { return /* binding */ approximatelyEquals; },\n/* harmony export */ boundingExtent: function() { return /* binding */ boundingExtent; },\n/* harmony export */ buffer: function() { return /* binding */ buffer; },\n/* harmony export */ clone: function() { return /* binding */ clone; },\n/* harmony export */ closestSquaredDistanceXY: function() { return /* binding */ closestSquaredDistanceXY; },\n/* harmony export */ containsCoordinate: function() { return /* binding */ containsCoordinate; },\n/* harmony export */ containsExtent: function() { return /* binding */ containsExtent; },\n/* harmony export */ containsXY: function() { return /* binding */ containsXY; },\n/* harmony export */ coordinateRelationship: function() { return /* binding */ coordinateRelationship; },\n/* harmony export */ createEmpty: function() { return /* binding */ createEmpty; },\n/* harmony export */ createOrUpdate: function() { return /* binding */ createOrUpdate; },\n/* harmony export */ createOrUpdateEmpty: function() { return /* binding */ createOrUpdateEmpty; },\n/* harmony export */ createOrUpdateFromCoordinate: function() { return /* binding */ createOrUpdateFromCoordinate; },\n/* harmony export */ createOrUpdateFromCoordinates: function() { return /* binding */ createOrUpdateFromCoordinates; },\n/* harmony export */ createOrUpdateFromFlatCoordinates: function() { return /* binding */ createOrUpdateFromFlatCoordinates; },\n/* harmony export */ createOrUpdateFromRings: function() { return /* binding */ createOrUpdateFromRings; },\n/* harmony export */ equals: function() { return /* binding */ equals; },\n/* harmony export */ extend: function() { return /* binding */ extend; },\n/* harmony export */ extendCoordinate: function() { return /* binding */ extendCoordinate; },\n/* harmony export */ extendCoordinates: function() { return /* binding */ extendCoordinates; },\n/* harmony export */ extendFlatCoordinates: function() { return /* binding */ extendFlatCoordinates; },\n/* harmony export */ extendRings: function() { return /* binding */ extendRings; },\n/* harmony export */ extendXY: function() { return /* binding */ extendXY; },\n/* harmony export */ forEachCorner: function() { return /* binding */ forEachCorner; },\n/* harmony export */ getArea: function() { return /* binding */ getArea; },\n/* harmony export */ getBottomLeft: function() { return /* binding */ getBottomLeft; },\n/* harmony export */ getBottomRight: function() { return /* binding */ getBottomRight; },\n/* harmony export */ getCenter: function() { return /* binding */ getCenter; },\n/* harmony export */ getCorner: function() { return /* binding */ getCorner; },\n/* harmony export */ getEnlargedArea: function() { return /* binding */ getEnlargedArea; },\n/* harmony export */ getForViewAndSize: function() { return /* binding */ getForViewAndSize; },\n/* harmony export */ getHeight: function() { return /* binding */ getHeight; },\n/* harmony export */ getIntersection: function() { return /* binding */ getIntersection; },\n/* harmony export */ getIntersectionArea: function() { return /* binding */ getIntersectionArea; },\n/* harmony export */ getMargin: function() { return /* binding */ getMargin; },\n/* harmony export */ getRotatedViewport: function() { return /* binding */ getRotatedViewport; },\n/* harmony export */ getSize: function() { return /* binding */ getSize; },\n/* harmony export */ getTopLeft: function() { return /* binding */ getTopLeft; },\n/* harmony export */ getTopRight: function() { return /* binding */ getTopRight; },\n/* harmony export */ getWidth: function() { return /* binding */ getWidth; },\n/* harmony export */ intersects: function() { return /* binding */ intersects; },\n/* harmony export */ intersectsSegment: function() { return /* binding */ intersectsSegment; },\n/* harmony export */ isEmpty: function() { return /* binding */ isEmpty; },\n/* harmony export */ returnOrUpdate: function() { return /* binding */ returnOrUpdate; },\n/* harmony export */ scaleFromCenter: function() { return /* binding */ scaleFromCenter; },\n/* harmony export */ wrapAndSliceX: function() { return /* binding */ wrapAndSliceX; },\n/* harmony export */ wrapX: function() { return /* binding */ wrapX; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extent/Relationship.js */ \"./node_modules/ol/extent/Relationship.js\");\n\n/**\n * @module ol/extent\n */\n\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nfunction boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nfunction buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [extent[0] - value, extent[1] - value, extent[2] + value, extent[3] + value];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nfunction clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nfunction closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nfunction containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nfunction containsExtent(extent1, extent2) {\n return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] && extent1[1] <= extent2[1] && extent2[3] <= extent1[3];\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nfunction containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nfunction coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].UNKNOWN;\n if (x < minX) {\n relationship = relationship | _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].LEFT;\n } else if (x > maxX) {\n relationship = relationship | _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].RIGHT;\n }\n if (y < minY) {\n relationship = relationship | _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].BELOW;\n } else if (y > maxY) {\n relationship = relationship | _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ABOVE;\n }\n if (relationship === _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].UNKNOWN) {\n relationship = _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nfunction createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nfunction createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nfunction createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nfunction createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nfunction createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nfunction createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nfunction createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nfunction equals(extent1, extent2) {\n return extent1[0] == extent2[0] && extent1[2] == extent2[2] && extent1[1] == extent2[1] && extent1[3] == extent2[3];\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nfunction approximatelyEquals(extent1, extent2, tolerance) {\n return Math.abs(extent1[0] - extent2[0]) < tolerance && Math.abs(extent1[2] - extent2[2]) < tolerance && Math.abs(extent1[1] - extent2[1]) < tolerance && Math.abs(extent1[3] - extent2[3]) < tolerance;\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nfunction extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nfunction extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nfunction extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nfunction extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nfunction extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nfunction extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nfunction forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nfunction getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nfunction getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nfunction getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nfunction getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nfunction getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nfunction getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nfunction getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(center, resolution, rotation, size);\n return createOrUpdate(Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3), Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3), dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nfunction getRotatedViewport(center, resolution, rotation, size) {\n const dx = resolution * size[0] / 2;\n const dy = resolution * size[1] / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [x - xCos + ySin, y - xSin - yCos, x - xCos - ySin, y - xSin + yCos, x + xCos - ySin, y + xSin + yCos, x + xCos + ySin, y + xSin - yCos, x - xCos + ySin, y - xSin - yCos];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nfunction getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nfunction getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nfunction getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nfunction getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nfunction getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nfunction getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nfunction getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nfunction getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nfunction intersects(extent1, extent2) {\n return extent1[0] <= extent2[2] && extent1[2] >= extent2[0] && extent1[1] <= extent2[3] && extent1[3] >= extent2[1];\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nfunction isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nfunction returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nfunction scaleFromCenter(extent, value) {\n const deltaX = (extent[2] - extent[0]) / 2 * (value - 1);\n const deltaY = (extent[3] - extent[1]) / 2 * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nfunction intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (startRel === _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].INTERSECTING || endRel === _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].INTERSECTING) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ABOVE) && !(startRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects && !!(endRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].RIGHT) && !(startRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].RIGHT)) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (!intersects && !!(endRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].BELOW) && !(startRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].BELOW)) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects && !!(endRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].LEFT) && !(startRel & _extent_Relationship_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].LEFT)) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nfunction applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(extent[0] + width * i / stops, extent[1], extent[2], extent[1] + height * i / stops, extent[2] - width * i / stops, extent[3], extent[0], extent[3] - height * i / stops);\n }\n } else {\n coordinates = [extent[0], extent[1], extent[2], extent[1], extent[2], extent[3], extent[0], extent[3]];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nfunction wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (projection.canWrapX() && (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor((center[0] - projectionExtent[0]) / worldWidth);\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Array} The extent within the real world extent.\n */\nfunction wrapAndSliceX(extent, projection) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n if (getWidth(extent) > worldWidth) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [[extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]], [projectionExtent[0], extent[1], extent[2], extent[3]]];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [[extent[0], extent[1], projectionExtent[2], extent[3]], [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]]];\n }\n }\n return [extent];\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/extent.js?");
/***/ }),
/***/ "./node_modules/ol/extent/Relationship.js":
/*!************************************************!*\
!*** ./node_modules/ol/extent/Relationship.js ***!
\************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16\n});\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/extent/Relationship.js?");
/***/ }),
/***/ "./node_modules/ol/featureloader.js":
/*!******************************************!*\
!*** ./node_modules/ol/featureloader.js ***!
\******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadFeaturesXhr: function() { return /* binding */ loadFeaturesXhr; },\n/* harmony export */ setWithCredentials: function() { return /* binding */ setWithCredentials; },\n/* harmony export */ xhr: function() { return /* binding */ xhr; }\n/* harmony export */ });\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./functions.js */ \"./node_modules/ol/functions.js\");\n/**\n * @module ol/featureloader\n */\n\n\n/**\n *\n * @type {boolean}\n * @private\n */\nlet withCredentials = false;\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * load features.\n *\n * This function takes up to 5 arguments. These are an {@link module:ol/extent~Extent} representing\n * the area to be loaded, a `{number}` representing the resolution (map units per pixel), an\n * {@link module:ol/proj/Projection~Projection} for the projection, an optional success callback that should get\n * the loaded features passed as an argument and an optional failure callback with no arguments. If\n * the callbacks are not used, the corresponding vector source will not fire `'featuresloadend'` and\n * `'featuresloaderror'` events. `this` within the function is bound to the\n * {@link module:ol/source/Vector~VectorSource} it's called from.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n * @typedef {function(this:(import(\"./source/Vector\").default|import(\"./VectorTile.js\").default),\n * import(\"./extent.js\").Extent,\n * number,\n * import(\"./proj/Projection.js\").default,\n * function(Array): void=,\n * function(): void=): void} FeatureLoader\n * @api\n */\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection~Projection} for the projection as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n\n/**\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array, import(\"./proj/Projection.js\").default): void} success Success\n * Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n * Function called when loading failed.\n */\nfunction loadFeaturesXhr(url, format, extent, resolution, projection, success, failure) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', typeof url === 'function' ? url(extent, resolution, projection) : url, true);\n if (format.getType() == 'arraybuffer') {\n xhr.responseType = 'arraybuffer';\n }\n xhr.withCredentials = withCredentials;\n /**\n * @param {Event} event Event.\n * @private\n */\n xhr.onload = function (event) {\n // status will be 0 for file:// urls\n if (!xhr.status || xhr.status >= 200 && xhr.status < 300) {\n const type = format.getType();\n /** @type {Document|Node|Object|string|undefined} */\n let source;\n if (type == 'json') {\n source = JSON.parse(xhr.responseText);\n } else if (type == 'text') {\n source = xhr.responseText;\n } else if (type == 'xml') {\n source = xhr.responseXML;\n if (!source) {\n source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');\n }\n } else if (type == 'arraybuffer') {\n source = /** @type {ArrayBuffer} */xhr.response;\n }\n if (source) {\n success(/** @type {Array} */\n\n format.readFeatures(source, {\n extent: extent,\n featureProjection: projection\n }), format.readProjection(source));\n } else {\n failure();\n }\n } else {\n failure();\n }\n };\n /**\n * @private\n */\n xhr.onerror = failure;\n xhr.send();\n}\n\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @return {FeatureLoader} The feature loader.\n * @api\n */\nfunction xhr(url, format) {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array): void} [success] Success\n * Function called when loading succeeded.\n * @param {function(): void} [failure] Failure\n * Function called when loading failed.\n */\n return function (extent, resolution, projection, success, failure) {\n const source = /** @type {import(\"./source/Vector\").default} */this;\n loadFeaturesXhr(url, format, extent, resolution, projection,\n /**\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n * projection.\n */\n function (features, dataProjection) {\n source.addFeatures(features);\n if (success !== undefined) {\n success(features);\n }\n }, /* FIXME handle error */failure ? failure : _functions_js__WEBPACK_IMPORTED_MODULE_0__.VOID);\n };\n}\n\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nfunction setWithCredentials(xhrWithCredentials) {\n withCredentials = xhrWithCredentials;\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/featureloader.js?");
/***/ }),
/***/ "./node_modules/ol/functions.js":
/*!**************************************!*\
!*** ./node_modules/ol/functions.js ***!
\**************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FALSE: function() { return /* binding */ FALSE; },\n/* harmony export */ TRUE: function() { return /* binding */ TRUE; },\n/* harmony export */ VOID: function() { return /* binding */ VOID; },\n/* harmony export */ memoizeOne: function() { return /* binding */ memoizeOne; },\n/* harmony export */ toPromise: function() { return /* binding */ toPromise; }\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array.js */ \"./node_modules/ol/array.js\");\n/**\n * @module ol/functions\n */\n\n\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nfunction TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nfunction FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nfunction VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nfunction memoizeOne(fn) {\n let called = false;\n\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array} */\n let lastArgs;\n let lastThis;\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !(0,_array_js__WEBPACK_IMPORTED_MODULE_0__.equals)(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nfunction toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/functions.js?");
/***/ }),
/***/ "./node_modules/ol/geom/Circle.js":
/*!****************************************!*\
!*** ./node_modules/ol/geom/Circle.js ***!
\****************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _SimpleGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SimpleGeometry.js */ \"./node_modules/ol/geom/SimpleGeometry.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _flat_deflate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flat/deflate.js */ \"./node_modules/ol/geom/flat/deflate.js\");\n/* harmony import */ var _flat_transform_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./flat/transform.js */ \"./node_modules/ol/geom/flat/transform.js\");\n/**\n * @module ol/geom/Circle\n */\n\n\n\n\n\n/**\n * @classdesc\n * Circle geometry.\n *\n * @api\n */\nclass Circle extends _SimpleGeometry_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n /**\n * @param {!import(\"../coordinate.js\").Coordinate} center Center.\n * For internal use, flat coordinates in combination with `layout` and no\n * `radius` are also accepted.\n * @param {number} [radius] Radius in units of the projection.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n constructor(center, radius, layout) {\n super();\n if (layout !== undefined && radius === undefined) {\n this.setFlatCoordinates(layout, center);\n } else {\n radius = radius ? radius : 0;\n this.setCenterAndRadius(center, radius, layout);\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Circle} Clone.\n * @api\n */\n clone() {\n const circle = new Circle(this.flatCoordinates.slice(), undefined, this.layout);\n circle.applyProperties(this);\n return circle;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const dx = x - flatCoordinates[0];\n const dy = y - flatCoordinates[1];\n const squaredDistance = dx * dx + dy * dy;\n if (squaredDistance < minSquaredDistance) {\n if (squaredDistance === 0) {\n for (let i = 0; i < this.stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n } else {\n const delta = this.getRadius() / Math.sqrt(squaredDistance);\n closestPoint[0] = flatCoordinates[0] + delta * dx;\n closestPoint[1] = flatCoordinates[1] + delta * dy;\n for (let i = 2; i < this.stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n }\n closestPoint.length = this.stride;\n return squaredDistance;\n }\n return minSquaredDistance;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const flatCoordinates = this.flatCoordinates;\n const dx = x - flatCoordinates[0];\n const dy = y - flatCoordinates[1];\n return dx * dx + dy * dy <= this.getRadiusSquared_();\n }\n\n /**\n * Return the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.\n * @return {import(\"../coordinate.js\").Coordinate} Center.\n * @api\n */\n getCenter() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n const flatCoordinates = this.flatCoordinates;\n const radius = flatCoordinates[this.stride] - flatCoordinates[0];\n return (0,_extent_js__WEBPACK_IMPORTED_MODULE_1__.createOrUpdate)(flatCoordinates[0] - radius, flatCoordinates[1] - radius, flatCoordinates[0] + radius, flatCoordinates[1] + radius, extent);\n }\n\n /**\n * Return the radius of the circle.\n * @return {number} Radius.\n * @api\n */\n getRadius() {\n return Math.sqrt(this.getRadiusSquared_());\n }\n\n /**\n * @private\n * @return {number} Radius squared.\n */\n getRadiusSquared_() {\n const dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];\n const dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];\n return dx * dx + dy * dy;\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'Circle';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n const circleExtent = this.getExtent();\n if ((0,_extent_js__WEBPACK_IMPORTED_MODULE_1__.intersects)(extent, circleExtent)) {\n const center = this.getCenter();\n if (extent[0] <= center[0] && extent[2] >= center[0]) {\n return true;\n }\n if (extent[1] <= center[1] && extent[3] >= center[1]) {\n return true;\n }\n return (0,_extent_js__WEBPACK_IMPORTED_MODULE_1__.forEachCorner)(extent, this.intersectsCoordinate.bind(this));\n }\n return false;\n }\n\n /**\n * Set the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} center Center.\n * @api\n */\n setCenter(center) {\n const stride = this.stride;\n const radius = this.flatCoordinates[stride] - this.flatCoordinates[0];\n const flatCoordinates = center.slice();\n flatCoordinates[stride] = flatCoordinates[0] + radius;\n for (let i = 1; i < stride; ++i) {\n flatCoordinates[stride + i] = center[i];\n }\n this.setFlatCoordinates(this.layout, flatCoordinates);\n this.changed();\n }\n\n /**\n * Set the center (as {@link module:ol/coordinate~Coordinate coordinate}) and the radius (as\n * number) of the circle.\n * @param {!import(\"../coordinate.js\").Coordinate} center Center.\n * @param {number} radius Radius.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n */\n setCenterAndRadius(center, radius, layout) {\n this.setLayout(layout, center, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n /** @type {Array} */\n const flatCoordinates = this.flatCoordinates;\n let offset = (0,_flat_deflate_js__WEBPACK_IMPORTED_MODULE_2__.deflateCoordinate)(flatCoordinates, 0, center, this.stride);\n flatCoordinates[offset++] = flatCoordinates[0] + radius;\n for (let i = 1, ii = this.stride; i < ii; ++i) {\n flatCoordinates[offset++] = flatCoordinates[i];\n }\n flatCoordinates.length = offset;\n this.changed();\n }\n getCoordinates() {\n return null;\n }\n setCoordinates(coordinates, layout) {}\n\n /**\n * Set the radius of the circle. The radius is in the units of the projection.\n * @param {number} radius Radius.\n * @api\n */\n setRadius(radius) {\n this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;\n this.changed();\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n const center = this.getCenter();\n const stride = this.getStride();\n this.setCenter((0,_flat_transform_js__WEBPACK_IMPORTED_MODULE_3__.rotate)(center, 0, center.length, stride, angle, anchor, center));\n this.changed();\n }\n}\n\n/**\n * Transform each coordinate of the circle from one coordinate reference system\n * to another. The geometry is modified in place.\n * If you do not want the geometry modified in place, first clone() it and\n * then use this function on the clone.\n *\n * Internally a circle is currently represented by two points: the center of\n * the circle `[cx, cy]`, and the point to the right of the circle\n * `[cx + r, cy]`. This `transform` function just transforms these two points.\n * So the resulting geometry is also a circle, and that circle does not\n * correspond to the shape that would be obtained by transforming every point\n * of the original circle.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Circle} This geometry. Note that original geometry is\n * modified in place.\n * @function\n * @api\n */\nCircle.prototype.transform;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Circle);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/geom/Circle.js?");
/***/ }),
/***/ "./node_modules/ol/geom/Geometry.js":
/*!******************************************!*\
!*** ./node_modules/ol/geom/Geometry.js ***!
\******************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Object.js */ \"./node_modules/ol/Object.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util.js */ \"./node_modules/ol/util.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transform.js */ \"./node_modules/ol/transform.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _proj_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../proj.js */ \"./node_modules/ol/proj.js\");\n/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../functions.js */ \"./node_modules/ol/functions.js\");\n/* harmony import */ var _flat_transform_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./flat/transform.js */ \"./node_modules/ol/geom/flat/transform.js\");\n/**\n * @module ol/geom/Geometry\n */\n\n\n\n\n\n\n\n\n/**\n * @typedef {'XY' | 'XYZ' | 'XYM' | 'XYZM'} GeometryLayout\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available.\n */\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | 'Circle'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, or `'Circle'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = (0,_transform_js__WEBPACK_IMPORTED_MODULE_1__.create)();\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends _Object_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor() {\n super();\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = (0,_extent_js__WEBPACK_IMPORTED_MODULE_3__.createEmpty)();\n\n /**\n * @private\n * @type {number}\n */\n this.extentRevision_ = -1;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryRevision = 0;\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n this.simplifyTransformedInternal = (0,_functions_js__WEBPACK_IMPORTED_MODULE_4__.memoizeOne)((revision, squaredTolerance, transform) => {\n if (!transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n const clone = this.clone();\n clone.applyTransform(transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n });\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this.simplifyTransformedInternal(this.getRevision(), squaredTolerance, transform);\n }\n\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n clone() {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n }\n\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate} [closestPoint] Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n getClosestPoint(point, closestPoint) {\n closestPoint = closestPoint ? closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n }\n\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n intersectsCoordinate(coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n }\n\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent} [extent] Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n getExtent(extent) {\n if (this.extentRevision_ != this.getRevision()) {\n const extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n (0,_extent_js__WEBPACK_IMPORTED_MODULE_3__.createOrUpdateEmpty)(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return (0,_extent_js__WEBPACK_IMPORTED_MODULE_3__.returnOrUpdate)(this.extent_, extent);\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, sy, anchor) {\n (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n simplify(tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {Type} Geometry type.\n */\n getType() {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n applyTransform(transformFn) {\n (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n intersectsExtent(extent) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.abstract)();\n }\n\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n transform(source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n const sourceProj = (0,_proj_js__WEBPACK_IMPORTED_MODULE_0__.get)(source);\n const transformFn = sourceProj.getUnits() == 'tile-pixels' ? function (inCoordinates, outCoordinates, stride) {\n const pixelExtent = sourceProj.getExtent();\n const projectedExtent = sourceProj.getWorldExtent();\n const scale = (0,_extent_js__WEBPACK_IMPORTED_MODULE_3__.getHeight)(projectedExtent) / (0,_extent_js__WEBPACK_IMPORTED_MODULE_3__.getHeight)(pixelExtent);\n (0,_transform_js__WEBPACK_IMPORTED_MODULE_1__.compose)(tmpTransform, projectedExtent[0], projectedExtent[3], scale, -scale, 0, 0, 0);\n (0,_flat_transform_js__WEBPACK_IMPORTED_MODULE_6__.transform2D)(inCoordinates, 0, inCoordinates.length, stride, tmpTransform, outCoordinates);\n return (0,_proj_js__WEBPACK_IMPORTED_MODULE_0__.getTransform)(sourceProj, destination)(inCoordinates, outCoordinates, stride);\n } : (0,_proj_js__WEBPACK_IMPORTED_MODULE_0__.getTransform)(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Geometry);\n\n//# sourceURL=webpack://complexForFunnel/./node_modules/ol/geom/Geometry.js?");
/***/ }),
/***/ "./node_modules/ol/geom/GeometryCollection.js":
/*!****************************************************!*\
!*** ./node_modules/ol/geom/GeometryCollection.js ***!
\****************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../events/EventType.js */ \"./node_modules/ol/events/EventType.js\");\n/* harmony import */ var _Geometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Geometry.js */ \"./node_modules/ol/geom/Geometry.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../extent.js */ \"./node_modules/ol/extent.js\");\n/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../events.js */ \"./node_modules/ol/events.js\");\n\n/**\n * @module ol/geom/GeometryCollection\n */\n\n\n\n\n\n/**\n * @classdesc\n * An array of {@link module:ol/geom/Geometry~Geometry} objects.\n *\n * @api\n */\nclass GeometryCollection extends _Geometry_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n /**\n * @param {Array} [geometries] Geometries.\n */\n constructor(geometries) {\n super();\n\n /**\n * @private\n * @type {Array