{"version":3,"file":"useMapZoom-Dp-s6W4b.cjs","names":["degrees","identity","identity","decompose","number","epsilon2","Timer","getCoords","getCoords","areaRingSum","areaSum","lambda00","phi00","lambda0","areaStream","areaRingStart","areaRingEnd","areaPointFirst","areaPoint","boundsStream","boundsPoint","areaRingSum","compose","pointEqual","clipBuffer","polygonContains","clip","pointEqual","clip","clipBuffer","clipLine","x00","y00","x0","y0","x0","y0","x00","y00","x0","y0","pathArea","pathMeasure","pathBounds","pathCentroid","identity","clipAntimeridian","identity","clipCircle","resample","compose","rotation","select","noevent","dispatch","timer","timeout","interpolateNumber","color","interpolateRgb","interpolateString","namespace","interpolateTransform","interpolate","namespace","matcher","selector","selectorAll","selection","style","interpolateTransform","interpolate","selection","transition_select","transition_selectAll","transition_filter","transition_merge","transition_selection","transition_transition","transition_on","transition_attr","transition_attrTween","transition_style","transition_styleTween","transition_text","transition_textTween","transition_remove","transition_tween","transition_delay","transition_duration","transition_ease","transition_easeVarying","transition_end","easeCubicInOut","now","selection_interrupt","selection_transition","interpolateZoom","dispatch","select","pointer","constant"],"sources":["../node_modules/d3-array/src/fsum.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-timer/src/timeout.js","../node_modules/@turf/clone/dist/esm/index.js","../node_modules/@turf/boolean-clockwise/node_modules/@turf/invariant/dist/esm/index.js","../node_modules/@turf/boolean-clockwise/dist/esm/index.js","../node_modules/@turf/rewind/node_modules/@turf/helpers/dist/esm/index.js","../node_modules/@turf/rewind/node_modules/@turf/meta/dist/esm/index.js","../node_modules/@turf/rewind/node_modules/@turf/invariant/dist/esm/index.js","../node_modules/@turf/rewind/dist/esm/index.js","../src/Utils/detectGeoFormat.ts","../src/hooks/useMapShapeData.ts","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/equalEarth.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../src/Components/Elements/MapZoomButton.tsx","../src/hooks/useMapProjection.ts","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../src/hooks/useMapZoom.ts"],"sourcesContent":["// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","// index.ts\nfunction clone(geojson) {\n  if (!geojson) {\n    throw new Error(\"geojson is required\");\n  }\n  switch (geojson.type) {\n    case \"Feature\":\n      return cloneFeature(geojson);\n    case \"FeatureCollection\":\n      return cloneFeatureCollection(geojson);\n    case \"Point\":\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiPoint\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n    case \"GeometryCollection\":\n      return cloneGeometry(geojson);\n    default:\n      throw new Error(\"unknown GeoJSON type\");\n  }\n}\nfunction cloneFeature(geojson) {\n  const cloned = { type: \"Feature\" };\n  Object.keys(geojson).forEach((key) => {\n    switch (key) {\n      case \"type\":\n      case \"properties\":\n      case \"geometry\":\n        return;\n      default:\n        cloned[key] = geojson[key];\n    }\n  });\n  cloned.properties = cloneProperties(geojson.properties);\n  if (geojson.geometry == null) {\n    cloned.geometry = null;\n  } else {\n    cloned.geometry = cloneGeometry(geojson.geometry);\n  }\n  return cloned;\n}\nfunction cloneProperties(properties) {\n  const cloned = {};\n  if (!properties) {\n    return cloned;\n  }\n  Object.keys(properties).forEach((key) => {\n    const value = properties[key];\n    if (typeof value === \"object\") {\n      if (value === null) {\n        cloned[key] = null;\n      } else if (Array.isArray(value)) {\n        cloned[key] = value.map((item) => {\n          return item;\n        });\n      } else {\n        cloned[key] = cloneProperties(value);\n      }\n    } else {\n      cloned[key] = value;\n    }\n  });\n  return cloned;\n}\nfunction cloneFeatureCollection(geojson) {\n  const cloned = { type: \"FeatureCollection\" };\n  Object.keys(geojson).forEach((key) => {\n    switch (key) {\n      case \"type\":\n      case \"features\":\n        return;\n      default:\n        cloned[key] = geojson[key];\n    }\n  });\n  cloned.features = geojson.features.map((feature) => {\n    return cloneFeature(feature);\n  });\n  return cloned;\n}\nfunction cloneGeometry(geometry) {\n  const geom = { type: geometry.type };\n  if (geometry.bbox) {\n    geom.bbox = geometry.bbox;\n  }\n  if (geometry.type === \"GeometryCollection\") {\n    geom.geometries = geometry.geometries.map((g) => {\n      return cloneGeometry(g);\n    });\n    return geom;\n  }\n  geom.coordinates = deepSlice(geometry.coordinates);\n  return geom;\n}\nfunction deepSlice(coords) {\n  const cloned = coords;\n  if (typeof cloned[0] !== \"object\") {\n    return cloned.slice();\n  }\n  return cloned.map((coord) => {\n    return deepSlice(coord);\n  });\n}\nvar index_default = clone;\nexport {\n  clone,\n  cloneProperties,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n  if (!Array.isArray(coord)) {\n    if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n    return [...coord];\n  }\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\nfunction containsNumber(coordinates) {\n  if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n    return true;\n  }\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n    );\n  }\n}\nfunction featureOf(feature, type, name) {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n    );\n  }\n}\nfunction collectionOf(featureCollection, type, name) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n      );\n    }\n  }\n}\nfunction getGeom(geojson) {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\nfunction getType(geojson, _name) {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\nexport {\n  collectionOf,\n  containsNumber,\n  featureOf,\n  geojsonType,\n  getCoord,\n  getCoords,\n  getGeom,\n  getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { getCoords } from \"@turf/invariant\";\nfunction booleanClockwise(line) {\n  const ring = getCoords(line);\n  let sum = 0;\n  let i = 1;\n  let prev;\n  let cur;\n  while (i < ring.length) {\n    prev = cur || ring[0];\n    cur = ring[i];\n    sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\n    i++;\n  }\n  return sum > 0;\n}\nvar index_default = booleanClockwise;\nexport {\n  booleanClockwise,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n  centimeters: earthRadius * 100,\n  centimetres: earthRadius * 100,\n  degrees: 360 / (2 * Math.PI),\n  feet: earthRadius * 3.28084,\n  inches: earthRadius * 39.37,\n  kilometers: earthRadius / 1e3,\n  kilometres: earthRadius / 1e3,\n  meters: earthRadius,\n  metres: earthRadius,\n  miles: earthRadius / 1609.344,\n  millimeters: earthRadius * 1e3,\n  millimetres: earthRadius * 1e3,\n  nauticalmiles: earthRadius / 1852,\n  radians: 1,\n  yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n  acres: 247105e-9,\n  centimeters: 1e4,\n  centimetres: 1e4,\n  feet: 10.763910417,\n  hectares: 1e-4,\n  inches: 1550.003100006,\n  kilometers: 1e-6,\n  kilometres: 1e-6,\n  meters: 1,\n  metres: 1,\n  miles: 386e-9,\n  nauticalmiles: 29155334959812285e-23,\n  millimeters: 1e6,\n  millimetres: 1e6,\n  yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n  const feat = { type: \"Feature\" };\n  if (options.id === 0 || options.id) {\n    feat.id = options.id;\n  }\n  if (options.bbox) {\n    feat.bbox = options.bbox;\n  }\n  feat.properties = properties || {};\n  feat.geometry = geom;\n  return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n  switch (type) {\n    case \"Point\":\n      return point(coordinates).geometry;\n    case \"LineString\":\n      return lineString(coordinates).geometry;\n    case \"Polygon\":\n      return polygon(coordinates).geometry;\n    case \"MultiPoint\":\n      return multiPoint(coordinates).geometry;\n    case \"MultiLineString\":\n      return multiLineString(coordinates).geometry;\n    case \"MultiPolygon\":\n      return multiPolygon(coordinates).geometry;\n    default:\n      throw new Error(type + \" is invalid\");\n  }\n}\nfunction point(coordinates, properties, options = {}) {\n  if (!coordinates) {\n    throw new Error(\"coordinates is required\");\n  }\n  if (!Array.isArray(coordinates)) {\n    throw new Error(\"coordinates must be an Array\");\n  }\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be at least 2 numbers long\");\n  }\n  if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n    throw new Error(\"coordinates must contain numbers\");\n  }\n  const geom = {\n    type: \"Point\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return point(coords, properties);\n    }),\n    options\n  );\n}\nfunction polygon(coordinates, properties, options = {}) {\n  for (const ring of coordinates) {\n    if (ring.length < 4) {\n      throw new Error(\n        \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n      );\n    }\n    if (ring[ring.length - 1].length !== ring[0].length) {\n      throw new Error(\"First and last Position are not equivalent.\");\n    }\n    for (let j = 0; j < ring[ring.length - 1].length; j++) {\n      if (ring[ring.length - 1][j] !== ring[0][j]) {\n        throw new Error(\"First and last Position are not equivalent.\");\n      }\n    }\n  }\n  const geom = {\n    type: \"Polygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return polygon(coords, properties);\n    }),\n    options\n  );\n}\nfunction lineString(coordinates, properties, options = {}) {\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be an array of two or more positions\");\n  }\n  const geom = {\n    type: \"LineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return lineString(coords, properties);\n    }),\n    options\n  );\n}\nfunction featureCollection(features, options = {}) {\n  const fc = { type: \"FeatureCollection\" };\n  if (options.id) {\n    fc.id = options.id;\n  }\n  if (options.bbox) {\n    fc.bbox = options.bbox;\n  }\n  fc.features = features;\n  return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiLineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPoint\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPolygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n  const geom = {\n    type: \"GeometryCollection\",\n    geometries\n  };\n  return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n  if (precision && !(precision >= 0)) {\n    throw new Error(\"precision must be a positive number\");\n  }\n  const multiplier = Math.pow(10, precision || 0);\n  return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n  return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n  let angle = bearing % 360;\n  if (angle < 0) {\n    angle += 360;\n  }\n  return angle;\n}\nfunction azimuthToBearing(angle) {\n  angle = angle % 360;\n  if (angle > 180) {\n    return angle - 360;\n  } else if (angle < -180) {\n    return angle + 360;\n  }\n  return angle;\n}\nfunction radiansToDegrees(radians) {\n  const normalisedRadians = radians % (2 * Math.PI);\n  return normalisedRadians * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n  const normalisedDegrees = degrees % 360;\n  return normalisedDegrees * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n  if (!(length >= 0)) {\n    throw new Error(\"length must be a positive number\");\n  }\n  return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n  if (!(area >= 0)) {\n    throw new Error(\"area must be a positive number\");\n  }\n  const startFactor = areaFactors[originalUnit];\n  if (!startFactor) {\n    throw new Error(\"invalid original units\");\n  }\n  const finalFactor = areaFactors[finalUnit];\n  if (!finalFactor) {\n    throw new Error(\"invalid final units\");\n  }\n  return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n  return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n  return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n  if (!bbox) {\n    throw new Error(\"bbox is required\");\n  }\n  if (!Array.isArray(bbox)) {\n    throw new Error(\"bbox must be an Array\");\n  }\n  if (bbox.length !== 4 && bbox.length !== 6) {\n    throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n  }\n  bbox.forEach((num) => {\n    if (!isNumber(num)) {\n      throw new Error(\"bbox must only contain numbers\");\n    }\n  });\n}\nfunction validateId(id) {\n  if (!id) {\n    throw new Error(\"id is required\");\n  }\n  if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n    throw new Error(\"id must be a number or a string\");\n  }\n}\nexport {\n  areaFactors,\n  azimuthToBearing,\n  bearingToAzimuth,\n  convertArea,\n  convertLength,\n  degreesToRadians,\n  earthRadius,\n  factors,\n  feature,\n  featureCollection,\n  geometry,\n  geometryCollection,\n  isNumber,\n  isObject,\n  lengthToDegrees,\n  lengthToRadians,\n  lineString,\n  lineStrings,\n  multiLineString,\n  multiPoint,\n  multiPolygon,\n  point,\n  points,\n  polygon,\n  polygons,\n  radiansToDegrees,\n  radiansToLength,\n  round,\n  validateBBox,\n  validateId\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n  if (geojson === null) return;\n  var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n  for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n    geometryMaybeCollection = isFeatureCollection ? (\n      // @ts-expect-error: Known type conflict\n      geojson.features[featureIndex].geometry\n    ) : isFeature ? (\n      // @ts-expect-error: Known type conflict\n      geojson.geometry\n    ) : geojson;\n    isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n    stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n    for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n      var multiFeatureIndex = 0;\n      var geometryIndex = 0;\n      geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n      if (geometry === null) continue;\n      coords = geometry.coordinates;\n      var geomType = geometry.type;\n      wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n      switch (geomType) {\n        case null:\n          break;\n        case \"Point\":\n          if (\n            // @ts-expect-error: Known type conflict\n            callback(\n              coords,\n              coordIndex,\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex\n            ) === false\n          )\n            return false;\n          coordIndex++;\n          multiFeatureIndex++;\n          break;\n        case \"LineString\":\n        case \"MultiPoint\":\n          for (j = 0; j < coords.length; j++) {\n            if (\n              // @ts-expect-error: Known type conflict\n              callback(\n                coords[j],\n                coordIndex,\n                featureIndex,\n                multiFeatureIndex,\n                geometryIndex\n              ) === false\n            )\n              return false;\n            coordIndex++;\n            if (geomType === \"MultiPoint\") multiFeatureIndex++;\n          }\n          if (geomType === \"LineString\") multiFeatureIndex++;\n          break;\n        case \"Polygon\":\n        case \"MultiLineString\":\n          for (j = 0; j < coords.length; j++) {\n            for (k = 0; k < coords[j].length - wrapShrink; k++) {\n              if (\n                // @ts-expect-error: Known type conflict\n                callback(\n                  coords[j][k],\n                  coordIndex,\n                  featureIndex,\n                  multiFeatureIndex,\n                  geometryIndex\n                ) === false\n              )\n                return false;\n              coordIndex++;\n            }\n            if (geomType === \"MultiLineString\") multiFeatureIndex++;\n            if (geomType === \"Polygon\") geometryIndex++;\n          }\n          if (geomType === \"Polygon\") multiFeatureIndex++;\n          break;\n        case \"MultiPolygon\":\n          for (j = 0; j < coords.length; j++) {\n            geometryIndex = 0;\n            for (k = 0; k < coords[j].length; k++) {\n              for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                if (\n                  // @ts-expect-error: Known type conflict\n                  callback(\n                    coords[j][k][l],\n                    coordIndex,\n                    featureIndex,\n                    multiFeatureIndex,\n                    geometryIndex\n                  ) === false\n                )\n                  return false;\n                coordIndex++;\n              }\n              geometryIndex++;\n            }\n            multiFeatureIndex++;\n          }\n          break;\n        case \"GeometryCollection\":\n          for (j = 0; j < geometry.geometries.length; j++)\n            if (\n              // @ts-expect-error: Known type conflict\n              coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false\n            )\n              return false;\n          break;\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n  }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n  var previousValue = initialValue;\n  coordEach(\n    geojson,\n    function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (coordIndex === 0 && initialValue === void 0)\n        previousValue = currentCoord;\n      else\n        previousValue = callback(\n          // @ts-expect-error: Known type conflict\n          previousValue,\n          currentCoord,\n          coordIndex,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    },\n    excludeWrapCoord\n  );\n  return previousValue;\n}\nfunction propEach(geojson, callback) {\n  var i;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      for (i = 0; i < geojson.features.length; i++) {\n        if (callback(geojson.features[i].properties, i) === false) break;\n      }\n      break;\n    case \"Feature\":\n      callback(geojson.properties, 0);\n      break;\n  }\n}\nfunction propReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  propEach(geojson, function(currentProperties, featureIndex) {\n    if (featureIndex === 0 && initialValue === void 0)\n      previousValue = currentProperties;\n    else\n      previousValue = callback(previousValue, currentProperties, featureIndex);\n  });\n  return previousValue;\n}\nfunction featureEach(geojson, callback) {\n  if (geojson.type === \"Feature\") {\n    callback(geojson, 0);\n  } else if (geojson.type === \"FeatureCollection\") {\n    for (var i = 0; i < geojson.features.length; i++) {\n      if (callback(geojson.features[i], i) === false) break;\n    }\n  }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  featureEach(geojson, function(currentFeature, featureIndex) {\n    if (featureIndex === 0 && initialValue === void 0)\n      previousValue = currentFeature;\n    else previousValue = callback(previousValue, currentFeature, featureIndex);\n  });\n  return previousValue;\n}\nfunction coordAll(geojson) {\n  var coords = [];\n  coordEach(geojson, function(coord) {\n    coords.push(coord);\n  });\n  return coords;\n}\nfunction geomEach(geojson, callback) {\n  var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n  for (i = 0; i < stop; i++) {\n    geometryMaybeCollection = isFeatureCollection ? (\n      // @ts-expect-error: Known type conflict\n      geojson.features[i].geometry\n    ) : isFeature ? (\n      // @ts-expect-error: Known type conflict\n      geojson.geometry\n    ) : geojson;\n    featureProperties = isFeatureCollection ? (\n      // @ts-expect-error: Known type conflict\n      geojson.features[i].properties\n    ) : isFeature ? (\n      // @ts-expect-error: Known type conflict\n      geojson.properties\n    ) : {};\n    featureBBox = isFeatureCollection ? (\n      // @ts-expect-error: Known type conflict\n      geojson.features[i].bbox\n    ) : isFeature ? (\n      // @ts-expect-error: Known type conflict\n      geojson.bbox\n    ) : void 0;\n    featureId = isFeatureCollection ? (\n      // @ts-expect-error: Known type conflict\n      geojson.features[i].id\n    ) : isFeature ? (\n      // @ts-expect-error: Known type conflict\n      geojson.id\n    ) : void 0;\n    isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n    stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n    for (g = 0; g < stopG; g++) {\n      geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n      if (geometry === null) {\n        if (\n          // @ts-expect-error: Known type conflict\n          callback(\n            // @ts-expect-error: Known type conflict\n            null,\n            featureIndex,\n            featureProperties,\n            featureBBox,\n            featureId\n          ) === false\n        )\n          return false;\n        continue;\n      }\n      switch (geometry.type) {\n        case \"Point\":\n        case \"LineString\":\n        case \"MultiPoint\":\n        case \"Polygon\":\n        case \"MultiLineString\":\n        case \"MultiPolygon\": {\n          if (\n            // @ts-expect-error: Known type conflict\n            callback(\n              geometry,\n              featureIndex,\n              featureProperties,\n              featureBBox,\n              featureId\n            ) === false\n          )\n            return false;\n          break;\n        }\n        case \"GeometryCollection\": {\n          for (j = 0; j < geometry.geometries.length; j++) {\n            if (\n              // @ts-expect-error: Known type conflict\n              callback(\n                geometry.geometries[j],\n                featureIndex,\n                featureProperties,\n                featureBBox,\n                featureId\n              ) === false\n            )\n              return false;\n          }\n          break;\n        }\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n    featureIndex++;\n  }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  geomEach(\n    geojson,\n    function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n      if (featureIndex === 0 && initialValue === void 0)\n        previousValue = currentGeometry;\n      else\n        previousValue = callback(\n          // @ts-expect-error: Known type conflict\n          previousValue,\n          currentGeometry,\n          featureIndex,\n          featureProperties,\n          featureBBox,\n          featureId\n        );\n    }\n  );\n  return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n  geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n    var type = geometry === null ? null : geometry.type;\n    switch (type) {\n      case null:\n      case \"Point\":\n      case \"LineString\":\n      case \"Polygon\":\n        if (\n          // @ts-expect-error: Known type conflict\n          callback(\n            feature(geometry, properties, { bbox, id }),\n            featureIndex,\n            0\n          ) === false\n        )\n          return false;\n        return;\n    }\n    var geomType;\n    switch (type) {\n      case \"MultiPoint\":\n        geomType = \"Point\";\n        break;\n      case \"MultiLineString\":\n        geomType = \"LineString\";\n        break;\n      case \"MultiPolygon\":\n        geomType = \"Polygon\";\n        break;\n    }\n    for (\n      var multiFeatureIndex = 0;\n      // @ts-expect-error: Known type conflict\n      multiFeatureIndex < geometry.coordinates.length;\n      multiFeatureIndex++\n    ) {\n      var coordinate = geometry.coordinates[multiFeatureIndex];\n      var geom = {\n        type: geomType,\n        coordinates: coordinate\n      };\n      if (\n        // @ts-expect-error: Known type conflict\n        callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false\n      )\n        return false;\n    }\n  });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  flattenEach(\n    geojson,\n    function(currentFeature, featureIndex, multiFeatureIndex) {\n      if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n        previousValue = currentFeature;\n      else\n        previousValue = callback(\n          // @ts-expect-error: Known type conflict\n          previousValue,\n          currentFeature,\n          featureIndex,\n          multiFeatureIndex\n        );\n    }\n  );\n  return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n  flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n    var segmentIndex = 0;\n    if (!feature2.geometry) return;\n    var type = feature2.geometry.type;\n    if (type === \"Point\" || type === \"MultiPoint\") return;\n    var previousCoords;\n    var previousFeatureIndex = 0;\n    var previousMultiIndex = 0;\n    var prevGeomIndex = 0;\n    if (\n      // @ts-expect-error: Known type conflict\n      coordEach(\n        feature2,\n        function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n          if (\n            // @ts-expect-error: Known type conflict\n            previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex\n          ) {\n            previousCoords = currentCoord;\n            previousFeatureIndex = featureIndex;\n            previousMultiIndex = multiPartIndexCoord;\n            prevGeomIndex = geometryIndex;\n            segmentIndex = 0;\n            return;\n          }\n          var currentSegment = lineString(\n            // @ts-expect-error: Known type conflict\n            [previousCoords, currentCoord],\n            feature2.properties\n          );\n          if (\n            // @ts-expect-error: Known type conflict\n            callback(\n              // @ts-expect-error: Known type conflict\n              currentSegment,\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex,\n              segmentIndex\n            ) === false\n          )\n            return false;\n          segmentIndex++;\n          previousCoords = currentCoord;\n        }\n      ) === false\n    )\n      return false;\n  });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  var started = false;\n  segmentEach(\n    geojson,\n    function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n      if (started === false && initialValue === void 0)\n        previousValue = currentSegment;\n      else\n        previousValue = callback(\n          previousValue,\n          // @ts-expect-error: Known type conflict\n          currentSegment,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex,\n          segmentIndex\n        );\n      started = true;\n    }\n  );\n  return previousValue;\n}\nfunction lineEach(geojson, callback) {\n  if (!geojson) throw new Error(\"geojson is required\");\n  flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n    if (feature2.geometry === null) return;\n    var type = feature2.geometry.type;\n    var coords = feature2.geometry.coordinates;\n    switch (type) {\n      case \"LineString\":\n        if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n          return false;\n        break;\n      case \"Polygon\":\n        for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n          if (\n            // @ts-expect-error: Known type conflict\n            callback(\n              // @ts-expect-error: Known type conflict\n              lineString(coords[geometryIndex], feature2.properties),\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex\n            ) === false\n          )\n            return false;\n        }\n        break;\n    }\n  });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  lineEach(\n    geojson,\n    function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (featureIndex === 0 && initialValue === void 0)\n        previousValue = currentLine;\n      else\n        previousValue = callback(\n          previousValue,\n          currentLine,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    }\n  );\n  return previousValue;\n}\nfunction findSegment(geojson, options) {\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var segmentIndex = options.segmentIndex || 0;\n  var properties = options.properties;\n  var geometry;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n      if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n      return lineString(\n        // @ts-expect-error: Known type conflict\n        [coords[segmentIndex], coords[segmentIndex + 1]],\n        properties,\n        options\n      );\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          // @ts-expect-error: Known type conflict\n          coords[geometryIndex][segmentIndex],\n          // @ts-expect-error: Known type conflict\n          coords[geometryIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          // @ts-expect-error: Known type conflict\n          coords[multiFeatureIndex][segmentIndex],\n          // @ts-expect-error: Known type conflict\n          coords[multiFeatureIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = // @ts-expect-error: Known type conflict\n        coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n      return lineString(\n        [\n          // @ts-expect-error: Known type conflict\n          coords[multiFeatureIndex][geometryIndex][segmentIndex],\n          // @ts-expect-error: Known type conflict\n          coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var coordIndex = options.coordIndex || 0;\n  var properties = options.properties;\n  var geometry;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n      return point(coords, properties, options);\n    case \"MultiPoint\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      return point(coords[multiFeatureIndex], properties, options);\n    case \"LineString\":\n      if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n      return point(coords[coordIndex], properties, options);\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[geometryIndex].length + coordIndex;\n      return point(coords[geometryIndex][coordIndex], properties, options);\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex].length + coordIndex;\n      return point(coords[multiFeatureIndex][coordIndex], properties, options);\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n      return point(\n        coords[multiFeatureIndex][geometryIndex][coordIndex],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\nexport {\n  coordAll,\n  coordEach,\n  coordReduce,\n  featureEach,\n  featureReduce,\n  findPoint,\n  findSegment,\n  flattenEach,\n  flattenReduce,\n  geomEach,\n  geomReduce,\n  lineEach,\n  lineReduce,\n  propEach,\n  propReduce,\n  segmentEach,\n  segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n  if (!Array.isArray(coord)) {\n    if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n    return [...coord];\n  }\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\nfunction containsNumber(coordinates) {\n  if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n    return true;\n  }\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n    );\n  }\n}\nfunction featureOf(feature, type, name) {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n    );\n  }\n}\nfunction collectionOf(featureCollection, type, name) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n      );\n    }\n  }\n}\nfunction getGeom(geojson) {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\nfunction getType(geojson, _name) {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\nexport {\n  collectionOf,\n  containsNumber,\n  featureOf,\n  geojsonType,\n  getCoord,\n  getCoords,\n  getGeom,\n  getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { clone } from \"@turf/clone\";\nimport { booleanClockwise } from \"@turf/boolean-clockwise\";\nimport { geomEach, featureEach } from \"@turf/meta\";\nimport { getCoords } from \"@turf/invariant\";\nimport { featureCollection, isObject } from \"@turf/helpers\";\nfunction rewind(geojson, options = {}) {\n  var _a, _b;\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  const mutate = (_a = options.mutate) != null ? _a : false;\n  const reverse = (_b = options.reverse) != null ? _b : false;\n  if (!geojson) throw new Error(\"<geojson> is required\");\n  if (typeof reverse !== \"boolean\")\n    throw new Error(\"<reverse> must be a boolean\");\n  if (typeof mutate !== \"boolean\")\n    throw new Error(\"<mutate> must be a boolean\");\n  if (!mutate && geojson.type !== \"Point\" && geojson.type !== \"MultiPoint\") {\n    geojson = clone(geojson);\n  }\n  const results = [];\n  switch (geojson.type) {\n    case \"GeometryCollection\":\n      geomEach(geojson, function(geometry) {\n        rewindFeature(geometry, reverse);\n      });\n      return geojson;\n    case \"FeatureCollection\":\n      featureEach(geojson, function(feature) {\n        const rewoundFeature = rewindFeature(feature, reverse);\n        featureEach(rewoundFeature, function(result) {\n          results.push(result);\n        });\n      });\n      return featureCollection(results);\n  }\n  return rewindFeature(geojson, reverse);\n}\nfunction rewindFeature(geojson, reverse) {\n  const type = geojson.type === \"Feature\" ? geojson.geometry.type : geojson.type;\n  switch (type) {\n    case \"GeometryCollection\":\n      geomEach(geojson, function(geometry) {\n        rewindFeature(geometry, reverse);\n      });\n      return geojson;\n    case \"LineString\":\n      rewindLineString(getCoords(geojson), reverse);\n      return geojson;\n    case \"Polygon\":\n      rewindPolygon(getCoords(geojson), reverse);\n      return geojson;\n    case \"MultiLineString\":\n      getCoords(geojson).forEach(function(lineCoords) {\n        rewindLineString(lineCoords, reverse);\n      });\n      return geojson;\n    case \"MultiPolygon\":\n      getCoords(geojson).forEach(function(lineCoords) {\n        rewindPolygon(lineCoords, reverse);\n      });\n      return geojson;\n    case \"Point\":\n    case \"MultiPoint\":\n      return geojson;\n  }\n}\nfunction rewindLineString(coords, reverse) {\n  if (booleanClockwise(coords) === reverse) coords.reverse();\n}\nfunction rewindPolygon(coords, reverse) {\n  if (booleanClockwise(coords[0]) !== reverse) {\n    coords[0].reverse();\n  }\n  for (let i = 1; i < coords.length; i++) {\n    if (booleanClockwise(coords[i]) === reverse) {\n      coords[i].reverse();\n    }\n  }\n}\nvar index_default = rewind;\nexport {\n  index_default as default,\n  rewind\n};\n//# sourceMappingURL=index.js.map","type GeoFormat = 'topojson' | 'geojson' | 'unknown';\r\n\r\nconst GEOJSON_TYPES = new Set([\r\n  'FeatureCollection',\r\n  'Feature',\r\n  'Point',\r\n  'MultiPoint',\r\n  'LineString',\r\n  'MultiLineString',\r\n  'Polygon',\r\n  'MultiPolygon',\r\n  'GeometryCollection',\r\n]);\r\n\r\nexport function detectGeoFormat(data: unknown): GeoFormat {\r\n  if (!data || typeof data !== 'object') return 'unknown';\r\n  const d = data as Record<string, unknown>;\r\n\r\n  if (\r\n    d.type === 'Topology' &&\r\n    d.objects &&\r\n    typeof d.objects === 'object' &&\r\n    Array.isArray(d.arcs)\r\n  ) {\r\n    return 'topojson';\r\n  }\r\n\r\n  if (typeof d.type === 'string' && GEOJSON_TYPES.has(d.type)) {\r\n    return 'geojson';\r\n  }\r\n\r\n  return 'unknown';\r\n}\r\n","import rewind from '@turf/rewind';\r\nimport type { FeatureCollection } from 'geojson';\r\nimport { useEffect, useState } from 'react';\r\nimport type { Topology } from 'topojson-specification';\r\nimport { convertTopoJsonToGeoJson, convertTopoJsonUrlToGeoJson } from '@/Utils';\r\nimport { detectGeoFormat } from '@/Utils/detectGeoFormat';\r\nimport { fetchAndParseJSON } from '@/Utils/fetchAndParseData';\r\n\r\nconst BASE_URL =\r\n  'https://raw.githubusercontent.com/UNDP-Data/dv-country-geojson/refs/heads/main/Topojson_Map_Border';\r\n\r\nexport function useMapShapeData(\r\n  mapData?: FeatureCollection | Topology | string,\r\n  overlayMapData?: FeatureCollection | Topology | string,\r\n  rewindCoordinatesInMapData?: boolean,\r\n  showCostalBorder?: boolean,\r\n  showUNBorder?: boolean,\r\n) {\r\n  const [mapShape, setMapShape] = useState<FeatureCollection | undefined>(undefined);\r\n  const [mapBorderShape, setMapBorderShape] = useState<FeatureCollection | undefined>(undefined);\r\n  const [overlayMapShape, setOverlayMapShape] = useState<FeatureCollection | undefined>(undefined);\r\n  const hasMapData = !!mapData;\r\n  useEffect(() => {\r\n    if (typeof mapData !== 'string' && mapData) {\r\n      const geoJson =\r\n        detectGeoFormat(mapData) === 'geojson'\r\n          ? (mapData as FeatureCollection)\r\n          : convertTopoJsonToGeoJson(mapData as Topology);\r\n      setMapShape(\r\n        rewindCoordinatesInMapData\r\n          ? (rewind(geoJson, { reverse: true }) as FeatureCollection)\r\n          : geoJson,\r\n      );\r\n      return;\r\n    }\r\n    let cancelled = false;\r\n    const fetchData = mapData\r\n      ? fetchAndParseJSON(mapData)\r\n      : convertTopoJsonUrlToGeoJson(`${BASE_URL}/country_area.json`, 'BNDA_simplified_wgs84');\r\n    fetchData\r\n      .then((d) => {\r\n        if (!cancelled) {\r\n          const geoJson =\r\n            detectGeoFormat(d) === 'geojson'\r\n              ? (d as FeatureCollection)\r\n              : convertTopoJsonToGeoJson(d as Topology);\r\n          setMapShape(\r\n            rewindCoordinatesInMapData\r\n              ? (rewind(geoJson, { reverse: true }) as FeatureCollection)\r\n              : geoJson,\r\n          );\r\n        }\r\n      })\r\n      .catch((err) => {\r\n        if (!cancelled) console.error('Failed to load map data', err);\r\n      });\r\n    return () => {\r\n      cancelled = true;\r\n    };\r\n  }, [mapData, rewindCoordinatesInMapData]);\r\n  useEffect(() => {\r\n    if (hasMapData && !showUNBorder) {\r\n      setMapBorderShape(undefined);\r\n      return;\r\n    }\r\n    let cancelled = false;\r\n    convertTopoJsonUrlToGeoJson(\r\n      `${BASE_URL}/${showCostalBorder ? 'country_border_all' : 'country_border_inland'}.json`,\r\n      'BNDL_simplified_wgs84',\r\n    )\r\n      .then((d) => {\r\n        if (!cancelled) setMapBorderShape(d as FeatureCollection);\r\n      })\r\n      .catch((err) => {\r\n        if (!cancelled) console.error('Failed to load map border data', err);\r\n      });\r\n    return () => {\r\n      cancelled = true;\r\n    };\r\n  }, [hasMapData, showCostalBorder, showUNBorder]);\r\n  useEffect(() => {\r\n    if (!overlayMapData) {\r\n      setOverlayMapShape(undefined);\r\n      return;\r\n    }\r\n    if (typeof overlayMapData !== 'string') {\r\n      const geoJson =\r\n        detectGeoFormat(overlayMapData) === 'geojson'\r\n          ? (overlayMapData as FeatureCollection)\r\n          : convertTopoJsonToGeoJson(overlayMapData as Topology);\r\n      setOverlayMapShape(\r\n        rewindCoordinatesInMapData\r\n          ? (rewind(geoJson, { reverse: true }) as FeatureCollection)\r\n          : geoJson,\r\n      );\r\n      return;\r\n    }\r\n    let cancelled = false;\r\n    const fetchData = fetchAndParseJSON(overlayMapData);\r\n    fetchData\r\n      .then((d) => {\r\n        if (!cancelled) {\r\n          const geoJson =\r\n            detectGeoFormat(d) === 'geojson'\r\n              ? (d as FeatureCollection)\r\n              : convertTopoJsonToGeoJson(d as Topology);\r\n          setOverlayMapShape(\r\n            rewindCoordinatesInMapData\r\n              ? (rewind(geoJson, { reverse: true }) as FeatureCollection)\r\n              : geoJson,\r\n          );\r\n        }\r\n      })\r\n      .catch((err) => {\r\n        if (!cancelled) console.error('Failed to load overlay map data', err);\r\n      });\r\n    return () => {\r\n      cancelled = true;\r\n    };\r\n  }, [overlayMapData, rewindCoordinatesInMapData]);\r\n\r\n  return { mapShape, mapBorderShape, overlayMapShape };\r\n}\r\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum = new Adder();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum = new Adder();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(2),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 2 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, 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\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","interface Props {\r\n  handleZoom: (direction: 'in' | 'out') => void;\r\n}\r\n\r\nexport function MapZoomButton(props: Props) {\r\n  const { handleZoom } = props;\r\n  return (\r\n    <div className='absolute left-4 top-4 flex flex-col undp-viz-zoom-buttons'>\r\n      <button\r\n        type='button'\r\n        onClick={() => handleZoom('in')}\r\n        className='leading-0 px-2 py-3.5 text-content-secondary border border-stroke bg-surface-sm'\r\n      >\r\n        +\r\n      </button>\r\n      <button\r\n        type='button'\r\n        onClick={() => handleZoom('out')}\r\n        className='leading-0 px-2 py-3.5 text-content-secondary border border-t-0 border-stroke bg-surface-sm'\r\n      >\r\n        –\r\n      </button>\r\n    </div>\r\n  );\r\n}\r\n","import centerOfMass from '@turf/center-of-mass';\r\nimport {\r\n  type GeoProjection,\r\n  geoBounds,\r\n  geoEqualEarth,\r\n  geoMercator,\r\n  geoNaturalEarth1,\r\n  geoOrthographic,\r\n} from 'd3-geo';\r\nimport type { MapProjectionTypes } from '@/Types';\r\n\r\ninterface useMapProjectionOptions {\r\n  mapData: GeoJSON.FeatureCollection<GeoJSON.Geometry>;\r\n  zoomAndCenterByHighlightedIds?: boolean;\r\n  highlightedIds?: string[];\r\n  mapProperty?: string;\r\n  width: number;\r\n  height: number;\r\n  mapProjection: MapProjectionTypes;\r\n  scale: number;\r\n  centerPoint?: [number, number];\r\n  projectionRotate: [number, number] | [number, number, number];\r\n}\r\n\r\nconst projections: Record<MapProjectionTypes, () => GeoProjection> = {\r\n  mercator: geoMercator,\r\n  naturalEarth: geoNaturalEarth1,\r\n  orthographic: geoOrthographic,\r\n  equalEarth: geoEqualEarth,\r\n};\r\n\r\nexport function useMapProjection({\r\n  mapData,\r\n  mapProperty,\r\n  zoomAndCenterByHighlightedIds = false,\r\n  highlightedIds = [],\r\n  width,\r\n  height,\r\n  mapProjection,\r\n  scale,\r\n  centerPoint,\r\n  projectionRotate,\r\n}: useMapProjectionOptions) {\r\n  const isZoomingToHighlights =\r\n    zoomAndCenterByHighlightedIds && !!mapProperty && highlightedIds.length > 0;\r\n  const filteredMapData = {\r\n    ...mapData,\r\n    features:\r\n      zoomAndCenterByHighlightedIds && mapProperty\r\n        ? mapData.features.filter(\r\n            // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n            (d: any) =>\r\n              highlightedIds.length === 0 ||\r\n              highlightedIds?.indexOf(d.properties[mapProperty]) !== -1,\r\n          )\r\n        : mapData.features,\r\n  };\r\n\r\n  const center = centerOfMass(filteredMapData).geometry.coordinates as [number, number];\r\n  let rotate = projectionRotate;\r\n  if (isZoomingToHighlights) {\r\n    const [[west, _south], [east, _north]] = geoBounds(filteredMapData);\r\n    const midLon = center[0];\r\n    const midLat = center[1];\r\n    if (mapProjection === 'orthographic') {\r\n      rotate = [-midLon, -midLat];\r\n    } else if (west > east) {\r\n      rotate = [-midLon, 0];\r\n    }\r\n  }\r\n\r\n  const projection = (projections[mapProjection] ?? geoEqualEarth)()\r\n    .rotate(rotate)\r\n    .fitSize([width, height], filteredMapData);\r\n  const cx = width / 2;\r\n  const cy = height / 2;\r\n  const [tx, ty] = projection.translate();\r\n  projection\r\n    .scale(projection.scale() * scale)\r\n    .translate([cx + (tx - cx) * scale, cy + (ty - cy) * scale]);\r\n\r\n  if (centerPoint) {\r\n    const p = projection(centerPoint);\r\n    if (p) {\r\n      const [tx2, ty2] = projection.translate();\r\n      projection.translate([tx2 + cx - p[0], ty2 + cy - p[1]]);\r\n    }\r\n  }\r\n\r\n  return { projection };\r\n}\r\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","import { select } from 'd3-selection';\r\nimport { type D3ZoomEvent, type ZoomBehavior, zoom } from 'd3-zoom';\r\nimport { type RefObject, useCallback, useEffect, useRef } from 'react';\r\nimport type { ZoomInteractionTypes } from '@/Types';\r\n\r\ninterface UseMapZoomOptions {\r\n  mapSvg: RefObject<SVGSVGElement | null>;\r\n  mapG: RefObject<SVGGElement | null>;\r\n  width: number;\r\n  height: number;\r\n  zoomInteraction: ZoomInteractionTypes;\r\n  zoomScaleExtend: [number, number];\r\n  zoomTranslateExtend?: [[number, number], [number, number]];\r\n}\r\n\r\nexport function useMapZoom({\r\n  mapSvg,\r\n  mapG,\r\n  width,\r\n  height,\r\n  zoomInteraction,\r\n  zoomScaleExtend,\r\n  zoomTranslateExtend,\r\n}: UseMapZoomOptions) {\r\n  const zoomRef = useRef<ZoomBehavior<SVGSVGElement, unknown> | null>(null);\r\n  const [minScale, maxScale] = zoomScaleExtend;\r\n  const translateExtentKey = zoomTranslateExtend?.flat().join(',') ?? '';\r\n  useEffect(() => {\r\n    if (!mapSvg.current || !mapG.current) return;\r\n\r\n    const svgSelect = select<SVGSVGElement, unknown>(mapSvg.current);\r\n    const gSelect = select(mapG.current);\r\n\r\n    const zoomFilter = (e: D3ZoomEvent<SVGSVGElement, unknown>['sourceEvent']) => {\r\n      if (zoomInteraction === 'noZoom') return false;\r\n      if (zoomInteraction === 'button') return !e.type.includes('wheel');\r\n      const isWheel = e.type === 'wheel';\r\n      const isTouch = e.type.startsWith('touch');\r\n      const isDrag = e.type === 'mousedown' || e.type === 'mousemove';\r\n\r\n      if (isTouch) return true;\r\n      if (isWheel) {\r\n        if (zoomInteraction === 'scroll') return true;\r\n        return e.ctrlKey;\r\n      }\r\n      return isDrag && !e.button && !e.ctrlKey;\r\n    };\r\n\r\n    const zoomBehavior = zoom<SVGSVGElement, unknown>()\r\n      .scaleExtent([minScale, maxScale])\r\n      .translateExtent(\r\n        zoomTranslateExtend || [\r\n          [-20, -20],\r\n          [width + 20, height + 20],\r\n        ],\r\n      )\r\n      .filter(zoomFilter)\r\n      .on('zoom', ({ transform }) => {\r\n        gSelect.attr('transform', transform.toString());\r\n      });\r\n\r\n    svgSelect.call(zoomBehavior);\r\n    zoomRef.current = zoomBehavior;\r\n\r\n    return () => {\r\n      svgSelect.on('.zoom', null);\r\n      zoomRef.current = null;\r\n    };\r\n  }, [mapSvg, mapG, width, height, zoomInteraction, minScale, maxScale, translateExtentKey]);\r\n\r\n  const handleZoom = useCallback(\r\n    (direction: 'in' | 'out') => {\r\n      if (!mapSvg.current || !zoomRef.current) return;\r\n      select<SVGSVGElement, unknown>(mapSvg.current).call(\r\n        zoomRef.current.scaleBy,\r\n        direction === 'in' ? 1.2 : 1 / 1.2,\r\n      );\r\n    },\r\n    [mapSvg],\r\n  );\r\n\r\n  return { zoomRef, handleZoom };\r\n}\r\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87],"mappings":"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"}