google-clustr
Version:
Performant Google Maps Point Clustering
8 lines • 154 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../node_modules/lodash.debounce/index.js", "../node_modules/uuid/dist/esm-browser/rng.js", "../node_modules/uuid/dist/esm-browser/regex.js", "../node_modules/uuid/dist/esm-browser/validate.js", "../node_modules/uuid/dist/esm-browser/stringify.js", "../node_modules/uuid/dist/esm-browser/v1.js", "../node_modules/uuid/dist/esm-browser/parse.js", "../node_modules/uuid/dist/esm-browser/v35.js", "../node_modules/uuid/dist/esm-browser/md5.js", "../node_modules/uuid/dist/esm-browser/v3.js", "../node_modules/uuid/dist/esm-browser/v4.js", "../node_modules/uuid/dist/esm-browser/sha1.js", "../node_modules/uuid/dist/esm-browser/v5.js", "../node_modules/uuid/dist/esm-browser/nil.js", "../node_modules/uuid/dist/esm-browser/version.js", "../node_modules/uuid/dist/esm-browser/index.js", "../node_modules/any-base/src/converter.js", "../node_modules/any-base/index.js", "../node_modules/short-uuid/index.js", "../src/lib/markerwithlabel.js", "../src/lib/spider-marker.js", "../node_modules/pubsub-js/src/pubsub.js", "../src/lib/overlay.js", "../src/lib/helpers.js", "../src/lib/convexHull.ts", "../src/lib/point.js", "../src/index.ts"],
"sourcesContent": ["/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n", "// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}", "export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;", "import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;", "import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;", "import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;", "import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}", "/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;", "import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;", "import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;", "// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;", "import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;", "export default '00000000-0000-0000-0000-000000000000';", "import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;", "export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';", "'use strict';\n\n/**\n * Converter\n *\n * @param {string|Array} srcAlphabet\n * @param {string|Array} dstAlphabet\n * @constructor\n */\nfunction Converter(srcAlphabet, dstAlphabet) {\n if (!srcAlphabet || !dstAlphabet || !srcAlphabet.length || !dstAlphabet.length) {\n throw new Error('Bad alphabet');\n }\n this.srcAlphabet = srcAlphabet;\n this.dstAlphabet = dstAlphabet;\n}\n\n/**\n * Convert number from source alphabet to destination alphabet\n *\n * @param {string|Array} number - number represented as a string or array of points\n *\n * @returns {string|Array}\n */\nConverter.prototype.convert = function(number) {\n var i, divide, newlen,\n numberMap = {},\n fromBase = this.srcAlphabet.length,\n toBase = this.dstAlphabet.length,\n length = number.length,\n result = typeof number === 'string' ? '' : [];\n\n if (!this.isValid(number)) {\n throw new Error('Number \"' + number + '\" contains of non-alphabetic digits (' + this.srcAlphabet + ')');\n }\n\n if (this.srcAlphabet === this.dstAlphabet) {\n return number;\n }\n\n for (i = 0; i < length; i++) {\n numberMap[i] = this.srcAlphabet.indexOf(number[i]);\n }\n do {\n divide = 0;\n newlen = 0;\n for (i = 0; i < length; i++) {\n divide = divide * fromBase + numberMap[i];\n if (divide >= toBase) {\n numberMap[newlen++] = parseInt(divide / toBase, 10);\n divide = divide % toBase;\n } else if (newlen > 0) {\n numberMap[newlen++] = 0;\n }\n }\n length = newlen;\n result = this.dstAlphabet.slice(divide, divide + 1).concat(result);\n } while (newlen !== 0);\n\n return result;\n};\n\n/**\n * Valid number with source alphabet\n *\n * @param {number} number\n *\n * @returns {boolean}\n */\nConverter.prototype.isValid = function(number) {\n var i = 0;\n for (; i < number.length; ++i) {\n if (this.srcAlphabet.indexOf(number[i]) === -1) {\n return false;\n }\n }\n return true;\n};\n\nmodule.exports = Converter;", "var Converter = require('./src/converter');\n\n/**\n * Function get source and destination alphabet and return convert function\n *\n * @param {string|Array} srcAlphabet\n * @param {string|Array} dstAlphabet\n *\n * @returns {function(number|Array)}\n */\nfunction anyBase(srcAlphabet, dstAlphabet) {\n var converter = new Converter(srcAlphabet, dstAlphabet);\n /**\n * Convert function\n *\n * @param {string|Array} number\n *\n * @return {string|Array} number\n */\n return function (number) {\n return converter.convert(number);\n }\n};\n\nanyBase.BIN = '01';\nanyBase.OCT = '01234567';\nanyBase.DEC = '0123456789';\nanyBase.HEX = '0123456789abcdef';\n\nmodule.exports = anyBase;", "/**\n * Created by Samuel on 6/4/2016.\n * Simple wrapper functions to produce shorter UUIDs for cookies, maybe everything?\n */\n\nconst { v4: uuidv4 } = require('uuid');\nconst anyBase = require('any-base');\n\nconst flickrBase58 = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';\nconst cookieBase90 = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&'()*+-./:<=>?@[]^_`{|}~\";\n\nconst baseOptions = {\n consistentLength: true,\n};\n\n// A default generator, instantiated only if used.\nlet toFlickr;\n\n/**\n * Takes a UUID, strips the dashes, and translates.\n * @param {string} longId\n * @param {function(string)} translator\n * @param {Object} [paddingParams]\n * @returns {string}\n */\nconst shortenUUID = (longId, translator, paddingParams) => {\n const translated = translator(longId.toLowerCase().replace(/-/g, ''));\n\n if (!paddingParams || !paddingParams.consistentLength) return translated;\n\n return translated.padStart(\n paddingParams.shortIdLength,\n paddingParams.paddingChar,\n );\n};\n\n/**\n * Translate back to hex and turn back into UUID format, with dashes\n * @param {string} shortId\n * @param {function(string)} translator\n * @returns {string}\n */\nconst enlargeUUID = (shortId, translator) => {\n const uu1 = translator(shortId).padStart(32, '0');\n\n // Join the zero padding and the UUID and then slice it up with match\n const m = uu1.match(/(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})/);\n\n // Accumulate the matches and join them.\n return [m[1], m[2], m[3], m[4], m[5]].join('-');\n};\n\n// Calculate length for the shortened ID\nconst getShortIdLength = (alphabetLength) => (\n Math.ceil(Math.log(2 ** 128) / Math.log(alphabetLength)));\n\nmodule.exports = (() => {\n /**\n * @param {string} toAlphabet - Defaults to flickrBase58 if not provided\n * @param {Object} [options]\n *\n * @returns {{new: (function()),\n * uuid: (function()),\n * fromUUID: (function(string)),\n * toUUID: (function(string)),\n * alphabet: (string)}}\n */\n const makeConvertor = (toAlphabet, options) => {\n // Default to Flickr 58\n const useAlphabet = toAlphabet || flickrBase58;\n\n // Default to baseOptions\n const selectedOptions = { ...baseOptions, ...options };\n\n // Check alphabet for duplicate entries\n if ([...new Set(Array.from(useAlphabet))].length !== useAlphabet.length) {\n throw new Error('The provided Alphabet has duplicate characters resulting in unreliable results');\n }\n\n const shortIdLength = getShortIdLength(useAlphabet.length);\n\n // Padding Params\n const paddingParams = {\n shortIdLength,\n consistentLength: selectedOptions.consistentLength,\n paddingChar: useAlphabet[0],\n };\n\n // UUIDs are in hex, so we translate to and from.\n const fromHex = anyBase(anyBase.HEX, useAlphabet);\n const toHex = anyBase(useAlphabet, anyBase.HEX);\n const generate = () => shortenUUID(uuidv4(), fromHex, paddingParams);\n\n const translator = {\n new: generate,\n generate,\n uuid: uuidv4,\n fromUUID: (uuid) => shortenUUID(uuid, fromHex, paddingParams),\n toUUID: (shortUuid) => enlargeUUID(shortUuid, toHex),\n alphabet: useAlphabet,\n maxLength: shortIdLength,\n };\n\n Object.freeze(translator);\n\n return translator;\n };\n\n // Expose the constants for other purposes.\n makeConvertor.constants = {\n flickrBase58,\n cookieBase90,\n };\n\n // Expose the generic v4 UUID generator for convenience\n makeConvertor.uuid = uuidv4;\n\n // Provide a generic generator\n makeConvertor.generate = () => {\n if (!toFlickr) {\n // Generate on first use;\n toFlickr = makeConvertor(flickrBase58).generate;\n }\n return toFlickr();\n };\n\n return makeConvertor;\n})();\n", "/**\n * @name MarkerWithLabel for V3\n * @version 1.1.10 [April 8, 2014]\n * @author Gary Little (inspired by code from Marc Ridey of Google).\n * @copyright Copyright 2012 Gary Little [gary at luxcentral.com]\n * @fileoverview MarkerWithLabel extends the Google Maps JavaScript API V3\n * <code>google.maps.Marker</code> class.\n * <p>\n * MarkerWithLabel allows you to define markers with associated labels. As you would expect,\n * if the marker is draggable, so too will be the label. In addition, a marker with a label\n * responds to all mouse events in the same manner as a regular marker. It also fires mouse\n * events and \"property changed\" events just as a regular marker would. Version 1.1 adds\n * support for the raiseOnDrag feature introduced in API V3.3.\n * <p>\n * If you drag a marker by its label, you can cancel the drag and return the marker to its\n * original position by pressing the <code>Esc</code> key. This doesn't work if you drag the marker\n * itself because this feature is not (yet) supported in the <code>google.maps.Marker</code> class.\n */\n\n/*!\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*jslint browser:true */\n/*global document,google */\n\n/**\n * @param {Function} childCtor Child class.\n * @param {Function} parentCtor Parent class.\n * @private\n */\nfunction inherits(childCtor, parentCtor) {\n /* @constructor */\n function tempCtor() {}\n tempCtor.prototype = parentCtor.prototype;\n childCtor.superClass_ = parentCtor.prototype;\n childCtor.prototype = new tempCtor();\n /* @override */\n childCtor.prototype.constructor = childCtor;\n}\n\n/**\n * This constructor creates a label and associates it with a marker.\n * It is for the private use of the MarkerWithLabel class.\n * @constructor\n * @param {Marker} marker The marker with which the label is to be associated.\n * @param {string} crossURL The URL of the cross image =.\n * @param {string} handCursor The URL of the hand cursor.\n * @private\n */\nfunction MarkerLabel_(id, marker, crossURL, handCursorURL) {\n this.marker_ = marker;\n this.handCursorURL_ = marker.handCursorURL;\n\n this.labelDiv_ = document.createElement('div');\n\n //////////////////////////////////////////////////////////\n // New - ID support\n //////////////////////////////////////////////////////////\n if (typeof id !== 'undefined') this.labelDiv_.id = id;\n\n this.labelDiv_.style.cssText = 'position: absolute; overflow: hidden;';\n\n // Get the DIV for the \"X\" to be displayed when the marker is raised.\n this.crossDiv_ = MarkerLabel_.getSharedCross(crossURL);\n}\n\ninherits(MarkerLabel_, google.maps.OverlayView);\n\n/**\n * Returns the DIV for the cross used when dragging a marker when the\n * raiseOnDrag parameter set to true. One cross is shared with all markers.\n * @param {string} crossURL The URL of the cross image =.\n * @private\n */\nMarkerLabel_.getSharedCross = function (crossURL) {\n var div;\n if (typeof MarkerLabel_.getSharedCross.crossDiv === 'undefined') {\n div = document.createElement('img');\n div.style.cssText = 'position: absolute; z-index: 1000002; display: none;';\n // Hopefully Google never changes the standard \"X\" attributes:\n div.style.marginLeft = '-8px';\n div.style.marginTop = '-9px';\n div.src = crossURL;\n MarkerLabel_.getSharedCross.crossDiv = div;\n }\n return MarkerLabel_.getSharedCross.crossDiv;\n};\n\n/**\n * Adds the DIV representing the label to the DOM. This method is called\n * automatically when the marker's <code>setMap</code> method is called.\n * @private\n */\nMarkerLabel_.prototype.onAdd = function () {\n var me = this;\n var cMouseIsDown = false;\n var cDraggingLabel = false;\n var cSavedZIndex;\n var cLatOffset, cLngOffset;\n var cIgnoreClick;\n var cRaiseEnabled;\n var cStartPosition;\n var cStartCenter;\n // Constants:\n var cRaiseOffset = 20;\n var cDraggingCursor = 'url(' + this.handCursorURL_ + ')';\n\n // Stops all processing of an event.\n //\n var cAbortEvent = function (e) {\n if (e.preventDefault) {\n e.preventDefault();\n }\n e.cancelBubble = true;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n };\n\n var cStopBounce = function () {\n me.marker_.setAnimation(null);\n };\n\n this.getPanes().overlayMouseTarget.appendChild(this.labelDiv_);\n // One cross is shared with all markers, so only add it once:\n if (typeof MarkerLabel_.getSharedCross.processed === 'undefined') {\n this.getPanes().overlayMouseTarget.appendChild(this.crossDiv_);\n MarkerLabel_.getSharedCross.processed = true;\n }\n\n this.listeners_ = [\n google.maps.event.addDomListener(this.labelDiv_, 'mouseover', function (e) {\n if (me.marker_.getDraggable() || me.marker_.getClickable()) {\n this.style.cursor = 'pointer';\n google.maps.event.trigger(me.marker_, 'mouseover', e);\n }\n }),\n google.maps.event.addDomListener(this.labelDiv_, 'mouseout', function (e) {\n if (\n (me.marker_.getDraggable() || me.marker_.getClickable()) &&\n !cDraggingLabel\n ) {\n this.style.cursor = me.marker_.getCursor();\n google.maps.event.trigger(me.marker_, 'mouseout', e);\n }\n }),\n google.maps.event.addDomListener(this.labelDiv_, 'mousedown', function (e) {\n cDraggingLabel = false;\n if (me.marker_.getDraggable()) {\n cMouseIsDown = true;\n this.style.cursor = cDraggingCursor;\n }\n if (me.marker_.getDraggable() || me.marker_.getClickable()) {\n google.maps.event.trigger(me.marker_, 'mousedown', e);\n cAbortEvent(e); // Prevent map pan when starting a drag on a label\n }\n }),\n google.maps.event.addDomListener(document, 'mouseup', function (mEvent) {\n var position;\n if (cMouseIsDown) {\n cMouseIsDown = false;\n me.eventDiv_.style.cursor = 'pointer';\n google.maps.event.trigger(me.marker_, 'mouseup', mEvent);\n }\n if (cDraggingLabel) {\n if (cRaiseEnabled) {\n // Lower the marker & label\n position = me\n .getProjection()\n .fromLatLngToDivPixel(me.marker_.getPosition());\n position.y += cRaiseOffset;\n me.marker_.setPosition(\n me.getProjection().fromDivPixelToLatLng(position)\n );\n // This is not the same bouncing style as when the marker portion is dragged,\n // but it will have to do:\n try {\n // Will fail if running Google Maps API earlier than V3.3\n me.marker_.setAnimation(google.maps.Animation.BOUNCE);\n setTimeout(cStopBounce, 1406);\n } catch (e) {}\n }\n me.crossDiv_.style.display = 'none';\n me.marker_.setZIndex(cSavedZIndex);\n cIgnoreClick = true; // Set flag to ignore the click event reported after a label drag\n cDraggingLabel = false;\n mEvent.latLng = me.marker_.getPosition();\n google.maps.event.trigger(me.marker_, 'dragend', mEvent);\n }\n }),\n google.maps.event.addListener(\n me.marker_.getMap(),\n 'mousemove',\n function (mEvent) {\n var position;\n if (cMouseIsDown) {\n if (cDraggingLabel) {\n // Change the reported location from the mouse position to the marker position:\n mEvent.latLng = new google.maps.LatLng(\n mEvent.latLng.lat() - cLatOffset,\n mEvent.latLng.lng() - cLngOffset\n );\n position = me.getProjection().fromLatLngToDivPixel(mEvent.latLng);\n if (cRaiseEnabled) {\n me.crossDiv_.style.left = position.x + 'px';\n me.crossDiv_.style.top = position.y + 'px';\n me.crossDiv_.style.display = '';\n position.y -= cRaiseOffset;\n }\n me.marker_.setPosition(\n me.getProjection().fromDivPixelToLatLng(position)\n );\n if (cRaiseEnabled) {\n // Don't raise the veil; this hack needed to make MSIE act properly\n me.eventDiv_.style.top = position.y + cRaiseOffset + 'px';\n }\n google.maps.event.trigger(me.marker_, 'drag', mEvent);\n } else {\n // Calculate offsets from the click point to the marker position:\n cLatOffset = mEvent.latLng.lat() - me.marker_.getPosition().lat();\n cLngOffset = mEvent.latLng.lng() - me.marker_.getPosition().lng();\n cSavedZIndex = me.marker_.getZIndex();\n cStartPosition = me.marker_.getPosition();\n cStartCenter = me.marker_.getMap().getCenter();\n cRaiseEnabled = me.marker_.get('raiseOnDrag');\n cDraggingLabel = true;\n me.marker_.setZIndex(1000000); // Moves the marker & label to the foreground during a drag\n mEvent.latLng = me.marker_.getPosition();\n google.maps.event.trigger(me.marker_, 'dragstart', mEvent);\n }\n }\n }\n ),\n google.maps.event.addDomListener(document, 'keydown', function (e) {\n if (cDraggingLabel) {\n if (e.keyCode === 27) {\n // Esc key\n cRaiseEnabled = false;\n me.marker_.setPosition(cStartPosition);\n me.marker_.getMap().setCenter(cStartCenter);\n google.maps.event.trigger(document, 'mouseup', e);\n }\n }\n }),\n google.maps.event.addDomListener(this.labelDiv_, 'click', function (e) {\n if (me.marker_.getDraggable() || me.marker_.getClickable()) {\n if (cIgnoreClick) {\n // Ignore the click reported when a label drag ends\n cIgnoreClick = false;\n } else {\n google.maps.event.trigger(me.marker_, 'click', e);\n cAbortEvent(e); // Prevent click from being passed on to map\n }\n }\n }),\n google.maps.event.addDomListener(this.labelDiv_, 'dblclick', function (e) {\n if (me.marker_.getDraggable() || me.marker_.getClickable()) {\n google.maps.event.trigger(me.marker_, 'dblclick', e);\n cAbortEvent(e); // Prevent map zoom when double-clicking on a label\n }\n }),\n google.maps.event.addListener(this.marker_, 'dragstart', function (mEvent) {\n if (!cDraggingLabel) {\n cRaiseEnabled = this.get('raiseOnDrag');\n }\n }),\n google.maps.event.addListener(this.marker_, 'drag', function (mEvent) {\n if (!cDraggingLabel) {\n if (cRaiseEnabled) {\n me.setPosition(cRaiseOffset);\n // During a drag, the marker's z-index is temporarily set to 1000000 to\n // ensure it appears above all other markers. Also set the label's z-index\n // to 1000000 (plus or minus 1 depending on whether the label is supposed\n // to be above or below the marker).\n me.labelDiv_.style.zIndex =\n 1000000 + (this.get('labelInBackground') ? -1 : +1);\n }\n }\n }),\n google.maps.event.addListener(this.marker_, 'dragend', function (mEvent) {\n if (!cDraggingLabel) {\n if (cRaiseEnabled) {\n me.setPosition(0); // Also restores z-index of label\n }\n }\n }),\n google.maps.event.addListener(\n this.marker_,\n 'position_changed',\n function () {\n me.setPosition();\n }\n ),\n google.maps.event.addListener(this.marker_, 'zindex_changed', function () {\n me.setZIndex();\n }),\n google.maps.event.addListener(this.marker_, 'visible_changed', function () {\n me.setVisible();\n }),\n google.maps.event.addListener(\n this.marker_,\n 'labelvisible_changed',\n function () {\n me.setVisible();\n }\n ),\n google.maps.event.addListener(this.marker_, 'title_changed', function () {\n me.setTitle();\n }),\n google.maps.event.addListener(\n this.marker_,\n 'labelcontent_changed',\n function () {\n me.setContent();\n }\n ),\n google.maps.event.addListener(\n this.marker_,\n 'labelanchor_changed',\n function () {\n me.setAnchor();\n }\n ),\n google.maps.event.addListener(\n this.marker_,\n 'labelclass_changed',\n function () {\n me.setStyles();\n }\n ),\n google.maps.event.addListener(\n this.marker_,\n 'labelstyle_changed',\n function () {\n me.setStyles();\n }\n ),\n ];\n};\n\n/**\n * Removes the DIV for the label from the DOM. It also removes all event handlers.\n * This method is called automatically when the marker's <code>setMap(null)</code>\n * method is called.\n * @private\n */\nMarkerLabel_.prototype.onRemove = function () {\n var i;\n this.labelDiv_.parentNode.removeChild(this.labelDiv_);\n\n // Remove event listeners:\n for (i = 0; i < this.listeners_.length; i++) {\n google.maps.event.removeListener(this.listeners_[i]);\n }\n};\n\n/**\n * Draws the label on the map.\n * @private\n */\nMarkerLabel_.prototype.draw = function () {\n this.setContent();\n this.setTitle();\n this.setStyles();\n this.setDataSet();\n};\n\n/**\n * Sets the content of the label.\n * The content can be plain text or an HTML DOM node.\n * @private\n */\nMarkerLabel_.prototype.setContent = function () {\n var content = this.marker_.get('labelContent');\n if (typeof content.nodeType === 'undefined') {\n this.labelDiv_.innerHTML = content;\n } else {\n this.labelDiv_.innerHTML = ''; // Remove current content\n this.labelDiv_.appendChild(content);\n }\n};\n\nMarkerLabel_.prototype.setDataSet = function () {\n const data = this.marker_.get('data');\n data.forEach((o, i) => {\n this.labelDiv_.dataset[Object.keys(o)[0]] = o[Object.keys(o)[0]];\n });\n};\n\n/**\n * Sets the content of the tool tip for the label. It is\n * always set to be the same as for the marker itself.\n * @private\n */\nMarkerLabel_.prototype.setTitle = function () {\n this.labelDiv_.title = this.marker_.getTitle() || '';\n};\n\n/**\n * Sets the style of the label by setting the style sheet and applying\n * other specific styles requested.\n * @private\n */\nMarkerLabel_.prototype.setStyles = function () {\n var i, labelStyle;\n\n // Apply style values from the style sheet defined in the labelClass parameter:\n this.labelDiv_.className = this.marker_.get('labelClass');\n\n // Clear existing inline style values:\n this.labelDiv_.style.cssText = '';\n // Apply style values defined in the labelStyle parameter:\n labelStyle = this.marker_.get('labelStyle');\n for (i in labelStyle) {\n if (labelStyle.hasOwnProperty(i)) {\n this.labelDiv_.style[i] = labelStyle[i];\n }\n }\n this.setMandatoryStyles();\n};\n\n/**\n * Sets the mandatory styles to the DIV representing the label as well as to the\n * associated event DIV. This includes setting the DIV position, z-index, and visibility.\n * @private\n */\nMarkerLabel_.prototype.setMandatoryStyles = function () {\n this.labelDiv_.style.position = 'absolute';\n this.labelDiv_.style.overflow = 'hidden';\n // Make sure the opacity setting causes the desired effect on MSIE:\n if (\n typeof this.labelDiv_.style.opacity !== 'undefined' &&\n this.labelDiv_.style.opacity !== ''\n ) {\n this.labelDiv_.style.MsFilter =\n '\"progid:DXImageTransform.Microsoft.Alpha(opacity=' +\n this.labelDiv_.style.opacity * 100 +\n ')\"';\n this.labelDiv_.style.filter =\n 'alpha(opacity=' + this.labelDiv_.style.opacity * 100 + ')';\n }\n\n this.setAnchor();\n this.setPosition(); // This also updates z-index, if necessary.\n this.setVisible();\n};\n\n/**\n * Sets the anchor point of the label.\n * @private\n */\nMarkerLabel_.prototype.setAnchor = function () {\n var anchor = this.marker_.get('labelAnchor');\n this.labelDiv_.style.marginLeft = -anchor.x + 'px';\n this.labelDiv_.style.marginTop = -anchor.y + 'px';\n};\n\n/**\n * Sets the position of the label. The z-index is also updated, if necessary.\n * @private\n */\nMarkerLabel_.prototype.setPosition = function (yOffset) {\n var position = this.getProjection().fromLatLngToDivPixel(\n this.marker_.getPosition()\n );\n if (typeof yOffset === 'undefined') {\n yOffset = 0;\n }\n this.labelDiv_.style.left = Math.round(position.x) + 'px';\n this.labelDiv_.style.top = Math.round(position.y - yOffset) + 'px';\n\n this.setZIndex();\n};\n\n/**\n * Sets the z-index of the label. If the marker's z-index property has not been defined, the z-index\n * of the label is set to the vertical coordinate of the label. This is in keeping with the default\n * stacking order for Google Maps: markers to the south are in front of markers to the north.\n * @private\n */\nMarkerLabel_.prototype.setZIndex = function () {\n var zAdjust = this.marker_.get('labelInBackground') ? -1 : +1;\n if (typeof this.marker_.getZIndex() === 'undefined') {\n this.labelDiv_.style.zIndex =\n parseInt(this.labelDiv_.style.top, 10) + zAdjust;\n } else {\n this.labelDiv_.style.zIndex = this.marker_.getZIndex() + zAdjust;\n }\n};\n\n/**\n * Sets the visibility of the label. The label is visible only if the marker itself is\n * visible (i.e., its visible property is true) and the labelVisible property is true.\n * @private\n */\nMarkerLabel_.prototype.setVisible = function () {\n if (this.marker_.get('labelVisible')) {\n this.labelDiv_.style.display = this.marker_.getVisible() ? 'block' : 'none';\n } else {\n this.labelDiv_.style.display = 'none';\n }\n};\n\n/**\n * @name MarkerWithLabelOptions\n * @class This class represents the optional parameter passed to the {@link MarkerWithLabel} constructor.\n * The properties available are the same as for <code>google.maps.Marker</code> with the addition\n * of the properties listed below. To change any of these additional properties after the labeled\n * marker has been created, call <code>google.maps.Marker.set(propertyName, propertyValue)</code>.\n * <p>\n * When any of these properties changes, a property changed event is fired. The names of these\n * events are derived from the name of the property and are of the form <code>propertyname_changed</code>.\n * For example, if the content of the label changes, a <code>labelcontent_changed</code> event\n * is fired.\n * <p>\n * @property {string|Node} [labelContent] The content of the label (plain text or an HTML DOM node).\n * @property {Point} [labelAnchor] By default, a label is drawn with its anchor point at (0,0) so\n * that its top left corner is positioned at the anchor point of the associated marker. Use this\n * property to change the anchor point of the label. For example, to center a 50px-wide label\n * beneath a marker, specify a <code>labelAnchor</code> of <code>google.maps.Point(25, 0)</code>.\n * (Note: x-values increase to the right and y-values increase to the top.)\n * @property {string} [labelClass] The name of the CSS class defining the styles for the label.\n * Note that style values for <code>position</code>, <code>overflow</code>, <code>top</code>,\n * <code>left</code>, <code>zIndex</code>, <code>display</code>, <code>marginLeft</code>, and\n * <code>marginTop</code> are ignored; these styles are for internal use only.\n * @property {Object} [labelStyle] An object literal whose properties define specific CSS\n * style values to be applied to the label. Style values defined here override those that may\n * be defined in the <code>labelClass</code> style sheet. If this property is changed after the\n * label has been created, all previously set styles (except those defined in the style sheet)\n * are removed from the label before the new style values are applied.\n * Note that style values for <code>position</code>, <code>overflow</code>, <code>top</code>,\n * <code>left</code>, <code>zIndex</code>, <code>display</code>, <code>marginLeft</code>, and\n * <code>marginTop</code> are ignored; these styles are for internal use only.\n * @property {boolean} [labelInBackground] A flag indicating whether a label that overlaps its\n * associated marker should appear in the background (i.e., in a plane below the marker).\n * The default is <code>false</code>, which causes the label to appear in the foreground.\n * @property {boolean} [labelVisible] A flag indicating whether the label is to be visible.\n * The default is <code>true</code>. Note that even if <code>labelVisible</code> is\n * <code>true</code>, the label will <i>not</i> be visible unless the associated marker is also\n * visible (i.e., unless the marker's <code>visible</code> property is <code>true</code>).\n * @property {boolean} [raiseOnDrag] A flag indicating whether the label and marker are to be\n * raised when the marker is dragged. The default is <code>true</code>. If a draggable marker is\n * being created and a version of Google Maps API earlier than V3.3 is being used, this property\n * must be set to <code>false</code>.\n * @property {boolean} [optimized] A flag indicating whether rendering is to be optimized for the\n * marker. <b>Important: The optimized rendering technique is not supported by MarkerWithLabel,\n * so the value of this parameter is always forced to <code>false</code>.\n * @property {string} [crossImage=\"http://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png\"]\n * The URL of the cross image to be displayed while dragging a marker.\n * @property {string} [handCursor=\"http://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur\"]\n * The URL of the cursor to be displayed while dragging a marker.\n */\n/**\n * Creates a MarkerWithLabel with the options specified in {@link MarkerWithLabelOptions}.\n * @constructor\n * @param {MarkerWithLabelOptions} [opt_options] The optional parameters.\n */\nfunction MarkerWithLabel(opt_options) {\n opt_options = opt_options || {};\n\n opt_options.labelContent = opt_options.labelContent || '';\n opt_options.labelAnchor =\n opt_options.labelAnchor || new google.maps.Point(0, 0);\n opt_options.labelClass = opt_options.labelClass || 'markerLabels';\n opt_options.labelStyle = opt_options.labelStyle || {};\n opt_options.labelInBackground = opt_options.labelInBackground || false;\n if (typeof opt_options.labelVisible === 'undefined') {\n opt_options.labelVisible = true;\n }\n if (typeof opt_options.raiseOnDrag === 'undefined') {\n opt_options.raiseOnDrag = true;\n }\n if (typeof opt_options.clickable === 'undefined') {\n opt_options.clickable = true;\n }\n if (typeof opt_options.draggable === 'undefined') {\n opt_options.draggable = false;\n }\n if (typeof opt_options.optimized === 'undefined') {\n opt_options.optimized = false;\n }\n opt_options.crossImage =\n opt_options.crossImage ||\n 'http' +\n (document.location.protocol === 'https:' ? 's' : '') +\n '://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png';\n opt_options.handCursor =\n opt_options.handCursor ||\n 'http' +\n (document.location.protocol === 'https:' ? 's' : '') +\n '://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur';\n opt_options.optimized = false; // Optimized rendering is not supported\n\n //////////////////////////////////////////////////////////\n // New\n //////////////////////////////////////////////////////////\n this.label = new MarkerLabel_(\n opt_options.id,\n this,\n opt_options.crossImage,\n opt_options.handCursor\n ); // Bind the label to the marker\n\n // Call the parent constructor. It calls Marker.setValues to initialize, so all\n // the new parameters are conveniently saved and can be accessed with get/set.\n // Marker.set triggers a property changed event (called \"propertyname_changed\")\n // that the marker label listens for in order to react to state changes.\n google.maps.Marker.apply(this, arguments);\n}\n\ninherits(MarkerWithLabel, google.maps.Marker);\n\n/**\n * Overrides the standard Marker setMap function.\n * @param {Map} theMap The map to which the marker is to be added.\n * @private\n */\nMarkerWithLabel.prototype.setMap = function (theMap) {\n // Call the inherited function...\n google.maps.Marker.prototype.setMap.apply(this, arguments);\n\n // ... then deal with the label:\n this.label.setMap(theMap);\n};\n\nmodule.exports = MarkerWithLabel;\n", "/*\n OverlappingMarkerSpiderfier\nhttps://github.com/jawj/OverlappingMarkerSpiderfier\nCopyright (c) 2011 - 2013 George MacKerron\nReleased under the MIT licence: http://opensource.org/licenses/mit-license\nNote: The Google Maps API v3 must be included *before* this code\n*/\nvar y = {}.hasOwnProperty,\n z = [].slice;\nvar OverlappingMarkerSpiderfier = function() {\n function v(b, d) {\n var a, g, e, f;\n this.map = b;\n null == d && (d = {});\n for (a in d) y.call(d, a) && (g = d[a], this[a] = g);\n this.e = new this.constructor.g(this.map);\n this.n();\n this.b = {};\n f = [\"click\", \"zoom_changed\", \"maptypeid_changed\"];\n g = 0;\n for (e = f.length; g < e; g++) a = f[g], q.addListener(this.map, a, function(a) {\n return function() {\n return a.unspiderfy()\n }\n }(this))\n }\n var q, t, u, s, r, c, w, x;\n c = v.prototype;\n x = [v, c];\n s = 0;\n for (r = x.length; s < r; s++) u = x[s], u.VERSION = \"0.3.3\";\n t = google.maps;\n q = t.event;\n r = t.MapTypeId;\n w =\n 2 * Math.PI;\n c.keepSpiderfied = !1;\n c.markersWontHide = !1;\n c.markersWontMove = !1;\n c.nearbyDistance = 20;\n c.circleSpiralSwitchover = 9;\n c.circleFootSeparation = 23;\n c.circleStartAngle = w / 12;\n c.spiralFootSeparation = 26;\n c.spiralLengthStart = 11;\n c.spiralLengthFactor = 4;\n c.spiderfiedZIndex = 1E3;\n c.usualLegZIndex = 10;\n c.highlightedLegZIndex = 20;\n c.event = \"click\";\n c.minZoomLevel = !1;\n c.legWeight = 1.5;\n c.legColors = {\n usual: {},\n highlighted: {}\n };\n s = c.legColors.usual;\n u = c.legColors.highlighted;\n s[r.HYBRID] = s[r.SATELLITE] = \"#fff\";\n u[r.HYBRID] = u[r.SATELLITE] =\n \"#f00\";\n s[r.TERRAIN] = s[r.ROADMAP] = \"#444\";\n u[r.TERRAIN] = u[r.ROADMAP] = \"#f00\";\n c.n = function() {\n this.a = [];\n this.j = []\n };\n c.addMarker = function(b) {\n var d;\n if (null != b._oms) return this;\n b._oms = !0;\n d = [q.addListener(b, this.event, function(a) {\n return function(d) {\n return a.G(b, d)\n }\n }(this))];\n this.markersWontHide || d.push(q.addListener(b, \"visible_changed\", function(a) {\n return function() {\n return a.o(b, !1)\n }\n }(this)));\n this.markersWontMove || d.push(q.addListener(b, \"position_changed\", function(a) {\n return function() {\n return a.o(b, !0)\n }\n }(this)));\n this.j.push(d);\n this.a.push(b);\n return this\n };\n c.o = function(b, d) {\n if (null != b._omsData && (d || !b.getVisible()) && null == this.s && null == this.t) return this.unspiderfy(d ? b : null)\n };\n c.getMarkers = function() {\n return this.a.slice(0)\n };\n c.removeMarker = function(b) {\n var d, a, g, e, f;\n null != b._omsData && this.unspiderfy();\n d = this.m(this.a, b);\n if (0 > d) return this;\n g = this.j.splice(d, 1)[0];\n e = 0;\n for (f = g.length; e < f; e++) a = g[e], q.removeListener(a);\n delete b._oms;\n this.a.splice(d, 1);\n return this\n };\n c.clearMarkers = function() {\n var b, d, a, g, e, f, c, h;\n this.unspiderfy();\n h = this.a;\n b = g = 0;\n for (f = h.length; g < f; b = ++g) {\n a = h[b];\n d = this.j[b];\n e = 0;\n for (c = d.length; e < c; e++) b = d[e], q.removeListener(b);\n delete a._oms\n }\n this.n();\n return this\n };\n c.addListener = function(b, d) {\n var a;\n (null != (a = this.b)[b] ? a[b] : a[b] = []).push(d);\n return this\n };\n c.removeListener = function(b, d) {\n var a;\n a = this.m(this.b[b], d);\n 0 > a || this.b[b].splice(a, 1);\n return this\n };\n c.clearListeners = function(b) {\n this.b[b] = [];\n return this\n };\n c.trigger = function() {\n var b, d, a, g, e, f;\n d = arguments[0];\n b = 2 <= arguments.length ? z.call(arguments, 1) : [];\n d = null != (a =\n this.b[d]) ? a : [];\n f = [];\n g = 0;\n for (e = d.length; g < e; g++) a = d[g], f.push(a.apply(null, b));\n return f\n };\n c.u = function(b, d) {\n var a, g, e, f, c;\n e = this.circleFootSeparation * (2 + b) / w;\n g = w / b;\n c = [];\n for (a = f = 0; 0 <= b ? f < b : f > b; a = 0 <= b ? ++f : --f) a = this.circleStartAngle + a * g, c.push(new t.Point(d.x + e * Math.cos(a), d.y + e * Math.sin(a)));\n return c\n };\n c.v = function(b, d) {\n var a, g, e, f, c;\n e = this.spiralLengthStart;\n a = 0;\n c = [];\n for (g = f = 0; 0 <= b ? f < b : f > b; g = 0 <= b ? ++f : --f) a += this.spiralFootSeparation / e + 5E-4 * g, g = new t.Point(d.x + e * Math.cos(a), d.y + e * Math.sin(a)), e += w * this.spiralLengthFactor /\n a, c.push(g);\n return c\n };\n c.G = function(b, d) {\n var a, g, e, f, p, h, k, n, l, m;\n h = null != b._omsData;\n h && this.keepSpiderfied || (\"mouseover\" === this.event ? (a = this, g = function() {\n return a.unspiderfy()\n }, window.clearTimeout(c.timeout), c.timeout = setTimeout(g, 3E3)) : this.unspiderfy());\n if (h || this.map.getStreetView().getVisible() || \"GoogleEarthAPI\" === this.map.getMapTypeId()) return this.trigger(\"click\", b, d);\n g = [];\n h = [];\n e = this.nearbyDistance;\n k = e * e;\n p = this.c(b.position);\n m = this.a;\n n = 0;\n for (l = m.length; n < l; n++) e = m[n], null != e.map && e.getVisible() &&\n (f = this.c(e.position), this.f(f, p) < k ? g.push({\n B: e,\n p: f\n }) : h.push(e));\n return 1 === g.length ? this.trigger(\"click\", b, d) : this.H(g, h)\n };\n c.markersNearMarker = function(b, d) {\n var a, g, e, f, c, h, k, n, l, m;\n null == d && (d = !1);\n if (null == this.e.getProjection()) throw \"Must wait for 'idle' event on map before calling markersNearMarker\";\n a = this.nearbyDistance;\n c = a * a;\n e = this.c(b.position);\n f = [];\n n = this.a;\n h = 0;\n for (k = n.length; h < k && !(a = n[h], a !== b && null != a.map && a.getVisible() && (g = this.c(null != (l = null != (m = a._omsData) ? m.l : void 0) ? l : a.position),\n this.f(g, e) < c && (f.push(a), d))); h++);\n return f\n };\n c.markersNearAnyOtherMarker = function() {\n var b, d, a, g, e, f, c, h, k, n, l, m;\n if (null == this.e.getProjection()) throw \"Must wait for 'idle' event on map before calling markersNearAnyOtherMarker\";\n f = this.nearbyDistance;\n b = f * f;\n g = this.a;\n f = [];\n l = 0;\n for (a = g.length; l < a; l++) d = g[l], f.push({\n q: this.c(null != (c = null != (k = d._omsData) ? k.l : void 0) ? c : d.position),\n d: !1\n });\n l = this.a;\n d = c = 0;\n for (k = l.length; c < k; d = ++c)\n if (a = l[d], null != a.map && a.getVisible() && (g = f[d], !g.d))\n for (m = this.a, a = h = 0, n = m.length; h <\n n; a = ++h)\n if (e = m[a], a !== d && null != e.map && e.getVisible() && (e = f[a], (!(a < d) || e.d) && this.f(g.q, e.q) < b)) {\n g.d = e.d = !0;\n break\n }\n l = this.a;\n a = [];\n b = c = 0;\n for (k = l.length; c < k; b = ++c) d = l[b], f[b].d && a.push(d);\n return a\n };\n c.A = function(b) {\n return {\n h: function(d) {\n return function() {\n return b._omsData.i.setOptions({\n strokeColor: d.legColors.highlighted[d.map.mapTypeId],\n zIndex: d.highlightedLegZIndex\n })\n }\n }(this),\n k: function(d) {\n return function() {\n return b._omsData.i.setOptions({\n strokeColor: d.legColors.usual[d.map.mapTypeId],\n zIndex: d.usualLegZIndex\n })\n }\n }(this)\n }\n };\n c.H = function(b, d) {\n var a, c, e, f, p, h, k, n, l, m;\n if (this.minZoomLevel && this.map.getZoom() < this.minZoomLevel) return !1;\n this.s = !0;\n m = b.length;\n a = this.D(function() {\n var a, d, c;\n c = [];\n a = 0;\n for (d = b.length; a < d; a++) n = b[a], c.push(n.p);\n return c\n }());\n f = m >= this.circleSpiralSwitchover ? this.v(m, a).reverse() : this.u(m, a);\n a = function() {\n var a, d, m;\n m = [];\n a = 0;\n for (d = f.length; a < d; a++) e = f[a], c = this.F(e), l = this.C(b, function(a) {\n return function(b) {\n return a.f(b.p, e)\n }\n }(this)), k = l.B, h = new t.Polyline({\n map: this.map,\n path: [k.position, c],\n strokeColor: this.legColors.usual[this.map.mapTypeId],\n strokeWeight: this.legWeight,\n zIndex: this.usualLegZIndex\n }), k._omsData = {\n l: k.position,\n i: h\n }, this.legColors.highlighted[this.map.mapTypeId] !== this.legColors.usual[this.map.mapTypeId] && (p = this.A(k), k._omsData.w = {\n h: q.addListener(k, \"mouseover\", p.h),\n k: q.addListener(k, \"mouseout\", p.k)\n }), k.setPosition(c), k.setZIndex(Math.round(this.spiderfiedZIndex + e.y)), m.push(k);\n return m\n }.call(this);\n delete this.s;\n this.r = !0;\n return this.trigger(\"spiderfy\", a, d)\n };\n c.unspiderfy = function(b) {\n var d, a, c, e, f, p, h;\n null == b && (b = null);\n if (null ==\n this.r) return this;\n this.t = !0;\n e = [];\n c = [];\n h = this.a;\n f = 0;\n for (p = h.length; f < p; f++) a = h[f], null != a._omsData ? (a._omsData.i.setMap(null), a !== b && a.setPosition(a._omsData.l), a.setZIndex(null), d = a._omsData.w, null != d && (q.removeListener(d.h), q.removeListener(d.k)), delete a._omsData, e.push(a)) : c.push(a);\n delete this.t;\n delete this.r;\n this.trigger(\"unspiderfy\", e, c);\n return this\n };\n c.f = function(b, d) {\n var a, c;\n a = b.x - d.x;\n c = b.y - d.y;\n return a * a + c * c\n };\n c.D = function(b) {\n var d, a, c, e, f;\n e = a = c = 0;\n for (f = b.length; e < f; e++) d = b[e], a += d.x, c += d.y;\n b = b.length;\n return new t.Point(a / b, c / b)\n };\n c.c = function(b) {\n return this.e.getProjection().fromLatLngToDivPixel(b)\n };\n c.F = function(b) {\n return this.e.getProjection().fromDivPixelToLatLng(b)\n };\n c.C = function(b, d) {\n var a, c, e, f, p, h;\n e = p = 0;\n for (h = b.length; p < h; e = ++p)\n if (f = b[e], f = d(f), \"undefined\" === typeof a || null === a || f < c) c = f, a = e;\n return b.splice(a, 1)[0]\n };\n c.m = function(b, c) {\n var a, g, e, f;\n if (null != b.indexOf) return b.indexOf(c);\n a = e = 0;\n for (f = b.length; e < f; a = ++e)\n if (g = b[a], g === c) return a;\n return -1\n };\n v.g = function(b) {\n return this.setMap(b)\n };\n v.g.prototype = new t.OverlayView;\n v.g.prototype.draw = function() {};\n return v\n}();\n\nmodule.exports = OverlappingMarkerSpiderfier;\n", "/**\n * Copyright (c) 2010,2011,2012,2013,2014 Morgan Roderick http://roderick.dk\n * License: MIT - http://mrgnrdrck.mit-license.org\n *\n * https://github.com/mroderick/PubSubJS\n */\n\n(function (root, factory){\n 'use strict';\n\n var PubSub = {};\n\n if (root.PubSub) {\n PubSub = root.PubSub;\n console.warn(\"PubSub already loaded, using existing version\");\n } else {\n root.PubSub = PubSub;\n factory(PubSub);\n }\n // CommonJS and Node.js module support\n if (typeof exports === 'object'){\n if (module !== undefined && module.exports) {\n exports = module.exports = PubSub; // Node.js specific `module.exports`\n }\n exports.PubSub = PubSub; // CommonJS module 1.1.1 spec\n module.exports = exports = PubSub; // CommonJS\n }\n // AMD support\n /* eslint-disable no-undef */\n else if (typeof define === 'function' && define.amd){\n define(function() { return PubSub; });\n /* eslint-enable no-undef */\n }\n\n}(( typeof window === 'object' && window ) || this, function (PubSub){\n 'use strict';\n\n var messages = {},\n lastUid = -1,\n ALL_SUBSCRIBING_MSG = '*';\n\n function hasKeys(obj){\n var key;\n\n for (key in obj){\n if ( Object.prototype.hasOwnProperty.call(obj, key) ){\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns a function that throws the passed exception, for use as argument for setTimeout\n * @alias throwException\n * @function\n * @param { Object } ex An Error object\n */\n function throwException( ex ){\n return function reThrowException(){\n throw ex;\n };\n }\n\n function callSubscriberWithDelayedExceptions( subscriber, message, data ){\n try {\n subscriber( message, data );\n } catch( ex ){\n setTimeout( throwException( ex ), 0);\n }\n }\n\n function callSubscriberWithImmediateExceptions( subscriber, message, data ){\n subscriber( message, data );\n }\n\n function deliverMessage( originalMessage, matchedMessage, data, immediateExceptions ){\n var subscribers = messages[matchedMessage],\n callSubscriber = immediateExceptions ? callSubscriberWithImmediateExceptions : callSubscriberWithDelayedExceptions,\n s;\n\n if ( !Object.prototype.hasOwnProperty.call( messages, matchedMessage ) ) {\n return;\n }\n\n for (s in subscribers){\n if ( Object.prototype.hasOwnProperty.call(subscribers, s)){\n callSubscriber( subscribers[s], originalMessage, data );\n }\n }\n }\n\n function createDeliveryFunction( message, data, immediateExceptions ){\n return function deliverNamespaced(){\n var topic = String( message ),\n position = topic.lastIndexOf( '.' );\n\n // deliver the message as it is now\n deliverMessage(message, message, data, immediateExceptions);\n\n // trim the hierarchy and deliver message to each level\n while( position !== -1 ){\n topic = topic.substr( 0, position );\n position = topic.lastIndexOf('.');\n deliverMessage( message, topic, data, immediateExceptions );\n }\n\n deliverMessage(message, ALL_SUBSCRIBING_MSG, data, immediateExceptions);\n };\n }\n\n function hasDirectSubscribersFor( message ) {\n var topic = String( message ),\n found = Boolean(Object.prototype.hasOwnProperty.call( messages, topic ) && hasKeys(messages[topic]));\n\n return found;\n }\n\n function messageHasSubscribers( message ){\n var topic = String( message ),\n found = hasDirectSubscribersFor(topic) || hasDirectSubscribersFor(ALL_SUBSCRIBING_MSG),\n position = topic.lastIndexOf( '.' );\n\n while ( !found && position !== -1 ){\n topic = topic.substr( 0, position );\n position = topic.lastIndexOf( '.' );\n found = hasDirectSubscribersFor(topic);\n }\n\n return found;\n }\n\n function publish( message, data, sync, immediateExceptions ){\n message = (typeof message === 'symbol') ? message.toString() : message;\n\n var deliver = createDeliveryFunction( message, data, immediateExceptions ),\n hasSubscribers = messageHasSubscribers( message );\n\n if ( !hasSubscribers ){\n return false;\n }\n\n if ( sync === true ){\n deliver();\n } else {\n setTimeout( deliver, 0 );\n }\n return true;\n }\n\n /**\n * Publishes the message, passing the data to it's subscribers\n * @function\n * @alias publish\n * @param { String } message The message to publish\n * @param {} data The data to pass to subscribers\n * @return { Boolean }\n */\n PubSub.publish = function( message, data ){\n return publish( message, data, false, PubSub.immediateExceptions );\n };\n\n /**\n * Publishes the message synchronously, passing the data to it's subscribers\n * @function\n * @alias publishSync\n * @param { String } message The message to publish\n * @param {} data The data to pass to subscribers\n * @return { Boolean }\n */\n PubSub.publishSync = function( message, data ){\n return publish( message, data, true, PubSub.immediateExceptions );\n };\n\n /**\n * Subscribes the passed function to the passed message. Every returned token is unique and should be stored if you need to unsubscribe\n * @function\n * @alias subscribe\n * @param { String } message The message to subscribe to\n * @param { Function } func The function to call when a new message is published\n * @return { String }\n */\n PubSub.subscribe = function( message, func ){\n if ( typeof func !== 'function'){\n return false;\n }\n\n message = (typeof message === 'symbol') ? message.toString() : message;\n\n // message is not registered yet\n if ( !Object.prototype.hasOwnProperty.call( messages, message ) ){\n messages[message] = {};\n }\n\n // forcing token as String, to allow for future expansions without breaking usage\n // and allow for easy use as key names for the 'messages' object\n var token = 'uid_' + String(++lastUid);\n messages[message][token] = func;\n\n // return token for unsubscribing\n return token;\n };\n\n PubSub.subscribeAll = function( func ){\n return PubSub.subscribe(ALL_SUBSCRIBING_MSG, func);\n };\n\n /**\n * Subscribes the passed function to the passed message once\n * @function\n * @alias subscribeOnce\n * @param { String } message The message to subscribe to\n * @param { Function } func The function to call when a new message is published\n * @return { PubSub }\n */\n PubSub.subscribeOnce = function( message, func ){\n var token = PubSub.subscribe( message, function(){\n // before func apply, unsubscribe message\n PubSub.unsubscribe( token );\n func.apply( this, arguments );\n });\n return PubSub;\n };\n\n /**\n * Clears all subscriptions\n * @function\n * @public\n * @alias clearAllSubscriptions\n */\n PubSub.clearAllSubscriptions = function clearAllSubscriptions(){\n messages = {};\n };\n\n /**\n * Clear subscriptions by the topic\n * @function\n * @public\n * @alias clearAllSubscriptions\n * @return { int }\n */\n PubSub.clearSubscriptions = function clearSubscriptions(topic){\n var m;\n for (m in messages){\n if (Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0){\n delete messages[m];\n }\n }\n };\n\n /**\n Count subscriptions by the topic\n * @function\n * @public\n * @alias countSubscriptions\n * @return { Array }\n */\n PubSub.countSubscriptions = function countSubscriptions(topic){\n var m;\n // eslint-disable-next-line no-unused-vars\n var token;\n var count = 0;\n for (m in messages) {\n if (Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0) {\n for (token in messages[m]) {\n count++;\n }\n break;\n }\n }\n return count;\n };\n\n\n /**\n Gets subscriptions by the topic\n * @function\n * @public\n * @alias getSubscriptions\n */\n PubSub.getSubscriptions = function getSubscriptions(topic){\n var m;\n var list = [];\n for (m in messages){\n if (Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0){\n list.push(m);\n }\n }\n return list;\n };\n\n /**\n * Removes subscriptions\n *\n * - When passed a token, removes a specific subscription.\n *\n\t * - When passed a function, removes all subscriptions for that function\n *\n\t * - When passed a topic, removes all subscriptions for that topic (hierarchy)\n * @function\n * @public\n * @alias subscribeOnce\n * @param { String | Function } value A token, function or topic to unsubscribe from\n * @example // Unsubscribing with a token\n * var token = PubSub.subscribe('mytopic', myFunc);\n * PubSub.unsubscribe(token);\n * @example // Unsubscribing with a function\n * PubSub.unsubscribe(myFunc);\n * @example // Unsubscribing from a topic\n * PubSub.unsubscribe('mytopic');\n */\n PubSub.unsubscribe = function(value){\n var descendantTopicExists = function(topic) {\n var m;\n for ( m in messages ){\n if ( Object.prototype.hasOwnProperty.call(messages, m) && m.indexOf(topic) === 0 ){\n // a descendant of the topic exists:\n return true;\n }\n }\n\n return false;\n },\n isTopic = typeof value === 'string' && ( Object.prototype.hasOwnProperty.call(messages, value) || descendantTopicExists(value) ),\n isToken = !isTopic && typeof value === 'string',\n isFunction = typeof value === 'function',\n result = false,\n m, message, t;\n\n if (isTopic){\n PubSub.clearSubscriptions(value);\n return;\n }\n\n for ( m in messages ){\n if ( Object.prototype.hasOwnProperty.call( messages, m ) ){\n message = messages[m];\n\n if ( isToken && message[value] ){\n delete message[value];\n result = value;\n // tokens are unique, so we can just stop here\n break;\n }\n\n if (isFunction) {\n for ( t in message ){\n if (Object.prototype.hasOwnProperty.call(message, t) && message[t] === value){\n delete message[t];\n result = true;\n }\n }\n }\n }\n }\n\n return result;\n };\n}));\n", "class OverlayContainer extends google.maps.OverlayView {\n constructor(map) {\n super();\n this.map = map;\n }\n\n onRemove() {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n\n onAdd() {\n this.div = document.createElement('div');\n this.div.style.position = 'absolute';\n this.div.id = 'GoogleClustrOverlay';\n const panes = this.getPanes();\n panes.overlayImage.appendChild(this.div);\n }\n\n draw() {\n const overlayProjection = this.getProjection();\n const sw = overlayProjection.fromLatLngToDivPixel(\n this.map.getBounds().getSouthWest()\n );\n const ne = overlayProjection.fromLatLngToDivPixel(\n this.map.getBounds().getNorthEast()\n );\n this.div.style.left = `${sw.x}px`;\n this.div.style.top = `${ne.y}px`;\n }\n}\n\nexport default OverlayContainer;\n", "export class Helpers {\n constructor() {}\n\n clone(o) {\n const n = Array.isArray(o) ? [] : {};\n for (const i in o) {\n n[i] = typeof o[i] === 'object' ? clone(o[i]) : o[i];\n }\n return n;\n }\n\n returnClusterClassObject(length) {\n let classSize, offset;\n if (length >= 3) {\n classSize = 'large';\n offset = 25;\n } else if (length === 2) {\n classSize = 'medium';\n offset = 20;\n } else {\n classSize = 'small';\n offset = 15;\n }\n\n return {\n classSize: classSize,\n offSet: offset,\n };\n }\n\n returnMapProjections(map) {\n const bounds = new google.maps.LatLngBounds(),\n projection = map.getProjection();\n\n return {\n bounds: bounds,\n projection: projection,\n topRight: projection.fromLatLngToPoint(map.getBounds().getNorthEast()),\n bottomLeft: projection.fromLatLngToPoint(map.getBounds().getSouthWest()),\n scale: Math.pow(2, map.getZoom()),\n };\n }\n\n returnPointsRaw(map, collection) {\n // Projection variables.\n const mapProjections = this.returnMapProjections(map);\n\n this.pointsRawLatLng = [];\n\n return collection.map(function (o, i) {\n // Create our point.\n const point = mapProjections.projection.fromLatLngToPoint(\n new google.maps.LatLng(o.lat, o.lng)\n );\n\n // Get the x/y based on the scale.\n const x = (point.x - mapProjections.bottomLeft.x) * mapProjections.scale;\n const y = (point.y - mapProjections.topRight.y) * mapProjections.scale;\n\n return [x, y, i];\n });\n }\n\n getCenterPoints(quadtree, mapContainer, clusterRange) {\n const mapContainerElement = document.getElementById(mapContainer);\n const mapWidth = mapContainerElement.offsetWidth;\n const mapHeight = mapContainerElement.offsetHeight;\n const clusterPoints = [];\n\n for (let x = 0; x <= mapWidth; x += clusterRange) {\n for (let y = 0; y <= mapHeight; y += clusterRange) {\n const searched = this.searchQuadTree(\n quadtree,\n x,\n y,\n x + clusterRange,\n y + clusterRange\n );\n const centerPoint = searched.reduce(\n (prev, current) => [prev[0] + current[0], prev[1] + current[1]],\n [0, 0]\n );\n const avgX = centerPoint[0] / searched.length;\n const avgY = centerPoint[1] / searched.length;\n if (avgX && avgY) {\n clusterPoints.push([avgX, avgY, searched]);\n }\n }\n }\n\n return clusterPoints;\n }\n\n searchQuadTree(quadtree, x0, y0, x3, y3) {\n const validData = [];\n quadtree.visit((node, x1, y1, x2, y2) => {\n const point = node.point;\n if (point) {\n const isSelected =\n point[0] >= x0 && point[0] < x3 && point[1] >= y0 && point[1] < y3;\n if (isSelected) {\n validData.push(point);\n }\n }\n return x1 >= x3 || y1 >= y3 || x2 < x0 || y2 < y0;\n });\n return validData;\n }\n\n async getScript(source, callback) {\n const script = document.createElement('script');\n script.async = true;\n script.onload = () => {\n if (callback) setTimeout(callback, 0);\n };\n script.src = source;\n document.head.appendChild(script);\n }\n}\n", "type Point = { x: number; y: number };\n\nfunction convexHull(points: Point[]): Point[] {\n points.sort((a, b) => (a.x !== b.x ? a.x - b.x : a.y - b.y));\n\n const n = points.length;\n const hull: Point[] = [];\n\n for (let i = 0; i < 2 * n; i++) {\n const j = i < n ? i : 2 * n - 1 - i;\n while (\n hull.length >= 2 &&\n removeMiddle(hull[hull.length - 2], hull[hull.length - 1], points[j])\n ) {\n hull.pop();\n }\n hull.push(points[j]);\n }\n\n hull.pop();\n return hull;\n}\n\nfunction removeMiddle(a: Point, b: Point, c: Point): boolean {\n const cross = (a.x - b.x) * (c.y - b.y) - (a.y - b.y) * (c.x - b.x);\n const dot = (a.x - b.x) * (c.x - b.x) + (a.y - b.y) * (c.y - b.y);\n return cross < 0 || (cross === 0 && dot <= 0);\n}\n\nexport { convexHull };\n", "import debounce from 'lodash.debounce';\nimport uuid from 'short-uuid';\nimport MarkerWithLabel from './markerwithlabel';\nimport OverlappingMarkerSpiderfier from './spider-marker';\n\nexport class Point {\n constructor(map, collection) {\n this.map = map;\n this.markers = [];\n this.markerListeners = [];\n this.collection = collection;\n this.oms = new OverlappingMarkerSpiderfier(this.map, {\n markersWontMove: true,\n markersWontHide: true,\n nearbyDistance: 10,\n keepSpiderfied: true,\n legWeight: 3,\n usualLegZIndex: 25000,\n });\n }\n\n print() {\n this.collection.forEach((o, i) => {\n const lat = o.lat || o.location.latitude;\n const lng = o.lng || o.location.longitude;\n const m = new MarkerWithLabel({\n id: `marker-${uuid.generate()}`,\n position: new google.maps.LatLng(lat, lng),\n map: self.map,\n icon: {\n path: google.maps.SymbolPath.CIRCLE,\n scale: 0,\n },\n draggable: false,\n labelAnchor: new google.maps.Point(10, 10),\n labelClass: 'marker-point',\n data: o.dataset,\n });\n\n this.markers.push(m);\n this.oms.addMarker(m);\n });\n\n this.setOmsEvents();\n this.setHoverEvents(false);\n }\n\n publishEvent = debounce(\n (eventStr, data) => {\n GcPs.publish(eventStr, data);\n },\n 250,\n {\n leading: true,\n trailing: false,\n }\n );\n\n setOmsEvents() {\n const self = this;\n\n this.oms.addListener('spiderfy', function (markers) {\n self.publishEvent('spiderfy', markers);\n self.removeUniversalPointHoverState();\n console.log(self.markers.length);\n self.markers.forEach(function (marker) {\n marker.setOptions({\n zIndex: 1000,\n labelClass: marker.labelClass + ' fadePins',\n });\n });\n markers.forEach(function (marker) {\n self.removeListeners();\n self.setHoverEvents(true);\n marker.setOptions({\n zIndex: 2000,\n labelClass: marker.labelClass.replace(' fadePins', ''),\n });\n });\n });\n\n this.oms.addListener('unspiderfy', function (markers, event) {\n self.publishEvent('unspiderfy', markers);\n self.removeUniversalPointHoverState();\n\n self.markers.forEach(function (marker) {\n marker.setOptions({\n zIndex: 1000,\n labelClass: marker.labelClass.replace(' fadePins', ''),\n });\n });\n self.removeListeners();\n self.setHoverEvents(false);\n });\n }\n\n setHoverEvents = debounce((ignoreZindex = false) => {\n const self = this;\n this.setClickEvents();\n this.markers.forEach(function (marker) {\n let mouseOverListener = marker.addListener(\n 'mouseover',\n function ({ target }) {\n GcPs.publish('hover', target);\n marker.setOptions({\n zIndex: 10000,\n labelClass: this.labelClass + ' PointHoverState',\n });\n\n if (!ignoreZindex) {\n this.setZIndex(5000);\n }\n }\n );\n\n let mouseOutListener = marker.addListener('mouseout', function () {\n marker.setOptions({\n zIndex: 100,\n labelClass: this.labelClass.replace(' PointHoverState', ''),\n });\n\n if (!ignoreZindex) {\n this.setZIndex(1000);\n }\n });\n self.markerListeners.push(mouseOverListener);\n self.markerListeners.push(mouseOutListener);\n });\n }, 250);\n\n setClickEvents = debounce(() => {\n const self = this;\n this.markers.forEach(function (marker) {\n let mouseClickListener = marker.addListener(\n 'click',\n function ({ target }) {\n GcPs.publish('click', target);\n }\n );\n self.markerListeners.push(mouseClickListener);\n });\n }, 250);\n\n removeUniversalPointHoverState() {\n this.markers.forEach((o, i) => {\n o.setOptions({\n zIndex: 100,\n labelClass: 'marker-point',\n });\n });\n }\n\n // Remove listeners.\n removeListeners() {\n for (let i = 0; i < this.markerListeners.length; i++) {\n google.maps.event.removeListener(this.markerListeners[i]);\n }\n this.markerListeners = [];\n }\n\n // Remove method to remove everything.\n remove() {\n this.removeListeners();\n for (var i = 0; i < this.markers.length; i++) {\n this.markers[i].setMap(null);\n }\n }\n}\n", "import './scss/pointCluster.scss';\nimport {\n MapOptions,\n CollectionObject,\n MapProjections,\n PointObject,\n} from './interfaces/mapOptions';\nimport Overlay from './lib/overlay';\nimport { Helpers } from './lib/helpers';\nimport { convexHull } from './lib/convexHull';\nimport { Point } from './lib/point';\nimport GcPs from 'pubsub-js';\n\ndeclare var google: any;\ndeclare global {\n interface Window {\n d3: any;\n example: string;\n GcPs: PubSubJS.Base;\n }\n}\n\nconst helpers = new Helpers();\nwindow.GcPs = GcPs;\n\nexport class GoogleClustr {\n map: any;\n collection!: CollectionObject;\n mapContainer: string = 'map';\n clusterRange: number = 200;\n threshold: number = 200;\n clusterRgba: string = '34, 34, 34, 1';\n clusterBorder: string = '5px solid #ccc';\n clusterFontColor: string = '#FBBDC7';\n polygonStrokeColor: string = '#222';\n polygonStrokeOpacity: string | number = '0.5';\n polygonStrokeWeight: string | number = '4';\n polygonFillColor: string = '#222';\n polygonFillOpacity: string | number = '0.3';\n overlay: any;\n mapContainerElem!: HTMLElement;\n points: any;\n polygon: any;\n helpers: typeof Helpers;\n\n constructor(options: MapOptions) {\n helpers.getScript('https://d3js.org/d3.v3.min.js');\n for (let key in options) {\n this[key] = options[key];\n }\n\n this.createOverlay();\n this.setMapEvents();\n }\n\n setMapEvents() {\n google.maps.event.addListener(this.map, 'idle', () => {\n if (this.collection) {\n this.createOverlay();\n this.removePolygon();\n this.removeElements();\n this.print();\n }\n });\n google.maps.event.addListener(this.map, 'dragstart', () => {\n this.removePolygon();\n this.removeElements();\n });\n google.maps.event.addListener(this.map, 'zoom_changed', () => {\n this.removePolygon();\n this.removeElements();\n });\n }\n\n setCollection(collection: CollectionObject) {\n this.collection = collection;\n const d3Int = setInterval(() => {\n if (window.d3) {\n clearInterval(d3Int);\n this.print();\n }\n }, 10);\n }\n\n createOverlay() {\n if (this.overlay) {\n this.overlay.setMap(null);\n }\n this.overlay = new Overlay(this.map);\n this.overlay.setMap(this.map);\n }\n\n print() {\n const pointsRaw = helpers.returnPointsRaw(this.map, this.collection);\n const quadtree = window.d3.geom.quadtree()(pointsRaw);\n const centerPoints = helpers.getCenterPoints(\n quadtree,\n this.mapContainer,\n this.clusterRange\n );\n\n this.points?.remove();\n\n this.waitForMapContainer((mapContainerElem) => {\n this.paint(centerPoints);\n });\n }\n\n waitForMapContainer(callback: (mapContainerElem: HTMLElement) => void) {\n this.mapContainerElem = document.querySelector(\n '#GoogleClustrOverlay'\n ) as HTMLElement;\n if (this.mapContainerElem) {\n callback(this.mapContainerElem);\n } else {\n setTimeout(() => this.waitForMapContainer(callback), 10);\n }\n }\n\n removeElements() {\n var elements = document.getElementsByClassName('point-cluster');\n while (elements.length > 0) {\n const element = elements[0] as HTMLElement;\n element?.parentNode?.removeChild(elements[0]);\n }\n }\n\n paint(centerPoints: number[]) {\n const pointsInBounds = this.checkIfLatLngInBounds();\n\n if (pointsInBounds.length <= this.threshold) {\n this.removeOverlay();\n this.points = new Point(this.map, pointsInBounds);\n this.points.print();\n this.publishData(pointsInBounds.length, pointsInBounds);\n } else {\n this.paintClustersToCanvas(centerPoints);\n this.publishData(pointsInBounds.length);\n }\n }\n\n removeOverlay() {\n this.overlay.setMap(null);\n }\n\n publishData(count: number, show?: any[]) {\n GcPs.publish('count', count);\n if (show) {\n GcPs.publish('show', show);\n }\n }\n\n paintClustersToCanvas(points: any[]) {\n const fragment = document.createDocumentFragment();\n\n points.forEach((point, i) => {\n const clusterCount = point[2].length;\n const clusterLength = clusterCount.toString().length;\n\n const div = document.createElement('div');\n div.className = `point-cluster ${\n helpers.returnClusterClassObject(clusterLength).classSize\n }`;\n div.style.backgroundColor = `rgba(${this.clusterRgba})`;\n div.style.color = this.clusterFontColor;\n div.dataset.positionid = i.toString();\n\n const latLngPointerArray = point[2].map((p) => p[2]);\n const polygonCoords = latLngPointerArray.map((idx) => {\n const pointer = this.collection[idx];\n return new google.maps.LatLng(pointer.lat, pointer.lng);\n });\n\n const mapProjections = helpers.returnMapProjections(this.map);\n polygonCoords.forEach((coord) => {\n mapProjections.bounds.extend(coord);\n });\n\n const centerPoint = mapProjections.projection.fromLatLngToPoint(\n mapProjections.bounds.getCenter()\n );\n\n const x =\n (centerPoint.x - mapProjections.bottomLeft.x) * mapProjections.scale;\n const y =\n (centerPoint.y - mapProjections.topRight.y) * mapProjections.scale;\n\n div.style.left = `${\n x - helpers.returnClusterClassObject(clusterLength).offSet\n }px`;\n div.style.top = `${\n y - helpers.returnClusterClassObject(clusterLength).offSet\n }px`;\n div.dataset.latlngids = latLngPointerArray.join(',');\n div.innerHTML = clusterCount.toString();\n\n fragment.appendChild(div);\n this.setClusterEvents(div);\n });\n\n this.mapContainerElem.appendChild(fragment);\n }\n\n setClusterEvents(el: HTMLElement) {\n el.onmouseover = () => {\n this.showPolygon(el, this.collection, this.map);\n };\n el.onmouseout = () => {\n this.removePolygon();\n };\n el.onclick = () => {\n this.zoomToFit(el);\n };\n }\n\n zoomToFit(el: HTMLElement) {\n const collectionIds = el?.dataset?.latlngids?.split(',');\n if (!collectionIds) return;\n\n const latlngs = collectionIds.map((id) => {\n const pointer = this.collection[parseInt(id)];\n return new google.maps.LatLng(pointer.lat, pointer.lng);\n });\n\n const bounds = new google.maps.LatLngBounds();\n latlngs.forEach((latlng) => bounds.extend(latlng));\n\n const center = bounds.getCenter();\n const zoom = this.getBoundsZoomLevel(bounds);\n\n requestAnimationFrame(() => {\n this.map.setCenter(center);\n this.map.setZoom(zoom);\n });\n }\n\n getBoundsZoomLevel(bounds: any) {\n const WORLD_DIM = { height: 256, width: 256 };\n const ZOOM_MAX = 22;\n\n const mapEl = document.querySelector(\n `#${this.mapContainer}`\n ) as HTMLElement;\n const mapDim = { height: mapEl.clientHeight, width: mapEl.clientWidth };\n\n function latRad(lat: number) {\n const sin = Math.sin((lat * Math.PI) / 180);\n const radX2 = Math.log((1 + sin) / (1 - sin)) / 2;\n return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;\n }\n\n function zoom(mapPx: number, worldPx: number, fraction: number) {\n return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);\n }\n\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n\n const latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI;\n\n const lngDiff = ne.lng() - sw.lng();\n const lngFraction = (lngDiff < 0 ? lngDiff + 360 : lngDiff) / 360;\n\n const latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);\n const lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);\n\n return Math.min(latZoom, lngZoom, ZOOM_MAX);\n }\n\n checkIfLatLngInBounds() {\n const collection = this.collection.filter((item) => {\n const lat = item.lat || item.location.latitude;\n const lng = item.lng || item.location.longitude;\n const latLng = new google.maps.LatLng(lat, lng);\n return this.map.getBounds().contains(latLng);\n });\n\n return collection;\n }\n\n showPolygon(el: HTMLElement, collection: CollectionObject, map: any) {\n const collectionIds = (el?.dataset?.latlngids?.split(',') || []).concat(\n el?.dataset?.latlngids?.split(',')[0] as any\n );\n const points = collectionIds.map((id) => ({\n x: collection[id].lat,\n y: collection[id].lng,\n }));\n const convexHullPoints = convexHull(points);\n const googleMapPoints = convexHullPoints.map((item) => ({\n lat: item.x,\n lng: item.y,\n }));\n\n this.polygon = new google.maps.Polygon({\n paths: googleMapPoints,\n strokeColor: this.polygonStrokeColor,\n strokeOpacity: this.polygonStrokeOpacity,\n strokeWeight: this.polygonStrokeWeight,\n fillColor: this.polygonFillColor,\n fillOpacity: this.polygonFillOpacity,\n });\n\n this.polygon.setMap(map);\n }\n\n removePolygon() {\n if (this.polygon) {\n this.polygon.setMap(null);\n }\n }\n}\n"],
"mappings": "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",
"names": []
}