{"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 (\"\" + content + \"\");\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 (\"\" + content + \"\");\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\nexport function getLangName(prefix: string, name: string) : string {\n if (name.indexOf(':') !== -1) {\n const split = name.split(\":\");\n const a = prefix + '.' + split[0] + '.' + name.split(split[0] + \":\")[1];\n const result = Pl3xMap.instance.langPalette.get(a);\n if (result != null) {\n return result\n }\n }\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 return name;\n}\n","import {Pl3xMap} from \"../Pl3xMap\";\nimport {Player} from \"./Player\";\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(players: Player[]): void {\n const toRemove: Set = new Set(this._players.keys());\n\n 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, getLangName } 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 name = getLangName(\"block\", name);\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 = this._pl3xmap.settings!.lang.blockInfo.unknown.block ?? 'Unknown block';\n let biomeName: string = this._pl3xmap.settings!.lang.blockInfo.unknown.biome ?? 'Unknown biome';\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 if (block.block != 0) {\n blockName = this._blockPalette.get(block.block) ?? blockName;\n }\n if (block.biome != 0) {\n biomeName = this._pl3xmap.worldManager.currentWorld?.biomePalette.get(block.biome) ?? biomeName;\n }\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: object = {};\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: object = {};\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: object = {};\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\";\nimport {Player} from \"../player/Player\";\n\nexport class LinkControl extends ControlBox {\n private readonly _dom: HTMLAnchorElement;\n private _disabled: boolean;\n\n private onEvent = (): void => {\n if (this._disabled) {\n return;\n }\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 this._disabled = false;\n addEventListener('followplayer', (e: CustomEvent): void => {\n this._disabled = !(e.detail == undefined); // e.detail returns \"null\" even though it's being set to \"undefined\"\n });\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: object = {};\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.offset = [data.offset!.x, data.offset!.z];\n\n this.applySize(data, props);\n this.applyPanning(data, props);\n this.applyClosing(data, props);\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 applySize(data: PopupOptions, props: L.PopupOptions): void {\n if (isset(data.maxWidth)) props.maxWidth = data.maxWidth;\n if (isset(data.minWidth)) props.minWidth = data.minWidth;\n if (isset(data.maxHeight)) props.maxHeight = data.maxHeight;\n }\n\n applyPanning(data: PopupOptions, props: L.PopupOptions): void {\n if (isset(data.autoPan)) props.autoPan = data.autoPan;\n if (isset(data.autoPanPaddingTopLeft)) props.autoPanPaddingTopLeft = [data.autoPanPaddingTopLeft!.x, data.autoPanPaddingTopLeft!.z];\n if (isset(data.autoPanPaddingBottomRight)) props.autoPanPaddingBottomRight = [data.autoPanPaddingBottomRight!.x, data.autoPanPaddingBottomRight!.z];\n if (isset(data.autoPanPadding)) props.autoPanPadding = [data.autoPanPadding!.x, data.autoPanPadding!.z];\n if (isset(data.keepInView)) props.keepInView = data.keepInView;\n }\n\n applyClosing(data: PopupOptions, props: L.PopupOptions): void {\n if (isset(data.closeButton)) props.closeButton = data.closeButton;\n if (isset(data.autoClose)) props.autoClose = data.autoClose;\n if (isset(data.closeOnEscapeKey)) props.closeOnEscapeKey = data.closeOnEscapeKey;\n if (isset(data.closeOnClick)) props.closeOnClick = data.closeOnClick;\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 _timestamp: number = (new Date()).getTime();\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 get timestamp(): number {\n return this._timestamp;\n }\n\n set timestamp(timestamp: number) {\n this._timestamp = timestamp;\n }\n\n update(world: World, updateOverride?: boolean): void {\n if (updateOverride === undefined) {\n const time = (new Date()).getTime() - this._timestamp;\n // console.log(world.eventSource?.readyState);\n // console.log(`${this._key}: world.eventSource?.readyState === EventSource.OPEN is ${world.eventSource?.readyState === EventSource.OPEN}`);\n // console.log(`${this._key}: time (${time}) < 1000 is ${time < 1000}`);\n if (world.eventSource?.readyState === EventSource.OPEN && time < 1000) {\n // console.log(this._key + \": source is open and timestamp is \" + time + \" which is less than 1000\");\n return;\n }\n }\n\n getJSON(`tiles/${world.name}/markers/${this._key}.json`)\n .then((json): void => this.updateMarkers(json, world));\n }\n\n updateMarkers(json: any, world: World): void {\n // console.log(`updating ${this._key} with update interval of ${this._updateInterval}`);\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 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 & 0b0000000000_1111111111_000000000000) >>> 12;\n this._yPos = packed & 0b0000000000_0000000000_111111111111;\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: BlockInfo;\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: BlockInfo, 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(): BlockInfo {\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\n/**\n * Represents 'unknown' values for BlockInfo.\n */\nexport class BlockInfoUnknown {\n private readonly _block: string;\n private readonly _biome: string;\n\n constructor(block: string, biome: string) {\n this._block = block;\n this._biome = biome;\n }\n\n get block(): string {\n return this._block;\n }\n\n get biome(): string {\n return this._biome;\n }\n}\n\n/**\n * Represents a label and a value, with 'unknown' values.\n */\nexport class BlockInfo extends Label {\n private readonly _unknown: BlockInfoUnknown;\n\n constructor(label: string, value: string, unknown: BlockInfoUnknown) {\n super(label, value);\n this._unknown = unknown;\n }\n\n get unknown(): BlockInfoUnknown {\n return this._unknown;\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 {Center, Spawn, WorldSettings, Zoom} from \"../settings/WorldSettings\";\nimport {DoubleTileLayer} from \"../tilelayer/DoubleTileLayer\";\nimport {WorldManager} from \"./WorldManager\";\nimport {fireCustomEvent, getBytes, getJSON, getLangName} 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 _eventSource?: EventSource;\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 private initSSE() {\n this._eventSource = new EventSource(\"sse/\" + this.settings.name);\n console.debug(\"initializing \" + this.settings.name + \" sse\");\n\n this._eventSource.addEventListener(\"markers\", (ev: Event) => {\n const messageEvent = (ev as MessageEvent);\n const json: any = JSON.parse(messageEvent.data);\n const key: string = json.key;\n const markers: any[] = json.markers;\n console.debug(json);\n\n if (messageEvent.data.length === 0) return;\n\n this._markerLayers.forEach(layer => {\n if (layer.key !== key) return;\n layer.timestamp = (new Date()).getTime();\n layer.updateMarkers(markers, this);\n });\n });\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 name = getLangName(\"biome\", name);\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.center = settings.center;\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._eventSource?.close();\n console.debug(\"closing \" + this.settings.name + \" sse\");\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 this.initSSE();\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, true);\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 center(): Center {\n return this.settings.center;\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 eventSource(): EventSource | undefined {\n return this._eventSource;\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 const xCoord = world.center.x === -1 ? world.spawn.x : world.center.x;\n const zCoord = world.center.z === -1 ? world.spawn.z : world.center.z;\n this._pl3xmap.map.centerOn(\n resetCoords ? xCoord : getUrlParam('x', xCoord),\n resetCoords ? zCoord : getUrlParam('z', zCoord),\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} 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(this._pl3xmap.playerManager.players.size);\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\n}\n\nexport default class WorldsTab extends BaseTab {\n private readonly _worlds: Map = new Map();\n private readonly _skeleton: HTMLParagraphElement;\n private readonly _list: HTMLFieldSetElement;\n\n constructor(pl3xmap: Pl3xMap) {\n super(pl3xmap, 'worlds');\n\n const lang: Lang = pl3xmap.settings!.lang;\n\n this._button.appendChild(createSVGIcon('maps'));\n this._button.setAttribute('aria-label', lang.worlds.label);\n this._button.title = lang.worlds.label;\n\n const heading: HTMLHeadingElement = L.DomUtil.create('h2', '', this._content);\n heading.innerText = lang.worlds.label;\n heading.id = 'worlds-heading';\n\n this._skeleton = L.DomUtil.create('p', '', this._content);\n this._skeleton.innerText = lang.worlds.value;\n this._skeleton.tabIndex = -1;\n\n this._list = L.DomUtil.create('fieldset', 'menu', this._content);\n this._list.setAttribute('aria-labelledby', 'worlds-heading');\n this._list.setAttribute('role', 'radiogroup');\n\n this.initEvents();\n }\n\n private initEvents(): void {\n addEventListener('worldadded', (e: CustomEvent) => this.createListItem(e.detail));\n addEventListener('worldremoved', (e: CustomEvent) => this.removeListItem(e.detail)); //TODO: Refreshless config updates?\n addEventListener('rendererselected', (e: CustomEvent): void => {\n this._worlds.get(e.detail)!.inputs.get(e.detail.currentRenderer!)!.checked = true;\n });\n\n this._list.addEventListener('keydown', (e: KeyboardEvent) =>\n handleKeyboardEvent(e, Array.from(this._list.elements) as HTMLElement[]))\n }\n\n private createListItem(world: World): void {\n const fieldset: HTMLFieldSetElement = L.DomUtil.create('fieldset'),\n legend: HTMLLegendElement = L.DomUtil.create('legend');\n\n legend.innerText = world.displayName;\n fieldset.appendChild(legend);\n\n const inputs: Map = new Map();\n\n world.renderers.forEach((renderer: Renderer) => {\n const input: HTMLInputElement = L.DomUtil.create('input'),\n label: HTMLLabelElement = L.DomUtil.create('label');\n\n fieldset.appendChild(input);\n fieldset.appendChild(label);\n\n //icon.src = `images/icon/${renderer}.png`;\n label.style.backgroundImage = `url('images/icon/registered/${renderer.icon}.png')`;\n label.title = renderer.value;\n input.id = label.htmlFor = `${world.name}-${renderer.label}`;\n input.type = 'radio';\n input.name = 'world';\n input.checked = false;\n input.classList.add(\"renderer\");\n input.addEventListener('click', async (e: MouseEvent): Promise => {\n this._pl3xmap.worldManager.setWorld(world, renderer, world !== this._pl3xmap.worldManager.currentWorld)\n // Don't update radio button if switch fails\n .catch(() => e.preventDefault());\n });\n\n inputs.set(renderer, input);\n });\n\n this._worlds.set(world, {\n fieldset,\n inputs\n });\n\n this._skeleton.hidden = true;\n this._list.appendChild(fieldset);\n }\n\n private removeListItem(world: World): void {\n const listItem: WorldListItem | undefined = this._worlds.get(world);\n\n if (!listItem) {\n return;\n }\n\n listItem.fieldset.remove();\n\n this._worlds.delete(world);\n\n if (!this._worlds.size) {\n this._skeleton.hidden = false;\n }\n }\n\n onActivate(): void {\n if (this._worlds.size) {\n (this._list.querySelector('input:checked') as HTMLElement)!.focus()\n } else {\n this._skeleton.focus();\n }\n }\n}\n","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport Pl3xMapLeafletMap from \"../map/Pl3xMapLeafletMap\";\nimport LayersTab from \"../sidebar/LayersTab\";\nimport PlayersTab from \"../sidebar/PlayersTab\";\nimport WorldsTab from \"../sidebar/WorldsTab\";\n\nexport interface SidebarTab {\n get button(): HTMLElement;\n\n get content(): HTMLElement;\n\n get id(): string;\n\n onAdd?: (map: Pl3xMapLeafletMap) => void;\n onActivate?: () => void;\n onDeactivate?: () => void;\n}\n\nexport default class SidebarControl extends L.Control {\n private readonly _container: HTMLDivElement;\n private readonly _buttons: HTMLElement;\n private readonly _content: HTMLElement;\n\n private _tabs: Set = new Set();\n private _expanded: boolean = false;\n private _currentTab?: SidebarTab;\n\n constructor(pl3xmap: Pl3xMap) {\n super({position: 'topright'});\n\n this._container = L.DomUtil.create('div');\n this._container.id = 'sidebar';\n\n this._buttons = L.DomUtil.create('header', '', this._container);\n this._buttons.id = 'sidebar__buttons';\n\n this._content = L.DomUtil.create('section', '', this._container);\n this._content.id = 'sidebar__content';\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n\n this.addTab(new WorldsTab(pl3xmap));\n this.addTab(new LayersTab(pl3xmap));\n this.addTab(new PlayersTab(pl3xmap));\n //this.addTab(new MarkersTab(pl3xmap));\n }\n\n onAdd(map: Pl3xMapLeafletMap): HTMLDivElement {\n for (const tab of this._tabs) {\n if (tab.onAdd) {\n tab.onAdd(map);\n }\n }\n\n return this._container;\n }\n\n toggle(): void {\n if (this._expanded) {\n this.collapse();\n } else {\n this.expand();\n }\n }\n\n expand(): void {\n this._expanded = true;\n this._container.classList.add('sidebar--expanded');\n this._content.setAttribute('aria-hidden', 'false');\n }\n\n collapse(): void {\n if (this._currentTab) {\n this.deactivateTab(this._currentTab, true);\n }\n\n this._expanded = false;\n this._container.classList.remove('sidebar--expanded');\n this._content.setAttribute('aria-hidden', 'true');\n }\n\n addTab(tab: SidebarTab): void {\n if (this._tabs.has(tab)) {\n return;\n }\n\n this._tabs.add(tab);\n\n tab.button.addEventListener('click', () => this.toggleTab(tab));\n this._buttons.appendChild(tab.button);\n\n tab.content.addEventListener('keydown', (e: KeyboardEvent): void => {\n if (e.key === 'Escape') {\n this.collapse();\n }\n });\n\n this._content.appendChild(tab.content);\n }\n\n removeTab(tab: SidebarTab): void {\n if (!this._tabs.has(tab)) {\n return;\n }\n\n this.deactivateTab(tab, false);\n tab.button.remove();\n }\n\n toggleTab(tab: SidebarTab): void {\n if (this._currentTab === tab) {\n this.collapse();\n } else {\n this.activateTab(tab);\n }\n }\n\n activateTab(tab: SidebarTab): void {\n if (!this._expanded) {\n this.expand();\n }\n\n if (this._currentTab) {\n this.deactivateTab(this._currentTab, false);\n }\n\n tab.button.setAttribute('aria-expanded', 'true');\n tab.content.hidden = false;\n tab.content.setAttribute('aria-hidden', 'false');\n this._currentTab = tab;\n\n if (tab.onActivate) {\n tab.onActivate();\n }\n }\n\n deactivateTab(tab: SidebarTab, moveFocus: boolean): void {\n if (tab !== this._currentTab) {\n return;\n }\n\n tab.button.setAttribute('aria-expanded', 'false');\n tab.content.hidden = true;\n tab.content.setAttribute('aria-hidden', 'true');\n this._currentTab = undefined;\n\n if (moveFocus) {\n tab.button.focus();\n }\n\n if (tab.onDeactivate) {\n tab.onDeactivate();\n }\n }\n}\n","import * as L from \"leaflet\";\nimport {Pl3xMap} from \"../Pl3xMap\";\nimport {toLatLng} from \"../util/Util\";\n\n/**\n * Represents the leaflet map.\n */\nexport default class Pl3xMapLeafletMap extends L.Map {\n declare _controlCorners: { [x: string]: HTMLDivElement; };\n declare _controlContainer?: HTMLElement;\n declare _container?: HTMLElement;\n\n private readonly _pl3xmap: Pl3xMap;\n\n constructor(pl3xmap: Pl3xMap) {\n super('map', {\n // simple crs for custom map tiles\n crs: L.Util.extend(L.CRS.Simple, {\n // we need to flip the y-axis correctly\n // https://stackoverflow.com/a/62320569/3530727\n transformation: new L.Transformation(1, 0, 1, 0)\n }),\n // always 0,0 center\n center: [0, 0],\n //zoomSnap: 0.25,\n //zoomDelta: 0.25,\n //wheelPxPerZoomLevel: 120,\n // show the attribution footer\n attributionControl: true,\n // canvas is faster than default svg\n preferCanvas: true\n });\n\n this.on('mousedown', (): void => {\n pl3xmap.playerManager.follow = undefined;\n });\n\n // sets the leaflet attribution prefix to our project page\n this.attributionControl.setPrefix(\"Pl3xMap © 2020-2023\");\n\n this._pl3xmap = pl3xmap;\n }\n\n // https://stackoverflow.com/a/60391674/3530727\n _initControlPos(): void {\n this._controlContainer = L.DomUtil.create('div', 'leaflet-control-container', this._container);\n\n const corners: { [x: string]: HTMLDivElement; } = this._controlCorners = {},\n top: HTMLDivElement = L.DomUtil.create('div', 'leaflet-control-container-top', this._controlContainer),\n bottom: HTMLDivElement = L.DomUtil.create('div', 'leaflet-control-container-bottom', this._controlContainer);\n\n function createCorner(vSide: string, hSide: string): void {\n corners[`${vSide}${hSide}`] = L.DomUtil.create('div', `leaflet-${vSide} leaflet-${hSide}`, vSide === 'top' ? top : bottom);\n }\n\n createCorner('top', 'left');\n createCorner('top', 'center');\n createCorner('top', 'right');\n createCorner('bottom', 'left');\n createCorner('bottom', 'center');\n createCorner('bottom', 'right');\n }\n\n public centerOn(x: number, z: number, zoom: number): void {\n this.setView(toLatLng([x, z]), this.getMaxZoomOut() - zoom);\n }\n\n public getMaxZoomOut(): number {\n return this._pl3xmap.worldManager.currentWorld?.zoom.maxOut ?? 0;\n }\n\n public getCurrentZoom(): number {\n return this.getMaxZoomOut() - this.getZoom();\n }\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/mini-css-extract-plugin/dist/loader.js??ruleSet[1].rules[1].use[1]!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./styles.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/mini-css-extract-plugin/dist/loader.js??ruleSet[1].rules[1].use[1]!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./styles.scss\";\n export default content && content.locals ? content.locals : undefined;\n","import {Settings} from \"./settings/Settings\";\nimport {ControlManager} from \"./control/ControlManager\";\nimport {PlayerManager} from \"./player/PlayerManager\";\nimport {WorldManager} from \"./world/WorldManager\";\nimport {getJSON} from \"./util/Util\";\nimport SidebarControl from \"./control/SidebarControl\";\nimport Pl3xMapLeafletMap from \"./map/Pl3xMapLeafletMap\";\nimport \"./scss/styles.scss\";\nimport {Player} from \"./player/Player\";\n\nwindow.onload = function (): void {\n window.pl3xmap = new Pl3xMap();\n};\n\n/**\n * Represents the main Pl3xMap class.\n */\nexport class Pl3xMap {\n private static _instance: Pl3xMap;\n\n private readonly _map: Pl3xMapLeafletMap;\n\n private readonly _controlManager: ControlManager;\n private readonly _playerManager: PlayerManager;\n private readonly _worldManager: WorldManager;\n\n private _eventSource?: EventSource;\n\n private _langPalette: Map = new Map();\n private _settings?: Settings;\n\n private _timestamp: number = (new Date()).getTime();\n private _timer: NodeJS.Timeout | undefined;\n\n constructor() {\n Pl3xMap._instance = this;\n\n this._map = new Pl3xMapLeafletMap(this);\n \n window.addEventListener('beforeunload', function () {\n if (Pl3xMap.instance.eventSource != undefined) {\n Pl3xMap.instance.eventSource.close();\n }\n });\n\n this._controlManager = new ControlManager(this);\n this._playerManager = new PlayerManager(this);\n this._worldManager = new WorldManager(this);\n\n getJSON('tiles/settings.json').then((json) => {\n this._settings = json as Settings;\n document.title = this._settings.lang.title;\n //this.map.options.zoomSnap = json.zoom.snap;\n //this.map.options.zoomDelta = json.zoom.delta;\n //this.map.options.wheelPxPerZoomLevel = json.zoom.wheel;\n getJSON('lang/' + this._settings.lang.langFile).then((json): void => {\n Object.entries(json).forEach((data: [string, unknown]): void => {\n this._langPalette.set(data[0], data[1]);\n });\n });\n this.controlManager.sidebarControl = new SidebarControl(this);\n const promise: Promise = this.worldManager.init(this._settings);\n this._eventSource = this.initSSE();\n this.update();\n return promise;\n });\n }\n\n public static get instance(): Pl3xMap {\n return Pl3xMap._instance;\n }\n\n private update(): void {\n if (this._eventSource?.readyState === EventSource.OPEN && (new Date()).getTime() - this._timestamp < 1000) {\n this._timer = setTimeout(() => this.update(), 1000);\n return;\n }\n getJSON('tiles/settings.json').then( (json): void => {\n this._settings = json as Settings;\n\n this.playerManager.update(this._settings.players);\n\n this._timer = setTimeout(() => this.update(), 1000);\n });\n }\n\n private initSSE(): EventSource {\n const eventSource = new EventSource(\"sse\");\n\n eventSource.addEventListener(\"settings\", (ev: Event) => {\n this._timestamp = (new Date()).getTime();\n const messageEvent = (ev as MessageEvent);\n const json: any = JSON.parse(messageEvent.data);\n this._settings = json as Settings;\n this.playerManager.update(this._settings.players);\n });\n\n return eventSource;\n }\n\n get map(): Pl3xMapLeafletMap {\n return this._map;\n }\n\n get controlManager(): ControlManager {\n return this._controlManager;\n }\n\n get playerManager(): PlayerManager {\n return this._playerManager;\n }\n\n get worldManager(): WorldManager {\n return this._worldManager;\n }\n\n get eventSource(): EventSource | undefined {\n return this._eventSource;\n }\n\n get langPalette(): Map {\n return this._langPalette;\n }\n\n get settings(): Settings | undefined {\n return this._settings;\n }\n\n get timestamp(): number {\n return this._timestamp;\n }\n}\n"],"names":["stylesInDOM","getIndexByIdentifier","identifier","result","i","length","modulesToDom","list","options","idCountMap","identifiers","item","id","base","count","concat","indexByIdentifier","obj","css","media","sourceMap","supports","layer","references","updater","addElementStyle","byIndex","splice","push","api","domAPI","update","newObj","remove","module","exports","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","memo","insert","style","target","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","appendChild","element","createElement","setAttributes","attributes","styleElement","nonce","setAttribute","insertStyleElement","needLayer","btoa","unescape","encodeURIComponent","JSON","stringify","styleTagTransform","apply","parentNode","removeChild","removeStyleElement","styleSheet","cssText","firstChild","createTextNode","SpriteSymbol","ref","viewBox","content","this","prototype","toString","destroy","this$1","forEach","prop","createCommonjsModule","fn","g","self","deepmerge","isMergeableObject","val","Object","call","emptyTarget","Array","isArray","cloneIfNecessary","value","optionsArgument","clone","defaultArrayMerge","source","destination","slice","indexOf","mergeObject","keys","key","array","arrayMerge","all","reduce","prev","next","factory","namespaces_1","default","svg","name","uri","xlink","defaultAttrs","wrapInSvgString","attrs","map","attr","replace","join","objectToAttrsString","BrowserSpriteSymbol","SpriteSymbol$$1","arguments","__proto__","create","constructor","prototypeAccessors","isMounted","get","node","createFromExistingNode","getAttribute","outerHTML","unmount","mount","mountTarget","render","hasImportNode","importNode","doc","DOMParser","parseFromString","documentElement","parse","childNodes","defineProperties","svg$1","xlink$1","defaultConfig","Sprite","config","symbols","add","symbol","existing","find","filter","s","has","stringifiedSymbols","defaultConfig$1","autoConfigure","mountTo","syncUrlsWithBaseTag","listenLocationChangeEvent","locationChangeEvent","locationChangeAngularEmitter","usagesToUpdate","moveGradientsOutsideSymbol","arrayFrom","arrayLike","browser","test","navigator","userAgent","getUrlWithoutFragment","url","location","href","split","eventName","angular","run","$rootScope","$on","newUrl","oldUrl","data","event","createEvent","initCustomEvent","dispatchEvent","selector","querySelectorAll","insertBefore","xLinkNS","xLinkAttrName","specialUrlCharsPattern","encoder","match","charCodeAt","toUpperCase","sprite","attList","attSelector","updateUrls","startsWith","replaceWith","nodes","matcher","startsWithEncoded","replaceWithEncoded","localName","acc","arrayfied","matched","RegExp","setAttributeNS","updateReferences","Events","BrowserSprite","Sprite$$1","cfg","emitter","on","type","handler","off","emit","evt","_emitter","_autoConfigure","baseUrl","getElementsByTagName","handleLocationChange","_handleLocationChange","bind","addEventListener","spriteNode","symbolNode","updatedNodes","textContent","detail","isNewSymbol","attach","removeEventListener","prepend","mountNode","usages","ready$1","definition","listener","fns","hack","doScroll","domContentLoaded","loaded","readyState","shift","setTimeout","spriteNodeId","spriteGlobalVarName","loadSprite","getElementById","body","L","SVG","include","_updateEllipse","rx","_radiusX","ry","_radiusY","phi","_tiltDeg","endPoint","_endPointParams","d","x0","y0","largeArc","sweep","x1","y1","_setPath","Canvas","_empty","p","_point","ctx","_ctx","r","hasOwnProperty","_drawnlayers","_leaflet_id","_layers","save","translate","x","y","_tilt","rotate","scale","beginPath","arc","Math","PI","restore","_fillStroke","Ellipse","Path","extend","fill","startAngle","endAngle","initialize","latlng","radii","tilt","setOptions","_latlng","latLng","_mRadiusX","_mRadiusY","setRadius","redraw","getRadius","point","setTilt","getBounds","lngRadius","_getLngRadius","latRadius","_getLatRadius","LatLngBounds","lat","lng","setLatLng","fire","getLatLng","setStyle","_project","pointLeft","_map","latLngToLayerPoint","pointBelow","abs","_centerPointToEndPoint","_updateBounds","sin","cos","sinSquare","cosSquare","aSquare","bSquare","halfWidth","sqrt","halfHeight","w","_clickTolerance","_pxBounds","Bounds","subtract","_update","_updatePath","_renderer","crs","infinite","c","theta2","theta1","delta","_bounds","intersects","_containsPoint","dx","dy","sumA","sumB","weight","ellipse","proto_initIcon","proto_setPos","oldIE","Marker","_initIcon","_setPos","DomUtil","TRANSFORM","addInitHook","iconAnchor","icon","rotationOrigin","rotationAngle","_applyRotation","pos","_icon","setRotationAngle","angle","setRotationOrigin","origin","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","a","o","defineProperty","enumerable","globalThis","Function","nc","ControlManager","pl3xmap","_pl3xmap","sidebarControl","_sidebarControl","control","addTo","blockInfoControl","_blockInfoControl","coordsControl","_coordsControl","linkControl","_linkControl","Player","uuid","displayName","world","position","_name","_uuid","_displayName","_world","_position","createSVGIcon","template","innerHTML","getJSON","fetch","headers","then","res","ok","json","getUrlParam","query","def","URLSearchParams","search","toCenteredLatLng","toLatLng","z","pixelsToMeters","toLatLngBounds","point1","point2","toPoint","metersToPixels","num","getScale","Pl3xMap","instance","pow","getMaxZoomOut","isset","getOrCreatePane","pane","getPane","createPane","fireCustomEvent","CustomEvent","navigationKeys","Set","handleKeyboardEvent","elements","newPosition","focus","preventDefault","mouseEvent","MouseEvent","ctrlKey","shiftKey","metaKey","altKey","bubbles","getLangName","prefix","langPalette","pop","charAt","substring","PlayerManager","_players","Map","players","toRemove","delete","player","set","updateFollow","follow","manager","worldManager","getWorld","currentWorld","setWorld","setView","getZoom","_follow","ControlBox","super","BlockInfoControl","_dom","_blockPalette","entries","Number","onAdd","dataset","label","settings","lang","blockInfo","coords","controlManager","zoom","getCurrentZoom","step","regionX","regionZ","fileX","floor","fileZ","tileX","tileZ","blockName","unknown","block","biomeName","biome","getBlockInfo","getBlock","biomePalette","yPos","padEnd","CoordsControl","_x","_z","onEvent","onRemove","round","padStart","_y","LineCap","LineJoin","Direction","LinkControl","_disabled","getUrlFromView","title","link","history","replaceState","center","getCenter","currentRenderer","marker","_key","_marker","Type","Circle","properties","radius","bubblingMouseEvents","interactive","attribution","dom","className","raw","circle","Icon","image","props","iconUrl","retina","iconRetinaUrl","size","iconSize","anchor","shadow","shadowUrl","shadowRetina","shadowRetinaUrl","shadowSize","shadowAnchor","tooltipOffset","tooltip","offset","popupOffset","popup","tooltipAnchor","popupAnchor","iconOptions","setTooltipContent","MultiPolygon","smoothFactor","noClip","createPolys","setLatLngs","static","polys","polygons","polygon","poly","polylines","polyline","line","points","MultiPolyline","createLines","lines","Polygon","createPoly","Polyline","createLine","Rectangle","setBounds","Color","color","_rgb","_hex","_opacity","rgb","hex","opacity","Stroke","enabled","stroke","lineCap","lineJoin","dashArray","dashOffset","_properties","Fill","fillRule","fillColor","fillOpacity","Tooltip","_content","direction","permanent","sticky","Popup","applySize","applyPanning","applyClosing","maxWidth","minWidth","maxHeight","autoPan","autoPanPaddingTopLeft","autoPanPaddingBottomRight","autoPanPadding","keepInView","closeButton","autoClose","closeOnEscapeKey","closeOnClick","MarkerOptions","_stroke","_fill","_tooltip","_popup","MarkerLayer","interval","showControls","defaultHidden","priority","zIndex","_markers","_timestamp","Date","getTime","_label","_updateInterval","_showControls","_defaultHidden","_priority","_zIndex","_pane","_css","setZIndex","String","insertAdjacentHTML","insertCss","updateInterval","timestamp","updateOverride","time","eventSource","EventSource","OPEN","updateMarkers","parseMarker","removeLayer","_timer","unload","clearTimeout","clear","clearLayers","removeFrom","TYPES","bindPopup","bindTooltip","Block","packed","minY","_block","_biome","_yPos","_minY","BlockInfo","_data","getInt","Label","_value","ReversedZoomTileLayer","renderer","format","tileSize","noWrap","minNativeZoom","maxNativeZoom","maxOut","maxZoom","maxIn","zoomOffset","loadBlockInfo","unsetBlockInfo","_getZoomForUrl","_tileZoom","createTile","done","tile","URL","revokeObjectURL","src","_tileOnLoad","_tileOnError","crossOrigin","alt","getTileUrl","blob","reader","FileReader","readAsDataURL","onload","statusText","catch","DoubleTileLayer","_currentLayer","_tileLayer1","createTileLayer","_tileLayer2","switchTileLayer","updateTileLayer","World","_rendererLayers","_markerLayers","_biomePalette","_blockInfo","_loaded","_settings","initSSE","_eventSource","console","debug","ev","messageEvent","markers","load","Promise","resolve","spawn","tileUpdateInterval","ui","renderers","close","_currentRendererLayer","_currentRenderer","loadMarkers","markerLayer","blockinfo","arrayBuffer","getBytes","buffer","setBlockInfo","infoMap","Uint8Array","getRendererLayer","currentRendererLayer","setRenderer","Renderer","tick","resetRenderer","order","markerLayers","background","WorldManager","_worlds","init","worlds","worldSettings","sort","w1","w2","worldName","_currentWorld","resetCoords","xCoord","zCoord","centerOn","attributeDom","attributionControl","getContainer","display","LayersTab","hideSingleBase","sortLayers","sortFunction","layer1","layer2","name1","name2","diff","_button","_skeleton","_container","_list","layers","hidden","initEvents","addOverlay","_initLayout","heading","innerText","tabIndex","_layerControlInputs","_addItem","hasLayers","input","layerId","htmlFor","defaultChecked","hasLayer","_onInputClick","_checkDisabledLayers","expand","collapse","onActivate","button","BaseTab","_id","children","focusTarget","firstElementChild","PlayersTab","_heading","createListItem","removeListItem","checked","from","online","playerManager","max","maxPlayers","backgroundImage","values","b","listItem","WorldsTab","inputs","fieldset","legend","classList","SidebarControl","_tabs","_expanded","_buttons","addTab","tab","toggle","_currentTab","deactivateTab","toggleTab","removeTab","activateTab","moveFocus","onDeactivate","Pl3xMapLeafletMap","transformation","preferCanvas","setPrefix","_initControlPos","_controlContainer","corners","_controlCorners","top","bottom","createCorner","vSide","hSide","_langPalette","_instance","_controlManager","_playerManager","_worldManager","langFile","promise"],"sourceRoot":""}