{"version":3,"file":"pl3xmap.js","mappings":"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","sources":["webpack://pl3xmap/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://pl3xmap/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://pl3xmap/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://pl3xmap/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://pl3xmap/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://pl3xmap/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://pl3xmap/./node_modules/svg-baker-runtime/browser-symbol.js","webpack://pl3xmap/./node_modules/svg-sprite-loader/runtime/browser-sprite.build.js","webpack://pl3xmap/./src/lib/L.ellipse.js","webpack://pl3xmap/./src/lib/L.rotated.js","webpack://pl3xmap/webpack/bootstrap","webpack://pl3xmap/webpack/runtime/compat get default export","webpack://pl3xmap/webpack/runtime/define property getters","webpack://pl3xmap/webpack/runtime/global","webpack://pl3xmap/webpack/runtime/hasOwnProperty shorthand","webpack://pl3xmap/webpack/runtime/nonce","webpack://pl3xmap/./src/control/ControlManager.ts","webpack://pl3xmap/./src/player/Player.ts","webpack://pl3xmap/external var \"L\"","webpack://pl3xmap/./src/util/Util.ts","webpack://pl3xmap/./src/player/PlayerManager.ts","webpack://pl3xmap/./src/control/ControlBox.ts","webpack://pl3xmap/./src/control/BlockInfoControl.ts","webpack://pl3xmap/./src/control/CoordsControl.ts","webpack://pl3xmap/./src/marker/options/Stroke.ts","webpack://pl3xmap/./src/marker/options/Fill.ts","webpack://pl3xmap/./src/marker/options/Tooltip.ts","webpack://pl3xmap/./src/svg/link.svg","webpack://pl3xmap/./src/control/LinkControl.ts","webpack://pl3xmap/./src/marker/Marker.ts","webpack://pl3xmap/./src/marker/Circle.ts","webpack://pl3xmap/./src/marker/Ellipse.ts","webpack://pl3xmap/./src/marker/Icon.ts","webpack://pl3xmap/./src/marker/MultiPolygon.ts","webpack://pl3xmap/./src/marker/MultiPolyline.ts","webpack://pl3xmap/./src/marker/Polygon.ts","webpack://pl3xmap/./src/marker/Polyline.ts","webpack://pl3xmap/./src/marker/Rectangle.ts","webpack://pl3xmap/./src/util/Color.ts","webpack://pl3xmap/./src/marker/options/Popup.ts","webpack://pl3xmap/./src/marker/options/MarkerOptions.ts","webpack://pl3xmap/./src/layergroup/MarkerLayer.ts","webpack://pl3xmap/./src/palette/Block.ts","webpack://pl3xmap/./src/palette/BlockInfo.ts","webpack://pl3xmap/./src/settings/Lang.ts","webpack://pl3xmap/./src/tilelayer/ReversedZoomTileLayer.ts","webpack://pl3xmap/./src/tilelayer/DoubleTileLayer.ts","webpack://pl3xmap/./src/world/World.ts","webpack://pl3xmap/./src/world/WorldManager.ts","webpack://pl3xmap/./src/svg/layers.svg","webpack://pl3xmap/./src/sidebar/LayersTab.ts","webpack://pl3xmap/./src/sidebar/BaseTab.ts","webpack://pl3xmap/./src/svg/players.svg","webpack://pl3xmap/./src/sidebar/PlayersTab.ts","webpack://pl3xmap/./src/svg/maps.svg","webpack://pl3xmap/./src/sidebar/WorldsTab.ts","webpack://pl3xmap/./src/control/SidebarControl.ts","webpack://pl3xmap/./src/map/Pl3xMapLeafletMap.ts","webpack://pl3xmap/./src/scss/styles.scss?b3c8","webpack://pl3xmap/./src/Pl3xMap.ts"],"sourcesContent":["\"use strict\";\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n\n return updater;\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n\n stylesInDOM.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n/* istanbul ignore next */\n\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n}\n/* istanbul ignore next */\n\n\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\n\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\n\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n\n var needLayer = typeof obj.layer !== \"undefined\";\n\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n\n css += obj.css;\n\n if (needLayer) {\n css += \"}\";\n }\n\n if (obj.media) {\n css += \"}\";\n }\n\n if (obj.supports) {\n css += \"}\";\n }\n\n var sourceMap = obj.sourceMap;\n\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n\n styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next */\n\n\nfunction domAPI(options) {\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\n\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n\n styleElement.appendChild(document.createTextNode(css));\n }\n}\n\nmodule.exports = styleTagTransform;","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.BrowserSpriteSymbol = factory());\n}(this, (function () { 'use strict';\n\nvar SpriteSymbol = function SpriteSymbol(ref) {\n var id = ref.id;\n var viewBox = ref.viewBox;\n var content = ref.content;\n\n this.id = id;\n this.viewBox = viewBox;\n this.content = content;\n};\n\n/**\n * @return {string}\n */\nSpriteSymbol.prototype.stringify = function stringify () {\n return this.content;\n};\n\n/**\n * @return {string}\n */\nSpriteSymbol.prototype.toString = function toString () {\n return this.stringify();\n};\n\nSpriteSymbol.prototype.destroy = function destroy () {\n var this$1 = this;\n\n ['id', 'viewBox', 'content'].forEach(function (prop) { return delete this$1[prop]; });\n};\n\n/**\n * @param {string} content\n * @return {Element}\n */\nvar parse = function (content) {\n var hasImportNode = !!document.importNode;\n var doc = new DOMParser().parseFromString(content, 'image/svg+xml').documentElement;\n\n /**\n * Fix for browser which are throwing WrongDocumentError\n * if you insert an element which is not part of the document\n * @see http://stackoverflow.com/a/7986519/4624403\n */\n if (hasImportNode) {\n return document.importNode(doc, true);\n }\n\n return doc;\n};\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar deepmerge = createCommonjsModule(function (module, exports) {\n(function (root, factory) {\n if (typeof undefined === 'function' && undefined.amd) {\n undefined(factory);\n } else {\n module.exports = factory();\n }\n}(commonjsGlobal, function () {\n\nfunction isMergeableObject(val) {\n var nonNullObject = val && typeof val === 'object';\n\n return nonNullObject\n && Object.prototype.toString.call(val) !== '[object RegExp]'\n && Object.prototype.toString.call(val) !== '[object Date]'\n}\n\nfunction emptyTarget(val) {\n return Array.isArray(val) ? [] : {}\n}\n\nfunction cloneIfNecessary(value, optionsArgument) {\n var clone = optionsArgument && optionsArgument.clone === true;\n return (clone && isMergeableObject(value)) ? deepmerge(emptyTarget(value), value, optionsArgument) : value\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n var destination = target.slice();\n source.forEach(function(e, i) {\n if (typeof destination[i] === 'undefined') {\n destination[i] = cloneIfNecessary(e, optionsArgument);\n } else if (isMergeableObject(e)) {\n destination[i] = deepmerge(target[i], e, optionsArgument);\n } else if (target.indexOf(e) === -1) {\n destination.push(cloneIfNecessary(e, optionsArgument));\n }\n });\n return destination\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n var destination = {};\n if (isMergeableObject(target)) {\n Object.keys(target).forEach(function (key) {\n destination[key] = cloneIfNecessary(target[key], optionsArgument);\n });\n }\n Object.keys(source).forEach(function (key) {\n if (!isMergeableObject(source[key]) || !target[key]) {\n destination[key] = cloneIfNecessary(source[key], optionsArgument);\n } else {\n destination[key] = deepmerge(target[key], source[key], optionsArgument);\n }\n });\n return destination\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n var array = Array.isArray(source);\n var options = optionsArgument || { arrayMerge: defaultArrayMerge };\n var arrayMerge = options.arrayMerge || defaultArrayMerge;\n\n if (array) {\n return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : cloneIfNecessary(source, optionsArgument)\n } else {\n return mergeObject(target, source, optionsArgument)\n }\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n if (!Array.isArray(array) || array.length < 2) {\n throw new Error('first argument should be an array with at least two elements')\n }\n\n // we are sure there are at least 2 values, so it is safe to have no initial value\n return array.reduce(function(prev, next) {\n return deepmerge(prev, next, optionsArgument)\n })\n};\n\nreturn deepmerge\n\n}));\n});\n\nvar namespaces_1 = createCommonjsModule(function (module, exports) {\nvar namespaces = {\n svg: {\n name: 'xmlns',\n uri: 'http://www.w3.org/2000/svg'\n },\n xlink: {\n name: 'xmlns:xlink',\n uri: 'http://www.w3.org/1999/xlink'\n }\n};\n\nexports.default = namespaces;\nmodule.exports = exports.default;\n});\n\n/**\n * @param {Object} attrs\n * @return {string}\n */\nvar objectToAttrsString = function (attrs) {\n return Object.keys(attrs).map(function (attr) {\n var value = attrs[attr].toString().replace(/\"/g, '"');\n return (attr + \"=\\\"\" + value + \"\\\"\");\n }).join(' ');\n};\n\nvar svg = namespaces_1.svg;\nvar xlink = namespaces_1.xlink;\n\nvar defaultAttrs = {};\ndefaultAttrs[svg.name] = svg.uri;\ndefaultAttrs[xlink.name] = xlink.uri;\n\n/**\n * @param {string} [content]\n * @param {Object} [attributes]\n * @return {string}\n */\nvar wrapInSvgString = function (content, attributes) {\n if ( content === void 0 ) content = '';\n\n var attrs = deepmerge(defaultAttrs, attributes || {});\n var attrsRendered = objectToAttrsString(attrs);\n return (\"\");\n};\n\nvar BrowserSpriteSymbol = (function (SpriteSymbol$$1) {\n function BrowserSpriteSymbol () {\n SpriteSymbol$$1.apply(this, arguments);\n }\n\n if ( SpriteSymbol$$1 ) BrowserSpriteSymbol.__proto__ = SpriteSymbol$$1;\n BrowserSpriteSymbol.prototype = Object.create( SpriteSymbol$$1 && SpriteSymbol$$1.prototype );\n BrowserSpriteSymbol.prototype.constructor = BrowserSpriteSymbol;\n\n var prototypeAccessors = { isMounted: {} };\n\n prototypeAccessors.isMounted.get = function () {\n return !!this.node;\n };\n\n /**\n * @param {Element} node\n * @return {BrowserSpriteSymbol}\n */\n BrowserSpriteSymbol.createFromExistingNode = function createFromExistingNode (node) {\n return new BrowserSpriteSymbol({\n id: node.getAttribute('id'),\n viewBox: node.getAttribute('viewBox'),\n content: node.outerHTML\n });\n };\n\n BrowserSpriteSymbol.prototype.destroy = function destroy () {\n if (this.isMounted) {\n this.unmount();\n }\n SpriteSymbol$$1.prototype.destroy.call(this);\n };\n\n /**\n * @param {Element|string} target\n * @return {Element}\n */\n BrowserSpriteSymbol.prototype.mount = function mount (target) {\n if (this.isMounted) {\n return this.node;\n }\n\n var mountTarget = typeof target === 'string' ? document.querySelector(target) : target;\n var node = this.render();\n this.node = node;\n\n mountTarget.appendChild(node);\n\n return node;\n };\n\n /**\n * @return {Element}\n */\n BrowserSpriteSymbol.prototype.render = function render () {\n var content = this.stringify();\n return parse(wrapInSvgString(content)).childNodes[0];\n };\n\n BrowserSpriteSymbol.prototype.unmount = function unmount () {\n this.node.parentNode.removeChild(this.node);\n };\n\n Object.defineProperties( BrowserSpriteSymbol.prototype, prototypeAccessors );\n\n return BrowserSpriteSymbol;\n}(SpriteSymbol));\n\nreturn BrowserSpriteSymbol;\n\n})));\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.BrowserSprite = factory());\n}(this, (function () { 'use strict';\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar deepmerge = createCommonjsModule(function (module, exports) {\n(function (root, factory) {\n if (typeof undefined === 'function' && undefined.amd) {\n undefined(factory);\n } else {\n module.exports = factory();\n }\n}(commonjsGlobal, function () {\n\nfunction isMergeableObject(val) {\n var nonNullObject = val && typeof val === 'object';\n\n return nonNullObject\n && Object.prototype.toString.call(val) !== '[object RegExp]'\n && Object.prototype.toString.call(val) !== '[object Date]'\n}\n\nfunction emptyTarget(val) {\n return Array.isArray(val) ? [] : {}\n}\n\nfunction cloneIfNecessary(value, optionsArgument) {\n var clone = optionsArgument && optionsArgument.clone === true;\n return (clone && isMergeableObject(value)) ? deepmerge(emptyTarget(value), value, optionsArgument) : value\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n var destination = target.slice();\n source.forEach(function(e, i) {\n if (typeof destination[i] === 'undefined') {\n destination[i] = cloneIfNecessary(e, optionsArgument);\n } else if (isMergeableObject(e)) {\n destination[i] = deepmerge(target[i], e, optionsArgument);\n } else if (target.indexOf(e) === -1) {\n destination.push(cloneIfNecessary(e, optionsArgument));\n }\n });\n return destination\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n var destination = {};\n if (isMergeableObject(target)) {\n Object.keys(target).forEach(function (key) {\n destination[key] = cloneIfNecessary(target[key], optionsArgument);\n });\n }\n Object.keys(source).forEach(function (key) {\n if (!isMergeableObject(source[key]) || !target[key]) {\n destination[key] = cloneIfNecessary(source[key], optionsArgument);\n } else {\n destination[key] = deepmerge(target[key], source[key], optionsArgument);\n }\n });\n return destination\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n var array = Array.isArray(source);\n var options = optionsArgument || { arrayMerge: defaultArrayMerge };\n var arrayMerge = options.arrayMerge || defaultArrayMerge;\n\n if (array) {\n return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : cloneIfNecessary(source, optionsArgument)\n } else {\n return mergeObject(target, source, optionsArgument)\n }\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n if (!Array.isArray(array) || array.length < 2) {\n throw new Error('first argument should be an array with at least two elements')\n }\n\n // we are sure there are at least 2 values, so it is safe to have no initial value\n return array.reduce(function(prev, next) {\n return deepmerge(prev, next, optionsArgument)\n })\n};\n\nreturn deepmerge\n\n}));\n});\n\n// \n// An event handler can take an optional event argument\n// and should not return a value\n \n// An array of all currently registered event handlers for a type\n \n// A map of event types and their corresponding event handlers.\n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberof mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nvar namespaces_1 = createCommonjsModule(function (module, exports) {\nvar namespaces = {\n svg: {\n name: 'xmlns',\n uri: 'http://www.w3.org/2000/svg'\n },\n xlink: {\n name: 'xmlns:xlink',\n uri: 'http://www.w3.org/1999/xlink'\n }\n};\n\nexports.default = namespaces;\nmodule.exports = exports.default;\n});\n\n/**\n * @param {Object} attrs\n * @return {string}\n */\nvar objectToAttrsString = function (attrs) {\n return Object.keys(attrs).map(function (attr) {\n var value = attrs[attr].toString().replace(/\"/g, '"');\n return (attr + \"=\\\"\" + value + \"\\\"\");\n }).join(' ');\n};\n\nvar svg = namespaces_1.svg;\nvar xlink = namespaces_1.xlink;\n\nvar defaultAttrs = {};\ndefaultAttrs[svg.name] = svg.uri;\ndefaultAttrs[xlink.name] = xlink.uri;\n\n/**\n * @param {string} [content]\n * @param {Object} [attributes]\n * @return {string}\n */\nvar wrapInSvgString = function (content, attributes) {\n if ( content === void 0 ) content = '';\n\n var attrs = deepmerge(defaultAttrs, attributes || {});\n var attrsRendered = objectToAttrsString(attrs);\n return (\"\");\n};\n\nvar svg$1 = namespaces_1.svg;\nvar xlink$1 = namespaces_1.xlink;\n\nvar defaultConfig = {\n attrs: ( obj = {\n style: ['position: absolute', 'width: 0', 'height: 0'].join('; '),\n 'aria-hidden': 'true'\n }, obj[svg$1.name] = svg$1.uri, obj[xlink$1.name] = xlink$1.uri, obj )\n};\nvar obj;\n\nvar Sprite = function Sprite(config) {\n this.config = deepmerge(defaultConfig, config || {});\n this.symbols = [];\n};\n\n/**\n * Add new symbol. If symbol with the same id exists it will be replaced.\n * @param {SpriteSymbol} symbol\n * @return {boolean} `true` - symbol was added, `false` - replaced\n */\nSprite.prototype.add = function add (symbol) {\n var ref = this;\n var symbols = ref.symbols;\n var existing = this.find(symbol.id);\n\n if (existing) {\n symbols[symbols.indexOf(existing)] = symbol;\n return false;\n }\n\n symbols.push(symbol);\n return true;\n};\n\n/**\n * Remove symbol & destroy it\n * @param {string} id\n * @return {boolean} `true` - symbol was found & successfully destroyed, `false` - otherwise\n */\nSprite.prototype.remove = function remove (id) {\n var ref = this;\n var symbols = ref.symbols;\n var symbol = this.find(id);\n\n if (symbol) {\n symbols.splice(symbols.indexOf(symbol), 1);\n symbol.destroy();\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {string} id\n * @return {SpriteSymbol|null}\n */\nSprite.prototype.find = function find (id) {\n return this.symbols.filter(function (s) { return s.id === id; })[0] || null;\n};\n\n/**\n * @param {string} id\n * @return {boolean}\n */\nSprite.prototype.has = function has (id) {\n return this.find(id) !== null;\n};\n\n/**\n * @return {string}\n */\nSprite.prototype.stringify = function stringify () {\n var ref = this.config;\n var attrs = ref.attrs;\n var stringifiedSymbols = this.symbols.map(function (s) { return s.stringify(); }).join('');\n return wrapInSvgString(stringifiedSymbols, attrs);\n};\n\n/**\n * @return {string}\n */\nSprite.prototype.toString = function toString () {\n return this.stringify();\n};\n\nSprite.prototype.destroy = function destroy () {\n this.symbols.forEach(function (s) { return s.destroy(); });\n};\n\nvar SpriteSymbol = function SpriteSymbol(ref) {\n var id = ref.id;\n var viewBox = ref.viewBox;\n var content = ref.content;\n\n this.id = id;\n this.viewBox = viewBox;\n this.content = content;\n};\n\n/**\n * @return {string}\n */\nSpriteSymbol.prototype.stringify = function stringify () {\n return this.content;\n};\n\n/**\n * @return {string}\n */\nSpriteSymbol.prototype.toString = function toString () {\n return this.stringify();\n};\n\nSpriteSymbol.prototype.destroy = function destroy () {\n var this$1 = this;\n\n ['id', 'viewBox', 'content'].forEach(function (prop) { return delete this$1[prop]; });\n};\n\n/**\n * @param {string} content\n * @return {Element}\n */\nvar parse = function (content) {\n var hasImportNode = !!document.importNode;\n var doc = new DOMParser().parseFromString(content, 'image/svg+xml').documentElement;\n\n /**\n * Fix for browser which are throwing WrongDocumentError\n * if you insert an element which is not part of the document\n * @see http://stackoverflow.com/a/7986519/4624403\n */\n if (hasImportNode) {\n return document.importNode(doc, true);\n }\n\n return doc;\n};\n\nvar BrowserSpriteSymbol = (function (SpriteSymbol$$1) {\n function BrowserSpriteSymbol () {\n SpriteSymbol$$1.apply(this, arguments);\n }\n\n if ( SpriteSymbol$$1 ) BrowserSpriteSymbol.__proto__ = SpriteSymbol$$1;\n BrowserSpriteSymbol.prototype = Object.create( SpriteSymbol$$1 && SpriteSymbol$$1.prototype );\n BrowserSpriteSymbol.prototype.constructor = BrowserSpriteSymbol;\n\n var prototypeAccessors = { isMounted: {} };\n\n prototypeAccessors.isMounted.get = function () {\n return !!this.node;\n };\n\n /**\n * @param {Element} node\n * @return {BrowserSpriteSymbol}\n */\n BrowserSpriteSymbol.createFromExistingNode = function createFromExistingNode (node) {\n return new BrowserSpriteSymbol({\n id: node.getAttribute('id'),\n viewBox: node.getAttribute('viewBox'),\n content: node.outerHTML\n });\n };\n\n BrowserSpriteSymbol.prototype.destroy = function destroy () {\n if (this.isMounted) {\n this.unmount();\n }\n SpriteSymbol$$1.prototype.destroy.call(this);\n };\n\n /**\n * @param {Element|string} target\n * @return {Element}\n */\n BrowserSpriteSymbol.prototype.mount = function mount (target) {\n if (this.isMounted) {\n return this.node;\n }\n\n var mountTarget = typeof target === 'string' ? document.querySelector(target) : target;\n var node = this.render();\n this.node = node;\n\n mountTarget.appendChild(node);\n\n return node;\n };\n\n /**\n * @return {Element}\n */\n BrowserSpriteSymbol.prototype.render = function render () {\n var content = this.stringify();\n return parse(wrapInSvgString(content)).childNodes[0];\n };\n\n BrowserSpriteSymbol.prototype.unmount = function unmount () {\n this.node.parentNode.removeChild(this.node);\n };\n\n Object.defineProperties( BrowserSpriteSymbol.prototype, prototypeAccessors );\n\n return BrowserSpriteSymbol;\n}(SpriteSymbol));\n\nvar defaultConfig$1 = {\n /**\n * Should following options be automatically configured:\n * - `syncUrlsWithBaseTag`\n * - `locationChangeAngularEmitter`\n * - `moveGradientsOutsideSymbol`\n * @type {boolean}\n */\n autoConfigure: true,\n\n /**\n * Default mounting selector\n * @type {string}\n */\n mountTo: 'body',\n\n /**\n * Fix disappearing SVG elements when exists.\n * Executes when sprite mounted.\n * @see http://stackoverflow.com/a/18265336/796152\n * @see https://github.com/everdimension/angular-svg-base-fix\n * @see https://github.com/angular/angular.js/issues/8934#issuecomment-56568466\n * @type {boolean}\n */\n syncUrlsWithBaseTag: false,\n\n /**\n * Should sprite listen custom location change event\n * @type {boolean}\n */\n listenLocationChangeEvent: true,\n\n /**\n * Custom window event name which should be emitted to update sprite urls\n * @type {string}\n */\n locationChangeEvent: 'locationChange',\n\n /**\n * Emit location change event in Angular automatically\n * @type {boolean}\n */\n locationChangeAngularEmitter: false,\n\n /**\n * Selector to find symbols usages when updating sprite urls\n * @type {string}\n */\n usagesToUpdate: 'use[*|href]',\n\n /**\n * Fix Firefox bug when gradients and patterns don't work if they are within a symbol.\n * Executes when sprite is rendered, but not mounted.\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=306674\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=353575\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=1235364\n * @type {boolean}\n */\n moveGradientsOutsideSymbol: false\n};\n\n/**\n * @param {*} arrayLike\n * @return {Array}\n */\nvar arrayFrom = function (arrayLike) {\n return Array.prototype.slice.call(arrayLike, 0);\n};\n\nvar browser = {\n isChrome: function () { return /chrome/i.test(navigator.userAgent); },\n isFirefox: function () { return /firefox/i.test(navigator.userAgent); },\n\n // https://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx\n isIE: function () { return /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent); },\n isEdge: function () { return /edge/i.test(navigator.userAgent); }\n};\n\n/**\n * @param {string} name\n * @param {*} data\n */\nvar dispatchEvent = function (name, data) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, false, false, data);\n window.dispatchEvent(event);\n};\n\n/**\n * IE doesn't evaluate `);\n}\n\nexport function removeCss(layer: string): void {\n document.getElementById(layer)?.remove();\n}\n\nexport function fireCustomEvent(event: keyof (WindowEventMap), detail: T): void {\n window.dispatchEvent(new CustomEvent(event, {detail}));\n}\n\nconst navigationKeys: Set = new Set([\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End'\n]);\n\n/**\n * Helper method for handling keyboard based selection, along with focus navigation within a set of HTML elements.\n *\n * The given {@link KeyboardEvent} will be checked for common navigation keys (currently arrow keys + home/end)\n * and the appropriate {@link HTMLElement} in the provided array of elements will be focused. No focus changes will occur\n * if none of the provided elements are currently focused\n *\n * The event will also be checked for an enter key press, and a click event will be simulated on the target element. The\n * element does not need to be in the provided element array for this to occur\n *\n * @param {KeyboardEvent} e The event to handle\n * @param {HTMLElement[]} elements The elements to consider for focusing\n */\nexport const handleKeyboardEvent = (e: KeyboardEvent, elements: HTMLElement[]): void => {\n if (!e.target) {\n return;\n }\n\n if (navigationKeys.has(e.key)) {\n const position: number = elements.indexOf(e.target as HTMLElement);\n\n if (position < 0) {\n return;\n }\n\n let newPosition: number = position;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n newPosition = position - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n newPosition = position + 1;\n break;\n\n case 'Home':\n newPosition = 0;\n break;\n\n case 'End':\n newPosition = elements.length - 1;\n break;\n }\n\n if (newPosition < 0) {\n newPosition = elements.length - 1;\n } else if (newPosition >= elements.length) {\n newPosition = 0;\n }\n\n (elements[newPosition] as HTMLElement).focus();\n e.preventDefault();\n } else if (e.key === 'Enter' && e.target) {\n const mouseEvent: MouseEvent = new MouseEvent('click', {\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n bubbles: true,\n });\n\n e.target.dispatchEvent(mouseEvent);\n e.preventDefault();\n }\n}\n","import {Pl3xMap} from \"../Pl3xMap\";\nimport {Player} from \"./Player\";\nimport {Settings} from \"../settings/Settings\";\nimport {fireCustomEvent, toCenteredLatLng} from \"../util/Util\";\nimport {WorldManager} from \"../world/WorldManager\";\nimport Pl3xMapLeafletMap from \"../map/Pl3xMapLeafletMap\";\nimport {World} from \"../world/World\";\nimport {LatLng} from \"leaflet\";\n\nexport class PlayerManager {\n private readonly _pl3xmap: Pl3xMap;\n\n private _players: Map = new Map();\n private _follow?: Player;\n\n constructor(pl3xmap: Pl3xMap) {\n this._pl3xmap = pl3xmap;\n }\n\n public update(settings: Settings): void {\n const toRemove: Set = new Set(this._players.keys());\n\n settings.players.forEach((data: Player): void => {\n const existing: Player | undefined = this._players.get(data.uuid);\n if (existing) {\n // update existing\n existing.displayName = data.displayName;\n existing.world = data.world;\n existing.position = data.position;\n\n // do not remove this player\n toRemove.delete(existing.uuid);\n } else {\n // create new player\n const player: Player = new Player(data.name, data.uuid, data.displayName, data.world, data.position);\n this._players.set(player.uuid, player);\n\n // inform the events\n fireCustomEvent('playeradded', player);\n }\n });\n\n toRemove.forEach((uuid: string): void => {\n // remove players not in updated settings file\n const player: Player | undefined = this._players.get(uuid);\n this._players.delete(uuid);\n fireCustomEvent('playerremoved', player);\n });\n\n // follow\n this.updateFollow();\n }\n\n public updateFollow(): void {\n if (!this.follow) {\n // not following anyone\n return;\n }\n if (!this.follow.world) {\n // player world is hidden\n return;\n }\n if (!this.follow.position) {\n // player position is hidden\n return;\n }\n const map: Pl3xMapLeafletMap = this._pl3xmap.map;\n const manager: WorldManager = this._pl3xmap.worldManager;\n const world: World | undefined = manager.getWorld(this.follow.world);\n if (!world) {\n // cant find world?!\n return;\n }\n const position: LatLng = toCenteredLatLng(this.follow.position);\n if (manager.currentWorld === world) {\n // player is in viewed world\n map.setView(position, map.getZoom());\n return;\n } else {\n // player is in a different world\n manager.setWorld(world).then((): void => {\n map.setView(position, map.getZoom());\n });\n }\n }\n\n get players(): Map {\n return this._players;\n }\n\n get follow(): Player | undefined {\n return this._follow;\n }\n\n set follow(player: Player | undefined) {\n this._follow = player;\n fireCustomEvent(\"followplayer\", player);\n }\n}\n","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\n\ninterface ExtendedControlOptions extends L.ControlOptions {\n position?: L.ControlPosition & Position | undefined;\n}\n\ntype Position = 'topcenter' | 'bottomcenter';\n\nexport abstract class ControlBox extends L.Control {\n protected readonly _pl3xmap: Pl3xMap;\n\n protected constructor(pl3xmap: Pl3xMap, position: string) {\n super();\n this._pl3xmap = pl3xmap;\n super.options = {\n position: position\n } as unknown as ExtendedControlOptions;\n }\n}\n","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {Block} from \"../palette/Block\";\nimport {ControlBox} from \"./ControlBox\";\nimport {getJSON} from \"../util/Util\";\nimport Pl3xMapLeafletMap from \"../map/Pl3xMapLeafletMap\";\nimport {CoordsControl} from \"./CoordsControl\";\nimport {BlockInfo} from \"../palette/BlockInfo\";\n\nexport class BlockInfoControl extends ControlBox {\n private _dom: HTMLDivElement = L.DomUtil.create('div');\n\n private _blockPalette: Map = new Map();\n\n constructor(pl3xmap: Pl3xMap, position: string) {\n super(pl3xmap, position);\n\n getJSON('tiles/blocks.gz').then((json): void => {\n Object.entries(json).forEach((data: [string, unknown]): void => {\n let name: string = data[1];\n if (name.startsWith('minecraft:')) {\n name = this._pl3xmap.langPalette.get('block.minecraft.' + name.split('minecraft:')[1]) ?? name;\n if (name.indexOf(':') !== -1) {\n name = name.split(':')[1] // split out the namespace\n .replace(/_+/g, ' ') // replace underscores with spaces\n .replace(/\\w\\S*/g, (word: string) => // capitalize first letter of every word\n word.charAt(0).toUpperCase() + word.substring(1)\n );\n }\n }\n this._blockPalette.set(Number(data[0]), name);\n });\n });\n }\n\n onAdd(map: Pl3xMapLeafletMap): HTMLDivElement {\n this._dom = L.DomUtil.create('div', 'leaflet-control leaflet-control-panel leaflet-control-blockinfo');\n this._dom.dataset.label = this._pl3xmap.settings!.lang.blockInfo.label;\n this.update(map);\n return this._dom;\n }\n\n public update(map: Pl3xMapLeafletMap): void {\n const coords: CoordsControl = this._pl3xmap.controlManager.coordsControl!;\n const zoom: number = map.getCurrentZoom() < 0 ? 0 : map.getCurrentZoom();\n const x: number = coords.x;\n const z: number = coords.z;\n const step: number = 1 << zoom;\n const regionX: number = x >> 9;\n const regionZ: number = z >> 9;\n const fileX: number = Math.floor(regionX / step);\n const fileZ: number = Math.floor(regionZ / step);\n const tileX: number = (x / step) & 511;\n const tileZ: number = (z / step) & 511;\n\n let blockName: string = 'unknown';\n let biomeName: string = 'unknown';\n let y: number | undefined;\n\n const blockInfo: BlockInfo | undefined = this._pl3xmap.worldManager.currentWorld?.getBlockInfo(zoom, fileX, fileZ);\n if (blockInfo !== undefined) {\n const block: Block = blockInfo.getBlock(tileZ * 512 + tileX);\n if (block != null) {\n blockName = block.block == 0 ? 'unknown' : this._blockPalette.get(block.block) ?? 'unknown';\n biomeName = block.biome == 0 ? 'unknown' : this._pl3xmap.worldManager.currentWorld?.biomePalette.get(block.biome) ?? 'unknown';\n\n if (block.block != 0) {\n y = block.yPos + 1;\n }\n }\n }\n\n coords.y = y;\n this._dom.innerHTML = this._pl3xmap.settings!.lang.blockInfo.value\n .replace(//g, blockName!.padEnd(15, ' '))\n .replace(//g, biomeName!.padEnd(15, ' '));\n }\n}\n","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {ControlBox} from \"./ControlBox\";\nimport {toPoint} from \"../util/Util\";\nimport Pl3xMapLeafletMap from \"../map/Pl3xMapLeafletMap\";\n\nexport class CoordsControl extends ControlBox {\n declare _map: Pl3xMapLeafletMap;\n private _dom: HTMLDivElement = L.DomUtil.create('div');\n private _x: number = 0;\n private _y?: number;\n private _z: number = 0;\n\n private onEvent = (event: L.LeafletMouseEvent) => {\n return this.update(this._map, toPoint(event.latlng));\n }\n\n constructor(pl3xmap: Pl3xMap, position: string) {\n super(pl3xmap, position);\n }\n\n onAdd(map: Pl3xMapLeafletMap): HTMLDivElement {\n this._dom = L.DomUtil.create('div', 'leaflet-control leaflet-control-panel leaflet-control-coordinates');\n this._dom.dataset.label = this._pl3xmap.settings!.lang.coords.label;\n map.addEventListener('mousemove', this.onEvent);\n this.update(map, [0, 0]);\n return this._dom;\n }\n\n onRemove(map: Pl3xMapLeafletMap): void {\n map.removeEventListener('mousemove', this.onEvent);\n }\n\n private update(map: Pl3xMapLeafletMap, point: L.PointTuple): void {\n this.x = Math.round(point[0]) - 1;\n this.z = Math.round(point[1]) - 1;\n this._pl3xmap.controlManager.blockInfoControl?.update(map);\n this._dom.innerHTML = this._pl3xmap.settings!.lang.coords.value\n .replace(//g, this.x.toString().padStart(6, ' '))\n .replace(//g, (this.y?.toString() ?? '???').padStart(2, ' ').padEnd(3, ' '))\n .replace(//g, this.z.toString().padEnd(6, ' '));\n }\n\n get x(): number {\n return this._x;\n }\n\n set x(x: number) {\n this._x = x;\n }\n\n get y(): number | undefined {\n return this._y;\n }\n\n set y(y: number | undefined) {\n this._y = y;\n }\n\n get z(): number {\n return this._z;\n }\n\n set z(z: number) {\n this._z = z;\n }\n}\n","import * as L from \"leaflet\";\nimport {Color} from \"../../util/Color\";\nimport {isset} from \"../../util/Util\";\n\nexport interface StrokeOptions {\n enabled?: boolean;\n weight?: number;\n color?: number;\n lineCap?: number;\n lineJoin?: number;\n dashArray?: string;\n dashOffset?: string;\n}\n\nexport class Stroke {\n private readonly _properties: L.PathOptions;\n\n constructor(data: StrokeOptions) {\n let props: {} = {};\n\n if (isset(data.enabled)) props = {...props, stroke: data.enabled};\n if (isset(data.weight)) props = {...props, weight: data.weight};\n if (isset(data.color)) {\n const color: Color = new Color(data.color!);\n props = {...props, color: color.hex, opacity: color.opacity};\n }\n if (isset(data.lineCap)) props = {...props, lineCap: LineCap[data.lineCap!]};\n if (isset(data.lineJoin)) props = {...props, lineJoin: LineJoin[data.lineJoin!]};\n if (isset(data.dashArray)) props = {...props, dashArray: data.dashArray};\n if (isset(data.dashOffset)) props = {...props, dashOffset: data.dashOffset};\n\n this._properties = props;\n }\n\n get properties(): L.PathOptions {\n return this._properties;\n }\n}\n\nexport enum LineCap {\n butt = 0,\n round = 1,\n square = 2\n}\n\nexport enum LineJoin {\n miter = 0,\n round = 1,\n bevel = 2\n}\n","import * as L from \"leaflet\";\nimport {Color} from \"../../util/Color\";\nimport {isset} from \"../../util/Util\";\n\nexport interface FillOptions {\n enabled?: boolean;\n type?: number;\n color?: number;\n}\n\nexport class Fill {\n private readonly _properties: L.PathOptions;\n\n constructor(data: FillOptions) {\n let props: {} = {};\n\n if (isset(data.enabled)) props = {...props, fill: data.enabled};\n if (isset(data.type)) props = {...props, fillRule: Type[data.type!]};\n if (isset(data.color)) {\n const color: Color = new Color(data.color!);\n props = {...props, fillColor: color.hex, fillOpacity: color.opacity};\n }\n\n this._properties = props;\n }\n\n get properties(): L.PathOptions {\n return this._properties;\n }\n}\n\nexport enum Type {\n nonzero = 0,\n evenodd = 1\n}\n","import * as L from \"leaflet\";\nimport {Point} from \"../../util/Point\";\nimport {getOrCreatePane, isset} from \"../../util/Util\";\n\nexport interface TooltipOptions {\n content?: string;\n pane?: string;\n offset?: Point;\n direction?: number;\n permanent?: boolean;\n sticky?: boolean;\n opacity?: number;\n}\n\nexport class Tooltip {\n private readonly _content: string;\n private readonly _properties: L.TooltipOptions;\n\n constructor(data: TooltipOptions) {\n this._content = isset(data.content) ? data.content! : \"\";\n\n let props: {} = {};\n if (isset(data.offset)) props = {...props, offset: [data.offset!.x, data.offset!.z]};\n if (isset(data.direction)) props = {...props, direction: Direction[data.direction!]};\n if (isset(data.permanent)) props = {...props, permanent: data.permanent};\n if (isset(data.sticky)) props = {...props, sticky: data.sticky};\n if (isset(data.opacity)) props = {...props, opacity: data.opacity};\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane!);\n props = {\n ...props,\n pane: dom.className.split(\" \")[1].split(\"-\")[1]\n };\n }\n\n this._properties = props;\n }\n\n get content(): string {\n return this._content;\n }\n\n get properties(): L.TooltipOptions {\n return this._properties;\n }\n}\n\nexport enum Direction {\n right = 0,\n left = 1,\n top = 2,\n bottom = 3,\n center = 4,\n auto = 5\n}\n","import SpriteSymbol from \"../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"icon--link\",\n \"use\": \"icon--link-usage\",\n \"viewBox\": \"0 0 269.4 271.84\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {ControlBox} from \"./ControlBox\";\nimport {createSVGIcon, toPoint} from \"../util/Util\";\nimport Pl3xMapLeafletMap from \"../map/Pl3xMapLeafletMap\";\nimport '../svg/link.svg';\nimport {World} from \"../world/World\";\n\nexport class LinkControl extends ControlBox {\n private readonly _dom: HTMLAnchorElement;\n\n private onEvent = (): void => {\n this.update();\n }\n\n constructor(pl3xmap: Pl3xMap, position: string) {\n super(pl3xmap, position);\n this._dom = L.DomUtil.create('a', 'leaflet-control leaflet-control-button leaflet-control-link');\n this._dom.appendChild(createSVGIcon('link'));\n }\n\n onAdd(map: Pl3xMapLeafletMap): HTMLAnchorElement {\n map.addEventListener('moveend', this.onEvent);\n map.addEventListener('zoomend', this.onEvent);\n this.update();\n return this._dom;\n }\n\n onRemove(map: Pl3xMapLeafletMap): void {\n map.removeEventListener('moveend', this.onEvent);\n map.removeEventListener('zoomend', this.onEvent);\n }\n\n public update(): void {\n const url: string = this.getUrlFromView(this._pl3xmap.worldManager.currentWorld);\n this._dom.href = url;\n this._dom.title = this._pl3xmap.settings?.lang.link.label ?? '';\n window.history.replaceState(null, this._pl3xmap.settings!.lang.title, url);\n }\n\n public getUrlFromView(world?: World): string {\n const center: L.PointTuple = toPoint(this._pl3xmap.map.getCenter());\n const zoom: number = this._pl3xmap.map.getCurrentZoom();\n const x: number = Math.floor(center[0]);\n const z: number = Math.floor(center[1]);\n let url: string = `?`;\n if (world !== undefined) {\n url += `world=${world.name}&renderer=${world.currentRenderer?.label ?? 'basic'}`;\n }\n return `${url}&zoom=${zoom}&x=${x}&z=${z}`;\n }\n}\n","import * as L from \"leaflet\";\nimport {MarkerOptions} from \"./options/MarkerOptions\";\n\nexport abstract class Marker {\n private readonly _key: string;\n private readonly _marker: L.Layer;\n\n protected constructor(key: string, marker: L.Layer) {\n this._key = key;\n this._marker = marker;\n }\n\n get key(): string {\n return this._key;\n }\n\n get marker(): L.Layer {\n return this._marker;\n }\n\n abstract update(data: unknown[], options?: MarkerOptions): void;\n}\n\nexport class Type {\n data: unknown[];\n options?: MarkerOptions;\n\n constructor(data: unknown[], options?: MarkerOptions) {\n this.data = data;\n this.options = options;\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Point} from \"../util/Point\";\nimport {getOrCreatePane, isset, pixelsToMeters, toCenteredLatLng} from \"../util/Util\";\n\ninterface CircleOptions extends L.PolylineOptions {\n key: string;\n center: Point;\n radius: number;\n pane: string;\n}\n\nexport class Circle extends Marker {\n constructor(type: Type) {\n const data: CircleOptions = type.data as unknown as CircleOptions;\n\n let options = {\n ...type.options?.properties,\n radius: pixelsToMeters(data.radius),\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.circle(toCenteredLatLng(data.center), options));\n }\n\n public update(raw: unknown[]): void {\n const data: CircleOptions = raw as unknown as CircleOptions;\n const circle: L.Circle = this.marker as L.Circle;\n circle.setLatLng(toCenteredLatLng(data.center));\n circle.setRadius(pixelsToMeters(data.radius));\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Point} from \"../util/Point\";\nimport {getOrCreatePane, isset, pixelsToMeters, toCenteredLatLng} from \"../util/Util\";\nimport \"../lib/L.ellipse\";\n\ninterface EllipseOptions extends L.PolylineOptions {\n key: string;\n center: Point;\n radius: Point;\n tilt?: number;\n pane: string;\n}\n\nexport class Ellipse extends Marker {\n constructor(type: Type) {\n const data: EllipseOptions = type.data as unknown as EllipseOptions;\n\n let options = {\n ...type.options?.properties,\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.ellipse(\n toCenteredLatLng(data.center),\n [\n pixelsToMeters(data.radius.x),\n pixelsToMeters(data.radius.z)\n ],\n isset(data.tilt) ? data.tilt! : 0,\n options)\n );\n }\n\n public update(raw: unknown[]): void {\n const data: EllipseOptions = raw as unknown as EllipseOptions;\n const ellipse: L.Ellipse = this.marker as L.Ellipse;\n ellipse.setLatLng(toCenteredLatLng(data.center));\n ellipse.setRadius([\n pixelsToMeters(data.radius.x),\n pixelsToMeters(data.radius.z)\n ]);\n if (isset(data.tilt)) {\n ellipse.setTilt(data.tilt!);\n }\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {MarkerOptions} from \"./options/MarkerOptions\";\nimport {Point} from \"../util/Point\";\nimport {getOrCreatePane, isset, toCenteredLatLng} from \"../util/Util\";\nimport \"../lib/L.rotated\";\n\ninterface IconOptions extends L.MarkerOptions {\n key: string;\n point: Point;\n image: string;\n retina?: string;\n size?: Point;\n anchor?: Point;\n shadow?: string;\n shadowRetina?: string;\n shadowSize?: Point;\n shadowAnchor?: Point;\n rotationAngle?: number;\n rotationOrigin?: string;\n pane: string;\n}\n\nexport class Icon extends Marker {\n constructor(type: Type) {\n function url(image: string): string {\n return `images/icon/registered/${image}.png`;\n }\n\n const data: IconOptions = type.data as unknown as IconOptions;\n\n let props: {} = {};\n if (isset(data.image)) props = {...props, iconUrl: url(data.image)};\n if (isset(data.retina)) props = {...props, iconRetinaUrl: url(data.retina!)};\n if (isset(data.size)) props = {...props, iconSize: [data.size!.x, data.size!.z]};\n if (isset(data.anchor)) props = {...props, iconAnchor: [data.anchor!.x, data.anchor!.z]};\n if (isset(data.shadow)) props = {...props, shadowUrl: url(data.shadow!)};\n if (isset(data.shadowRetina)) props = {...props, shadowRetinaUrl: url(data.shadowRetina!)};\n if (isset(data.shadowSize)) props = {...props, shadowSize: [data.shadowSize!.x, data.shadowSize!.z]};\n if (isset(data.shadowAnchor)) props = {...props, shadowAnchor: [data.shadowAnchor!.x, data.shadowAnchor!.z]};\n\n const tooltipOffset: L.PointExpression | undefined = type.options?.tooltip?.properties?.offset;\n const popupOffset: L.PointExpression | undefined = type.options?.popup?.properties?.offset;\n\n if (isset(tooltipOffset)) props = {...props, tooltipAnchor: tooltipOffset};\n if (isset(popupOffset)) props = {...props, popupAnchor: popupOffset};\n\n let options: IconOptions = {\n ...type.options?.properties,\n rotationAngle: data.rotationAngle,\n rotationOrigin: data.rotationOrigin,\n icon: L.icon(props as L.IconOptions),\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n } as IconOptions;\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\" \")[1].split(\"-\")[1]\n };\n }\n\n super(data.key, L.marker(toCenteredLatLng(data.point), options));\n }\n\n public update(raw: unknown[], options?: MarkerOptions): void {\n const data: IconOptions = raw as unknown as IconOptions;\n const icon: L.Marker = this.marker as L.Marker;\n icon.setLatLng(toCenteredLatLng(data.point));\n const iconOptions: IconOptions = icon.options as IconOptions;\n iconOptions.rotationAngle = data.rotationAngle;\n iconOptions.rotationOrigin = data.rotationOrigin;\n if (options?.tooltip?.content) {\n icon.setTooltipContent(options?.tooltip?.content);\n }\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Polygon} from \"../util/Polygon\";\nimport {getOrCreatePane, isset, toCenteredLatLng} from \"../util/Util\";\nimport {Polyline} from \"../util/Polyline\";\nimport {Point} from \"../util/Point\";\n\ninterface MultiPolygonOptions extends L.PolylineOptions {\n key: string;\n polygons: Polygon[];\n pane: string;\n}\n\nexport class MultiPolygon extends Marker {\n constructor(type: Type) {\n const data: MultiPolygonOptions = type.data as unknown as MultiPolygonOptions;\n\n let options = {\n ...type.options?.properties,\n smoothFactor: 1.0,\n noClip: false,\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.polygon(MultiPolygon.createPolys(data), options));\n }\n\n public update(raw: unknown[]): void {\n const data: MultiPolygonOptions = raw as unknown as MultiPolygonOptions;\n const polygon: L.Polygon = this.marker as L.Polygon;\n polygon.setLatLngs(MultiPolygon.createPolys(data));\n }\n\n private static createPolys(data: MultiPolygonOptions): L.LatLng[][][] {\n const polys: any[] = [];\n data.polygons.forEach((polygon: Polygon): void => {\n const poly: any[] = [];\n polygon.polylines.forEach((polyline: Polyline): void => {\n const line: any[] = [];\n polyline.points.forEach((point: Point): void => {\n line.push(toCenteredLatLng(point))\n });\n poly.push(line);\n });\n polys.push(poly);\n });\n return polys;\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Polyline} from \"../util/Polyline\";\nimport {getOrCreatePane, isset, toCenteredLatLng} from \"../util/Util\";\nimport {Point} from \"../util/Point\";\n\ninterface MultiPolylineOptions extends L.PolylineOptions {\n key: string;\n polylines: Polyline[];\n pane: string;\n}\n\nexport class MultiPolyline extends Marker {\n constructor(type: Type) {\n const data: MultiPolylineOptions = type.data as unknown as MultiPolylineOptions;\n\n let options = {\n ...type.options?.properties,\n smoothFactor: 1.0,\n noClip: false,\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.polyline(MultiPolyline.createLines(data), options));\n }\n\n public update(raw: unknown[]): void {\n const data: MultiPolylineOptions = raw as unknown as MultiPolylineOptions;\n const polyline: L.Polyline = this.marker as L.Polyline;\n polyline.setLatLngs(MultiPolyline.createLines(data));\n }\n\n private static createLines(data: MultiPolylineOptions): L.LatLng[][] {\n const lines: any[] = [];\n data.polylines.forEach((polylines: Polyline): void => {\n const line: any[] = [];\n polylines.points.forEach((point: Point): void => {\n line.push(toCenteredLatLng(point))\n });\n lines.push(line);\n });\n return lines;\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Polyline} from \"../util/Polyline\";\nimport {getOrCreatePane, isset, toCenteredLatLng} from \"../util/Util\";\nimport {Point} from \"../util/Point\";\n\ninterface PolygonOptions extends L.PolylineOptions {\n key: string;\n polylines: Polyline[];\n pane: string;\n}\n\nexport class Polygon extends Marker {\n constructor(type: Type) {\n const data: PolygonOptions = type.data as unknown as PolygonOptions;\n\n let options = {\n ...type.options?.properties,\n smoothFactor: 1.0,\n noClip: false,\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.polygon(Polygon.createPoly(data), options));\n }\n\n public update(raw: unknown[]): void {\n const data: PolygonOptions = raw as unknown as PolygonOptions;\n const polygon: L.Polygon = this.marker as L.Polygon;\n polygon.setLatLngs(Polygon.createPoly(data));\n }\n\n private static createPoly(data: PolygonOptions): L.LatLng[][] {\n const poly: any[] = [];\n data.polylines.forEach((polyline: Polyline): void => {\n const line: any[] = [];\n polyline.points.forEach((point: Point): void => {\n line.push(toCenteredLatLng(point));\n });\n poly.push(line);\n });\n return poly;\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Point} from \"../util/Point\";\nimport {getOrCreatePane, isset, toCenteredLatLng} from \"../util/Util\";\n\ninterface PolylineOptions extends L.PolylineOptions {\n key: string;\n points: Point[];\n pane: string;\n}\n\nexport class Polyline extends Marker {\n constructor(type: Type) {\n const data: PolylineOptions = type.data as unknown as PolylineOptions;\n\n let options = {\n ...type.options?.properties,\n smoothFactor: 1.0,\n noClip: false,\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.polyline(Polyline.createLine(data), options));\n }\n\n public update(raw: unknown[]): void {\n const data: PolylineOptions = raw as unknown as PolylineOptions;\n const polyline: L.Polyline = this.marker as L.Polyline;\n polyline.setLatLngs(Polyline.createLine(data));\n }\n\n private static createLine(data: PolylineOptions): L.LatLng[] {\n const line: any[] = [];\n data.points.forEach((point: Point): void => {\n line.push(toCenteredLatLng(point))\n });\n return line;\n }\n}\n","import * as L from \"leaflet\";\nimport {Marker, Type} from \"./Marker\";\nimport {Point} from \"../util/Point\";\nimport {getOrCreatePane, isset, toLatLngBounds} from \"../util/Util\";\n\ninterface RectangleOptions extends L.PolylineOptions {\n key: string;\n point1: Point;\n point2: Point;\n pane: string;\n}\n\nexport class Rectangle extends Marker {\n constructor(type: Type) {\n const data: RectangleOptions = type.data as unknown as RectangleOptions;\n\n let options = {\n ...type.options?.properties,\n smoothFactor: 1.0,\n noClip: false,\n bubblingMouseEvents: true,\n interactive: true,\n attribution: undefined\n };\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane);\n options = {\n ...options,\n pane: dom.className.split(\"-\")[1]\n };\n }\n\n super(data.key, L.rectangle(toLatLngBounds(data.point1, data.point2), options));\n }\n\n public update(raw: unknown[]): void {\n const data: RectangleOptions = raw as unknown as RectangleOptions;\n const rectangle: L.Rectangle = this.marker as L.Rectangle;\n rectangle.setBounds(toLatLngBounds(data.point1, data.point2));\n }\n}\n","export class Color {\n private readonly _rgb: number;\n private readonly _hex: string;\n private readonly _opacity: number;\n\n constructor(color: number) {\n this._rgb = color;\n this._hex = \"#\" + (color & 0xFFFFFF).toString(16).padStart(6, '0');\n this._opacity = (color >> 24 & 0xFF) / 0xFF;\n }\n\n get rgb(): number {\n return this._rgb;\n }\n\n get hex(): string {\n return this._hex;\n }\n\n get opacity(): number {\n return this._opacity;\n }\n}\n","import * as L from \"leaflet\";\nimport {Point} from \"../../util/Point\";\nimport {getOrCreatePane, isset} from \"../../util/Util\";\n\nexport interface PopupOptions {\n content?: string;\n pane?: string;\n offset?: Point;\n maxWidth?: number;\n minWidth?: number;\n maxHeight?: number;\n autoPan?: boolean;\n autoPanPaddingTopLeft?: Point;\n autoPanPaddingBottomRight?: Point;\n autoPanPadding?: Point;\n keepInView?: boolean;\n closeButton?: boolean;\n autoClose?: boolean;\n closeOnEscapeKey?: boolean;\n closeOnClick?: boolean;\n}\n\nexport class Popup {\n private readonly _content: string;\n private readonly _properties: L.PopupOptions;\n\n constructor(data: PopupOptions) {\n this._content = isset(data.content) ? data.content! : \"\";\n\n let props: L.PopupOptions = {};\n if (isset(data.offset)) props = {...props, offset: [data.offset!.x, data.offset!.z]};\n if (isset(data.maxWidth)) props = {...props, maxWidth: data.maxWidth};\n if (isset(data.minWidth)) props = {...props, minWidth: data.minWidth};\n if (isset(data.maxHeight)) props = {...props, maxHeight: data.maxHeight};\n if (isset(data.autoPan)) props = {...props, autoPan: data.autoPan};\n if (isset(data.autoPanPaddingTopLeft)) props = {\n ...props,\n autoPanPaddingTopLeft: [data.autoPanPaddingTopLeft!.x, data.autoPanPaddingTopLeft!.z]\n };\n if (isset(data.autoPanPaddingBottomRight)) props = {\n ...props,\n autoPanPaddingBottomRight: [data.autoPanPaddingBottomRight!.x, data.autoPanPaddingBottomRight!.z]\n };\n if (isset(data.autoPanPadding)) props = {\n ...props,\n autoPanPadding: [data.autoPanPadding!.x, data.autoPanPadding!.z]\n };\n if (isset(data.keepInView)) props = {...props, keepInView: data.keepInView};\n if (isset(data.closeButton)) props = {...props, closeButton: data.closeButton};\n if (isset(data.autoClose)) props = {...props, autoClose: data.autoClose};\n if (isset(data.closeOnEscapeKey)) props = {...props, closeOnEscapeKey: data.closeOnEscapeKey};\n if (isset(data.closeOnClick)) props = {...props, closeOnClick: data.closeOnClick};\n\n if (isset(data.pane)) {\n const dom: HTMLElement = getOrCreatePane(data.pane!);\n props = {\n ...props,\n pane: dom.className.split(\" \")[1].split(\"-\")[1]\n };\n }\n\n this._properties = props;\n }\n\n get content(): string {\n return this._content;\n }\n\n get properties(): L.PopupOptions {\n return this._properties;\n }\n}\n","import * as L from \"leaflet\";\nimport {Stroke, StrokeOptions} from \"./Stroke\";\nimport {Fill, FillOptions} from \"./Fill\";\nimport {Tooltip, TooltipOptions} from \"./Tooltip\";\nimport {Popup, PopupOptions} from \"./Popup\";\nimport {isset} from \"../../util/Util\";\n\nexport interface Options {\n stroke: StrokeOptions;\n fill: FillOptions;\n tooltip: TooltipOptions;\n popup: PopupOptions;\n}\n\nexport class MarkerOptions {\n private readonly _stroke?: Stroke;\n private readonly _fill?: Fill;\n private readonly _tooltip?: Tooltip;\n private readonly _popup?: Popup;\n\n constructor(data: Options) {\n this._stroke = isset(data.stroke) ? new Stroke(data.stroke!) : undefined;\n this._fill = isset(data.fill) ? new Fill(data.fill!) : undefined;\n this._tooltip = isset(data.tooltip) ? new Tooltip(data.tooltip!) : undefined;\n this._popup = isset(data.popup) ? new Popup(data.popup!) : undefined;\n }\n\n get properties(): L.PathOptions {\n return {...this._stroke?.properties, ...this._fill?.properties};\n }\n\n get tooltip(): Tooltip | undefined {\n return this._tooltip;\n }\n\n get popup(): Popup | undefined {\n return this._popup;\n }\n}\n","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {Circle} from \"../marker/Circle\";\nimport {Ellipse} from \"../marker/Ellipse\";\nimport {Icon} from \"../marker/Icon\";\nimport {MultiPolygon} from \"../marker/MultiPolygon\";\nimport {MultiPolyline} from \"../marker/MultiPolyline\";\nimport {Polygon} from \"../marker/Polygon\";\nimport {Polyline} from \"../marker/Polyline\";\nimport {Rectangle} from \"../marker/Rectangle\";\nimport {Marker, Type} from \"../marker/Marker\";\nimport {MarkerOptions, Options} from \"../marker/options/MarkerOptions\";\nimport {World} from \"../world/World\";\nimport {fireCustomEvent, getJSON, getOrCreatePane, insertCss, isset, removeCss} from \"../util/Util\";\nimport {Tooltip} from \"../marker/options/Tooltip\";\nimport {Popup} from \"../marker/options/Popup\";\n\ninterface MarkerData {\n type: string;\n data: unknown[];\n options: Options;\n}\n\nexport class MarkerLayer extends L.LayerGroup {\n private static readonly TYPES: { rect: (type: Type) => Rectangle; line: (type: Type) => Polyline; multiline: (type: Type) => MultiPolyline; icon: (type: Type) => Icon; poly: (type: Type) => Polygon; circ: (type: Type) => Circle; multipoly: (type: Type) => MultiPolygon; elli: (type: Type) => Ellipse } = {\n \"circ\": (type: Type) => new Circle(type),\n \"elli\": (type: Type) => new Ellipse(type),\n \"icon\": (type: Type) => new Icon(type),\n \"multipoly\": (type: Type) => new MultiPolygon(type),\n \"multiline\": (type: Type) => new MultiPolyline(type),\n \"poly\": (type: Type) => new Polygon(type),\n \"line\": (type: Type) => new Polyline(type),\n \"rect\": (type: Type) => new Rectangle(type)\n }\n\n declare options: L.LayerOptions;\n\n private readonly _key: string;\n private readonly _label: string;\n private readonly _updateInterval: number;\n private readonly _showControls: boolean;\n private readonly _defaultHidden: boolean;\n private readonly _priority: number;\n private readonly _zIndex: number;\n private readonly _pane: string;\n private readonly _css: string;\n\n private readonly _markers: Map = new Map();\n\n private _timer: NodeJS.Timeout | undefined;\n\n constructor(key: string, label: string, interval: number, showControls: boolean, defaultHidden: boolean, priority: number, zIndex: number, pane: string, css: string) {\n super(undefined, {\n attribution: undefined\n });\n this._key = key;\n this._label = label;\n this._updateInterval = (interval < 1 ? 1 : interval) * 1000;\n this._showControls = showControls;\n this._defaultHidden = defaultHidden;\n this._priority = priority;\n this._zIndex = zIndex;\n this._pane = pane;\n this._css = css;\n\n this.setZIndex(zIndex);\n\n if (isset(pane)) {\n const dom: HTMLElement = getOrCreatePane(pane);\n dom.style.zIndex = String(zIndex);\n this.options.pane = dom.className.split(\"-\")[1];\n }\n\n if (isset(css)) {\n insertCss(css, key);\n }\n\n fireCustomEvent(\"overlayadded\", this);\n }\n\n get key(): string {\n return this._key;\n }\n\n get label(): string {\n return this._label;\n }\n\n get updateInterval(): number {\n return this._updateInterval;\n }\n\n get showControls(): boolean {\n return this._showControls;\n }\n\n get defaultHidden(): boolean {\n return this._defaultHidden;\n }\n\n get priority(): number {\n return this._priority;\n }\n\n get zIndex(): number {\n return this._zIndex;\n }\n\n get pane(): string {\n return this._pane;\n }\n\n get css(): string {\n return this._css;\n }\n\n update(world: World): void {\n getJSON(`tiles/${world.name}/markers/${this._key}.json`)\n .then((json): void => {\n //this.clearLayers(); // do not just clear markers, remove the ones that are missing\n const toRemove: Set = new Set(this._markers.keys());\n\n for (const index in Object.keys(json)) {\n const existing: Marker | undefined = this._markers.get(json[index].data.key);\n if (existing) {\n // update\n const data = json[index];\n const options: MarkerOptions | undefined = isset(data.options) ? new MarkerOptions(data.options) : undefined;\n existing.update(data.data, options);\n // do not remove this marker\n toRemove.delete(existing.key);\n } else {\n // new marker\n const marker: Marker | undefined = this.parseMarker(json[index]);\n if (marker) {\n this._markers.set(marker.key, marker);\n marker.marker.addTo(this);\n // inform the events\n fireCustomEvent('markeradded', marker);\n }\n }\n }\n\n toRemove.forEach((key: string): void => {\n // remove players not in updated settings file\n const marker: Marker | undefined = this._markers.get(key);\n if (marker) {\n this._markers.delete(key);\n marker.marker.remove();\n this.removeLayer(marker.marker);\n fireCustomEvent('markerremoved', marker);\n }\n });\n\n this._timer = setTimeout(() => this.update(world), this._updateInterval);\n });\n }\n\n unload(): void {\n clearTimeout(this._timer);\n removeCss(this._key);\n this._markers.clear();\n this.clearLayers();\n this.removeFrom(Pl3xMap.instance.map);\n fireCustomEvent(\"overlayremoved\", this);\n }\n\n private parseMarker(data: MarkerData): Marker | undefined {\n const options: MarkerOptions | undefined = isset(data.options) ? new MarkerOptions(data.options) : undefined;\n\n const type: ((type: Type) => Rectangle) | ((type: Type) => Polyline) | ((type: Type) => MultiPolyline) | ((type: Type) => Icon) | ((type: Type) => Polygon) | ((type: Type) => Circle) | ((type: Type) => MultiPolygon) | ((type: Type) => Ellipse) = MarkerLayer.TYPES[data.type as keyof typeof MarkerLayer.TYPES];\n const marker: Rectangle | Polyline | MultiPolyline | Icon | Polygon | Circle | MultiPolygon | Ellipse | undefined = type ? type(new Type(data.data as unknown[], options)) : undefined;\n\n if (marker?.marker) {\n const popup: Popup | undefined = options?.popup;\n const tooltip: Tooltip | undefined = options?.tooltip;\n if (popup) {\n marker.marker.bindPopup(() => popup.content, popup.properties);\n }\n if (tooltip) {\n marker.marker.bindTooltip(() => tooltip.content, tooltip.properties);\n }\n }\n\n return marker;\n }\n}\n","export class Block {\n private readonly _block: number;\n private readonly _biome: number;\n private readonly _yPos: number;\n private readonly _minY: number;\n\n constructor(packed: number, minY: number) {\n this._block = packed >>> 22;\n this._biome = (packed << 10) >> 22;\n this._yPos = ((packed << 20) >> 20);\n this._minY = minY;\n }\n\n get block(): number {\n return this._block;\n }\n\n get biome(): number {\n return this._biome;\n }\n\n get yPos(): number {\n return this._yPos + this._minY;\n }\n}\n","import {Block} from \"./Block\";\n\nexport class BlockInfo {\n private readonly _data: Uint8Array;\n\n constructor(data: Uint8Array) {\n this._data = data;\n }\n\n get minY(): number {\n return this.getInt(8);\n }\n\n getBlock(index: number): Block {\n return new Block(this.getInt(12 + index * 4), this.minY);\n }\n\n private getInt(position: number): number {\n let val: number = 0;\n for (let i: number = 0; i < 4; i++) {\n val |= (this._data[position + i] & 0xFF) << (i * 8);\n }\n return val;\n }\n}\n","/**\n * Represents language settings.\n */\nexport class Lang {\n private readonly _title: string;\n private readonly _langFile: string;\n private readonly _coords: Label;\n private readonly _blockInfo: Label;\n private readonly _layers: Label;\n private readonly _link: Label;\n private readonly _markers: Label;\n private readonly _players: Label;\n private readonly _worlds: Label;\n\n constructor(title: string, langFile: string, coords: Label, blockInfo: Label, layers: Label, link: Label, markers: Label, players: Label, worlds: Label) {\n this._title = title;\n this._langFile = langFile;\n this._coords = coords;\n this._blockInfo = blockInfo;\n this._layers = layers;\n this._link = link;\n this._markers = markers;\n this._players = players;\n this._worlds = worlds;\n }\n\n get title(): string {\n return this._title;\n }\n\n get langFile(): string {\n return this._langFile;\n }\n\n get coords(): Label {\n return this._coords;\n }\n\n get blockInfo(): Label {\n return this._blockInfo;\n }\n\n get layers(): Label {\n return this._layers;\n }\n\n get link(): Label {\n return this._link;\n }\n\n get markers(): Label {\n return this._markers;\n }\n\n get players(): Label {\n return this._players;\n }\n\n get worlds(): Label {\n return this._worlds;\n }\n}\n\n/**\n * Represents a label and value.\n */\nexport class Label {\n private readonly _label: string\n private readonly _value: string;\n\n constructor(label: string, value: string) {\n this._label = label;\n this._value = value;\n }\n\n get label(): string {\n return this._label;\n }\n\n get value(): string {\n return this._value;\n }\n}\n","import * as L from \"leaflet\";\nimport {TileEvent} from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {Label} from \"../settings/Lang\";\nimport {Renderer, World} from \"../world/World\";\n\nexport class ReversedZoomTileLayer extends L.TileLayer {\n private readonly _world: World;\n private readonly _renderer: Label;\n\n constructor(pl3xmap: Pl3xMap, world: World, renderer: Renderer) {\n super(`tiles/${world.name}/{z}/${renderer.label}/{x}_{y}.${pl3xmap.settings?.format}`, {\n // tile sizes match regions sizes (512 blocks x 512 blocks)\n tileSize: 512,\n // dont wrap tiles at edges\n noWrap: true,\n // the closest zoomed in possible (without stretching)\n // this is always 0. no exceptions!\n minNativeZoom: 0,\n // the farthest possible zoom out possible\n maxNativeZoom: world.zoom.maxOut,\n // for extra zoom in, make higher than maxNativeZoom\n // this is the stretched tiles to zoom in further\n maxZoom: world.zoom.maxOut + world.zoom.maxIn,\n // we need to counter effect the higher maxZoom here\n // maxZoom + zoomOffset = maxNativeZoom\n zoomOffset: -world.zoom.maxIn\n });\n\n this._world = world!;\n this._renderer = renderer;\n\n // when tiles load we need to load extra block info\n this.addEventListener(\"tileload\", (event: TileEvent): void => {\n const zoom: number = world.settings.zoom.maxOut - event.coords.z;\n world.loadBlockInfo(zoom, event.coords.x, event.coords.y);\n });\n\n // when tiles unload we need to remove the extra block info from memory\n this.addEventListener(\"tileunload\", (event: TileEvent): void => {\n const zoom: number = world.settings.zoom.maxOut - event.coords.z;\n world.unsetBlockInfo(zoom, event.coords.x, event.coords.y);\n });\n\n // push this layer to the back (leaflet defaults it to 1)\n this.setZIndex(0);\n }\n\n get world(): World {\n return this._world;\n }\n\n get renderer(): Label {\n return this._renderer;\n }\n\n _getZoomForUrl(): number {\n const zoom: number = this._tileZoom!,\n maxZoom: number = this.options.maxZoom!,\n offset: number = this.options.zoomOffset!;\n return (maxZoom - zoom) + offset;\n }\n\n // @method createTile(coords: Object, done?: Function): HTMLElement\n // Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\n // to return an `
` HTML element with the appropriate image URL given `coords`. The `done`\n // callback is called when the tile has been loaded.\n createTile(coords: L.Coords, done: L.DoneCallback): HTMLImageElement {\n const tile: HTMLImageElement = L.DomUtil.create('img');\n\n L.DomEvent.on(tile, 'load', (): void => {\n // Once image has loaded revoke the object URL as we don't need it anymore\n URL.revokeObjectURL(tile.src);\n this._tileOnLoad(done, tile)\n });\n L.DomEvent.on(tile, 'error', L.Util.bind(this._tileOnError, this, done, tile));\n\n if (this.options.crossOrigin || this.options.crossOrigin === '') {\n tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\n }\n\n tile.alt = '';\n tile.setAttribute('role', 'presentation');\n\n // Retrieve image via a fetch instead of just setting the src\n // This works around the fact that browsers usually don't make a request for an image that was previously loaded,\n // without resorting to changing the URL (which would break caching).\n fetch(this.getTileUrl(coords))\n .then((res: Response): void => {\n // Call leaflet's error handler if request fails for some reason\n if (!res.ok) {\n this._tileOnError(done, tile, new Error(res.statusText));\n return;\n }\n\n // Get image data and convert into object URL, so it can be used as a src\n // Leaflet's onload listener will take it from here\n res.blob().then((blob: Blob): void => {\n // don't use URL.createObjectURL, it creates memory leak\n const reader: FileReader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => tile.src = String(reader.result);\n });\n }).catch((e) => this._tileOnError(done, tile, e));\n\n return tile;\n }\n}\n","import {Pl3xMap} from \"../Pl3xMap\";\nimport {Renderer, World} from \"../world/World\";\nimport {ReversedZoomTileLayer} from \"./ReversedZoomTileLayer\";\nimport Pl3xMapLeafletMap from \"../map/Pl3xMapLeafletMap\";\n\nexport class DoubleTileLayer {\n private readonly _tileLayer1: ReversedZoomTileLayer;\n private readonly _tileLayer2: ReversedZoomTileLayer;\n\n // start with 0. from here will switch to 1 then 2 then 1 then 2 etc.\n private _currentLayer: number = 0;\n\n constructor(pl3xmap: Pl3xMap, world: World, renderer: Renderer) {\n // we need 2 tile layers to swap between for seamless refreshing\n this._tileLayer1 = this.createTileLayer(pl3xmap, world, renderer);\n this._tileLayer2 = this.createTileLayer(pl3xmap, world, renderer);\n }\n\n private createTileLayer(pl3xmap: Pl3xMap, world: World, renderer: Renderer): ReversedZoomTileLayer {\n return new ReversedZoomTileLayer(pl3xmap, world, renderer)\n .addEventListener(\"load\", (): void => {\n // when all tiles in this layer are loaded, switch to this layer\n this.switchTileLayer();\n });\n }\n\n private switchTileLayer(): void {\n // swap current tile layer\n if (this._currentLayer == 1) {\n this._tileLayer1.setZIndex(0);\n this._tileLayer2.setZIndex(1);\n this._currentLayer = 2;\n } else {\n this._tileLayer1.setZIndex(1);\n this._tileLayer2.setZIndex(0);\n this._currentLayer = 1;\n }\n }\n\n public updateTileLayer(): void {\n // redraw opposite tile layer\n // it will switch to it when all tiles load\n if (this._currentLayer == 1) {\n this._tileLayer2.redraw();\n } else {\n this._tileLayer1.redraw();\n }\n }\n\n public addTo(map: Pl3xMapLeafletMap): void {\n this._tileLayer1.addTo(map);\n this._tileLayer2.addTo(map);\n }\n\n public remove(): void {\n this._tileLayer1.remove();\n this._tileLayer2.remove();\n }\n}\n","import {Pl3xMap} from \"../Pl3xMap\";\nimport {MarkerLayer} from \"../layergroup/MarkerLayer\";\nimport {BlockInfo} from \"../palette/BlockInfo\";\nimport {Label} from \"../settings/Lang\";\nimport {Spawn, WorldSettings, Zoom} from \"../settings/WorldSettings\";\nimport {DoubleTileLayer} from \"../tilelayer/DoubleTileLayer\";\nimport {WorldManager} from \"./WorldManager\";\nimport {fireCustomEvent, getBytes, getJSON} from \"../util/Util\";\n\n/**\n * Represents a loaded world.\n */\nexport class World {\n private readonly _pl3xmap: Pl3xMap;\n private readonly _settings: WorldSettings;\n\n private _currentRenderer?: Renderer;\n private _currentRendererLayer?: DoubleTileLayer;\n\n private _rendererLayers: Map = new Map();\n private _markerLayers: MarkerLayer[] = [];\n\n private _biomePalette: Map = new Map();\n private _blockInfo: Map> = new Map();\n\n private _loaded: boolean = false;\n\n private _timer: NodeJS.Timeout | undefined;\n\n constructor(pl3xmap: Pl3xMap, worldManager: WorldManager, settings: WorldSettings) {\n this._pl3xmap = pl3xmap;\n this._settings = settings;\n }\n\n public load(): Promise {\n if (this._loaded) {\n return Promise.resolve(this);\n }\n\n getJSON(`tiles/${this.name}/biomes.gz`).then((json): void => {\n Object.entries(json).forEach((data: [string, unknown]): void => {\n let name: string = data[1];\n if (name.startsWith('minecraft:')) {\n name = this._pl3xmap.langPalette.get('biome.minecraft.' + name.split('minecraft:')[1]) ?? name;\n if (name.indexOf(':') !== -1) {\n name = name.split(':')[1] // split out the namespace\n .split(\".\").pop()! // everything after the last period\n .replace(/_+/g, ' ') // replace underscores with spaces\n .replace(/\\w\\S*/g, (w: string) => // capitalize first letter of every word\n w.charAt(0).toUpperCase() + w.substring(1)\n )\n }\n }\n this._biomePalette.set(Number(data[0]), name);\n });\n });\n\n //TODO: Handle errors\n return new Promise((resolve): void => {\n getJSON(`tiles/${this.name}/settings.json`)\n .then((settings: WorldSettings): void => {\n this._loaded = true;\n\n // copy settings values\n this.settings.spawn = settings.spawn;\n this.settings.zoom = settings.zoom;\n this.settings.tileUpdateInterval = settings.tileUpdateInterval;\n this.settings.ui = settings.ui;\n\n // setup renderers\n this.settings.renderers.forEach((renderer: Renderer): void => {\n this._rendererLayers.set(renderer, new DoubleTileLayer(this._pl3xmap, this, renderer));\n });\n\n resolve(this);\n });\n });\n }\n\n public unload(): void {\n clearTimeout(this._timer);\n // unload and clear markers\n this._markerLayers.forEach((layer: MarkerLayer) => layer.unload())\n this._markerLayers = [];\n // unload renderer layer\n this._currentRendererLayer?.remove();\n this._currentRendererLayer = undefined;\n this._currentRenderer = undefined;\n }\n\n public loadMarkers(): void {\n getJSON(`tiles/${this.name}/markers.json`)\n .then((json): void => {\n (json as MarkerLayer[]).forEach((layer: MarkerLayer): void => {\n const markerLayer: MarkerLayer = new MarkerLayer(layer.key, layer.label, layer.updateInterval, layer.showControls, layer.defaultHidden, layer.priority, layer.zIndex, layer.pane, layer.css);\n this._markerLayers.push(markerLayer);\n markerLayer.update(this);\n });\n });\n }\n\n public loadBlockInfo(zoom: number, x: number, z: number): void {\n if (!this.settings.ui.blockinfo) {\n return;\n }\n getBytes(`tiles/${this.name}/${zoom}/blockinfo/${x}_${z}.pl3xmap.gz`)\n .then((buffer?: ArrayBuffer): void => {\n this.setBlockInfo(zoom, x, z, buffer);\n });\n }\n\n public getBlockInfo(zoom: number, x: number, z: number): BlockInfo | undefined {\n return this.blockInfo.get(zoom < 0 ? 0 : zoom)?.get(`${x}_${z}`);\n }\n\n public setBlockInfo(zoom: number, x: number, z: number, buffer?: ArrayBuffer): void {\n let infoMap: Map | undefined = this.blockInfo.get(zoom < 0 ? 0 : zoom);\n if (infoMap == undefined) {\n infoMap = new Map();\n this.blockInfo.set(zoom, infoMap);\n }\n\n const blockInfo: null | BlockInfo = buffer == undefined ? null : new BlockInfo(new Uint8Array(buffer));\n\n if (blockInfo == null) {\n infoMap.delete(`${x}_${z}`);\n } else {\n infoMap.set(`${x}_${z}`, blockInfo);\n }\n }\n\n public unsetBlockInfo(zoom: number, x: number, z: number): void {\n this.blockInfo.get(zoom)?.delete(`${x}_${z}`);\n }\n\n public getRendererLayer(renderer: Renderer): DoubleTileLayer | undefined {\n return this._rendererLayers.get(renderer);\n }\n\n get currentRendererLayer(): DoubleTileLayer | undefined {\n return this._currentRendererLayer;\n }\n\n get currentRenderer(): Renderer | undefined {\n return this._currentRenderer;\n }\n\n public setRenderer(renderer: Renderer | string): void {\n clearTimeout(this._timer);\n\n if (!(renderer instanceof Renderer)) {\n this.renderers.forEach((label: Renderer): void => {\n if (label.label == renderer) {\n renderer = label;\n }\n });\n }\n\n this._currentRendererLayer?.remove();\n this._currentRenderer = this.settings.renderers.indexOf(renderer as Renderer) > -1 ? renderer as Renderer : this.settings.renderers[0];\n this._currentRendererLayer = this._rendererLayers.get(this._currentRenderer);\n this._currentRendererLayer!.addTo(this._pl3xmap.map);\n\n this.tick();\n\n fireCustomEvent('rendererselected', this);\n }\n\n public resetRenderer(renderer?: Renderer | string): void {\n this.setRenderer(renderer ?? this.settings.renderers[0]);\n }\n\n get settings(): WorldSettings {\n return this._settings;\n }\n\n get name(): string {\n return this.settings.name;\n }\n\n get displayName(): string {\n return this.settings.displayName;\n }\n\n get type(): string {\n return this.settings.type;\n }\n\n get order(): number {\n return this.settings.order;\n }\n\n get renderers(): Renderer[] {\n return this.settings.renderers;\n }\n\n get spawn(): Spawn {\n return this.settings.spawn;\n }\n\n get zoom(): Zoom {\n return this.settings.zoom;\n }\n\n get markerLayers(): MarkerLayer[] {\n return this._markerLayers;\n }\n\n get blockInfo(): Map> {\n return this._blockInfo;\n }\n\n get biomePalette(): Map {\n return this._biomePalette;\n }\n\n get background(): string {\n switch (this.type) {\n case \"nether\":\n return \"url('images/sky/nether.png')\";\n case \"the_end\":\n return \"url('images/sky/the_end.png')\";\n case \"normal\":\n default:\n return \"url('images/sky/overworld.png')\";\n }\n }\n\n private tick(): void {\n this.currentRendererLayer?.updateTileLayer();\n this._timer = setTimeout(() => this.tick(), this.settings.tileUpdateInterval * 1000);\n }\n}\n\nexport class Renderer extends Label {\n private readonly _icon: string;\n\n constructor(label: string, value: string, icon: string) {\n super(label, value);\n this._icon = icon;\n }\n\n get icon(): string {\n return this._icon;\n }\n}\n","import {Pl3xMap} from \"../Pl3xMap\";\nimport {BlockInfoControl} from \"../control/BlockInfoControl\";\nimport {CoordsControl} from \"../control/CoordsControl\";\nimport {LinkControl} from \"../control/LinkControl\";\nimport {Settings} from \"../settings/Settings\";\nimport {Renderer, World} from \"./World\";\nimport {fireCustomEvent, getUrlParam} from \"../util/Util\";\nimport {UI, WorldSettings} from \"../settings/WorldSettings\";\n\n/**\n * The world manager. Manages all loaded worlds.\n */\nexport class WorldManager {\n private readonly _pl3xmap: Pl3xMap;\n\n private _worlds: Map = new Map();\n private _currentWorld?: World;\n\n constructor(pl3xmap: Pl3xMap) {\n this._pl3xmap = pl3xmap;\n }\n\n public async init(settings: Settings): Promise {\n // build world objects\n const worlds: any[] = [];\n settings.worldSettings.forEach((worldSettings: WorldSettings): void => {\n const world: World = new World(this._pl3xmap, this, worldSettings);\n worlds.push(world);\n });\n\n // sort and store worlds\n worlds.sort((w1: World, w2: World) => w1.settings.order - w2.settings.order).forEach((world: World): void => {\n this._worlds.set(world.name, world);\n fireCustomEvent('worldadded', world);\n });\n\n // get world name from url, or first world from settings\n const worldName: string = getUrlParam('world', this._worlds.keys().next().value);\n\n // load world\n const world: World | undefined = this._worlds.get(worldName);\n if (world) {\n await this.setWorld(world, getUrlParam('renderer', undefined));\n }\n }\n\n get currentWorld(): World | undefined {\n return this._currentWorld;\n }\n\n public getWorld(world: string): World | undefined {\n world = world.replace(/:/g, \"-\");\n return this._worlds.get(world);\n }\n\n public async setWorld(world: World, renderer?: Renderer | string, resetCoords?: boolean): Promise {\n return world.load().then((): void => {\n if (world === this._currentWorld && renderer === this._currentWorld.currentRenderer) {\n return;\n }\n\n if (world !== this._currentWorld) {\n this._currentWorld?.unload();\n this._currentWorld = world;\n world.loadMarkers();\n fireCustomEvent('worldselected', world);\n document.getElementById(\"map\")!.style.background = world.background;\n }\n\n world.resetRenderer(renderer);\n\n this._pl3xmap.map.centerOn(\n resetCoords ? world.spawn.x : getUrlParam('x', world.spawn.x),\n resetCoords ? world.spawn.z : getUrlParam('z', world.spawn.z),\n resetCoords ? world.zoom.default : getUrlParam('zoom', world.zoom.default)\n );\n\n const ui: UI = world.settings.ui;\n this._pl3xmap.controlManager.linkControl = ui.link ? new LinkControl(this._pl3xmap, ui.link) : undefined;\n this._pl3xmap.controlManager.coordsControl = ui.coords ? new CoordsControl(this._pl3xmap, ui.coords) : undefined;\n this._pl3xmap.controlManager.blockInfoControl = ui.blockinfo ? new BlockInfoControl(this._pl3xmap, ui.blockinfo) : undefined;\n\n const attributeDom: HTMLElement | undefined = this._pl3xmap.map.attributionControl.getContainer();\n if (attributeDom) {\n attributeDom.style.display = ui.attribution ? \"inline-block\" : \"none\";\n }\n });\n }\n}\n","import SpriteSymbol from \"../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"icon--layers\",\n \"use\": \"icon--layers-usage\",\n \"viewBox\": \"0 0 234.46 247.78\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {SidebarTab} from \"../control/SidebarControl\";\nimport {MarkerLayer} from \"../layergroup/MarkerLayer\";\nimport {createSVGIcon} from \"../util/Util\";\nimport '../svg/layers.svg';\n\ninterface LayerControlInput extends HTMLInputElement {\n layerId: number;\n}\n\ninterface LayerListItem {\n layer: L.Layer;\n name: string;\n}\n\nexport default class LayersTab extends L.Control.Layers implements SidebarTab {\n declare protected _map: L.Map;\n\n declare protected _layerControlInputs: HTMLInputElement[];\n\n declare protected _layers: LayerListItem[];\n declare protected _onInputClick: (e: Event) => void;\n declare protected _checkDisabledLayers: () => void;\n\n protected _pl3xmap: Pl3xMap;\n protected _button: HTMLButtonElement = L.DomUtil.create('button');\n protected _content: HTMLDivElement = L.DomUtil.create('div');\n\n protected _skeleton: HTMLParagraphElement = L.DomUtil.create('p');\n protected _container: HTMLDivElement = L.DomUtil.create('div');\n protected _list: HTMLFieldSetElement = L.DomUtil.create('fieldset', 'menu');\n\n constructor(pl3xmap: Pl3xMap) {\n super({}, {}, {\n hideSingleBase: true,\n sortLayers: true,\n sortFunction: (layer1: L.Layer, layer2: L.Layer, name1: string, name2: string): number => {\n if (layer1 instanceof MarkerLayer && layer2 instanceof MarkerLayer) {\n const diff: number = layer1.priority - layer2.priority;\n if (diff !== 0) {\n return diff;\n }\n name1 = layer1.label;\n name2 = layer2.label;\n }\n return name1 < name2 ? -1 : (name2 < name1 ? 1 : 0);\n }\n });\n\n this._pl3xmap = pl3xmap;\n\n this._button.type = 'button';\n this._button.setAttribute('aria-expanded', 'false');\n this._button.setAttribute('aria-controls', `sidebar__layers`);\n this._button.appendChild(createSVGIcon('layers'));\n this._button.setAttribute('aria-label', pl3xmap.settings!.lang.layers.label);\n this._button.title = pl3xmap.settings!.lang.layers.label;\n\n this._content.hidden = true;\n this._content.id = `sidebar__layers`;\n this._content.setAttribute('aria-hidden', 'true');\n\n this.initEvents();\n }\n\n private initEvents(): void {\n window.addEventListener('overlayadded', (e: CustomEvent): void => {\n if (e.detail.showControls) {\n this.addOverlay(e.detail, e.detail.label);\n }\n if (!e.detail.defaultHidden) {\n e.detail.addTo(this._map);\n }\n this._update();\n });\n\n window.addEventListener('overlayremoved', (e: CustomEvent): void => {\n e.detail.removeFrom(this._map);\n this.removeLayer(e.detail);\n this._update();\n });\n\n window.addEventListener('worldselected', (): void => {\n this._layers = [];\n this._update();\n });\n }\n\n private _initLayout(): void {\n const heading: HTMLHeadingElement = L.DomUtil.create('h2', '', this._content);\n heading.innerText = this._pl3xmap.settings!.lang.layers.label;\n heading.id = 'layers-heading';\n\n this._skeleton.innerText = this._pl3xmap.settings!.lang.layers.value;\n this._skeleton.id = 'layers-skeleton';\n this._skeleton.tabIndex = -1;\n\n this._list.setAttribute('aria-labelledby', 'overlay-layers-heading');\n this._list.setAttribute('role', 'listbox');\n\n this._container.appendChild(this._list);\n\n this._content.appendChild(this._skeleton);\n this._content.appendChild(this._container);\n }\n\n private _update() {\n if (!this._map) {\n return this;\n }\n\n L.DomUtil.empty(this._list);\n\n this._layerControlInputs = [];\n\n this._layers.forEach((layer: LayerListItem): void => {\n this._addItem(layer);\n });\n\n const hasLayers: boolean = this._layers.length > 0;\n this._container.hidden = !hasLayers;\n this._skeleton.hidden = hasLayers;\n\n return this;\n }\n\n private _addItem(layer: LayerListItem): HTMLLabelElement {\n const label: HTMLLabelElement = L.DomUtil.create('label'),\n input: LayerControlInput = L.DomUtil.create('input') as LayerControlInput;\n\n input.type = 'checkbox';\n input.name = 'overlays';\n input.layerId = L.Util.stamp(layer.layer);\n input.id = label.htmlFor = `overlay-${input.layerId}`;\n input.defaultChecked = this._map.hasLayer(layer.layer);\n\n this._layerControlInputs.push(input);\n\n L.DomEvent.on(input, 'click', this._onInputClick, this);\n\n label.innerText = layer.name;\n\n this._list.appendChild(input);\n this._list.appendChild(label);\n\n this._checkDisabledLayers();\n return label;\n }\n\n expand(): this {\n //Do nothing\n return this;\n }\n\n collapse(): this {\n //Do nothing\n return this;\n }\n\n onActivate(): void {\n if (!this._container.hidden) {\n (this._list.querySelector('input') as HTMLElement)!.focus();\n } else {\n this._skeleton.focus();\n }\n }\n\n get button(): HTMLElement {\n return this._button;\n }\n\n get content(): HTMLElement {\n return this._content;\n }\n\n get id(): string {\n return 'layers';\n }\n}\n","import * as L from \"leaflet\";\nimport {SidebarTab} from \"../control/SidebarControl\";\nimport {Pl3xMap} from \"../Pl3xMap\";\n\nexport default class BaseTab implements SidebarTab {\n protected readonly _pl3xmap: Pl3xMap;\n protected readonly _button: HTMLButtonElement = L.DomUtil.create('button');\n protected readonly _content: HTMLDivElement = L.DomUtil.create('div');\n protected readonly _id: string;\n\n constructor(pl3xmap: Pl3xMap, id: string) {\n this._pl3xmap = pl3xmap;\n this._id = id;\n\n this._button.type = 'button';\n this._button.setAttribute('aria-expanded', 'false');\n this._button.setAttribute('aria-controls', `sidebar__${this._id}`);\n\n this._content.hidden = true;\n this._content.id = `sidebar__${this._id}`;\n this._content.setAttribute('aria-hidden', 'true');\n }\n\n get button(): HTMLElement {\n return this._button;\n }\n\n get content(): HTMLElement {\n return this._content;\n }\n\n get id(): string {\n return this._id;\n }\n\n onActivate(): void {\n if (this._content.children.length) {\n const focusTarget: HTMLElement = (this._content.firstElementChild as HTMLElement);\n focusTarget.tabIndex = -1;\n focusTarget.focus();\n }\n }\n}\n","import SpriteSymbol from \"../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"icon--players\",\n \"use\": \"icon--players-usage\",\n \"viewBox\": \"0 0 258.05 271.18\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {Player} from \"../player/Player\";\nimport {createSVGIcon, handleKeyboardEvent, isset} from \"../util/Util\";\nimport BaseTab from \"./BaseTab\";\nimport '../svg/players.svg';\nimport {Lang} from \"../settings/Lang\";\nimport {Settings} from \"../settings/Settings\";\nimport {PlayerManager} from \"../player/PlayerManager\";\n\ninterface PlayerListItem {\n input: HTMLInputElement;\n label: HTMLLabelElement;\n}\n\nexport default class PlayersTab extends BaseTab {\n private readonly _players: Map = new Map();\n private readonly _skeleton: HTMLParagraphElement;\n private readonly _list: HTMLFieldSetElement;\n private readonly _heading: HTMLHeadingElement;\n\n constructor(pl3xmap: Pl3xMap) {\n super(pl3xmap, 'players');\n\n const lang: Lang = pl3xmap.settings!.lang;\n\n this._button.appendChild(createSVGIcon('players'));\n this._button.setAttribute('aria-label', lang.worlds.label);\n this._button.title = lang.players.label;\n\n this._heading = L.DomUtil.create('h2', '', this._content);\n this._heading.innerText = lang.players.label;\n this._heading.id = 'players-heading';\n\n this._skeleton = L.DomUtil.create('p', '', this._content);\n this._skeleton.innerText = lang.players.value;\n this._skeleton.tabIndex = -1;\n\n this._list = L.DomUtil.create('fieldset', 'menu', this._content);\n this._list.setAttribute('aria-labelledby', 'players-heading');\n this._list.setAttribute('role', 'radiogroup');\n\n this.initEvents();\n\n this._update();\n }\n\n private initEvents(): void {\n addEventListener('playeradded', (e: CustomEvent): void => {\n this.createListItem(e.detail);\n this._update();\n });\n addEventListener('playerremoved', (e: CustomEvent): void => {\n this.removeListItem(e.detail);\n this._update();\n });\n addEventListener('followplayer', (e: CustomEvent): void => {\n this._players.forEach((item: PlayerListItem, player: Player): void => {\n item.input.checked = player === e.detail;\n });\n });\n\n this._list.addEventListener('keydown', (e: KeyboardEvent) =>\n handleKeyboardEvent(e, Array.from(this._list.elements) as HTMLElement[]))\n }\n\n private _update(): void {\n const settings: Settings | undefined = this._pl3xmap.settings;\n\n const online: string = String(isset(settings?.players) ? Object.keys(settings!.players).length : '???');\n const max: string = String(settings?.maxPlayers ?? '???');\n\n const title: any = settings?.lang.players?.label\n .replace('', online)\n .replace('', max)\n ?? 'Players';\n\n this._heading.innerText = title;\n this._button.title = title;\n }\n\n private createListItem(player: Player): void {\n const input: HTMLInputElement = L.DomUtil.create('input', 'players'),\n label: HTMLLabelElement = L.DomUtil.create('label', '');\n\n label.style.backgroundImage = `url('images/skins/3D/${player.uuid}.png')`;\n label.innerText = player.displayName;\n input.id = label.htmlFor = `${player.uuid}`;\n input.type = 'radio';\n input.name = 'player';\n input.checked = false;\n input.addEventListener('click', async (): Promise => {\n const manager: PlayerManager = this._pl3xmap.playerManager;\n const player: Player | undefined = manager.players.get(input.id);\n if (player === manager.follow) {\n manager.follow = undefined;\n } else {\n manager.follow = player;\n }\n manager.updateFollow();\n });\n\n this._players.set(player, {\n input,\n label\n });\n\n this._skeleton.hidden = true;\n this._list.appendChild(input);\n this._list.appendChild(label);\n\n Array.from(this._players.values()).sort((a: PlayerListItem, b: PlayerListItem): 1 | -1 | 0 => {\n return a.label.innerText < b.label.innerText ? -1 : (a.label.innerText > b.label.innerText ? 1 : 0);\n }).forEach((item: PlayerListItem): void => {\n item.input.remove();\n item.label.remove();\n this._list.appendChild(item.input);\n this._list.appendChild(item.label);\n });\n }\n\n private removeListItem(player: Player): void {\n const listItem: PlayerListItem | undefined = this._players.get(player);\n\n if (!listItem) {\n return;\n }\n\n listItem.label.remove();\n listItem.input.remove();\n this._players.delete(player);\n\n if (!this._players.size) {\n this._skeleton.hidden = false;\n }\n }\n\n onActivate(): void {\n if (this._players.size) {\n (this._list.querySelector('input:checked') as HTMLElement)?.focus()\n } else {\n this._skeleton.focus();\n }\n }\n}\n","import SpriteSymbol from \"../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"icon--maps\",\n \"use\": \"icon--maps-usage\",\n \"viewBox\": \"0 0 268.83 266.53\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {Label, Lang} from \"../settings/Lang\";\nimport {Renderer, World} from \"../world/World\";\nimport {createSVGIcon, handleKeyboardEvent} from \"../util/Util\";\nimport BaseTab from \"./BaseTab\";\nimport '../svg/maps.svg';\n\ninterface WorldListItem {\n fieldset: HTMLFieldSetElement;\n inputs: Map