@motionscript/geography 0.1.0 → 0.1.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +4 -5
- package/dist/border/format.d.ts +1 -1
- package/dist/border/format.d.ts.map +1 -1
- package/dist/border/format.js.map +1 -1
- package/dist/border/geo-border.d.ts +1 -13
- package/dist/border/geo-border.d.ts.map +1 -1
- package/dist/border/geo-border.js.map +1 -1
- package/dist/border/index.d.ts +0 -8
- package/dist/border/index.d.ts.map +1 -1
- package/dist/border/index.js +2 -8
- package/dist/border/index.js.map +1 -1
- package/dist/browser/index.js.map +2 -2
- package/dist/browser/manifest.json +1 -1
- package/dist/nodes.d.ts +0 -12
- package/dist/nodes.d.ts.map +1 -1
- package/dist/nodes.js +0 -12
- package/dist/nodes.js.map +1 -1
- package/package.json +4 -4
- package/src/border/format.ts +1 -1
- package/src/border/geo-border.ts +0 -12
- package/src/border/index.ts +2 -8
- package/src/nodes.ts +0 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/fsum.js", "../../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/merge.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/math.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/noop.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/stream.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/area.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/cartesian.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/bounds.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/compose.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/rotation.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/circle.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/buffer.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/pointEqual.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/rejoin.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/polygonContains.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/index.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/antimeridian.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/circle.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/line.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/clip/rectangle.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/identity.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/area.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/bounds.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/centroid.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/context.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/measure.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/string.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/path/index.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/transform.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/fit.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/resample.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/index.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/conic.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/cylindricalEqualArea.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/conicEqualArea.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/azimuthal.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/mercator.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/equirectangular.js", "../../../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/projection/orthographic.js", "../../src/border/format.ts", "../../src/border/geo-border.ts", "../../src/border/geometry.ts", "../../src/border/simplify.ts", "../../src/border/registry.ts", "../../src/border/loader.ts", "../../src/border/selection.ts", "../../src/nodes.ts"],
|
|
4
|
-
"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", "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\u2019s\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\u00B0) % 360\u00B0, except that we want\n// the distance between \u00B1180\u00B0 to be 360\u00B0.\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\u00B0, 0\u00B0], 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\u2019s 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 \u2A2F 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\u2019s 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 {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n", "import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n", "import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\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\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\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", "import { geoArea } from \"d3-geo\"\n\n/** The on-disk shape `@motionscript/geography` writes; see its `generate.mjs`. */\nexport const GEO_DATA_FORMAT = 1\n\nexport interface GeoFileData {\n format: number\n source?: string\n transform: { scale: [number, number]; translate: [number, number] }\n /** Global arc id per local arc — identical across files for a shared border. */\n arcIds: number[]\n /** Per arc, flat `[x0, y0, w0, dx, dy, w, …]`: delta-encoded quantized lon/lat and a weight bucket. */\n arcs: number[][]\n features: GeoFeatureData[]\n}\n\nexport interface GeoFeatureData {\n code: string\n name: string\n nameNl?: string\n parent: string | null\n first: boolean\n listed: boolean\n remote?: boolean\n area: number\n mainland: number[] | null\n areas: number[]\n /** Polygons → rings → arc refs (`~i` is arc `i` reversed). */\n polygons: number[][][]\n}\n\n/** `[code, name, nameNl, parent, first]` per listed region. */\nexport type GeoIndexEntry = [string, string, string, string | null, 0 | 1]\n\nexport interface GeoIndex {\n format: number\n source?: string\n regions: GeoIndexEntry[]\n}\n\nexport interface GeoArc {\n /** Identity for de-duplicating a border drawn by two regions, across files. */\n key: number | string\n /** Interleaved lon/lat, in degrees. */\n points: Float64Array\n /** Per point: 0 always survives, higher buckets are less significant; see `thresholdBucket`. */\n buckets: Uint8Array\n}\n\nexport interface GeoRingRef {\n arc: GeoArc\n reversed: boolean\n}\n\nexport interface GeoPolygon {\n rings: GeoRingRef[][]\n /** Per ring, in steradians — exterior first, then holes. */\n ringAreas: number[]\n area: number\n mainland: boolean\n}\n\nexport interface GeoFeature {\n code: string\n name: string\n nameNl: string\n parent: string | null\n first: boolean\n listed: boolean\n remote: boolean\n polygons: GeoPolygon[]\n}\n\nexport interface DecodedGeoFile {\n features: Map<string, GeoFeature>\n}\n\nfunction decodeArc(encoded: number[], key: number, [kx, ky]: [number, number], [tx, ty]: [number, number]): GeoArc {\n const count = encoded.length / 3\n const points = new Float64Array(count * 2)\n const buckets = new Uint8Array(count)\n let x = 0\n let y = 0\n for (let i = 0; i < count; i++) {\n x += encoded[i * 3]\n y += encoded[i * 3 + 1]\n points[i * 2] = x * kx + tx\n points[i * 2 + 1] = y * ky + ty\n buckets[i] = encoded[i * 3 + 2]\n }\n return { key, points, buckets }\n}\n\nexport function ringCoordinates(ring: readonly GeoRingRef[]): [number, number][] {\n const out: [number, number][] = []\n for (const { arc, reversed } of ring) {\n const n = arc.buckets.length\n for (let j = out.length === 0 ? 0 : 1; j < n; j++) {\n const i = reversed ? n - 1 - j : j\n out.push([arc.points[i * 2], arc.points[i * 2 + 1]])\n }\n }\n return out\n}\n\n/** A ring's area in steradians, whichever way it winds. */\nexport function ringArea(ring: readonly GeoRingRef[]): number {\n const coordinates = ringCoordinates(ring)\n if (coordinates.length < 4) return 0\n const area = geoArea({ type: \"Polygon\", coordinates: [coordinates] })\n return area > 2 * Math.PI ? 4 * Math.PI - area : area\n}\n\nexport function decodeGeoFile(data: GeoFileData): DecodedGeoFile {\n if (data.format !== GEO_DATA_FORMAT) {\n throw new Error(`geo data format ${data.format} is not supported (expected ${GEO_DATA_FORMAT})`)\n }\n const arcs = data.arcs.map((encoded, i) =>\n decodeArc(encoded, data.arcIds[i], data.transform.scale, data.transform.translate)\n )\n const ref = (index: number): GeoRingRef =>\n index < 0 ? { arc: arcs[~index], reversed: true } : { arc: arcs[index], reversed: false }\n\n const features = new Map<string, GeoFeature>()\n for (const f of data.features) {\n const mainland = f.mainland ? new Set(f.mainland) : null\n features.set(f.code, {\n code: f.code,\n name: f.name,\n nameNl: f.nameNl ?? f.name,\n parent: f.parent,\n first: f.first,\n listed: f.listed,\n remote: f.remote === true,\n polygons: f.polygons.map((rings, i) => {\n const resolved = rings.map((ring) => ring.map(ref))\n return {\n rings: resolved,\n ringAreas: resolved.map((ring, r) => (r === 0 ? f.areas[i] : ringArea(ring))),\n area: f.areas[i],\n mainland: mainland === null || mainland.has(i),\n }\n }),\n })\n }\n return { features }\n}\n", "import {\n Flow,\n Graphics2D,\n Paint,\n Shapes,\n Types,\n component2d,\n type EntryOptions,\n type FillResolved,\n type NodeOf,\n // Named so this component's emitted type reaches the shape surface it spreads through the sdk, not core.\n type Alignment as _Alignment,\n type Fill as _Fill,\n type FlowMode as _FlowMode,\n type FlowResolved as _FlowResolved,\n type GapSize as _GapSize,\n type Node2D as _Node2D,\n type Node2DProps as _Node2DProps,\n type Shadow as _Shadow,\n type Stroke as _Stroke,\n type Vector2 as _Vector2,\n type PathBounds,\n type ShadowResolved,\n type ShapeProps,\n type Size2D,\n type StrokeResolved,\n type Type,\n} from \"@motionscript/sdk\"\nimport { snapValue } from \"@motionscript/sdk/component\"\n\nimport { geoGeometry, type GeoBorders, type GeoContour, type GeoGeometry, type GeoProjectionKind } from \"./geometry\"\nimport { geoDataVersion, geoLoader } from \"./loader\"\nimport { geoRegistry } from \"./registry\"\nimport { geoFilesFor, normalizeIso, selectGeoFeatures, type GeoFrame, type GeoLevel } from \"./selection\"\n\nexport interface GeoBorderProps extends ShapeProps {\n /** ISO 3166-1 alpha-2 (`\"FR\"`) or ISO 3166-2 (`\"US-CA\"`) codes. */\n iso: string | readonly string[]\n level: GeoLevel\n /** 0–1: 1 is full resolution, lower is a more stylised outline. */\n detail: number\n projection: GeoProjectionKind\n frame: GeoFrame\n borders: GeoBorders\n}\n\ninterface Chunk {\n data: string\n /** Where this chunk's contours sit along the whole drawing, as fractions of its length. */\n from: number\n to: number\n}\n\ninterface Drawn {\n geometry: GeoGeometry\n width: number\n height: number\n fills: Chunk[]\n lines: Chunk[]\n}\n\n// A renderer's cost for one path grows faster than its contour count, and a shape\n// drawn as several paths under one paint is unioned every frame — so a region\n// is cut into paths of bounded size, each painted on its own.\nconst CONTOURS_PER_PATH = 256\nconst POINTS_PER_PATH = 40_000\n\nconst coordinate = (value: number) => String(Math.round(value * 100) / 100)\n\nfunction chunk(contours: readonly GeoContour[], total: number, scale: number): Chunk[] {\n const chunks: Chunk[] = []\n let parts: string[] = []\n let count = 0\n let points = 0\n let from = 0\n let length = 0\n const flush = () => {\n if (count === 0) return\n const to = total > 0 ? Math.min(1, length / total) : 1\n chunks.push({ data: parts.join(\"\"), from, to })\n from = to\n parts = []\n count = 0\n points = 0\n }\n for (const contour of contours) {\n const p = contour.points\n // Path data is y-down; the unit geometry is y-up.\n for (let i = 0; i < p.length; i += 2) {\n parts.push(i === 0 ? \"M\" : \"L\", coordinate(p[i] * scale), \" \", coordinate(-p[i + 1] * scale))\n }\n if (contour.closed) parts.push(\"Z\")\n count++\n points += p.length / 2\n length += contour.length\n if (count >= CONTOURS_PER_PATH || points >= POINTS_PER_PATH) flush()\n }\n flush()\n return chunks\n}\n\n/** One of `values`, switched at the end of a `to`, with its choices listed as its `options`. */\nfunction choice<const V extends readonly string[]>(values: V, initial: V[number]): Type<V[number]> {\n return Types.custom<V[number], V[number], EntryOptions & { readonly options: V }>(initial, { lerp: snapValue, options: values })\n}\n\n/** A node's own drawing state, kept by its fields' view (one object per node, the same every frame). */\ninterface Kept {\n drawn: Drawn | null\n readonly warned: Set<string>\n}\n\nconst kept = new WeakMap<object, Kept>()\n\nfunction keptBy(state: object): Kept {\n let entry = kept.get(state)\n if (!entry) kept.set(state, (entry = { drawn: null, warned: new Set() }))\n return entry\n}\n\ninterface Selected {\n readonly iso: readonly string[]\n readonly level: GeoLevel\n readonly frame: GeoFrame\n readonly projection: GeoProjectionKind\n readonly borders: GeoBorders\n readonly detail: number\n}\n\n/** The selection's outlines cut into paths at `size`, or `null` while there is nothing to draw. */\nfunction drawnOf(state: Selected, size: Size2D): Drawn | null {\n const own = keptBy(state)\n const codes = state.iso\n const { level, frame } = state\n const selection = selectGeoFeatures(codes, level, frame)\n for (const code of selection.unknown) {\n if (own.warned.has(code)) continue\n own.warned.add(code)\n console.warn(`[GeoBorder] no region with code ${code}`)\n }\n if (selection.features.length === 0) return null\n\n const geometry = geoGeometry({\n selectionKey: `${geoRegistry.generation}:${geoDataVersion()}:${level}:${frame}:${codes.join(\",\")}`,\n features: selection.features,\n frame,\n projection: state.projection,\n borders: state.borders,\n detail: state.detail,\n })\n if (!geometry) return null\n\n const { width, height } = size\n const cached = own.drawn\n if (cached && cached.geometry === geometry && cached.width === width && cached.height === height) return cached\n const scale = Math.min(width / geometry.width, height / geometry.height)\n const drawn: Drawn = {\n geometry,\n width,\n height,\n fills: chunk(geometry.fills, geometry.fillLength, scale),\n lines: chunk(geometry.lines, geometry.lineLength, scale),\n }\n own.drawn = drawn\n return drawn\n}\n\n/** Adds `chunk` to `g`, trimmed by `start`/`end` along the whole drawing; `false` when none of it is drawn. */\nfunction pathOp(g: Graphics2D, chunk: Chunk, size: Size2D, start: number, end: number): boolean {\n const { width, height } = size\n const centerBounds: PathBounds = [-width / 2, -height / 2, width / 2, height / 2]\n if (start <= 0 && end >= 1) {\n g.path({ data: chunk.data, centerBounds })\n return true\n }\n const span = chunk.to - chunk.from\n if (span <= 0) return false\n const localStart = Math.max(0, (start - chunk.from) / span)\n const localEnd = Math.min(1, (end - chunk.from) / span)\n if (localEnd <= localStart) return false\n g.path({ data: chunk.data, centerBounds, start: localStart, end: localEnd })\n return true\n}\n\n/**\n * Country and subdivision outlines by ISO 3166 code, fitted into the node's box.\n *\n * <GeoBorder iso={[\"FR\", \"DE\"]} detail={0.4} stroke={{ weight: 2, fill: \"white\" }} />\n *\n * Geometry comes from whatever `geoRegistry` has been given — a URL, a loader,\n * or shapes defined by hand — and loads as a declared asset, so a frame never\n * draws half a country. Fill and stroke are separate geometry: the fill is each\n * region's polygons, the stroke is every border once, which is why a border two\n * selected regions share is not drawn twice and why `stroke.align` does not\n * apply.\n */\nexport const GeoBorder = component2d({\n key: \"geoBorder\",\n state: {\n ...Paint.state,\n ...Flow.state,\n iso: Types.custom<string | readonly string[], string[]>([\"FR\"], { resolve: normalizeIso, lerp: snapValue }),\n level: choice([\"country\", \"state\"], \"country\"),\n detail: Types.number(0.5, { min: 0, max: 1, step: 0.01 }),\n projection: choice([\"conic\", \"mercator\", \"equirectangular\", \"orthographic\"], \"conic\"),\n frame: choice([\"mainland\", \"all\"], \"mainland\"),\n borders: choice([\"all\", \"outline\"], \"all\"),\n },\n commands: { ...Paint.commands },\n // The data gates the draw, not layout: the box never waits on it.\n load: (loader, state) => {\n for (const file of geoFilesFor(state.iso, state.level)) loader.task(`geo:${file}`, geoLoader(file))\n },\n measure: (measurer, state, children) => Flow.measure(measurer, state, children, Paint.inset(state)),\n layout: (box, state, children) => Flow.layout(box, state, children, Paint.inset(state)),\n render: (ctx, state) => {\n const size = ctx.size\n const { start, end } = state\n const fill = state.fill as FillResolved[]\n const shadow = state.shadow as ShadowResolved[]\n const drawn = () => drawnOf(state, size)\n\n ctx.inFront(() => {\n const shape = drawn()\n if (!shape || shape.fills.length === 0) return\n const g = new Graphics2D()\n for (const part of shape.fills) {\n if (!pathOp(g, part, size, start, end)) continue\n if (shadow.length > 0) g.shadow(shadow)\n g.fill(fill)\n }\n ctx.draw(g)\n })\n\n // The box, not the outline, confines the children and is what picking\n // tests: a path clip has no winding test, and a country's bounding box is\n // what the selection shows.\n Paint.draw(ctx, state, null, { clipShape: Shapes.box(size) })\n\n ctx.inFront(() => {\n const overlay = state.overlay as FillResolved[]\n if (overlay.length > 0) {\n const shape = drawn()\n if (shape) {\n const g = new Graphics2D()\n for (const part of shape.fills) if (pathOp(g, part, size, start, end)) g.fill(overlay)\n ctx.draw(g)\n }\n }\n\n const stroke = state.stroke as StrokeResolved[]\n if (stroke.length === 0) return\n const shape = drawn()\n if (!shape || shape.lines.length === 0) return\n const centred = stroke.map((layer) => (layer.align === 0 ? layer : { ...layer, align: 0 }))\n const castsShadow = shadow.length > 0 && !fill.some((layer) => (layer.opacity ?? 1) > 0)\n const g = new Graphics2D()\n for (const part of shape.lines) {\n if (!pathOp(g, part, size, start, end)) continue\n if (castsShadow) g.shadow(shadow)\n g.stroke(centred)\n }\n ctx.draw(g)\n })\n },\n})\n\nexport type GeoBorder = NodeOf<typeof GeoBorder>\n", "import {\n geoArea,\n geoBounds,\n geoConicEqualArea,\n geoEquirectangular,\n geoMercator,\n geoOrthographic,\n geoPath,\n geoStream,\n type GeoPermissibleObjects,\n type GeoProjection,\n} from \"d3-geo\"\n\nimport { ringCoordinates, type GeoArc, type GeoFeature, type GeoPolygon, type GeoRingRef } from \"./format\"\nimport type { GeoFrame } from \"./selection\"\n\nexport type GeoProjectionKind = \"conic\" | \"mercator\" | \"equirectangular\" | \"orthographic\"\nexport type GeoBorders = \"all\" | \"outline\"\n\nexport interface GeoContour {\n /** Interleaved x/y in unit space: the longer side spans 1, centred on the origin, y up. */\n points: Float32Array\n closed: boolean\n length: number\n}\n\nexport interface GeoGeometry {\n /** The drawing's extent in unit space; the longer of the two is 1. */\n width: number\n height: number\n fills: GeoContour[]\n lines: GeoContour[]\n fillLength: number\n lineLength: number\n bytes: number\n}\n\ninterface Part {\n polygon: GeoPolygon\n largest: boolean\n}\n\ninterface Frame {\n projection: GeoProjection\n centerX: number\n centerY: number\n size: number\n width: number\n height: number\n}\n\nconst FIT = 1024\n\n// `detail` maps onto a weight threshold that is a fraction of the selection's\n// own area, on a log scale — which is what makes a value look equally stylised\n// on Monaco and on Russia. 0 keeps points worth 1% of the area; just below 1,\n// points worth a billionth of it.\nconst POINT_BASE = 2\nconst POINT_RANGE = 7\nconst POLYGON_BASE = 1.5\nconst POLYGON_RANGE = 6\n\nconst clamp01 = (value: number) => (value > 1 ? 1 : value > 0 ? value : 0)\n\n/** The highest weight bucket a point may carry and still be drawn. */\nexport function pointBucketLimit(detail: number, area: number): number {\n if (detail >= 1 || !(area > 0)) return 255\n const minWeight = area * 10 ** -(POINT_BASE + POINT_RANGE * clamp01(detail))\n return Math.floor(-2 * Math.log2(minWeight))\n}\n\n/** Rings smaller than this (steradians) are dropped, bar each region's largest. */\nexport function polygonAreaLimit(detail: number, area: number): number {\n if (detail >= 1) return 0\n return area * 10 ** -(POLYGON_BASE + POLYGON_RANGE * clamp01(detail))\n}\n\nfunction partsOf(features: readonly GeoFeature[], frame: GeoFrame): Part[] {\n const parts: Part[] = []\n for (const feature of features) {\n const mainland = frame === \"mainland\" ? feature.polygons.filter((p) => p.mainland) : []\n const polygons = mainland.length > 0 ? mainland : feature.polygons\n let largest: GeoPolygon | null = null\n for (const polygon of polygons) if (!largest || polygon.area > largest.area) largest = polygon\n for (const polygon of polygons) parts.push({ polygon, largest: polygon === largest })\n }\n return parts\n}\n\nfunction centerLongitude(west: number, east: number): number {\n if (west <= east) return (west + east) / 2\n const mid = (west + east + 360) / 2\n return mid > 180 ? mid - 360 : mid\n}\n\nfunction makeProjection(kind: GeoProjectionKind, west: number, south: number, east: number, north: number): GeoProjection {\n const lon = centerLongitude(west, east)\n const lat = (south + north) / 2\n switch (kind) {\n case \"mercator\":\n return geoMercator().rotate([-lon, 0])\n case \"equirectangular\":\n return geoEquirectangular().rotate([-lon, 0])\n case \"orthographic\":\n return geoOrthographic().rotate([-lon, -lat])\n case \"conic\": {\n const span = north - south\n return geoConicEqualArea()\n .rotate([-lon, 0])\n .center([0, lat])\n .parallels([south + span / 6, north - span / 6])\n }\n }\n}\n\nfunction fitFrame(kind: GeoProjectionKind, parts: readonly Part[]): Frame | null {\n if (parts.length === 0) return null\n const shape = {\n type: \"MultiPolygon\",\n coordinates: parts.map(({ polygon }) => [ringCoordinates(polygon.rings[0])]),\n } as GeoPermissibleObjects\n const [[west, south], [east, north]] = geoBounds(shape)\n\n for (const candidate of [kind, \"equirectangular\"] as const) {\n const projection = makeProjection(candidate, west, south, east, north).fitSize([FIT, FIT], shape)\n const [[x0, y0], [x1, y1]] = geoPath(projection).bounds(shape)\n const size = Math.max(x1 - x0, y1 - y0)\n if (!Number.isFinite(size) || size <= 0) continue\n return {\n projection,\n centerX: (x0 + x1) / 2,\n centerY: (y0 + y1) / 2,\n size,\n width: (x1 - x0) / size,\n height: (y1 - y0) / size,\n }\n }\n return null\n}\n\nfunction project(frame: Frame, object: GeoPermissibleObjects, closed: boolean): GeoContour[] {\n const contours: GeoContour[] = []\n let current: number[] | null = null\n const { centerX, centerY, size } = frame\n const sink = {\n point(x: number, y: number) {\n current?.push((x - centerX) / size, -(y - centerY) / size)\n },\n lineStart() {\n current = []\n },\n lineEnd() {\n const flat = current\n current = null\n if (!flat || flat.length < 4) return\n let isClosed = closed\n if (!closed) {\n const n = flat.length\n if (flat[0] === flat[n - 2] && flat[1] === flat[n - 1] && n >= 8) {\n flat.length = n - 2\n isClosed = true\n }\n }\n const points = Float32Array.from(flat)\n contours.push({ points, closed: isClosed, length: contourLength(points, isClosed) })\n },\n polygonStart() {},\n polygonEnd() {},\n sphere() {},\n }\n geoStream(object, frame.projection.stream(sink))\n return contours\n}\n\nfunction contourLength(points: Float32Array, closed: boolean): number {\n let length = 0\n const n = points.length / 2\n for (let i = 1; i < n; i++) {\n length += Math.hypot(points[i * 2] - points[i * 2 - 2], points[i * 2 + 1] - points[i * 2 - 1])\n }\n if (closed && n > 1) length += Math.hypot(points[0] - points[n * 2 - 2], points[1] - points[n * 2 - 1])\n return length\n}\n\n// Longest edge, in degrees, that simplification may leave. d3 takes an edge as\n// the short way round the sphere, so an edge across more than half the planet\n// (Kaliningrad to Chukotka, once the coast between is dropped) turns inside out.\nconst MAX_EDGE_DEGREES = 20\n\ntype MaskFor = (arc: GeoArc) => Uint8Array\n\n/** Which of an arc's points survive `limit`, the same whichever way the arc is walked. */\nfunction keepMask(arc: GeoArc, limit: number): Uint8Array {\n const n = arc.buckets.length\n const mask = new Uint8Array(n)\n let lastLon = arc.points[0]\n let lastLat = arc.points[1]\n for (let i = 0; i < n; i++) {\n const lon = arc.points[i * 2]\n const lat = arc.points[i * 2 + 1]\n let far = false\n if (arc.buckets[i] > limit) {\n let dLon = Math.abs(lon - lastLon)\n if (dLon > 180) dLon = 360 - dLon\n far = Math.abs(lat - lastLat) > MAX_EDGE_DEGREES || dLon * Math.cos((lat * Math.PI) / 180) > MAX_EDGE_DEGREES\n }\n if (arc.buckets[i] <= limit || far) {\n mask[i] = 1\n lastLon = lon\n lastLat = lat\n }\n }\n return mask\n}\n\nfunction filteredPoints(refs: readonly GeoRingRef[], maskFor: MaskFor): [number, number][] {\n const out: [number, number][] = []\n for (const { arc, reversed } of refs) {\n const n = arc.buckets.length\n const mask = maskFor(arc)\n for (let j = out.length === 0 ? 0 : 1; j < n; j++) {\n const i = reversed ? n - 1 - j : j\n if (mask[i]) out.push([arc.points[i * 2], arc.points[i * 2 + 1]])\n }\n }\n return out\n}\n\n/** A ring keeps at least three vertices, raising its arcs' limits if the global one would collapse it. */\nfunction ringLimit(ring: readonly GeoRingRef[], limit: number): number {\n let kept = 0\n for (const { arc } of ring) {\n for (let i = 0; i < arc.buckets.length - 1; i++) if (arc.buckets[i] <= limit) kept++\n }\n if (kept >= 3) return limit\n const buckets: number[] = []\n for (const { arc } of ring) for (let i = 0; i < arc.buckets.length - 1; i++) buckets.push(arc.buckets[i])\n buckets.sort((a, b) => a - b)\n return Math.max(limit, buckets[Math.min(2, buckets.length - 1)] ?? limit)\n}\n\n/**\n * Whether a simplified ring still winds the way its original did. Dropping\n * points can fold a small ring over itself, and d3 reads an exterior wound the\n * wrong way as the rest of the planet — one such island fills the whole frame.\n */\nfunction windsAsOriginal(ring: [number, number][], exterior: boolean): boolean {\n if (ring.length < 4) return true\n const inverted = geoArea({ type: \"Polygon\", coordinates: [ring] }) > 2 * Math.PI\n return inverted !== exterior\n}\n\ninterface Chain {\n refs: GeoRingRef[]\n closed: boolean\n}\n\nconst endKey = (arc: GeoArc, last: boolean) => {\n const i = last ? arc.buckets.length - 1 : 0\n return `${arc.points[i * 2]},${arc.points[i * 2 + 1]}`\n}\n\n/** Joins arcs that meet end to end with nothing else at the joint, so a border draws as one line with real joins. */\nfunction chainArcs(arcs: readonly GeoArc[]): Chain[] {\n const atNode = new Map<string, GeoArc[]>()\n for (const arc of arcs) {\n for (const key of [endKey(arc, false), endKey(arc, true)]) {\n const list = atNode.get(key)\n if (list) list.push(arc)\n else atNode.set(key, [arc])\n }\n }\n const visited = new Set<GeoArc>()\n const chains: Chain[] = []\n const refStart = ({ arc, reversed }: GeoRingRef) => endKey(arc, reversed)\n const refEnd = ({ arc, reversed }: GeoRingRef) => endKey(arc, !reversed)\n const nextAt = (node: string): GeoArc | null => {\n const list = atNode.get(node)!\n if (list.length !== 2) return null\n return list.find((arc) => !visited.has(arc)) ?? null\n }\n\n for (const arc of arcs) {\n if (visited.has(arc)) continue\n visited.add(arc)\n const refs: GeoRingRef[] = [{ arc, reversed: false }]\n for (let next = nextAt(refEnd(refs[refs.length - 1])); next; next = nextAt(refEnd(refs[refs.length - 1]))) {\n visited.add(next)\n refs.push({ arc: next, reversed: endKey(next, false) !== refEnd(refs[refs.length - 1]) })\n }\n for (let prev = nextAt(refStart(refs[0])); prev; prev = nextAt(refStart(refs[0]))) {\n visited.add(prev)\n refs.unshift({ arc: prev, reversed: endKey(prev, true) !== refStart(refs[0]) })\n }\n chains.push({ refs, closed: refStart(refs[0]) === refEnd(refs[refs.length - 1]) })\n }\n return chains\n}\n\nfunction buildGeometry(\n features: readonly GeoFeature[],\n frame: GeoFrame,\n fitted: Frame,\n borders: GeoBorders,\n detail: number\n): GeoGeometry {\n const parts = partsOf(features, frame)\n const area = parts.reduce((sum, { polygon }) => sum + polygon.area, 0)\n const pointLimit = pointBucketLimit(detail, area)\n const polygonLimit = polygonAreaLimit(detail, area)\n\n const kept: GeoRingRef[][][] = []\n for (const { polygon, largest } of parts) {\n if (!largest && polygon.area < polygonLimit) continue\n kept.push(polygon.rings.filter((_, i) => i === 0 || polygon.ringAreas[i] >= polygonLimit))\n }\n\n const limits = new Map<GeoArc[\"key\"], number>()\n const usage = new Map<GeoArc[\"key\"], { arc: GeoArc; count: number }>()\n for (const rings of kept) {\n for (const ring of rings) {\n const limit = ringLimit(ring, pointLimit)\n for (const { arc } of ring) {\n limits.set(arc.key, Math.max(limits.get(arc.key) ?? 0, limit))\n const use = usage.get(arc.key)\n if (use) use.count++\n else usage.set(arc.key, { arc, count: 1 })\n }\n }\n }\n\n const masks = new Map<GeoArc[\"key\"], Uint8Array>()\n const maskFor: MaskFor = (arc) => {\n let mask = masks.get(arc.key)\n if (!mask) {\n mask = keepMask(arc, limits.get(arc.key) ?? 255)\n masks.set(arc.key, mask)\n }\n return mask\n }\n\n if (pointLimit < 255) {\n for (const rings of kept) {\n rings.forEach((ring, index) => {\n let limit = Math.min(...ring.map(({ arc }) => limits.get(arc.key) ?? pointLimit))\n while (limit < 255 && !windsAsOriginal(filteredPoints(ring, maskFor), index === 0)) {\n limit = Math.min(255, limit + 2)\n for (const { arc } of ring) {\n limits.set(arc.key, Math.max(limits.get(arc.key) ?? 0, limit))\n masks.delete(arc.key)\n }\n }\n })\n }\n }\n\n const fills = project(\n fitted,\n {\n type: \"MultiPolygon\",\n coordinates: kept.flatMap((rings) => {\n const [exterior, ...holes] = rings.map((ring) => filteredPoints(ring, maskFor))\n return exterior.length < 4 ? [] : [[exterior, ...holes.filter((hole) => hole.length >= 4)]]\n }),\n } as GeoPermissibleObjects,\n true\n )\n\n const lineArcs = [...usage.values()].filter(({ count }) => borders === \"all\" || count === 1).map(({ arc }) => arc)\n const lines: GeoContour[] = []\n for (const chain of chainArcs(lineArcs)) {\n lines.push(\n ...project(fitted, { type: \"LineString\", coordinates: filteredPoints(chain.refs, maskFor) } as GeoPermissibleObjects, false)\n )\n }\n\n const sum = (contours: GeoContour[]) => contours.reduce((total, c) => total + c.length, 0)\n const bytes = [...fills, ...lines].reduce((total, c) => total + c.points.byteLength + 32, 0)\n return {\n width: fitted.width,\n height: fitted.height,\n fills,\n lines,\n fillLength: sum(fills),\n lineLength: sum(lines),\n bytes,\n }\n}\n\nclass ByteCache<V extends { bytes: number }> {\n private _entries = new Map<string, V>()\n private _bytes = 0\n\n constructor(private readonly _budget: number) {}\n\n get(key: string): V | undefined {\n const value = this._entries.get(key)\n if (value) {\n this._entries.delete(key)\n this._entries.set(key, value)\n }\n return value\n }\n\n set(key: string, value: V): void {\n const previous = this._entries.get(key)\n if (previous) this._bytes -= previous.bytes\n this._entries.delete(key)\n this._entries.set(key, value)\n this._bytes += value.bytes\n for (const [oldest, entry] of this._entries) {\n if (this._bytes <= this._budget || this._entries.size <= 1) break\n this._entries.delete(oldest)\n this._bytes -= entry.bytes\n }\n }\n\n clear(): void {\n this._entries.clear()\n this._bytes = 0\n }\n}\n\nconst frames = new ByteCache<Frame & { bytes: number }>(64)\nconst geometries = new ByteCache<GeoGeometry>(64 * 1024 * 1024)\n\nexport interface GeoGeometryRequest {\n /** Identifies `features` and `frame`: equal keys must mean equal selections. */\n selectionKey: string\n features: readonly GeoFeature[]\n frame: GeoFrame\n projection: GeoProjectionKind\n borders: GeoBorders\n detail: number\n}\n\n/**\n * The drawing for a selection, cached. The projection is fitted to the\n * selection at full detail, so a `detail` tween never moves or rescales it.\n */\nexport function geoGeometry(request: GeoGeometryRequest): GeoGeometry | null {\n const detail = Math.round(clamp01(request.detail) * 100) / 100\n const frameKey = `${request.selectionKey}|${request.projection}`\n const key = `${frameKey}|${request.borders}|${detail}`\n const cached = geometries.get(key)\n if (cached) return cached\n\n let fitted: Frame | undefined = frames.get(frameKey)\n if (!fitted) {\n const made = fitFrame(request.projection, partsOf(request.features, request.frame))\n if (!made) return null\n fitted = made\n frames.set(frameKey, { ...made, bytes: 1 })\n }\n const geometry = buildGeometry(request.features, request.frame, fitted, request.borders, detail)\n geometries.set(key, geometry)\n return geometry\n}\n\nexport function clearGeoGeometry(): void {\n frames.clear()\n geometries.clear()\n}\n", "/**\n * Visvalingam–Whyatt weights for a hand-defined ring, in the same buckets the\n * generated data carries (`-2·log2` of the effective area in steradians), so a\n * shape passed to `geoRegistry.define` answers to `detail` like any other.\n *\n * Planar in degrees with longitude scaled by latitude: accurate enough for the\n * handful of shapes an author defines, where the generated data uses the exact\n * spherical area.\n */\nexport function ringBuckets(points: Float64Array): Uint8Array {\n const n = points.length / 2\n const buckets = new Uint8Array(n)\n if (n < 3) return buckets\n\n const radians = Math.PI / 180\n const weight = new Float64Array(n)\n const prev = new Int32Array(n)\n const next = new Int32Array(n)\n for (let i = 0; i < n; i++) {\n prev[i] = i - 1\n next[i] = i + 1\n }\n\n const area = (a: number, b: number, c: number): number => {\n const cos = Math.cos(points[b * 2 + 1] * radians)\n const ax = points[a * 2] * cos, ay = points[a * 2 + 1]\n const bx = points[b * 2] * cos, by = points[b * 2 + 1]\n const cx = points[c * 2] * cos, cy = points[c * 2 + 1]\n return (Math.abs((bx - ax) * (cy - ay) - (cx - ax) * (by - ay)) / 2) * radians * radians\n }\n\n const heap: number[] = []\n const position = new Int32Array(n).fill(-1)\n const less = (i: number, j: number) => weight[heap[i]] < weight[heap[j]]\n const swap = (i: number, j: number) => {\n ;[heap[i], heap[j]] = [heap[j], heap[i]]\n position[heap[i]] = i\n position[heap[j]] = j\n }\n const up = (i: number) => {\n while (i > 0) {\n const parent = (i - 1) >> 1\n if (!less(i, parent)) break\n swap(i, parent)\n i = parent\n }\n }\n const down = (i: number) => {\n for (;;) {\n const l = 2 * i + 1\n const r = l + 1\n let smallest = i\n if (l < heap.length && less(l, smallest)) smallest = l\n if (r < heap.length && less(r, smallest)) smallest = r\n if (smallest === i) return\n swap(i, smallest)\n i = smallest\n }\n }\n const push = (i: number) => {\n position[i] = heap.length\n heap.push(i)\n up(heap.length - 1)\n }\n const remove = (i: number) => {\n const at = position[i]\n const last = heap.pop()!\n position[i] = -1\n if (at < heap.length) {\n heap[at] = last\n position[last] = at\n up(at)\n down(position[last])\n }\n }\n\n for (let i = 1; i < n - 1; i++) {\n weight[i] = area(i - 1, i, i + 1)\n push(i)\n }\n\n let floor = 0\n const final = new Float64Array(n)\n final[0] = final[n - 1] = Infinity\n while (heap.length > 0) {\n const i = heap[0]\n remove(i)\n floor = Math.max(floor, weight[i])\n final[i] = floor\n const p = prev[i]\n const q = next[i]\n if (p >= 0) next[p] = q\n if (q < n) prev[q] = p\n for (const j of [p, q]) {\n if (j <= 0 || j >= n - 1 || position[j] < 0) continue\n remove(j)\n weight[j] = area(prev[j], j, next[j])\n push(j)\n }\n }\n\n for (let i = 0; i < n; i++) buckets[i] = weightBucket(final[i])\n return buckets\n}\n\nexport function weightBucket(weight: number): number {\n if (weight === Infinity) return 0\n if (!(weight > 0)) return 255\n return Math.min(254, Math.max(1, Math.round(-2 * Math.log2(weight))))\n}\n", "import { geoArea } from \"d3-geo\"\n\nimport {\n GEO_DATA_FORMAT,\n type GeoFeature,\n type GeoFileData,\n type GeoIndex,\n type GeoPolygon,\n type GeoRingRef,\n} from \"./format\"\nimport { ringBuckets } from \"./simplify\"\n\n/** Prefix every data key carries; bumped with the file format. */\nexport const GEO_DATA_VERSION = `v${GEO_DATA_FORMAT}`\n\n/**\n * Answers a data key — `v1/countries/FR`, `v1/states/US`, `v1/index` — with the\n * parsed file, or `null` when this source does not have it. A throw means \"could\n * not tell\" (offline, a 500) and is retried on the next load.\n */\nexport type GeoSource = (key: string) => Promise<unknown>\n\ntype Position = readonly [number, number] | readonly number[]\ntype GeoPolygonShape =\n | { type: \"Polygon\"; coordinates: readonly (readonly Position[])[] }\n | { type: \"MultiPolygon\"; coordinates: readonly (readonly (readonly Position[])[])[] }\n/** GeoJSON in lon/lat: a Polygon, a MultiPolygon, or a Feature holding one. */\nexport type GeoShape = GeoPolygonShape | { type: \"Feature\"; geometry: GeoPolygonShape; properties?: { name?: string } | null }\n\nexport interface GeoDefinition {\n shape: GeoShape\n name?: string\n /** The country a subdivision code expands under, when it has one. */\n parent?: string\n}\n\n/** Fetches `<base>/<key>.json`; `base` may instead map a key to its URL. */\nexport function geoUrlSource(base: string | ((key: string) => string), init?: RequestInit): GeoSource {\n return async (key) => {\n const url = typeof base === \"function\" ? base(key) : `${base.replace(/\\/+$/, \"\")}/${key}.json`\n const response = await fetch(url, init)\n // Some object stores answer a missing key with 400, not 404.\n if (response.status === 404 || response.status === 400) return null\n if (!response.ok) throw new Error(`${url} → HTTP ${response.status}`)\n return response.json()\n }\n}\n\n/** Wraps a function returning the file as text, bytes or parsed JSON (e.g. `fs.readFile`). */\nexport function geoLoaderSource(\n load: (key: string) => Promise<string | ArrayBuffer | Uint8Array | object | null | undefined>\n): GeoSource {\n return async (key) => {\n const value = await load(key)\n if (value == null) return null\n if (typeof value === \"string\") return JSON.parse(value)\n if (value instanceof ArrayBuffer || value instanceof Uint8Array) {\n return JSON.parse(new TextDecoder().decode(value))\n }\n return value\n }\n}\n\nfunction definedFeature(code: string, definition: GeoDefinition, serial: number): GeoFeature {\n const shape = definition.shape.type === \"Feature\" ? definition.shape.geometry : definition.shape\n const feature = definition.shape.type === \"Feature\" ? definition.shape : null\n const polygons: readonly (readonly (readonly Position[])[])[] =\n shape.type === \"Polygon\" ? [shape.coordinates] : shape.coordinates\n let arcIndex = 0\n\n /**\n * One ring, wound the way d3 reads it. d3 takes the *inside* of a ring to be\n * the side its points go clockwise around, so an exterior must be small\n * (`geoArea` under a hemisphere) and a hole its complement. GeoJSON (RFC 7946)\n * writes the opposite way round, counter-clockwise exteriors, and a ring\n * taken as written would fill the rest of the sphere; so a ring that reads\n * the wrong way for its place is reversed.\n */\n const toRing = (ring: readonly Position[], exterior: boolean): GeoRingRef => {\n const closed = ring.length > 0 && ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]\n let coordinates = closed ? ring : [...ring, ring[0]]\n const encloses = geoArea({ type: \"Polygon\", coordinates: [coordinates as [number, number][]] }) <= 2 * Math.PI\n if (encloses !== exterior) coordinates = [...coordinates].reverse()\n const points = new Float64Array(coordinates.length * 2)\n coordinates.forEach(([lon, lat], i) => {\n points[i * 2] = lon\n points[i * 2 + 1] = lat\n })\n return { arc: { key: `define:${serial}:${code}:${arcIndex++}`, points, buckets: ringBuckets(points) }, reversed: false }\n }\n\n const measured: GeoPolygon[] = polygons.map((rings) => {\n const resolved = rings.map((ring, i) => [toRing(ring, i === 0)])\n const ringAreas = rings.map((ring) => {\n const area = geoArea({ type: \"Polygon\", coordinates: [ring as [number, number][]] })\n return area > 2 * Math.PI ? 4 * Math.PI - area : area\n })\n const area = Math.max(0, ringAreas[0] - ringAreas.slice(1).reduce((a, b) => a + b, 0))\n return { rings: resolved, ringAreas, area, mainland: true }\n })\n\n const name = definition.name ?? feature?.properties?.name ?? code\n return {\n code,\n name,\n nameNl: name,\n parent: definition.parent ?? (code.includes(\"-\") ? code.slice(0, 2) : null),\n first: true,\n listed: false,\n remote: false,\n polygons: measured,\n }\n}\n\nclass GeoRegistry {\n private _sources: GeoSource[] = []\n private _defined = new Map<string, { serial: number; feature: GeoFeature }>()\n private _generation = 0\n private _serial = 0\n\n /** Bumps whenever a source or a definition is added or removed. */\n get generation(): number {\n return this._generation\n }\n\n get hasSources(): boolean {\n return this._sources.length > 0\n }\n\n /** Adds a source after every source already registered. Returns its removal. */\n use(source: GeoSource): () => void {\n this._sources.push(source)\n this._generation++\n return () => {\n const i = this._sources.indexOf(source)\n if (i < 0) return\n this._sources.splice(i, 1)\n this._generation++\n }\n }\n\n /**\n * Shapes (GeoJSON, lon/lat) under codes of your choosing, checked before any\n * source. A definition replaces generated data for the same code.\n */\n define(shapes: Record<string, GeoShape | GeoDefinition>): () => void {\n const serial = ++this._serial\n const codes = Object.entries(shapes).map(([rawCode, value]) => {\n const code = rawCode.trim().toUpperCase()\n const definition = \"shape\" in value ? value : { shape: value }\n this._defined.set(code, { serial, feature: definedFeature(code, definition, serial) })\n return code\n })\n this._generation++\n return () => {\n for (const code of codes) {\n if (this._defined.get(code)?.serial === serial) this._defined.delete(code)\n }\n this._generation++\n }\n }\n\n defined(code: string): GeoFeature | undefined {\n return this._defined.get(code)?.feature\n }\n\n /** Removes every source and definition — for tests. */\n reset(): void {\n this._sources = []\n this._defined.clear()\n this._generation++\n }\n\n /**\n * Asks each source in registration order; the first non-null answer wins.\n * Resolves `null` only when every source answered that it has no such file.\n */\n async resolve(key: string): Promise<GeoFileData | GeoIndex | null> {\n if (this._sources.length === 0) {\n throw new Error(\"No geo source registered — call geoRegistry.use(geoUrlSource(…)) before rendering GeoBorder\")\n }\n let failure: unknown = null\n for (const source of [...this._sources]) {\n try {\n const value = await source(key)\n if (value != null) return value as GeoFileData | GeoIndex\n } catch (error) {\n failure ??= error\n }\n }\n if (failure) throw failure\n return null\n }\n\n /** Every listed region's code, names and parent, for a picker. */\n async index(): Promise<GeoIndex | null> {\n return (await this.resolve(`${GEO_DATA_VERSION}/index`)) as GeoIndex | null\n }\n}\n\nexport const geoRegistry = new GeoRegistry()\n", "import type { LoaderFn } from \"@motionscript/sdk\"\n\nimport { decodeGeoFile, type DecodedGeoFile, type GeoFileData } from \"./format\"\nimport { GEO_DATA_VERSION, geoRegistry } from \"./registry\"\n\nexport type GeoFileEntry =\n | { status: \"ready\"; file: DecodedGeoFile }\n | { status: \"missing\" }\n | { status: \"failed\"; error: unknown }\n\nconst entries = new Map<string, GeoFileEntry>()\nconst inflight = new Map<string, Promise<GeoFileEntry>>()\nconst loaders = new Map<string, LoaderFn>()\nconst warned = new Set<string>()\nlet version = 0\n\nexport function countryFileKey(code: string): string {\n return `${GEO_DATA_VERSION}/countries/${code}`\n}\n\nexport function statesFileKey(country: string): string {\n return `${GEO_DATA_VERSION}/states/${country}`\n}\n\n/** Bumps whenever a file lands, so derived geometry keyed on it rebuilds. */\nexport function geoDataVersion(): number {\n return version\n}\n\nexport function geoFileEntry(key: string): GeoFileEntry | undefined {\n return entries.get(key)\n}\n\nasync function fetchEntry(key: string): Promise<GeoFileEntry> {\n try {\n let data = (await geoRegistry.resolve(key)) as GeoFileData | null\n // A country with no subdivisions has no states file; its outline stands in.\n if (data === null && key.includes(\"/states/\")) {\n data = (await geoRegistry.resolve(key.replace(\"/states/\", \"/countries/\"))) as GeoFileData | null\n }\n return data === null ? { status: \"missing\" } : { status: \"ready\", file: decodeGeoFile(data) }\n } catch (error) {\n return { status: \"failed\", error }\n }\n}\n\n/**\n * Loads one data file into the shared cache. Never rejects: a rejected loader\n * is retried on every tick and fails an export outright, where a recorded\n * failure draws nothing and is tried again by the next call.\n */\nexport function loadGeoFile(key: string): Promise<GeoFileEntry> {\n const current = entries.get(key)\n if (current?.status === \"ready\") return Promise.resolve(current)\n let job = inflight.get(key)\n if (!job) {\n job = fetchEntry(key).then((entry) => {\n inflight.delete(key)\n entries.set(key, entry)\n version++\n if (entry.status === \"ready\") {\n warned.delete(key)\n } else if (!warned.has(key)) {\n warned.add(key)\n if (entry.status === \"failed\") console.warn(`[GeoBorder] could not load ${key}:`, entry.error)\n else console.warn(`[GeoBorder] no geo source has ${key}`)\n }\n return entry\n })\n inflight.set(key, job)\n }\n return job\n}\n\n/**\n * The loader an `AssetScope` declares for a file: one function per key, so\n * every node that needs the file declares the same one. Nothing is disposed —\n * decoded data is shared by every engine in the process.\n */\nexport function geoLoader(key: string): LoaderFn {\n let load = loaders.get(key)\n if (!load) {\n load = async () => {\n await loadGeoFile(key)\n }\n loaders.set(key, load)\n }\n return load\n}\n\n/** Forgets every loaded file — for tests. */\nexport function clearGeoFiles(): void {\n entries.clear()\n inflight.clear()\n warned.clear()\n version++\n}\n", "import type { GeoFeature } from \"./format\"\nimport { countryFileKey, geoFileEntry, statesFileKey } from \"./loader\"\nimport { geoRegistry } from \"./registry\"\n\nexport type GeoLevel = \"country\" | \"state\"\nexport type GeoFrame = \"mainland\" | \"all\"\n\nconst CODE = /^[A-Z]{2}(-[A-Z0-9]{1,3})?$/\n\n/** `\"fr, de\"`, `[\"FR\", \"de\"]` → `[\"FR\", \"DE\"]`; unique, in order, empties dropped. */\nexport function normalizeIso(value: unknown): string[] {\n const raw = Array.isArray(value) ? value : typeof value === \"string\" ? value.split(/[\\s,;]+/) : []\n const out: string[] = []\n for (const item of raw) {\n if (typeof item !== \"string\") continue\n const code = item.trim().toUpperCase()\n if (code && !out.includes(code)) out.push(code)\n }\n return out\n}\n\nfunction isSubdivision(code: string): boolean {\n return code.includes(\"-\")\n}\n\n/** Every data file a selection reads, for `declareAssets`. Depends on nothing but its arguments. */\nexport function geoFilesFor(codes: readonly string[], level: GeoLevel): string[] {\n const files = new Set<string>()\n for (const code of codes) {\n if (!CODE.test(code) || geoRegistry.defined(code)) continue\n if (isSubdivision(code)) files.add(statesFileKey(code.slice(0, 2)))\n else files.add(level === \"state\" ? statesFileKey(code) : countryFileKey(code))\n }\n return [...files]\n}\n\nexport interface GeoSelection {\n features: GeoFeature[]\n /** A file this selection needs has not landed yet. */\n pending: boolean\n /** Codes whose file loaded without them. */\n unknown: string[]\n}\n\n/**\n * The features a selection draws. A bare country code at state level is its\n * first-level subdivisions — minus the remote ones when framing the mainland —\n * or the country itself when it has none.\n */\nexport function selectGeoFeatures(codes: readonly string[], level: GeoLevel, frame: GeoFrame): GeoSelection {\n const features: GeoFeature[] = []\n const seen = new Set<string>()\n const unknown: string[] = []\n let pending = false\n\n const add = (feature: GeoFeature) => {\n if (seen.has(feature.code)) return\n seen.add(feature.code)\n features.push(feature)\n }\n\n for (const code of codes) {\n const defined = geoRegistry.defined(code)\n if (defined) {\n add(defined)\n continue\n }\n if (!CODE.test(code)) {\n unknown.push(code)\n continue\n }\n const subdivision = isSubdivision(code)\n const key = subdivision || level === \"state\" ? statesFileKey(code.slice(0, 2)) : countryFileKey(code)\n const entry = geoFileEntry(key)\n if (!entry || entry.status !== \"ready\") {\n if (!entry) pending = true\n continue\n }\n const file = entry.file.features\n if (subdivision || level === \"country\") {\n const feature = file.get(code)\n if (feature) add(feature)\n else unknown.push(code)\n continue\n }\n const children = [...file.values()].filter(\n (f) => f.parent === code && f.first && !(frame === \"mainland\" && f.remote)\n )\n if (children.length > 0) children.forEach(add)\n else if (file.get(code)) add(file.get(code)!)\n else unknown.push(code)\n }\n\n return { features, pending, unknown }\n}\n", "import { GeoBorder } from \"./border\";\n\n/**\n * Every node type this package publishes.\n *\n * A host registers these by handing the array to an engine —\n * `new Engine(platform, { nodes: NODES })` — which reads each component's key.\n * Defining a component only *declares* that key: nothing is registered by\n * importing a module, so a registry holds exactly what its owner asked for.\n *\n * Listing the component **values** is also what survives bundling: this package\n * declares `sideEffects: false`, and a document names a node type by string, so\n * an import kept only for its side effect is exactly what gets shaken out.\n */\n// Typed by name, so the declaration names each component rather than spelling out its type through core.\nexport const NODES: (typeof GeoBorder)[] = [GeoBorder];\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"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", "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\u2019s\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\u00B0) % 360\u00B0, except that we want\n// the distance between \u00B1180\u00B0 to be 360\u00B0.\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\u00B0, 0\u00B0], 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\u2019s 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 \u2A2F 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\u2019s 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 {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n", "import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n", "import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\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\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\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", "import { geoArea } from \"d3-geo\"\n\n/** The on-disk shape `@motionscript/geography` writes; see its `generate.mjs`. */\nexport const GEO_DATA_FORMAT = 1\n\nexport interface GeoFileData {\n format: number\n source?: string\n transform: { scale: [number, number]; translate: [number, number] }\n /** Global arc id per local arc — identical across files for a shared border. */\n arcIds: number[]\n /** Per arc, flat `[x0, y0, w0, dx, dy, w, …]`: delta-encoded quantized lon/lat and a weight bucket. */\n arcs: number[][]\n features: GeoFeatureData[]\n}\n\nexport interface GeoFeatureData {\n code: string\n name: string\n nameNl?: string\n parent: string | null\n first: boolean\n listed: boolean\n remote?: boolean\n area: number\n mainland: number[] | null\n areas: number[]\n /** Polygons → rings → arc refs (`~i` is arc `i` reversed). */\n polygons: number[][][]\n}\n\n/** `[code, name, nameNl, parent, first]` per listed region. */\nexport type GeoIndexEntry = [string, string, string, string | null, 0 | 1]\n\nexport interface GeoIndex {\n format: number\n source?: string\n regions: GeoIndexEntry[]\n}\n\nexport interface GeoArc {\n /** Identity for de-duplicating a border drawn by two regions, across files. */\n key: number | string\n /** Interleaved lon/lat, in degrees. */\n points: Float64Array\n /** Per point: 0 always survives, higher buckets are less significant. */\n buckets: Uint8Array\n}\n\nexport interface GeoRingRef {\n arc: GeoArc\n reversed: boolean\n}\n\nexport interface GeoPolygon {\n rings: GeoRingRef[][]\n /** Per ring, in steradians — exterior first, then holes. */\n ringAreas: number[]\n area: number\n mainland: boolean\n}\n\nexport interface GeoFeature {\n code: string\n name: string\n nameNl: string\n parent: string | null\n first: boolean\n listed: boolean\n remote: boolean\n polygons: GeoPolygon[]\n}\n\nexport interface DecodedGeoFile {\n features: Map<string, GeoFeature>\n}\n\nfunction decodeArc(encoded: number[], key: number, [kx, ky]: [number, number], [tx, ty]: [number, number]): GeoArc {\n const count = encoded.length / 3\n const points = new Float64Array(count * 2)\n const buckets = new Uint8Array(count)\n let x = 0\n let y = 0\n for (let i = 0; i < count; i++) {\n x += encoded[i * 3]\n y += encoded[i * 3 + 1]\n points[i * 2] = x * kx + tx\n points[i * 2 + 1] = y * ky + ty\n buckets[i] = encoded[i * 3 + 2]\n }\n return { key, points, buckets }\n}\n\nexport function ringCoordinates(ring: readonly GeoRingRef[]): [number, number][] {\n const out: [number, number][] = []\n for (const { arc, reversed } of ring) {\n const n = arc.buckets.length\n for (let j = out.length === 0 ? 0 : 1; j < n; j++) {\n const i = reversed ? n - 1 - j : j\n out.push([arc.points[i * 2], arc.points[i * 2 + 1]])\n }\n }\n return out\n}\n\n/** A ring's area in steradians, whichever way it winds. */\nexport function ringArea(ring: readonly GeoRingRef[]): number {\n const coordinates = ringCoordinates(ring)\n if (coordinates.length < 4) return 0\n const area = geoArea({ type: \"Polygon\", coordinates: [coordinates] })\n return area > 2 * Math.PI ? 4 * Math.PI - area : area\n}\n\nexport function decodeGeoFile(data: GeoFileData): DecodedGeoFile {\n if (data.format !== GEO_DATA_FORMAT) {\n throw new Error(`geo data format ${data.format} is not supported (expected ${GEO_DATA_FORMAT})`)\n }\n const arcs = data.arcs.map((encoded, i) =>\n decodeArc(encoded, data.arcIds[i], data.transform.scale, data.transform.translate)\n )\n const ref = (index: number): GeoRingRef =>\n index < 0 ? { arc: arcs[~index], reversed: true } : { arc: arcs[index], reversed: false }\n\n const features = new Map<string, GeoFeature>()\n for (const f of data.features) {\n const mainland = f.mainland ? new Set(f.mainland) : null\n features.set(f.code, {\n code: f.code,\n name: f.name,\n nameNl: f.nameNl ?? f.name,\n parent: f.parent,\n first: f.first,\n listed: f.listed,\n remote: f.remote === true,\n polygons: f.polygons.map((rings, i) => {\n const resolved = rings.map((ring) => ring.map(ref))\n return {\n rings: resolved,\n ringAreas: resolved.map((ring, r) => (r === 0 ? f.areas[i] : ringArea(ring))),\n area: f.areas[i],\n mainland: mainland === null || mainland.has(i),\n }\n }),\n })\n }\n return { features }\n}\n", "import {\n Flow,\n Graphics2D,\n Paint,\n Shapes,\n Types,\n component2d,\n type EntryOptions,\n type FillResolved,\n type NodeOf,\n // Named so this component's emitted type reaches the shape surface it spreads through the sdk, not core.\n type Alignment as _Alignment,\n type Fill as _Fill,\n type FlowMode as _FlowMode,\n type FlowResolved as _FlowResolved,\n type GapSize as _GapSize,\n type Node2D as _Node2D,\n type Node2DProps as _Node2DProps,\n type Shadow as _Shadow,\n type Stroke as _Stroke,\n type Vector2 as _Vector2,\n type PathBounds,\n type ShadowResolved,\n type Size2D,\n type StrokeResolved,\n type Type,\n} from \"@motionscript/sdk\"\nimport { snapValue } from \"@motionscript/sdk/component\"\n\nimport { geoGeometry, type GeoBorders, type GeoContour, type GeoGeometry, type GeoProjectionKind } from \"./geometry\"\nimport { geoDataVersion, geoLoader } from \"./loader\"\nimport { geoRegistry } from \"./registry\"\nimport { geoFilesFor, normalizeIso, selectGeoFeatures, type GeoFrame, type GeoLevel } from \"./selection\"\n\ninterface Chunk {\n data: string\n /** Where this chunk's contours sit along the whole drawing, as fractions of its length. */\n from: number\n to: number\n}\n\ninterface Drawn {\n geometry: GeoGeometry\n width: number\n height: number\n fills: Chunk[]\n lines: Chunk[]\n}\n\n// A renderer's cost for one path grows faster than its contour count, and a shape\n// drawn as several paths under one paint is unioned every frame — so a region\n// is cut into paths of bounded size, each painted on its own.\nconst CONTOURS_PER_PATH = 256\nconst POINTS_PER_PATH = 40_000\n\nconst coordinate = (value: number) => String(Math.round(value * 100) / 100)\n\nfunction chunk(contours: readonly GeoContour[], total: number, scale: number): Chunk[] {\n const chunks: Chunk[] = []\n let parts: string[] = []\n let count = 0\n let points = 0\n let from = 0\n let length = 0\n const flush = () => {\n if (count === 0) return\n const to = total > 0 ? Math.min(1, length / total) : 1\n chunks.push({ data: parts.join(\"\"), from, to })\n from = to\n parts = []\n count = 0\n points = 0\n }\n for (const contour of contours) {\n const p = contour.points\n // Path data is y-down; the unit geometry is y-up.\n for (let i = 0; i < p.length; i += 2) {\n parts.push(i === 0 ? \"M\" : \"L\", coordinate(p[i] * scale), \" \", coordinate(-p[i + 1] * scale))\n }\n if (contour.closed) parts.push(\"Z\")\n count++\n points += p.length / 2\n length += contour.length\n if (count >= CONTOURS_PER_PATH || points >= POINTS_PER_PATH) flush()\n }\n flush()\n return chunks\n}\n\n/** One of `values`, switched at the end of a `to`, with its choices listed as its `options`. */\nfunction choice<const V extends readonly string[]>(values: V, initial: V[number]): Type<V[number]> {\n return Types.custom<V[number], V[number], EntryOptions & { readonly options: V }>(initial, { lerp: snapValue, options: values })\n}\n\n/** A node's own drawing state, kept by its fields' view (one object per node, the same every frame). */\ninterface Kept {\n drawn: Drawn | null\n readonly warned: Set<string>\n}\n\nconst kept = new WeakMap<object, Kept>()\n\nfunction keptBy(state: object): Kept {\n let entry = kept.get(state)\n if (!entry) kept.set(state, (entry = { drawn: null, warned: new Set() }))\n return entry\n}\n\ninterface Selected {\n readonly iso: readonly string[]\n readonly level: GeoLevel\n readonly frame: GeoFrame\n readonly projection: GeoProjectionKind\n readonly borders: GeoBorders\n readonly detail: number\n}\n\n/** The selection's outlines cut into paths at `size`, or `null` while there is nothing to draw. */\nfunction drawnOf(state: Selected, size: Size2D): Drawn | null {\n const own = keptBy(state)\n const codes = state.iso\n const { level, frame } = state\n const selection = selectGeoFeatures(codes, level, frame)\n for (const code of selection.unknown) {\n if (own.warned.has(code)) continue\n own.warned.add(code)\n console.warn(`[GeoBorder] no region with code ${code}`)\n }\n if (selection.features.length === 0) return null\n\n const geometry = geoGeometry({\n selectionKey: `${geoRegistry.generation}:${geoDataVersion()}:${level}:${frame}:${codes.join(\",\")}`,\n features: selection.features,\n frame,\n projection: state.projection,\n borders: state.borders,\n detail: state.detail,\n })\n if (!geometry) return null\n\n const { width, height } = size\n const cached = own.drawn\n if (cached && cached.geometry === geometry && cached.width === width && cached.height === height) return cached\n const scale = Math.min(width / geometry.width, height / geometry.height)\n const drawn: Drawn = {\n geometry,\n width,\n height,\n fills: chunk(geometry.fills, geometry.fillLength, scale),\n lines: chunk(geometry.lines, geometry.lineLength, scale),\n }\n own.drawn = drawn\n return drawn\n}\n\n/** Adds `chunk` to `g`, trimmed by `start`/`end` along the whole drawing; `false` when none of it is drawn. */\nfunction pathOp(g: Graphics2D, chunk: Chunk, size: Size2D, start: number, end: number): boolean {\n const { width, height } = size\n const centerBounds: PathBounds = [-width / 2, -height / 2, width / 2, height / 2]\n if (start <= 0 && end >= 1) {\n g.path({ data: chunk.data, centerBounds })\n return true\n }\n const span = chunk.to - chunk.from\n if (span <= 0) return false\n const localStart = Math.max(0, (start - chunk.from) / span)\n const localEnd = Math.min(1, (end - chunk.from) / span)\n if (localEnd <= localStart) return false\n g.path({ data: chunk.data, centerBounds, start: localStart, end: localEnd })\n return true\n}\n\n/**\n * Country and subdivision outlines by ISO 3166 code, fitted into the node's box.\n *\n * <GeoBorder iso={[\"FR\", \"DE\"]} detail={0.4} stroke={{ weight: 2, fill: \"white\" }} />\n *\n * Geometry comes from whatever `geoRegistry` has been given — a URL, a loader,\n * or shapes defined by hand — and loads as a declared asset, so a frame never\n * draws half a country. Fill and stroke are separate geometry: the fill is each\n * region's polygons, the stroke is every border once, which is why a border two\n * selected regions share is not drawn twice and why `stroke.align` does not\n * apply.\n */\nexport const GeoBorder = component2d({\n key: \"geoBorder\",\n state: {\n ...Paint.state,\n ...Flow.state,\n iso: Types.custom<string | readonly string[], string[]>([\"FR\"], { resolve: normalizeIso, lerp: snapValue }),\n level: choice([\"country\", \"state\"], \"country\"),\n detail: Types.number(0.5, { min: 0, max: 1, step: 0.01 }),\n projection: choice([\"conic\", \"mercator\", \"equirectangular\", \"orthographic\"], \"conic\"),\n frame: choice([\"mainland\", \"all\"], \"mainland\"),\n borders: choice([\"all\", \"outline\"], \"all\"),\n },\n commands: { ...Paint.commands },\n // The data gates the draw, not layout: the box never waits on it.\n load: (loader, state) => {\n for (const file of geoFilesFor(state.iso, state.level)) loader.task(`geo:${file}`, geoLoader(file))\n },\n measure: (measurer, state, children) => Flow.measure(measurer, state, children, Paint.inset(state)),\n layout: (box, state, children) => Flow.layout(box, state, children, Paint.inset(state)),\n render: (ctx, state) => {\n const size = ctx.size\n const { start, end } = state\n const fill = state.fill as FillResolved[]\n const shadow = state.shadow as ShadowResolved[]\n const drawn = () => drawnOf(state, size)\n\n ctx.inFront(() => {\n const shape = drawn()\n if (!shape || shape.fills.length === 0) return\n const g = new Graphics2D()\n for (const part of shape.fills) {\n if (!pathOp(g, part, size, start, end)) continue\n if (shadow.length > 0) g.shadow(shadow)\n g.fill(fill)\n }\n ctx.draw(g)\n })\n\n // The box, not the outline, confines the children and is what picking\n // tests: a path clip has no winding test, and a country's bounding box is\n // what the selection shows.\n Paint.draw(ctx, state, null, { clipShape: Shapes.box(size) })\n\n ctx.inFront(() => {\n const overlay = state.overlay as FillResolved[]\n if (overlay.length > 0) {\n const shape = drawn()\n if (shape) {\n const g = new Graphics2D()\n for (const part of shape.fills) if (pathOp(g, part, size, start, end)) g.fill(overlay)\n ctx.draw(g)\n }\n }\n\n const stroke = state.stroke as StrokeResolved[]\n if (stroke.length === 0) return\n const shape = drawn()\n if (!shape || shape.lines.length === 0) return\n const centred = stroke.map((layer) => (layer.align === 0 ? layer : { ...layer, align: 0 }))\n const castsShadow = shadow.length > 0 && !fill.some((layer) => (layer.opacity ?? 1) > 0)\n const g = new Graphics2D()\n for (const part of shape.lines) {\n if (!pathOp(g, part, size, start, end)) continue\n if (castsShadow) g.shadow(shadow)\n g.stroke(centred)\n }\n ctx.draw(g)\n })\n },\n})\n\nexport type GeoBorder = NodeOf<typeof GeoBorder>\n", "import {\n geoArea,\n geoBounds,\n geoConicEqualArea,\n geoEquirectangular,\n geoMercator,\n geoOrthographic,\n geoPath,\n geoStream,\n type GeoPermissibleObjects,\n type GeoProjection,\n} from \"d3-geo\"\n\nimport { ringCoordinates, type GeoArc, type GeoFeature, type GeoPolygon, type GeoRingRef } from \"./format\"\nimport type { GeoFrame } from \"./selection\"\n\nexport type GeoProjectionKind = \"conic\" | \"mercator\" | \"equirectangular\" | \"orthographic\"\nexport type GeoBorders = \"all\" | \"outline\"\n\nexport interface GeoContour {\n /** Interleaved x/y in unit space: the longer side spans 1, centred on the origin, y up. */\n points: Float32Array\n closed: boolean\n length: number\n}\n\nexport interface GeoGeometry {\n /** The drawing's extent in unit space; the longer of the two is 1. */\n width: number\n height: number\n fills: GeoContour[]\n lines: GeoContour[]\n fillLength: number\n lineLength: number\n bytes: number\n}\n\ninterface Part {\n polygon: GeoPolygon\n largest: boolean\n}\n\ninterface Frame {\n projection: GeoProjection\n centerX: number\n centerY: number\n size: number\n width: number\n height: number\n}\n\nconst FIT = 1024\n\n// `detail` maps onto a weight threshold that is a fraction of the selection's\n// own area, on a log scale — which is what makes a value look equally stylised\n// on Monaco and on Russia. 0 keeps points worth 1% of the area; just below 1,\n// points worth a billionth of it.\nconst POINT_BASE = 2\nconst POINT_RANGE = 7\nconst POLYGON_BASE = 1.5\nconst POLYGON_RANGE = 6\n\nconst clamp01 = (value: number) => (value > 1 ? 1 : value > 0 ? value : 0)\n\n/** The highest weight bucket a point may carry and still be drawn. */\nexport function pointBucketLimit(detail: number, area: number): number {\n if (detail >= 1 || !(area > 0)) return 255\n const minWeight = area * 10 ** -(POINT_BASE + POINT_RANGE * clamp01(detail))\n return Math.floor(-2 * Math.log2(minWeight))\n}\n\n/** Rings smaller than this (steradians) are dropped, bar each region's largest. */\nexport function polygonAreaLimit(detail: number, area: number): number {\n if (detail >= 1) return 0\n return area * 10 ** -(POLYGON_BASE + POLYGON_RANGE * clamp01(detail))\n}\n\nfunction partsOf(features: readonly GeoFeature[], frame: GeoFrame): Part[] {\n const parts: Part[] = []\n for (const feature of features) {\n const mainland = frame === \"mainland\" ? feature.polygons.filter((p) => p.mainland) : []\n const polygons = mainland.length > 0 ? mainland : feature.polygons\n let largest: GeoPolygon | null = null\n for (const polygon of polygons) if (!largest || polygon.area > largest.area) largest = polygon\n for (const polygon of polygons) parts.push({ polygon, largest: polygon === largest })\n }\n return parts\n}\n\nfunction centerLongitude(west: number, east: number): number {\n if (west <= east) return (west + east) / 2\n const mid = (west + east + 360) / 2\n return mid > 180 ? mid - 360 : mid\n}\n\nfunction makeProjection(kind: GeoProjectionKind, west: number, south: number, east: number, north: number): GeoProjection {\n const lon = centerLongitude(west, east)\n const lat = (south + north) / 2\n switch (kind) {\n case \"mercator\":\n return geoMercator().rotate([-lon, 0])\n case \"equirectangular\":\n return geoEquirectangular().rotate([-lon, 0])\n case \"orthographic\":\n return geoOrthographic().rotate([-lon, -lat])\n case \"conic\": {\n const span = north - south\n return geoConicEqualArea()\n .rotate([-lon, 0])\n .center([0, lat])\n .parallels([south + span / 6, north - span / 6])\n }\n }\n}\n\nfunction fitFrame(kind: GeoProjectionKind, parts: readonly Part[]): Frame | null {\n if (parts.length === 0) return null\n const shape = {\n type: \"MultiPolygon\",\n coordinates: parts.map(({ polygon }) => [ringCoordinates(polygon.rings[0])]),\n } as GeoPermissibleObjects\n const [[west, south], [east, north]] = geoBounds(shape)\n\n for (const candidate of [kind, \"equirectangular\"] as const) {\n const projection = makeProjection(candidate, west, south, east, north).fitSize([FIT, FIT], shape)\n const [[x0, y0], [x1, y1]] = geoPath(projection).bounds(shape)\n const size = Math.max(x1 - x0, y1 - y0)\n if (!Number.isFinite(size) || size <= 0) continue\n return {\n projection,\n centerX: (x0 + x1) / 2,\n centerY: (y0 + y1) / 2,\n size,\n width: (x1 - x0) / size,\n height: (y1 - y0) / size,\n }\n }\n return null\n}\n\nfunction project(frame: Frame, object: GeoPermissibleObjects, closed: boolean): GeoContour[] {\n const contours: GeoContour[] = []\n let current: number[] | null = null\n const { centerX, centerY, size } = frame\n const sink = {\n point(x: number, y: number) {\n current?.push((x - centerX) / size, -(y - centerY) / size)\n },\n lineStart() {\n current = []\n },\n lineEnd() {\n const flat = current\n current = null\n if (!flat || flat.length < 4) return\n let isClosed = closed\n if (!closed) {\n const n = flat.length\n if (flat[0] === flat[n - 2] && flat[1] === flat[n - 1] && n >= 8) {\n flat.length = n - 2\n isClosed = true\n }\n }\n const points = Float32Array.from(flat)\n contours.push({ points, closed: isClosed, length: contourLength(points, isClosed) })\n },\n polygonStart() {},\n polygonEnd() {},\n sphere() {},\n }\n geoStream(object, frame.projection.stream(sink))\n return contours\n}\n\nfunction contourLength(points: Float32Array, closed: boolean): number {\n let length = 0\n const n = points.length / 2\n for (let i = 1; i < n; i++) {\n length += Math.hypot(points[i * 2] - points[i * 2 - 2], points[i * 2 + 1] - points[i * 2 - 1])\n }\n if (closed && n > 1) length += Math.hypot(points[0] - points[n * 2 - 2], points[1] - points[n * 2 - 1])\n return length\n}\n\n// Longest edge, in degrees, that simplification may leave. d3 takes an edge as\n// the short way round the sphere, so an edge across more than half the planet\n// (Kaliningrad to Chukotka, once the coast between is dropped) turns inside out.\nconst MAX_EDGE_DEGREES = 20\n\ntype MaskFor = (arc: GeoArc) => Uint8Array\n\n/** Which of an arc's points survive `limit`, the same whichever way the arc is walked. */\nfunction keepMask(arc: GeoArc, limit: number): Uint8Array {\n const n = arc.buckets.length\n const mask = new Uint8Array(n)\n let lastLon = arc.points[0]\n let lastLat = arc.points[1]\n for (let i = 0; i < n; i++) {\n const lon = arc.points[i * 2]\n const lat = arc.points[i * 2 + 1]\n let far = false\n if (arc.buckets[i] > limit) {\n let dLon = Math.abs(lon - lastLon)\n if (dLon > 180) dLon = 360 - dLon\n far = Math.abs(lat - lastLat) > MAX_EDGE_DEGREES || dLon * Math.cos((lat * Math.PI) / 180) > MAX_EDGE_DEGREES\n }\n if (arc.buckets[i] <= limit || far) {\n mask[i] = 1\n lastLon = lon\n lastLat = lat\n }\n }\n return mask\n}\n\nfunction filteredPoints(refs: readonly GeoRingRef[], maskFor: MaskFor): [number, number][] {\n const out: [number, number][] = []\n for (const { arc, reversed } of refs) {\n const n = arc.buckets.length\n const mask = maskFor(arc)\n for (let j = out.length === 0 ? 0 : 1; j < n; j++) {\n const i = reversed ? n - 1 - j : j\n if (mask[i]) out.push([arc.points[i * 2], arc.points[i * 2 + 1]])\n }\n }\n return out\n}\n\n/** A ring keeps at least three vertices, raising its arcs' limits if the global one would collapse it. */\nfunction ringLimit(ring: readonly GeoRingRef[], limit: number): number {\n let kept = 0\n for (const { arc } of ring) {\n for (let i = 0; i < arc.buckets.length - 1; i++) if (arc.buckets[i] <= limit) kept++\n }\n if (kept >= 3) return limit\n const buckets: number[] = []\n for (const { arc } of ring) for (let i = 0; i < arc.buckets.length - 1; i++) buckets.push(arc.buckets[i])\n buckets.sort((a, b) => a - b)\n return Math.max(limit, buckets[Math.min(2, buckets.length - 1)] ?? limit)\n}\n\n/**\n * Whether a simplified ring still winds the way its original did. Dropping\n * points can fold a small ring over itself, and d3 reads an exterior wound the\n * wrong way as the rest of the planet — one such island fills the whole frame.\n */\nfunction windsAsOriginal(ring: [number, number][], exterior: boolean): boolean {\n if (ring.length < 4) return true\n const inverted = geoArea({ type: \"Polygon\", coordinates: [ring] }) > 2 * Math.PI\n return inverted !== exterior\n}\n\ninterface Chain {\n refs: GeoRingRef[]\n closed: boolean\n}\n\nconst endKey = (arc: GeoArc, last: boolean) => {\n const i = last ? arc.buckets.length - 1 : 0\n return `${arc.points[i * 2]},${arc.points[i * 2 + 1]}`\n}\n\n/** Joins arcs that meet end to end with nothing else at the joint, so a border draws as one line with real joins. */\nfunction chainArcs(arcs: readonly GeoArc[]): Chain[] {\n const atNode = new Map<string, GeoArc[]>()\n for (const arc of arcs) {\n for (const key of [endKey(arc, false), endKey(arc, true)]) {\n const list = atNode.get(key)\n if (list) list.push(arc)\n else atNode.set(key, [arc])\n }\n }\n const visited = new Set<GeoArc>()\n const chains: Chain[] = []\n const refStart = ({ arc, reversed }: GeoRingRef) => endKey(arc, reversed)\n const refEnd = ({ arc, reversed }: GeoRingRef) => endKey(arc, !reversed)\n const nextAt = (node: string): GeoArc | null => {\n const list = atNode.get(node)!\n if (list.length !== 2) return null\n return list.find((arc) => !visited.has(arc)) ?? null\n }\n\n for (const arc of arcs) {\n if (visited.has(arc)) continue\n visited.add(arc)\n const refs: GeoRingRef[] = [{ arc, reversed: false }]\n for (let next = nextAt(refEnd(refs[refs.length - 1])); next; next = nextAt(refEnd(refs[refs.length - 1]))) {\n visited.add(next)\n refs.push({ arc: next, reversed: endKey(next, false) !== refEnd(refs[refs.length - 1]) })\n }\n for (let prev = nextAt(refStart(refs[0])); prev; prev = nextAt(refStart(refs[0]))) {\n visited.add(prev)\n refs.unshift({ arc: prev, reversed: endKey(prev, true) !== refStart(refs[0]) })\n }\n chains.push({ refs, closed: refStart(refs[0]) === refEnd(refs[refs.length - 1]) })\n }\n return chains\n}\n\nfunction buildGeometry(\n features: readonly GeoFeature[],\n frame: GeoFrame,\n fitted: Frame,\n borders: GeoBorders,\n detail: number\n): GeoGeometry {\n const parts = partsOf(features, frame)\n const area = parts.reduce((sum, { polygon }) => sum + polygon.area, 0)\n const pointLimit = pointBucketLimit(detail, area)\n const polygonLimit = polygonAreaLimit(detail, area)\n\n const kept: GeoRingRef[][][] = []\n for (const { polygon, largest } of parts) {\n if (!largest && polygon.area < polygonLimit) continue\n kept.push(polygon.rings.filter((_, i) => i === 0 || polygon.ringAreas[i] >= polygonLimit))\n }\n\n const limits = new Map<GeoArc[\"key\"], number>()\n const usage = new Map<GeoArc[\"key\"], { arc: GeoArc; count: number }>()\n for (const rings of kept) {\n for (const ring of rings) {\n const limit = ringLimit(ring, pointLimit)\n for (const { arc } of ring) {\n limits.set(arc.key, Math.max(limits.get(arc.key) ?? 0, limit))\n const use = usage.get(arc.key)\n if (use) use.count++\n else usage.set(arc.key, { arc, count: 1 })\n }\n }\n }\n\n const masks = new Map<GeoArc[\"key\"], Uint8Array>()\n const maskFor: MaskFor = (arc) => {\n let mask = masks.get(arc.key)\n if (!mask) {\n mask = keepMask(arc, limits.get(arc.key) ?? 255)\n masks.set(arc.key, mask)\n }\n return mask\n }\n\n if (pointLimit < 255) {\n for (const rings of kept) {\n rings.forEach((ring, index) => {\n let limit = Math.min(...ring.map(({ arc }) => limits.get(arc.key) ?? pointLimit))\n while (limit < 255 && !windsAsOriginal(filteredPoints(ring, maskFor), index === 0)) {\n limit = Math.min(255, limit + 2)\n for (const { arc } of ring) {\n limits.set(arc.key, Math.max(limits.get(arc.key) ?? 0, limit))\n masks.delete(arc.key)\n }\n }\n })\n }\n }\n\n const fills = project(\n fitted,\n {\n type: \"MultiPolygon\",\n coordinates: kept.flatMap((rings) => {\n const [exterior, ...holes] = rings.map((ring) => filteredPoints(ring, maskFor))\n return exterior.length < 4 ? [] : [[exterior, ...holes.filter((hole) => hole.length >= 4)]]\n }),\n } as GeoPermissibleObjects,\n true\n )\n\n const lineArcs = [...usage.values()].filter(({ count }) => borders === \"all\" || count === 1).map(({ arc }) => arc)\n const lines: GeoContour[] = []\n for (const chain of chainArcs(lineArcs)) {\n lines.push(\n ...project(fitted, { type: \"LineString\", coordinates: filteredPoints(chain.refs, maskFor) } as GeoPermissibleObjects, false)\n )\n }\n\n const sum = (contours: GeoContour[]) => contours.reduce((total, c) => total + c.length, 0)\n const bytes = [...fills, ...lines].reduce((total, c) => total + c.points.byteLength + 32, 0)\n return {\n width: fitted.width,\n height: fitted.height,\n fills,\n lines,\n fillLength: sum(fills),\n lineLength: sum(lines),\n bytes,\n }\n}\n\nclass ByteCache<V extends { bytes: number }> {\n private _entries = new Map<string, V>()\n private _bytes = 0\n\n constructor(private readonly _budget: number) {}\n\n get(key: string): V | undefined {\n const value = this._entries.get(key)\n if (value) {\n this._entries.delete(key)\n this._entries.set(key, value)\n }\n return value\n }\n\n set(key: string, value: V): void {\n const previous = this._entries.get(key)\n if (previous) this._bytes -= previous.bytes\n this._entries.delete(key)\n this._entries.set(key, value)\n this._bytes += value.bytes\n for (const [oldest, entry] of this._entries) {\n if (this._bytes <= this._budget || this._entries.size <= 1) break\n this._entries.delete(oldest)\n this._bytes -= entry.bytes\n }\n }\n\n clear(): void {\n this._entries.clear()\n this._bytes = 0\n }\n}\n\nconst frames = new ByteCache<Frame & { bytes: number }>(64)\nconst geometries = new ByteCache<GeoGeometry>(64 * 1024 * 1024)\n\nexport interface GeoGeometryRequest {\n /** Identifies `features` and `frame`: equal keys must mean equal selections. */\n selectionKey: string\n features: readonly GeoFeature[]\n frame: GeoFrame\n projection: GeoProjectionKind\n borders: GeoBorders\n detail: number\n}\n\n/**\n * The drawing for a selection, cached. The projection is fitted to the\n * selection at full detail, so a `detail` tween never moves or rescales it.\n */\nexport function geoGeometry(request: GeoGeometryRequest): GeoGeometry | null {\n const detail = Math.round(clamp01(request.detail) * 100) / 100\n const frameKey = `${request.selectionKey}|${request.projection}`\n const key = `${frameKey}|${request.borders}|${detail}`\n const cached = geometries.get(key)\n if (cached) return cached\n\n let fitted: Frame | undefined = frames.get(frameKey)\n if (!fitted) {\n const made = fitFrame(request.projection, partsOf(request.features, request.frame))\n if (!made) return null\n fitted = made\n frames.set(frameKey, { ...made, bytes: 1 })\n }\n const geometry = buildGeometry(request.features, request.frame, fitted, request.borders, detail)\n geometries.set(key, geometry)\n return geometry\n}\n\nexport function clearGeoGeometry(): void {\n frames.clear()\n geometries.clear()\n}\n", "/**\n * Visvalingam–Whyatt weights for a hand-defined ring, in the same buckets the\n * generated data carries (`-2·log2` of the effective area in steradians), so a\n * shape passed to `geoRegistry.define` answers to `detail` like any other.\n *\n * Planar in degrees with longitude scaled by latitude: accurate enough for the\n * handful of shapes an author defines, where the generated data uses the exact\n * spherical area.\n */\nexport function ringBuckets(points: Float64Array): Uint8Array {\n const n = points.length / 2\n const buckets = new Uint8Array(n)\n if (n < 3) return buckets\n\n const radians = Math.PI / 180\n const weight = new Float64Array(n)\n const prev = new Int32Array(n)\n const next = new Int32Array(n)\n for (let i = 0; i < n; i++) {\n prev[i] = i - 1\n next[i] = i + 1\n }\n\n const area = (a: number, b: number, c: number): number => {\n const cos = Math.cos(points[b * 2 + 1] * radians)\n const ax = points[a * 2] * cos, ay = points[a * 2 + 1]\n const bx = points[b * 2] * cos, by = points[b * 2 + 1]\n const cx = points[c * 2] * cos, cy = points[c * 2 + 1]\n return (Math.abs((bx - ax) * (cy - ay) - (cx - ax) * (by - ay)) / 2) * radians * radians\n }\n\n const heap: number[] = []\n const position = new Int32Array(n).fill(-1)\n const less = (i: number, j: number) => weight[heap[i]] < weight[heap[j]]\n const swap = (i: number, j: number) => {\n ;[heap[i], heap[j]] = [heap[j], heap[i]]\n position[heap[i]] = i\n position[heap[j]] = j\n }\n const up = (i: number) => {\n while (i > 0) {\n const parent = (i - 1) >> 1\n if (!less(i, parent)) break\n swap(i, parent)\n i = parent\n }\n }\n const down = (i: number) => {\n for (;;) {\n const l = 2 * i + 1\n const r = l + 1\n let smallest = i\n if (l < heap.length && less(l, smallest)) smallest = l\n if (r < heap.length && less(r, smallest)) smallest = r\n if (smallest === i) return\n swap(i, smallest)\n i = smallest\n }\n }\n const push = (i: number) => {\n position[i] = heap.length\n heap.push(i)\n up(heap.length - 1)\n }\n const remove = (i: number) => {\n const at = position[i]\n const last = heap.pop()!\n position[i] = -1\n if (at < heap.length) {\n heap[at] = last\n position[last] = at\n up(at)\n down(position[last])\n }\n }\n\n for (let i = 1; i < n - 1; i++) {\n weight[i] = area(i - 1, i, i + 1)\n push(i)\n }\n\n let floor = 0\n const final = new Float64Array(n)\n final[0] = final[n - 1] = Infinity\n while (heap.length > 0) {\n const i = heap[0]\n remove(i)\n floor = Math.max(floor, weight[i])\n final[i] = floor\n const p = prev[i]\n const q = next[i]\n if (p >= 0) next[p] = q\n if (q < n) prev[q] = p\n for (const j of [p, q]) {\n if (j <= 0 || j >= n - 1 || position[j] < 0) continue\n remove(j)\n weight[j] = area(prev[j], j, next[j])\n push(j)\n }\n }\n\n for (let i = 0; i < n; i++) buckets[i] = weightBucket(final[i])\n return buckets\n}\n\nexport function weightBucket(weight: number): number {\n if (weight === Infinity) return 0\n if (!(weight > 0)) return 255\n return Math.min(254, Math.max(1, Math.round(-2 * Math.log2(weight))))\n}\n", "import { geoArea } from \"d3-geo\"\n\nimport {\n GEO_DATA_FORMAT,\n type GeoFeature,\n type GeoFileData,\n type GeoIndex,\n type GeoPolygon,\n type GeoRingRef,\n} from \"./format\"\nimport { ringBuckets } from \"./simplify\"\n\n/** Prefix every data key carries; bumped with the file format. */\nexport const GEO_DATA_VERSION = `v${GEO_DATA_FORMAT}`\n\n/**\n * Answers a data key — `v1/countries/FR`, `v1/states/US`, `v1/index` — with the\n * parsed file, or `null` when this source does not have it. A throw means \"could\n * not tell\" (offline, a 500) and is retried on the next load.\n */\nexport type GeoSource = (key: string) => Promise<unknown>\n\ntype Position = readonly [number, number] | readonly number[]\ntype GeoPolygonShape =\n | { type: \"Polygon\"; coordinates: readonly (readonly Position[])[] }\n | { type: \"MultiPolygon\"; coordinates: readonly (readonly (readonly Position[])[])[] }\n/** GeoJSON in lon/lat: a Polygon, a MultiPolygon, or a Feature holding one. */\nexport type GeoShape = GeoPolygonShape | { type: \"Feature\"; geometry: GeoPolygonShape; properties?: { name?: string } | null }\n\nexport interface GeoDefinition {\n shape: GeoShape\n name?: string\n /** The country a subdivision code expands under, when it has one. */\n parent?: string\n}\n\n/** Fetches `<base>/<key>.json`; `base` may instead map a key to its URL. */\nexport function geoUrlSource(base: string | ((key: string) => string), init?: RequestInit): GeoSource {\n return async (key) => {\n const url = typeof base === \"function\" ? base(key) : `${base.replace(/\\/+$/, \"\")}/${key}.json`\n const response = await fetch(url, init)\n // Some object stores answer a missing key with 400, not 404.\n if (response.status === 404 || response.status === 400) return null\n if (!response.ok) throw new Error(`${url} → HTTP ${response.status}`)\n return response.json()\n }\n}\n\n/** Wraps a function returning the file as text, bytes or parsed JSON (e.g. `fs.readFile`). */\nexport function geoLoaderSource(\n load: (key: string) => Promise<string | ArrayBuffer | Uint8Array | object | null | undefined>\n): GeoSource {\n return async (key) => {\n const value = await load(key)\n if (value == null) return null\n if (typeof value === \"string\") return JSON.parse(value)\n if (value instanceof ArrayBuffer || value instanceof Uint8Array) {\n return JSON.parse(new TextDecoder().decode(value))\n }\n return value\n }\n}\n\nfunction definedFeature(code: string, definition: GeoDefinition, serial: number): GeoFeature {\n const shape = definition.shape.type === \"Feature\" ? definition.shape.geometry : definition.shape\n const feature = definition.shape.type === \"Feature\" ? definition.shape : null\n const polygons: readonly (readonly (readonly Position[])[])[] =\n shape.type === \"Polygon\" ? [shape.coordinates] : shape.coordinates\n let arcIndex = 0\n\n /**\n * One ring, wound the way d3 reads it. d3 takes the *inside* of a ring to be\n * the side its points go clockwise around, so an exterior must be small\n * (`geoArea` under a hemisphere) and a hole its complement. GeoJSON (RFC 7946)\n * writes the opposite way round, counter-clockwise exteriors, and a ring\n * taken as written would fill the rest of the sphere; so a ring that reads\n * the wrong way for its place is reversed.\n */\n const toRing = (ring: readonly Position[], exterior: boolean): GeoRingRef => {\n const closed = ring.length > 0 && ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]\n let coordinates = closed ? ring : [...ring, ring[0]]\n const encloses = geoArea({ type: \"Polygon\", coordinates: [coordinates as [number, number][]] }) <= 2 * Math.PI\n if (encloses !== exterior) coordinates = [...coordinates].reverse()\n const points = new Float64Array(coordinates.length * 2)\n coordinates.forEach(([lon, lat], i) => {\n points[i * 2] = lon\n points[i * 2 + 1] = lat\n })\n return { arc: { key: `define:${serial}:${code}:${arcIndex++}`, points, buckets: ringBuckets(points) }, reversed: false }\n }\n\n const measured: GeoPolygon[] = polygons.map((rings) => {\n const resolved = rings.map((ring, i) => [toRing(ring, i === 0)])\n const ringAreas = rings.map((ring) => {\n const area = geoArea({ type: \"Polygon\", coordinates: [ring as [number, number][]] })\n return area > 2 * Math.PI ? 4 * Math.PI - area : area\n })\n const area = Math.max(0, ringAreas[0] - ringAreas.slice(1).reduce((a, b) => a + b, 0))\n return { rings: resolved, ringAreas, area, mainland: true }\n })\n\n const name = definition.name ?? feature?.properties?.name ?? code\n return {\n code,\n name,\n nameNl: name,\n parent: definition.parent ?? (code.includes(\"-\") ? code.slice(0, 2) : null),\n first: true,\n listed: false,\n remote: false,\n polygons: measured,\n }\n}\n\nclass GeoRegistry {\n private _sources: GeoSource[] = []\n private _defined = new Map<string, { serial: number; feature: GeoFeature }>()\n private _generation = 0\n private _serial = 0\n\n /** Bumps whenever a source or a definition is added or removed. */\n get generation(): number {\n return this._generation\n }\n\n get hasSources(): boolean {\n return this._sources.length > 0\n }\n\n /** Adds a source after every source already registered. Returns its removal. */\n use(source: GeoSource): () => void {\n this._sources.push(source)\n this._generation++\n return () => {\n const i = this._sources.indexOf(source)\n if (i < 0) return\n this._sources.splice(i, 1)\n this._generation++\n }\n }\n\n /**\n * Shapes (GeoJSON, lon/lat) under codes of your choosing, checked before any\n * source. A definition replaces generated data for the same code.\n */\n define(shapes: Record<string, GeoShape | GeoDefinition>): () => void {\n const serial = ++this._serial\n const codes = Object.entries(shapes).map(([rawCode, value]) => {\n const code = rawCode.trim().toUpperCase()\n const definition = \"shape\" in value ? value : { shape: value }\n this._defined.set(code, { serial, feature: definedFeature(code, definition, serial) })\n return code\n })\n this._generation++\n return () => {\n for (const code of codes) {\n if (this._defined.get(code)?.serial === serial) this._defined.delete(code)\n }\n this._generation++\n }\n }\n\n defined(code: string): GeoFeature | undefined {\n return this._defined.get(code)?.feature\n }\n\n /** Removes every source and definition — for tests. */\n reset(): void {\n this._sources = []\n this._defined.clear()\n this._generation++\n }\n\n /**\n * Asks each source in registration order; the first non-null answer wins.\n * Resolves `null` only when every source answered that it has no such file.\n */\n async resolve(key: string): Promise<GeoFileData | GeoIndex | null> {\n if (this._sources.length === 0) {\n throw new Error(\"No geo source registered — call geoRegistry.use(geoUrlSource(…)) before rendering GeoBorder\")\n }\n let failure: unknown = null\n for (const source of [...this._sources]) {\n try {\n const value = await source(key)\n if (value != null) return value as GeoFileData | GeoIndex\n } catch (error) {\n failure ??= error\n }\n }\n if (failure) throw failure\n return null\n }\n\n /** Every listed region's code, names and parent, for a picker. */\n async index(): Promise<GeoIndex | null> {\n return (await this.resolve(`${GEO_DATA_VERSION}/index`)) as GeoIndex | null\n }\n}\n\nexport const geoRegistry = new GeoRegistry()\n", "import type { LoaderFn } from \"@motionscript/sdk\"\n\nimport { decodeGeoFile, type DecodedGeoFile, type GeoFileData } from \"./format\"\nimport { GEO_DATA_VERSION, geoRegistry } from \"./registry\"\n\nexport type GeoFileEntry =\n | { status: \"ready\"; file: DecodedGeoFile }\n | { status: \"missing\" }\n | { status: \"failed\"; error: unknown }\n\nconst entries = new Map<string, GeoFileEntry>()\nconst inflight = new Map<string, Promise<GeoFileEntry>>()\nconst loaders = new Map<string, LoaderFn>()\nconst warned = new Set<string>()\nlet version = 0\n\nexport function countryFileKey(code: string): string {\n return `${GEO_DATA_VERSION}/countries/${code}`\n}\n\nexport function statesFileKey(country: string): string {\n return `${GEO_DATA_VERSION}/states/${country}`\n}\n\n/** Bumps whenever a file lands, so derived geometry keyed on it rebuilds. */\nexport function geoDataVersion(): number {\n return version\n}\n\nexport function geoFileEntry(key: string): GeoFileEntry | undefined {\n return entries.get(key)\n}\n\nasync function fetchEntry(key: string): Promise<GeoFileEntry> {\n try {\n let data = (await geoRegistry.resolve(key)) as GeoFileData | null\n // A country with no subdivisions has no states file; its outline stands in.\n if (data === null && key.includes(\"/states/\")) {\n data = (await geoRegistry.resolve(key.replace(\"/states/\", \"/countries/\"))) as GeoFileData | null\n }\n return data === null ? { status: \"missing\" } : { status: \"ready\", file: decodeGeoFile(data) }\n } catch (error) {\n return { status: \"failed\", error }\n }\n}\n\n/**\n * Loads one data file into the shared cache. Never rejects: a rejected loader\n * is retried on every tick and fails an export outright, where a recorded\n * failure draws nothing and is tried again by the next call.\n */\nexport function loadGeoFile(key: string): Promise<GeoFileEntry> {\n const current = entries.get(key)\n if (current?.status === \"ready\") return Promise.resolve(current)\n let job = inflight.get(key)\n if (!job) {\n job = fetchEntry(key).then((entry) => {\n inflight.delete(key)\n entries.set(key, entry)\n version++\n if (entry.status === \"ready\") {\n warned.delete(key)\n } else if (!warned.has(key)) {\n warned.add(key)\n if (entry.status === \"failed\") console.warn(`[GeoBorder] could not load ${key}:`, entry.error)\n else console.warn(`[GeoBorder] no geo source has ${key}`)\n }\n return entry\n })\n inflight.set(key, job)\n }\n return job\n}\n\n/**\n * The loader an `AssetScope` declares for a file: one function per key, so\n * every node that needs the file declares the same one. Nothing is disposed —\n * decoded data is shared by every engine in the process.\n */\nexport function geoLoader(key: string): LoaderFn {\n let load = loaders.get(key)\n if (!load) {\n load = async () => {\n await loadGeoFile(key)\n }\n loaders.set(key, load)\n }\n return load\n}\n\n/** Forgets every loaded file — for tests. */\nexport function clearGeoFiles(): void {\n entries.clear()\n inflight.clear()\n warned.clear()\n version++\n}\n", "import type { GeoFeature } from \"./format\"\nimport { countryFileKey, geoFileEntry, statesFileKey } from \"./loader\"\nimport { geoRegistry } from \"./registry\"\n\nexport type GeoLevel = \"country\" | \"state\"\nexport type GeoFrame = \"mainland\" | \"all\"\n\nconst CODE = /^[A-Z]{2}(-[A-Z0-9]{1,3})?$/\n\n/** `\"fr, de\"`, `[\"FR\", \"de\"]` → `[\"FR\", \"DE\"]`; unique, in order, empties dropped. */\nexport function normalizeIso(value: unknown): string[] {\n const raw = Array.isArray(value) ? value : typeof value === \"string\" ? value.split(/[\\s,;]+/) : []\n const out: string[] = []\n for (const item of raw) {\n if (typeof item !== \"string\") continue\n const code = item.trim().toUpperCase()\n if (code && !out.includes(code)) out.push(code)\n }\n return out\n}\n\nfunction isSubdivision(code: string): boolean {\n return code.includes(\"-\")\n}\n\n/** Every data file a selection reads, for `declareAssets`. Depends on nothing but its arguments. */\nexport function geoFilesFor(codes: readonly string[], level: GeoLevel): string[] {\n const files = new Set<string>()\n for (const code of codes) {\n if (!CODE.test(code) || geoRegistry.defined(code)) continue\n if (isSubdivision(code)) files.add(statesFileKey(code.slice(0, 2)))\n else files.add(level === \"state\" ? statesFileKey(code) : countryFileKey(code))\n }\n return [...files]\n}\n\nexport interface GeoSelection {\n features: GeoFeature[]\n /** A file this selection needs has not landed yet. */\n pending: boolean\n /** Codes whose file loaded without them. */\n unknown: string[]\n}\n\n/**\n * The features a selection draws. A bare country code at state level is its\n * first-level subdivisions — minus the remote ones when framing the mainland —\n * or the country itself when it has none.\n */\nexport function selectGeoFeatures(codes: readonly string[], level: GeoLevel, frame: GeoFrame): GeoSelection {\n const features: GeoFeature[] = []\n const seen = new Set<string>()\n const unknown: string[] = []\n let pending = false\n\n const add = (feature: GeoFeature) => {\n if (seen.has(feature.code)) return\n seen.add(feature.code)\n features.push(feature)\n }\n\n for (const code of codes) {\n const defined = geoRegistry.defined(code)\n if (defined) {\n add(defined)\n continue\n }\n if (!CODE.test(code)) {\n unknown.push(code)\n continue\n }\n const subdivision = isSubdivision(code)\n const key = subdivision || level === \"state\" ? statesFileKey(code.slice(0, 2)) : countryFileKey(code)\n const entry = geoFileEntry(key)\n if (!entry || entry.status !== \"ready\") {\n if (!entry) pending = true\n continue\n }\n const file = entry.file.features\n if (subdivision || level === \"country\") {\n const feature = file.get(code)\n if (feature) add(feature)\n else unknown.push(code)\n continue\n }\n const children = [...file.values()].filter(\n (f) => f.parent === code && f.first && !(frame === \"mainland\" && f.remote)\n )\n if (children.length > 0) children.forEach(add)\n else if (file.get(code)) add(file.get(code)!)\n else unknown.push(code)\n }\n\n return { features, pending, unknown }\n}\n", "import { GeoBorder } from \"./border\";\n\n// Typed by name, so the declaration names each component rather than spelling out its type through core.\nexport const NODES: (typeof GeoBorder)[] = [GeoBorder];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["Adder", "x", "p", "i", "j", "y", "hi", "lo", "n", "flatten", "arrays", "array", "merge", "epsilon", "epsilon2", "pi", "halfPi", "quarterPi", "tau", "degrees", "radians", "abs", "atan", "atan2", "cos", "exp", "log", "sin", "sign", "x", "sqrt", "tan", "acos", "pi", "asin", "halfPi", "noop", "streamGeometry", "geometry", "stream", "streamGeometryType", "streamObjectType", "object", "features", "i", "n", "coordinates", "streamLine", "streamPolygon", "geometries", "closed", "coordinate", "stream_default", "areaRingSum", "Adder", "areaSum", "lambda00", "phi00", "lambda0", "cosPhi0", "sinPhi0", "areaStream", "noop", "areaRingStart", "areaRingEnd", "areaRing", "tau", "areaPointFirst", "areaPoint", "lambda", "phi", "radians", "cos", "quarterPi", "sin", "dLambda", "sdLambda", "adLambda", "cosPhi", "sinPhi", "k", "v", "atan2", "area_default", "object", "stream_default", "spherical", "cartesian", "atan2", "asin", "lambda", "phi", "cosPhi", "cos", "sin", "cartesianDot", "a", "b", "cartesianCross", "cartesianAddInPlace", "cartesianScale", "vector", "k", "cartesianNormalizeInPlace", "d", "l", "sqrt", "lambda0", "phi0", "lambda1", "phi1", "lambda2", "lambda00", "phi00", "p0", "deltaSum", "ranges", "range", "boundsStream", "boundsPoint", "boundsLineStart", "boundsLineEnd", "boundsRingPoint", "boundsRingStart", "boundsRingEnd", "Adder", "areaStream", "areaRingSum", "epsilon", "lambda", "phi", "linePoint", "p", "cartesian", "radians", "normal", "cartesianCross", "equatorial", "inflection", "cartesianNormalizeInPlace", "spherical", "delta", "sign", "lambdai", "degrees", "phii", "antimeridian", "abs", "angle", "rangeCompare", "a", "b", "rangeContains", "x", "bounds_default", "feature", "i", "n", "merged", "deltaMax", "stream_default", "compose_default", "a", "b", "compose", "x", "y", "rotationIdentity", "lambda", "phi", "abs", "pi", "tau", "rotateRadians", "deltaLambda", "deltaPhi", "deltaGamma", "compose_default", "rotationLambda", "rotationPhiGamma", "forwardRotationLambda", "rotation", "cosDeltaPhi", "cos", "sinDeltaPhi", "sin", "cosDeltaGamma", "sinDeltaGamma", "cosPhi", "x", "y", "z", "k", "atan2", "asin", "rotation_default", "rotate", "radians", "forward", "coordinates", "degrees", "circleStream", "stream", "radius", "delta", "direction", "t0", "t1", "cosRadius", "cos", "sinRadius", "sin", "step", "tau", "circleRadius", "point", "t", "spherical", "cartesian", "cartesianNormalizeInPlace", "acos", "epsilon", "buffer_default", "lines", "line", "x", "y", "m", "noop", "result", "pointEqual_default", "a", "b", "abs", "epsilon", "Intersection", "point", "points", "other", "entry", "rejoin_default", "segments", "compareIntersection", "startInside", "interpolate", "stream", "subject", "clip", "n", "segment", "p0", "p1", "x", "pointEqual_default", "epsilon", "link", "start", "current", "isSubject", "array", "i", "a", "b", "longitude", "point", "abs", "pi", "sign", "tau", "polygonContains_default", "polygon", "lambda", "phi", "sinPhi", "sin", "normal", "cos", "angle", "winding", "sum", "Adder", "halfPi", "epsilon", "i", "n", "m", "ring", "point0", "lambda0", "phi0", "quarterPi", "sinPhi0", "cosPhi0", "j", "lambda1", "sinPhi1", "cosPhi1", "point1", "phi1", "delta", "absDelta", "antimeridian", "k", "atan2", "arc", "cartesianCross", "cartesian", "cartesianNormalizeInPlace", "intersection", "phiArc", "asin", "epsilon2", "clip_default", "pointVisible", "clipLine", "interpolate", "start", "sink", "line", "ringBuffer", "buffer_default", "ringSink", "polygonStarted", "polygon", "segments", "ring", "clip", "point", "lineStart", "lineEnd", "pointRing", "ringStart", "ringEnd", "merge", "startInside", "polygonContains_default", "rejoin_default", "compareIntersection", "lambda", "phi", "pointLine", "clean", "ringSegments", "i", "n", "m", "segment", "validSegment", "a", "b", "halfPi", "epsilon", "antimeridian_default", "clip_default", "clipAntimeridianLine", "clipAntimeridianInterpolate", "pi", "halfPi", "stream", "lambda0", "phi0", "sign0", "clean", "lambda1", "phi1", "sign1", "delta", "abs", "epsilon", "clipAntimeridianIntersect", "cosPhi0", "cosPhi1", "sinLambda0Lambda1", "sin", "atan", "cos", "from", "to", "direction", "phi", "lambda", "circle_default", "radius", "cr", "cos", "delta", "radians", "smallRadius", "notHemisphere", "abs", "epsilon", "interpolate", "from", "to", "direction", "stream", "circleStream", "visible", "lambda", "phi", "clipLine", "point0", "c0", "v0", "v00", "clean", "point1", "point2", "v", "c", "code", "pi", "intersect", "pointEqual_default", "t", "a", "b", "two", "pa", "cartesian", "pb", "n1", "n2", "cartesianCross", "n2n2", "cartesianDot", "n1n2", "determinant", "c1", "c2", "n1xn2", "A", "cartesianScale", "B", "cartesianAddInPlace", "u", "w", "uu", "t2", "sqrt", "q", "spherical", "lambda0", "lambda1", "phi0", "phi1", "z", "polar", "meridian", "q1", "r", "clip_default", "line_default", "a", "b", "x0", "y0", "x1", "y1", "ax", "ay", "bx", "by", "t0", "t1", "dx", "dy", "r", "clipMax", "clipMin", "clipRectangle", "x0", "y0", "x1", "y1", "visible", "x", "y", "interpolate", "from", "to", "direction", "stream", "a", "a1", "corner", "comparePoint", "p", "abs", "epsilon", "compareIntersection", "b", "ca", "cb", "activeStream", "bufferStream", "buffer_default", "segments", "polygon", "ring", "x__", "y__", "v__", "x_", "y_", "v_", "first", "clean", "clipStream", "point", "lineStart", "lineEnd", "polygonStart", "polygonEnd", "polygonInside", "winding", "i", "n", "j", "m", "a0", "b0", "b1", "startInside", "cleanInside", "merge", "rejoin_default", "linePoint", "v", "line_default", "identity_default", "x", "areaSum", "Adder", "areaRingSum", "x00", "y00", "x0", "y0", "areaStream", "noop", "areaRingStart", "areaRingEnd", "abs", "area", "areaPointFirst", "x", "y", "areaPoint", "area_default", "x0", "y0", "x1", "y1", "boundsStream", "boundsPoint", "noop", "bounds", "x", "y", "bounds_default", "X0", "Y0", "Z0", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "x00", "y00", "x0", "y0", "centroidStream", "centroidPoint", "centroidLineStart", "centroidLineEnd", "centroidRingStart", "centroidRingEnd", "centroid", "x", "y", "centroidPointFirstLine", "centroidPointLine", "dx", "dy", "z", "sqrt", "centroidPointFirstRing", "centroidPointRing", "centroid_default", "PathContext", "context", "_", "x", "y", "tau", "noop", "lengthSum", "Adder", "lengthRing", "x00", "y00", "x0", "y0", "lengthStream", "noop", "lengthPointFirst", "lengthPoint", "length", "x", "y", "sqrt", "measure_default", "cacheDigits", "cacheAppend", "cacheRadius", "cacheCircle", "PathString", "digits", "append", "appendRound", "_", "x", "y", "s", "result", "strings", "i", "j", "d", "k", "path_default", "projection", "context", "digits", "pointRadius", "projectionStream", "contextStream", "path", "object", "stream_default", "area_default", "measure_default", "bounds_default", "centroid_default", "_", "identity_default", "PathString", "PathContext", "d", "transformer", "methods", "stream", "s", "TransformStream", "key", "x", "y", "fit", "projection", "fitBounds", "object", "clip", "stream_default", "bounds_default", "fitExtent", "extent", "b", "w", "h", "k", "x", "y", "fitSize", "size", "fitWidth", "width", "fitHeight", "height", "maxDepth", "cosMinDistance", "cos", "radians", "resample_default", "project", "delta2", "resample", "resampleNone", "transformer", "x", "y", "resampleLineTo", "x0", "y0", "lambda0", "a0", "b0", "c0", "x1", "y1", "lambda1", "a1", "b1", "c1", "depth", "stream", "dx", "dy", "d2", "a", "b", "c", "m", "sqrt", "phi2", "asin", "lambda2", "abs", "epsilon", "atan2", "p", "x2", "y2", "dx2", "dy2", "dz", "lambda00", "x00", "y00", "a00", "b00", "c00", "resampleStream", "point", "lineStart", "lineEnd", "ringStart", "linePoint", "lambda", "phi", "cartesian", "ringPoint", "ringEnd", "transformRadians", "transformer", "x", "y", "radians", "transformRotate", "rotate", "scaleTranslate", "k", "dx", "dy", "sx", "sy", "transform", "scaleTranslateRotate", "alpha", "cosAlpha", "cos", "sinAlpha", "sin", "a", "b", "ai", "bi", "ci", "fi", "projection", "project", "projectionMutator", "projectAt", "lambda", "phi", "deltaLambda", "deltaPhi", "deltaGamma", "theta", "preclip", "antimeridian_default", "x0", "y0", "x1", "y1", "postclip", "identity_default", "delta2", "projectResample", "projectTransform", "projectRotateTransform", "cache", "cacheStream", "point", "invert", "degrees", "stream", "_", "reset", "circle_default", "clipRectangle", "recenter", "resample_default", "sqrt", "extent", "object", "fitExtent", "size", "fitSize", "width", "fitWidth", "height", "fitHeight", "center", "rotateRadians", "compose_default", "conicProjection", "projectAt", "phi0", "phi1", "pi", "m", "projectionMutator", "p", "_", "radians", "degrees", "cylindricalEqualAreaRaw", "phi0", "cosPhi0", "cos", "forward", "lambda", "phi", "sin", "x", "y", "asin", "conicEqualAreaRaw", "y0", "y1", "sy0", "sin", "n", "abs", "epsilon", "cylindricalEqualAreaRaw", "c", "r0", "sqrt", "project", "x", "y", "r", "cos", "r0y", "l", "atan2", "sign", "pi", "asin", "conicEqualArea_default", "conicProjection", "azimuthalInvert", "angle", "x", "y", "z", "sqrt", "c", "sc", "sin", "cc", "cos", "atan2", "asin", "mercatorRaw", "lambda", "phi", "log", "tan", "halfPi", "x", "y", "atan", "exp", "mercator_default", "mercatorProjection", "tau", "project", "m", "projection", "center", "scale", "translate", "clipExtent", "x0", "y0", "x1", "y1", "_", "reclip", "k", "pi", "t", "rotation_default", "equirectangularRaw", "lambda", "phi", "equirectangular_default", "projection", "orthographicRaw", "x", "y", "cos", "sin", "azimuthalInvert", "asin", "orthographic_default", "projection", "epsilon", "GEO_DATA_FORMAT", "decodeArc", "encoded", "key", "kx", "ky", "tx", "ty", "count", "points", "buckets", "x", "y", "i", "ringCoordinates", "ring", "out", "arc", "reversed", "n", "j", "ringArea", "coordinates", "area", "area_default", "decodeGeoFile", "data", "arcs", "ref", "index", "features", "f", "mainland", "rings", "resolved", "r", "Flow", "Graphics2D", "Paint", "Shapes", "Types", "component2d", "snapValue", "FIT", "POINT_BASE", "POINT_RANGE", "POLYGON_BASE", "POLYGON_RANGE", "clamp01", "value", "pointBucketLimit", "detail", "area", "minWeight", "polygonAreaLimit", "partsOf", "features", "frame", "parts", "feature", "mainland", "p", "polygons", "largest", "polygon", "centerLongitude", "west", "east", "mid", "makeProjection", "kind", "south", "north", "lon", "lat", "mercator_default", "equirectangular_default", "orthographic_default", "span", "conicEqualArea_default", "fitFrame", "shape", "ringCoordinates", "bounds_default", "candidate", "projection", "x0", "y0", "x1", "y1", "path_default", "size", "project", "object", "closed", "contours", "current", "centerX", "centerY", "sink", "x", "y", "flat", "isClosed", "n", "points", "contourLength", "stream_default", "length", "i", "MAX_EDGE_DEGREES", "keepMask", "arc", "limit", "mask", "lastLon", "lastLat", "far", "dLon", "filteredPoints", "refs", "maskFor", "out", "reversed", "j", "ringLimit", "ring", "kept", "buckets", "a", "b", "windsAsOriginal", "exterior", "area_default", "endKey", "last", "chainArcs", "arcs", "atNode", "key", "list", "visited", "chains", "refStart", "refEnd", "nextAt", "node", "next", "prev", "buildGeometry", "fitted", "borders", "sum", "pointLimit", "polygonLimit", "_", "limits", "usage", "rings", "use", "masks", "index", "fills", "holes", "hole", "lineArcs", "count", "lines", "chain", "total", "c", "bytes", "ByteCache", "_budget", "previous", "oldest", "entry", "frames", "geometries", "geoGeometry", "request", "frameKey", "cached", "made", "geometry", "clearGeoGeometry", "ringBuckets", "points", "buckets", "radians", "weight", "prev", "next", "i", "area", "a", "b", "c", "cos", "ax", "ay", "bx", "by", "cx", "cy", "heap", "position", "less", "j", "swap", "up", "parent", "down", "l", "r", "smallest", "push", "remove", "at", "last", "floor", "final", "p", "q", "weightBucket", "GEO_DATA_VERSION", "GEO_DATA_FORMAT", "geoUrlSource", "base", "init", "key", "url", "response", "geoLoaderSource", "load", "value", "definedFeature", "code", "definition", "serial", "shape", "feature", "polygons", "arcIndex", "toRing", "ring", "exterior", "coordinates", "area_default", "points", "lon", "lat", "i", "ringBuckets", "measured", "rings", "resolved", "ringAreas", "area", "a", "b", "name", "GeoRegistry", "source", "shapes", "codes", "rawCode", "failure", "error", "geoRegistry", "entries", "inflight", "loaders", "warned", "version", "countryFileKey", "code", "GEO_DATA_VERSION", "statesFileKey", "country", "geoDataVersion", "geoFileEntry", "key", "fetchEntry", "data", "geoRegistry", "decodeGeoFile", "error", "loadGeoFile", "current", "job", "entry", "geoLoader", "load", "clearGeoFiles", "CODE", "normalizeIso", "value", "raw", "out", "item", "code", "isSubdivision", "geoFilesFor", "codes", "level", "files", "geoRegistry", "statesFileKey", "countryFileKey", "selectGeoFeatures", "frame", "features", "seen", "unknown", "pending", "add", "feature", "defined", "subdivision", "key", "entry", "geoFileEntry", "file", "children", "f", "CONTOURS_PER_PATH", "POINTS_PER_PATH", "coordinate", "value", "chunk", "contours", "total", "scale", "chunks", "parts", "count", "points", "from", "length", "flush", "to", "contour", "p", "i", "choice", "values", "initial", "Types", "snapValue", "kept", "keptBy", "state", "entry", "drawnOf", "size", "own", "codes", "level", "frame", "selection", "selectGeoFeatures", "code", "geometry", "geoGeometry", "geoRegistry", "geoDataVersion", "width", "height", "cached", "drawn", "pathOp", "g", "start", "end", "centerBounds", "span", "localStart", "localEnd", "GeoBorder", "component2d", "Paint", "Flow", "normalizeIso", "loader", "file", "geoFilesFor", "geoLoader", "measurer", "children", "box", "ctx", "fill", "shadow", "shape", "Graphics2D", "part", "Shapes", "overlay", "stroke", "centred", "layer", "castsShadow", "NODES", "GeoBorder"]
|
|
7
7
|
}
|