{"version":3,"file":"bundle.js","sources":["../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../node_modules/@babel/runtime/helpers/esm/construct.js","../../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../../node_modules/@babel/runtime/helpers/esm/get.js","../../node_modules/svelte/internal/index.mjs","../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/@babel/runtime/regenerator/index.js","../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../node_modules/d3-dsv/src/dsv.js","../../node_modules/d3-dsv/src/csv.js","../../src/utils.js","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../node_modules/svelte-select/src/Item.svelte","../../node_modules/svelte-select/src/List.svelte","../../node_modules/svelte-select/src/utils/isOutOfViewport.js","../../node_modules/svelte-select/src/Selection.svelte","../../node_modules/svelte-select/src/MultiSelection.svelte","../../node_modules/svelte-select/src/VirtualList.svelte","../../node_modules/svelte-select/src/ClearIcon.svelte","../../node_modules/svelte-select/src/Select.svelte","../../node_modules/svelte-select/src/utils/debounce.js","../../src/dropdown/Select.svelte","../../node_modules/archieml/archieml.js","../../node_modules/whatwg-fetch/fetch.js","../../node_modules/svelte/store/index.mjs","../../node_modules/layercake/src/utils/makeAccessor.js","../../node_modules/layercake/src/utils/canBeZero.js","../../node_modules/layercake/src/utils/filterObject.js","../../node_modules/layercake/src/utils/partialDomain.js","../../node_modules/layercake/src/helpers/calcDomain.js","../../node_modules/layercake/node_modules/d3-array/src/ascending.js","../../node_modules/layercake/node_modules/d3-array/src/bisector.js","../../node_modules/layercake/node_modules/d3-array/src/bisect.js","../../node_modules/layercake/node_modules/d3-array/src/number.js","../../node_modules/layercake/node_modules/d3-array/src/ticks.js","../../node_modules/layercake/node_modules/d3-scale/src/init.js","../../node_modules/layercake/node_modules/d3-color/src/define.js","../../node_modules/layercake/node_modules/d3-color/src/color.js","../../node_modules/layercake/node_modules/d3-interpolate/src/constant.js","../../node_modules/layercake/node_modules/d3-interpolate/src/color.js","../../node_modules/layercake/node_modules/d3-interpolate/src/rgb.js","../../node_modules/layercake/node_modules/d3-interpolate/src/numberArray.js","../../node_modules/layercake/node_modules/d3-interpolate/src/array.js","../../node_modules/layercake/node_modules/d3-interpolate/src/date.js","../../node_modules/layercake/node_modules/d3-interpolate/src/number.js","../../node_modules/layercake/node_modules/d3-interpolate/src/object.js","../../node_modules/layercake/node_modules/d3-interpolate/src/string.js","../../node_modules/layercake/node_modules/d3-interpolate/src/value.js","../../node_modules/layercake/node_modules/d3-interpolate/src/round.js","../../node_modules/layercake/node_modules/d3-scale/src/number.js","../../node_modules/layercake/node_modules/d3-scale/src/continuous.js","../../node_modules/layercake/node_modules/d3-scale/src/constant.js","../../node_modules/layercake/node_modules/d3-format/src/formatDecimal.js","../../node_modules/layercake/node_modules/d3-format/src/exponent.js","../../node_modules/layercake/node_modules/d3-format/src/formatSpecifier.js","../../node_modules/layercake/node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/layercake/node_modules/d3-format/src/formatRounded.js","../../node_modules/layercake/node_modules/d3-format/src/formatTypes.js","../../node_modules/layercake/node_modules/d3-format/src/identity.js","../../node_modules/layercake/node_modules/d3-format/src/locale.js","../../node_modules/layercake/node_modules/d3-format/src/defaultLocale.js","../../node_modules/layercake/node_modules/d3-format/src/formatGroup.js","../../node_modules/layercake/node_modules/d3-format/src/formatNumerals.js","../../node_modules/layercake/node_modules/d3-format/src/formatTrim.js","../../node_modules/layercake/node_modules/d3-scale/src/tickFormat.js","../../node_modules/layercake/node_modules/d3-format/src/precisionPrefix.js","../../node_modules/layercake/node_modules/d3-format/src/precisionRound.js","../../node_modules/layercake/node_modules/d3-format/src/precisionFixed.js","../../node_modules/layercake/node_modules/d3-scale/src/linear.js","../../node_modules/layercake/node_modules/d3-scale/src/pow.js","../../node_modules/layercake/src/settings/defaultScales.js","../../node_modules/layercake/src/utils/identity.js","../../node_modules/layercake/src/helpers/getPadFunctions.js","../../node_modules/layercake/src/utils/padScale.js","../../node_modules/layercake/src/helpers/findScaleType.js","../../node_modules/layercake/src/helpers/createScale.js","../../node_modules/layercake/src/settings/getDefaultRange.js","../../node_modules/layercake/src/helpers/createGetter.js","../../node_modules/layercake/src/helpers/getRange.js","../../node_modules/layercake/src/settings/defaultReverses.js","../../node_modules/layercake/src/LayerCake.svelte","../../node_modules/layercake/src/lib/calcExtents.js","../../node_modules/layercake/src/layouts/Svg.svelte","../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/number.js","../../node_modules/internmap/src/index.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/ordinal.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-scale/src/symlog.js","../../node_modules/svelte/easing/index.mjs","../../node_modules/svelte/motion/index.mjs","../../src/@onsvisual/svelte-charts/src/js/accurate-beeswarm.js","../../src/@onsvisual/svelte-charts/src/charts/shared/SetCoords.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/Line.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/Area.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/AxisX.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/AxisY.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/Legend.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/Title.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/Footer.svelte","../../src/@onsvisual/svelte-charts/src/charts/shared/Labels.svelte","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-path/src/path.js","../../node_modules/d3-fetch/src/text.js","../../node_modules/d3-fetch/src/dsv.js","../../node_modules/d3-quadtree/src/add.js","../../node_modules/d3-quadtree/src/quad.js","../../node_modules/d3-quadtree/src/x.js","../../node_modules/d3-quadtree/src/y.js","../../node_modules/d3-quadtree/src/quadtree.js","../../node_modules/d3-force/src/constant.js","../../node_modules/d3-force/src/jiggle.js","../../node_modules/d3-force/src/collide.js","../../node_modules/d3-quadtree/src/cover.js","../../node_modules/d3-quadtree/src/data.js","../../node_modules/d3-quadtree/src/extent.js","../../node_modules/d3-quadtree/src/find.js","../../node_modules/d3-quadtree/src/remove.js","../../node_modules/d3-quadtree/src/root.js","../../node_modules/d3-quadtree/src/size.js","../../node_modules/d3-quadtree/src/visit.js","../../node_modules/d3-quadtree/src/visitAfter.js","../../node_modules/d3-force/src/lcg.js","../../node_modules/d3-force/src/simulation.js","../../node_modules/d3-force/src/x.js","../../node_modules/d3-force/src/y.js","../../node_modules/d3-shape/src/constant.js","../../node_modules/d3-shape/src/curve/linear.js","../../node_modules/d3-shape/src/point.js","../../node_modules/d3-shape/src/line.js","../../node_modules/d3-shape/src/array.js","../../src/@onsvisual/svelte-charts/src/charts/linechart.svelte","../../node_modules/@onsvisual/svelte-charts/src/js/utils.js","../../src/@onsvisual/svelte-charts/src/charts/distDotPlotComponents/XAxis.svelte","../../src/@onsvisual/svelte-charts/src/charts/distDotPlotComponents/Annotation.svelte","../../src/@onsvisual/svelte-charts/src/charts/distDotPlotComponents/ViolinDotPlot.svelte","../../src/@onsvisual/svelte-charts/src/charts/DistDotPlotChart.svelte","../../src/@onsvisual/svelte-charts/src/charts/IndicatorDistDotPlotChart.svelte","../../src/@onsvisual/svelte-charts/src/charts/doubleVerticalBeeswarmComponents/AxisY.svelte","../../src/@onsvisual/svelte-charts/src/charts/doubleVerticalBeeswarmComponents/SlopeLines.svelte","../../src/@onsvisual/svelte-charts/src/charts/doubleVerticalBeeswarmComponents/BeeswarmCircles.svelte","../../src/@onsvisual/svelte-charts/src/charts/doubleVerticalBeeswarmComponents/Annotation.svelte","../../src/@onsvisual/svelte-charts/src/charts/DoubleVerticalBeeswarmChart.svelte","../../src/config.js","../../src/Reports.svelte","../../src/main.js"],"sourcesContent":["function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration();\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n node.style.setProperty(key, value, important ? 'important' : '');\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, bubbles = false) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor() {\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes) {\n super();\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = append_empty_stylesheet(node).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n flushing = false;\n seen_callbacks.clear();\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction escape_attribute_value(value) {\n return typeof value === 'string' ? escape(value) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.44.2' }, detail), true));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","module.exports = require(\"regenerator-runtime\");\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import { csvParse, autoType } from 'd3-dsv';\nlet array = ['South East', 'South West', 'East', 'East of England', 'West Midlands', 'East Midlands', 'North East', 'North West']\nfunction regionThe(place, nt) {\n if (place==\"East\") { place = place + \" England\"}\n return ((!array.includes(place))|(nt==\"NT\")) ? place : 'The ' + place;\n}\n\nfunction uncap1(string) {\n if (string.slice(0, 3)==\"The\") {\n return string.charAt(0).toLowerCase() + string.slice(1);\n } else { return string }\n}\n\nfunction uncap(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\nlet num_word = {'quarter of a million': 250000, 'half a million': 500000, 'three quarters of a million': 750000, 'one million': 1000000};\n\nlet frac_word = {'one in two': 0.5, 'one in three': 0.333, 'one in four': 0.25, 'one in five': 0.2, 'one in six': 0.167, 'one in seven': 0.143, 'one in eight': 0.125, 'one in nine': 0.111, '1 in 10': 0.1,'1 in 11' : 0.09, '1 in 12' : 0.083, '1 in 13' : 0.077, '1 in 14' : 0.071, '1 in 15' : 0.067, '1 in 16' : 0.063, '1 in 17' : 0.059, '1 in 18' : 0.056, '1 in 19' : 0.053 ,'1 in 20': 0.05, '2 in 10': 0.2, '3 in 10': 0.3, '4 in 10': 0.4, '6 in 10': 0.6, '7 in 10': 0.7, '8 in 10': 0.8, '9 in 10': 0.9, 'all': 1.0};\n\n\nfunction get_word(num, dict) {\n if (dict == \"frac\") {\n dict = frac_word\n } else if (dict == \"num\") {\n dict = num_word\n }\n let OverUnder;\n let lowest = 2000000;\n let lowest_label;\n for (const label in dict) {\n if (Math.abs(num-dict[label])<lowest) {\n lowest = Math.abs(num-dict[label]) \n lowest_label = label\n if (num-dict[label]==0) {\n OverUnder = \"about\"; \n }\n else if (num-dict[label]>0) {\n OverUnder = \"just over\";\n }\n else if (num-dict[label]<0) {\n OverUnder = \"just under\";\n } } }\n return [OverUnder, lowest_label]\n}\nfunction figs(x) {\n let sigfig = Number.parseFloat(Number.parseFloat(x).toPrecision(2))\n let text;\n if (x-sigfig<-x/100) {\n text = \"under \"\n }\t\n if (x-sigfig<-x/800) {\n if (Math.round(Math.random())==1) {\n text = \"almost \"\n } else {\n text = \"just under \"\n }\n }\n else if (x-sigfig>x/100) {\n text = \" just over \"\n }\n else if (x-sigfig>x/800) {\n text = \"just over \"\n }\n else {\n text = \"about\"\n }\n return [text, sigfig];\n}\n\n\nfunction cur(s, place, i, type) {\n if (type==\"rl\") {\n type = \"_rank_local\"\n } else if (type==\"r\") {\n type = \"_rank\"\n } else {\n type = \"\"\n }\n return place.data[s[i][0]][s[i][1]+type][2011][s[i][3]]\n}\n\nfunction cha(s, place, i, type) {\n if (type==\"rl\") {\n type = \"_rank_local\"\n } else if (type==\"r\") {\n type = \"_rank\"\n } else {\n type = \"\"\n }\n return place.data[s[i][0]][s[i][1]+type]['change'][s[i][3]]\n}\n\nfunction qui(n) {\n return Math.ceil(5*n/331)\n}\n\nfunction otherEst(s, place, i, hiLo, type) {\n if (typeof hiLo===\"number\" & hiLo<0) {\n hiLo = \"highest\"\n } else if (typeof hiLo===\"number\") {\n hiLo = \"lowest\"\n }\n \n let optAr = Object.assign({}, place.data[s[i][0]][s[i][1]+'_rank_local'][type]);\n let l = new Set(chains[s[i][3]])\n\n for (let prop of Object.keys(optAr)) {\n if (!l.has(prop)) {\n delete optAr[prop];\n }\n }\n let optArKey\n if (Object.keys(optAr).length>1) {\n if (hiLo=='lowest') {\n for (let [k, v] of Object.entries(optAr)) {\n if (v > 0) {\n delete optAr[k];\n }\n }\n if (optAr.length>0) {\n optArKey = Object.keys(optAr).reduce((a, b) => optAr[a] > optAr[b] ? a : b);\n } else {\n optArKey = undefined\n }\n \n }\n if (hiLo=='highest') {\n for (let [k, v] of Object.entries(optAr)) {\n if (v < 0) {\n delete optAr[k];\n }\n }\n if (optAr.length>0) {\n optArKey = Object.keys(optAr).reduce((a, b) => optAr[a] < optAr[b] ? a : b);\n } else {\n optArKey = undefined\n }\n }\n } else {\n optArKey = Object.keys(optAr)\n }\n return optArKey\n}\n\nfunction otherRank(s, place, i, t=\"r\") {\n let locExt = \"\"\n if (t==\"rl\") {\n locExt = \"_local\"\n }\n return place.data[s[i][0]][s[i][1]+'_rank'+locExt]['change'][otherEst(s, place, i, cha(s, place, i, t), 'change')]\n}\n\nfunction ud(n, w1, w2) { if (n<0) { return w2 } else { return w1 } }\nvar city\nif (parent==\"London\") {\n city = \"city\"\n} else {\n city = \"region\"\n}\n\n\nvar ones = ['', '', 'second-', 'third-', 'fourth-', 'fifth-', 'sixth-', 'seventh-', 'eighth-', 'ninth-'];\n\nfunction suffixer(int) {\n let ord\n if (int==12) {\n ord = 'twelfth'\n } else if ((int>10)&(int<20)) {\n ord = int+\"th\"\n } else {\n let mod = Math.round(int) % 10;\n ord = mod == 1 ? int+'st' : mod == 2 ? int+'nd' : mod == 3 ? int+'rd' : int+'th';\n }\n return ord\n}\n\nfunction ord(x) {\n console.log(\"X\", x)\n let ordin\n if (Math.abs(x)<10) {\n ordin = ones[Math.abs(x)]\n } else {\n ordin = suffixer(Math.abs(x))+\"-\"\n }\n return ordin\n}\n\n\nasync function getData(url) {\n let response = await fetch(url);\n let string = await response.text();\n\tlet data = await csvParse(string, autoType);\n return data;\n}\n\nexport { uncap1, uncap, regionThe, ud, otherRank, otherEst, qui, cha, cur, figs, get_word, ord, getData };","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","<script>\n export let isActive = false;\n export let isFirst = false;\n export let isHover = false;\n export let isSelectable = false;\n export let getOptionLabel = undefined;\n export let item = undefined;\n export let filterText = '';\n\n let itemClasses = '';\n\n $: {\n const classes = [];\n if (isActive) {\n classes.push('active');\n }\n if (isFirst) {\n classes.push('first');\n }\n if (isHover) {\n classes.push('hover');\n }\n if (item.isGroupHeader) {\n classes.push('groupHeader');\n }\n if (item.isGroupItem) {\n classes.push('groupItem');\n }\n if (!isSelectable) {\n classes.push('notSelectable');\n }\n itemClasses = classes.join(' ');\n }\n</script>\n\n<style>\n .item {\n cursor: default;\n height: var(--height, 42px);\n line-height: var(--height, 42px);\n padding: var(--itemPadding, 0 20px);\n color: var(--itemColor, inherit);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n .groupHeader {\n text-transform: var(--groupTitleTextTransform, uppercase);\n }\n\n .groupItem {\n padding-left: var(--groupItemPaddingLeft, 40px);\n }\n\n .item:active {\n background: var(--itemActiveBackground, #b9daff);\n }\n\n .item.active {\n background: var(--itemIsActiveBG, #007aff);\n color: var(--itemIsActiveColor, #fff);\n }\n\n .item.notSelectable {\n color: var(--itemIsNotSelectableColor, #999);\n }\n\n .item.first {\n border-radius: var(--itemFirstBorderRadius, 4px 4px 0 0);\n }\n\n .item.hover:not(.active) {\n background: var(--itemHoverBG, #e7f2ff);\n color: var(--itemHoverColor, inherit);\n }\n</style>\n\n<div class=\"item {itemClasses}\">\n {@html getOptionLabel(item, filterText)}\n</div>\n","<script>\n import { beforeUpdate, createEventDispatcher, onMount, tick } from 'svelte';\n import isOutOfViewport from './utils/isOutOfViewport';\n import ItemComponent from './Item.svelte';\n\n const dispatch = createEventDispatcher();\n\n export let container = undefined;\n export let VirtualList = null;\n export let Item = ItemComponent;\n export let isVirtualList = false;\n export let items = [];\n export let labelIdentifier = 'label';\n export let getOptionLabel = (option, filterText) => {\n if (option)\n return option.isCreator\n ? `Create \\\"${filterText}\\\"`\n : option[labelIdentifier];\n };\n export let getGroupHeaderLabel = null;\n export let itemHeight = 40;\n export let hoverItemIndex = 0;\n export let value = undefined;\n export let optionIdentifier = 'value';\n export let hideEmptyState = false;\n export let noOptionsMessage = 'No options';\n export let isMulti = false;\n export let activeItemIndex = 0;\n export let filterText = '';\n export let parent = null;\n export let listPlacement = null;\n export let listAutoWidth = null;\n export let listOffset = 5;\n\n let isScrollingTimer = 0;\n let isScrolling = false;\n let prev_items;\n\n onMount(() => {\n if (items.length > 0 && !isMulti && value) {\n const _hoverItemIndex = items.findIndex(\n (item) => item[optionIdentifier] === value[optionIdentifier]\n );\n\n if (_hoverItemIndex) {\n hoverItemIndex = _hoverItemIndex;\n }\n }\n\n scrollToActiveItem('active');\n\n container.addEventListener(\n 'scroll',\n () => {\n clearTimeout(isScrollingTimer);\n\n isScrollingTimer = setTimeout(() => {\n isScrolling = false;\n }, 100);\n },\n false\n );\n });\n\n beforeUpdate(() => {\n if (!items) items = [];\n if (items !== prev_items && items.length > 0) {\n hoverItemIndex = 0;\n }\n\n prev_items = items;\n });\n\n function handleSelect(item) {\n if (item.isCreator) return;\n dispatch('itemSelected', item);\n }\n\n function handleHover(i) {\n if (isScrolling) return;\n hoverItemIndex = i;\n }\n\n function handleClick(args) {\n const { item, i, event } = args;\n event.stopPropagation();\n\n if (\n value &&\n !isMulti &&\n value[optionIdentifier] === item[optionIdentifier]\n )\n return closeList();\n\n if (item.isCreator) {\n dispatch('itemCreated', filterText);\n } else if (isItemSelectable(item)) {\n activeItemIndex = i;\n hoverItemIndex = i;\n handleSelect(item);\n }\n }\n\n function closeList() {\n dispatch('closeList');\n }\n\n async function updateHoverItem(increment) {\n if (isVirtualList) return;\n\n let isNonSelectableItem = true;\n\n while (isNonSelectableItem) {\n if (increment > 0 && hoverItemIndex === items.length - 1) {\n hoverItemIndex = 0;\n } else if (increment < 0 && hoverItemIndex === 0) {\n hoverItemIndex = items.length - 1;\n } else {\n hoverItemIndex = hoverItemIndex + increment;\n }\n\n isNonSelectableItem = !isItemSelectable(items[hoverItemIndex]);\n }\n\n await tick();\n\n scrollToActiveItem('hover');\n }\n\n function handleKeyDown(e) {\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n closeList();\n break;\n case 'ArrowDown':\n e.preventDefault();\n items.length && updateHoverItem(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n items.length && updateHoverItem(-1);\n break;\n case 'Enter':\n e.preventDefault();\n if (items.length === 0) break;\n const hoverItem = items[hoverItemIndex];\n if (\n value &&\n !isMulti &&\n value[optionIdentifier] === hoverItem[optionIdentifier]\n ) {\n closeList();\n break;\n }\n if (hoverItem.isCreator) {\n dispatch('itemCreated', filterText);\n } else {\n activeItemIndex = hoverItemIndex;\n handleSelect(items[hoverItemIndex]);\n }\n break;\n case 'Tab':\n e.preventDefault();\n if (items.length === 0) {\n return closeList();\n }\n if (\n value &&\n value[optionIdentifier] ===\n items[hoverItemIndex][optionIdentifier]\n )\n return closeList();\n activeItemIndex = hoverItemIndex;\n handleSelect(items[hoverItemIndex]);\n break;\n }\n }\n\n function scrollToActiveItem(className) {\n if (isVirtualList || !container) return;\n\n let offsetBounding;\n const focusedElemBounding = container.querySelector(\n `.listItem .${className}`\n );\n\n if (focusedElemBounding) {\n offsetBounding =\n container.getBoundingClientRect().bottom -\n focusedElemBounding.getBoundingClientRect().bottom;\n }\n\n container.scrollTop -= offsetBounding;\n }\n\n function isItemActive(item, value, optionIdentifier) {\n return value && value[optionIdentifier] === item[optionIdentifier];\n }\n\n function isItemFirst(itemIndex) {\n return itemIndex === 0;\n }\n\n function isItemHover(hoverItemIndex, item, itemIndex, items) {\n return isItemSelectable(item) && (hoverItemIndex === itemIndex || items.length === 1);\n }\n\n function isItemSelectable(item) {\n return (item.isGroupHeader && item.isSelectable) ||\n item.selectable ||\n !item.hasOwnProperty('selectable') // Default; if `selectable` was not specified, the object is selectable\n }\n\n let listStyle;\n function computePlacement() {\n const { height, width } = parent.getBoundingClientRect();\n\n listStyle = '';\n listStyle += `min-width:${width}px;width:${\n listAutoWidth ? 'auto' : '100%'\n };`;\n\n if (\n listPlacement === 'top' ||\n (listPlacement === 'auto' && isOutOfViewport(parent, container).bottom)\n ) {\n listStyle += `bottom:${height + listOffset}px;`;\n } else {\n listStyle += `top:${height + listOffset}px;`;\n }\n }\n\n $: {\n if (parent && container) computePlacement();\n }\n</script>\n\n<style>\n .listContainer {\n box-shadow: var(--listShadow, 0 2px 3px 0 rgba(44, 62, 80, 0.24));\n border-radius: var(--listBorderRadius, 4px);\n max-height: var(--listMaxHeight, 250px);\n overflow-y: auto;\n background: var(--listBackground, #fff);\n border: var(--listBorder, none);\n position: var(--listPosition, absolute);\n z-index: var(--listZIndex, 2);\n width: 100%;\n left: var(--listLeft, 0);\n right: var(--listRight, 0);\n }\n\n .virtualList {\n height: var(--virtualListHeight, 200px);\n }\n\n .listGroupTitle {\n color: var(--groupTitleColor, #8f8f8f);\n cursor: default;\n font-size: var(--groupTitleFontSize, 12px);\n font-weight: var(--groupTitleFontWeight, 600);\n height: var(--height, 42px);\n line-height: var(--height, 42px);\n padding: var(--groupTitlePadding, 0 20px);\n text-overflow: ellipsis;\n overflow-x: hidden;\n white-space: nowrap;\n text-transform: var(--groupTitleTextTransform, uppercase);\n }\n\n .empty {\n text-align: var(--listEmptyTextAlign, center);\n padding: var(--listEmptyPadding, 20px 0);\n color: var(--listEmptyColor, #78848f);\n }\n</style>\n\n<svelte:window on:keydown={handleKeyDown} on:resize={computePlacement} />\n\n<div\n class=\"listContainer\"\n class:virtualList={isVirtualList}\n bind:this={container}\n style={listStyle}>\n {#if isVirtualList}\n <svelte:component\n this={VirtualList}\n {items}\n {itemHeight}\n let:item\n let:i>\n <div\n on:mouseover={() => handleHover(i)}\n on:focus={() => handleHover(i)}\n on:click={(event) => handleClick({ item, i, event })}\n class=\"listItem\">\n <svelte:component\n this={Item}\n {item}\n {filterText}\n {getOptionLabel}\n isFirst={isItemFirst(i)}\n isActive={isItemActive(item, value, optionIdentifier)}\n isHover={isItemHover(hoverItemIndex, item, i, items)}\n isSelectable={isItemSelectable(item)} />\n </div>\n </svelte:component>\n {:else}\n {#each items as item, i}\n {#if item.isGroupHeader && !item.isSelectable}\n <div class=\"listGroupTitle\">{getGroupHeaderLabel(item)}</div>\n {:else}\n <div\n on:mouseover={() => handleHover(i)}\n on:focus={() => handleHover(i)}\n on:click={(event) => handleClick({ item, i, event })}\n class=\"listItem\"\n tabindex=\"-1\">\n <svelte:component\n this={Item}\n {item}\n {filterText}\n {getOptionLabel}\n isFirst={isItemFirst(i)}\n isActive={isItemActive(item, value, optionIdentifier)}\n isHover={isItemHover(hoverItemIndex, item, i, items)}\n isSelectable={isItemSelectable(item)} />\n </div>\n {/if}\n {:else}\n {#if !hideEmptyState}\n <div class=\"empty\">{noOptionsMessage}</div>\n {/if}\n {/each}\n {/if}\n</div>\n","export default function (parent, container) {\n const parentBounding = parent.getBoundingClientRect();\n const boundingContainer = container.getBoundingClientRect();\n const out = {};\n\n out.top = parentBounding.top < 0;\n out.left = parentBounding.left < 0;\n out.bottom =\n parentBounding.bottom + boundingContainer.height >\n (window.innerHeight || document.documentElement.clientHeight);\n\n out.right =\n parentBounding.right >\n (window.innerWidth || document.documentElement.clientWidth);\n out.any = out.top || out.left || out.bottom || out.right;\n\n return out;\n}\n","<script>\n export let getSelectionLabel = undefined;\n export let item = undefined;\n</script>\n\n<style>\n .selection {\n text-overflow: ellipsis;\n overflow-x: hidden;\n white-space: nowrap;\n }\n</style>\n\n<div class=\"selection\">\n {@html getSelectionLabel(item)}\n</div>\n","<script>\n import { createEventDispatcher } from 'svelte';\n\n const dispatch = createEventDispatcher();\n\n export let value = [];\n export let activeValue = undefined;\n export let isDisabled = false;\n export let multiFullItemClearable = false;\n export let getSelectionLabel = undefined;\n\n function handleClear(i, event) {\n event.stopPropagation();\n dispatch('multiItemClear', { i });\n }\n</script>\n\n<style>\n .multiSelectItem {\n background: var(--multiItemBG, #ebedef);\n margin: var(--multiItemMargin, 5px 5px 0 0);\n border-radius: var(--multiItemBorderRadius, 16px);\n height: var(--multiItemHeight, 32px);\n line-height: var(--multiItemHeight, 32px);\n display: flex;\n cursor: default;\n padding: var(--multiItemPadding, 0 10px 0 15px);\n max-width: 100%;\n }\n\n .multiSelectItem_label {\n margin: var(--multiLabelMargin, 0 5px 0 0);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .multiSelectItem:hover,\n .multiSelectItem.active {\n background-color: var(--multiItemActiveBG, #006fff);\n color: var(--multiItemActiveColor, #fff);\n }\n\n .multiSelectItem.disabled:hover {\n background: var(--multiItemDisabledHoverBg, #ebedef);\n color: var(--multiItemDisabledHoverColor, #c1c6cc);\n }\n\n .multiSelectItem_clear {\n border-radius: var(--multiClearRadius, 50%);\n background: var(--multiClearBG, #52616f);\n min-width: var(--multiClearWidth, 16px);\n max-width: var(--multiClearWidth, 16px);\n height: var(--multiClearHeight, 16px);\n position: relative;\n top: var(--multiClearTop, 8px);\n text-align: var(--multiClearTextAlign, center);\n padding: var(--multiClearPadding, 1px);\n }\n\n .multiSelectItem_clear:hover,\n .active .multiSelectItem_clear {\n background: var(--multiClearHoverBG, #fff);\n }\n\n .multiSelectItem_clear:hover svg,\n .active .multiSelectItem_clear svg {\n fill: var(--multiClearHoverFill, #006fff);\n }\n\n .multiSelectItem_clear svg {\n fill: var(--multiClearFill, #ebedef);\n vertical-align: top;\n }\n</style>\n\n{#each value as item, i}\n <div\n class=\"multiSelectItem {activeValue === i ? 'active' : ''} {isDisabled\n ? 'disabled'\n : ''}\"\n on:click={(event) =>\n multiFullItemClearable ? handleClear(i, event) : {}}>\n <div class=\"multiSelectItem_label\">\n {@html getSelectionLabel(item)}\n </div>\n {#if !isDisabled && !multiFullItemClearable}\n <div\n class=\"multiSelectItem_clear\"\n on:click={(event) => handleClear(i, event)}>\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"-2 -2 50 50\"\n focusable=\"false\"\n aria-hidden=\"true\"\n role=\"presentation\">\n <path\n d=\"M34.923,37.251L24,26.328L13.077,37.251L9.436,33.61l10.923-10.923L9.436,11.765l3.641-3.641L24,19.047L34.923,8.124 l3.641,3.641L27.641,22.688L38.564,33.61L34.923,37.251z\" />\n </svg>\n </div>\n {/if}\n </div>\n{/each}\n","<script>\n import { onMount, tick } from 'svelte';\n\n export let items = undefined;\n export let height = '100%';\n export let itemHeight = 40;\n export let hoverItemIndex = 0;\n export let start = 0;\n export let end = 0;\n\n let height_map = [];\n let rows;\n let viewport;\n let contents;\n let viewport_height = 0;\n let visible;\n let mounted;\n\n let top = 0;\n let bottom = 0;\n let average_height;\n\n $: visible = items.slice(start, end).map((data, i) => {\n return { index: i + start, data };\n });\n\n $: if (mounted) refresh(items, viewport_height, itemHeight);\n\n async function refresh(items, viewport_height, itemHeight) {\n const { scrollTop } = viewport;\n\n await tick();\n\n let content_height = top - scrollTop;\n let i = start;\n\n while (content_height < viewport_height && i < items.length) {\n let row = rows[i - start];\n\n if (!row) {\n end = i + 1;\n await tick();\n row = rows[i - start];\n }\n\n const row_height = (height_map[i] = itemHeight || row.offsetHeight);\n content_height += row_height;\n i += 1;\n }\n\n end = i;\n\n const remaining = items.length - end;\n average_height = (top + content_height) / end;\n\n bottom = remaining * average_height;\n height_map.length = items.length;\n\n if (viewport) viewport.scrollTop = 0;\n }\n\n async function handle_scroll() {\n const { scrollTop } = viewport;\n\n const old_start = start;\n\n for (let v = 0; v < rows.length; v += 1) {\n height_map[start + v] = itemHeight || rows[v].offsetHeight;\n }\n\n let i = 0;\n let y = 0;\n\n while (i < items.length) {\n const row_height = height_map[i] || average_height;\n if (y + row_height > scrollTop) {\n start = i;\n top = y;\n\n break;\n }\n\n y += row_height;\n i += 1;\n }\n\n while (i < items.length) {\n y += height_map[i] || average_height;\n i += 1;\n\n if (y > scrollTop + viewport_height) break;\n }\n\n end = i;\n\n const remaining = items.length - end;\n average_height = y / end;\n\n while (i < items.length) height_map[i++] = average_height;\n bottom = remaining * average_height;\n\n if (start < old_start) {\n await tick();\n\n let expected_height = 0;\n let actual_height = 0;\n\n for (let i = start; i < old_start; i += 1) {\n if (rows[i - start]) {\n expected_height += height_map[i];\n actual_height += itemHeight || rows[i - start].offsetHeight;\n }\n }\n\n const d = actual_height - expected_height;\n viewport.scrollTo(0, scrollTop + d);\n }\n }\n\n onMount(() => {\n rows = contents.getElementsByTagName('svelte-virtual-list-row');\n mounted = true;\n });\n</script>\n\n<style>\n svelte-virtual-list-viewport {\n position: relative;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n display: block;\n }\n\n svelte-virtual-list-contents,\n svelte-virtual-list-row {\n display: block;\n }\n\n svelte-virtual-list-row {\n overflow: hidden;\n }\n</style>\n\n<svelte-virtual-list-viewport\n bind:this={viewport}\n bind:offsetHeight={viewport_height}\n on:scroll={handle_scroll}\n style=\"height: {height};\">\n <svelte-virtual-list-contents\n bind:this={contents}\n style=\"padding-top: {top}px; padding-bottom: {bottom}px;\">\n {#each visible as row (row.index)}\n <svelte-virtual-list-row>\n <slot item={row.data} i={row.index} {hoverItemIndex}>Missing template</slot>\n </svelte-virtual-list-row>\n {/each}\n </svelte-virtual-list-contents>\n</svelte-virtual-list-viewport>\n","<svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"-2 -2 50 50\"\n focusable=\"false\"\n aria-hidden=\"true\"\n role=\"presentation\"\n>\n <path\n fill=\"currentColor\"\n d=\"M34.923,37.251L24,26.328L13.077,37.251L9.436,33.61l10.923-10.923L9.436,11.765l3.641-3.641L24,19.047L34.923,8.124\n l3.641,3.641L27.641,22.688L38.564,33.61L34.923,37.251z\"\n />\n</svg>\n","<script>\n import { beforeUpdate, createEventDispatcher, onMount } from 'svelte';\n\n import _List from './List.svelte';\n import _Item from './Item.svelte';\n import _Selection from './Selection.svelte';\n import _MultiSelection from './MultiSelection.svelte';\n import _VirtualList from './VirtualList.svelte';\n import _ClearIcon from './ClearIcon.svelte';\n import debounce from './utils/debounce';\n\n const dispatch = createEventDispatcher();\n\n export let id = null;\n export let container = undefined;\n export let input = undefined;\n export let isMulti = false;\n export let multiFullItemClearable = false;\n export let isDisabled = false;\n export let isCreatable = false;\n export let isFocused = false;\n export let value = null;\n export let filterText = '';\n export let placeholder = 'Select...';\n export let placeholderAlwaysShow = false;\n export let items = null;\n export let itemFilter = (label, filterText, option) =>\n `${label}`.toLowerCase().includes(filterText.toLowerCase());\n export let groupBy = undefined;\n export let groupFilter = (groups) => groups;\n export let isGroupHeaderSelectable = false;\n export let getGroupHeaderLabel = (option) => {\n return option[labelIdentifier] || option.id;\n };\n export let labelIdentifier = 'label';\n export let getOptionLabel = (option, filterText) => {\n return option.isCreator\n ? `Create \\\"${filterText}\\\"`\n : option[labelIdentifier];\n };\n export let optionIdentifier = 'value';\n export let loadOptions = undefined;\n export let hasError = false;\n export let containerStyles = '';\n export let getSelectionLabel = (option) => {\n if (option) return option[labelIdentifier];\n else return null;\n };\n\n export let createGroupHeaderItem = (groupValue) => {\n return {\n value: groupValue,\n label: groupValue,\n };\n };\n\n export let createItem = (filterText) => {\n return {\n value: filterText,\n label: filterText,\n };\n };\n\n export const getFilteredItems = () => {\n return filteredItems;\n };\n\n export let isSearchable = true;\n export let inputStyles = '';\n export let isClearable = true;\n export let isWaiting = false;\n export let listPlacement = 'auto';\n export let listOpen = false;\n export let isVirtualList = false;\n export let loadOptionsInterval = 300;\n export let noOptionsMessage = 'No options';\n export let hideEmptyState = false;\n export let inputAttributes = {};\n export let listAutoWidth = true;\n export let itemHeight = 40;\n export let Icon = undefined;\n export let iconProps = {};\n export let showChevron = false;\n export let showIndicator = false;\n export let containerClasses = '';\n export let indicatorSvg = undefined;\n export let listOffset = 5;\n\n export let ClearIcon = _ClearIcon;\n export let Item = _Item;\n export let List = _List;\n export let Selection = _Selection;\n export let MultiSelection = _MultiSelection;\n export let VirtualList = _VirtualList;\n\n function filterMethod(args) {\n if (args.loadOptions && args.filterText.length > 0) return;\n if (!args.items) return [];\n\n if (\n args.items &&\n args.items.length > 0 &&\n typeof args.items[0] !== 'object'\n ) {\n args.items = convertStringItemsToObjects(args.items);\n }\n\n let filterResults = args.items.filter((item) => {\n let matchesFilter = itemFilter(\n getOptionLabel(item, args.filterText),\n args.filterText,\n item\n );\n\n if (\n matchesFilter &&\n args.isMulti &&\n args.value &&\n Array.isArray(args.value)\n ) {\n matchesFilter = !args.value.some((x) => {\n return (\n x[args.optionIdentifier] === item[args.optionIdentifier]\n );\n });\n }\n\n return matchesFilter;\n });\n\n if (args.groupBy) {\n filterResults = filterGroupedItems(filterResults);\n }\n\n if (args.isCreatable) {\n filterResults = addCreatableItem(filterResults, args.filterText);\n }\n\n return filterResults;\n }\n\n function addCreatableItem(_items, _filterText) {\n if (_filterText.length === 0) return _items;\n const itemToCreate = createItem(_filterText);\n if (_items[0] && _filterText === _items[0][labelIdentifier])\n return _items;\n itemToCreate.isCreator = true;\n return [..._items, itemToCreate];\n }\n\n $: filteredItems = filterMethod({\n loadOptions,\n filterText,\n items,\n value,\n isMulti,\n optionIdentifier,\n groupBy,\n isCreatable,\n });\n\n export let selectedValue = null;\n $: {\n if (selectedValue)\n console.warn(\n 'selectedValue is no longer used. Please use value instead.'\n );\n }\n\n let activeValue;\n let prev_value;\n let prev_filterText;\n let prev_isFocused;\n let prev_isMulti;\n let hoverItemIndex;\n\n const getItems = debounce(async () => {\n isWaiting = true;\n let res = await loadOptions(filterText).catch((err) => {\n console.warn('svelte-select loadOptions error :>> ', err);\n dispatch('error', { type: 'loadOptions', details: err });\n });\n\n if (res && !res.cancelled) {\n if (res) {\n if (res && res.length > 0 && typeof res[0] !== 'object') {\n res = convertStringItemsToObjects(res);\n }\n filteredItems = [...res];\n dispatch('loaded', { items: filteredItems });\n } else {\n filteredItems = [];\n }\n\n if (isCreatable) {\n filteredItems = addCreatableItem(filteredItems, filterText);\n }\n\n isWaiting = false;\n isFocused = true;\n listOpen = true;\n }\n }, loadOptionsInterval);\n\n $: updateValueDisplay(items);\n\n function setValue() {\n if (typeof value === 'string') {\n value = {\n [optionIdentifier]: value,\n label: value,\n };\n } else if (isMulti && Array.isArray(value) && value.length > 0) {\n value = value.map((item) =>\n typeof item === 'string' ? { value: item, label: item } : item\n );\n }\n }\n\n let _inputAttributes;\n function assignInputAttributes() {\n _inputAttributes = Object.assign(\n {\n autocapitalize: 'none',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: false,\n tabindex: 0,\n type: 'text',\n 'aria-autocomplete': 'list',\n },\n inputAttributes\n );\n\n if (id) {\n _inputAttributes.id = id;\n }\n\n if (!isSearchable) {\n _inputAttributes.readonly = true;\n }\n }\n\n function convertStringItemsToObjects(_items) {\n return _items.map((item, index) => {\n return {\n index,\n value: item,\n label: `${item}`,\n };\n });\n }\n\n function filterGroupedItems(_items) {\n const groupValues = [];\n const groups = {};\n\n _items.forEach((item) => {\n const groupValue = groupBy(item);\n\n if (!groupValues.includes(groupValue)) {\n groupValues.push(groupValue);\n groups[groupValue] = [];\n\n if (groupValue) {\n groups[groupValue].push(\n Object.assign(createGroupHeaderItem(groupValue, item), {\n id: groupValue,\n isGroupHeader: true,\n isSelectable: isGroupHeaderSelectable,\n })\n );\n }\n }\n\n groups[groupValue].push(\n Object.assign({ isGroupItem: !!groupValue }, item)\n );\n });\n\n const sortedGroupedItems = [];\n\n groupFilter(groupValues).forEach((groupValue) => {\n sortedGroupedItems.push(...groups[groupValue]);\n });\n\n return sortedGroupedItems;\n }\n\n function dispatchSelectedItem() {\n if (isMulti) {\n if (JSON.stringify(value) !== JSON.stringify(prev_value)) {\n if (checkValueForDuplicates()) {\n dispatch('select', value);\n }\n }\n return;\n }\n\n if (\n !prev_value ||\n JSON.stringify(value[optionIdentifier]) !==\n JSON.stringify(prev_value[optionIdentifier])\n ) {\n dispatch('select', value);\n }\n }\n\n function setupFocus() {\n if (isFocused || listOpen) {\n handleFocus();\n } else {\n if (input) input.blur();\n }\n }\n\n function setupMulti() {\n if (value) {\n if (Array.isArray(value)) {\n value = [...value];\n } else {\n value = [value];\n }\n }\n }\n\n function setupSingle() {\n if (value) value = null;\n }\n\n $: {\n if (value) setValue();\n }\n\n $: {\n if (inputAttributes || !isSearchable) assignInputAttributes();\n }\n\n $: {\n if (isMulti) {\n setupMulti();\n }\n\n if (prev_isMulti && !isMulti) {\n setupSingle();\n }\n }\n\n $: {\n if (isMulti && value && value.length > 1) {\n checkValueForDuplicates();\n }\n }\n\n $: {\n if (value) dispatchSelectedItem();\n }\n\n $: {\n if (!value && isMulti && prev_value) {\n dispatch('select', value);\n }\n }\n\n $: {\n if (isFocused !== prev_isFocused) {\n setupFocus();\n }\n }\n\n $: {\n if (filterText !== prev_filterText) {\n setupFilterText();\n }\n }\n\n function setupFilterText() {\n if (filterText.length === 0) return;\n\n isFocused = true;\n listOpen = true;\n\n if (loadOptions) {\n getItems();\n } else {\n listOpen = true;\n\n if (isMulti) {\n activeValue = undefined;\n }\n }\n }\n\n $: showSelectedItem = value && filterText.length === 0;\n $: showClearIcon =\n showSelectedItem && isClearable && !isDisabled && !isWaiting;\n $: placeholderText =\n placeholderAlwaysShow && isMulti\n ? placeholder\n : value\n ? ''\n : placeholder;\n $: showMultiSelect = isMulti && value && value.length > 0;\n\n beforeUpdate(async () => {\n prev_value = value;\n prev_filterText = filterText;\n prev_isFocused = isFocused;\n prev_isMulti = isMulti;\n });\n\n function checkValueForDuplicates() {\n let noDuplicates = true;\n if (value) {\n const ids = [];\n const uniqueValues = [];\n\n value.forEach((val) => {\n if (!ids.includes(val[optionIdentifier])) {\n ids.push(val[optionIdentifier]);\n uniqueValues.push(val);\n } else {\n noDuplicates = false;\n }\n });\n\n if (!noDuplicates) value = uniqueValues;\n }\n return noDuplicates;\n }\n\n function findItem(selection) {\n let matchTo = selection\n ? selection[optionIdentifier]\n : value[optionIdentifier];\n return items.find((item) => item[optionIdentifier] === matchTo);\n }\n\n function updateValueDisplay(items) {\n if (\n !items ||\n items.length === 0 ||\n items.some((item) => typeof item !== 'object')\n )\n return;\n if (\n !value ||\n (isMulti\n ? value.some(\n (selection) => !selection || !selection[optionIdentifier]\n )\n : !value[optionIdentifier])\n )\n return;\n\n if (Array.isArray(value)) {\n value = value.map((selection) => findItem(selection) || selection);\n } else {\n value = findItem() || value;\n }\n }\n\n function handleMultiItemClear(event) {\n const { detail } = event;\n const itemToRemove = value[detail ? detail.i : value.length - 1];\n\n if (value.length === 1) {\n value = undefined;\n } else {\n value = value.filter((item) => {\n return item !== itemToRemove;\n });\n }\n\n dispatch('clear', itemToRemove);\n }\n\n function handleKeyDown(e) {\n if (!isFocused) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n listOpen = true;\n activeValue = undefined;\n break;\n case 'ArrowUp':\n e.preventDefault();\n listOpen = true;\n activeValue = undefined;\n break;\n case 'Tab':\n if (!listOpen) isFocused = false;\n break;\n case 'Backspace':\n if (!isMulti || filterText.length > 0) return;\n if (isMulti && value && value.length > 0) {\n handleMultiItemClear(\n activeValue !== undefined\n ? activeValue\n : value.length - 1\n );\n if (activeValue === 0 || activeValue === undefined) break;\n activeValue =\n value.length > activeValue\n ? activeValue - 1\n : undefined;\n }\n break;\n case 'ArrowLeft':\n if (!isMulti || filterText.length > 0) return;\n if (activeValue === undefined) {\n activeValue = value.length - 1;\n } else if (value.length > activeValue && activeValue !== 0) {\n activeValue -= 1;\n }\n break;\n case 'ArrowRight':\n if (\n !isMulti ||\n filterText.length > 0 ||\n activeValue === undefined\n )\n return;\n if (activeValue === value.length - 1) {\n activeValue = undefined;\n } else if (activeValue < value.length - 1) {\n activeValue += 1;\n }\n break;\n }\n }\n\n function handleFocus() {\n isFocused = true;\n if (input) input.focus();\n }\n\n function handleWindowEvent(event) {\n if (!container) return;\n const eventTarget =\n event.path && event.path.length > 0 ? event.path[0] : event.target;\n if (container.contains(eventTarget) || container.contains(event.relatedTarget)) {\n return;\n }\n isFocused = false;\n listOpen = false;\n activeValue = undefined;\n if (input) input.blur();\n }\n\n function handleClick() {\n if (isDisabled) return;\n isFocused = true;\n listOpen = !listOpen;\n }\n\n export function handleClear() {\n value = undefined;\n listOpen = false;\n dispatch('clear', value);\n handleFocus();\n }\n\n onMount(() => {\n if (isFocused && input) input.focus();\n });\n\n $: listProps = {\n Item,\n filterText,\n optionIdentifier,\n noOptionsMessage,\n hideEmptyState,\n isVirtualList,\n VirtualList,\n value,\n isMulti,\n getGroupHeaderLabel,\n items: filteredItems,\n itemHeight,\n getOptionLabel,\n listPlacement,\n parent: container,\n listAutoWidth,\n listOffset,\n };\n\n function itemSelected(event) {\n const { detail } = event;\n\n if (detail) {\n filterText = '';\n const item = Object.assign({}, detail);\n\n if (!item.isGroupHeader || item.isSelectable) {\n if (isMulti) {\n value = value ? value.concat([item]) : [item];\n } else {\n value = item;\n }\n\n value = value;\n\n setTimeout(() => {\n listOpen = false;\n activeValue = undefined;\n });\n }\n }\n }\n\n function itemCreated(event) {\n const { detail } = event;\n if (isMulti) {\n value = value || [];\n value = [...value, createItem(detail)];\n } else {\n value = createItem(detail);\n }\n\n dispatch('itemCreated', detail);\n filterText = '';\n listOpen = false;\n activeValue = undefined;\n }\n\n function closeList() {\n filterText = '';\n listOpen = false;\n }\n\n export let ariaValues = (values) => {\n return `Option ${values}, selected.`;\n };\n\n export let ariaListOpen = (label, count) => {\n return `You are currently focused on option ${label}. There are ${count} results available.`;\n };\n\n export let ariaFocused = () => {\n return `Select is focused, type to refine list, press down to open the menu.`;\n };\n\n function handleAriaSelection() {\n let selected = undefined;\n\n if (isMulti && value.length > 0) {\n selected = value.map((v) => getSelectionLabel(v)).join(', ');\n } else {\n selected = getSelectionLabel(value);\n }\n\n return ariaValues(selected);\n }\n\n function handleAriaContent() {\n if (!isFocused || !filteredItems || filteredItems.length === 0)\n return '';\n\n let _item = filteredItems[hoverItemIndex];\n if (listOpen && _item) {\n let label = getSelectionLabel(_item);\n let count = filteredItems ? filteredItems.length : 0;\n\n return ariaListOpen(label, count);\n } else {\n return ariaFocused();\n }\n }\n\n $: ariaSelection = value ? handleAriaSelection(isMulti) : '';\n $: ariaContext = handleAriaContent(\n filteredItems,\n hoverItemIndex,\n isFocused,\n listOpen\n );\n</script>\n\n<style>\n .selectContainer {\n --internalPadding: 0 16px;\n border: var(--border, 1px solid #d8dbdf);\n border-radius: var(--borderRadius, 3px);\n box-sizing: border-box;\n height: var(--height, 42px);\n position: relative;\n display: flex;\n align-items: center;\n padding: var(--padding, var(--internalPadding));\n background: var(--background, #fff);\n margin: var(--margin, 0);\n }\n\n .selectContainer input {\n cursor: default;\n border: none;\n color: var(--inputColor, #3f4f5f);\n height: var(--height, 42px);\n line-height: var(--height, 42px);\n padding: var(--inputPadding, var(--padding, var(--internalPadding)));\n width: 100%;\n background: transparent;\n font-size: var(--inputFontSize, 14px);\n letter-spacing: var(--inputLetterSpacing, -0.08px);\n position: absolute;\n left: var(--inputLeft, 0);\n margin: var(--inputMargin, 0);\n }\n\n .selectContainer input::placeholder {\n color: var(--placeholderColor, #78848f);\n opacity: var(--placeholderOpacity, 1);\n }\n\n .selectContainer input:focus {\n outline: none;\n }\n\n .selectContainer:hover {\n border-color: var(--borderHoverColor, #b2b8bf);\n }\n\n .selectContainer.focused {\n border-color: var(--borderFocusColor, #006fe8);\n }\n\n .selectContainer.disabled {\n background: var(--disabledBackground, #ebedef);\n border-color: var(--disabledBorderColor, #ebedef);\n color: var(--disabledColor, #c1c6cc);\n }\n\n .selectContainer.disabled input::placeholder {\n color: var(--disabledPlaceholderColor, #c1c6cc);\n opacity: var(--disabledPlaceholderOpacity, 1);\n }\n\n .selectedItem {\n line-height: var(--height, 42px);\n height: var(--height, 42px);\n overflow-x: hidden;\n padding: var(--selectedItemPadding, 0 20px 0 0);\n }\n\n .selectedItem:focus {\n outline: none;\n }\n\n .clearSelect {\n position: absolute;\n right: var(--clearSelectRight, 10px);\n top: var(--clearSelectTop, 11px);\n bottom: var(--clearSelectBottom, 11px);\n width: var(--clearSelectWidth, 20px);\n color: var(--clearSelectColor, #c5cacf);\n flex: none !important;\n }\n\n .clearSelect:hover {\n color: var(--clearSelectHoverColor, #2c3e50);\n }\n\n .selectContainer.focused .clearSelect {\n color: var(--clearSelectFocusColor, #3f4f5f);\n }\n\n .indicator {\n position: absolute;\n right: var(--indicatorRight, 10px);\n top: var(--indicatorTop, 11px);\n width: var(--indicatorWidth, 20px);\n height: var(--indicatorHeight, 20px);\n color: var(--indicatorColor, #c5cacf);\n }\n\n .indicator svg {\n display: inline-block;\n fill: var(--indicatorFill, currentcolor);\n line-height: 1;\n stroke: var(--indicatorStroke, currentcolor);\n stroke-width: 0;\n }\n\n .spinner {\n position: absolute;\n right: var(--spinnerRight, 10px);\n top: var(--spinnerLeft, 11px);\n width: var(--spinnerWidth, 20px);\n height: var(--spinnerHeight, 20px);\n color: var(--spinnerColor, #51ce6c);\n animation: rotate 0.75s linear infinite;\n }\n\n .spinner_icon {\n display: block;\n height: 100%;\n transform-origin: center center;\n width: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n -webkit-transform: none;\n }\n\n .spinner_path {\n stroke-dasharray: 90;\n stroke-linecap: round;\n }\n\n .multiSelect {\n display: flex;\n padding: var(--multiSelectPadding, 0 35px 0 16px);\n height: auto;\n flex-wrap: wrap;\n align-items: stretch;\n }\n\n .multiSelect > * {\n flex: 1 1 50px;\n }\n\n .selectContainer.multiSelect input {\n padding: var(--multiSelectInputPadding, 0);\n position: relative;\n margin: var(--multiSelectInputMargin, 0);\n }\n\n .hasError {\n border: var(--errorBorder, 1px solid #ff2d55);\n background: var(--errorBackground, #fff);\n }\n\n .a11yText {\n z-index: 9999;\n border: 0px;\n clip: rect(1px, 1px, 1px, 1px);\n height: 1px;\n width: 1px;\n position: absolute;\n overflow: hidden;\n padding: 0px;\n white-space: nowrap;\n }\n\n @keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n }\n</style>\n\n<svelte:window\n on:click={handleWindowEvent}\n on:focusin={handleWindowEvent}\n on:keydown={handleKeyDown} />\n\n<div\n class=\"selectContainer {containerClasses}\"\n class:hasError\n class:multiSelect={isMulti}\n class:disabled={isDisabled}\n class:focused={isFocused}\n style={containerStyles}\n on:click={handleClick}\n bind:this={container}>\n <span\n aria-live=\"polite\"\n aria-atomic=\"false\"\n aria-relevant=\"additions text\"\n class=\"a11yText\">\n {#if isFocused}\n <span id=\"aria-selection\">{ariaSelection}</span>\n <span id=\"aria-context\">\n {ariaContext}\n </span>\n {/if}\n </span>\n\n {#if Icon}\n <svelte:component this={Icon} {...iconProps} />\n {/if}\n\n {#if showMultiSelect}\n <svelte:component\n this={MultiSelection}\n {value}\n {getSelectionLabel}\n {activeValue}\n {isDisabled}\n {multiFullItemClearable}\n on:multiItemClear={handleMultiItemClear}\n on:focus={handleFocus} />\n {/if}\n\n <input\n readOnly={!isSearchable}\n {..._inputAttributes}\n bind:this={input}\n on:focus={handleFocus}\n bind:value={filterText}\n placeholder={placeholderText}\n style={inputStyles}\n disabled={isDisabled} />\n\n {#if !isMulti && showSelectedItem}\n <div class=\"selectedItem\" on:focus={handleFocus}>\n <svelte:component\n this={Selection}\n item={value}\n {getSelectionLabel} />\n </div>\n {/if}\n\n {#if showClearIcon}\n <div\n class=\"clearSelect\"\n on:click|preventDefault={handleClear}\n aria-hidden=\"true\">\n <svelte:component this={ClearIcon} />\n </div>\n {/if}\n\n {#if !showClearIcon && (showIndicator || (showChevron && !value) || (!isSearchable && !isDisabled && !isWaiting && ((showSelectedItem && !isClearable) || !showSelectedItem)))}\n <div class=\"indicator\" aria-hidden=\"true\">\n {#if indicatorSvg}\n {@html indicatorSvg}\n {:else}\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 20 20\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path\n d=\"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747\n 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0\n 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502\n 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0\n 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\" />\n </svg>\n {/if}\n </div>\n {/if}\n\n {#if isWaiting}\n <div class=\"spinner\">\n <svg class=\"spinner_icon\" viewBox=\"25 25 50 50\">\n <circle\n class=\"spinner_path\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"5\"\n stroke-miterlimit=\"10\" />\n </svg>\n </div>\n {/if}\n\n {#if listOpen}\n <svelte:component\n this={List}\n {...listProps}\n bind:hoverItemIndex\n on:itemSelected={itemSelected}\n on:itemCreated={itemCreated}\n on:closeList={closeList} />\n {/if}\n\n {#if !isMulti || (isMulti && !showMultiSelect)}\n <input\n name={inputAttributes.name}\n type=\"hidden\"\n value={value ? getSelectionLabel(value) : null} />\n {/if}\n\n {#if isMulti && showMultiSelect}\n {#each value as item}\n <input\n name={inputAttributes.name}\n type=\"hidden\"\n value={item ? getSelectionLabel(item) : null} />\n {/each}\n {/if}\n</div>\n","export default function debounce(func, wait, immediate) {\n let timeout;\n\n return function executedFunction() {\n let context = this;\n let args = arguments;\n\n let later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n let callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) func.apply(context, args);\n };\n}\n","<script>\r\n\timport { onMount, createEventDispatcher } from \"svelte\";\r\n\timport Select from \"svelte-select\";\r\n\tconst searchIcon = `<svg viewBox=\"0 0 20 20\" fill-rule=\"evenodd\"><path d=\"M0,8a8,8,0,1,0,16,0a8,8,0,1,0,-16,0ZM3,8a5,5,0,1,0,10,0a5,5,0,1,0,-10,0Z\"/><path d=\"M18,20L20,18L14,12L12,14Z\"/></svg>`;\r\n\tconst chevronIcon = `<svg viewBox=\"0 0 20 20\"><path d=\"M1,6L19,6L10,15Z\"/></svg>`;\r\n\tconst dispatch = createEventDispatcher();\r\n\r\n\texport let id = \"\";\r\n\texport let container = undefined;\r\n\texport let mode = \"default\";\r\n\texport let items;\r\n\texport let placeholder = \"Choose an area\";\r\n\texport let value = null;\r\n\texport let filterText = \"\";\r\n\texport let isSearchable = true;\r\n\texport let isClearable = true;\r\n\texport let autoClear = false;\r\n\texport let idKey = \"value\";\r\n\texport let labelKey = \"label\";\r\n\texport let groupKey = null;\r\n\texport let groupItems = false;\r\n\texport let loadOptions = undefined;\r\n\texport let fontSize = \"1em\";\r\n\texport let height = 42;\r\n\texport let isMulti = false;\r\n\texport let maxSelected = 4;\r\n\texport let colors = [\"#206095\", \"#a8bd3a\", \"#871a5b\", \"#27a0cc\"];\r\n\texport let darkMode = false;\r\n\texport let borderColor = darkMode ? \"white\" : \"#206095\";\r\n\t\r\n\tconst getOptionLabel = groupKey && !groupItems ? (option) => `${option[labelKey]} <span class=\"group\">${option[groupKey]}</span>` : (option) => option[labelKey];\r\n\texport let getSelectionLabel = (option) => {\r\n\t\tif (option) return getOptionLabel(option)\r\n\t\telse return null;\r\n\t};\r\n\tconst groupBy = groupItems && groupKey ? (item) => item[groupKey] : undefined;\r\n\tconst indicatorSvg = mode == \"search\" ? searchIcon : chevronIcon;\r\n\tconst containerStyles = `--inputFontSize: ${fontSize}; --groupTitleFontSize: ${fontSize}; --height: ${height}px; font-size: ${fontSize};`;\r\n\t\r\n\tconst ariaValues = (values) => `${values}, selected.`;\r\n\tconst ariaListOpen = (label, count) => `You are currently focused on ${label}. There are ${count} results available.`;\r\n\tconst ariaFocused = () => `Select is focused, type to refine list, press down to open the menu.`;\r\n\t\r\n\t$: noOptionsMessage = isWaiting ? \"Loading...\" : mode == \"search\" && filterText.length < 3 ? \"Enter 3 or more characters for suggestions\" : `No results match ${filterText}`;\r\n\t$: itemFilter = (Array.isArray(value) && value.length >= maxSelected) || mode == \"search\" && filterText.length < 3\r\n\t? (label, filterText, option) => false\r\n\t: (label, filterText, option) => `${label}`.split(\"<\")[0].toLowerCase().slice(0, filterText.length) == filterText.toLowerCase();\r\n\t\r\n\tlet el;\r\n\tlet isFocused;\r\n\tlet listOpen;\r\n\tlet isWaiting;\r\n\tlet handleClear;\r\n\t\r\n\tconst sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\n\tasync function doSelect(e) {\r\n\t\tdispatch(\"select\", e.detail);\r\n\t\tif (autoClear) {\r\n\t\t\thandleClear();\r\n\t\t} else if (isClearable) {\r\n\t\t\t// Hack to allow selection to be cleared by keyboard\r\n\t\t\tawait sleep(10);\r\n\t\t\tlet clearSelect = el.getElementsByClassName(\"clearSelect\")[0];\r\n\t\t\tif (clearSelect) {\r\n\t\t\t\tclearSelect.tabIndex = 0;\r\n\t\t\t\tclearSelect.onkeypress = (e) => { if (e.key == \"Enter\") handleClear() };\r\n\t\t\t\tclearSelect.removeAttribute(\"aria-hidden\");\r\n\t\t\t\tclearSelect.setAttribute(\"aria-label\", \"Clear selection\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tonMount(() => {\r\n\t\tlet style = el.style;\r\n\t\tstyle.setProperty(\"--firstItem\", colors[0 % colors.length]);\r\n\t\tstyle.setProperty(\"--secondItem\", colors[1 % colors.length]);\r\n\t\tstyle.setProperty(\"--thirdItem\", colors[2 % colors.length]);\r\n\t\tstyle.setProperty(\"--fourthItem\", colors[3 % colors.length]);\r\n\t\tstyle.setProperty(\"--borderColor\", borderColor);\r\n\t});\r\n</script>\r\n\r\n<div class=\"selectbox\" class:multi-selected={value && isMulti} class:focused={isFocused} class:selected={value && !listOpen && !isMulti} bind:this={el}>\r\n\t<Select\r\n\t\t{id} {container} {items} {placeholder} {isMulti} {isSearchable}\r\n\t\t{groupBy} {loadOptions} {getSelectionLabel} {getOptionLabel} {itemFilter}\r\n\t\t{ariaValues} {ariaListOpen} {ariaFocused} {noOptionsMessage} {indicatorSvg}\r\n\t\t{containerStyles}\r\n\t\toptionIdentifier={idKey}\r\n\t\tbind:isFocused bind:value bind:listOpen bind:filterText bind:isWaiting bind:handleClear\r\n\t\ton:select={doSelect} on:clear on:loaded on:error\r\n\t\tshowIndicator isClearable={!isClearable ? false : !isMulti}/>\r\n</div>\r\n\r\n<style>\r\n\t.selectbox {\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0;\r\n\t\tborder: 0;\r\n\t}\r\n\t.selectbox {\r\n --border: 2px solid var(--borderColor, #206095);\r\n --borderRadius: 0;\r\n\t\t--listBorderRadius: 0;\r\n\t\t--itemFirstBorderRadius: 0;\r\n\t\t--multiItemBorderRadius: 0;\r\n\t\t--padding: 0 8px;\r\n\t\t--multiSelectPadding: 0 8px;\r\n\t\t--clearSelectBottom: auto;\r\n\t\t--clearSelectRight: 8px;\r\n\t\t--clearSelectTop: auto;\r\n\t\t--clearSelectWidth: 24px;\r\n\t\t--clearSelectColor: #206095;\r\n\t\t--borderHoverColor: var(--borderColor, #206095);\r\n\t\t--borderFocusColor: var(--borderColor, #206095);\r\n\t\t--inputColor: #206095;\r\n\t\t--itemColor: #206095;\r\n\t\t--placeholderColor: #206095;\r\n\t\t--itemIsActiveBG: #206095;\r\n\t\t--itemHoverBG: #3875d7;\r\n\t\t--itemHoverColor: white;\r\n\t\t--clearSelectColor: white;\r\n\t\t--clearSelectFocusColor: white;\r\n\t\t--clearSelectHoverColor: white;\r\n\t\t--indicatorColor: white;\r\n\t\t--multiItemActiveColor: white;\r\n\t\t--multiClearFill: white;\r\n\t\t--multiClearBG: none;\r\n\t\t--multiClearHoverBG: none;\r\n\t\t--multiItemBG: grey;\r\n\t\t--multiItemActiveBG: grey;\r\n\t\t--spinnerColor: rgba(255,255,255,0);\r\n }\r\n\t:global(.selectbox, .selectbox input, .selectbox .item, .selectbox svg) {\r\n\t\tcursor: pointer !important;\r\n\t}\r\n\t:global(.selectbox input:focus) {\r\n\t\tcursor: default !important;\r\n\t}\r\n\t:global(.selectbox > .selectContainer) {\r\n\t\tbox-shadow: inset -40px 0px #206095;\r\n\t}\r\n\t:global(.selectbox.multi-selected > .selectContainer) {\r\n\t\tbox-shadow: none !important;\r\n\t}\r\n\t:global(.selectbox.focused > .selectContainer) {\r\n\t\toutline: 4px solid orange;\r\n\t}\r\n\t:global(.selectbox.selected > .selectContainer) {\r\n\t\tbackground-color: #206095 !important;\r\n\t}\r\n\t:global(.selectbox.selected .selectedItem) {\r\n\t\tcolor: white !important;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\t:global(.selectbox .selectedItem .group) {\r\n\t\tdisplay: none;\r\n\t}\r\n\t:global(.selectbox .item > .group) {\r\n\t\tfont-size: smaller;\r\n\t\topacity: 0.7;\r\n\t}\r\n\t:global(.selectbox .selectContainer > .multiSelectItem) {\r\n\t\tcolor: white !important;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(1)) {\r\n\t\tbackground-color: var(--firstItem) !important;\r\n\t}\r\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(2)) {\r\n\t\tbackground-color: var(--secondItem) !important;\r\n\t}\r\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(3)) {\r\n\t\tbackground-color: var(--thirdItem) !important;\r\n\t}\r\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(4)) {\r\n\t\tbackground-color: var(--fourthItem) !important;\r\n\t}\r\n\t:global(.selectbox .indicator svg) {\r\n\t\tfill: white;\r\n\t}\r\n\t:global(.selectbox .clearSelect) {\r\n\t\theight: 24px;\r\n\t}\r\n\t:global(.selectbox .clearSelect:focus) {\r\n\t\toutline: 4px solid orange;\r\n\t}\r\n\t:global(.selectbox .indicator) {\r\n\t\twidth: 20px;\r\n\t\theight: 20px;\r\n\t\tline-height: 1;\r\n\t}\r\n\t:global(.selectbox .multiSelectItem .group) {\r\n\t\tdisplay: none;\r\n\t}\r\n</style>","\n\n// Structure inspired by John Resig's HTML parser\n// http://ejohn.org/blog/pure-javascript-html-parser/\n\n(function() {\n 'use strict';\n\n// The load function takes a string of text as its only argument.\n// It then proceeds to match the text to one of several regular expressions\n// which match patterns for different types of commands in AML.\nfunction load(input, options) {\n var whitespacePattern = '\\\\u0000\\\\u0009\\\\u000A\\\\u000B\\\\u000C\\\\u000D\\\\u0020\\\\u00A0\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u200B\\\\u2028\\\\u2029\\\\u202F\\\\u205F\\\\u3000\\\\uFEFF';\n var slugBlacklist = whitespacePattern + '\\\\u005B\\\\u005C\\\\u005D\\\\u007B\\\\u007D\\\\u003A';\n\n var nextLine = new RegExp('.*((\\r|\\n)+)');\n var startKey = new RegExp('^\\\\s*([^' + slugBlacklist + ']+)[ \\t\\r]*:[ \\t\\r]*(.*(?:\\n|\\r|$))');\n var commandKey = new RegExp('^\\\\s*:[ \\t\\r]*(endskip|ignore|skip|end).*?(\\n|\\r|$)', 'i');\n var arrayElement = new RegExp('^\\\\s*\\\\*[ \\t\\r]*(.*(?:\\n|\\r|$))');\n var scopePattern = new RegExp('^\\\\s*(\\\\[|\\\\{)[ \\t\\r]*([\\+\\.]*)[ \\t\\r]*([^' + slugBlacklist + ']*)[ \\t\\r]*(?:\\\\]|\\\\}).*?(\\n|\\r|$)');\n\n var data = {},\n scope = data,\n\n stack = [],\n stackScope = undefined,\n\n bufferScope = null,\n bufferKey = null,\n bufferString = '',\n\n isSkipping = false;\n\n var options = options || {};\n if (options.comments !== true) options.comments = false;\n\n while (input) {\n // Inside the input stream loop, the `input` string is trimmed down as matches\n // are found, and fires a call to the matching parse*() function.\n var match;\n\n if (commandKey.exec(input)) {\n match = commandKey.exec(input);\n\n parseCommandKey(match[1].toLowerCase());\n\n } else if (!isSkipping && startKey.exec(input) &&\n (!stackScope || stackScope.arrayType !== 'simple')) {\n match = startKey.exec(input);\n\n parseStartKey(match[1], match[2] || '');\n\n } else if (!isSkipping && arrayElement.exec(input) && stackScope && stackScope.array &&\n (stackScope.arrayType !== 'complex' && stackScope.arrayType !== 'freeform') &&\n stackScope.flags.indexOf('+') < 0) {\n match = arrayElement.exec(input);\n\n parseArrayElement(match[1]);\n\n } else if (!isSkipping && scopePattern.exec(input)) {\n match = scopePattern.exec(input);\n\n parseScope(match[1], match[2], match[3]);\n\n } else if (nextLine.exec(input)) {\n match = nextLine.exec(input);\n\n parseText(match[0]);\n\n } else {\n // End of document reached\n parseText(input);\n input = '';\n }\n\n if (match) input = input.substring(match[0].length);\n }\n\n // The following parse functions add to the global `data` object and update\n // scoping variables to keep track of what we're parsing.\n\n function parseStartKey(key, restOfLine) {\n // When a new key is encountered, the rest of the line is immediately added as\n // its value, by calling `flushBuffer`.\n flushBuffer();\n\n incrementArrayElement(key);\n\n if (stackScope && stackScope.flags.indexOf('+') > -1) key = 'value';\n\n bufferKey = key;\n bufferString = restOfLine;\n\n flushBufferInto(key, {replace: true});\n }\n\n function parseArrayElement(value) {\n flushBuffer();\n\n stackScope.arrayType = stackScope.arrayType || 'simple';\n\n stackScope.array.push('');\n bufferKey = stackScope.array;\n bufferString = value;\n flushBufferInto(stackScope.array, {replace: true});\n }\n\n function parseCommandKey(command) {\n // if isSkipping, don't parse any command unless :endskip\n\n if (isSkipping && !(command === \"endskip\" || command === \"ignore\")) return flushBuffer();\n\n switch (command) {\n case \"end\":\n // When we get to an end key, save whatever was in the buffer to the last\n // active key.\n if (bufferKey) flushBufferInto(bufferKey, {replace: false});\n return;\n\n case \"ignore\":\n // When \":ignore\" is reached, stop parsing immediately\n input = '';\n break;\n\n case \"skip\":\n isSkipping = true;\n break;\n\n case \"endskip\":\n isSkipping = false;\n break;\n }\n\n flushBuffer();\n }\n\n function parseScope(scopeType, flags, scopeKey) {\n // Throughout the parsing, `scope` refers to one of the following:\n // * `data`\n // * an object - one level within `data` - when we're within a {scope} block\n // * an object at the end of an array - which is one level within `data` -\n // when we're within an [array] block.\n //\n // `scope` changes whenever a scope key is encountered. It also changes\n // within parseStartKey when we start a new object within an array.\n flushBuffer();\n\n if (scopeKey == '') {\n\n // Move up a level\n var lastStackItem = stack.pop();\n scope = (lastStackItem ? lastStackItem.scope : data) || data\n stackScope = stack[stack.length - 1];\n\n } else if (scopeType === '[' || scopeType === '{') {\n var nesting = false;\n var keyScope = data;\n\n // If the flags include \".\", drill down into the appropriate scope.\n if (flags.indexOf('.') > -1) {\n incrementArrayElement(scopeKey, flags);\n nesting = true;\n if (stackScope) keyScope = scope;\n\n // Otherwise, make sure we reset to the global scope\n } else {\n scope = data;\n stack = [];\n }\n\n // Within freeforms, the `type` of nested objects and arrays is taken\n // verbatim from the `keyScope`.\n if (stackScope && stackScope.flags.indexOf('+') > -1) {\n var parsedScopeKey = scopeKey;\n\n // Outside of freeforms, dot-notation interpreted as nested data.\n } else {\n var keyBits = scopeKey.split('.');\n for (var i=0; i<keyBits.length - 1; i++) {\n keyScope = keyScope[keyBits[i]] = keyScope[keyBits[i]] || {};\n }\n var parsedScopeKey = keyBits[keyBits.length - 1];\n }\n\n var stackScopeItem = {\n array: null,\n arrayType: null,\n arrayFirstKey: null,\n flags: flags,\n scope: scope\n };\n \n // Content of nested scopes within a freeform should be stored under \"value.\"\n var isNestedFreeform = stackScope && stackScope.flags.indexOf('+') > -1 && flags.indexOf('.') > -1;\n\n if (scopeType == '[') {\n if (isNestedFreeform) parsedScopeKey = 'value'\n stackScopeItem.array = keyScope[parsedScopeKey] = [];\n if (flags.indexOf('+') > -1) stackScopeItem.arrayType = 'freeform';\n if (nesting) {\n stack.push(stackScopeItem);\n } else {\n stack = [stackScopeItem];\n }\n stackScope = stack[stack.length - 1];\n\n } else if (scopeType == '{') {\n if (nesting) {\n if (isNestedFreeform) scope = scope.value = {};\n else scope = keyScope[parsedScopeKey] = keyScope = {};\n stack.push(stackScopeItem);\n } else {\n scope = keyScope[parsedScopeKey] = (typeof keyScope[parsedScopeKey] === 'object') ? keyScope[parsedScopeKey] : {};\n stack = [stackScopeItem];\n }\n stackScope = stack[stack.length - 1];\n }\n }\n }\n\n function parseText(text) {\n if (stackScope && stackScope.flags.indexOf('+') > -1 && text.match(/[^\\n\\r\\s]/)) {\n stackScope.array.push({\"type\": \"text\", \"value\": text.replace(/(^\\s*)|(\\s*$)/g, '')});\n } else {\n bufferString += input.substring(0, text.length);\n }\n }\n\n function incrementArrayElement(key) {\n // Special handling for arrays. If this is the start of the array, remember\n // which key was encountered first. If this is a duplicate encounter of\n // that key, start a new object.\n\n if (stackScope && stackScope.array) {\n // If we're within a simple array, ignore\n stackScope.arrayType = stackScope.arrayType || 'complex';\n if (stackScope.arrayType === 'simple') return;\n\n // arrayFirstKey may be either another key, or null\n if (stackScope.arrayFirstKey === null || stackScope.arrayFirstKey === key) stackScope.array.push(scope = {});\n if (stackScope.flags.indexOf('+') > -1) {\n scope.type = key\n } else {\n stackScope.arrayFirstKey = stackScope.arrayFirstKey || key;\n }\n }\n }\n\n function formatValue(value, type) {\n if (options.comments) {\n value = value.replace(/(?:^\\\\)?\\[[^\\[\\]\\n\\r]*\\](?!\\])/mg, \"\"); // remove comments\n value = value.replace(/\\[\\[([^\\[\\]\\n\\r]*)\\]\\]/g, \"[$1]\"); // [[]] => []\n }\n\n if (type == 'append') {\n // If we're appending to a multi-line string, escape special punctuation\n // by using a backslash at the beginning of any line.\n // Note we do not do this processing for the first line of any value.\n value = value.replace(new RegExp('^(\\\\s*)\\\\\\\\', 'gm'), \"$1\");\n }\n\n return value;\n }\n\n function flushBuffer() {\n var result = bufferString + '';\n bufferString = '';\n bufferKey = null;\n return result;\n }\n\n function flushBufferInto(key, options) {\n options = options || {};\n var existingBufferKey = bufferKey;\n var value = flushBuffer();\n\n if (options.replace) {\n value = formatValue(value, 'replace').replace(new RegExp('^\\\\s*'), '');\n bufferString = (new RegExp('\\\\s*$')).exec(value)[0];\n bufferKey = existingBufferKey\n } else {\n value = formatValue(value, 'append');\n }\n\n if (typeof key === 'object') {\n // key is an array\n if (options.replace) key[key.length - 1] = '';\n\n key[key.length - 1] += value.replace(new RegExp('\\\\s*$'), '');\n\n } else {\n var keyBits = key.split('.');\n bufferScope = scope;\n\n for (var i=0; i<keyBits.length - 1; i++) {\n if (typeof bufferScope[keyBits[i]] === 'string') bufferScope[keyBits[i]] = {};\n bufferScope = bufferScope[keyBits[i]] = bufferScope[keyBits[i]] || {};\n }\n\n if (options.replace) bufferScope[keyBits[keyBits.length - 1]] = '';\n\n bufferScope[keyBits[keyBits.length - 1]] += value.replace(new RegExp('\\\\s*$'), '');\n }\n }\n\n flushBuffer();\n return data;\n}\n\nvar root = this;\nvar archieml = {load: load};\n\nif (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = archieml;\n }\n exports.archieml = archieml;\n} else {\n this.archieml = archieml;\n}\n\nif (typeof define === 'function' && define.amd) {\n define('archieml', [], function() {\n return archieml;\n });\n}\n}.call(this))\n","var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global)\n\nvar support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = global.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n global.fetch = fetch\n global.Headers = Headers\n global.Request = Request\n global.Response = Response\n}\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","import canBeZero from './canBeZero.js';\n\nexport default function makeAccessor (acc) {\n\tif (!canBeZero(acc)) return null;\n\tif (Array.isArray(acc)) {\n\t\treturn d => acc.map(k => {\n\t\t\treturn typeof k !== 'function' ? d[k] : k(d);\n\t\t});\n\t} else if (typeof acc !== 'function') { // eslint-disable-line no-else-return\n\t\treturn d => d[acc];\n\t}\n\treturn acc;\n}\n","/* --------------------------------------------\n *\n * Return a truthy value if is zero\n *\n * --------------------------------------------\n */\nexport default function canBeZero (val) {\n\tif (val === 0) {\n\t\treturn true;\n\t}\n\treturn val;\n}\n","/* --------------------------------------------\n *\n * Remove undefined fields from an object\n *\n * --------------------------------------------\n */\n\n// From Object.fromEntries polyfill https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js#L1\nfunction fromEntries(iter) {\n\tconst obj = {};\n\n\tfor (const pair of iter) {\n\t\tif (Object(pair) !== pair) {\n\t\t\tthrow new TypeError(\"iterable for fromEntries should yield objects\");\n\t\t}\n\n\t\t// Consistency with Map: contract is that entry has \"0\" and \"1\" keys, not\n\t\t// that it is an array or iterable.\n\n\t\tconst { \"0\": key, \"1\": val } = pair;\n\n\t\tObject.defineProperty(obj, key, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\twritable: true,\n\t\t\tvalue: val,\n\t\t});\n\t}\n\n\treturn obj;\n}\n\nexport default function filterObject (obj, comparisonObj = {}) {\n\treturn fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn value !== undefined\n\t\t\t&& comparisonObj[key] === undefined;\n\t}));\n}\n","/* --------------------------------------------\n * If we have a domain from settings, fill in\n * any null values with ones from our measured extents\n * otherwise, return the measured extent\n */\nexport default function partialDomain (domain = [], directive) {\n\tif (Array.isArray(directive) === true) {\n\t\treturn directive.map((d, i) => {\n\t\t\tif (d === null) {\n\t\t\t\treturn domain[i];\n\t\t\t}\n\t\t\treturn d;\n\t\t});\n\t}\n\treturn domain;\n}\n","import partialDomain from '../utils/partialDomain.js';\n\nexport default\tfunction calcDomain (s) {\n\treturn function domainCalc ([$extents, $domain]) {\n\t\treturn $extents ? partialDomain($extents[s], $domain) : $domain;\n\t};\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import { scaleLinear, scaleSqrt } from 'd3-scale';\n\nexport default {\n\tx: scaleLinear,\n\ty: scaleLinear,\n\tz: scaleLinear,\n\tr: scaleSqrt\n};\n","export default function identity (d) {\n\treturn d;\n}\n","import findScaleType from './findScaleType.js';\nimport identity from '../utils/identity.js';\n\nfunction log(sign) {\n\treturn x => Math.log(sign * x);\n}\n\nfunction exp(sign) {\n\treturn x => sign * Math.exp(x);\n}\n\nfunction symlog(c) {\n\treturn x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n}\n\nfunction symexp(c) {\n\treturn x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n}\n\nfunction pow(exponent) {\n\treturn function powFn(x) {\n\t\treturn x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\t};\n}\n\nexport default function getPadFunctions(scale) {\n\tconst scaleType = findScaleType(scale);\n\n\tif (scaleType === 'log') {\n\t\tconst sign = Math.sign(scale.domain()[0]);\n\t\treturn { lift: log(sign), ground: exp(sign), scaleType };\n\t}\n\tif (scaleType === 'pow') {\n\t\tconst exponent = 1;\n\t\treturn { lift: pow(exponent), ground: pow(1 / exponent), scaleType };\n\t}\n\tif (scaleType === 'sqrt') {\n\t\tconst exponent = 0.5;\n\t\treturn { lift: pow(exponent), ground: pow(1 / exponent), scaleType };\n\t}\n\tif (scaleType === 'symlog') {\n\t\tconst constant = 1;\n\t\treturn { lift: symlog(constant), ground: symexp(constant), scaleType };\n\t}\n\n\treturn { lift: identity, ground: identity, scaleType };\n}\n","/* --------------------------------------------\n *\n * Returns a modified scale domain by in/decreasing\n * the min/max by taking the desired difference\n * in pixels and converting it to units of data.\n * Returns an array that you can set as the new domain.\n * Padding contributed by @veltman.\n * See here for discussion of transforms: https://github.com/d3/d3-scale/issues/150\n *\n * --------------------------------------------\n */\nimport getPadFunctions from '../helpers/getPadFunctions.js';\n\nexport default function padScale (scale, padding) {\n\tif (typeof scale.range !== 'function') {\n\t\tthrow new Error('Scale method `range` must be a function');\n\t}\n\tif (typeof scale.domain !== 'function') {\n\t\tthrow new Error('Scale method `domain` must be a function');\n\t}\n\tif (!Array.isArray(padding)) {\n\t\treturn scale.domain();\n\t}\n\n\tif (scale.domain().length !== 2) {\n\t\tconsole.warn('[LayerCake] The scale is expected to have a domain of length 2 to use padding. Are you sure you want to use padding? Your scale\\'s domain is:', scale.domain());\n\t}\n\tif (scale.range().length !== 2) {\n\t\tconsole.warn('[LayerCake] The scale is expected to have a range of length 2 to use padding. Are you sure you want to use padding? Your scale\\'s range is:', scale.range());\n\t}\n\n\tconst { lift, ground } = getPadFunctions(scale);\n\n\tconst d0 = scale.domain()[0];\n\n\tconst isTime = Object.prototype.toString.call(d0) === '[object Date]';\n\n\tconst [d1, d2] = scale.domain().map(d => {\n\t\treturn isTime ? lift(d.getTime()) : lift(d);\n\t});\n\tconst [r1, r2] = scale.range();\n\tconst paddingLeft = padding[0] || 0;\n\tconst paddingRight = padding[1] || 0;\n\n\tconst step = (d2 - d1) / (Math.abs(r2 - r1) - paddingLeft - paddingRight); // Math.abs() to properly handle reversed scales\n\n\treturn [d1 - paddingLeft * step, paddingRight * step + d2].map(d => {\n\t\treturn isTime ? ground(new Date(d)) : ground(d);\n\t});\n}\n","/* --------------------------------------------\n *\n * Determine whether a scale is a log, symlog, power or other\n * This is not meant to be exhaustive of all the different types of\n * scales in d3-scale and focuses on continuous scales\n *\n * --------------------------------------------\n */\nexport default function findScaleType(scale) {\n\tif (scale.constant) {\n\t\treturn 'symlog';\n\t}\n\tif (scale.base) {\n\t\treturn 'log';\n\t}\n\tif (scale.exponent) {\n\t\tif (scale.exponent() === 0.5) {\n\t\t\treturn 'sqrt';\n\t\t}\n\t\treturn 'pow';\n\t}\n\treturn 'other';\n}\n","import defaultScales from '../settings/defaultScales.js';\nimport partialDomain from '../utils/partialDomain.js';\nimport padScale from '../utils/padScale.js';\nimport getDefaultRange from '../settings/getDefaultRange.js';\n\nexport default function createScale (s) {\n\treturn function scaleCreator ([$scale, $extents, $domain, $padding, $nice, $reverse, $width, $height, $range, $percentScale]) {\n\t\tif ($extents === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst defaultRange = getDefaultRange(s, $width, $height, $reverse, $range, $percentScale);\n\n\t\tconst scale = $scale === defaultScales[s] ? $scale() : $scale.copy();\n\n\t\t/* --------------------------------------------\n\t\t * On creation, `$domain` will already have any nulls filled in\n\t\t * But if we set it via the context it might not, so rerun it through partialDomain\n\t\t */\n\t\tscale\n\t\t\t.domain(partialDomain($extents[s], $domain))\n\t\t\t.range(defaultRange);\n\n\t\tif ($padding) {\n\t\t\tscale.domain(padScale(scale, $padding));\n\t\t}\n\n\t\tif ($nice === true) {\n\t\t\tif (typeof scale.nice === 'function') {\n\t\t\t\tscale.nice();\n\t\t\t} else {\n\t\t\t\tconsole.error(`[Layer Cake] You set \\`${s}Nice: true\\` but the ${s}Scale does not have a \\`.nice\\` method. Ignoring...`);\n\t\t\t}\n\t\t}\n\n\t\treturn scale;\n\t};\n}\n","/* eslint-disable no-nested-ternary */\nfunction calcBaseRange(s, width, height, reverse, percentRange) {\n\tlet min;\n\tlet max;\n\tif (percentRange === true) {\n\t\tmin = 0;\n\t\tmax = 100;\n\t} else {\n\t\tmin = s === 'r' ? 1 : 0;\n\t\tmax = s === 'y' ? height : s === 'r' ? 25 : width;\n\t}\n\treturn reverse === true ? [max, min] : [min, max];\n}\n\nexport default function getDefaultRange(s, width, height, reverse, range, percentRange) {\n\treturn !range\n\t\t? calcBaseRange(s, width, height, reverse, percentRange)\n\t\t: typeof range === 'function'\n\t\t\t? range({ width, height })\n\t\t\t: range;\n}\n","export default function createGetter ([$acc, $scale]) {\n\treturn d => {\n\t\tconst val = $acc(d);\n\t\tif (Array.isArray(val)) {\n\t\t\treturn val.map(v => $scale(v));\n\t\t}\n\t\treturn $scale(val);\n\t};\n}\n","export default function getRange([$scale]) {\n\tif (typeof $scale === 'function') {\n\t\tif (typeof $scale.range === 'function') {\n\t\t\treturn $scale.range();\n\t\t}\n\t\tconsole.error('[LayerCake] Your scale doesn\\'t have a `.range` method?');\n\t}\n\treturn null;\n}\n","export default {\n\tx: false,\n\ty: true,\n\tz: false,\n\tr: false\n};\n","<script>\n\timport { setContext } from 'svelte';\n\timport { writable, derived } from 'svelte/store';\n\n\timport makeAccessor from './utils/makeAccessor.js';\n\timport filterObject from './utils/filterObject.js';\n\timport calcExtents from './lib/calcExtents.js';\n\timport calcDomain from './helpers/calcDomain.js';\n\timport createScale from './helpers/createScale.js';\n\timport createGetter from './helpers/createGetter.js';\n\timport getRange from './helpers/getRange.js';\n\timport defaultScales from './settings/defaultScales.js';\n\timport defaultReverses from './settings/defaultReverses.js';\n\n\texport let ssr = false;\n\texport let pointerEvents = true;\n\texport let position = 'relative';\n\texport let percentRange = false;\n\n\texport let width = undefined;\n\texport let height = undefined;\n\n\texport let containerWidth = width || 100;\n\texport let containerHeight = height || 100;\n\n\texport let element = undefined;\n\n\t/* --------------------------------------------\n\t * Parameters\n\t * Values that computed properties are based on and that\n\t * can be easily extended from config values\n\t *\n\t */\n\texport let x = undefined;\n\texport let y = undefined;\n\texport let z = undefined;\n\texport let r = undefined;\n\texport let custom = {};\n\texport let data = [];\n\texport let xDomain = undefined;\n\texport let yDomain = undefined;\n\texport let zDomain = undefined;\n\texport let rDomain = undefined;\n\texport let xNice = false;\n\texport let yNice = false;\n\texport let zNice = false;\n\texport let rNice = false;\n\texport let xReverse = defaultReverses.x;\n\texport let yReverse = defaultReverses.y;\n\texport let zReverse = defaultReverses.z;\n\texport let rReverse = defaultReverses.r;\n\texport let xPadding = undefined;\n\texport let yPadding = undefined;\n\texport let zPadding = undefined;\n\texport let rPadding = undefined;\n\texport let xScale = defaultScales.x;\n\texport let yScale = defaultScales.y;\n\texport let zScale = defaultScales.y;\n\texport let rScale = defaultScales.r;\n\texport let xRange = undefined;\n\texport let yRange = undefined;\n\texport let zRange = undefined;\n\texport let rRange = undefined;\n\texport let padding = {};\n\texport let extents = {};\n\texport let flatData = undefined;\n\n\t/* --------------------------------------------\n\t * Preserve a copy of our passed in settings before we modify them\n\t * Return this to the user's context so they can reference things if need be\n\t * Add the active keys since those aren't on our settings object.\n\t * This is mostly an escape-hatch\n\t */\n\tconst config = {};\n\t$: if (x) config.x = x;\n\t$: if (y) config.y = y;\n\t$: if (z) config.z = z;\n\t$: if (r) config.r = r;\n\t$: if (xDomain) config.xDomain = xDomain;\n\t$: if (yDomain) config.yDomain = yDomain;\n\t$: if (zDomain) config.zDomain = zDomain;\n\t$: if (rDomain) config.rDomain = rDomain;\n\t$: if (xRange) config.xRange = xRange;\n\t$: if (yRange) config.yRange = yRange;\n\t$: if (zRange) config.zRange = zRange;\n\t$: if (rRange) config.rRange = rRange;\n\n\t/* --------------------------------------------\n\t * Make store versions of each parameter\n\t * Prefix these with `_` to keep things organized\n\t */\n\tconst _percentRange = writable();\n\tconst _containerWidth = writable();\n\tconst _containerHeight = writable();\n\tconst _x = writable();\n\tconst _y = writable();\n\tconst _z = writable();\n\tconst _r = writable();\n\tconst _custom = writable();\n\tconst _data = writable();\n\tconst _xDomain = writable();\n\tconst _yDomain = writable();\n\tconst _zDomain = writable();\n\tconst _rDomain = writable();\n\tconst _xNice = writable();\n\tconst _yNice = writable();\n\tconst _zNice = writable();\n\tconst _rNice = writable();\n\tconst _xReverse = writable();\n\tconst _yReverse = writable();\n\tconst _zReverse = writable();\n\tconst _rReverse = writable();\n\tconst _xPadding = writable();\n\tconst _yPadding = writable();\n\tconst _zPadding = writable();\n\tconst _rPadding = writable();\n\tconst _xScale = writable();\n\tconst _yScale = writable();\n\tconst _zScale = writable();\n\tconst _rScale = writable();\n\tconst _xRange = writable();\n\tconst _yRange = writable();\n\tconst _zRange = writable();\n\tconst _rRange = writable();\n\tconst _padding = writable();\n\tconst _flatData = writable();\n\tconst _extents = writable();\n\tconst _config = writable(config);\n\n\t$: _percentRange.set(percentRange);\n\t$: _containerWidth.set(containerWidth);\n\t$: _containerHeight.set(containerHeight);\n\t$: _x.set(makeAccessor(x));\n\t$: _y.set(makeAccessor(y));\n\t$: _z.set(makeAccessor(z));\n\t$: _r.set(makeAccessor(r));\n\t$: _xDomain.set(xDomain);\n\t$: _yDomain.set(yDomain);\n\t$: _zDomain.set(zDomain);\n\t$: _rDomain.set(rDomain);\n\t$: _custom.set(custom);\n\t$: _data.set(data);\n\t$: _xNice.set(xNice);\n\t$: _yNice.set(yNice);\n\t$: _zNice.set(zNice);\n\t$: _rNice.set(rNice);\n\t$: _xReverse.set(xReverse);\n\t$: _yReverse.set(yReverse);\n\t$: _zReverse.set(zReverse);\n\t$: _rReverse.set(rReverse);\n\t$: _xPadding.set(xPadding);\n\t$: _yPadding.set(yPadding);\n\t$: _zPadding.set(zPadding);\n\t$: _rPadding.set(rPadding);\n\t$: _xScale.set(xScale);\n\t$: _yScale.set(yScale);\n\t$: _zScale.set(zScale);\n\t$: _rScale.set(rScale);\n\t$: _xRange.set(xRange);\n\t$: _yRange.set(yRange);\n\t$: _zRange.set(zRange);\n\t$: _rRange.set(rRange);\n\t$: _padding.set(padding);\n\t$: _extents.set(filterObject(extents));\n\t$: _flatData.set(flatData || data);\n\n\t/* --------------------------------------------\n\t * Create derived values\n\t * Suffix these with `_d`\n\t */\n\tconst activeGetters_d = derived([_x, _y, _z, _r], ([$x, $y, $z, $r]) => {\n\t\tconst obj = {};\n\t\tif ($x) {\n\t\t\tobj.x = $x;\n\t\t}\n\t\tif ($y) {\n\t\t\tobj.y = $y;\n\t\t}\n\t\tif ($z) {\n\t\t\tobj.z = $z;\n\t\t}\n\t\tif ($r) {\n\t\t\tobj.r = $r;\n\t\t}\n\t\treturn obj;\n\t});\n\n\tconst padding_d = derived([_padding, _containerWidth, _containerHeight], ([$padding]) => {\n\t\tconst defaultPadding = { top: 0, right: 0, bottom: 0, left: 0 };\n\t\treturn Object.assign(defaultPadding, $padding);\n\t});\n\n\tconst box_d = derived([_containerWidth, _containerHeight, padding_d], ([$containerWidth, $containerHeight, $padding]) => {\n\t\tconst b = {};\n\t\tb.top = $padding.top;\n\t\tb.right = $containerWidth - $padding.right;\n\t\tb.bottom = $containerHeight - $padding.bottom;\n\t\tb.left = $padding.left;\n\t\tb.width = b.right - b.left;\n\t\tb.height = b.bottom - b.top;\n\t\tif (b.width <= 0) {\n\t\t\tconsole.error('[LayerCake] Target div has zero or negative width. Did you forget to set an explicit width in CSS on the container?');\n\t\t}\n\t\tif (b.height <= 0) {\n\t\t\tconsole.error('[LayerCake] Target div has zero or negative height. Did you forget to set an explicit height in CSS on the container?');\n\t\t}\n\t\treturn b;\n\t});\n\n\tconst width_d = derived([box_d], ([$box]) => {\n\t\treturn $box.width;\n\t});\n\n\tconst height_d = derived([box_d], ([$box]) => {\n\t\treturn $box.height;\n\t});\n\n\t/* --------------------------------------------\n\t * Calculate extents by taking the extent of the data\n\t * and filling that in with anything set by the user\n\t */\n\tconst extents_d = derived([_flatData, activeGetters_d, _extents], ([$flatData, $activeGetters, $extents]) => {\n\t\tconst getters = filterObject($activeGetters, $extents);\n\t\tif (Object.keys(getters).length > 0) {\n\t\t\treturn { ...calcExtents($flatData, getters), ...$extents };\n\t\t} else {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tconst xDomain_d = derived([extents_d, _xDomain], calcDomain('x'));\n\tconst yDomain_d = derived([extents_d, _yDomain], calcDomain('y'));\n\tconst zDomain_d = derived([extents_d, _zDomain], calcDomain('z'));\n\tconst rDomain_d = derived([extents_d, _rDomain], calcDomain('r'));\n\n\tconst xScale_d = derived([_xScale, extents_d, xDomain_d, _xPadding, _xNice, _xReverse, width_d, height_d, _xRange, _percentRange], createScale('x'));\n\tconst xGet_d = derived([_x, xScale_d], createGetter);\n\n\tconst yScale_d = derived([_yScale, extents_d, yDomain_d, _yPadding, _yNice, _yReverse, width_d, height_d, _yRange, _percentRange], createScale('y'));\n\tconst yGet_d = derived([_y, yScale_d], createGetter);\n\n\tconst zScale_d = derived([_zScale, extents_d, zDomain_d, _zPadding, _zNice, _zReverse, width_d, height_d, _zRange, _percentRange], createScale('z'));\n\tconst zGet_d = derived([_z, zScale_d], createGetter);\n\n\tconst rScale_d = derived([_rScale, extents_d, rDomain_d, _rPadding, _rNice, _rReverse, width_d, height_d, _rRange, _percentRange], createScale('r'));\n\tconst rGet_d = derived([_r, rScale_d], createGetter);\n\n\tconst xRange_d = derived([xScale_d], getRange);\n\tconst yRange_d = derived([yScale_d], getRange);\n\tconst zRange_d = derived([zScale_d], getRange);\n\tconst rRange_d = derived([rScale_d], getRange);\n\n\tconst aspectRatio_d = derived([width_d, height_d], ([$aspectRatio, $width, $height]) => {\n\t\treturn $width / $height;\n\t});\n\n\t$: context = {\n\t\tactiveGetters: activeGetters_d,\n\t\twidth: width_d,\n\t\theight: height_d,\n\t\tpercentRange: _percentRange,\n\t\taspectRatio: aspectRatio_d,\n\t\tcontainerWidth: _containerWidth,\n\t\tcontainerHeight: _containerHeight,\n\t\tx: _x,\n\t\ty: _y,\n\t\tz: _z,\n\t\tr: _r,\n\t\tcustom: _custom,\n\t\tdata: _data,\n\t\txNice: _xNice,\n\t\tyNice: _yNice,\n\t\tzNice: _zNice,\n\t\trNice: _rNice,\n\t\txReverse: _xReverse,\n\t\tyReverse: _yReverse,\n\t\tzReverse: _zReverse,\n\t\trReverse: _rReverse,\n\t\txPadding: _xPadding,\n\t\tyPadding: _yPadding,\n\t\tzPadding: _zPadding,\n\t\trPadding: _rPadding,\n\t\tpadding: padding_d,\n\t\tflatData: _flatData,\n\t\textents: extents_d,\n\t\txDomain: xDomain_d,\n\t\tyDomain: yDomain_d,\n\t\tzDomain: zDomain_d,\n\t\trDomain: rDomain_d,\n\t\txRange: xRange_d,\n\t\tyRange: yRange_d,\n\t\tzRange: zRange_d,\n\t\trRange: rRange_d,\n\t\tconfig: _config,\n\t\txScale: xScale_d,\n\t\txGet: xGet_d,\n\t\tyScale: yScale_d,\n\t\tyGet: yGet_d,\n\t\tzScale: zScale_d,\n\t\tzGet: zGet_d,\n\t\trScale: rScale_d,\n\t\trGet: rGet_d\n\t};\n\n\t$: setContext('LayerCake', context);\n</script>\n\n{#if (ssr === true || typeof window !== 'undefined')}\n\t<div\n\t\tbind:this={element}\n\t\tclass=\"layercake-container\"\n\t\tstyle=\"\n\t\t\tposition:{position};\n\t\t\t{position === 'absolute' ? 'top:0;right:0;bottom:0;left:0;' : ''}\n\t\t\t{pointerEvents === false ? 'pointer-events:none;' : ''}\n\t\t\"\n\t\tbind:clientWidth={containerWidth}\n\t\tbind:clientHeight={containerHeight}\n\t>\n\t\t<slot\n\t\t\t{element}\n\t\t\twidth={$width_d}\n\t\t\theight={$height_d}\n\t\t\taspectRatio={$aspectRatio_d}\n\t\t\tcontainerWidth={$_containerWidth}\n\t\t\tcontainerHeight={$_containerHeight}\n\t\t></slot>\n\t</div>\n{/if}\n\n<style>\n\t.layercake-container,\n\t.layercake-container :global(*) {\n\t\tbox-sizing: border-box;\n\t}\n\t.layercake-container {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n</style>\n","/* --------------------------------------------\n *\n * Calculate the extents of desired fields\n * For example, a fields object like this:\n * `{'x': d => d.x, 'y': d => d.y}`\n * For data like this:\n * [{ x: 0, y: -10 }, { x: 10, y: 0 }, { x: 5, y: 10 }]\n * Returns an object like:\n * `{ x: [0, 10], y: [-10, 10] }`\n *\n * --------------------------------------------\n */\nexport default function calcExtents (data, fields) {\n\tif (!Array.isArray(data)) {\n\t\tthrow new TypeError('The first argument of calcExtents() must be an array.');\n\t}\n\n\tif (\n\t\tArray.isArray(fields)\n\t\t|| fields === undefined\n\t\t|| fields === null\n\t) {\n\t\tthrow new TypeError('The second argument of calcExtents() must be an '\n\t\t+ 'object with field names as keys as accessor functions as values.');\n\t}\n\n\tconst extents = {};\n\n\tconst keys = Object.keys(fields);\n\tconst kl = keys.length;\n\tlet i;\n\tlet j;\n\tlet k;\n\tlet s;\n\tlet min;\n\tlet max;\n\tlet acc;\n\tlet val;\n\n\tconst dl = data.length;\n\tfor (i = 0; i < kl; i += 1) {\n\t\ts = keys[i];\n\t\tacc = fields[s];\n\t\tmin = null;\n\t\tmax = null;\n\t\tfor (j = 0; j < dl; j += 1) {\n\t\t\tval = acc(data[j]);\n\t\t\tif (Array.isArray(val)) {\n\t\t\t\tconst vl = val.length;\n\t\t\t\tfor (k = 0; k < vl; k += 1) {\n\t\t\t\t\tif (val[k] !== undefined && val[k] !== null && Number.isNaN(val[k]) === false) {\n\t\t\t\t\t\tif (min === null || val[k] < min) {\n\t\t\t\t\t\t\tmin = val[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (max === null || val[k] > max) {\n\t\t\t\t\t\t\tmax = val[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (val !== undefined && val !== null && Number.isNaN(val) === false) {\n\t\t\t\tif (min === null || val < min) {\n\t\t\t\t\tmin = val;\n\t\t\t\t}\n\t\t\t\tif (max === null || val > max) {\n\t\t\t\t\tmax = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\textents[s] = [min, max];\n\t}\n\n\treturn extents;\n}\n","<script>\n\timport { getContext } from 'svelte';\n\n\texport let element = undefined;\n\texport let viewBox = undefined;\n\texport let zIndex = undefined;\n\texport let pointerEvents = undefined;\n\n\tlet zIndexStyle = '';\n\t$: zIndexStyle = typeof zIndex !== 'undefined' ? `z-index:${zIndex};` : '';\n\n\tlet pointerEventsStyle = '';\n\t$: pointerEventsStyle = pointerEvents === false ? 'pointer-events:none;' : '';\n\n\tconst { containerWidth, containerHeight, padding } = getContext('LayerCake');\n</script>\n<svg\n\tbind:this={element}\n\tclass=\"layercake-layout-svg\"\n\t{viewBox}\n\twidth={$containerWidth}\n\theight={$containerHeight}\n\tstyle=\"{zIndexStyle}{pointerEventsStyle}\"\n>\n\t<defs>\n\t\t<slot name=\"defs\"></slot>\n\t</defs>\n\t<g class=\"layercake-layout-svg_g\" transform=\"translate({$padding.left}, {$padding.top})\">\n\t\t<slot {element}></slot>\n\t</g>\n</svg>\n\n<style>\n\tsvg {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\toverflow: visible;\n\t}\n</style>\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function bisector(f) {\n let delta = f;\n let compare1 = f;\n let compare2 = f;\n\n if (f.length !== 2) {\n delta = (d, x) => f(d) - x;\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","export { identity as linear } from '../internal/index.mjs';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","import { writable } from '../store/index.mjs';\nimport { now, loop, assign } from '../internal/index.mjs';\nimport { linear } from '../easing/index.mjs';\n\nfunction is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction tick_spring(ctx, last_value, current_value, target_value) {\n if (typeof current_value === 'number' || is_date(current_value)) {\n // @ts-ignore\n const delta = target_value - current_value;\n // @ts-ignore\n const velocity = (current_value - last_value) / (ctx.dt || 1 / 60); // guard div by 0\n const spring = ctx.opts.stiffness * delta;\n const damper = ctx.opts.damping * velocity;\n const acceleration = (spring - damper) * ctx.inv_mass;\n const d = (velocity + acceleration) * ctx.dt;\n if (Math.abs(d) < ctx.opts.precision && Math.abs(delta) < ctx.opts.precision) {\n return target_value; // settled\n }\n else {\n ctx.settled = false; // signal loop to keep ticking\n // @ts-ignore\n return is_date(current_value) ?\n new Date(current_value.getTime() + d) : current_value + d;\n }\n }\n else if (Array.isArray(current_value)) {\n // @ts-ignore\n return current_value.map((_, i) => tick_spring(ctx, last_value[i], current_value[i], target_value[i]));\n }\n else if (typeof current_value === 'object') {\n const next_value = {};\n for (const k in current_value) {\n // @ts-ignore\n next_value[k] = tick_spring(ctx, last_value[k], current_value[k], target_value[k]);\n }\n // @ts-ignore\n return next_value;\n }\n else {\n throw new Error(`Cannot spring ${typeof current_value} values`);\n }\n}\nfunction spring(value, opts = {}) {\n const store = writable(value);\n const { stiffness = 0.15, damping = 0.8, precision = 0.01 } = opts;\n let last_time;\n let task;\n let current_token;\n let last_value = value;\n let target_value = value;\n let inv_mass = 1;\n let inv_mass_recovery_rate = 0;\n let cancel_task = false;\n function set(new_value, opts = {}) {\n target_value = new_value;\n const token = current_token = {};\n if (value == null || opts.hard || (spring.stiffness >= 1 && spring.damping >= 1)) {\n cancel_task = true; // cancel any running animation\n last_time = now();\n last_value = new_value;\n store.set(value = target_value);\n return Promise.resolve();\n }\n else if (opts.soft) {\n const rate = opts.soft === true ? .5 : +opts.soft;\n inv_mass_recovery_rate = 1 / (rate * 60);\n inv_mass = 0; // infinite mass, unaffected by spring forces\n }\n if (!task) {\n last_time = now();\n cancel_task = false;\n task = loop(now => {\n if (cancel_task) {\n cancel_task = false;\n task = null;\n return false;\n }\n inv_mass = Math.min(inv_mass + inv_mass_recovery_rate, 1);\n const ctx = {\n inv_mass,\n opts: spring,\n settled: true,\n dt: (now - last_time) * 60 / 1000\n };\n const next_value = tick_spring(ctx, last_value, value, target_value);\n last_time = now;\n last_value = value;\n store.set(value = next_value);\n if (ctx.settled) {\n task = null;\n }\n return !ctx.settled;\n });\n }\n return new Promise(fulfil => {\n task.promise.then(() => {\n if (token === current_token)\n fulfil();\n });\n });\n }\n const spring = {\n set,\n update: (fn, opts) => set(fn(target_value, value), opts),\n subscribe: store.subscribe,\n stiffness,\n damping,\n precision\n };\n return spring;\n}\n\nfunction get_interpolator(a, b) {\n if (a === b || a !== a)\n return () => a;\n const type = typeof a;\n if (type !== typeof b || Array.isArray(a) !== Array.isArray(b)) {\n throw new Error('Cannot interpolate values of different type');\n }\n if (Array.isArray(a)) {\n const arr = b.map((bi, i) => {\n return get_interpolator(a[i], bi);\n });\n return t => arr.map(fn => fn(t));\n }\n if (type === 'object') {\n if (!a || !b)\n throw new Error('Object cannot be null');\n if (is_date(a) && is_date(b)) {\n a = a.getTime();\n b = b.getTime();\n const delta = b - a;\n return t => new Date(a + t * delta);\n }\n const keys = Object.keys(b);\n const interpolators = {};\n keys.forEach(key => {\n interpolators[key] = get_interpolator(a[key], b[key]);\n });\n return t => {\n const result = {};\n keys.forEach(key => {\n result[key] = interpolators[key](t);\n });\n return result;\n };\n }\n if (type === 'number') {\n const delta = b - a;\n return t => a + t * delta;\n }\n throw new Error(`Cannot interpolate ${type} values`);\n}\nfunction tweened(value, defaults = {}) {\n const store = writable(value);\n let task;\n let target_value = value;\n function set(new_value, opts) {\n if (value == null) {\n store.set(value = new_value);\n return Promise.resolve();\n }\n target_value = new_value;\n let previous_task = task;\n let started = false;\n let { delay = 0, duration = 400, easing = linear, interpolate = get_interpolator } = assign(assign({}, defaults), opts);\n if (duration === 0) {\n if (previous_task) {\n previous_task.abort();\n previous_task = null;\n }\n store.set(value = target_value);\n return Promise.resolve();\n }\n const start = now() + delay;\n let fn;\n task = loop(now => {\n if (now < start)\n return true;\n if (!started) {\n fn = interpolate(value, new_value);\n if (typeof duration === 'function')\n duration = duration(value, new_value);\n started = true;\n }\n if (previous_task) {\n previous_task.abort();\n previous_task = null;\n }\n const elapsed = now - start;\n if (elapsed > duration) {\n store.set(value = new_value);\n return false;\n }\n // @ts-ignore\n store.set(value = fn(easing(elapsed / duration)));\n return true;\n });\n return task.promise;\n }\n return {\n set,\n update: (fn, opts) => set(fn(target_value, value), opts),\n subscribe: store.subscribe\n };\n}\n\nexport { spring, tweened };\n","const seed = 1;\nconst randomness1 = 5;\nconst randomness2 = 2;\n\nexport default class {\n constructor(items, radiusFun, xFun, padding, yOffset) {\n this.items = items;\n this.radiusFun = radiusFun;\n this.xFun = xFun;\n this.padding = padding;\n this.yOffset = yOffset;\n this.tieBreakFn = this._sfc32(0x9E3779B9, 0x243F6A88, 0xB7E15162, seed);\n this.maxR = Math.max(...items.map(d => radiusFun(d)));\n this.rng = this._sfc32(1, 2, 3, seed);\n }\n\n calculateYPositions() {\n let all = this.items\n .map((d, i) => ({\n datum: d,\n originalIndex: i,\n x: this.xFun(d),\n r: this.radiusFun(d) + this.padding,\n y: null,\n placed: false\n }))\n .sort((a, b) => a.x - b.x);\n all.forEach(function(d, i) {\n d.index = i;\n });\n let tieBreakFn = this.tieBreakFn;\n all.forEach(function(d) {\n d.tieBreaker = tieBreakFn(d.x);\n });\n let allSortedByPriority = [...all].sort((a, b) => {\n let key_a = this.radiusFun(a.datum) + a.tieBreaker * randomness1;\n let key_b = this.radiusFun(b.datum) + b.tieBreaker * randomness1;\n if (key_a != key_b) return key_b - key_a;\n return a.x - b.x;\n });\n for (let item of allSortedByPriority) {\n item.placed = true;\n item.y = this._getBestYPosition(item, all);\n }\n all.sort((a, b) => a.originalIndex - b.originalIndex);\n return all.map(d => ({\n x: d.x,\n y: d.y + this.yOffset,\n r: this.radiusFun(d.datum),\n uni: d.datum.unique\n }));\n }\n\n // Random number generator (for reproducibility)\n // https://stackoverflow.com/a/47593316\n _sfc32(a, b, c, d) {\n let rng = function() {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n for (let i = 0; i < 10; i++) {\n rng();\n }\n return rng;\n }\n\n _getBestYPosition(item, all) {\n let forbiddenIntervals = [];\n for (let step of [-1, 1]) {\n let xDist;\n let r = item.r;\n for (\n let i = item.index + step;\n i >= 0 &&\n i < all.length &&\n (xDist = Math.abs(item.x - all[i].x)) < r + this.maxR;\n i += step\n ) {\n let other = all[i];\n if (!other.placed) continue;\n let sumOfRadii = r + other.r;\n if (xDist >= r + other.r) continue;\n let yDist = Math.sqrt(sumOfRadii * sumOfRadii - xDist * xDist);\n let forbiddenInterval = [other.y - yDist, other.y + yDist];\n forbiddenIntervals.push(forbiddenInterval);\n }\n }\n if (forbiddenIntervals.length == 0) {\n return item.r * (this.rng() - .5) * randomness2;\n }\n let candidatePositions = forbiddenIntervals.flat();\n candidatePositions.push(0);\n candidatePositions.sort((a, b) => {\n let abs_a = Math.abs(a);\n let abs_b = Math.abs(b);\n if (abs_a < abs_b) return -1;\n if (abs_a > abs_b) return 1;\n return a - b;\n });\n // find first candidate position that is not in any of the\n // forbidden intervals\n for (let i = 0; i < candidatePositions.length; i++) {\n let position = candidatePositions[i];\n if (\n forbiddenIntervals.every(\n interval => position <= interval[0] || position >= interval[1]\n )\n ) {\n return position;\n }\n }\n }\n}","<script>\n import { getContext } from 'svelte';\n\timport AccurateBeeswarm from '../../js/accurate-beeswarm';\n\n\tconst { data, x, y, r, xGet, yGet, rGet, xScale, yScale, yRange, rRange, custom, width } = getContext('LayerCake');\n\nlet coords = $custom.coords;\nlet type = $custom.type;\nlet prevWidth = $width;\n\n$: setCoords($data, $custom, $x, $y, $r, $width);\n\n function setCoords(data, custom, x, y, r, width) {\n\t\n\t//console.log(data);\n\n\n let mode = custom.mode;\n let padding = custom.padding;\n\t\tlet duration = custom.animation && width == prevWidth ? custom.duration : 0;\n\t\t\n\t\tprevWidth = width;\n\n let newcoords;\n if (type == 'bar') {\n newcoords = data.map((d, i) => d.map((e, j) => {\n\t\t\t return {\n\t\t\t\t x: mode == 'default' || mode =='grouped' || ((mode == 'comparison' || mode == 'stacked') && i == 0) ? 0 :\n\t\t\t\t mode == 'stacked' ? x(data[i - 1][j]) :\n\t\t\t\t\t x(e),\n\t\t\t\t y: mode == 'grouped' ? $yGet(e) + (i * (1 / data.length) * $yScale.bandwidth()) : $yGet(e),\n\t\t\t\t w: mode == 'default' || mode =='grouped' || ((mode == 'comparison' || mode == 'stacked') && i == 0) ? x(e) :\n\t\t\t\t mode == 'stacked' ? x(e) - x(data[i - 1][j]) :\n\t\t\t\t\t 0,\n\t\t\t\t h: mode == 'grouped' ? $yScale.bandwidth() / data.length : $yScale.bandwidth()\n\t\t\t }\n\t\t }));\n } else if (type == 'column') {\n newcoords = data.map((d, i) => d.map((e, j) => {\n return {\n\t\t\t x: mode == 'grouped' && $xScale.bandwidth ? $xGet(e) + (i * (1 / data.length) * $xScale.bandwidth()) :\n\t\t\t mode == 'grouped' ? $xGet(e)[0] + (i * (1 / data.length) * Math.max(0, ($xGet(e)[1] - $xGet(e)[0]))) :\n\t\t\t $xScale.bandwidth ? $xGet(e) : $xGet(e)[0],\n\t\t\t y: y(e),\n\t\t\t\t w: mode == 'grouped' && $xScale.bandwidth ? $xScale.bandwidth() / data.length :\n\t\t mode == 'grouped' ? Math.max(0, ($xGet(e)[1] - $xGet(e)[0])) / data.length :\n\t\t\t $xScale.bandwidth ? $xScale.bandwidth() :\n\t\t\t Math.max(0, ($xGet(e)[1] - $xGet(e)[0])),\n\t\t\t\t h: mode == 'default' || mode == 'grouped' || ((mode == 'comparison' || mode == 'stacked') && i == 0) ? y(e) :\n\t\t\t\t mode == 'stacked' ? y(e) - y(data[i - 1][j]) :\n\t\t\t\t 0\n\t\t }\n\t }));\n } else if (type == 'scatter') {\n let rVal = (d) => r ? $rGet(d) : $rRange[0];\n\t \n newcoords = y ? data.map(\n\t\t\t d => ({x: x(d), y: y(d), r: rVal(d)})\n\t\t ) : new AccurateBeeswarm(\n\t\t data,\n\t\t d => rVal(d),\n\t\t d => $xGet(d),\n\t\t padding,\n\t\t $yRange[0] / 2\n\t\t ).calculateYPositions().map(d => {\n\t\t\t\treturn ({x: $xScale.invert(d.x), y: $yScale.invert(d.y), r: d.r, u: d.uni})\n\t\t\t});\n } else if (type == 'line') {\n\t\t\tnewcoords = data.map((d) => d.map((e) => {\n\t\t\t\treturn {\n\t\t\t\t\tx: x(e),\n\t\t\t\t\ty: y(e)\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n coords.set(newcoords, {duration});\n }\n</script>","<script>\n\timport { getContext, createEventDispatcher } from 'svelte';\n\n\tconst { data, xScale, yScale, zGet, config, custom } = getContext('LayerCake');\n\tconst dispatch = createEventDispatcher();\n\n\tlet lineWidth = 3.5;\n\texport let hover = false;\n\texport let hovered = null;\n\texport let select = false;\n\texport let selected = null;\n\texport let highlighted = [];\n\t\n\tlet coords = $custom.coords;\n\tlet idKey = $custom.idKey;\n\tlet colorHover = $custom.colorHover ? $custom.colorHover : 'orange';\n\tlet colorSelect = $custom.colorSelect ? $custom.colorSelect : '#206095';\n\tlet colorHighlight = $custom.colorHighlight ? $custom.colorHighlight : '#206095';\n\n\t// Function to make SVG path\n\tconst makePath = (group) => {\n\t\tlet path = 'M' + group\n\t\t.map(d => {\n\t\t\treturn $xScale(d.x) + ',' + $yScale(d.y);\n\t\t})\n\t\t.join('L');\n\t\treturn path;\n\t}\n\n\tfunction doHover(e, d) {\n\t\tif (hover) {\n\t\t\thovered = d ? d : null;\n\t\t\tdispatch('hover', {\n\t\t\t\tid: hovered,\n\t\t\t\tdata: d,\n\t\t\t\tevent: e\n\t\t\t});\n\t\t}\n\t}\n\tfunction doSelect(e, d) {\n\t\tif (!hovered) {\n\t\t\thovered = d ? d : null;\n\t\t\tdispatch('select', {\n\t\t\t\tid: selected,\n\t\t\t\tdata: d,\n\t\t\t\tevent: e\n\t\t\t});\n\t\t}\n\t}\n</script>\n\n{#if $coords}\n<g class=\"line-group\">\n\t{#each $coords as group, i}\n\t\t<path\n\t\t class=\"path-hover\"\n\t\t\td=\"{makePath(group)}\"\n\t\t/>\n\t <path\n\t\t class=\"path-line\"\n\t\t\td=\"{makePath(group)}\"\n\t\t\tstroke=\"{\n\t\t\t\t$config.z ? $zGet($data[i][0]) : $config.zRange[0]}\"\n\t\t\tstroke-width=\"{\n\t\t\t\tlineWidth\n\t\t\t}\"\n\t\t/>\n\n\t\t{#each group as e, j}\n\t\t\t<circle\n\t\t\t\tclass\n\t\t\t\tcx={$xScale(e.x)}\n\t\t\t\tcy={$yScale(e.y)}\n\t\t\t\tr={(hovered)? ((hovered.x == e.x)&(hovered.y == e.y)) ? 8 : 4 : 4}\n\t\t\t\tfill=\"{(hovered)? ((hovered.x == e.x)&(hovered.y == e.y)) ? 'orange' : $zGet($data[i][0]) : $zGet($data[i][0])}\"\n\t\t\t\tstroke=\"{(hovered)? ((hovered.x == e.x)&(hovered.y == e.y)) ? 'orange' : $zGet($data[i][0]) : $zGet($data[i][0])}\"\n\t\t\t\tstroke-width=\"{(hovered)? ((hovered.x == e.x)&(hovered.y == e.y)) ? 2 : 3 : 3}\"\n\t\t\t\ton:mouseover={f => doHover(f, e)}\n\t\t\t\ton:mouseleave={f => doHover(f)}\n\t\t\t\ton:focus={f => doHover(f, e)}\n\t\t\t\ton:blur={f => doHover(f, e)}\n\t\t\t\ton:click={f => doSelect(f, e)}\n\t\t\t/>\n\t\t{/each}\n\t{/each}\n\t\n\t{#if idKey && (hover || selected || highlighted[0])}\n\t{#each $coords as group, i}\n\t\t{#if [hovered, selected, ...highlighted].includes($data[i][0][idKey]) }\n\t <path\n\t\t class=\"path-overlay\"\n\t\t\td=\"{makePath(group)}\"\n\t\t\tstroke=\"{\n\t\t\t\t$data[i][0][idKey] == hovered ? colorHover :\n\t\t\t\t$data[i][0][idKey] == selected ? colorSelect :\n\t\t\t\tcolorHighlight\n\t\t\t}\"\n\t\t\tstroke-width=\"{\n\t\t\t\tlineWidth + 1.5\n\t\t\t}\"\n\t\t/>\n\t\t{/if}\n\t{/each}\n\t{/if}\n</g>\n{/if}\n\n<style>\n\tpath {\n\t\tfill: none;\n\t\tstroke-linejoin: round;\n\t\tstroke-linecap: round;\n\t}\n\t.path-hover {\n\t\tstroke: rgba(255,255,255,0);\n\t\tstroke-width: 7;\n\t}\n\t.path-line, .path-overlay {\n\t\tpointer-events: none;\n\t}\n</style>\n\n\n","<script>\n\timport { getContext } from 'svelte';\n\n\tconst { data, xScale, yScale, zGet, zRange, config, custom } = getContext('LayerCake');\n\t\n\texport let opacity = 1; // Opacity of fills\n\t\n\tlet coords = $custom.coords;\n\tlet idKey = $custom.idKey;\n\n\t// Function to make SVG path\n\tconst makeArea = (group, i) => {\n\t\tlet yRange = $yScale.range();\n\t\tlet path1 = 'M' + group\n\t\t.map(d => {\n\t\t\treturn $xScale(d.x) + ',' + $yScale(d.y);\n\t\t})\n\t\t.join('L');\n\t\tlet path2 = i == 0 ?\n\t\t 'L' + group\n\t\t .map(d => {\n\t\t\t return $xScale(d.x) + ',' + yRange[0];\n\t\t })\n\t\t\t.reverse()\n\t\t .join('L') :\n\t\t\t'L' + [...$coords[i - 1]].reverse()\n\t\t\t.map(d => {\n\t\t\t\treturn $xScale(d.x) + ',' + $yScale(d.y);\n\t\t\t})\n\t\t\t.join('L');\n\t\tlet area = path1 + path2 + 'Z';\n\t\treturn area;\n\t}\n</script>\n\n{#if $coords}\n<g class=\"area-group\">\n\t{#each $coords as group, i}\n\t<path class='path-area' d='{makeArea(group, i)}' fill={$config.z ? $zGet($data[i][0]) : $zRange[0]} {opacity}></path>\n\t{/each}\n</g>\n{/if}\n","<script>\n\timport { getContext } from 'svelte';\n\n\tconst { width, height, xScale, yRange } = getContext('LayerCake');\n\n\texport let gridlines = true;\n\texport let tickDashed = false;\n\texport let tickMarks = false;\n\texport let tickColor = '#bbb';\n\texport let textColor = '#666';\n\texport let formatTick = d => d;\n\texport let snapTicks = false;\n\texport let ticks = undefined;\n\texport let xTick = undefined;\n\texport let yTick = 16;\n\texport let dxTick = 0;\n\texport let dyTick = 0;\n\texport let prefix = '';\n\texport let suffix = '';\n\n\t$: isBandwidth = typeof $xScale.bandwidth === 'function';\n\n\t$: tickVals = Array.isArray(ticks) ? ticks :\n\t\tisBandwidth ?\n\t\t\t$xScale.domain() :\n\t\t\ttypeof ticks === 'function' ?\n\t\t\t\tticks($xScale.ticks()) :\n\t\t\t\t\t$xScale.ticks(ticks);\n\n\tfunction textAnchor(i) {\n\t\tif (snapTicks === true) {\n\t\t\tif (i === 0) {\n\t\t\t\treturn 'start';\n\t\t\t}\n\t\t\tif (i === tickVals.length - 1) {\n\t\t\t\treturn 'end';\n\t\t\t}\n\t\t}\n\t\treturn 'middle';\n\t}\n\t\n</script>\n\n<g class='axis x-axis' class:snapTicks>\n\t{#each tickVals as tick, i}\n\t\t<g class='tick tick-{tick}' transform='translate({$xScale(tick)},{$yRange[0]})'>\n\t\t\t{#if gridlines !== false}\n\t\t\t\t<line class=\"gridline\" class:dashed={tickDashed} y1='{$height * -1}' y2='0' x1='0' x2='0' style='stroke: {tickColor}'></line>\n\t\t\t{/if}\n\t\t\t{#if tickMarks === true}\n\t\t\t\t<line class=\"tick-mark\" y1='{0}' y2='{6}' x1='{xTick || isBandwidth ? $xScale.bandwidth() / 2 : 0}' x2='{xTick || isBandwidth ? $xScale.bandwidth() / 2 : 0}' style='stroke: {tickColor}'></line>\n\t\t\t{/if}\n\t\t\t\n\t\t\t{#if $width > 270 || tick == 2015 || tick == 2020}\n\t\t\t<text\n\t\t\t\tx=\"{xTick || isBandwidth ? $xScale.bandwidth() / 2 : 0}\"\n\t\t\t\ty='{yTick}'\n\t\t\t\tdx='{dxTick}'\n\t\t\t\tdy='{dyTick}'\n\t\t\t\ttext-anchor='{textAnchor(i)}'\n\t\t\t\tstyle='fill: {textColor}'>\n\t\t\t\t\t{i == tickVals.length - 1 ? prefix + formatTick(tick) + suffix : formatTick(tick)}\n\t\t\t\t</text>\n\t\t\t{/if}\n\t\t</g>\n\t{/each}\n</g>\n\n<style>\n\t.tick {\n\t}\n\n\t.tick .tick-mark,\n\t.tick.tick-0 line {\n\t\tstroke-dasharray: 0;\n\t}\n\n\t.dashed {\n\t\tstroke-dasharray: 2;\n\t}\n\t/* This looks slightly better */\n\t.axis.snapTicks .tick:last-child text {\n\t\ttransform: translateX(3px);\n\t}\n\t.axis.snapTicks .tick.tick-0 text {\n\t\ttransform: translateX(-3px);\n\t}\n</style>\n","<script>\n\timport { getContext } from 'svelte';\n\n\tconst { padding, xRange, yScale } = getContext('LayerCake');\n\n\texport let ticks = 4;\n\texport let tickMarks = false;\n\texport let gridlines = true;\n\texport let tickDashed = false;\n\texport let tickColor = '#bbb';\n\texport let textColor = '#666';\n\texport let formatTick = d => d;\n\texport let xTick = 0;\n\texport let yTick = 0;\n\texport let dxTick = 0;\n\texport let dyTick = -4;\n\texport let textAnchor = 'start';\n\texport let prefix = '';\n\texport let suffix = '';\n\n\t$: isBandwidth = typeof $yScale.bandwidth === 'function';\n\n\t$: tickVals = Array.isArray(ticks) ? ticks :\n\t\tisBandwidth ?\n\t\t\t$yScale.domain() :\n\t\t\ttypeof ticks === 'function' ?\n\t\t\t\tticks($yScale.ticks()) :\n\t\t\t\t\t$yScale.ticks(ticks);\n</script>\n\n<g class='axis y-axis' transform='translate({-$padding.left}, 0)'>\n\t{#each tickVals as tick, i}\n\t\t<g class='tick tick-{tick}' transform='translate({$xRange[0] + (isBandwidth ? $padding.left : 0)}, {$yScale(tick)})'>\n\t\t\t{#if gridlines !== false}\n\t\t\t\t<line\n\t\t\t\t\tclass=\"gridline\"\n\t\t\t\t\tx2='100%'\n\t\t\t\t\ty1={yTick + (isBandwidth ? ($yScale.bandwidth() / 2) : 0)}\n\t\t\t\t\ty2={yTick + (isBandwidth ? ($yScale.bandwidth() / 2) : 0)}\n\t\t\t\t\tclass:dashed={tickDashed}\n\t\t\t\t\tstyle='\n\t\t\t\t\tstroke: {tickColor}; \n\t\t\t\t\tstroke-width: {1}\n\t\t\t\t\t<!-- stroke: {(tick==100)?'#206095':tickColor}; -->\n\t\t\t\t\t<!-- stroke-width: {(tick==100)?2:1} -->\n\t\t\t\t\t'></line>\n\t\t\t{/if}\n\t\t\t{#if tickMarks === true}\n\t\t\t\t<line\n\t\t\t\t\tclass='tick-mark'\n\t\t\t\t\tx1='0'\n\t\t\t\t\tx2='{isBandwidth ? -6 : 6}'\n\t\t\t\t\ty1={yTick + (isBandwidth ? ($yScale.bandwidth() / 2) : 0)}\n\t\t\t\t\ty2={yTick + (isBandwidth ? ($yScale.bandwidth() / 2) : 0)}\n\t\t\t\t\tstyle='stroke: {tickColor}'\n\t\t\t\t></line>\n\t\t\t{/if}\n\t\t\t<text\n\t\t\t\tx='{xTick}'\n\t\t\t\ty='{yTick + (isBandwidth ? $yScale.bandwidth() / 2 : 0)}'\n\t\t\t\tdx='{isBandwidth ? -4 : dxTick}'\n\t\t\t\tdy='{isBandwidth ? 4 : dyTick}'\n\t\t\t\tstyle=\"\n\t\t\t\ttext-anchor:{isBandwidth ? 'end' : textAnchor}; \n\t\t\t\tfill: {textColor};\n\t\t\t\t<!-- fill: {(tick==100)?'#206095':textColor}; -->\n\t\t\t\t<!-- font-weight: {(tick==100)?600:400}; -->\n\t\t\t\t\">\n\t\t\t\t\t{i == tickVals.length - 1 ? prefix + formatTick(tick) + suffix : formatTick(tick)}\n\t\t\t</text>\n\t\t</g>\n\t{/each}\n</g>\n\n<style>\n\t.tick {\n\t}\n\t.dashed {\n\t\tstroke-dasharray: 2;\n\t}\n\t.tick.tick-0 line {\n\t\tstroke-dasharray: 0;\n\t}\n\t/* .gridline {\n\t\tstroke-width: 1;\n\t} */\n</style>\n","<script>\n export let domain = null;\n export let colors = null;\n export let line = false; // true if line chart\n export let comparison = false; // true if chart uses bars + markers for comparison\n export let horizontal = true; // true if marker lines should be horizontal, false if vertical\n export let markerWidth = 2.5;\n export let markerLength = 13;\n export let round = false; // to represent round markers\n\n function capi(s) {\n\t\treturn s.charAt(0).toUpperCase() + s.slice(1);\n\t}\n</script>\n\n{#if Array.isArray(domain) && Array.isArray(colors)}\n <ul class=\"legend\">\n {#each domain as label, i}\n <li>\n <div\n class=\"bullet\"\n class:round\n style=\"background-color: {colors[i]}; width: {!horizontal && (line || (comparison && i != 0)) ? markerWidth : markerLength}px; height: {horizontal && (line || (comparison && i != 0)) ? markerWidth : markerLength}px\"\n />\n {capi(label)}\n </li>\n {/each}\n </ul>\n{/if}\n\n<style>\n ul.legend {\n margin: 0;\n padding: 0;\n }\n ul.legend li {\n display: inline;\n font-size: .8em;\n }\n ul.legend li + li {\n margin-left: 8px;\n }\n .bullet {\n\t\tdisplay: inline-block;\n vertical-align: middle;\n\t}\n .round {\n border-radius: 50%;\n }\n</style>","<div class=\"title\"><slot/></div>\n\n<style>\n\t.title {\n\t\tfont-size: 1.1em;\n\t\tfont-weight: bold;\n\t\tmargin-bottom: 10px;\n\t}\n</style>","<div class=\"footer\"><slot/></div>\n\n<style>\n\t.footer {\n\t\tfont-size: .8em;\n\t\tcolor: grey;\n\t\tmargin-top: 5px;\n\t}\n</style>","<script>\r\n\timport { getContext } from 'svelte';\r\n\r\n\tconst { data, xScale, yScale, custom, zGet} = getContext('LayerCake');\r\n\r\n\texport let hovered = null;\r\n\texport let selected = null;\r\n\texport let width;\r\n\t\r\n\tlet coords = $custom.coords;\r\n\tlet idKey = $custom.idKey;\r\n\tlet labelKey = $custom.labelKey;\r\n\t// let colorHover = $custom.colorHover ? $custom.colorHover : 'orange';\r\n\t// let colorSelect = $custom.colorSelect ? $custom.colorSelect : '#206095';\r\n\r\n\t// let say = $coords.map(d => d.at(-1).y)[0]\r\n\r\n\tconsole.log(width)\r\n\tconsole.log(window.innerWidth-5-$data[0][0][labelKey].length*9)\r\n\r\n\tfunction similarY(x, i) {\r\n\r\n\t\tx = x + i*0.111\r\n\r\n\t\tlet azza = $coords.map( d => $yScale(d[d.length -1].y) - x )\r\n\t\tlet azzaorder = azza.sort((a, b) => { return Math.abs(a) - Math.abs(b) } )\r\n\r\n\t\tlet finalPositions = $coords.map( d => $yScale(d[d.length -1].y))\r\n\r\n\t\tfinalPositions.forEach(function(e,ind) {finalPositions[ind] += ind*0.111})\r\n\r\n\t\tlet finalPositionsExcludingCurrent = finalPositions.filter((el, index) => {return (index != i)})\r\n\r\n\t\tif (Math.min(...finalPositionsExcludingCurrent) < x && Math.max(...finalPositionsExcludingCurrent) > x) {return x}\r\n\r\n\t\telse if (Math.min(...finalPositionsExcludingCurrent) - x < 15 && Math.min(...finalPositionsExcludingCurrent) - x > 0) {return x - 20}\r\n\r\n\t\telse if (x - Math.max(...finalPositionsExcludingCurrent) < 15 && x - Math.max(...finalPositionsExcludingCurrent) > 0) {return x + 20} \r\n\r\n\t\telse {return x}\r\n\r\n\t}\r\n\tfunction capi(s) {\r\n\t\treturn s.charAt(0).toUpperCase() + s.slice(1);\r\n\t}\r\n\r\n\tfunction splitStringEqually(inputString) {\r\n // Split the input string into an array of words\r\n const words = inputString.trim().split(' ');\r\n\r\n // Calculate the approximate midpoint\r\n const midpoint = Math.ceil(words.length / 2);\r\n\r\n // Split the words array into two parts\r\n const firstHalf = words.slice(0, midpoint);\r\n const secondHalf = words.slice(midpoint);\r\n\r\n // Join the words back into strings\r\n const firstString = firstHalf.join(' ');\r\n const secondString = secondHalf.join(' ');\r\n\r\n return [firstString, secondString];\r\n}\r\n\r\n</script>\r\n\r\n{#if $coords}\r\n<defs>\r\n\t<filter x=\"0\" y=\"0\" width=\"1\" height=\"1\" id=\"bgfillhov\">\r\n\t\t<feFlood flood-color=\"rgba(255,255,255,0.8)\" result=\"bg\" />\r\n\t\t<feMerge>\r\n\t\t\t<feMergeNode in=\"bg\"/>\r\n\t\t\t<feMergeNode in=\"SourceGraphic\"/>\r\n\t\t</feMerge>\r\n\t</filter>\r\n\t<filter x=\"0\" y=\"0\" width=\"1\" height=\"1\" id=\"bgfill\">\r\n\t\t<feFlood flood-color=\"rgba(255,255,255,0.8)\" result=\"bg\" />\r\n\t\t<feMerge>\r\n\t\t\t<feMergeNode in=\"bg\"/>\r\n\t\t\t<feMergeNode in=\"SourceGraphic\"/>\r\n\t\t</feMerge>\r\n\t</filter>\r\n</defs>\r\n\r\n<g class=\"label-group\">\r\n\t{#if $coords[0] && $coords[0][0] && $coords[0][0].x}\r\n\t\t{#each $coords as d, i}\r\n\t\t\t<!-- {#if [hovered, selected].includes($data[i][0][idKey])} -->\r\n\t\t\t{#if width/2 <= (window.innerWidth-5-$data[i][0][labelKey].length*9)}\r\n\r\n\t\t\t{#if capi($data[i][0][labelKey]).length < 25}\r\n\r\n\t\t\t<text\r\n\t\t\t\tclass=\"label\"\r\n\t\t\t\ttransform=\"translate(2,3)\"\r\n\t\t\t\tfilter=\"url(#bgfill)\"\r\n\t\t\t\tfill={i == 1 ? \"#333\" : $zGet($data[i][0])}\r\n\t\t\t\tx={$xScale(d[d.length - 1].x)+10}\r\n\t\t\t\ty={ similarY($yScale(d[d.length - 1].y), i) }>\r\n\t\t\t\t{capi($data[i][0][labelKey])}\r\n\t\t\t</text>\r\n\r\n\t\t\t{:else}\r\n\t\t\t\r\n\t\t\t<text\r\n\t\t\t\tclass=\"label\"\r\n\t\t\t\ttransform=\"translate(2,3)\"\r\n\t\t\t\tfill={i == 1 ? \"#333\" : $zGet($data[i][0])}\r\n\t\t\t\tx={$xScale(d[d.length - 1].x)+10}\r\n\t\t\t\ty={ similarY($yScale(d[d.length - 1].y), i)-7 }>\r\n\t\t\t\t{splitStringEqually(capi($data[i][0][labelKey]))[0]}\r\n\t\t\t</text>\r\n\r\n\t\t\t<text\r\n\t\t\t\tclass=\"label\"\r\n\t\t\t\ttransform=\"translate(2,3)\"\r\n\t\t\t\tfill={i == 1 ? \"#333\" : $zGet($data[i][0])}\r\n\t\t\t\tx={$xScale(d[d.length - 1].x)+10}\r\n\t\t\t\ty={ similarY($yScale(d[d.length - 1].y), i)+7 }>\r\n\t\t\t\t{splitStringEqually(capi($data[i][0][labelKey]))[1]}\r\n\t\t\t</text>\r\n\r\n\t\t\t{/if}\r\n\r\n\t\t\t{:else}\r\n\r\n\t\t\t<text\r\n\t\t\t\tclass=\"label\"\r\n\t\t\t\ttransform=\"translate(2,-8)\"\r\n\t\t\t\tfilter=\"url(#bgfill)\"\r\n\t\t\t\tfill={i == 1 ? \"#333\" : $zGet($data[i][0])}\r\n\t\t\t\tx={$xScale(d[d.length - 1].x)+10}\r\n\t\t\t\ty={ similarY($yScale(d[d.length - 1].y), i) }>\r\n\t\t\t\t{capi($data[i][0][labelKey].substring(0, $data[i][0][labelKey].indexOf(\" \", Math.round($data[i][0][labelKey].length/2-2))))}\r\n\t\t\t</text>\r\n\r\n\t\t\t<text\r\n\t\t\t\tclass=\"label\"\r\n\t\t\t\ttransform=\"translate(2,8)\"\r\n\t\t\t\tfilter=\"url(#bgfill)\"\r\n\t\t\t\tfill={i == 1 ? \"#333\" : $zGet($data[i][0])}\r\n\t\t\t\tx={$xScale(d[d.length - 1].x)+10}\r\n\t\t\t\ty={ similarY($yScale(d[d.length - 1].y), i) }>\r\n\t\t\t\t{capi($data[i][0][labelKey].substring($data[i][0][labelKey].indexOf(\" \", Math.round($data[i][0][labelKey].length/2-2))))}\r\n\t\t\t</text>\r\n\r\n\t\t\t{/if}\r\n\r\n\t\t{/each}\r\n\t{/if}\r\n</g>\r\n\r\n\r\n<g class=\"hover-label-group\">\r\n\t{#if $coords[0] && $coords[0][0] && $coords[0][0].x}\r\n\t\t{#each $coords as d, i}\r\n\t\t\t{#each d as dd}\t\r\n\t\t\t\t{#if hovered == dd}\r\n\t\t\t\t\t<text\r\n\t\t\t\t\t\tclass=\"hover-label\"\r\n\t\t\t\t\t\tfilter=\"url(#bgfillhov)\"\r\n\t\t\t\t\t\tfill={i == 1 ? \"#333\" : $zGet($data[i][0])}\r\n\t\t\t\t\t\tx={$xScale(dd.x)-12}\r\n\t\t\t\t\t\ty={$yScale(dd.y)-15}>\r\n\t\t\t\t\t\t\t{dd.y}\r\n\t\t\t\t\t</text>\r\n\t\t\t\t{/if}\r\n\t\t\t{/each}\r\n\t\t{/each}\r\n\t{/if}\r\n</g>\r\n\r\n\r\n{/if}\r\n\r\n<style>\r\n\t.hover-label {\r\n\t\tfont-weight: 800;\r\n\t}\r\n\t.label {\r\n\t}\r\n</style>","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","<svelte:options accessors={true} />\r\n\r\n<script>\r\n\timport 'whatwg-fetch';\r\n\r\n\timport { LayerCake, Svg } from 'layercake';\r\n\timport { scaleOrdinal, scaleLinear, scaleSymlog } from 'd3-scale';\r\n import { tweened } from 'svelte/motion';\r\n\timport { cubicInOut } from 'svelte/easing';\r\n\timport { groupData, stackData } from '@onsvisual/svelte-charts/src/js/utils';\r\n\r\n\timport SetCoords from './shared/SetCoords.svelte';\r\n\timport Line from './shared/Line.svelte';\r\n\timport Area from './shared/Area.svelte';\r\n\timport AxisX from './shared/AxisX.svelte';\r\n\timport AxisY from './shared/AxisY.svelte';\r\n\timport Legend from './shared/Legend.svelte';\r\n\timport Title from './shared/Title.svelte';\r\n\timport Footer from './shared/Footer.svelte';\r\n\timport Labels from './shared/Labels.svelte';\r\n import { max } from 'd3';\r\n\r\n\texport let width;\r\n\texport let data;\r\n\texport let height = 350; // number of pixels or valid css height string\r\n\texport let animation = false;\r\n\texport let duration = 800;\r\n\texport let xKey = 'x';\r\n\texport let yKey = 'y';\r\n\texport let zKey = null;\r\n\texport let idKey = zKey;\r\n\texport let labelKey = idKey;\r\n\texport let yScale = 'linear';\r\n\texport let yFormatTick = d => d;\r\n\texport let yMax = null;\r\n\texport let yMin = null;\r\n\texport let xAxis = true;\r\n\texport let yAxis = true;\r\n\texport let xTicks = 4;\r\n\texport let yTicks = 4;\r\n\texport let title = null;\r\n\texport let footer = null;\r\n\texport let legend = false;\r\n\texport let labels = true;\r\n\texport let snapTicks = true;\r\n\texport let line = true;\r\n\texport let area = true;\r\n\texport let mode = 'default';\r\n\texport let areaOpacity = 1;\r\n\texport let padding = { top: 20, bottom: 20, left: 45, right: 0 };\r\n\texport let color = null;\r\n\texport let colors = ['#27A0CC', 'silver', '#871A5B'] // ['#27A0CC', '#871A5B', '#A8BD3A'] // ['#A8BD3A', '#003C57', '#27A0CC', '#118C7B', '#F66068', '#746CB1', '#22D0B6', 'lightgrey', '#206095'];\r\n\texport let lineWidth = 4.5;\r\n\texport let interactive = true;\r\n\texport let xPrefix = \"\";\r\n\texport let xSuffix = \"\";\r\n\texport let yPrefix = \"\";\r\n\texport let ySuffix = \"\";\r\n\texport let hover = true;\r\n\texport let hovered = null;\r\n\texport let colorHover = 'orange';\r\n\texport let select = false;\r\n\texport let selected = null;\r\n\texport let colorSelect = '#206095';\r\n\texport let highlighted = [];\r\n\texport let colorHighlight = '#206095';\r\n\r\n\tvar maxLabelLength = data.reduce(\r\n\t\tfunction (a, b) {\r\n\t\t\treturn a.group.length > b.group.length ? a : b;\r\n\t\t}\r\n\t)[\"group\"].length\r\n\r\n\tconst tweenOptions = {\r\n\t\tduration: duration,\r\n\t\teasing: cubicInOut\r\n\t};\r\n\tconst coords = tweened(undefined, tweenOptions);\r\n\r\n\tconst distinct = (d, i, arr) => arr.indexOf(d) == i;\r\n\r\n\tfunction getTotals(data, keys) {\r\n\t\tlet arr = [];\r\n\t\tkeys.forEach(key => {\r\n\t\t\tlet vals = data.filter(d => d[xKey] == key).map(d => d[yKey]);\r\n\t\t\tlet sum = vals.reduce((acc, curr) => acc + curr);\r\n\t\t\tarr.push(sum);\r\n\t\t});\r\n\t\treturn arr;\r\n\t}\r\n\r\n\t// Functions to animate yDomain\r\n\tconst yDomSet = (data, mode, yKey, yMax) => yMax ? [yMin, yMax] : mode == 'stacked' && yKey ? [yMin, Math.max(...getTotals(data, data.map(d => d[xKey]).filter(distinct)))] : [yMin, Math.max(...data.map(d => d[yKey]))];\r\n\tfunction yDomUpdate(data, mode, yKey, yMax) {\r\n\t\tlet newYDom = yDomSet(data, mode, yKey, yMax);\r\n\t\tif (newYDom[0] != yDom[0] || newYDom[1] != yDom[1]) {\r\n\t\t\tyDomain.set(newYDom, {duration: animation ? duration : 0});\r\n\t\t\tyDom = newYDom;\r\n\t\t}\r\n\t}\r\n\r\n\tlet yDom = yDomSet(data, mode, yKey, yMax);\r\n\tconst yDomain = tweened([Math.min(...data.map(el => {return el.value})), Math.max(...data.map(el => {return el.value})) ], tweenOptions);\r\n\t$: yDomUpdate(data, mode, yKey, yMax);\r\n\t\r\n\t// Function to update zDomain\r\n\t$: zDomain = zKey ? data.map(d => d[zKey]).filter(distinct) : null;\r\n\r\n\t// Create a data series for each zKey (group)\r\n\t$: groupedData = mode == 'stacked' ? stackData(data, zDomain, yKey, zKey) : groupData(data, zDomain, zKey);\r\n\r\n\tlet widthCalc = width;\r\n</script>\r\n\r\n{#if title}\r\n <Title>{title}</Title>\r\n{/if}\r\n<slot name=\"options\"/>\r\n<div class=\"chart-container\" style=\"width: {Math.min(width-50, Math.max(width/2,(window.innerWidth-15-maxLabelLength*9)))+\"px\"}; height: {typeof height == 'number' ? height + 'px' : height }\"\r\n>\r\n\t<LayerCake\r\n\t\t{padding}\r\n\t\tx={xKey}\r\n\t\ty={yKey}\r\n\t\tz={zKey}\r\n\t\tyDomain={$yDomain}\r\n\t\tyScale={yScale == 'log' ? scaleSymlog() : scaleLinear()}\r\n\t\tzScale={scaleOrdinal()}\r\n\t\t{zDomain}\r\n\t\tzRange={colors}\r\n\t\tdata={groupedData}\r\n\t\tflatData={data}\r\n\t\tcustom={{\r\n\t\t\ttype: 'line',\r\n\t\t\tmode,\r\n\t\t\tidKey,\r\n\t\t\tlabelKey,\r\n\t\t\tcoords,\r\n\t\t\tcolorSelect,\r\n\t\t\tcolorHover,\r\n\t\t\tcolorHighlight,\r\n animation,\r\n duration\r\n }}\r\n\t\tlet:width\r\n\t>\r\n\t {#if width > 80} <!-- Hack to prevent rendering before xRange/yRange initialised -->\r\n\t\t<SetCoords/>\r\n\t <slot name=\"back\"/>\r\n\t\t<Svg pointerEvents={interactive}>\r\n {#if xAxis}\r\n\t\t\t <AxisX ticks={xTicks} {snapTicks} prefix={xPrefix} suffix={xSuffix} gridlines={false}/>\r\n {/if}\r\n {#if yAxis}\r\n\t\t\t <AxisY ticks={yTicks} formatTick={yFormatTick} prefix={yPrefix} suffix={ySuffix}/>\r\n {/if}\r\n {#if area}\r\n\t\t\t <Area {mode} opacity={areaOpacity}/>\r\n {/if}\r\n {#if line}\r\n\t\t\t <Line {lineWidth} {select} bind:selected {hover} bind:hovered {highlighted} on:hover on:select/>\r\n {/if}\r\n\t\t\t{#if labels}\r\n\t\t\t\t<Labels {hovered} {selected} width={widthCalc}/>\r\n\t\t\t{/if}\r\n\t\t\t<slot name=\"svg\"/>\r\n\t\t</Svg>\r\n\t\t<slot name=\"front\"/>\r\n\t\t{/if}\r\n\t</LayerCake>\r\n</div>\r\n{#if legend && zDomain}\r\n <Legend domain={zDomain} {colors} {line} markerWidth={lineWidth}/>\r\n{/if}\r\n{#if footer}\r\n <Footer>{footer}</Footer>\r\n{/if}\r\n","export function groupData(data, domain, key) {\n let groups = [];\n if (key) {\n domain.forEach(group => {\n groups.push(data.filter(d => d[key] == group));\n });\n } else {\n groups = [data];\n }\n return groups;\n}\n\nexport function stackData(data, domain, valKey, grpKey) {\n let groups = [];\n let base = JSON.parse(JSON.stringify(data.filter(d => d[grpKey] == domain[0])));\n base.forEach(d => d[valKey] = 0);\n domain.forEach(group => {\n let clone = JSON.parse(JSON.stringify(data.filter(d => d[grpKey] == group)));\n clone.forEach((d, i) => {\n d[valKey] += base[i][valKey];\n base[i][valKey] = d[valKey];\n });\n groups.push(clone);\n });\n return groups;\n}","<script>\n import { text } from \"svelte/internal\";\n\n\n\nexport let x, y, gridlinesParametersArray, fontSize = \"14px\", textAnchorSplit = false;\n\n\ngridlinesParametersArray.forEach((e,i) => {\n\n e[\"textAnchor\"] = \"middle\"\n\n if (textAnchorSplit) {\n\n if (i == 0) {e[\"textAnchor\"] = \"end\"}\n else if (i == gridlinesParametersArray.length-1) {e[\"textAnchor\"] = \"start\"}\n }\n});\n\n</script>\n\n\n<g class=\"x-gridlines\">\n\n {#each gridlinesParametersArray as d, i}\n\n <text\n y=-6\n x={x(d[\"value\"])+{middle: 0, start: -5, end: 5}[d[\"textAnchor\"]]}\n stroke=\"none\"\n fill=\"#333\"\n font-size={fontSize}\n text-anchor={d[\"textAnchor\"]}\n opacity={d[\"opacity\"]*3} \n >{d[\"value\"]}</text>\n\n <!-- svelte-ignore component-name-lowercase -->\n <line\n x1={x(d[\"value\"])}\n x2={x(d[\"value\"])}\n y1=0\n y2={y}\n stroke=\"#333\"\n opacity={d[\"opacity\"]}\n ></line>\n\n {/each}\n\n</g>","<script>\n\nexport let id, position, path, textAnchor, fontSize, opacity, text, stroke, x, y;\n\n\n</script>\n\n<g class={\"annotation\"+id}\n\n\t\t\ttransform={\"translate(\"+position[0]+\",\"+position[1]+\")\"}>\n\t\t\n\t\t\t\t<path\n\t\t\t\td={path}\n\t\t\t\t{stroke}\n {opacity}\n fill=\"none\"\n\t\t\t\t></path>\n\n\t\t\t\t{#if Array.isArray(text)}\n\n\t\t\t\t\t{#each text as line, j}\n\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t{x}\n\t\t\t\t\t\ty={y+j*(fontSize+1)}\n\t\t\t\t\t\t{opacity}\n\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\tfill={stroke}\n\t\t\t\t\t\tfont-size={fontSize+\"px\"}\n\t\t\t\t\t\ttext-anchor={textAnchor}\n\t\t\t\t\t\t>{line}\n\t\t\t\t\t\t</text>\n\n\t\t\t\t\t{/each}\n\n\t\t\t\t{:else}\n\n\t\t\t\t\t<text\n\t\t\t\t\t{x}\n\t\t\t\t\t{y}\n\t\t\t\t\t{opacity}\n\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\tfill={stroke}\n\t\t\t\t\tfont-size={fontSize+\"px\"}\n\t\t\t\t\ttext-anchor={textAnchor}\n\t\t\t\t\t>{text}\n\t\t\t\t\t</text>\n\n\t\t\t\t{/if}\n</g>","<script>\r\n import { curveStepBefore } from \"d3\";\r\n\r\nexport let key, x, yPosition, violinPlotData, violinFuncs, seriesParametersArray, circleData, label, labelYValue = 0, backgroundToLabel = true, labelFontSize = \"14px\", radius=8, hoverLabel = false, indicator = false;\r\n\r\nfunction splitStringEqually(inputString) {\r\n // Split the input string into an array of words\r\n const words = inputString.trim().split(' ');\r\n\r\n // Calculate the approximate midpoint\r\n const midpoint = Math.ceil(words.length / 2);\r\n\r\n // Split the words array into two parts\r\n const firstHalf = words.slice(0, midpoint);\r\n const secondHalf = words.slice(midpoint);\r\n\r\n // Join the words back into strings\r\n const firstString = firstHalf.join(' ');\r\n const secondString = secondHalf.join(' ');\r\n\r\n return [firstString, secondString];\r\n}\r\n\r\nfunction splitStringIntoThree(str) {\r\n const words = str.split(\" \");\r\n const totalWords = words.length;\r\n const third = Math.ceil(totalWords / 3);\r\n\r\n const firstString = words.slice(0, third).join(\" \");\r\n const secondString = words.slice(third, 2 * third).join(\" \");\r\n const thirdString = words.slice(2 * third).join(\" \");\r\n\r\n return [firstString, secondString, thirdString];\r\n}\r\n\r\nfunction handleMouseOver(e) {\r\n\r\n d3.select(this.parentNode.parentNode.parentNode).selectAll(\".plot-group\").attr(\"opacity\", 0.25)\r\n d3.select(this.parentNode.parentNode).selectAll(\"circle\").attr(\"opacity\", 0)\r\n \r\n d3.select(this).attr(\"opacity\", 1).style(\"fill\", \"orange\")\r\n d3.select(this.parentNode).select(\".tooltipLabel\").selectAll(\"text\").attr(\"opacity\", 1)\r\n d3.select(this.parentNode.parentNode).attr(\"opacity\", 1)\r\n \r\n}\r\n\r\nfunction handleMouseOut(e) {\r\n\t\t\r\n d3.select(this.parentNode.parentNode.parentNode).selectAll(\".plot-group\").attr(\"opacity\", 1)\r\n d3.select(this.parentNode.parentNode).selectAll(\"circle\").attr(\"opacity\", 1)\r\n \r\n d3.select(this).attr(\"opacity\", 1).style(\"fill\", null)\r\n d3.select(this.parentNode).select(\".tooltipLabel\").selectAll(\"text\").attr(\"opacity\", 0)\r\n}\r\n\r\n\r\n</script>\r\n\r\n<g class=\"plot-group\"\r\ntransform={\"translate(\"+0+\",\"+yPosition+\")\"}>\r\n\r\n {#if !key}\r\n\r\n <line\r\n y1=0\r\n y2=0\r\n x1=5\r\n x2={x(Math.min(...circleData))}\r\n stroke=\"#e0dede\"\r\n fill=\"none\"\r\n stroke-width=\"0.5px\"\r\n opacity=1\r\n ></line>\r\n\r\n {/if}\r\n\r\n <g class=\"distribution-curve-group\">\r\n\r\n {#each violinFuncs as violinFunc}\r\n\r\n <path\r\n d={violinFunc(violinPlotData)}\r\n stroke=\"none\"\r\n fill=\"#e0dede\"\r\n opacity=1\r\n ></path>\r\n \r\n {/each}\r\n \r\n </g>\r\n\r\n {#if label === undefined || label.length < 25 || !indicator}\r\n\r\n {#if !key}\r\n\r\n {#if backgroundToLabel}\r\n\r\n <text class=\"subdomain-labels-border\"\r\n y={4+labelYValue}\r\n x=0\r\n stroke=\"white\"\r\n fill=\"white\"\r\n font-size={labelFontSize}\r\n text-anchor=\"start\"\r\n stroke-width=\"6px\"\r\n >{label}</text>\r\n\r\n {/if}\r\n\r\n <text class=\"subdomain-labels-main\"\r\n y={4+labelYValue}\r\n x=0\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size={labelFontSize}\r\n text-anchor=\"start\"\r\n >{label}</text>\r\n\r\n {/if}\r\n\r\n {:else if label.length < 40}\r\n\r\n {#if backgroundToLabel}\r\n\r\n <text class=\"subdomain-labels-border\"\r\n y={3+labelYValue}\r\n x=0\r\n stroke=\"white\"\r\n fill=\"white\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n stroke-width=\"6px\"\r\n >{splitStringEqually(label)[0]}</text>\r\n\r\n <text class=\"subdomain-labels-border\"\r\n y={16+labelYValue}\r\n x=0\r\n stroke=\"white\"\r\n fill=\"white\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n stroke-width=\"6px\"\r\n >{splitStringEqually(label)[1]}</text>\r\n\r\n {/if}\r\n\r\n <text class=\"subdomain-labels-main\"\r\n y={3+labelYValue}\r\n x=0\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n >{splitStringEqually(label)[0]}</text>\r\n\r\n <text class=\"subdomain-labels-main\"\r\n y={16+labelYValue}\r\n x=0\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n >{splitStringEqually(label)[1]}</text>\r\n\r\n {:else}\r\n\r\n {#if backgroundToLabel}\r\n\r\n <text class=\"subdomain-labels-border\"\r\n y={3+labelYValue}\r\n x=0\r\n stroke=\"white\"\r\n fill=\"white\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n stroke-width=\"6px\"\r\n >{label === \"Young people in education, employment and apprenticeships\" ? \"Young people in education,\" : splitStringIntoThree(label)[0]}</text>\r\n\r\n <text class=\"subdomain-labels-border\"\r\n y={16+labelYValue}\r\n x=0\r\n stroke=\"white\"\r\n fill=\"white\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n stroke-width=\"6px\"\r\n >{label === \"Young people in education, employment and apprenticeships\" ? \"employment and\" : splitStringIntoThree(label)[1]}</text>\r\n\r\n <text class=\"subdomain-labels-border\"\r\n y={29+labelYValue}\r\n x=0\r\n stroke=\"white\"\r\n fill=\"white\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n stroke-width=\"6px\"\r\n >{label === \"Young people in education, employment and apprenticeships\" ? \"apprenticeships\" : splitStringIntoThree(label)[2]}</text>\r\n\r\n {/if}\r\n\r\n <text class=\"subdomain-labels-main\"\r\n y={3+labelYValue}\r\n x=0\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n >{label === \"Young people in education, employment and apprenticeships\" ? \"Young people in education,\" : splitStringIntoThree(label)[0]}</text>\r\n\r\n <text class=\"subdomain-labels-main\"\r\n y={16+labelYValue}\r\n x=0\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n >{label === \"Young people in education, employment and apprenticeships\" ? \"employment and\" : splitStringIntoThree(label)[1]}</text>\r\n\r\n <text class=\"subdomain-labels-main\"\r\n y={29+labelYValue}\r\n x=0\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size={\"12px\"}\r\n text-anchor=\"start\"\r\n >{label === \"Young people in education, employment and apprenticeships\" ? \"apprenticeships\" : splitStringIntoThree(label)[2]}</text>\r\n\r\n \r\n\r\n\r\n\r\n {/if}\r\n\r\n {#each seriesParametersArray as series, j}\r\n\r\n <g>\r\n\r\n <circle on:mouseover={hoverLabel ? handleMouseOver: null} on:focus={null} on:mouseleave={hoverLabel ? handleMouseOut: null}\r\n cx={x(circleData[j])}\r\n cy={circleData.length == 2 & seriesParametersArray.length == 2 ? (Math.abs(x(circleData[0])-x(circleData[1]))>10 ? 0 : [4,-4][j]) : 0}\r\n r={radius}\r\n stroke=\"white\"\r\n fill={series[\"color\"]}\r\n stroke-width=\"1.5px\"\r\n ></circle>\r\n\r\n {#if hoverLabel}\r\n\r\n <g class=tooltipLabel>\r\n\r\n <text\r\n x={x(circleData[j])}\r\n y={circleData.length == 2 ? (Math.abs(x(circleData[0])-x(circleData[1]))>10 ? -radius*1.5 : -radius*1.5+[4,-4][j]) : -radius*1.5}\r\n font-size={\"14px\"}\r\n pointer-events=\"none\"\r\n stroke-width=\"3px\"\r\n opacity=0\r\n stroke={\"white\"}\r\n fill={\"white\"}\r\n text-anchor=\"middle\"\r\n >{circleData[j].toFixed(1)}</text>\r\n\r\n <text\r\n x={x(circleData[j])}\r\n y={circleData.length == 2 ? (Math.abs(x(circleData[0])-x(circleData[1]))>10 ? -radius*1.5 : -radius*1.5+[4,-4][j]) : -radius*1.5}\r\n font-size={\"14px\"}\r\n pointer-events=\"none\"\r\n stroke-width=\"1px\"\r\n opacity=0\r\n stroke={series[\"color\"]}\r\n fill={series[\"color\"]}\r\n text-anchor=\"middle\"\r\n >{circleData[j].toFixed(1)}</text>\r\n\r\n </g>\r\n \r\n {/if}\r\n\r\n </g>\r\n {/each}\r\n\r\n</g>","<svelte:options accessors={true} />\r\n\r\n<script>\r\n\timport 'whatwg-fetch';\r\n\r\n\timport { scaleLinear } from 'd3-scale';\r\n\timport { line } from 'd3-shape';\r\n\timport XAxis from './distDotPlotComponents/XAxis.svelte';\r\n\timport Annotation from './distDotPlotComponents/Annotation.svelte';\r\n import ViolinDotPlot from './distDotPlotComponents/ViolinDotPlot.svelte';\r\n\r\n\texport let data;\r\n\r\n\texport let height = 720; // number of pixels or valid css height string\r\n\texport let width = 640;\r\n\texport let distributionData;\r\n\r\n\tconsole.log(width);\r\n\r\n\r\n\tlet padding = {top: 110, left: 10, right: 10, bottom: 20}\r\n\r\n\t$: console.log(data)\r\n\r\n\tlet maxValue = Math.max(...data.map(el => {return Math.max(el.value, el.valuePrevYear)}));\r\n\r\n\tlet x = scaleLinear()\r\n\t\t.domain([10, Math.max(maxValue,125)+10])\r\n\t\t.range([0, width-padding[\"left\"]-padding[\"right\"]]);\r\n\r\n\tlet seriesPadding = 10;\r\n\r\n\tlet y = scaleLinear()\r\n\t\t.domain([0,data.length])\r\n\t\t.range([height-padding[\"top\"]-padding[\"bottom\"]-seriesPadding*2, 0]);\r\n\r\n\tlet seriesParametersArray = [{key: \"value2019\", yAdj: -5, color: \"#003C57\"}, {key: \"value\", yAdj: 5, color: \"#00A3A6\"}];\r\n\r\n\tlet gridlinesParametersArray = [\r\n\t//{value: 80, opacity: 0.10},\r\n\t{value: 90, opacity: 0.20},\r\n\t{value: 100, opacity: 0.75},\r\n\t{value: 110, opacity: 0.20},\r\n\t//{value: 120, opacity: 0.10},\r\n\t]\r\n\r\n\tlet yDist = scaleLinear()\r\n\t\t.domain([0,50])\r\n\t\t.range([0,20]);\r\n\t\r\n\tlet pathCalc = line()\r\n \t.x((d) => { return x(d[\"midpoint\"]); })\r\n \t.y((d) => { return -yDist(d[\"yValue\"]); });\r\n\r\n\tlet pathCalcInv = line()\r\n \t.x((d) => { return x(d[\"midpoint\"]); })\r\n \t.y((d) => { return yDist(d[\"yValue\"]); });\r\n\r\n\r\n\tlet xKey = scaleLinear()\r\n\t\t.domain([10, 125])\r\n\t\t.range([0, width/2]);\r\n\r\n\tlet pathCalcXKey = line()\r\n \t.x((d) => { return xKey(d[\"midpoint\"]); })\r\n \t.y((d) => { return -yDist(d[\"yValue\"]); });\r\n\r\n\tlet pathCalcInvXKey = line()\r\n \t.x((d) => { return xKey(d[\"midpoint\"]); })\r\n \t.y((d) => { return yDist(d[\"yValue\"]); });\r\n\r\n\tlet distributionText = \"Distribution of local authority values in 2021\";\r\n\tif (width <= 420) {distributionText = [\"Distribution of local\", \"authority values in 2021\"] };\r\n\r\n\r\n\tlet annotationsArray = [\r\n{position:[xKey(100), -21], path:\"M0 0 l0 -5 l-40 0\", textAnchor:\"end\", fontSize: 14, opacity:0.75, text:\"Health in England in 2015\", stroke:\"#333\", x:-43, y:-4},\r\n{position:[xKey(95), 15], path:\"M0 0 l0 10 l-20 0\", textAnchor:\"end\", fontSize: 14, opacity:1, text: distributionText, stroke:\"#919090\", x:-23, y:15},\r\n{position:[xKey(110), 0], path:\"M0 0 l0 -10 l10 0\", textAnchor:\"start\", fontSize: 14, opacity:1, text:\"2020 value\", stroke:\"#003C57\", x:13, y:-9},\r\n{position:[xKey(120), 18], path:\"M0 0 l0 10 l10 0\", textAnchor:\"start\", fontSize: 14, opacity:1, text:\"2021 value\", stroke:\"#00A3A6\", x:13, y:15},\r\n];\r\n\r\nlet keyTranslation;\r\n\r\nif (width > 640 ) {keyTranslation = \"translate(60,40)scale(1)\" }\r\nelse if (width > 560) {keyTranslation = \"translate(120,40)scale(1)\"}\r\nelse if (width > 480) {keyTranslation = \"translate(150,40)scale(0.9)\"}\r\nelse if (width > 420) {keyTranslation = \"translate(100,40)scale(0.95)\"}\r\nelse {keyTranslation = \"translate(100,40)scale(0.9)\"}\r\n\r\n\r\n</script>\r\n\r\n\r\n<div class=\"chart-container\">\r\n\t<svg\r\n\t{height}\r\n\t{width}\r\n\t>\r\n\r\n\t<g class=\"key\"\r\n\ttransform={keyTranslation}\r\n\t>\r\n\r\n\t\t<XAxis\r\n\t\tx={xKey}\r\n\t\tgridlinesParametersArray={gridlinesParametersArray.filter(function(e,i) {return e.value == 100})}\r\n\t\ty=20\r\n\t\t></XAxis>\r\n\r\n\t\t<g class=\"annotations\">\r\n\r\n\t\t\t{#each annotationsArray as d, i}\r\n\t\t\t\t<Annotation\r\n\t\t\t\tid={i}\r\n\t\t\t\tposition={d[\"position\"]}\r\n\t\t\t\tpath={d[\"path\"]}\r\n\t\t\t\ttextAnchor={d[\"textAnchor\"]}\r\n\t\t\t\tfontSize={d[\"fontSize\"]}\r\n\t\t\t\topacity={d[\"opacity\"]}\r\n\t\t\t\ttext={d[\"text\"]}\r\n\t\t\t\tstroke={d[\"stroke\"]}\r\n\t\t\t\tx={d[\"x\"]}\r\n\t\t\t\ty={d[\"y\"]}\r\n\t\t\t\t></Annotation>\r\n\t\t\t{/each}\r\n\t\t</g>\r\n\r\n\t\t<g class=\"dot-plot-container\"\r\n\t\ttransform={\"translate(\"+0+\",\"+seriesPadding+\")\"}\r\n\t\t>\t\r\n\r\n\t\t\t{#each [data[0]] as d, i}\r\n\r\n\t\t\t\t<ViolinDotPlot\r\n\t\t\t\tkey={true}\r\n\t\t\t\t{i}\r\n\t\t\t\tyPosition=0\r\n\t\t\t\tx={xKey}\r\n\t\t\t\tviolinPlotData={distributionData.default.map(el=> {return {midpoint: el.midpoint, yValue: el[d[\"unique\"]]}})}\r\n\t\t\t\tviolinFuncs={[pathCalcXKey, pathCalcInvXKey]}\r\n\t\t\t\t{seriesParametersArray}\t\r\n\t\t\t\tcircleData={[110,120]}\r\n\t\t\t\t></ViolinDotPlot>\r\n\t\t\t\t\r\n\t\t\t{/each}\r\n\t\t\t\r\n\t\t</g>\r\n\t</g>\r\n\r\n\t<g \r\n\tclass=\"chart-body\"\r\n\ttransform={\"translate(\"+padding[\"left\"]+\",\"+padding[\"top\"]+\")\"}\r\n\t>\r\n\r\n\t\t<XAxis\r\n\t\t{x}\r\n\t\t{gridlinesParametersArray}\r\n\t\ty={height-padding[\"top\"]}\r\n\t\tfontSize={width > 420 ? \"14px\" : \"13px\"}\r\n\t\ttextAnchorSplit={width > 420 ? false : true}\r\n\t\t></XAxis>\r\n\r\n\t\t<g class=\"dot-plot-container\"\r\n\t\ttransform={\"translate(\"+0+\",\"+seriesPadding+\")\"}\r\n\t\t>\t\r\n\r\n\t\t\t{#each data as d, i}\r\n\r\n\t\t\t\t<ViolinDotPlot\r\n\t\t\t\tkey={false}\r\n\t\t\t\tyPosition={y(i)}\r\n\t\t\t\t{x}\r\n\t\t\t\tviolinPlotData={distributionData.default.map(el=> {return {midpoint: el.midpoint, yValue: el[d[\"unique\"]]}})}\r\n\t\t\t\tviolinFuncs={[pathCalc, pathCalcInv]}\r\n\t\t\t\t{seriesParametersArray}\t\r\n\t\t\t\tcircleData={[d.valuePrevYear, d.value]}\r\n\t\t\t\tlabel={d[\"unique\"]}\r\n\t\t\t\tradius={width > 510 ? 8: 7}\r\n\t\t\t\tlabelFontSize={width > 420 ? \"14px\" : \"13px\"}\r\n\t\t\t\thoverLabel={true}\r\n\t\t\t\t></ViolinDotPlot>\r\n\t\t\t\t\r\n\t\t\t{/each}\r\n\t\t\t\r\n\t\t</g>\r\n\t\r\n\t</g>\r\n\r\n\t</svg>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<style>\r\n\t.chart-container {\r\n\t\twidth: 100%;\r\n\t\theight: 720px !important;\r\n \t/* margin-left: auto; */\r\n\t}\r\n\r\n</style>","<svelte:options accessors={true} />\r\n\r\n<script>\r\n\timport 'whatwg-fetch';\r\n\r\n\timport { scaleLinear } from 'd3-scale';\r\n\timport { line } from 'd3-shape';\r\n\timport XAxis from './distDotPlotComponents/XAxis.svelte';\r\n\timport Annotation from './distDotPlotComponents/Annotation.svelte';\r\n import ViolinDotPlot from './distDotPlotComponents/ViolinDotPlot.svelte';\r\n\r\n\texport let data;\r\n\texport let width = 640;\r\n\texport let distributionData;\r\n\texport let area;\r\n\texport let indicatorsToExclude;\r\n\r\n //split out data\r\n let indicatorCircleData = [];\r\n\r\n Object.keys(data).forEach(function(key) {\r\n\r\n Object.keys(data[key]).forEach(function(subKey) {\r\n\r\n\t\t\tif (!indicatorsToExclude.includes(subKey)) {\r\n\r\n\t\t\t\tindicatorCircleData.push({label: subKey, valuePrevYear: data[key][subKey][\"2020\"], value: data[key][subKey][\"2021\"] })\r\n\r\n\t\t\t}\r\n })\r\n })\r\n\r\n let circleDataLower = indicatorCircleData.filter(function(e,i) {return e.value <= 90}).sort((a,b) => a.value - b.value); \r\n let circleDataHigher = indicatorCircleData.filter(function(e,i) {return e.value >= 110}).sort((a,b) => b.value - a.value); \r\n\r\n\tlet padding = {top: 160, left: 5, right: 5, bottom: (width > 560 ? 20 : 120)}\r\n\r\n let height = width > 560 ? padding[\"top\"]+40*Math.max(circleDataLower.length, circleDataHigher.length)+padding[\"bottom\"]+120 : padding[\"top\"]+60*Math.max(circleDataLower.length + circleDataHigher.length)+padding[\"bottom\"]+120;\r\n\r\n\tlet maxValue = Math.max(...indicatorCircleData.map(el => {return Math.max(el.value, el.valuePrevYear)}));\r\n\r\n\tlet x = width > 560 ? scaleLinear().domain([10, Math.max(maxValue,125)+10]).range([0,width/2-padding[\"left\"]-padding[\"right\"]]) : scaleLinear().domain([10, Math.max(maxValue,125)+10]).range([0,width-padding[\"left\"]-padding[\"right\"]])\r\n\r\n\tlet seriesPadding = 0;\r\n\r\n\tlet y = width > 560 ? scaleLinear().domain([0,Math.max(circleDataHigher.length, circleDataLower.length)]).range([0, height-padding[\"top\"]-padding[\"bottom\"]-seriesPadding*2]): scaleLinear().domain([0,Math.max(circleDataHigher.length + circleDataLower.length)]).range([0, height-padding[\"top\"]-padding[\"bottom\"]-60-seriesPadding*2])\r\n\r\n\tlet seriesParametersArray = [\r\n // {key: \"value2019\", yAdj: -5, color: \"#003C57\"}, \r\n {key: \"value\", yAdj: 5, color: \"#00A3A6\"}\r\n ];\r\n\r\n\tlet gridlinesParametersArray = [\r\n\t//{value: 80, opacity: 0.10},\r\n\t{value: 90, opacity: 0.20},\r\n\t{value: 100, opacity: 0.75},\r\n\t{value: 110, opacity: 0.20},\r\n\t//{value: 120, opacity: 0.10},\r\n\t]\r\n\r\n\tlet yDist = scaleLinear()\r\n\t\t.domain([0,50])\r\n\t\t.range([0,20]);\r\n\t\r\n\tlet pathCalc = line()\r\n \t.x((d) => { return x(d[\"midpoint\"]); })\r\n \t.y((d) => { return -yDist(d[\"yValue\"]); });\r\n\r\n\tlet pathCalcInv = line()\r\n \t.x((d) => { return x(d[\"midpoint\"]); })\r\n \t.y((d) => { return yDist(d[\"yValue\"]); });\r\n\r\n\r\n\tlet xKey = scaleLinear()\r\n\t\t.domain([10, 125])\r\n\t\t.range([0, width/2]);\r\n\r\n\tlet pathCalcXKey = line()\r\n \t.x((d) => { return xKey(d[\"midpoint\"]); })\r\n \t.y((d) => { return -yDist(d[\"yValue\"]); });\r\n\r\n\tlet pathCalcInvXKey = line()\r\n \t.x((d) => { return xKey(d[\"midpoint\"]); })\r\n \t.y((d) => { return yDist(d[\"yValue\"]); });\r\n\r\n\tlet distributionText = \"Distribution of local authority values in 2021\";\r\n\tif (width <= 420) {distributionText = [\"Distribution of local\", \"authority values in 2021\"] };\r\n\r\n\r\n\r\n\tlet annotationsArray = [\r\n{position:[xKey(100), -21], path:\"M0 0 l0 -5 l-40 0\", textAnchor:\"end\", fontSize: 14, opacity:0.75, text:\"Health in England in 2015\", stroke:\"#333\", x:-43, y:-2},\r\n{position:[xKey(95), 15], path:\"M0 0 l0 10 l-20 0\", textAnchor:\"end\", fontSize: 14, opacity:1, text: distributionText, stroke:\"#919090\", x:-23, y:13},\r\n//{position:[xKey(110), 0], path:\"M0 0 l0 -10 l10 0\", textAnchor:\"start\", fontSize: 14, opacity:1, text:\"2020 value\", stroke:\"#003C57\", x:13, y:-7},\r\n{position:[xKey(120), 18], path:\"M0 0 l0 10 l10 0\", textAnchor:\"start\", fontSize: 14, opacity:1, text:\"2021 value\", stroke:\"#00A3A6\", x:13, y:13},\r\n];\r\n\r\nlet keyTranslation;\r\n\r\nif (width > 640 ) {keyTranslation = \"translate(60,40)scale(1)\" }\r\nelse if (width > 560) {keyTranslation = \"translate(120,40)scale(1)\"}\r\nelse if (width > 480) {keyTranslation = \"translate(150,40)scale(0.9)\"}\r\nelse if (width > 420) {keyTranslation = \"translate(100,40)scale(0.95)\"}\r\nelse {keyTranslation = \"translate(100,40)scale(0.9)\"}\r\n\r\nlet title = (circleDataLower.length > 0 && circleDataHigher.length > 0) ? area.name+\"'s lowest indicator score is for \"+circleDataLower[0][\"label\"].toLowerCase()+\" and its highest score is for \"+circleDataHigher[0][\"label\"].toLowerCase() : circleDataLower.length > 0 ? area.name+\"'s lowest indicator score is for \"+circleDataLower[0][\"label\"].toLowerCase() : area.name+\"'s highest indicator score is for \"+circleDataHigher[0][\"label\"].toLowerCase();\r\n\r\n</script>\r\n\r\n{#if circleDataLower.length > 0 || circleDataHigher.length > 0}\r\n\r\n<div class=\"funky\"></div>\r\n\r\n<h4 style=\"font-style: 18px\">{title}</h4>\r\n\r\n<h5 style=\"font-style: 16px\">Health index values for each indicator below 90 or above 110, {area.name}, 2021</h5>\r\n\r\n<div class=\"chart-container\">\r\n\t<svg style=\"display: block\"\r\n\t{height}\r\n\t{width}\r\n\t>\r\n\r\n\t<g class=\"key\"\r\n\ttransform={keyTranslation}\r\n\t>\r\n\r\n\t\t<XAxis\r\n\t\tx={xKey}\r\n\t\tgridlinesParametersArray={gridlinesParametersArray.filter(function(e,i) {return e.value == 100})}\r\n\t\ty=20\r\n\t\tfontSize={\"13px\"}\r\n\t\t></XAxis>\r\n\r\n\t\t<g class=\"annotations\">\r\n\r\n\t\t\t{#each annotationsArray as d, i}\r\n\t\t\t\t<Annotation\r\n\t\t\t\tid={i}\r\n\t\t\t\tposition={d[\"position\"]}\r\n\t\t\t\tpath={d[\"path\"]}\r\n\t\t\t\ttextAnchor={d[\"textAnchor\"]}\r\n\t\t\t\tfontSize={d[\"fontSize\"]}\r\n\t\t\t\topacity={d[\"opacity\"]}\r\n\t\t\t\ttext={d[\"text\"]}\r\n\t\t\t\tstroke={d[\"stroke\"]}\r\n\t\t\t\tx={d[\"x\"]}\r\n\t\t\t\ty={d[\"y\"]}\r\n\t\t\t\t></Annotation>\r\n\t\t\t{/each}\r\n\t\t</g>\r\n\r\n\t\t<g class=\"dot-plot-container\"\r\n\t\ttransform={\"translate(\"+0+\",\"+seriesPadding+\")\"}\r\n\t\t>\t\r\n\r\n\t\t\t{#each [indicatorCircleData[0]] as d, i}\r\n\r\n\t\t\t\t<ViolinDotPlot\r\n\t\t\t\tkey={true}\r\n\t\t\t\t{i}\r\n\t\t\t\tyPosition=8\r\n\t\t\t\tx={xKey}\r\n\t\t\t\tviolinPlotData={distributionData.default.map(el=> {return {midpoint: el.midpoint, yValue: el[d[\"label\"]]}})}\r\n\t\t\t\tviolinFuncs={[pathCalcXKey, pathCalcInvXKey]}\r\n\t\t\t\t{seriesParametersArray}\t\r\n\t\t\t\tcircleData={[120,120]}\r\n\t\t\t\tradius={6}\r\n\t\t\t\t></ViolinDotPlot>\r\n\t\t\t\t\r\n\t\t\t{/each}\r\n\t\t\t\r\n\t\t</g>\r\n\t</g>\r\n\r\n <g class=\"titles\"\r\n\ttransform={\"translate(\"+padding[\"left\"]+\",140)\"}\r\n\t>\r\n\r\n <text\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size=16px\r\n text-anchor=\"start\"\r\n font-weight=\"bold\"\r\n >Indicators below 90</text>\r\n\r\n <text\r\n\t\t\ty={width > 560 ? 0: circleDataLower.length*60+80}\r\n x={width > 560 ? width/2 : 0}\r\n stroke=\"none\"\r\n fill=\"#333\"\r\n font-size=16px\r\n text-anchor=\"start\"\r\n font-weight=\"bold\"\r\n >Indicators above 110</text>\r\n\r\n </g>\r\n\r\n\t<g \r\n\tclass=\"chart-body\"\r\n\ttransform={\"translate(\"+0+\",\"+padding[\"top\"]+\")\"}\r\n\t>\r\n\r\n <g transform={\"translate(\"+padding[\"left\"]+\",0)\"}>\r\n\r\n <XAxis\r\n {x}\r\n gridlinesParametersArray={width > 560 ? gridlinesParametersArray.filter(function(e,i) {return e.value <= 100}): gridlinesParametersArray}\r\n y={width > 560 ? (y(circleDataLower.length)+30): (y(circleDataLower.length)+30)}\r\n\t\t\tfontSize={width > 560 ? \"12px\" : \"13px\"}\r\n ></XAxis>\r\n\r\n </g>\r\n\r\n <g transform={width > 560 ? \"translate(\"+(padding[\"left\"]+width/2)+\",0)\" : \"translate(\"+(padding[\"left\"])+\",\"+(circleDataLower.length*60+95)+\")\"}>\r\n\r\n <XAxis\r\n {x}\r\n gridlinesParametersArray={width > 560 ? gridlinesParametersArray.filter(function(e,i) {return e.value >= 100}): gridlinesParametersArray }\r\n y={width > 560 ? (y(circleDataHigher.length)+30): (y(circleDataHigher.length)+30)}\r\n\t\t\tfontSize={width > 560 ? \"12px\" : \"13px\"}\r\n ></XAxis>\r\n\r\n </g>\r\n\r\n\t\t<g class=\"dot-plot-container\"\r\n\t\ttransform={\"translate(\"+padding[\"left\"]+\",\"+seriesPadding+\")\"}\r\n\t\t>\t\r\n\r\n\t\t\t{#each circleDataLower as d, i}\r\n\r\n\t\t\t\t<ViolinDotPlot\r\n\t\t\t\tindicator=true\r\n\t\t\t\tkey={false}\r\n\t\t\t\tyPosition={y(i)+40}\r\n\t\t\t\t{x}\r\n\t\t\t\tviolinPlotData={distributionData.default.map(el=> {return {midpoint: el.midpoint, yValue: el[d[\"label\"]]}})}\r\n\t\t\t\tviolinFuncs={[pathCalc, pathCalcInv]}\r\n\t\t\t\t{seriesParametersArray}\t\r\n\t\t\t\tcircleData={[d.value, d.value]}\r\n\t\t\t\tlabel={d[\"label\"]}\r\n labelFontSize={width > 560 ? \"12px\" : \"14px\"}\r\n labelYValue={-12}\r\n backgroundToLabel={false}\r\n\t\t\t\tradius={width > 560 ? 6 : 7}\r\n\t\t\t\thoverLabel={true}\r\n\t\t\t\t></ViolinDotPlot>\r\n\t\t\t\t\r\n\t\t\t{/each}\r\n\t\t\t\r\n\t\t</g>\r\n\r\n <g class=\"dot-plot-container\"\r\n\t\ttransform={width > 560 ? \"translate(\"+(padding[\"left\"]+width/2)+\",0)\" : \"translate(\"+(padding[\"left\"])+\",\"+(circleDataLower.length*60+95)+\")\"}\r\n\t\t>\t\r\n\r\n\t\t\t{#each circleDataHigher as d, i}\r\n\r\n\t\t\t\t<ViolinDotPlot\r\n\t\t\t\tindicator=true\r\n\t\t\t\tkey={false}\r\n\t\t\t\tyPosition={y(i)+40}\r\n\t\t\t\t{x}\r\n\t\t\t\tviolinPlotData={distributionData.default.map(el=> {return {midpoint: el.midpoint, yValue: el[d[\"label\"]]}})}\r\n\t\t\t\tviolinFuncs={[pathCalc, pathCalcInv]}\r\n\t\t\t\t{seriesParametersArray}\t\r\n\t\t\t\tcircleData={[d.value, d.value]}\r\n\t\t\t\tlabel={d[\"label\"]}\r\n labelYValue={-12}\r\n labelFontSize={width > 560 ? \"12px\" : \"14px\"}\r\n backgroundToLabel={false}\r\n\t\t\t\tradius={width > 560 ? 6 : 7}\r\n\t\t\t\thoverLabel={true}\r\n\t\t\t\t></ViolinDotPlot>\r\n\t\t\t\t\r\n\t\t\t{/each}\r\n\t\t\t\r\n\t\t</g>\r\n\t\r\n\t</g>\r\n\r\n\t</svg>\r\n</div>\r\n\r\n<h6 style=\"display: block;\">Source: Health Index for England from the Office for National Statistics</h6>\r\n\r\n<p style=\"display: block; line-height: 32px\">Note: Scores of 90 and 110 are one standard deviation away from 100, the average score for England in 2015.</p>\r\n\r\n{/if}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<style>\r\n\t.chart-container {\r\n\t\twidth: 100%;\r\n\t\tmin-height: 660px !important;\r\n \t/* margin-left: auto; */\r\n\t}\r\n\r\n</style>","<script>\n\nexport let maxValue, minValue, x, y, years, xPosition = -65;\n\n</script>\n\n{#each years as year, i}\n\n <text\n text-anchor=\"middle\"\n x={x(i)}\n y=-3\n stroke=\"none\"\n fill=\"#333\"\n font-size=\"16px\"\n >{year}</text>\n\n <line\n x1={x(i)}\n x2={x(i)}\n y1=0\n y2={y(minValue)}\n stroke=\"black\"\n ></line>\n\n{/each}\n\n<g\ntransform={\"translate(\"+xPosition+\",0)\"}>\n\n <line\n x1=0\n x2=0\n y1=0\n y2={y(minValue)}\n stroke=\"black\"\n ></line>\n\n {#each [70,80,90,100,110,120] as d, i}\n\n {#if maxValue >= d && minValue <= d} \n\n <line\n x1=0\n x2=-8\n y1={y(d)}\n y2={y(d)}\n stroke=\"black\"\n ></line>\n\n <text\n text-anchor=\"end\"\n x={-10}\n y={y(d)+5}\n stroke=\"none\"\n fill=\"#333\"\n font-size=\"14px\"\n >{d}</text>\n\n {/if}\n\n {/each}\n\n</g>\n","<script>\r\n\r\nexport let x, y, data, visible, color;\r\n\r\n</script>\r\n\r\n{#each data as d, i}\r\n\r\n <line\r\n class=\"slopeLine\"\r\n x1={x(0)}\r\n x2={x(1)}\r\n y1={y(d[\"valuePrevYear\"])}\r\n y2={y(d[\"value\"])}\r\n stroke={color}\r\n stroke-width=\"2px\"\r\n opacity={visible ? 1 : 0}\r\n name={d[\"unique\"]}\r\n ></line>\r\n\r\n{/each}","<script>\n\n\nexport let data, visible, colors, hoverLabel = true, single;\n\nfunction handleMouseOver(e) {\n\nconst laName = d3.select(this).attr(\"name\")\nconst xPosition = single ? d3.select(this).attr(\"cx\") : 0;\n\nd3.select(this.parentNode.parentNode).selectAll(\".node\").attr(\"opacity\", function(d,i) {return d3.select(this).attr(\"name\") == laName ? 1 : 0.3})\n\nd3.select(this.parentNode.parentNode).selectAll(\".slopeLine\").style(\"opacity\", function(d,i) {return d3.select(this).attr(\"name\") == laName ? 1 : 0})\n\nd3.select(this.parentNode.parentNode).selectAll(\".slopeLine\").filter(function(d,i) {return d3.select(this).attr(\"name\") == laName})\n .style(\"stroke\", \"orange\")\n\nd3.select(this.parentNode.parentNode).selectAll(\".node\").filter(function(d,i) {return d3.select(this).attr(\"name\") == laName})\n .style(\"r\", d3.select(this).attr(\"r\")*1.5)\n .style(\"fill\", \"orange\")\n\nd3.select(this.ownerSVGElement).selectAll(\".slopeLabelsGroup\").selectAll(\"text\").style(\"opacity\", function(d,i) {return d3.select(this).attr(\"name\") == laName ? 1 : 0})\n .attr(\"x\", xPosition)\n \nd3.select(this.ownerSVGElement).selectAll(\".annotation1\").attr(\"opacity\", 0.1)\n\n}\n\nfunction handleMouseOut(e) {\n\nd3.select(this.parentNode.parentNode).selectAll(\".node\").attr(\"opacity\", null)\n\nd3.select(this.parentNode.parentNode).selectAll(\".node\")\n .style(\"r\", null)\n .style(\"fill\", null)\n\nd3.select(this.parentNode.parentNode).selectAll(\".slopeLine\").style(\"opacity\", null).style(\"stroke\", null) \n\nd3.select(this.ownerSVGElement).selectAll(\".slopeLabelsGroup\").selectAll(\"text\").style(\"opacity\", null).attr(\"x\", null)\n\nd3.select(this.ownerSVGElement).selectAll(\".annotation1\").attr(\"opacity\", 1)\n\n\n}\n\n\n</script>\n\n<g class=\"points\">\n\n {#each data as point, i}\n\n {#if point[\"id\"] == point[\"unique\"] && visible}\n\n {#if point[\"id\"] == \"England\"}\n\n <path\n class=\"node\"\n transform={\"translate(\"+point.x+\",\"+point.y+\")\"}\n d={\"M0 \"+(-point.r)+\" L\"+point.r+\" 0 L 0 \"+point.r+\" L \"+(-point.r) +\" 0 z\" }\n fill={colors[\"england\"][0]}\n stroke=\"none\"\n name={null}\n ></path>\n\n {:else}\n\n <circle\n class=\"node\"\n r={point.r}\n fill={colors[\"mainLA\"][0]}\n cx={point.x}\n cy={point.y}\n name={null}\n ></circle>\n\n \n {/if}\n\n {:else}\n\n <circle on:mouseover={hoverLabel & visible ? handleMouseOver: null} on:focus={null} on:mouseleave={hoverLabel ? handleMouseOut: null}\n class={visible ? \"node\": null}\n r={visible ? point.r : 12}\n fill={visible ? colors[\"surroundingLAs\"][0] : \"white\"}\n cx={point.x}\n cy={point.y}\n name={point[\"unique\"]}\n ></circle>\n\n {/if}\n\n {/each}\n\n</g>","<script>\n\nexport let id, position, path, textAnchor, fontSize, opacity, text, stroke, x, y, arrowhead;\n\n</script>\n\n<g class={\"annotation\"+id}\n\n\t\t\ttransform={\"translate(\"+position[0]+\",\"+position[1]+\")\"}>\n\n {#if arrowhead}\n\n <path\n d={arrowhead == \"left\" ? \"M1 -6 l6 6 l-6 6 z\" : \"M-1 -6 l-6 6 l6 6 z\"}\n stroke=\"none\"\n fill={stroke}\n {opacity}\n ></path>\n\n {/if}\n\t\t\n\t\t\t\t<path\n\t\t\t\td={path}\n\t\t\t\t{stroke}\n {opacity}\n fill=\"none\"\n\t\t\t\t></path>\n\n {#each text as line, j}\n\n <text\n {x}\n y={y+j*(fontSize+1)}\n {opacity}\n stroke=\"none\"\n fill={stroke}\n font-size={fontSize+\"px\"}\n text-anchor={textAnchor}\n >{line}\n </text>\n\n {/each}\n</g>","<svelte:options accessors={true} />\r\n\r\n<script>\r\n\timport 'whatwg-fetch';\r\n\r\n\timport { scaleLinear } from 'd3-scale';\r\n import { forceSimulation, forceX, forceY, forceCollide } from 'd3-force';\r\n import AxisY from './doubleVerticalBeeswarmComponents/AxisY.svelte';\r\n import AxisX from './doubleVerticalBeeswarmComponents/AxisX.svelte';\r\n import SlopeLines from './doubleVerticalBeeswarmComponents/SlopeLines.svelte';\r\n import BeeswarmCircles from './doubleVerticalBeeswarmComponents/BeeswarmCircles.svelte';\r\n import Annotation from './doubleVerticalBeeswarmComponents/Annotation.svelte';\r\n import { range, randomInt, line, filter } from 'd3';\r\n import { onMount } from \"svelte\";\r\n\r\n\texport let data;\r\n export let topic;\r\n export let singleBeeswarmSubDomains;\r\n\r\n\texport let height = 600; // number of pixels or valid css height string\r\n\texport let width = 640;\r\n\r\n\tlet padding = {top: 120, left: width > 600 ? 260: (singleBeeswarmSubDomains.includes(topic.metric) ? 160 : 120), right: width > 600 ? 120 : 80, bottom: 50};\r\n\r\n\tlet x = scaleLinear()\r\n\t\t.domain([0, 1])\r\n\t\t.range([0, (singleBeeswarmSubDomains.includes(topic.metric) ? 0 : width-padding[\"left\"]-padding[\"right\"])]);\r\n \r\n\tlet maxValue = Math.round(Math.max(110,Math.max(...data.map(el => {return Math.max(el.value, el.valuePrevYear)}))+5));\r\n\tlet minValue = Math.round(Math.min(90,Math.min(...data.map(el => {return Math.min(el.value, el.valuePrevYear)}))-5));\r\n\r\n\tlet y = scaleLinear()\r\n\t\t.domain([minValue,maxValue])\r\n\t\t.range([height-padding[\"top\"]-padding[\"bottom\"], 0]);\r\n\r\n let mainLAData = data.filter(function(e,i) {return e[\"id\"] == e[\"unique\"] && e[\"id\"] != \"England\"})\r\n let englandData = data.filter(function(e,i) {return e[\"id\"] == \"England\"})\r\n let surroundingLAData = data.filter(function(e,i) {return e[\"id\"] != e[\"unique\"]})\r\n\r\n const circleRadius = singleBeeswarmSubDomains.includes(topic.metric) ? (surroundingLAData.length < 30 ? 9 : 7.5) : 6;\r\n\r\n data.forEach(function(e,i) {\r\n\r\n e[\"x\"] = x(0)\r\n e[\"y\"] = y(e[\"valuePrevYear\"])\r\n e[\"r\"] = circleRadius\r\n\r\n })\r\n\r\n $: nodes2019 = data.map((d) => ({ ...d }));\r\n\r\n data.forEach(function(e,i) {\r\n\r\n e[\"x\"] = x(1)\r\n e[\"y\"] = y(e[\"value\"])\r\n })\r\n\r\n $: nodes2020 = data.map((d) => ({ ...d }));\r\n\r\n let simulation2019, simulation2020;\r\n\r\n function simulation2019Update() {\r\n simulation2019.tick();\r\n nodes2019 = [...nodes2019]; //refresh the nodes array to render/trigger simulation\r\n }\r\n\r\n function simulation2020Update() {\r\n simulation2020.tick();\r\n nodes2020 = [...nodes2020]; //refresh the nodes array to render/trigger simulation\r\n }\r\n\r\n onMount(() => {\r\n simulation2019 = forceSimulation(nodes2019)\r\n .force('x', forceX(x(0)).strength(0.05))\r\n\t .force('y', forceY().y(d => y(d[\"valuePrevYear\"])).strength(0.5))\r\n .force(\"collide\", forceCollide(circleRadius*1.1))\r\n .on(\"tick\", simulation2019Update)\r\n .alphaTarget(0.01);\r\n\r\n simulation2020 = forceSimulation(nodes2020)\r\n .force('x', forceX(x(1)).strength(0.05))\r\n\t .force('y', forceY().y(d => y(d[\"value\"])).strength(0.5))\r\n .force(\"collide\", forceCollide(circleRadius*1.1))\r\n .on(\"tick\", simulation2020Update)\r\n .alphaTarget(0.01);\r\n });\r\n\r\n let annotationsArray = [\r\n{position:[singleBeeswarmSubDomains.includes(topic.metric) ? -155 : -115, y(100)], path:\"M0 0 l-20 0 l0 40\", textAnchor:\"end\", fontSize: 14, opacity:0.75, text:[\"Health in\", \"England in 2015\"], stroke:\"black\", x:0, y:54, arrowhead: \"left\"},\r\n];\r\n\r\nconst prefix = [\"London\", \"Yorkshire and The Humber\"].includes(surroundingLAData[0][\"id\"]) ? \"\" : \"the \"\r\n\r\nlet labelsYPositionArray;\r\n\r\nlabelsYPositionArray = mainLAData[0][\"value\"] > englandData[0][\"value\"] ? [24,-2] : [-2,24]\r\n\r\nlet annotationCircle;\r\n\r\nlet annotationTextAnchor = singleBeeswarmSubDomains.includes(topic.metric) ? \"start\" : \"end\"\r\nlet annotationArrowhead = singleBeeswarmSubDomains.includes(topic.metric) ? \"right\" : \"left\"\r\nlet annotationFactor = singleBeeswarmSubDomains.includes(topic.metric) ? 1 : -1\r\n\r\nif ((mainLAData[0][\"value\"] > englandData[0][\"value\"]) & (englandData[0][\"value\"] > Math.min(...surroundingLAData.map(o => o.value)))) {\r\n\r\n \r\n\r\n annotationCircle = surroundingLAData.reduce(function(prev, current) {\r\n return (prev.y > current.y) ? prev : current\r\n })\r\n\r\n if (Math.abs(annotationCircle[\"value\"]-mainLAData[0][\"value\"]) > 8) {\r\n\r\n if (annotationCircle[\"unique\"].length < 17) {\r\n\r\n annotationsArray.push({position:[x(1)+annotationFactor*25, y(annotationCircle[\"value\"])], path:\"M0 0 l\"+(40*annotationFactor)+\" 0 l0 20\", textAnchor: annotationTextAnchor, fontSize: 12, opacity:0.75, text: [annotationCircle[\"unique\"]+\" has the lowest\" , \"value of all local authorities\", \"in \"+prefix+annotationCircle[\"id\"]], stroke:\"#404040\", x:10*annotationFactor, y:32, arrowhead: annotationArrowhead})\r\n\r\n }\r\n\r\n }\r\n} else {\r\n\r\n annotationCircle = surroundingLAData.reduce(function(prev, current) {\r\n return (prev.y > current.y) ? current : prev\r\n })\r\n\r\n if (Math.abs(annotationCircle[\"value\"]-mainLAData[0][\"value\"]) > 8) {\r\n\r\n if (annotationCircle[\"unique\"].length < 17) {\r\n\r\n annotationsArray.push({position:[x(1)+annotationFactor*25, y(annotationCircle[\"value\"])], path:\"M0 0 l\"+(40*annotationFactor)+\" 0 l0 -20\", textAnchor: annotationTextAnchor, fontSize: 12, opacity:0.75, text: [annotationCircle[\"unique\"]+\" has the highest\" , \"value of all local authorities\", \"in \"+prefix+annotationCircle[\"id\"]], stroke:\"#404040\", x:10*annotationFactor, y:-52, arrowhead: annotationArrowhead})\r\n\r\n }\r\n\r\n }\r\n}\r\n\r\nconst colorPalette = {mainLA: [\"#27A0CC\", \"#27A0CC\"], england: [\"#871A5B\",\"#871A5B\"], surroundingLAs: [\"#e0dede\",\"#333\"]};\r\nconst keyObject = {mainLA: mainLAData[0][\"id\"], england: \"England\", surroundingLAs: \"Other local authorities in \"+prefix+annotationCircle[\"id\"]};\r\n\r\n</script>\r\n\r\n<div class=\"chart-container\">\r\n\t<svg\r\n\t{height}\r\n\t{width}\r\n\t>\r\n\r\n <g class=\"key\"\r\n transform=\"translate(20,20)scale(1.2)\"\r\n > \r\n\r\n {#each Object.keys(colorPalette) as el, i}\r\n\r\n <g class=\"keyElement\"\r\n transform={\"translate(\"+(0)+\",\"+(i*20)+\")\"}>\r\n\r\n <text\r\n x=15\r\n text-anchor=\"start\"\r\n stroke=\"none\"\r\n fill={colorPalette[el][1]}\r\n font-size=\"12px\"\r\n >{keyObject[el]}</text>\r\n\r\n {#if el == \"england\"}\r\n\r\n <path\r\n class=\"node\"\r\n transform={\"translate(\"+0+\",\"+(-4)+\")\"}\r\n d={\"M0 \"+(-6)+\" L\"+6+\" 0 L 0 \"+6+\" L \"+(-6) +\" 0 z\" }\r\n fill={colorPalette[el][0]}\r\n stroke=\"none\"\r\n ></path>\r\n\r\n {:else}\r\n\r\n <circle\r\n class=\"node\"\r\n r={6}\r\n fill={colorPalette[el][0]}\r\n cx={0}\r\n cy={-4}\r\n ></circle>\r\n\r\n {/if}\r\n\r\n </g>\r\n\r\n\r\n {/each}\r\n\r\n </g>\r\n\r\n <g \r\n transform={\"translate(\"+padding[\"left\"]+\",\"+padding[\"top\"]+\")\"}\r\n >\r\n\r\n <AxisY\r\n xPosition={singleBeeswarmSubDomains.includes(topic.metric) ? -100 : -65}\r\n {maxValue}\r\n {minValue}\r\n {y}\r\n {x}\r\n {height}\r\n years={singleBeeswarmSubDomains.includes(topic.metric) ? [2021] : [2020,2021]}\r\n ></AxisY> \r\n\r\n <g class=\"main-beeswarm-container\">\r\n\r\n {#if !singleBeeswarmSubDomains.includes(topic.metric)}\r\n\r\n {#each [{data: surroundingLAData, visible: false, color: colorPalette[\"surroundingLAs\"][0]}, {data: englandData, visible: true, color: colorPalette[\"england\"][0]}, {data: mainLAData, visible: true, color: colorPalette[\"mainLA\"][0]}] as linesGroup}\r\n\r\n <SlopeLines\r\n {x}\r\n {y}\r\n data={linesGroup[\"data\"]}\r\n visible={linesGroup[\"visible\"]}\r\n color={linesGroup[\"color\"]}\r\n ></SlopeLines>\r\n\r\n {/each}\r\n\r\n {/if}\r\n\r\n {#each (singleBeeswarmSubDomains.includes(topic.metric) ? [{data: nodes2020, visible: false},{data: nodes2020, visible: true} ] : [{data: nodes2019, visible: false}, {data: nodes2020, visible: false},{data: nodes2019, visible: true}, {data: nodes2020, visible: true} ]) as circlesGroup}\r\n\r\n <BeeswarmCircles\r\n single={singleBeeswarmSubDomains.includes(topic.metric)}\r\n data={circlesGroup[\"data\"]}\r\n visible={circlesGroup[\"visible\"]}\r\n colors={colorPalette}\r\n ></BeeswarmCircles>\r\n\r\n {/each}\r\n\r\n {#if !singleBeeswarmSubDomains.includes(topic.metric)}\r\n\r\n {#if mainLAData[0][\"id\"].length <= 25 && (width > 420 && mainLAData[0][\"id\"].length <= 15)}\r\n\r\n {#if !((mainLAData[0][\"value\"] < englandData[0][\"value\"] & mainLAData[0][\"valuePrevYear\"] > englandData[0][\"valuePrevYear\"]) | (mainLAData[0][\"value\"] > englandData[0][\"value\"] & mainLAData[0][\"valuePrevYear\"] < englandData[0][\"valuePrevYear\"]))}\r\n\r\n {#each [...englandData, ...mainLAData] as point, i}\r\n\r\n <g class=\"slopeLabelsGroup\"\r\n transform={\"translate(\"+x(0.5)+\",\"+((y(point[\"valuePrevYear\"])+y(point[\"value\"]))/2-5)+\")\"}>\r\n\r\n <g transform={\"rotate(\"+60*Math.atan((y(point[\"value\"])-y(point[\"valuePrevYear\"]))/(x(1)-x(0)))+\")\"}>\r\n\r\n <text\r\n y={labelsYPositionArray[i]}\r\n text-anchor=\"middle\"\r\n stroke=\"none\"\r\n fill={(point[\"id\"] == point[\"unique\"]) ? (point[\"id\"] == \"England\" ? \"#871A5B\" : \"#27A0CC\") : \"#e0dede\"}\r\n font-size={width > 600 ? \"16px\": \"14px\"}\r\n name={null}\r\n >{point[\"id\"]}</text>\r\n\r\n </g>\r\n\r\n </g>\r\n {/each}\r\n\r\n {/if}\r\n\r\n {/if}\r\n\r\n {/if}\r\n\r\n {#each surroundingLAData as point, i}\r\n\r\n <g class=\"slopeLabelsGroup\"\r\n transform={\"translate(\"+x(0.5)+\",\"+((y(point[\"valuePrevYear\"])+y(point[\"value\"]))/2-5)+\")\"}>\r\n\r\n <g transform={singleBeeswarmSubDomains.includes(topic.metric) ? \"translate(\"+circleRadius+\",\"+(-circleRadius)+\")\" :\"rotate(\"+60*Math.atan((y(point[\"value\"])-y(point[\"valuePrevYear\"]))/(x(1)-x(0)))+\")\"}>\r\n\r\n <text\r\n opacity=0\r\n y={-3}\r\n text-anchor={singleBeeswarmSubDomains.includes(topic.metric) ? \"start\" : \"middle\"}\r\n stroke=\"none\"\r\n fill={\"orange\"}\r\n font-size={width > 600 ? \"16px\": \"14px\"}\r\n pointer-events={\"none\"}\r\n name={point[\"unique\"]}\r\n >{singleBeeswarmSubDomains.includes(topic.metric) ? point[\"unique\"]+\": \"+parseFloat(point[\"value\"]).toFixed(1) : point[\"unique\"]}</text>\r\n\r\n </g>\r\n\r\n </g>\r\n {/each}\r\n\r\n </g>\r\n\r\n {#if width > 600}\r\n\r\n <g class=\"annotations\">\r\n\r\n {#each annotationsArray as d, i}\r\n <Annotation\r\n id={i}\r\n position={d[\"position\"]}\r\n path={d[\"path\"]}\r\n textAnchor={d[\"textAnchor\"]}\r\n fontSize={d[\"fontSize\"]}\r\n opacity={d[\"opacity\"]}\r\n text={d[\"text\"]}\r\n stroke={d[\"stroke\"]}\r\n x={d[\"x\"]}\r\n y={d[\"y\"]}\r\n arrowhead={d[\"arrowhead\"]}\r\n ></Annotation>\r\n {/each}\r\n\r\n </g>\r\n\r\n {/if}\r\n\r\n\r\n\r\n </g>\r\n\r\n\t</svg>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n<style>\r\n\t.chart-container {\r\n\t\twidth: 100%;\r\n\t\theight: 660px !important;\r\n \t/* margin-left: auto; */\r\n\t}\r\n\r\n</style>","export const mostRecentYear = 2021;\r\n\r\nexport const singleBeeswarmSubDomains = [\"Access to green space\", \"Access to services\", \"Difficulties in daily life\", \"Mortality\", \"Crime\"];\r\n\r\n//note this is indicators in addition to those excluded from the hierarchy that we don't want to show on the indicator chart\r\nexport const indicatorsToExclude = [];\r\n","<script>\r\n\timport { regionThe, uncap1, uncap, getData, ord, ud, otherRank, otherEst, qui, cha, cur, figs, get_word } from \"./utils\";\r\n\t\r\n\t// import Select from \"./ui/Select.svelte\";\r\n\timport Select from \"./dropdown/Select.svelte\";\r\n\timport { load } from \"archieml\";\r\n\timport robojournalist from 'robojournalist';\r\n\timport { LineChart, DoubleVerticalBeeswarmChart, DistDotPlotChart, IndicatorDistDotPlotChart } from './@onsvisual/svelte-charts';\r\n\timport { mostRecentYear, singleBeeswarmSubDomains, indicatorsToExclude } from \"./config\"\r\n\r\n\timport * as d3 from 'd3';\r\n\r\n\tvar place, region, england, props, subDist;\r\n\r\n\timport * as someJSON from '../data/healthWithPreviousYearValues.json';\r\n\r\n\timport * as storJSON from '../data/stories.json';\r\n\timport * as someregJSON from '../data/healthindexdata_reg.json';\r\n\r\n\timport * as indisJSON from '../data/indis.json';\r\n\timport * as indikeyJSON from '../data/indikey.json';\r\n\timport * as domluJSON from '../data/domlu.json';\r\n\timport * as indluJSON from '../data/indlu.json';\r\n\r\n\timport * as indicatorDistributionData from '../data/binnedIndicatorDistributionsCurrentYear.json';\r\n\timport * as subDomainDistributionData from '../data/binnedDistributionsCurrentYear.json';\r\n\r\n\t// let someJSON = fetch('data/healthWith2019Values.json')\r\n\t// let storJSON = fetch('data/stories.json')\r\n\t// let someregJSON = fetch('data/healthindexdata_reg.json')\r\n\t// let indisJSON = fetch('data/indis.json')\r\n\r\n\t// import Dropdown from \"./dropdown/App.svelte\";\r\n\t// import Select2 from \".dropdown/Select.svelte\";\r\n\t\r\n\t$: domLU = domluJSON.default\r\n\t// $: stor_raw = storJSON.default\r\n\tlet stor;\r\n\tlet indis;\r\n\t$: if (place) {\r\n\t\tindis = indisJSON.default[place.area]\r\n\t}\r\n\r\n\t$: indikey = indikeyJSON.default\r\n\t$: indLU = indluJSON.default\r\n\r\n\t\r\n\tfunction capi(s) {\r\n\t\treturn s.charAt(0).toUpperCase() + s.slice(1);\r\n\t}\r\n\r\n\t$: data = someJSON.default\r\n\r\n\r\n\t$: if (place) {\r\n\t\tregion = someregJSON.default[place.region.code]\r\n\t\tengland = someregJSON.default['E92000001']\r\n\t}\r\n\tlet options2 = []\r\n\t$: if (data) {\r\n\t\tObject.keys(data).forEach(e => {\r\n\t\t\toptions2.push({ 'code': data[e]['area'], 'name': capi(data[e]['name']) })\r\n\t\t}) \r\n\t\toptions2 = options2.sort((a, b) => { \r\n\t\t\tif(a.name < b.name) { return -1; }\r\n\t\t\tif(a.name > b.name) { return 1; }\r\n\t\t\treturn 0;\r\n\t\t })\r\n\t}\r\n\r\n\tfunction full_rank(latest_rank) {\r\n\t\tlet x = \"\"\r\n\t\tif ([61, 62, 31, 32, 92, 93, 214, 215, 245, 246, 276, 277].includes(latest_rank)) {\r\n\t\t\tx = x + \"roughly \"\r\n\t\t}\r\n\t\tif (latest_rank > 92 && latest_rank < 215) {\r\n\t\t\tx = x + 'around average among'\r\n\t\t} else {\r\n\t\t\tif (latest_rank < 93) {\r\n\t\t\t\tx = x + \"in the top\"\r\n\t\t\t} else {\r\n\t\t\t\tx = x + \"in the bottom\"\r\n\t\t\t}\r\n\t\t\tif (latest_rank < 32 | latest_rank > 276) {\r\n\t\t\t\tx = x + \" \" + \"10 percent of\"\r\n\t\t\t}\r\n\t\t\telse if (latest_rank < 62 | latest_rank > 245 ) {\r\n\t\t\t\tx = x + \" \" + \"20 percent of\"\r\n\t\t\t}\r\n\t\t\telse if (latest_rank < 93 | latest_rank > 214 ) {\r\n\t\t\t\tx = x + \" \" + \"30 percent of\"\r\n\t\t\t}\r\n\t\t}\r\n\t\tconsole.log('latest_rank', latest_rank)\r\n\t\tconsole.log('x', x)\r\n\t\treturn x\r\n\t}\r\n\r\n\r\n\tfunction topbotnp(i, yr, sto) {\r\n\t\t// console.log('ston', sto[i].metric)\r\n\t\t// console.log('yrnp', yr)\r\n\t\t// console.log('rank', place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank)\r\n\t\t// console.log('perc', place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307)\r\n\t\tlet x = \"\"\r\n\t\tif (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) > 0.4) {\r\n\t\t\tx = x + 'close to average'\r\n\t\t} else {\r\n\t\t\tif (place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank>0) {\r\n\t\t\t\tx = x + \"top\"\r\n\t\t\t} else {\r\n\t\t\t\tx = x + \"bottom\"\r\n\t\t\t}\r\n\t\t\tif (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.05) {\r\n\t\t\t\tx = x + (Math.ceil(Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank)*100/307)/100)\r\n\t\t\t} \r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.1) {\r\n\t\t\t\tx = x + 0.1\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.15) {\r\n\t\t\t\tx = x + 0.15\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.2) {\r\n\t\t\t\tx = x + 0.2\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.25) {\r\n\t\t\t\tx = x + 0.25\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.3) {\r\n\t\t\t\tx = x + 0.3\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.4) {\r\n\t\t\t\tx = x + 0.4\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(place.data[domLU[sto[i].metric]].subdomains[sto[i].metric].total[yr].rank/307) < 0.5) {\r\n\t\t\t\tx = x + 0.5\r\n\t\t\t}\r\n\t\t}\r\n\t\tconsole.log('x', x)\r\n\t\treturn x\r\n\t}\r\n\r\n\t// selected = {code: \"E07000124\", name: 'Ribble Valley'}\r\n\t// selected = {code: \"E07000223\", name: 'Adur'}\r\n\tlet subtitle\r\n\tlet subDomains\r\n\tlet latest_val\r\n\tlet latest_rank\r\n\r\n\t$: console.log(\"latest_val\", latest_val)\r\n\tlet latest_change\r\n\tlet indicatorData\r\n\t$: console.log('$: selected', selected)\r\n\t// $: console.log('$ indicatorData', indicatorData)\r\n\r\n\tlet colWidth;\r\n\t// $: colWidth && (selected.code)\r\n\r\n\tlet booleanCheck = false;\r\n\r\n\t\r\n\t$: if(selected) {\r\n\t\tplace = data[selected.code]\r\n\r\n\t\tplace.stories = place.stories.filter( x => x['metric'] != 'Children and young people')\r\n\r\n\t\tindicatorData = indisJSON[place[\"area\"]]\r\n\t\t\r\n\t\tstor = storJSON.default[place.area]\r\n\t\t// console.log('stor', storJSON.default)\r\n\t\t// console.log('stor', place.area)\r\n\t\t// console.log('stor', stor)\r\n\t\tconsole.log(\"place.stories\", place.stories)\r\n\t\t// console.log(\"stor\", stor)\r\n\r\n\t\tsubDomains = place.stories;\r\n\t\tlatest_val = place['data']['Overall']['total']['2021']['value']\r\n\t\tlatest_change = place['data']['Overall']['total']['2021']['value'] - place['data']['Overall']['total']['2020']['value']\r\n\t\tlatest_rank = place['data']['Overall']['total']['2021']['rank']\r\n\t\t// console.log('latest_val', latest_val)\r\n\t\t// console.log('latest_change', latest_change)\r\n\t\tsubtitle = place.name + \"'s Health Index score \"\r\n\r\n\t\t\r\n\t\tif ( Math.abs(latest_change) < 0.3 ) {\r\n\t\t\tsubtitle = subtitle + \"remained relatively stable in 2021.\"\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif ( latest_change < 0 ) {\r\n\t\t\t\tsubtitle = subtitle + \"decreased \"\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsubtitle = subtitle + \"increased \"\r\n\t\t\t}\r\n\r\n\t\t\tif ( Math.abs(latest_change) > 2 ) {\r\n\t\t\t\tsubtitle = subtitle + \"\"\r\n\t\t\t}\r\n\t\t\telse if ( Math.abs(latest_change) < 0.8 ) {\r\n\t\t\t\tsubtitle = subtitle + \"slightly \"\r\n\t\t\t}\r\n\t\t\tsubtitle = subtitle + \"in 2021.\"\r\n\t\t}\r\n\t\tasyncLoop();\r\n\t}\r\n\r\n\tvar template\r\n\r\n fetch(\"text/template.txt\")\r\n // fetch(\"text/template.pug\")\r\n .then((res) => res.text())\r\n .then((txt) => (template = txt))\r\n\r\n\tlet loaded = false\r\n\tlet placeload = false\r\n\tconst onRosaeNlgLoad = () => {\r\n loaded = true\r\n checkHash()\r\n }\r\n\r\n const checkHash = () => {\r\n let parent = new URLSearchParams(document.location.search).get(\"parentUrl\");\r\n let hash = document.location.hash;\r\n let code = parent ? parent.split(\"#\")[1] : hash ? hash.split(\"#\")[1] : null;\r\n if (code && code.match(/[EKNSW]\\d{8}/)) {\r\n const item = options2.find(d => d.code === code);\r\n selected = {code, name: item?.name};\r\n console.log(\"selected\", selected);\r\n loadArea(code);\r\n }\r\n\t};\r\n\r\n\tconst asyncLoop = async () => {\r\n\t\tsubDist = {}\r\n\t\tfor (const i of [0,1,2,3]) {\r\n\t\t\tconst data = await d3.csv('data/'+subDomains[i].metric.replace(/\\s/g, '')+'.csv')\r\n\t\t\tsubDist[subDomains[i].metric] = data;\r\n\t\t\tconsole.log(subDomains[i].metric.replace(/\\s/g, ''))\r\n\t\t\tconsole.log(data)\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction whichMet(ob) {\r\n\t\tlet ar = []\r\n\t\tObject.keys(ob).forEach(e => {\r\n\t\t\tlet tob = {}\r\n\t\t\tif (dont_compare1yr.includes(ob.metric)) {\r\n\t\t\t\tif (['rank', 'Change6year Rank'].includes(e)) {\r\n\t\t\t\t\ttob[e] = ob[e]\r\n\t\t\t\t\tar.push(tob)\r\n\t\t\t\t}\t\t\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (['rank', 'Change1year Rank', 'Change6year Rank'].includes(e)) {\r\n\t\t\t\t\ttob[e] = ob[e]\r\n\t\t\t\t\tar.push(tob)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tar.sort((a, b) => {\r\n\t\t\treturn Math.abs(Object.values(a)[0]) - Math.abs(Object.values(b)[0]);\r\n\t\t});\r\n\t\tconsole.log('premet', ar[0])\r\n\t\treturn Object.keys(ar[0])[0]\r\n\t}\r\n\r\n\r\n\tfunction indiSort(ob, index, change) {\r\n\r\n\t\t// Create an array that orders objects based on the value of a metric given a qualifier (eg change5year)\r\n\t\tlet ar = []\r\n\t\t// console.log('ob', ob)\r\n\t\tObject.keys(ob).forEach(e => {\r\n\t\t\tlet temp_ob = {}\r\n\t\t\tif (change == 'rank') {\r\n\t\t\t\ttemp_ob[e] = Math.round(10*ob[e][2021])/10\r\n\t\t\t}\r\n\t\t\telse if (change == 'Change6year') {\r\n\t\t\t\ttemp_ob[e] = Math.round( (ob[e][2021] - ob[e][2015])*10 )/10\r\n\t\t\t} else {\r\n\t\t\t\ttemp_ob[e] = Math.round( (ob[e][2021] - ob[e][2020])*10 )/10\r\n\t\t\t\t// console.log(\"e\", e)\r\n\t\t\t\t// console.log(\"temp_ob[e]\", temp_ob[e])\r\n\t\t\t}\r\n\t\t\tar.push(temp_ob)\r\n\t\t})\r\n\t\tar.sort((a, b) => {\r\n\t\t\treturn Object.values(b)[0] - Object.values(a)[0];\r\n\t\t});\r\n\t\t// console.log('ar', ar)\r\n\r\n\t\tif (index == -1) {\r\n\t\t\tindex = ar.length -1\r\n\t\t}\r\n\t\telse if (index == -2) {\r\n\t\t\tindex = ar.length -2\r\n\t\t}\r\n\r\n\t\tlet inciar = [\"Low birth weight\"]\r\n\r\n\t\tlet indiname = Object.keys(ar[index])[0]\r\n\r\n\t\tlet incidents = \"\"\r\n\r\n\t\tif (inciar.includes(indiname)) {\r\n\t\t\tincidents = \"incidents of \"\r\n\t\t}\r\n\r\n\t\treturn [incidents+uncap(indikey[indiname]), Object.values(ar[index])[0]]\r\n\t}\r\n\r\n\t// Single select\r\n\tlet selected = null;\r\n\tfunction doSelect(event) {\r\n\t\tselected = event.detail;\r\n\t\tconsole.log(\"selected\", selected)\r\n\r\n\t\tloadArea(selected['code'])\r\n\t}\r\n\tfunction doClear() {\r\n\t\tselected = null;\r\n\t}\r\n\r\n\r\n\tfunction loadArea(code) {\r\n\t\tplace = data[code]\r\n\t\tindicatorData = indisJSON[place[\"area\"]]\r\n\r\n\t\tbooleanCheck=false\r\n\t\tsetTimeout(() => booleanCheck = true, 100)\r\n history.replaceState(null, \"\", `#${code}`)\r\n\t}\r\n\r\n\tfunction iterate(obj, pname) {\r\n\t\tObject.keys(obj).forEach(key => {\r\n\t\t\tif (typeof obj[key] === 'object') {\r\n\t\t\t\titerate(obj[key], pname)\r\n\t\t\t} else {\r\n\t\t\t\tobj[key] = robojournalist(obj[key], {\r\n\t\t\t\t\tplcname: pname,\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t$: console.log('place', place)\r\n\t$: console.log('indis', indis)\r\n\r\n\tlet twoindis = ['Access to green space', 'Crime', 'Difficulties in daily life', 'Protective measures']\r\n\tlet dont_compare1yr = ['Crime', 'Difficulties in daily life', 'Mortality', 'Behavioural risk factors']\r\n\r\n\tfunction results(place) {\r\n\r\n\t\tlet caveats = {\r\n\t\t\t\"Difficulties in daily life\": `\"Frailty\" measures hospital admissions as a result of a hip fracture in those aged 65 years and over. Figures may have been affected by higher mortality rates in frailer people during the pandemic, or people being less exposed to injury while less active and staying at home.`,\r\n\t\t\t\"Mental health\": `Self-harm figures are counted through hospital admissions and so not all cases are recorded. During the coronavirus pandemic, people may have been less likely to seek help at hospital because of fears of infection or overwhelming services. Suicides per area are based on a three-year period, so these figures show longer-term trends rather than a change year to year. Suicide registrations were also affected by inquest delays in 2020.`,\r\n\t\t\t\"Mortality\": `Infant mortality data are based on registrations over a three-year period as numbers in individual areas are low. Death registrations were affected by inquest delays in 2020.`,\r\n\t\t\t\"Behavioural risk factors\": `Drug and alcohol misuse are difficult to measure as both can be hidden behaviours. Drug misuse is measured through drug-related crime. For alcohol misuse, we count hospital admissions. A fall in reports of crime or hospital admissions during the pandemic may not represent an actual decrease in alcohol or drug misuse.`,\r\n\t\t\t\"Access to services\": `In-person services in this category were limited during the coronavirus pandemic.`\r\n\t\t}\r\n\t\tlet caveatsNoise = {\r\n\t\t\t\"Living conditions\": `Data for noise complaints are based on the previous year.`,\r\n\t\t\t\"Economic and working conditions\": 'Data for child poverty and workplace safety are from 2019.'\r\n\t\t}\r\n\t\tlet dont_include = ['Avoidable mortality', 'Life expectancy', 'Healthy eating','Child poverty', 'Workplace safety' ]\r\n\r\n\t\tlet preres = rosaenlg_en_US.render(template, {\r\n\t\t\tlanguage: 'en_UK',\r\n\t\t\ttwoindis: twoindis,\r\n\t\t\tplace: place,\r\n\t\t\tcaveats: caveats,\r\n\t\t\tcaveatsNoise: caveatsNoise,\r\n\t\t\tdont_include: dont_include,\r\n\t\t\tregion: region,\r\n\t\t\tengland: england,\r\n\t\t\tsto: place.stories,\r\n\t\t\torda: place.stories.sort((a, b) => b.value - a.value ),\r\n\t\t\tparent: uncap1(regionThe(region.name)),\r\n\t\t\tuncap: uncap,\r\n\t\t\tget_word: get_word,\r\n\t\t\tfigs: figs,\r\n\t\t\totherEst: otherEst,\r\n\t\t\tcur: cur,\r\n\t\t\tcha: cha,\r\n\t\t\tqui: qui,\r\n\t\t\totherRank: otherRank,\r\n\t\t\tud: ud,\r\n\t\t\tord: ord,\r\n\t\t\twhichMet: whichMet,\r\n\t\t\ttopbotnp: topbotnp,\r\n\t\t\tdomLU: domLU,\r\n\t\t\tindLU: indLU,\r\n\t\t\tindis: indis,\r\n\t\t\tindiSort: indiSort,\r\n\t\t\tindikey: indikey,\r\n\t\t\tnegs: ['smoking', 'anxiety', 'alcohol misuse', 'drug misuse', 'neighbourhood noise', 'air pollution', 'depression', 'self-harm', 'suicides', 'cancer', 'kidney disease', 'cardiovascular conditions', 'crime', 'unemployment', 'low pay', 'difficulties in daily life', 'avoidable mortality', 'infant mortality', \"sexually transmitted infections\", \"hypertension\", \"low birth weight\", \"overweight and obesity in adults\", \"overweight and obesity in children\", \"cancer\", \"cardiovascular conditions\", \"dementia\", \"diabetes\", \"kidney disease\", \"musculoskeletal conditions\", \"respiratory conditions\", \"feelings of anxiety\", \"avoidable mortality\", \"infant mortality\", \"self-harm\", \"suicides\", \"rough sleeping\", \"air pollution\", \"household overcrowding\", \"noise complaints\", \"unemployment\", \"child poverty\", \"disability\", \"hip fractures\", \"low level crime\", \"personal crime\", \"pupil absences\", \"teenage pregnancy\", \"sedentary behaviour\", \"smoking\", \"alcohol misuse\", \"drug misuse\", \"distance to gp services\", \"distance to pharmacies\", \"distance to sports or leisure facilities\", \"mortality\", \"physiological risk factors\", \"physical health conditions\", \"difficulties in daily life\", \"behavioural risk factors\", \"mental health conditions\", \"high blood pressure\", \"frailty\"],\r\n\t\t})\r\n\t\t\r\n\t\treturn preres.split(`<div id=\"esc123\"></div>`)\r\n\t}\r\n\r\n\tfunction makeChartData(place, region, england, i) {\r\n\t\tlet temp = []\r\n\t\tlet arr = [place, region, england]\r\n\t\tif (place) {\r\n\t\t\tfor (const k in {2015: \"\", 2016: \"\", 2017: \"\", 2018: \"\", 2019: \"\", 2020: \"\", 2021: \"\"}) {\r\n\t\t\t\tfor (const j in arr) {\r\n\t\t\t\t\tlet top = arr[j].data[domLU[place.stories[i].metric]]['subdomains'][place.stories[i].metric].total\r\n\t\t\t\t\ttemp.push({\r\n\t\t\t\t\t\tyear: parseInt(k),\r\n\t\t\t\t\t\tvalue: top[k]['value'].toFixed(1),\r\n\t\t\t\t\t\tgroup: arr[j].name\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn temp\r\n\t}\r\n\r\n\r\n\tfunction makeProps(i, place) {\r\n\t\tif (i==5) {\r\n\t\t\tconsole.log(\"hello\")\r\n\t\t\tconsole.log(place);\r\n\t\t\tconsole.log(indicatorData);\r\n\r\n\t\t\treturn props = {\r\n\t\t\t\tarea: place,\r\n\t\t\t\tdata: indicatorData,\r\n\t\t\t\tdistributionData: indicatorDistributionData,\r\n\t\t\t\twidth: colWidth,\r\n\t\t\t\tindicatorsToExclude: indicatorsToExclude\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if ((i==0)|(whichMet(subDomains[i]) == 'rank')|(['Access to green space', 'Access to services'].includes(subDomains[i].metric))) {\r\n\t\t\t// SCATTER\r\n\t\t\tlet chart_data \r\n\t\t\tlet yKey\r\n\t\t\tlet zKey\r\n\t\t\tif (i==0) {\r\n\t\t\t\tconsole.log(subDomains)\r\n\r\n\t\t\t\tchart_data = subDomains.map(d => ({ 'id': (subDomains[i].metric==d.metric)? d.metric:'Other subdomains', 'unique': d['metric'], 'value': d['value'], 'valuePrevYear': d[\"valuePrevYear\"] })).reverse()\r\n\t\t\t\tchart_data.sort((a, b) => a.value - b.value)\r\n\t\t\t\tyKey = 'unique'\r\n\t\t\t\tzKey = 'unique'\r\n\r\n\t\t\t\tconsole.log(chart_data)\r\n\t\t\t}\r\n\t\t\telse {\r\n\r\n\t\t\t\tconsole.log(subDist[subDomains[i].metric]);\r\n\r\n\t\t\t\tchart_data = subDist[subDomains[i].metric].map(d => ({ 'id': d['RGN21NM'], 'unique': d['AREANM'], 'value': (d['time7']), 'valuePrevYear': (d['time6']) }))\r\n\r\n\t\t\t\tchart_data.forEach((item, i) => {\r\n\t\t\t\t\tif (item.unique==place.name) {\r\n\t\t\t\t\t\titem.id = place.name\r\n\t\t\t\t\t} else if (item.id == place.region.name) {\r\n\t\t\t\t\t\titem.id = region.name\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\titem.id = \"Rest of England\"\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tchart_data.push({'id': 'England', 'unique': 'England', 'value': england.data[domLU[subDomains[i].metric]].subdomains[subDomains[i].metric].total[mostRecentYear].value, 'valuePrevYear': england.data[domLU[subDomains[i].metric]].subdomains[subDomains[i].metric].total[mostRecentYear-1].value})\r\n\r\n\t\t\t\tchart_data = chart_data.filter(d => d.id != 'Rest of England')\r\n\r\n\t\t\t\tyKey = null\r\n\t\t\t\tzKey = 'id'\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn props = {\r\n\t\t\t\ti: i,\r\n\t\t\t\ttopic: subDomains[i],\r\n\t\t\t\tdata: chart_data,\r\n\t\t\t\txKey: \"value\",\r\n\t\t\t\tyKey: yKey,\r\n\t\t\t\tzKey: zKey,\r\n\t\t\t\tdistributionData: subDomainDistributionData,\r\n\t\t\t\twidth: colWidth,\r\n\t\t\t\tsingleBeeswarmSubDomains: singleBeeswarmSubDomains\r\n\t\t\t\t// title: \"Multi-line chart\"\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// LINE\r\n\t\t\treturn props = {\r\n\t\t\t\ttopic: subDomains[i],\r\n\t\t\t\tdata: makeChartData(place, region, england, i),\r\n\t\t\t\txKey: \"year\",\r\n\t\t\t\tyKey: \"value\",\r\n\t\t\t\tzKey: \"group\",\r\n\t\t\t\tarea: false,\r\n\t\t\t\twidth: colWidth\r\n\t\t\t\t\r\n\t\t\t\t// title: \"Multi-line chart\"\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n let embedLocal = true;\r\n let embedJS = true;\r\n\r\n function makeEmbedCode(selected, embedLocal, embedJS) {\r\n let url = \"https://www.ons.gov.uk/visualisations/dvc2623/\";\r\n let title = \"Health index\";\r\n if (selected?.code && embedLocal) {\r\n url += `#${selected.code}`;\r\n title += ` for ${selected.name}`;\r\n }\r\n \r\n return embedJS ?\r\n `<div id=\"health-index\"></div>\r\n<script src=\"http://cdn.ons.gov.uk/vendor/pym/1.3.2/pym.min.js\"></\\script>\r\n<script>var pymParent = new pym.Parent(\"health-index\", \"${url}\", {name: \"health-index\", title: \"${title}\"});</\\script>` :\r\n `<iframe height=\"550px\" width=\"100%\" border=\"0\" src=\"${url}\"></iframe>`\r\n }\r\n function copyEmbedCode() {\r\n navigator.clipboard.writeText(embedCode)\r\n\t\t .then(() => alert(\"Embed code copied to clipboard.\"));\r\n }\r\n\r\n $: embedCode = makeEmbedCode(selected, embedLocal, embedJS);\r\n\r\n\r\n</script>\r\n\r\n<svelte:head>\r\n\t<script src=\"./rosaenlg.js\" on:load=\"{onRosaeNlgLoad}\"></script>\r\n</svelte:head>\r\n\r\n<img id=\"imagebanner\" src=\"Health-index-tool_webpage-illustration-v4_1@2x.png\" alt=\"Health Index Graphic\" style=\"width: 637px;\">\r\n<div id=\"topdiv\" style=\"background-color: #2060951A; width: 637px; margin-top: -120px;\">\r\n\t<div style='height: 120px;'></div>\r\n\t<div style='padding: 20px;'>\r\n\t\t<h4 id='dropdowntitle'>What is my area’s Health Index score?</h4>\r\n\r\n\t\t<div>\r\n\t\t\t<p id='dropdowntext'>\r\n\t\t\t\tChoose an area to see how different aspects of health have changed.\r\n\t\t\t</p>\r\n\t\t\t<div id=\"dropdown\">\r\n\t\t\t\t<div style=\"widht: 79.79px; height: 79.79px; margin: 20px auto;\">\r\n\r\n\t\t\t\t\t{#if (options2.length==307)}\r\n\r\n\t\t\t\t\t<form>\r\n\t\t\t\t\t\t<!-- <label for=\"single\">Select one local authority:</label> -->\r\n\t\t\t\t\t\t<!-- <Select id=\"single\" idKey=\"areacd\" labelKey=\"areanm\" {items} on:select={doSelect} on:clear={doClear}/> -->\r\n\t\t\t\t\t\t<Select id=\"single\" idKey=\"code\" labelKey=\"name\" items={options2} on:select={doSelect} on:clear={doClear}/>\r\n\t\t\t\t\t</form>\r\n\t\t\t\t\t\r\n\t\t\t\t\t{/if}\r\n\r\n\r\n\t\t\t\t\t<!-- <Select options={options2} bind:selected value={selected} label=\"name\" search={true} on:select=\"{() => { if (selected) { loadArea(selected.code) }}}\"/>\t\t\t\t -->\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t</div>\r\n\t\t{#if place}\r\n\r\n\t\t{#if loaded}\r\n\t\t{#if options2}\r\n\t\t{#if template}\r\n\t\t{#if domLU}\r\n\t\t{#if indLU}\r\n\t\t\t<hr style=\"border: 1px solid #3D6092; color: #3D6092; background-color: #3D6092;\">\r\n\r\n\t\t\t<div style=\"display: flex; justify-content: space-around; flex-direction: row; align-items:center; margin: 20px 20px 20px 0px; position: relative;\">\r\n\t\t\t\t<p class=\"mainScoreAccompText\" style=\"flex-basis: auto; font-weight: 700; font-size: 24px; color: rgb(32, 96, 149); float: left; line-height: 28px; margin-bottom: 0px; max-width: 80%;\">Health Index score for <span style=\"color: #00A3A6;\">{place.name}: </span></p>\r\n\t\t\t\t<div style=\"flex-basis:auto\">\r\n\t\t\t\t\t<div style=\"font-weight: 700; font-size: 25px; background: #4DBFC1; color: white; height: 77px; width: 77px; border-radius: 40px; text-align: center; line-height: 80px; border: white 2px solid; outline: #F3985C 4px solid;\">{(Math.round(latest_val*10)/10).toFixed( 1 ) }</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<!-- <span style=\"height: 25px; width: 25px; background-color: \"></span> -->\r\n\t\t\t<!-- <ellipse cx=\"200\" cy=\"80\" rx=\"100\" ry=\"50\" /> -->\r\n\t\t\t<hr style=\"border: 1px solid #3D6092; color: #3D6092; background-color: #3D6092; margin-bottom: 20px;\">\r\n\t\t\t<p style=\"font-weight: 400; font-size: 18px; color: #206095;\">{subtitle}</p>\r\n\r\n\t\t\t<p style=\"font-weight: 400; font-size: 18px; color: #206095;\">{place.name} has an overall Health Index score of {(Math.round(latest_val*10)/10).toFixed( 1 ) }, which <span style=\"color: #00A3A6; font-weight: 700;\">{latest_change>0?'is up' : latest_change<0? 'is down' : 'has changed'} { (Math.round(Math.abs(latest_change)*10)/10).toFixed( 1 ) } points</span> compared with the previous year.</p>\r\n\t\t\t<p style=\"font-weight: 400; font-size: 18px; color: #206095;\">A score of 100 represents average levels of health in England in 2015. A higher number always means better health and a lower number means worse health.</p>\r\n\t\t\t<p style=\"font-weight: 400; font-size: 18px; color: #206095;\">{place.name} ranked {full_rank(latest_rank)} local authority areas in England for health in 2021.</p>\r\n\t\t{:else}\r\n\t\t\t<div style=\"padding-left: 40%;\">Loading...</div>\r\n\t\t{/if}\r\n\t\t{/if}\r\n\t\t{/if}\r\n\t\t{/if}\r\n\t\t{/if}\r\n\t\t{/if}\r\n\r\n\t</div>\r\n</div>\r\n\r\n<div style=\"height: 10px\"></div>\r\n{#if loaded}\r\n{#if options2}\r\n{#if template}\r\n{#if domLU}\r\n{#if indLU}\r\n\t\t<div class=\"wrapper\">\r\n\r\n\t\t<div class=\"col\" bind:clientWidth={colWidth}>\r\n\t\t<div style=\"margin-right: 32px;\">\r\n\t\t\t{#if place}\t\r\n\t\t\t{#if indicatorData}\t\r\n\r\n\t\t\t{#each results(place) as res, i (i)}\r\n\t\t\t\t{@html res}\r\n\t\t\t\t{#if i<4}\r\n\t\t\t\t\t{#if subDist[subDomains[i].metric]}\r\n\t\t\t\t\t\t<svelte:component this=\"{\r\n\t\t\t\t\t\t(i==0)? DistDotPlotChart : \r\n\t\t\t\t\t\t(['Access to green space', 'Access to services'].includes(subDomains[i].metric)) ? DoubleVerticalBeeswarmChart :\r\n\t\t\t\t\t\t(whichMet(subDomains[i]) == 'rank') ? DoubleVerticalBeeswarmChart:\r\n\t\t\t\t\t\tLineChart}\" \r\n\t\t\t\t\t\t{...makeProps(i, place)}\r\n\t\t\t\t\t\tcolWidth={colWidth}/>\r\n\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t<!-- {:else if i==4}\r\n\t\t\t\t\t<svelte:component this=\"{(i==4)? IndicatorDistDotPlotChart : IndicatorDistDotPlotChart}\" {...makeProps(i, place, indicatorData)}/> -->\r\n\t\t\t\t{/if}\r\n\t\t\t{/each}\r\n\r\n\t\t\t{#if booleanCheck}\r\n\t\t\t\t\t<svelte:component this=\"{IndicatorDistDotPlotChart}\" {...makeProps(5, place)}\r\n\t\t\t\t\tcolWidth={colWidth}\r\n\t\t\t\t\t/>\r\n\t\t\t{/if}\r\n\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t{/if}\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t\t</div>\r\n\t\t</div>\r\n <div class=\"wrapper\">\r\n <div class=\"col\">\r\n <details class=\"embed-code\">\r\n <summary>Embed code</summary>\r\n <form on:submit|preventDefault={copyEmbedCode}>\r\n <strong>Embed this interactive</strong>\r\n {#if selected}\r\n <label><input type=\"checkbox\" bind:checked={embedLocal}/> Pre-select {selected.name}</label>\r\n {/if}\r\n <label><input type=\"checkbox\" bind:checked={embedJS}/> Responsive embed (requires Javascript)</label>\r\n <textarea rows=3 readonly>{embedCode}</textarea>\r\n <button type=\"submit\">Copy embed code</button>\r\n </form>\r\n </details>\r\n </div>\r\n </div>\r\n\r\n{:else}\r\n\t<div style=\"padding-left: 40%;\">Loading...</div>\r\n{/if}\r\n{/if}\r\n{/if}\r\n{/if}\r\n{/if}\r\n\r\n<style>\r\n details.embed-code {\r\n font-size: 16px;\r\n margin-top: 20px;\r\n }\r\n details.embed-code > summary {\r\n cursor: pointer;\r\n color: #206095;\r\n text-decoration: underline;\r\n }\r\n details.embed-code > summary {\r\n list-style: none;\r\n }\r\n details.embed-code > summary::-webkit-details-marker {\r\n display: none;\r\n }\r\n details.embed-code > form {\r\n padding: 8px 0 16px 16px;\r\n border-left: 3px solid #a6a8ab;\r\n }\r\n details.embed-code textarea {\r\n display: block;\r\n background-color: #eaeaea;\r\n border: 3px solid #d0d2d3;\r\n padding: 8px 16px;\r\n width: 100%;\r\n resize: none;\r\n }\r\n details.embed-code button {\r\n cursor: pointer;\r\n height: 50px;\r\n background-color: #0f8243;\r\n color: white;\r\n padding: 6px 16px 10px;\r\n border: none;\r\n border-radius: 0;\r\n font-weight: bold;\r\n }\r\n\r\n\t.wrapper {\r\n\t\twidth: 100%;\r\n\t\tmargin: 0 auto;\r\n\t\tpadding: 0 16px;\r\n\t}\r\n\r\n\t@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');\r\n\t:global(body) {\r\n\t\tfont-family: 'Open Sans', sans-serif;\r\n\t\tpadding: 0px;\r\n\t\tline-height: 2;\r\n\t\tcolor: #323132;\r\n\t}\r\n\t#dropdowntitle {\r\n\t\tfont-family: 'Open Sans', sans-serif;\r\n\t\tcolor: #206095 !important;\r\n\t\tfont-weight: 700;\r\n\t\tfont-size: 26px;\r\n\t\tline-height: 36.4px;\r\n\t}\r\n\t#dropdowntext {\r\n\t\tfont-family: 'Open Sans', sans-serif;\r\n\t\tcolor: #206095;\r\n\t\tfont-weight: 400;\r\n\t\tfont-size: 18px;\r\n\t\tline-height: 28px;\r\n\t}\r\n\r\n\tmain {\r\n\t\ttext-align: left;\r\n\t\tpadding: 1em;\r\n\t\tmax-width: 240px;\r\n\t\tmargin: 0 auto;\r\n\t\twidth: 640px\r\n\t}\r\n\r\n\th1 {\r\n\t\tfont-size: 3em;\r\n\t\tline-height: 1.5;\r\n\t}\r\n\r\n\t@media screen and (min-width: 640px) {\r\n\t\tmain {\r\n\t\t\tmax-width: none;\r\n\t\t}\r\n\t}\r\n\r\n\t@media screen and (min-width: 390px) {\r\n\t\t.mainScoreAccompText {\r\n\t\t\tfont-size: 20px;\r\n line-height: 24px;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tdiv#visph {\r\n\t\tbackground-color: #afcbd6;\r\n\t\tcolor: #003C57;\r\n\t\theight: 240px;\r\n\t\tpadding: 80px;\r\n\t\tfont-size: 3rem;\r\n\t\tfont-weight: 600;\r\n\t}\r\n\tspan.back-to-top {\r\n\t\ttext-decoration: underline;\r\n\t\tcolor: #206095;\r\n\t\tcursor: pointer;\r\n\t}\r\n\tdiv#sf {\r\n\t\tbackground-color: #F5F5F6;\r\n\t\tpadding: 15px;\r\n\t\tfont-size: 1.2rem;\r\n\t}\r\n\r\n\r\n\r\n\t:global(body) {\r\n\t margin:0;\r\n\t padding:0;\r\n\t font-family: 'Open Sans', sans-serif;\r\n\t font-size: 14px !important;\r\n\t max-width:950px;\r\n\t margin: 0px auto;\r\n\t display: block;\r\n\t color: #323132 !important;\r\n\t}\r\n\t:global(#callout-text > p) {\r\n\t\tcolor: white\r\n\t}\r\n\t:global(div.container) {\r\n\t /* width: 640px;; */\r\n\t margin: auto;\r\n\t}\r\n\r\n\t:global(div#pcSearch) {\r\n\t\tbackground: #20609540;\r\n\t\twidth: 100%;\r\n\t\t/* border-radius: 10px; */\r\n\t}\r\n\t:global(div#pcSearch-inner) {\r\n\t\twidth: 90%;\r\n\t\tpadding: 24px;\r\n\t}\r\n\t:global(p#searchLabel) {\r\n\t\tfont-size: x-large !important;\r\n\t\tcolor: #206095;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\t:global(p#subhead) {\r\n\t font-size: 20px;\r\n\t}\r\n\t:global(h2) {\r\n\t font-size: 30px;\r\n\t margin: 32px 0 32px 0;\r\n\t padding: 24px 0 0 0;\r\n\t font-weight: bold;\r\n\t line-height: 40px;\r\n\t}\r\n\t:global(h3) {\r\n\t font-size: 24px;\r\n\t margin: 32px 0 16px 0;\r\n\t padding: 24px 0 0 0;\r\n\t font-weight: bold;\r\n\t line-height: 32px;\r\n\t}\r\n\t:global(h4) {\r\n\t font-size: 18px;\r\n\t margin: 24px 0 16px 0;\r\n\t padding: 24px 0 0 0;\r\n\t font-weight: bold;\r\n\t line-height: 32px;\r\n\t}\r\n\r\n\t:global(div#co-box) {\r\n\t display: grid !important;\r\n\t grid-template-columns: 30% auto;\r\n\t gap: 3%;\r\n\t background: #1F6095;\r\n\t background-color: #206095 !important;\r\n\t padding: 20px;\r\n\t margin-bottom: 20px;\r\n\t padding-left: 0;\r\n\t /* border-radius: 10px; */\r\n\t}\r\n\t:global(#callout-text > p) {\r\n\t\tmargin: 15px 15px;\r\n\t}\r\n\t@media screen and (max-width: 500px) {\r\n\t\t:global(div#co-box) {\r\n\t\t\tgrid-template-columns: auto !important\r\n\t\t}\r\n\t\t:global(div#callout-bigno4d) {\r\n\t\t\tborder-right: none !important;\r\n\t\t\tborder-bottom: 1px solid white;\r\n\t\t\theight: 80px;\r\n\t\t\twidth: 60%;\r\n\t\t\tmargin: auto;\r\n\t\t}\t\t\r\n\t\t:global(div#callout-bigno3d) {\r\n\t\t\tborder-right: none !important;\r\n\t\t\tborder-bottom: 1px solid white;\r\n\t\t\theight: 80px;\r\n\t\t\twidth: 60%;\r\n\t\t\tmargin: auto;\r\n\t\t}\r\n\t\t:global(div#callout-text) {\r\n\t\t\twidth: 80%;\r\n \t\tmargin: auto;\r\n\t\t}\r\n\t\t/* :global(#callout-text > p) {\r\n\t\t\ttext-align: justify;\r\n\t\t} */\r\n\r\n\t}\r\n\t:global(div#callout-text) > p {\r\n\t color: white;\r\n\t /* margin: 0px 0px 0px 0px; */\r\n\t}\r\n\t:global(div#callout-bigno3d) {\r\n\t position: absolute;\r\n\t /* width: 120px; */\r\n\t border-right: 1px solid white;\r\n\t position: relative;\r\n\t text-align: center;\r\n\t}\r\n\t:global(div#callout-bigno3d > p) {\r\n\t color: white;\r\n\t font-size: xxx-large;\r\n\t font-weight: bold;\r\n\t top: 50%;\r\n\t left: 50%;\r\n\t\tposition: absolute;\r\n\t\ttransform: translate(-50%, -50%);\r\n\t}\r\n\t:global(div#callout-bigno4d) {\r\n\t position: absolute;\r\n\t /* width: 150px; */\r\n\t border-right: 1px solid white;\r\n\t position: relative;\r\n\t text-align: center;\r\n\t}\r\n\t:global(div#callout-bigno4d > p) {\r\n\t color: white;\r\n\t font-size: xxx-large;\r\n\t font-weight: bold;\r\n\t top: 50%;\r\n\t left: 50%;\r\n\t\tposition: absolute;\r\n\t\ttransform: translate(-50%, -50%);\r\n\t}\r\n\t:global(.dropdown) {\r\n\t\theight: 44px;\r\n\t\tborder-style: solid;\r\n\t\tcolor: #206095;\r\n\t\tbackground-color: #FFF;\r\n\t\tfont-size: 1.1em;\r\n\t\tborder: none;\r\n\t\tbox-shadow: none;\r\n\t\tborder-radius: 0;\r\n\t\tbackground: transparent;\r\n\t\tcursor: pointer;\r\n\t\toutline: none;\r\n\t\tpadding-left: 6px;\r\n\t\tmargin-bottom: 20px;\r\n\t\tborder: 2px solid #206095;\r\n\t\t-moz-appearance: none;\r\n\t\t-webkit-appearance: none;\r\n\t\t}\r\n\r\n\t\t:global(.dropdown:focus-within) {\r\nbox-shadow: 0 0 0px 3pt orange;\r\n}\r\n:global(p#score) {\r\ncolor: #206095;\r\n/* font-style: italic; */\r\n}\r\n\r\n\t:global(div.funky) {\r\n\t\tbackground-color: #206095;\r\n\t\theight: 4px;\r\n\t\twidth: 100%;\r\n\t\t/* border-radius: 5px; */\r\n\t}\r\n\t:global(p) {\r\n\t\tfont-size: 18px;\r\n\t\tfont-weight: 400;\r\n\t\tline-height: 32px;\r\n\t\tmargin: 0 0 24px 0;\r\n\t\tpadding: 0;\r\n\t\tcolor: #323132;\r\n\t}\r\n\r\n\t@media screen and (max-width: 767px) {\r\n\t\t:global(p) {\r\n\t\t\tfont-size: 16px;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/* @media screen and (min-width: 992px) {\r\n\t\t.col {\r\n\r\n\t\t}\r\n\t} */\r\n\t.col {\r\n\t\twidth: 100%;\r\n\t\tfloat: left;\r\n\t}\r\n\t@media screen and (min-width: 768px) {\r\n\t\t.col {\r\n\t\t\tmargin: 0;\r\n\t\t\t/* margin-left: 16px!important; */\r\n\t\t\twidth: 640px;\r\n\t\t}\r\n\t}\r\n\r\n\t:global(h4) {\r\n\t\tfont-size: 18px;\r\n\t\tline-height: 24px;\r\n\t\tmargin: 16px 0;\r\n\t\tpadding: 24px 0 0;\r\n\t\tfont-weight: 700;\r\n\t\tcolor: #323132 !important;\r\n\t}\r\n\t:global(h5) {\r\n\t\tmargin: 0 0 16px;\r\n\t\tfont-weight: 400;\r\n\t\tfont-size: 16px;\r\n\t\tcolor: #323132 !important;\r\n\t}\r\n\t@media screen and (max-width: 767px) {\r\n\t\t:global(h4) {\r\n\t\t\tfont-size: 16px;\r\n\t\t}\r\n\t\t:global(h5) {\r\n\t\t\tfont-size: 14px;\r\n\t\t}\r\n\t}\r\n\t@media screen and (max-width: 400px) {\r\n\t\t:global(text.label-text) {\r\n\t\t\tfont-size: 10px !important;\r\n\t\t}\r\n\t}\r\n\t:global(h6) {\r\n\t\tfont-size: 16px;\r\n\t\tmargin: 16px 0 8px 0;\r\n\t\tfont-weight: 700;\r\n\t\tcolor: #323132;\r\n\t\tfont-family: \"Open Sans\";\r\n\t}\r\n</style>","import App from './App.svelte';\n\nvar app = new App({\n\ttarget: document.body\n});\n\nexport default app;"],"names":["_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","prototype","_classCallCheck","instance","TypeError","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","create","constructor","value","_typeof","obj","Symbol","iterator","_possibleConstructorReturn","call","assertThisInitialized","_getPrototypeOf","getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","e","_construct","Parent","args","Class","isNativeReflectConstruct","a","push","apply","Function","bind","arguments","_wrapNativeSuper","_cache","Map","undefined","fn","toString","indexOf","has","get","set","Wrapper","this","_arrayLikeToArray","arr","len","arr2","Array","_unsupportedIterableToArray","minLen","arrayLikeToArray","n","slice","name","from","test","_toConsumableArray","isArray","arrayWithoutHoles","iter","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_superPropBase","object","property","hasOwnProperty","_get","receiver","base","superPropBase","desc","getOwnPropertyDescriptor","noop","src_url_equal_anchor","identity","x","assign","tar","src","k","run","blank_object","run_all","fns","forEach","is_function","thing","safe_not_equal","b","src_url_equal","element_src","url","document","createElement","href","subscribe","store","callbacks","unsub","unsubscribe","component_subscribe","component","callback","$$","on_destroy","create_slot","definition","ctx","$$scope","slot_ctx","get_slot_context","get_slot_changes","dirty","lets","merged","Math","max","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","get_all_dirty_from_scope","crossorigin","is_client","window","now","performance","Date","raf","cb","requestAnimationFrame","tasks","Set","run_tasks","task","c","delete","f","size","loop","promise","Promise","fulfill","add","abort","append","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","d","element","svg_element","createElementNS","text","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","prevent_default","preventDefault","attr","attribute","removeAttribute","getAttribute","setAttribute","set_attributes","attributes","descriptors","getOwnPropertyDescriptors","style","cssText","set_custom_element_data","prop","children","childNodes","set_data","wholeText","set_input_value","input","set_style","important","setProperty","is_crossorigin","parent","error","add_resize_listener","getComputedStyle","position","iframe","tabIndex","source","contentWindow","onload","toggle_class","toggle","classList","current_component","HtmlTag","html","h","nodeName","t","innerHTML","set_current_component","get_current_component","Error","beforeUpdate","before_update","onMount","on_mount","createEventDispatcher","type","detail","bubbles","createEvent","initCustomEvent","custom_event","getContext","context","bubble","_this2","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","resolve","update_scheduled","schedule_update","then","flush","tick","add_render_callback","add_flush_callback","flushing","seen_callbacks","update","pop","clear","fragment","after_update","outros","outroing","group_outros","r","check_outros","transition_in","block","local","transition_out","globals","globalThis","global","outro_and_destroy_block","lookup","update_keyed_each","old_blocks","get_key","dynamic","list","destroy","create_each_block","next","get_context","old_indexes","new_blocks","new_lookup","deltas","child_ctx","abs","will_move","did_move","m","first","new_block","old_block","new_key","old_key","get_spread_update","levels","updates","to_null_out","accounted_for","get_spread_object","spread_props","index","bound","create_component","mount_component","customElement","new_on_destroy","map","filter","destroy_component","make_dirty","fill","init","create_fragment","not_equal","append_styles","parent_component","on_disconnect","skip_bound","root","ready","ret","hydrate","nodes","l","intro","SvelteComponent","$destroy","splice","$$props","$$set","keys","asyncGeneratorStep","gen","reject","_next","_throw","arg","info","done","_asyncToGenerator","err","runtime","exports","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","reverse","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","require$$0","_slicedToArray","arrayWithHoles","_i","_s","_e","_arr","_n","_d","iterableToArrayLimit","nonIterableRest","EOL","EOF","objectConverter","columns","JSON","stringify","join","inferColumns","rows","columnSet","row","column","pad","width","s","formatDate","date","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","csv","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","N","I","eof","eol","token","j","replace","preformatBody","formatValue","formatRow","parse","convert","customConverter","format","concat","formatBody","formatRows","dsv","csvParse","array","regionThe","place","nt","includes","uncap1","string","toLowerCase","uncap","num_word","frac_word","get_word","num","dict","OverUnder","lowest_label","lowest","label","figs","sigfig","Number","parseFloat","toPrecision","round","random","cur","cha","qui","ceil","otherEst","hiLo","optArKey","optAr","chains","entries","reduce","otherRank","locExt","ud","w1","w2","ones","ord","ordin","console","log","int","mod","suffixer","_defineProperty","isActive","isFirst","isHover","isSelectable","getOptionLabel","item","filterText","itemClasses","classes","isGroupHeader","isGroupItem","isItemFirst","isItemActive","isItemHover","isItemSelectable","optionIdentifier","itemIndex","hoverItemIndex","items","selectable","prev_items","listStyle","dispatch","container","VirtualList","Item","ItemComponent","isVirtualList","labelIdentifier","option","isCreator","getGroupHeaderLabel","itemHeight","hideEmptyState","noOptionsMessage","isMulti","activeItemIndex","listPlacement","listAutoWidth","listOffset","isScrollingTimer","isScrolling","handleSelect","handleHover","handleClick","stopPropagation","closeList","updateHoverItem","increment","isNonSelectableItem","scrollToActiveItem","className","offsetBounding","focusedElemBounding","querySelector","getBoundingClientRect","bottom","scrollTop","computePlacement","height","parentBounding","boundingContainer","out","top","left","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","any","isOutOfViewport","_hoverItemIndex","findIndex","clearTimeout","setTimeout","hoverItem","getSelectionLabel","activeValue","isDisabled","multiFullItemClearable","handleClear","viewport","contents","visible","mounted","average_height","start","end","height_map","viewport_height","content_height","row_height","offsetHeight","remaining","old_start","v","y","expected_height","actual_height","scrollTo","getElementsByTagName","refresh","convertStringItemsToObjects","_items","id","isCreatable","isFocused","placeholder","placeholderAlwaysShow","itemFilter","groupBy","groupFilter","groups","isGroupHeaderSelectable","loadOptions","hasError","containerStyles","createGroupHeaderItem","groupValue","createItem","isSearchable","inputStyles","isClearable","isWaiting","listOpen","loadOptionsInterval","inputAttributes","Icon","iconProps","showChevron","showIndicator","containerClasses","indicatorSvg","ClearIcon","_ClearIcon","_Item","List","_List","Selection","_Selection","MultiSelection","_MultiSelection","_VirtualList","filterMethod","filterResults","matchesFilter","some","groupValues","sortedGroupedItems","filterGroupedItems","addCreatableItem","_filterText","itemToCreate","prev_value","prev_filterText","prev_isFocused","prev_isMulti","_inputAttributes","selectedValue","getItems","func","wait","immediate","timeout","later","callNow","debounce","catch","warn","details","res","cancelled","filteredItems","checkValueForDuplicates","noDuplicates","ids","uniqueValues","val","findItem","selection","matchTo","find","handleMultiItemClear","itemToRemove","handleFocus","focus","ariaValues","ariaListOpen","count","ariaFocused","selected","updateValueDisplay","autocapitalize","autocomplete","autocorrect","spellcheck","tabindex","readonly","blur","showSelectedItem","showClearIcon","placeholderText","showMultiSelect","listProps","ariaSelection","ariaContext","_item","handleAriaContent","eventTarget","path","contains","relatedTarget","el","mode","autoClear","idKey","labelKey","groupKey","groupItems","fontSize","maxSelected","colors","darkMode","borderColor","sleep","ms","clearSelect","getElementsByClassName","onkeypress","split","archieml","load","slugBlacklist","whitespacePattern","nextLine","startKey","commandKey","arrayElement","scopePattern","scope","stack","stackScope","bufferScope","bufferKey","bufferString","isSkipping","comments","match","exec","parseCommandKey","arrayType","flags","parseArrayElement","parseScope","parseText","parseStartKey","substring","restOfLine","flushBuffer","incrementArrayElement","flushBufferInto","command","scopeType","scopeKey","lastStackItem","nesting","keyScope","parsedScopeKey","keyBits","stackScopeItem","arrayFirstKey","isNestedFreeform","existingBufferKey","support","Blob","viewClasses","isArrayBufferView","ArrayBuffer","isView","normalizeName","String","normalizeValue","iteratorFor","shift","Headers","headers","header","getOwnPropertyNames","consumed","body","bodyUsed","fileReaderReady","reader","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","rejected","arrayBuffer","isConsumed","byteOffset","readAsText","chars","fromCharCode","readArrayBufferAsText","formData","decode","json","oldValue","thisArg","methods","Request","upcased","credentials","signal","toUpperCase","referrer","cache","reParamSearch","getTime","form","trim","bytes","decodeURIComponent","Response","bodyInit","status","ok","statusText","clone","response","redirectStatuses","redirect","RangeError","location","DOMException","message","fetch","request","aborted","xhr","XMLHttpRequest","abortXhr","rawHeaders","getAllResponseHeaders","substr","line","parts","responseURL","responseText","ontimeout","onabort","open","fixUrl","withCredentials","responseType","setRequestHeader","onreadystatechange","readyState","send","polyfill","subscriber_queue","subscribers","new_value","run_queue","subscriber","invalidate","derived","stores","initial_value","single","stores_array","auto","inited","pending","cleanup","sync","unsubscribers","makeAccessor","acc","fromEntries","pair","filterObject","comparisonObj","partialDomain","domain","directive","calcDomain","$extents","$domain","NaN","delta","compare","lo","hi","mid","ascending","ascendingComparator","center","bisectRight","bisector","e10","sqrt","e5","e2","tickIncrement","step","power","floor","LN10","pow","initRange","range","factory","extend","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","min","Hsl","hslConvert","hsl2rgb","m1","m2","copy","channels","displayable","formatHsl","gamma","nogamma","exponential","constant","linear","rgbGamma","colorRgb","genericArray","nb","na","setTime","reA","reB","am","bm","bs","bi","lastIndex","q","number","one","zero","isNumberArray","numberArray","unit","normalize","bimap","interpolate","d0","d1","r0","r1","polymap","bisect","clamp","unknown","transformer","transform","untransform","piecewise","output","interpolateValue","rescale","clamper","scale","invert","interpolateNumber","_","rangeRound","interpolateRound","u","continuous","formatDecimalParts","toExponential","coefficient","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","align","sign","symbol","comma","precision","exponent","toFixed","toLocaleString","formatRounded","locale","formatPrefix","prefixes","grouping","thousands","group","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","formatTypes","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","i1","i0","formatTrim","Infinity","padding","tickFormat","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","nice","prestep","maxIter","transformPow","transformSqrt","transformSquare","powish","formatLocale","scaleLinear","z","exp","symlog","log1p","symexp","expm1","padScale","scaleType","findScaleType","lift","ground","getPadFunctions","isTime","d2","r2","paddingLeft","paddingRight","createScale","$scale","$padding","$nice","$reverse","$width","$height","$range","$percentScale","defaultRange","percentRange","calcBaseRange","getDefaultRange","defaultScales","createGetter","$acc","getRange","ssr","pointerEvents","containerWidth","containerHeight","custom","xDomain","yDomain","zDomain","rDomain","xNice","yNice","zNice","rNice","xReverse","defaultReverses","yReverse","zReverse","rReverse","xPadding","yPadding","zPadding","rPadding","xScale","yScale","zScale","rScale","xRange","yRange","zRange","rRange","extents","flatData","config","_percentRange","_containerWidth","_containerHeight","_x","_y","_z","_r","_custom","_data","_xDomain","_yDomain","_zDomain","_rDomain","_xNice","_yNice","_zNice","_rNice","_xReverse","_yReverse","_zReverse","_rReverse","_xPadding","_yPadding","_zPadding","_rPadding","_xScale","_yScale","_zScale","_rScale","_xRange","_yRange","_zRange","_rRange","_padding","_flatData","_extents","_config","activeGetters_d","$x","$y","$z","$r","padding_d","box_d","$containerWidth","$containerHeight","width_d","height_d","extents_d","$flatData","$activeGetters","getters","fields","kl","dl","vl","calcExtents","xDomain_d","yDomain_d","zDomain_d","rDomain_d","xScale_d","xGet_d","yScale_d","yGet_d","zScale_d","zGet_d","rScale_d","rGet_d","xRange_d","yRange_d","zRange_d","rRange_d","aspectRatio_d","setContext","activeGetters","aspectRatio","xGet","yGet","zGet","rGet","viewBox","zIndex","zIndexStyle","pointerEventsStyle","compare1","compare2","InternMap","keyof","defineProperties","_intern","_key","intern_get","intern_set","intern_delete","implicit","ordinal","transformSymlog","transformSymexp","symlogish","cubicInOut","is_date","get_interpolator","interpolators","tweened","defaults","target_value","opts","previous_task","started","delay","duration","easing","elapsed","defaultLocale","radiusFun","xFun","yOffset","tieBreakFn","_sfc32","maxR","rng","all","datum","originalIndex","_this","placed","sort","tieBreaker","allSortedByPriority","key_a","key_b","_getBestYPosition","uni","unique","forbiddenIntervals","xDist","other","sumOfRadii","yDist","forbiddenInterval","candidatePositions","flat","abs_a","abs_b","every","interval","coords","$custom","prevWidth","newcoords","animation","$yGet","$yScale","bandwidth","w","$xScale","$xGet","rVal","$rGet","$rRange","AccurateBeeswarm","$yRange","calculateYPositions","setCoords","$data","lineWidth","hover","hovered","select","highlighted","colorHover","colorSelect","colorHighlight","doHover","doSelect","$coords","gridlines","tickDashed","tickMarks","tickColor","textColor","formatTick","snapTicks","xTick","yTick","dxTick","dyTick","isBandwidth","tickVals","textAnchor","capi","comparison","horizontal","markerWidth","markerLength","splitStringEqually","inputString","words","midpoint","firstHalf","secondHalf","finalPositions","ind","finalPositionsExcludingCurrent","Dispatch","parseTypenames","typenames","types","on","typename","T","that","taskHead","taskTail","frame","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","_time","timer","time","restart","wake","timerFlush","t0","t2","t1","nap","poke","clearInterval","setInterval","pi","PI","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","tree","xm","ym","xp","yp","_root","leaf","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","vx","vy","radius","radii","strength","force","xi","yi","ri","ri2","visitAfter","prepare","visit","quad","rj","jiggle","initialize","_nodes","_random","child","cover","xz","yz","extent","x3","y3","quads","Quad","remove","retainer","previous","removeAll","initialAngle","simulation","alpha","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","fx","fy","initializeNodes","angle","initializeForce","randomSource","closest","strengths","Linear","_context","defined","curve","curveLinear","defined0","lineStart","lineEnd","point","pointX","pointY","areaStart","_line","areaEnd","_point","scaleSymlog","scaleOrdinal","xKey","yKey","zKey","yFormatTick","yMax","yMin","xAxis","yAxis","xTicks","yTicks","title","footer","legend","labels","area","areaOpacity","interactive","xPrefix","xSuffix","yPrefix","ySuffix","maxLabelLength","tweenOptions","distinct","getTotals","sum","curr","yDomSet","yDom","widthCalc","newYDom","yDomUpdate","groupedData","valKey","grpKey","stackData","groupData","middle","gridlinesParametersArray","textAnchorSplit","stroke","splitStringIntoThree","handleMouseOver","handleMouseOut","str","totalWords","third","d3","selectAll","yPosition","violinPlotData","violinFuncs","seriesParametersArray","circleData","labelYValue","backgroundToLabel","labelFontSize","hoverLabel","indicator","default","valuePrevYear","seriesPadding","distributionData","maxValue","pathCalc","pathCalcInv","pathCalcXKey","pathCalcInvXKey","distributionText","keyTranslation","annotationsArray","yAdj","yValue","indicatorsToExclude","indicatorCircleData","subKey","circleDataLower","circleDataHigher","minValue","years","xPosition","ownerSVGElement","laName","arrowhead","metric","atan","simulation2019","simulation2020","topic","singleBeeswarmSubDomains","mainLAData","englandData","surroundingLAData","circleRadius","simulation2019Update","nodes2019","simulation2020Update","nodes2020","forceSimulation","forceX","forceY","forceCollide","labelsYPositionArray","annotationCircle","annotationTextAnchor","annotationArrowhead","annotationFactor","current","keyObject","mainLA","england","surroundingLAs","full_rank","DistDotPlotChart","DoubleVerticalBeeswarmChart","LineChart","IndicatorDistDotPlotChart","latest_rank","region","subDist","indis","subtitle","subDomains","latest_val","latest_change","indicatorData","colWidth","options2","topbotnp","yr","sto","domLU","subdomains","total","rank","template","booleanCheck","txt","loaded","checkHash","search","hash","code","loadArea","asyncLoop","whichMet","ob","ar","tob","dont_compare1yr","indiSort","change","temp_ob","indiname","incidents","indikey","indisJSON","history","replaceState","twoindis","makeChartData","temp","stories","embedLocal","embedJS","someregJSON","embedCode","makeEmbedCode","domluJSON","someJSON","indikeyJSON","indLU","indluJSON","preres","rosaenlg_en_US","render","language","caveats","caveatsNoise","dont_include","orda","negs","indicatorDistributionData","chart_data","mostRecentYear","subDomainDistributionData","navigator","clipboard","writeText","alert"],"mappings":"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"}