geo-morpher 0.1.0

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.
Files changed (47) hide show
  1. package/README.md +513 -0
  2. package/data/indonesia/indonesia-grid.csv +39 -0
  3. package/data/indonesia/indonesia_provice_boundary.geojson +40 -0
  4. package/data/indonesia/indonesia_provice_boundary.geojson_old +45 -0
  5. package/data/indonesia/literasi_2024.csv +39 -0
  6. package/data/oxford_lsoas_cartogram.json +2744 -0
  7. package/data/oxford_lsoas_regular.json +4715 -0
  8. package/dist/index.cjs +3304 -0
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.js +3271 -0
  11. package/dist/index.js.map +1 -0
  12. package/examples/browser/README.md +189 -0
  13. package/examples/browser/index.html +260 -0
  14. package/examples/browser/indonesia/index.html +262 -0
  15. package/examples/browser/indonesia/main.js +400 -0
  16. package/examples/browser/main.js +225 -0
  17. package/examples/browser/maplibre/index.html +283 -0
  18. package/examples/browser/maplibre/main.js +339 -0
  19. package/examples/browser/zoom-scaling-glyphs.html +257 -0
  20. package/examples/browser/zoom-scaling-glyphs.js +281 -0
  21. package/examples/custom-projection.js +236 -0
  22. package/examples/native.js +52 -0
  23. package/morphs.js +1 -0
  24. package/package.json +87 -0
  25. package/src/adapters/leaflet/glyphLayer.js +282 -0
  26. package/src/adapters/leaflet/index.js +16 -0
  27. package/src/adapters/leaflet/morphLayers.js +231 -0
  28. package/src/adapters/leaflet/utils/collections.js +41 -0
  29. package/src/adapters/leaflet/utils/coordinates.js +64 -0
  30. package/src/adapters/leaflet/utils/glyphNormalizer.js +94 -0
  31. package/src/adapters/leaflet.js +9 -0
  32. package/src/adapters/maplibre/glyphLayer.js +279 -0
  33. package/src/adapters/maplibre/index.js +8 -0
  34. package/src/adapters/maplibre/morphLayers.js +460 -0
  35. package/src/adapters/maplibre/utils/coordinates.js +134 -0
  36. package/src/adapters/maplibre/utils/customGlyphLayer.js +0 -0
  37. package/src/adapters/maplibre/utils/glyphNormalizer.js +136 -0
  38. package/src/adapters/maplibre.js +6 -0
  39. package/src/core/geomorpher.js +474 -0
  40. package/src/index.js +38 -0
  41. package/src/lib/osgb/ellipsoid.js +82 -0
  42. package/src/lib/osgb/index.js +192 -0
  43. package/src/utils/cartogram.js +295 -0
  44. package/src/utils/csv.js +107 -0
  45. package/src/utils/enrichment.js +167 -0
  46. package/src/utils/projection.js +65 -0
  47. package/src/utils/projections.js +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/enrichment.js","../src/lib/osgb/ellipsoid.js","../src/lib/osgb/index.js","../src/utils/projection.js","../node_modules/@turf/helpers/dist/es/index.js","../src/utils/csv.js","../src/utils/cartogram.js","../src/core/geomorpher.js","../src/adapters/leaflet/morphLayers.js","../src/adapters/leaflet/utils/coordinates.js","../src/adapters/leaflet/utils/glyphNormalizer.js","../src/adapters/leaflet/utils/collections.js","../src/adapters/leaflet/glyphLayer.js","../src/adapters/maplibre/morphLayers.js","../src/adapters/maplibre/utils/coordinates.js","../src/adapters/maplibre/utils/glyphNormalizer.js","../src/adapters/maplibre/glyphLayer.js","../src/utils/projections.js","../src/index.js"],"sourcesContent":["import isEmpty from \"lodash/isEmpty.js\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\n\nexport function groupByJoinColumn(data, joinColumn) {\n return data.reduce((groups, item) => {\n const key = item?.[joinColumn];\n if (!key) return groups;\n if (!groups[key]) groups[key] = [];\n groups[key].push(item);\n return groups;\n }, {});\n}\n\nexport function aggregateGroup(values, aggregations) {\n const result = {};\n for (const [column, type] of Object.entries(aggregations)) {\n const columnValues = values\n .map((item) => item?.[column])\n .filter((value) => value !== null && value !== undefined && value !== \"\");\n\n if (!columnValues.length) continue;\n\n switch (type) {\n case \"sum\":\n result[column] = columnValues.reduce((sum, val) => {\n const numeric = Number(val);\n return sum + (Number.isFinite(numeric) ? numeric : 0);\n }, 0);\n break;\n case \"mean\": {\n const numericValues = columnValues\n .map((value) => Number(value))\n .filter((value) => Number.isFinite(value));\n if (numericValues.length) {\n result[column] =\n numericValues.reduce((acc, val) => acc + val, 0) /\n numericValues.length;\n }\n break;\n }\n case \"count\":\n result[column] = columnValues.length;\n break;\n case \"unique_count\":\n result[column] = new Set(columnValues).size;\n break;\n case \"array\":\n result[column] = Array.from(new Set(columnValues));\n break;\n case \"categories\": {\n columnValues.forEach((value) => {\n const key = `${column}_${value}`;\n result[key] = (result[key] || 0) + 1;\n });\n break;\n }\n case \"min\": {\n const numericValues = columnValues\n .map((value) => Number(value))\n .filter((value) => Number.isFinite(value));\n if (numericValues.length) {\n result[column] = Math.min(...numericValues);\n }\n break;\n }\n case \"max\": {\n const numericValues = columnValues\n .map((value) => Number(value))\n .filter((value) => Number.isFinite(value));\n if (numericValues.length) {\n result[column] = Math.max(...numericValues);\n }\n break;\n }\n default:\n break;\n }\n }\n\n return result;\n}\n\nexport function normalizeAggregatedData(aggregated) {\n const numericKeys = new Set();\n Object.values(aggregated).forEach((values) => {\n Object.entries(values).forEach(([key, value]) => {\n if (Number.isFinite(value)) numericKeys.add(key);\n });\n });\n\n const ranges = {};\n numericKeys.forEach((key) => {\n const numericValues = Object.values(aggregated)\n .map((values) => values[key])\n .filter((value) => Number.isFinite(value));\n const min = Math.min(...numericValues);\n const max = Math.max(...numericValues);\n ranges[key] = { min, max };\n });\n\n return Object.entries(aggregated).reduce((acc, [code, values]) => {\n const normalized = { ...values };\n for (const key of numericKeys) {\n const value = values[key];\n if (!Number.isFinite(value)) continue;\n const { min, max } = ranges[key];\n normalized[key] = min === max ? 0.5 : (value - min) / (max - min);\n }\n acc[code] = normalized;\n return acc;\n }, {});\n}\n\nexport function enrichGeoData({\n data,\n geojson,\n joinColumn = \"lsoa\",\n geoJSONJoinColumn = \"code\",\n aggregations = {},\n normalize = true,\n}) {\n if (!Array.isArray(data) || isEmpty(data)) {\n return geojson;\n }\n\n if (!geojson?.features?.length) {\n return geojson ?? { type: \"FeatureCollection\", features: [] };\n }\n\n const groups = groupByJoinColumn(data, joinColumn);\n const aggregated = Object.entries(groups).reduce((acc, [code, values]) => {\n acc[code] = aggregateGroup(values, aggregations);\n return acc;\n }, {});\n\n const finalAggregated = normalize\n ? normalizeAggregatedData(aggregated)\n : aggregated;\n\n const enriched = cloneDeep(geojson);\n enriched.features = enriched.features.map((feature) => {\n const joinValue = feature?.properties?.[geoJSONJoinColumn];\n if (!joinValue) return feature;\n\n const extra = finalAggregated[joinValue];\n if (!extra) return feature;\n\n return {\n ...feature,\n properties: {\n ...feature.properties,\n ...extra,\n },\n };\n });\n\n return enriched;\n}\n\nexport function createLookup(features, keyAccessor) {\n return features.reduce((acc, feature) => {\n const key = keyAccessor(feature);\n if (!key) return acc;\n acc[key] = feature;\n return acc;\n }, {});\n}\n","// OSGB Projection by Jo Wood\n// Original source https://observablehq.com/@jwolondon/projection\n\nexport function Ellipsoid(eID = \"WGS84\") {\n const id = eID;\n const rad2Deg = 180 / Math.PI;\n const deg2Rad = Math.PI / 180;\n let a, b, e2, n;\n const store = (radius, ee2) => {\n a = radius;\n e2 = ee2;\n b = Math.sqrt(a * a * (1 - e2));\n n = (a - b) / (a + b);\n };\n\n switch (id) {\n case \"AIRY1830\":\n store(6377563.396, 0.0066705397616);\n break;\n case \"WGS84\":\n store(6378137, 0.00669438);\n break;\n default:\n console.error(\"Unknown id when creating new ellipsoid: \", id);\n }\n\n // Public methods\n this.getEquatorialRadius = function () {\n return a;\n };\n\n this.getPolarRadius = function () {\n return b;\n };\n\n this.getSquaredEccentricity = function () {\n return e2;\n };\n\n // Reports the amount of flattening as a ratio (a-b)/(a+b).\n this.getN = function () {\n return n;\n };\n\n this.projectDatum = function ([lng, lat], newDatum) {\n if (newDatum == id) {\n return [lng, lat]; // Ellipsoids identical so no need to reproject\n }\n\n switch (id) {\n case \"AIRY1830\":\n return molodensky(lng, lat, 573.604, 0.000011960023, 375, -111, 431);\n\n case \"WGS84\":\n return molodensky(lng, lat, -573.604, -0.000011960023, -375, 111, -431);\n\n default:\n console.error(\"Unknown ellipsoid when projecting datum \", id);\n }\n };\n\n // Private functions\n const molodensky = (lng, lat, dA, dF, dX, dY, dZ) => {\n const myA = a - dA;\n const myF = 0.0033528106647474805 - dF;\n const myES = 2 * myF - myF * myF;\n const myLat = lat * deg2Rad;\n const myLng = lng * deg2Rad;\n const sinLat = Math.sin(myLat);\n const sinLng = Math.sin(myLng);\n const cosLat = Math.cos(myLat);\n const cosLng = Math.cos(myLng);\n const rn = myA / Math.sqrt(1 - myES * sinLat * sinLat);\n const rm = (myA * (1 - myES)) / Math.pow(1 - myES * sinLat * sinLat, 1.5);\n const d1 = -dX * sinLat * cosLng - dY * sinLat * sinLng + dZ * cosLat;\n const d2 = (dA * (rn * myES * sinLat * cosLat)) / myA;\n const d3 = dF * (rm / (1 - myF) + rn * (1 - myF)) * sinLat * cosLat;\n const dLat = (d1 + d2 + d3) / rm;\n const dLng = (-dX * sinLng + dY * cosLng) / (rn * cosLat);\n return [(myLng + dLng) * rad2Deg, (myLat + dLat) * rad2Deg];\n };\n}\n","// OSGB Projection by Jo Wood\n// Original source https://observablehq.com/@jwolondon/projection\n\nimport { Ellipsoid } from \"./ellipsoid.js\";\n\nexport const OSGB = function () {\n const rad2Deg = 180 / Math.PI;\n const deg2Rad = Math.PI / 180;\n const airy1830 = new Ellipsoid(\"AIRY1830\");\n const wgs84 = new Ellipsoid(\"WGS84\");\n\n const scaleFactor = 0.9996012717;\n const latOrigin = 49;\n const lngOrigin = -2;\n const xOffset = 400000;\n const yOffset = -100000;\n\n // Public methods\n this.toOSGB = function (lngLat) {\n const lnglat2 = wgs84.projectDatum(lngLat, \"AIRY1830\");\n return geoToUTM(airy1830, lnglat2);\n };\n\n this.toGeo = function ([easting, northing]) {\n return airy1830.projectDatum(\n utmToGeo(airy1830, [easting, northing]),\n \"WGS84\"\n );\n };\n\n this.projection = function () {\n const osgbProj = () => {\n const degrees = 180 / Math.PI;\n return (λ, φ) => this.toOSGB([degrees * λ, degrees * φ]);\n };\n\n return d3.geoProjection(osgbProj());\n };\n\n // Private methods\n\n const geoToUTM = (ellipsoid, [lng, lat]) => {\n const a = ellipsoid.getEquatorialRadius();\n const b = ellipsoid.getPolarRadius();\n const e2 = ellipsoid.getSquaredEccentricity();\n const n = ellipsoid.getN();\n const n2 = n * n;\n const n3 = n2 * n;\n const lngTemp =\n lng -\n lngOrigin +\n 180 -\n Math.floor((lng - lngOrigin + 180) / 360) * 360 -\n 180;\n const phi = lat * deg2Rad;\n const phi0 = latOrigin * deg2Rad;\n const lambda = lngTemp * deg2Rad;\n const lambda2 = lambda * lambda;\n const lambda3 = lambda2 * lambda;\n const sinPhi = Math.sin(phi);\n const sin2Phi = sinPhi * sinPhi;\n const cosPhi = Math.cos(phi);\n const cos3Phi = cosPhi * cosPhi * cosPhi;\n const cos5Phi = cos3Phi * cosPhi * cosPhi;\n const tanPhi = Math.tan(phi);\n const tan2Phi = tanPhi * tanPhi;\n const tan4Phi = tan2Phi * tan2Phi;\n\n const v = (a * scaleFactor) / Math.sqrt(1 - e2 * sin2Phi);\n const rho = (a * scaleFactor * (1 - e2)) / Math.pow(1 - e2 * sin2Phi, 1.5);\n const neta2 = v / rho - 1;\n\n const M =\n b *\n scaleFactor *\n ((1 + n + 1.25 * n2 + 1.25 * n3) * (phi - phi0) -\n (3 * n + 3 * n2 + 2.625 * n3) *\n Math.sin(phi - phi0) *\n Math.cos(phi + phi0) +\n (1.875 * n2 + 1.875 * n3) *\n Math.sin(2 * (phi - phi0)) *\n Math.cos(2 * (phi + phi0)) -\n 1.45833333333333333 *\n n3 *\n Math.sin(3 * (phi - phi0)) *\n Math.cos(3 * (phi + phi0)));\n\n const I = M + yOffset;\n const II = (v / 2) * sinPhi * cosPhi;\n const III = (v / 24) * sinPhi * cos3Phi * (5 - tan2Phi + 9 * neta2);\n const IIIA = (v / 720) * sinPhi * cos5Phi * (61 - 58 * tan2Phi + tan4Phi);\n const IV = v * cosPhi;\n const V = (v / 6) * cos3Phi * (v / rho - tan2Phi);\n const VI =\n (v / 120) *\n cos5Phi *\n (5 - 18 * tan2Phi + tan4Phi + 14 * neta2 - 58 * tan2Phi * neta2);\n\n return [\n xOffset + IV * lambda + V * lambda3 + VI * lambda2 * lambda3,\n I + II * lambda2 + III * lambda2 * lambda2 + IIIA * lambda3 * lambda3,\n ];\n };\n\n const utmToGeo = (ellipsoid, [easting, northing]) => {\n const a = ellipsoid.getEquatorialRadius();\n const b = ellipsoid.getPolarRadius();\n const e2 = ellipsoid.getSquaredEccentricity();\n const n = ellipsoid.getN();\n const n2 = n * n;\n const n3 = n2 * n;\n\n const phi0 = latOrigin * deg2Rad;\n let phi = (northing - yOffset) / (a * scaleFactor) + phi0;\n let M;\n\n M =\n b *\n scaleFactor *\n ((1 + n + 1.25 * n2 + 1.25 * n3) * (phi - phi0) -\n (3 * n + 3 * n2 + 2.625 * n3) *\n Math.sin(phi - phi0) *\n Math.cos(phi + phi0) +\n (1.875 * n2 + 1.875 * n3) *\n Math.sin(2 * (phi - phi0)) *\n Math.cos(2 * (phi + phi0)) -\n 1.45833333333333333 *\n n3 *\n Math.sin(3 * (phi - phi0)) *\n Math.cos(3 * (phi + phi0)));\n\n while (Math.abs(northing - yOffset - M) >= 0.01) {\n phi = (northing - yOffset - M) / (a * scaleFactor) + phi;\n\n M =\n b *\n scaleFactor *\n ((1 + n + 1.25 * n2 + 1.25 * n3) * (phi - phi0) -\n (3 * n + 3 * n2 + 2.625 * n3) *\n Math.sin(phi - phi0) *\n Math.cos(phi + phi0) +\n (1.875 * n2 + 1.875 * n3) *\n Math.sin(2 * (phi - phi0)) *\n Math.cos(2 * (phi + phi0)) -\n 1.45833333333333333 *\n n3 *\n Math.sin(3 * (phi - phi0)) *\n Math.cos(3 * (phi + phi0)));\n }\n\n const sinPhi = Math.sin(phi);\n const secPhi = 1 / Math.cos(phi);\n const sin2Phi = sinPhi * sinPhi;\n const tanPhi = Math.tan(phi);\n const tan2Phi = tanPhi * tanPhi;\n const tan4Phi = tan2Phi * tan2Phi;\n const tan6Phi = tan4Phi * tan2Phi;\n\n const v = (a * scaleFactor) / Math.sqrt(1 - e2 * sin2Phi);\n const v2 = v * v;\n const v3 = v2 * v;\n const v5 = v3 * v2;\n const v7 = v5 * v2;\n const rho = (a * scaleFactor * (1 - e2)) / Math.pow(1 - e2 * sin2Phi, 1.5);\n const neta2 = v / rho - 1;\n\n const VII = tanPhi / (2 * rho * v);\n const VIII =\n (tanPhi / (24 * rho * v3)) *\n (5 + 3 * tan2Phi + neta2 - 9 * tan2Phi * neta2);\n const IX = (tanPhi / (720 * rho * v5)) * (61 + 90 * tan2Phi + 45 * tan4Phi);\n const X = secPhi / v;\n const XI = (secPhi / (6 * v3)) * (v / rho + 2 * tan2Phi);\n const XII = (secPhi / (120 * v5)) * (5 + 28 * tan2Phi + 24 * tan4Phi);\n const XIIA =\n (secPhi / (5040 * v7)) *\n (61 + 662 * tan2Phi + 1320 * tan4Phi + 720 * tan6Phi);\n\n const E = easting - xOffset;\n const E2 = E * E;\n const E3 = E2 * E;\n const E4 = E3 * E;\n const E5 = E4 * E;\n const E6 = E5 * E;\n const E7 = E6 * E;\n\n return [\n lngOrigin + rad2Deg * (X * E - XI * E3 + XII * E5 - XIIA * E7),\n rad2Deg * (phi - VII * E2 + VIII * E4 - IX * E6),\n ];\n };\n};\n","import cloneDeep from \"lodash/cloneDeep.js\";\nimport * as turf from \"@turf/turf\";\nimport { OSGB } from \"../lib/osgb/index.js\";\n\nconst DEFAULT_PROJECTION = new OSGB();\n\nexport function transformCoordinates(coords, projection = DEFAULT_PROJECTION) {\n if (Array.isArray(coords[0])) {\n return coords.map((child) => transformCoordinates(child, projection));\n }\n\n if (coords.length === 4 && typeof coords[0] === \"number\") {\n const [minX, minY, maxX, maxY] = coords;\n const [tMinX, tMinY] = projection.toGeo([minX, minY]);\n const [tMaxX, tMaxY] = projection.toGeo([maxX, maxY]);\n return [tMinX, tMinY, tMaxX, tMaxY];\n }\n\n const [lng, lat] = projection.toGeo(coords);\n return [lng, lat];\n}\n\nexport function transformGeometry(geometry, projection = DEFAULT_PROJECTION) {\n if (!geometry) return geometry;\n\n if (geometry.type === \"GeometryCollection\") {\n return {\n ...geometry,\n geometries: geometry.geometries.map((geom) =>\n transformGeometry(geom, projection)\n ),\n };\n }\n\n return {\n ...geometry,\n coordinates: transformCoordinates(geometry.coordinates, projection),\n };\n}\n\nexport function toWGS84FeatureCollection(fc, projection = DEFAULT_PROJECTION) {\n if (!fc) return fc;\n \n // Use default projection if null/undefined\n const proj = projection || DEFAULT_PROJECTION;\n\n const cloned = cloneDeep(fc);\n turf.coordEach(cloned, (coord) => {\n const [lng, lat] = proj.toGeo(coord);\n coord[0] = lng;\n coord[1] = lat;\n });\n\n if (cloned.type === \"FeatureCollection\") {\n return cloned;\n }\n\n if (cloned.type === \"Feature\") {\n return turf.featureCollection([cloned]);\n }\n\n return turf.featureCollection([\n { type: \"Feature\", geometry: cloned, properties: {} },\n ]);\n}\n","/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexport var earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array<any>} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Point>} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array<Array<number>>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Point>} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Polygon>} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<LineString>} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<LineString>} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature<MultiLineString>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiLineString>} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature<MultiPoint>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPoint>} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature<MultiPolygon>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPolygon>} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature<GeometryCollection>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array<Geometry>} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array<number>} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\n","import isEmpty from \"lodash/isEmpty.js\";\n\nfunction pushField({ row, field }) {\n row.push(field.value);\n field.value = \"\";\n}\n\nfunction pushRow({ rows, row, field }) {\n pushField({ row, field });\n if (row.length === 1 && row[0] === \"\") {\n row.length = 0;\n return;\n }\n rows.push([...row]);\n row.length = 0;\n}\n\nfunction tokenize(text, delimiter) {\n const rows = [];\n const row = [];\n const field = { value: \"\" };\n let inQuotes = false;\n\n for (let i = 0; i < text.length; i += 1) {\n const char = text[i];\n\n if (inQuotes) {\n if (char === \"\\\"\") {\n const next = text[i + 1];\n if (next === \"\\\"\") {\n field.value += \"\\\"\";\n i += 1;\n } else {\n inQuotes = false;\n }\n } else {\n field.value += char;\n }\n continue;\n }\n\n if (char === \"\\\"\") {\n inQuotes = true;\n continue;\n }\n\n if (char === delimiter) {\n pushField({ row, field });\n continue;\n }\n\n if (char === \"\\n\" || char === \"\\r\") {\n if (char === \"\\r\" && text[i + 1] === \"\\n\") {\n i += 1;\n }\n pushRow({ rows, row, field });\n continue;\n }\n\n field.value += char;\n }\n\n pushField({ row, field });\n if (row.length > 0) {\n rows.push([...row]);\n }\n\n return rows.filter((current) => current.some((value) => value.trim() !== \"\"));\n}\n\nexport function parseCSV(text, { delimiter = \",\", trim = true, headers = true } = {}) {\n if (typeof text !== \"string\") {\n throw new TypeError(\"parseCSV expects a string input\");\n }\n\n const cleaned = text.trim();\n if (!cleaned) {\n return [];\n }\n\n const rows = tokenize(cleaned, delimiter);\n if (!headers) {\n return rows.map((row) => row.map((value) => (trim ? value.trim() : value)));\n }\n\n if (rows.length === 0) {\n return [];\n }\n\n const header = rows[0].map((value) => (trim ? value.trim() : value));\n const remaining = rows.slice(1);\n\n if (isEmpty(header)) {\n return [];\n }\n\n return remaining.map((row) => {\n const record = {};\n header.forEach((key, index) => {\n const value = row[index] ?? \"\";\n record[key] = trim && typeof value === \"string\" ? value.trim() : value;\n });\n return record;\n });\n}\n\nexport default parseCSV;\n","import cloneDeep from \"lodash/cloneDeep.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport * as turf from \"@turf/turf\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport { parseCSV } from \"./csv.js\";\n\nconst GEOJSON_TYPES = new Set([\"FeatureCollection\", \"Feature\", \"GeometryCollection\", \"Polygon\", \"MultiPolygon\"]);\n\nconst DEFAULT_GRID_OPTIONS = {\n rowField: \"row\",\n colField: \"col\",\n idField: \"id\",\n includeSourceProperties: true,\n cellPadding: 0.08,\n rowOrientation: \"top\",\n colOrientation: \"left\",\n};\n\nconst clamp01 = (value) => {\n if (!Number.isFinite(value)) return 0;\n if (value < 0) return 0;\n if (value > 0.49) return 0.49;\n return value;\n};\n\nexport const isGeoJSON = (input) => {\n if (!input || typeof input !== \"object\") return false;\n if (typeof input.type !== \"string\") return false;\n return GEOJSON_TYPES.has(input.type);\n};\n\nfunction ensureExtent({ extent, regularGeoJSON }) {\n if (Array.isArray(extent) && extent.length === 4) {\n const [minX, minY, maxX, maxY] = extent.map((value) => Number(value));\n if ([minX, minY, maxX, maxY].every((value) => Number.isFinite(value))) {\n return [minX, minY, maxX, maxY];\n }\n }\n\n if (regularGeoJSON && isGeoJSON(regularGeoJSON)) {\n const bounds = turf.bbox(regularGeoJSON);\n if (bounds && bounds.every((value) => Number.isFinite(value))) {\n return bounds;\n }\n }\n\n throw new Error(\"Unable to determine extent for grid cartogram. Provide `cartogramGridOptions.extent` or a valid regularGeoJSON.\");\n}\n\nconst ORIENTATIONS = {\n row: new Set([\"top\", \"bottom\"]),\n col: new Set([\"left\", \"right\"]),\n};\n\nfunction normalizeOptions(joinProperty, overrides = {}) {\n const base = { ...DEFAULT_GRID_OPTIONS, idField: joinProperty ?? DEFAULT_GRID_OPTIONS.idField };\n const merged = { ...base, ...overrides };\n\n if (!ORIENTATIONS.row.has(merged.rowOrientation)) {\n merged.rowOrientation = DEFAULT_GRID_OPTIONS.rowOrientation;\n }\n\n if (!ORIENTATIONS.col.has(merged.colOrientation)) {\n merged.colOrientation = DEFAULT_GRID_OPTIONS.colOrientation;\n }\n\n merged.cellPadding = clamp01(merged.cellPadding);\n\n return merged;\n}\n\nfunction normalizeRecords(records, { rowField, colField, idField }) {\n if (!Array.isArray(records) || records.length === 0) {\n throw new Error(\"Grid cartogram input is empty\");\n }\n\n return records.map((record, index) => {\n const source = record ?? {};\n const idValue = source[idField];\n if (idValue == null || idValue === \"\") {\n throw new Error(`Grid cartogram row ${index} is missing identifier column \"${idField}\"`);\n }\n\n const rowRaw = source[rowField];\n const colRaw = source[colField];\n\n const row = Number(rowRaw);\n const col = Number(colRaw);\n\n if (!Number.isFinite(row) || !Number.isFinite(col)) {\n throw new Error(\n `Grid cartogram row ${index} must contain numeric \"${rowField}\" and \"${colField}\" values`\n );\n }\n\n return {\n id: idValue,\n row,\n col,\n source,\n };\n });\n}\n\nfunction deriveGridMetrics(entries) {\n const rows = entries.map((entry) => entry.row);\n const cols = entries.map((entry) => entry.col);\n\n const minRow = Math.min(...rows);\n const maxRow = Math.max(...rows);\n const minCol = Math.min(...cols);\n const maxCol = Math.max(...cols);\n\n const rowCount = maxRow - minRow + 1;\n const colCount = maxCol - minCol + 1;\n\n if (!Number.isFinite(rowCount) || rowCount <= 0 || !Number.isFinite(colCount) || colCount <= 0) {\n throw new Error(\"Invalid row/column range detected in grid cartogram input\");\n }\n\n return {\n minRow,\n maxRow,\n minCol,\n maxCol,\n rowCount,\n colCount,\n };\n}\n\nfunction computeCellBounds({\n entry,\n metrics,\n extent,\n options,\n}) {\n const [minX, minY, maxX, maxY] = extent;\n const width = maxX - minX;\n const height = maxY - minY;\n\n const cellWidth = width / metrics.colCount;\n const cellHeight = height / metrics.rowCount;\n\n const padX = cellWidth * options.cellPadding;\n const padY = cellHeight * options.cellPadding;\n\n const innerWidth = cellWidth - padX;\n const innerHeight = cellHeight - padY;\n\n const colIndex = entry.col - metrics.minCol;\n const rowIndex = entry.row - metrics.minRow;\n\n if (options.colOrientation === \"left\") {\n const x0 = minX + colIndex * cellWidth + padX / 2;\n const x1 = x0 + innerWidth;\n\n if (options.rowOrientation === \"top\") {\n const y1 = maxY - rowIndex * cellHeight - padY / 2;\n const y0 = y1 - innerHeight;\n return { x0, x1, y0, y1 };\n }\n\n const y0 = minY + rowIndex * cellHeight + padY / 2;\n const y1 = y0 + innerHeight;\n return { x0, x1, y0, y1 };\n }\n\n const x1 = maxX - colIndex * cellWidth - padX / 2;\n const x0 = x1 - innerWidth;\n\n if (options.rowOrientation === \"top\") {\n const y1 = maxY - rowIndex * cellHeight - padY / 2;\n const y0 = y1 - innerHeight;\n return { x0, x1, y0, y1 };\n }\n\n const y0 = minY + rowIndex * cellHeight + padY / 2;\n const y1 = y0 + innerHeight;\n return { x0, x1, y0, y1 };\n}\n\nfunction createSquareFeature({ entry, bounds, joinProperty, options }) {\n const { x0, x1, y0, y1 } = bounds;\n const ring = [\n [x0, y0],\n [x1, y0],\n [x1, y1],\n [x0, y1],\n [x0, y0],\n ];\n\n const baseProperties = options.includeSourceProperties ? cloneDeep(entry.source) : {};\n\n const properties = {\n ...baseProperties,\n [joinProperty]: entry.id,\n grid_row: entry.row,\n grid_col: entry.col,\n };\n\n if (typeof options.propertyMapper === \"function\") {\n const extra = options.propertyMapper({\n source: entry.source,\n joinValue: entry.id,\n row: entry.row,\n col: entry.col,\n });\n if (extra && typeof extra === \"object\") {\n Object.assign(properties, extra);\n }\n }\n\n return {\n type: \"Feature\",\n id: entry.id,\n properties,\n geometry: polygon([ring]).geometry,\n };\n}\n\nexport function createGridCartogramFeatureCollection({\n records,\n regularGeoJSON,\n joinProperty = \"code\",\n gridOptions = {},\n}) {\n const options = normalizeOptions(joinProperty, gridOptions);\n const extent = ensureExtent({ extent: options.extent, regularGeoJSON });\n\n const entries = normalizeRecords(records, options);\n const metrics = deriveGridMetrics(entries);\n\n const features = entries.map((entry) => {\n const bounds = computeCellBounds({ entry, metrics, extent, options });\n return createSquareFeature({ entry, bounds, joinProperty, options });\n });\n\n return featureCollection(features);\n}\n\nexport function normalizeCartogramInput({\n input,\n regularGeoJSON,\n joinProperty = \"code\",\n gridOptions = {},\n}) {\n if (!input) {\n throw new Error(\"Cartogram input is required\");\n }\n\n if (isGeoJSON(input)) {\n return cloneDeep(input);\n }\n\n if (Array.isArray(input)) {\n if (input.length === 0) {\n throw new Error(\"Cartogram input array is empty\");\n }\n if (input[0] && typeof input[0] === \"object\" && !Array.isArray(input[0])) {\n return createGridCartogramFeatureCollection({\n records: input,\n regularGeoJSON,\n joinProperty,\n gridOptions,\n });\n }\n throw new Error(\"Unsupported cartogram array format. Provide objects with row/col values.\");\n }\n\n if (typeof input === \"string\") {\n const records = parseCSV(input);\n if (isEmpty(records)) {\n throw new Error(\"Parsed cartogram CSV is empty\");\n }\n return createGridCartogramFeatureCollection({\n records,\n regularGeoJSON,\n joinProperty,\n gridOptions,\n });\n }\n\n if (input && typeof input === \"object\" && Array.isArray(input.records)) {\n return createGridCartogramFeatureCollection({\n records: input.records,\n regularGeoJSON,\n joinProperty,\n gridOptions,\n });\n }\n\n throw new Error(\"Unsupported cartogram input format\");\n}\n\nexport default normalizeCartogramInput;\n","import cloneDeep from \"lodash/cloneDeep.js\";\nimport keyBy from \"lodash/keyBy.js\";\nimport mapValues from \"lodash/mapValues.js\";\nimport flubber from \"flubber\";\nimport * as turf from \"@turf/turf\";\nimport { enrichGeoData, createLookup } from \"../utils/enrichment.js\";\nimport { toWGS84FeatureCollection } from \"../utils/projection.js\";\nimport { normalizeCartogramInput } from \"../utils/cartogram.js\";\n\nconst clampFactor = (value) => {\n if (!Number.isFinite(value)) return 0;\n if (value <= 0) return 0;\n if (value >= 1) return 1;\n return value;\n};\n\nconst RING_VISIBILITY_EPSILON = 1e-3;\nconst PLACEHOLDER_SCALE = 0.02;\nconst MIN_PLACEHOLDER_SIZE = 1e-4;\n\nconst ensureClosedRing = (ring) => {\n if (!Array.isArray(ring) || ring.length === 0) return [];\n const first = ring[0];\n const last = ring[ring.length - 1];\n if (!Array.isArray(first) || !Array.isArray(last)) return [];\n if (first.length < 2 || last.length < 2) return [];\n if (first[0] === last[0] && first[1] === last[1]) {\n return ring.slice();\n }\n return [...ring, first];\n};\n\nconst extractOuterRings = (geometry) => {\n if (!geometry) return [];\n if (geometry.type === \"Polygon\") {\n const ring = geometry.coordinates?.[0];\n return ring ? [ensureClosedRing(ring)] : [];\n }\n if (geometry.type === \"MultiPolygon\") {\n const polygons = Array.isArray(geometry.coordinates) ? geometry.coordinates : [];\n return polygons\n .map((polygon) => (Array.isArray(polygon) && polygon[0] ? ensureClosedRing(polygon[0]) : null))\n .filter((ring) => Array.isArray(ring) && ring.length >= 3);\n }\n return [];\n};\n\nconst computeRingCentroid = (ring) => {\n if (!Array.isArray(ring) || ring.length === 0) return [0, 0];\n let sumX = 0;\n let sumY = 0;\n let count = 0;\n for (const coordinate of ring) {\n if (!Array.isArray(coordinate) || coordinate.length < 2) continue;\n const [x, y] = coordinate;\n if (!Number.isFinite(x) || !Number.isFinite(y)) continue;\n sumX += x;\n sumY += y;\n count += 1;\n }\n if (count === 0) return [0, 0];\n return [sumX / count, sumY / count];\n};\n\nconst computeRingBounds = (ring) => {\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (const coordinate of ring ?? []) {\n if (!Array.isArray(coordinate) || coordinate.length < 2) continue;\n const [x, y] = coordinate;\n if (!Number.isFinite(x) || !Number.isFinite(y)) continue;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {\n return { width: 0, height: 0 };\n }\n\n return {\n width: Math.max(maxX - minX, 0),\n height: Math.max(maxY - minY, 0),\n };\n};\n\nconst createPlaceholderRing = (referenceRing) => {\n if (!Array.isArray(referenceRing) || referenceRing.length === 0) return null;\n const centroid = computeRingCentroid(referenceRing);\n const [cx, cy] = centroid;\n if (!Number.isFinite(cx) || !Number.isFinite(cy)) return null;\n\n const { width, height } = computeRingBounds(referenceRing);\n const span = Math.max(width, height);\n const offset = Math.max(span * PLACEHOLDER_SCALE, MIN_PLACEHOLDER_SIZE);\n\n const ring = [\n [cx - offset, cy - offset],\n [cx + offset, cy - offset],\n [cx + offset, cy + offset],\n [cx - offset, cy + offset],\n ];\n\n return ensureClosedRing(ring);\n};\n\nconst distanceSquared = (a, b) => {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length < 2 || b.length < 2) return Number.POSITIVE_INFINITY;\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n};\n\nconst matchRingPairs = (fromRings, toRings) => {\n const pairs = [];\n const toPool = toRings.map((ring) => ({\n ring,\n centroid: computeRingCentroid(ring),\n }));\n\n for (const ring of fromRings) {\n const centroid = computeRingCentroid(ring);\n let bestIndex = -1;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (let index = 0; index < toPool.length; index += 1) {\n const candidate = toPool[index];\n const candidateDistance = distanceSquared(centroid, candidate.centroid);\n if (candidateDistance < bestDistance) {\n bestDistance = candidateDistance;\n bestIndex = index;\n }\n }\n\n if (bestIndex >= 0) {\n const [match] = toPool.splice(bestIndex, 1);\n pairs.push({ fromRing: ring, toRing: match.ring });\n } else {\n pairs.push({ fromRing: ring, toRing: null });\n }\n }\n\n for (const remaining of toPool) {\n pairs.push({ fromRing: null, toRing: remaining.ring });\n }\n\n return pairs;\n};\n\nconst createRingInterpolator = ({ fromRing, toRing }) => {\n if (fromRing && toRing) {\n const interpolator = flubber.interpolate(fromRing, toRing, { string: false });\n return {\n interpolate: (factor) => interpolator(factor),\n isVisible: () => true,\n };\n }\n\n if (fromRing && !toRing) {\n const placeholder = createPlaceholderRing(fromRing);\n if (!placeholder) {\n const constantRing = ensureClosedRing(fromRing);\n return {\n interpolate: () => constantRing,\n isVisible: (factor) => factor < 1 - RING_VISIBILITY_EPSILON,\n };\n }\n\n const interpolator = flubber.interpolate(fromRing, placeholder, { string: false });\n return {\n interpolate: (factor) => interpolator(factor),\n isVisible: (factor) => factor < 1 - RING_VISIBILITY_EPSILON,\n };\n }\n\n if (!fromRing && toRing) {\n const placeholder = createPlaceholderRing(toRing);\n if (!placeholder) {\n const constantRing = ensureClosedRing(toRing);\n return {\n interpolate: () => constantRing,\n isVisible: (factor) => factor > RING_VISIBILITY_EPSILON,\n };\n }\n\n const interpolator = flubber.interpolate(placeholder, toRing, { string: false });\n return {\n interpolate: (factor) => interpolator(factor),\n isVisible: (factor) => factor > RING_VISIBILITY_EPSILON,\n };\n }\n\n return null;\n};\n\nconst createGeometryInterpolator = ({ fromGeometry, toGeometry }) => {\n const fromRings = extractOuterRings(fromGeometry);\n const toRings = extractOuterRings(toGeometry);\n\n if (!fromRings.length && !toRings.length) {\n return null;\n }\n\n const pairs = matchRingPairs(fromRings, toRings);\n const ringInterpolators = pairs\n .map((pair) => createRingInterpolator(pair))\n .filter((entry) => entry && typeof entry.interpolate === \"function\");\n\n if (!ringInterpolators.length) {\n return null;\n }\n\n const geometryType =\n ringInterpolators.length === 1 && fromGeometry?.type !== \"MultiPolygon\" && toGeometry?.type !== \"MultiPolygon\"\n ? \"Polygon\"\n : \"MultiPolygon\";\n\n return {\n type: geometryType,\n interpolate: (rawFactor) => {\n const factor = clampFactor(rawFactor);\n const rings = [];\n\n for (const entry of ringInterpolators) {\n if (typeof entry.isVisible === \"function\" && !entry.isVisible(factor)) {\n continue;\n }\n\n try {\n rings.push(ensureClosedRing(entry.interpolate(factor)));\n } catch (error) {\n rings.push([]);\n }\n }\n\n const filteredRings = rings.filter((ring) => Array.isArray(ring) && ring.length >= 4);\n const effectiveRings = filteredRings.length ? filteredRings : rings;\n\n if (geometryType === \"Polygon\") {\n const ring = effectiveRings.find((candidate) => Array.isArray(candidate) && candidate.length >= 4) ?? [];\n return [ring];\n }\n\n const multiRings = effectiveRings.filter((ring) => Array.isArray(ring) && ring.length >= 4);\n const ringsToUse = multiRings.length ? multiRings : effectiveRings;\n return ringsToUse.map((ring) => [ring]);\n },\n };\n};\n\nfunction withCentroid(feature) {\n const centroid = turf.centroid(feature);\n return {\n ...feature,\n centroid: turf.getCoord(centroid),\n };\n}\n\nexport class GeoMorpher {\n constructor({\n regularGeoJSON,\n cartogramGeoJSON,\n data = null,\n getData = null,\n joinColumn = \"lsoa\",\n geoJSONJoinColumn = \"code\",\n aggregations = {},\n normalize = true,\n projection = null,\n cartogramGridOptions = {},\n }) {\n this.regularGeoJSON = regularGeoJSON;\n this.cartogramGeoJSON = cartogramGeoJSON;\n this.data = data;\n this.getData = getData;\n this.joinColumn = joinColumn;\n this.geoJSONJoinColumn = geoJSONJoinColumn;\n this.aggregations = aggregations;\n this.normalize = normalize;\n this.projection = projection;\n this.cartogramGridOptions = cartogramGridOptions ?? {};\n\n this._normalizedCartogramGeoJSON = null;\n\n this.state = {\n prepared: false,\n regularEnriched: null,\n cartogramEnriched: null,\n regularWGS84: null,\n cartogramWGS84: null,\n geographyLookup: {},\n cartogramLookup: {},\n keyData: {},\n interpolators: {},\n };\n }\n\n ensureCartogramGeoJSON() {\n if (this._normalizedCartogramGeoJSON) {\n return this._normalizedCartogramGeoJSON;\n }\n\n this._normalizedCartogramGeoJSON = normalizeCartogramInput({\n input: this.cartogramGeoJSON,\n regularGeoJSON: this.regularGeoJSON,\n joinProperty: this.geoJSONJoinColumn,\n gridOptions: this.cartogramGridOptions,\n });\n\n return this._normalizedCartogramGeoJSON;\n }\n\n async prepare() {\n const modelData = await this.loadData();\n\n const regularEnriched = enrichGeoData({\n data: modelData,\n geojson: cloneDeep(this.regularGeoJSON),\n joinColumn: this.joinColumn,\n geoJSONJoinColumn: this.geoJSONJoinColumn,\n aggregations: this.aggregations,\n normalize: this.normalize,\n });\n\n const baseCartogramGeoJSON = this.ensureCartogramGeoJSON();\n\n const cartogramEnriched = enrichGeoData({\n data: modelData,\n geojson: cloneDeep(baseCartogramGeoJSON),\n joinColumn: this.joinColumn,\n geoJSONJoinColumn: this.geoJSONJoinColumn,\n aggregations: this.aggregations,\n normalize: this.normalize,\n });\n\n const regularWGS84 = toWGS84FeatureCollection(regularEnriched, this.projection);\n const cartogramWGS84 = toWGS84FeatureCollection(cartogramEnriched, this.projection);\n\n const geographyLookup = createLookup(regularWGS84.features, (feature) =>\n feature?.properties?.[this.geoJSONJoinColumn]\n );\n const cartogramLookup = createLookup(cartogramWGS84.features, (feature) =>\n feature?.properties?.[this.geoJSONJoinColumn]\n );\n\n const keyData = keyBy(\n regularEnriched.features.map((feature) => ({\n code: feature.properties?.[this.geoJSONJoinColumn],\n population: Number(feature.properties?.population ?? 0),\n data: feature,\n })),\n \"code\"\n );\n\n const interpolators = {};\n for (const [code, feature] of Object.entries(geographyLookup)) {\n const cartogramFeature = cartogramLookup[code];\n const geometryInterpolator = createGeometryInterpolator({\n fromGeometry: feature?.geometry,\n toGeometry: cartogramFeature?.geometry,\n });\n\n if (!geometryInterpolator) continue;\n\n interpolators[code] = geometryInterpolator;\n }\n\n this.state = {\n prepared: true,\n regularEnriched,\n cartogramEnriched,\n regularWGS84: {\n ...regularWGS84,\n features: regularWGS84.features.map(withCentroid),\n },\n cartogramWGS84: {\n ...cartogramWGS84,\n features: cartogramWGS84.features.map(withCentroid),\n },\n geographyLookup: mapValues(geographyLookup, withCentroid),\n cartogramLookup: mapValues(cartogramLookup, withCentroid),\n keyData,\n interpolators,\n };\n\n return this;\n }\n\n async loadData() {\n if (Array.isArray(this.data)) return this.data;\n if (typeof this.getData === \"function\") {\n const result = await this.getData();\n this.data = result;\n return result;\n }\n return [];\n }\n\n isPrepared() {\n return Boolean(this.state.prepared);\n }\n\n assertPrepared() {\n if (!this.isPrepared()) {\n throw new Error(\"GeoMorpher.prepare() must be called before accessing data\");\n }\n }\n\n getKeyData() {\n this.assertPrepared();\n return this.state.keyData;\n }\n\n getRegularFeatureCollection() {\n this.assertPrepared();\n return cloneDeep(this.state.regularWGS84);\n }\n\n getCartogramFeatureCollection() {\n this.assertPrepared();\n return cloneDeep(this.state.cartogramWGS84);\n }\n\n getGeographyLookup() {\n this.assertPrepared();\n return cloneDeep(this.state.geographyLookup);\n }\n\n getCartogramLookup() {\n this.assertPrepared();\n return cloneDeep(this.state.cartogramLookup);\n }\n\n getInterpolatedFeatureCollection(factor = 0.5) {\n this.assertPrepared();\n const features = [];\n\n for (const [code, entry] of Object.entries(this.state.interpolators)) {\n if (!entry || typeof entry.interpolate !== \"function\") continue;\n const baseFeature = this.state.geographyLookup[code];\n if (!baseFeature) continue;\n\n const coordinates = entry.interpolate(factor);\n\n if (!coordinates || !Array.isArray(coordinates) || !coordinates.length) continue;\n\n const geometry = entry.type === \"MultiPolygon\"\n ? { type: \"MultiPolygon\", coordinates }\n : { type: \"Polygon\", coordinates };\n\n features.push({\n type: \"Feature\",\n properties: {\n ...baseFeature.properties,\n code,\n morph_factor: factor,\n },\n geometry,\n });\n }\n\n return turf.featureCollection(features.map(withCentroid));\n }\n\n getInterpolatedLookup(factor = 0.5) {\n const collection = this.getInterpolatedFeatureCollection(factor);\n return createLookup(collection.features, (feature) =>\n feature?.properties?.[this.geoJSONJoinColumn]\n );\n }\n}\n","/**\n * Leaflet morph layers with basemap effects\n * @module adapters/leaflet/morphLayers\n */\n\n/**\n * Create Leaflet layers for morphing between regular and cartogram geometries,\n * with optional basemap blur/opacity effects.\n *\n * @param {Object} params\n * @param {Object} params.morpher - Prepared GeoMorpher instance\n * @param {Object} params.L - Leaflet namespace\n * @param {number} [params.morphFactor=0] - Initial morph factor (0=regular, 1=cartogram)\n * @param {Function} [params.regularStyle] - Style function for regular layer\n * @param {Function} [params.cartogramStyle] - Style function for cartogram layer\n * @param {Function} [params.tweenStyle] - Style function for tween/interpolated layer\n * @param {Function} [params.onEachFeature] - Callback for each feature\n * @param {Object} [params.basemapLayer] - Leaflet layer to apply effects to\n * @param {Object} [params.basemapEffect] - Effect configuration\n * @returns {Promise<Object>} - Layer group and update function\n */\nexport async function createLeafletMorphLayers({\n morpher,\n L,\n morphFactor = 0,\n regularStyle,\n cartogramStyle,\n tweenStyle,\n onEachFeature,\n basemapLayer,\n basemapEffect,\n}) {\n if (!morpher || !L) {\n throw new Error(\"Both morpher and Leaflet namespace (L) are required\");\n }\n\n const layerOptions = (styleFn) => ({\n style: styleFn,\n onEachFeature,\n });\n\n if (!morpher.isPrepared()) {\n await morpher.prepare();\n }\n\n const regularLayer = L.geoJSON(\n morpher.getRegularFeatureCollection(),\n layerOptions(regularStyle)\n );\n\n const cartogramLayer = L.geoJSON(\n morpher.getCartogramFeatureCollection(),\n layerOptions(cartogramStyle)\n );\n\n const tweenLayer = L.geoJSON(\n morpher.getInterpolatedFeatureCollection(morphFactor),\n layerOptions(tweenStyle)\n );\n\n const group = L.layerGroup([regularLayer, tweenLayer, cartogramLayer]);\n\n const normalizeRange = (range, fallback) => {\n if (range == null) return fallback;\n if (Array.isArray(range) && range.length === 2) {\n return range;\n }\n if (typeof range === \"object\") {\n const { from, to } = range;\n if (typeof from === \"number\" && typeof to === \"number\") {\n return [from, to];\n }\n }\n if (typeof range === \"number\") {\n const [start = 0] = fallback ?? [];\n return [start, range];\n }\n return fallback;\n };\n\n const lerp = (start, end, amount) => start + (end - start) * amount;\n\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n const resolveTarget = (target) => {\n if (!target) return null;\n if (typeof target === \"function\") {\n try {\n const next = target();\n return resolveTarget(next);\n } catch (error) {\n console.error(\"geo-morpher:createLeafletMorphLayers\", error);\n return null;\n }\n }\n if (target.getContainer && typeof target.getContainer === \"function\") {\n return target.getContainer();\n }\n if (target._container) {\n return target._container;\n }\n if (typeof HTMLElement !== \"undefined\" && target instanceof HTMLElement) {\n return target;\n }\n if (target.getPane && basemapEffect?.pane) {\n return target.getPane(basemapEffect.pane);\n }\n return null;\n };\n\n const effectOptions = (() => {\n if (!basemapLayer && !basemapEffect) {\n return null;\n }\n\n const options =\n basemapEffect && typeof basemapEffect === \"object\" ? basemapEffect : {};\n\n const target = options.target ?? options.layer ?? basemapLayer;\n const blurRange = normalizeRange(options.blurRange, [0, 8]);\n const opacityRange = normalizeRange(options.opacityRange, [1, 0.2]);\n const grayscaleRange = normalizeRange(options.grayscaleRange, null);\n const brightnessRange = normalizeRange(options.brightnessRange, null);\n const isEnabled =\n typeof options.isEnabled === \"function\"\n ? options.isEnabled\n : () => true;\n\n let originalStyles;\n let captured = false;\n\n const getElement = () => resolveTarget(target);\n\n return {\n getElement,\n getOriginalStyles(element) {\n if (!captured && element) {\n originalStyles = {\n filter: element.style.filter,\n opacity: element.style.opacity,\n };\n captured = true;\n }\n return originalStyles;\n },\n blurRange,\n opacityRange,\n grayscaleRange,\n brightnessRange,\n isEnabled,\n };\n })();\n\n const applyBasemapEffect = (factor) => {\n if (!effectOptions) return;\n const element = effectOptions.getElement();\n if (!element || !element.style) return;\n\n const original = effectOptions.getOriginalStyles(element) ?? {\n filter: \"\",\n opacity: \"\",\n };\n\n if (!effectOptions.isEnabled?.()) {\n element.style.filter = original.filter ?? \"\";\n element.style.opacity = original.opacity ?? \"\";\n return;\n }\n\n const filters = [];\n\n if (effectOptions.blurRange) {\n const [start, end] = effectOptions.blurRange;\n const blurAmount = lerp(start, end, factor);\n if (Math.abs(blurAmount) > 0.01) {\n filters.push(`blur(${blurAmount.toFixed(2)}px)`);\n }\n }\n\n if (effectOptions.grayscaleRange) {\n const [start, end] = effectOptions.grayscaleRange;\n const grayscale = clamp(lerp(start, end, factor), 0, 1);\n if (Math.abs(grayscale - 1) > 0.01 || Math.abs(grayscale) > 0.01) {\n filters.push(`grayscale(${grayscale.toFixed(2)})`);\n }\n }\n\n if (effectOptions.brightnessRange) {\n const [start, end] = effectOptions.brightnessRange;\n const brightness = clamp(lerp(start, end, factor), 0, 10);\n if (Math.abs(brightness - 1) > 0.01) {\n filters.push(`brightness(${brightness.toFixed(2)})`);\n }\n }\n\n if (filters.length > 0) {\n element.style.filter = filters.join(\" \");\n } else {\n element.style.filter = original.filter ?? \"\";\n }\n\n if (effectOptions.opacityRange) {\n const [start, end] = effectOptions.opacityRange;\n const nextOpacity = clamp(lerp(start, end, factor), 0, 1);\n const shouldClear = Math.abs(nextOpacity - 1) < 0.01 && original.opacity === \"\";\n if (shouldClear) {\n element.style.opacity = \"\";\n } else {\n element.style.opacity = nextOpacity.toFixed(3);\n }\n }\n };\n\n const updateMorphFactor = (nextFactor) => {\n const collection = morpher.getInterpolatedFeatureCollection(nextFactor);\n tweenLayer.clearLayers();\n tweenLayer.addData(collection);\n applyBasemapEffect(nextFactor);\n return collection;\n };\n\n applyBasemapEffect(morphFactor);\n\n return {\n group,\n regularLayer,\n cartogramLayer,\n tweenLayer,\n updateMorphFactor,\n };\n}\n","/**\n * Coordinate utilities for Leaflet adapter\n * @module adapters/leaflet/utils/coordinates\n */\n\n/**\n * Check if a value is an HTMLElement\n */\nexport const isHTMLElement = (value) =>\n typeof HTMLElement !== \"undefined\" && value instanceof HTMLElement;\n\n/**\n * Extract a Leaflet-compatible [lat, lng] coordinate pair from a feature.\n * First tries the feature's centroid property, then falls back to computing\n * the centroid from the geometry.\n *\n * @param {Object} feature - GeoJSON feature with geometry and optional centroid\n * @returns {[number, number]|null} - [lat, lng] or null if extraction fails\n */\nexport function toLatLng(feature) {\n if (!feature) return null;\n const centroid = Array.isArray(feature.centroid) ? feature.centroid : null;\n if (centroid && centroid.length >= 2) {\n const [lng, lat] = centroid;\n if (Number.isFinite(lat) && Number.isFinite(lng)) {\n return [lat, lng];\n }\n }\n\n const geometry = feature.geometry;\n if (!geometry) return null;\n\n const extractRing = (geom) => {\n if (!geom) return [];\n if (geom.type === \"Polygon\") {\n return geom.coordinates?.[0] ?? [];\n }\n if (geom.type === \"MultiPolygon\") {\n return geom.coordinates?.[0]?.[0] ?? [];\n }\n return [];\n };\n\n const ring = extractRing(geometry);\n if (!Array.isArray(ring) || ring.length === 0) return null;\n\n const [sumLng, sumLat] = ring.reduce(\n (acc, coord) => {\n if (!Array.isArray(coord) || coord.length < 2) return acc;\n const [lng, lat] = coord;\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) return acc;\n return [acc[0] + lng, acc[1] + lat];\n },\n [0, 0]\n );\n\n const count = ring.filter((coord) =>\n Array.isArray(coord) && coord.length >= 2 && coord.every(Number.isFinite)\n ).length;\n\n if (count === 0) return null;\n\n return [sumLat / count, sumLng / count];\n}\n","/**\n * Glyph normalization utilities for Leaflet adapter\n * @module adapters/leaflet/utils/glyphNormalizer\n */\n\nimport { isHTMLElement } from \"./coordinates.js\";\n\n/**\n * Default CSS class for glyph markers\n */\nexport const DEFAULT_GLYPH_CLASS = \"geomorpher-glyph\";\n\n/**\n * Default icon size [width, height] in pixels\n */\nexport const DEFAULT_ICON_SIZE = [48, 48];\n\n/**\n * Default icon anchor [x, y] in pixels\n */\nexport const DEFAULT_ICON_ANCHOR = [24, 24];\n\n/**\n * Normalize various glyph result formats into a consistent object\n * with a Leaflet icon and options.\n *\n * @param {Object} params\n * @param {*} params.result - Raw result from drawGlyph callback\n * @param {Object} params.L - Leaflet namespace\n * @param {string} [params.pane] - Default pane name\n * @returns {Object|null} - Normalized glyph config or null\n */\nexport function normalizeGlyphResult({\n result,\n L,\n pane,\n}) {\n if (result == null) {\n return null;\n }\n\n if (isHTMLElement(result) || typeof result === \"string\") {\n const html = isHTMLElement(result) ? result.outerHTML : result;\n return {\n icon: L.divIcon({\n html,\n className: DEFAULT_GLYPH_CLASS,\n iconSize: DEFAULT_ICON_SIZE,\n iconAnchor: DEFAULT_ICON_ANCHOR,\n pane,\n }),\n pane,\n };\n }\n\n if (typeof result === \"object\") {\n if (result.icon) {\n return {\n icon: result.icon,\n pane: result.pane ?? pane,\n markerOptions: result.markerOptions ?? {},\n };\n }\n\n const {\n html = \"\",\n className = DEFAULT_GLYPH_CLASS,\n iconSize,\n iconAnchor,\n pane: resultPane,\n markerOptions = {},\n divIconOptions = {},\n } = result;\n\n const htmlContent = isHTMLElement(html) ? html.outerHTML : html;\n\n const icon = L.divIcon({\n html: htmlContent,\n className,\n iconSize: iconSize ?? DEFAULT_ICON_SIZE,\n iconAnchor: iconAnchor ?? DEFAULT_ICON_ANCHOR,\n pane: resultPane ?? pane,\n ...divIconOptions,\n });\n\n return {\n icon,\n pane: resultPane ?? pane,\n markerOptions,\n };\n }\n\n return null;\n}\n","/**\n * Collection resolution utilities for Leaflet adapter\n * @module adapters/leaflet/utils/collections\n */\n\n/**\n * Default geometry type to use for glyph positioning\n */\nexport const DEFAULT_GEOMETRY = \"interpolated\";\n\n/**\n * Lookup table of collection retrieval functions by geometry type\n */\nexport const collectionRetrievers = {\n regular: (morpher) => morpher.getRegularFeatureCollection(),\n cartogram: (morpher) => morpher.getCartogramFeatureCollection(),\n interpolated: (morpher, factor) => morpher.getInterpolatedFeatureCollection(factor),\n};\n\n/**\n * Resolve a feature collection from various geometry specifications\n *\n * @param {Object} params\n * @param {Object} params.morpher - GeoMorpher instance\n * @param {string|Function} params.geometry - Geometry type or custom function\n * @param {number} params.morphFactor - Morph factor for interpolated geometry\n * @returns {Object} - GeoJSON FeatureCollection\n * @throws {Error} - If geometry type is unsupported\n */\nexport function resolveCollection({ morpher, geometry, morphFactor }) {\n const getter = collectionRetrievers[geometry];\n if (getter) {\n return getter(morpher, morphFactor);\n }\n if (typeof geometry === \"function\") {\n return geometry({ morpher, morphFactor });\n }\n throw new Error(\n `Unsupported geometry \"${geometry}\". Use \"regular\", \"cartogram\", \"interpolated\", or provide a function.`\n );\n}\n","/**\n * Leaflet glyph layer for rendering custom markers on morphed geometries\n * @module adapters/leaflet/glyphLayer\n */\n\nimport { toLatLng } from \"./utils/coordinates.js\";\nimport { normalizeGlyphResult } from \"./utils/glyphNormalizer.js\";\nimport { DEFAULT_GEOMETRY, resolveCollection } from \"./utils/collections.js\";\n\n/**\n * Calculate the pixel dimensions of a feature's bounds at the current map zoom\n *\n * @param {Object} feature - GeoJSON feature\n * @param {Object} map - Leaflet map instance\n * @param {Object} L - Leaflet namespace\n * @returns {Object|null} - Bounds with width, height, center in pixels\n */\nfunction getFeatureBoundsInPixels(feature, map, L) {\n if (!feature || !map || !L) return null;\n\n try {\n const geoJsonLayer = L.geoJSON(feature);\n const bounds = geoJsonLayer.getBounds();\n\n if (!bounds.isValid()) return null;\n\n const ne = map.latLngToContainerPoint(bounds.getNorthEast());\n const sw = map.latLngToContainerPoint(bounds.getSouthWest());\n\n return {\n width: Math.abs(ne.x - sw.x),\n height: Math.abs(ne.y - sw.y),\n center: map.latLngToContainerPoint(bounds.getCenter()),\n bounds: bounds,\n };\n } catch (error) {\n console.warn(\"Failed to calculate feature bounds:\", error);\n return null;\n }\n}\n\n/**\n * Create a Leaflet layer for rendering custom glyphs (markers) that follow\n * the morphing geometry.\n *\n * @param {Object} params\n * @param {Object} params.morpher - Prepared GeoMorpher instance\n * @param {Object} params.L - Leaflet namespace\n * @param {Object} [params.map] - Leaflet map instance to add layer to\n * @param {string|Function} [params.geometry=\"interpolated\"] - Geometry type or custom function\n * @param {number} [params.morphFactor=0] - Initial morph factor\n * @param {Function} params.drawGlyph - Function to render each glyph\n * @param {Function} [params.getFeatureId] - Function to extract feature ID\n * @param {Function} [params.getGlyphData] - Function to resolve glyph data\n * @param {Function} [params.filterFeature] - Function to filter features\n * @param {Object} [params.markerOptions={}] - Default Leaflet marker options\n * @param {string} [params.pane] - Leaflet pane name for markers\n * @param {boolean} [params.scaleWithZoom=false] - If true, glyphs resize based on feature bounds at each zoom level\n * @returns {Promise<Object>} - Glyph layer controller\n */\nexport async function createLeafletGlyphLayer({\n morpher,\n L,\n map,\n geometry = DEFAULT_GEOMETRY,\n morphFactor = 0,\n drawGlyph,\n getFeatureId = (feature) => feature?.properties?.code ?? feature?.properties?.id,\n getGlyphData,\n filterFeature,\n markerOptions = {},\n pane,\n scaleWithZoom = false,\n}) {\n if (!morpher || !L) {\n throw new Error(\"Both morpher and Leaflet namespace (L) are required\");\n }\n\n if (typeof drawGlyph !== \"function\") {\n throw new Error(\"drawGlyph must be a function that returns glyph rendering options\");\n }\n\n if (!morpher.isPrepared()) {\n await morpher.prepare();\n }\n\n let currentGeometry = geometry ?? DEFAULT_GEOMETRY;\n let currentMorphFactor = morphFactor ?? 0;\n\n const glyphLayer = L.layerGroup ? L.layerGroup([]) : null;\n if (!glyphLayer) {\n throw new Error(\"Leaflet namespace is missing layerGroup factory\");\n }\n\n if (map && typeof glyphLayer.addTo === \"function\") {\n glyphLayer.addTo(map);\n }\n\n const markers = new Map();\n const baseDataLookup = morpher.getKeyData();\n\n const resolveData = ({ feature, featureId, geometryType, morphValue }) => {\n if (typeof getGlyphData === \"function\") {\n return getGlyphData({ feature, featureId, morpher, geometry: geometryType, morphFactor: morphValue });\n }\n return baseDataLookup?.[featureId] ?? null;\n };\n\n const shouldRenderFeature =\n typeof filterFeature === \"function\"\n ? (context) => Boolean(filterFeature(context))\n : () => true;\n\n let zoomEndListener = null;\n\n if (map && scaleWithZoom) {\n zoomEndListener = () => {\n updateGlyphs({});\n };\n map.on(\"zoomend\", zoomEndListener);\n }\n\n const upsertMarker = ({ feature, glyph, featureId }) => {\n const latLng = toLatLng(feature);\n if (!latLng) return;\n\n const { icon, pane: glyphPane, markerOptions: glyphMarkerOptions = {} } = glyph;\n if (!icon) return;\n\n const combinedOptions = {\n interactive: false,\n ...markerOptions,\n ...glyphMarkerOptions,\n };\n\n if (glyphPane || pane) {\n combinedOptions.pane = glyphPane ?? pane;\n }\n\n let marker = markers.get(featureId);\n if (marker) {\n if (typeof marker.setLatLng === \"function\") {\n marker.setLatLng(latLng);\n }\n if (typeof marker.setIcon === \"function\") {\n marker.setIcon(icon);\n }\n return;\n }\n\n marker = L.marker(latLng, { ...combinedOptions, icon });\n\n if (typeof glyphLayer.addLayer === \"function\") {\n glyphLayer.addLayer(marker);\n } else if (typeof marker.addTo === \"function\") {\n marker.addTo(glyphLayer);\n }\n\n markers.set(featureId, marker);\n };\n\n const removeMarker = (featureId) => {\n const marker = markers.get(featureId);\n if (!marker) return;\n markers.delete(featureId);\n if (typeof glyphLayer.removeLayer === \"function\") {\n glyphLayer.removeLayer(marker);\n } else if (typeof marker.remove === \"function\") {\n marker.remove();\n }\n };\n\n const updateGlyphs = ({ geometry: nextGeometry, morphFactor: nextMorph } = {}) => {\n if (typeof nextGeometry !== \"undefined\") {\n currentGeometry = nextGeometry;\n }\n if (typeof nextMorph === \"number\") {\n currentMorphFactor = nextMorph;\n }\n\n const collection = resolveCollection({\n morpher,\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n });\n\n if (!collection?.features) {\n markers.forEach((_, id) => removeMarker(id));\n return { geometry: currentGeometry, morphFactor: currentMorphFactor, featureCount: 0 };\n }\n\n const nextIds = new Set();\n\n for (const feature of collection.features) {\n if (!feature) continue;\n const featureId = getFeatureId(feature);\n if (featureId == null) continue;\n\n const data = resolveData({\n feature,\n featureId,\n geometryType: currentGeometry,\n morphValue: currentMorphFactor,\n });\n\n const featureBounds = scaleWithZoom && map\n ? getFeatureBoundsInPixels(feature, map, L)\n : null;\n\n const context = {\n feature,\n featureId,\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n data,\n morpher,\n zoom: map ? map.getZoom() : null,\n featureBounds,\n };\n\n if (!shouldRenderFeature(context)) {\n removeMarker(featureId);\n continue;\n }\n\n const glyphResult = drawGlyph(context);\n\n const glyph = normalizeGlyphResult({ result: glyphResult, L, pane });\n\n if (!glyph) {\n removeMarker(featureId);\n continue;\n }\n\n upsertMarker({ feature, glyph, featureId });\n nextIds.add(featureId);\n }\n\n markers.forEach((_, id) => {\n if (!nextIds.has(id)) {\n removeMarker(id);\n }\n });\n\n return {\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n featureCount: nextIds.size,\n };\n };\n\n const clear = () => {\n markers.forEach((_, id) => removeMarker(id));\n if (typeof glyphLayer.clearLayers === \"function\") {\n glyphLayer.clearLayers();\n }\n };\n\n const getState = () => ({\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n markerCount: markers.size,\n scaleWithZoom,\n });\n\n const destroy = () => {\n clear();\n if (map && zoomEndListener) {\n map.off(\"zoomend\", zoomEndListener);\n }\n };\n\n updateGlyphs({});\n\n return {\n layer: glyphLayer,\n updateGlyphs,\n clear,\n getState,\n destroy,\n };\n}\n","/**\n * MapLibre morph layer integration.\n *\n * Creates three GeoJSON sources (regular, cartogram, interpolated) and\n * corresponding fill layers that can be morphed by updating the tween source.\n */\n\n\nconst DEFAULT_BASE_ID = \"geomorpher\";\n\nconst clamp = (value, min, max) => {\n if (!Number.isFinite(value)) return value;\n if (Number.isFinite(min) && value < min) return min;\n if (Number.isFinite(max) && value > max) return max;\n return value;\n};\n\nconst normalizeRangeSpec = (spec, original) => {\n if (spec == null) return null;\n if (Array.isArray(spec) && spec.length >= 2) {\n return [spec[0], spec[1]];\n }\n if (typeof spec === \"object\") {\n const { from, to } = spec;\n if (typeof from !== \"undefined\" || typeof to !== \"undefined\") {\n return [typeof from !== \"undefined\" ? from : original, typeof to !== \"undefined\" ? to : original];\n }\n }\n if (typeof spec === \"number\" && Number.isFinite(spec)) {\n return [original, spec];\n }\n return null;\n};\n\nconst interpolateRange = ({ range, factor, original }) => {\n if (!Array.isArray(range) || range.length < 2) return original;\n const [start, end] = range;\n const startValue = typeof start !== \"undefined\" ? start : original;\n const endValue = typeof end !== \"undefined\" ? end : original;\n\n if (!Number.isFinite(startValue) || !Number.isFinite(endValue)) {\n return factor >= 1 ? endValue : startValue;\n }\n\n return startValue + (endValue - startValue) * factor;\n};\n\nconst identity = (value) => value;\n\nconst ensureArray = (value) => {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return [value];\n};\n\nconst warnOnce = (() => {\n const seen = new Set();\n return ({ scope, message }) => {\n const key = `${scope}:${message}`;\n if (seen.has(key)) return;\n seen.add(key);\n console.warn(`geo-morpher:createMapLibreMorphLayers ${message}`);\n };\n})();\n\nconst createBasemapEffectApplier = ({ map, effect }) => {\n if (!effect) {\n return {\n apply: () => {},\n reset: () => {},\n };\n }\n\n const resolveLayers = () => {\n const { layers } = effect;\n if (typeof layers === \"function\") {\n try {\n return ensureArray(layers({ map }));\n } catch (error) {\n warnOnce({ scope: \"basemap\", message: `failed to resolve effect layers: ${error?.message ?? error}` });\n return [];\n }\n }\n return ensureArray(layers);\n };\n\n const baseProperties = effect.properties ?? {};\n const perLayerProperties = effect.layerProperties ?? {};\n const propertyClamp = effect.propertyClamp ?? {};\n const propertyTransforms = effect.propertyTransforms ?? {};\n const globalClamp = Array.isArray(effect.clamp) ? effect.clamp : null;\n const easing = typeof effect.easing === \"function\" ? effect.easing : identity;\n const isEnabled = effect.isEnabled;\n const resetOnDisable = effect.resetOnDisable !== false;\n\n const originals = new Map();\n\n const captureOriginal = ({ layerId, property }) => {\n const key = `${layerId}::${property}`;\n if (originals.has(key)) {\n return originals.get(key);\n }\n\n try {\n const value = map.getPaintProperty(layerId, property);\n originals.set(key, value);\n return value;\n } catch (error) {\n warnOnce({ scope: \"basemap\", message: `cannot read paint property \"${property}\" on layer \"${layerId}\": ${error?.message ?? error}` });\n originals.set(key, undefined);\n return undefined;\n }\n };\n\n const setPaintProperty = ({ layerId, property, value }) => {\n if (!map.getLayer(layerId)) {\n warnOnce({ scope: \"basemap\", message: `layer \"${layerId}\" not found when applying basemap effect` });\n return;\n }\n\n try {\n map.setPaintProperty(layerId, property, value);\n } catch (error) {\n warnOnce({ scope: \"basemap\", message: `failed to set paint property \"${property}\" on layer \"${layerId}\": ${error?.message ?? error}` });\n }\n };\n\n const computePropertyValue = ({ layerId, property, spec, easedFactor }) => {\n const original = captureOriginal({ layerId, property });\n\n if (typeof spec === \"function\") {\n try {\n const next = spec({\n layerId,\n property,\n factor: easedFactor,\n original,\n map,\n });\n return { value: next, original };\n } catch (error) {\n warnOnce({ scope: \"basemap\", message: `error computing paint property \"${property}\" for layer \"${layerId}\": ${error?.message ?? error}` });\n return { value: original, original };\n }\n }\n\n const range = normalizeRangeSpec(spec, original);\n if (!range) {\n return { value: original, original };\n }\n\n const value = interpolateRange({ range, factor: easedFactor, original });\n return { value, original };\n };\n\n const applyClampAndTransform = ({ layerId, property, value, factor, original }) => {\n const propertyRange = propertyClamp[property];\n const clampRange = propertyRange ?? globalClamp;\n let nextValue = value;\n\n if (Array.isArray(clampRange) && clampRange.length >= 2 && Number.isFinite(nextValue)) {\n nextValue = clamp(nextValue, clampRange[0], clampRange[1]);\n }\n\n const transform = propertyTransforms[property];\n if (typeof transform === \"function\") {\n try {\n return transform({ value: nextValue, factor, original, layerId, map });\n } catch (error) {\n warnOnce({ scope: \"basemap\", message: `transform failed for property \"${property}\" on layer \"${layerId}\": ${error?.message ?? error}` });\n return nextValue;\n }\n }\n\n return nextValue;\n };\n\n const apply = (factor) => {\n const layers = resolveLayers();\n if (!layers.length) return;\n\n const easingResult = easing(factor);\n const easedFactor = clamp(easingResult, 0, 1);\n\n const enabled = typeof isEnabled === \"function\" ? !!isEnabled({ factor, easedFactor, map }) : isEnabled !== false;\n\n for (const layerId of layers) {\n const mergedProperties = {\n ...baseProperties,\n ...(perLayerProperties?.[layerId] ?? {}),\n };\n\n for (const [property, spec] of Object.entries(mergedProperties)) {\n const { value, original } = computePropertyValue({\n layerId,\n property,\n spec,\n easedFactor,\n });\n\n if (!enabled) {\n if (resetOnDisable && typeof original !== \"undefined\") {\n setPaintProperty({ layerId, property, value: original });\n }\n continue;\n }\n\n const nextValue = applyClampAndTransform({\n layerId,\n property,\n value,\n factor: easedFactor,\n original,\n });\n\n if (typeof nextValue === \"undefined\") continue;\n\n setPaintProperty({ layerId, property, value: nextValue });\n }\n }\n };\n\n const reset = () => {\n originals.forEach((value, key) => {\n if (typeof value === \"undefined\") return;\n const [layerId, property] = key.split(\"::\");\n setPaintProperty({ layerId, property, value });\n });\n };\n\n return { apply, reset };\n};\n\nconst DEFAULT_STYLES = {\n regular: {\n type: \"fill\",\n paint: {\n \"fill-color\": \"#1f77b4\",\n \"fill-opacity\": 0.4,\n \"fill-outline-color\": \"#1f77b4\",\n },\n },\n cartogram: {\n type: \"fill\",\n paint: {\n \"fill-color\": \"#ff7f0e\",\n \"fill-opacity\": 0.35,\n \"fill-outline-color\": \"#ff7f0e\",\n },\n },\n interpolated: {\n type: \"fill\",\n paint: {\n \"fill-color\": \"#2ca02c\",\n \"fill-opacity\": 0.6,\n \"fill-outline-color\": \"#2ca02c\",\n },\n },\n};\n\nconst buildLayerSpec = ({ id, source, style = {}, defaults }) => {\n const layer = {\n id,\n type: style.type ?? defaults.type ?? \"fill\",\n source,\n paint: {\n ...(defaults.paint ?? {}),\n ...(style.paint ?? {}),\n },\n layout: {\n visibility: \"visible\",\n ...(style.layout ?? {}),\n },\n };\n\n if (style.metadata) layer.metadata = style.metadata;\n if (style.filter) layer.filter = style.filter;\n if (typeof style.minzoom === \"number\") layer.minzoom = style.minzoom;\n if (typeof style.maxzoom === \"number\") layer.maxzoom = style.maxzoom;\n\n return layer;\n};\n\nconst addOrUpdateSource = ({ map, id, data }) => {\n const existing = map.getSource(id);\n if (existing) {\n if (typeof existing.setData === \"function\") {\n existing.setData(data);\n }\n return existing;\n }\n\n map.addSource(id, {\n type: \"geojson\",\n data,\n });\n\n return map.getSource(id);\n};\n\nconst addLayers = ({ map, layers, beforeId }) => {\n for (const layer of layers) {\n if (!layer || !layer.id) continue;\n if (map.getLayer(layer.id)) continue;\n map.addLayer(layer, beforeId ?? layer.beforeId ?? undefined);\n }\n};\n\n/**\n * Create MapLibre layers that mirror geo-morpher collections.\n *\n * @param {Object} params\n * @param {Object} params.morpher - Prepared GeoMorpher instance\n * @param {maplibregl.Map} params.map - MapLibre map instance\n * @param {number} [params.morphFactor=0] - Initial morph factor\n * @param {string} [params.idBase=\"geomorpher\"] - Base identifier for sources/layers\n * @param {Object} [params.regularStyle] - MapLibre layer overrides for regular geography\n * @param {Object} [params.cartogramStyle] - MapLibre layer overrides for cartogram geography\n * @param {Object} [params.interpolatedStyle] - MapLibre layer overrides for tweened geography\n * @param {string} [params.beforeId] - Insert new layers before this layer id\n * @returns {Promise<Object>} - Controller with update/remove helpers\n */\nexport async function createMapLibreMorphLayers({\n morpher,\n map,\n morphFactor = 0,\n idBase = DEFAULT_BASE_ID,\n regularStyle = {},\n cartogramStyle = {},\n interpolatedStyle = {},\n beforeId,\n basemapEffect,\n} = {}) {\n if (!morpher || !map) {\n throw new Error(\"Both morpher and MapLibre map are required\");\n }\n\n if (!morpher.isPrepared()) {\n await morpher.prepare();\n }\n\n const sourceIds = {\n regular: `${idBase}-regular-source`,\n cartogram: `${idBase}-cartogram-source`,\n interpolated: `${idBase}-interpolated-source`,\n };\n\n const layerIds = {\n regular: `${idBase}-regular-layer`,\n cartogram: `${idBase}-cartogram-layer`,\n interpolated: `${idBase}-interpolated-layer`,\n };\n\n const regularCollection = morpher.getRegularFeatureCollection();\n const cartogramCollection = morpher.getCartogramFeatureCollection();\n const interpolatedCollection = morpher.getInterpolatedFeatureCollection(morphFactor);\n\n addOrUpdateSource({ map, id: sourceIds.regular, data: regularCollection });\n addOrUpdateSource({ map, id: sourceIds.cartogram, data: cartogramCollection });\n addOrUpdateSource({ map, id: sourceIds.interpolated, data: interpolatedCollection });\n\n const layers = [\n buildLayerSpec({\n id: layerIds.regular,\n source: sourceIds.regular,\n style: regularStyle,\n defaults: DEFAULT_STYLES.regular,\n }),\n buildLayerSpec({\n id: layerIds.cartogram,\n source: sourceIds.cartogram,\n style: cartogramStyle,\n defaults: DEFAULT_STYLES.cartogram,\n }),\n buildLayerSpec({\n id: layerIds.interpolated,\n source: sourceIds.interpolated,\n style: interpolatedStyle,\n defaults: DEFAULT_STYLES.interpolated,\n }),\n ];\n\n addLayers({ map, layers, beforeId });\n\n let currentMorphFactor = morphFactor;\n const basemapController = createBasemapEffectApplier({ map, effect: basemapEffect });\n basemapController.apply(currentMorphFactor);\n\n const updateMorphFactor = (nextFactor) => {\n if (!Number.isFinite(nextFactor)) {\n throw new Error(\"Morph factor must be a finite number\");\n }\n\n const collection = morpher.getInterpolatedFeatureCollection(nextFactor);\n const source = map.getSource(sourceIds.interpolated);\n if (!source || typeof source.setData !== \"function\") {\n throw new Error(`Interpolated source \\\"${sourceIds.interpolated}\\\" is missing or cannot be updated`);\n }\n\n source.setData(collection);\n currentMorphFactor = nextFactor;\n basemapController.apply(nextFactor);\n map.triggerRepaint?.();\n return collection;\n };\n\n const setVisibility = (layerId, visibility) => {\n const layer = map.getLayer(layerId);\n if (!layer) return;\n map.setLayoutProperty(layerId, \"visibility\", visibility);\n };\n\n const setLayerVisibility = ({ regular, cartogram, interpolated }) => {\n const toVisibility = (value) => {\n if (value === true) return \"visible\";\n if (value === false) return \"none\";\n if (value === \"visible\" || value === \"none\") return value;\n return undefined;\n };\n\n const regularVisibility = toVisibility(regular);\n const cartogramVisibility = toVisibility(cartogram);\n const interpolatedVisibility = toVisibility(interpolated);\n\n if (regularVisibility) setVisibility(layerIds.regular, regularVisibility);\n if (cartogramVisibility) setVisibility(layerIds.cartogram, cartogramVisibility);\n if (interpolatedVisibility) setVisibility(layerIds.interpolated, interpolatedVisibility);\n };\n\n const remove = () => {\n basemapController.reset();\n for (const layerId of [layerIds.interpolated, layerIds.cartogram, layerIds.regular]) {\n if (map.getLayer(layerId)) {\n map.removeLayer(layerId);\n }\n }\n\n for (const sourceId of Object.values(sourceIds)) {\n if (map.getSource(sourceId)) {\n map.removeSource(sourceId);\n }\n }\n };\n\n const getState = () => ({\n sourceIds,\n layerIds,\n morphFactor: currentMorphFactor,\n });\n\n return {\n sourceIds,\n layerIds,\n updateMorphFactor,\n setLayerVisibility,\n applyBasemapEffect: basemapController.apply,\n remove,\n getState,\n };\n}\n","/**\n * Coordinate utilities for MapLibre adapter\n * @module adapters/maplibre/utils/coordinates\n */\n\nconst fallbackNamespace = typeof globalThis !== \"undefined\" ? globalThis.maplibregl : undefined;\n\n/**\n * Check if a value is an HTMLElement\n */\nexport const isHTMLElement = (value) =>\n typeof HTMLElement !== \"undefined\" && value instanceof HTMLElement;\n\n/**\n * Extract a [lng, lat] pair from a feature. Prefers `feature.centroid`\n * when available, then falls back to a naive centroid calculation\n * based on the first polygon ring.\n *\n * @param {Object} feature - GeoJSON feature with geometry and optional centroid\n * @returns {[number, number]|null} - [lng, lat] pair or null if extraction fails\n */\nexport function toLngLat(feature) {\n if (!feature) return null;\n const centroid = Array.isArray(feature.centroid) ? feature.centroid : null;\n if (centroid && centroid.length >= 2) {\n const [lng, lat] = centroid;\n if (Number.isFinite(lat) && Number.isFinite(lng)) {\n return [lng, lat];\n }\n }\n\n const geometry = feature.geometry;\n if (!geometry) return null;\n\n const extractRing = (geom) => {\n if (!geom) return [];\n if (geom.type === \"Polygon\") {\n return geom.coordinates?.[0] ?? [];\n }\n if (geom.type === \"MultiPolygon\") {\n return geom.coordinates?.[0]?.[0] ?? [];\n }\n return [];\n };\n\n const ring = extractRing(geometry);\n if (!Array.isArray(ring) || ring.length === 0) return null;\n\n const [sumLng, sumLat, count] = ring.reduce(\n (acc, coord) => {\n if (!Array.isArray(coord) || coord.length < 2) return acc;\n const [lng, lat] = coord;\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) return acc;\n return [acc[0] + lng, acc[1] + lat, acc[2] + 1];\n },\n [0, 0, 0]\n );\n\n if (count === 0) return null;\n\n return [sumLng / count, sumLat / count];\n}\n\nconst flattenPositions = (geometry) => {\n if (!geometry) return [];\n const { type, coordinates } = geometry;\n if (!coordinates) return [];\n\n switch (type) {\n case \"Point\":\n return [coordinates];\n case \"MultiPoint\":\n case \"LineString\":\n return coordinates;\n case \"MultiLineString\":\n return coordinates.flat();\n case \"Polygon\":\n return coordinates.flat();\n case \"MultiPolygon\":\n return coordinates.flat(2);\n default:\n return [];\n }\n};\n\n/**\n * Calculate the pixel bounds of a feature at the current map zoom.\n *\n * @param {Object} feature - GeoJSON feature\n * @param {maplibregl.Map} map - MapLibre map instance\n * @param {Object} [maplibreNamespace=maplibregl] - Optional injected MapLibre namespace\n * @returns {Object|null} - Bounds with width, height, center (screen coords) and lngLatBounds\n */\nexport function getFeatureBoundsInPixels(feature, map, maplibreNamespace = fallbackNamespace) {\n if (!feature || !map) return null;\n if (!maplibreNamespace?.LngLatBounds) return null;\n\n const positions = flattenPositions(feature.geometry);\n if (!positions.length) return null;\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const bounds = new maplibreNamespace.LngLatBounds();\n\n for (const coord of positions) {\n if (!Array.isArray(coord) || coord.length < 2) continue;\n const [lng, lat] = coord;\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) continue;\n\n bounds.extend([lng, lat]);\n\n const point = map.project([lng, lat]);\n if (!point) continue;\n\n minX = Math.min(minX, point.x);\n minY = Math.min(minY, point.y);\n maxX = Math.max(maxX, point.x);\n maxY = Math.max(maxY, point.y);\n }\n\n if (!isFinite(minX) || !isFinite(minY) || !isFinite(maxX) || !isFinite(maxY)) {\n return null;\n }\n\n return {\n width: Math.abs(maxX - minX),\n height: Math.abs(maxY - minY),\n center: { x: (minX + maxX) / 2, y: (minY + maxY) / 2 },\n bounds,\n };\n}\n","/**\n * Glyph normalization utilities for MapLibre adapter\n * @module adapters/maplibre/utils/glyphNormalizer\n */\n\nimport { isHTMLElement } from \"./coordinates.js\";\n\nexport const DEFAULT_GLYPH_CLASS = \"geomorpher-glyph\";\nexport const DEFAULT_ICON_SIZE = [48, 48];\nexport const DEFAULT_ICON_ANCHOR = [24, 24];\n\nconst ensureElement = ({ html, element, className }) => {\n if (isHTMLElement(element)) {\n if (className) {\n element.classList.add(className);\n }\n if (element.style) {\n element.style.pointerEvents = element.style.pointerEvents || \"none\";\n element.style.position = element.style.position || \"absolute\";\n }\n return element;\n }\n\n if (typeof document === \"undefined\") {\n throw new Error(\"MapLibre glyph normalization requires a DOM environment\");\n }\n\n const wrapper = document.createElement(\"div\");\n wrapper.className = className ?? DEFAULT_GLYPH_CLASS;\n wrapper.style.position = \"absolute\";\n wrapper.style.pointerEvents = \"none\";\n if (typeof html === \"string\") {\n wrapper.innerHTML = html;\n }\n\n return wrapper;\n};\n\nconst applyIconSizing = (element, iconSize) => {\n if (!iconSize || iconSize.length < 2 || !element?.style) return;\n const [width, height] = iconSize;\n if (Number.isFinite(width)) {\n element.style.width = `${width}px`;\n }\n if (Number.isFinite(height)) {\n element.style.height = `${height}px`;\n }\n};\n\nconst computeOffset = ({ iconSize, iconAnchor }) => {\n if (Array.isArray(iconAnchor) && iconAnchor.length >= 2) {\n const [x, y] = iconAnchor;\n if (Number.isFinite(x) && Number.isFinite(y)) {\n return [-x, -y];\n }\n }\n\n if (Array.isArray(iconSize) && iconSize.length >= 2) {\n const [width, height] = iconSize;\n if (Number.isFinite(width) && Number.isFinite(height)) {\n return [-width / 2, -height / 2];\n }\n }\n\n return undefined;\n};\n\n/**\n * Normalize drawGlyph results into MapLibre marker configuration.\n *\n * @param {Object} params\n * @param {*} params.result - Raw result from drawGlyph callback\n * @returns {Object|null} - Normalized glyph configuration or null\n */\nexport function normalizeGlyphResult({ result }) {\n if (result == null) {\n return null;\n }\n\n if (isHTMLElement(result) || typeof result === \"string\") {\n const element = ensureElement({ html: result, element: result });\n applyIconSizing(element, DEFAULT_ICON_SIZE);\n const offset = computeOffset({ iconSize: DEFAULT_ICON_SIZE });\n return {\n element,\n markerOptions: {\n offset,\n },\n };\n }\n\n if (typeof result === \"object\") {\n if (result.element || isHTMLElement(result)) {\n const element = ensureElement({\n element: result.element ?? result,\n className: result.className,\n html: result.html,\n });\n applyIconSizing(element, result.iconSize ?? DEFAULT_ICON_SIZE);\n const offset = computeOffset({\n iconSize: result.iconSize,\n iconAnchor: result.iconAnchor,\n });\n\n return {\n element,\n markerOptions: {\n offset,\n ...(result.markerOptions ?? {}),\n },\n };\n }\n\n if (result.html || result.className) {\n const element = ensureElement({\n html: result.html,\n className: result.className ?? DEFAULT_GLYPH_CLASS,\n });\n applyIconSizing(element, result.iconSize ?? DEFAULT_ICON_SIZE);\n const offset = computeOffset({\n iconSize: result.iconSize,\n iconAnchor: result.iconAnchor,\n });\n\n return {\n element,\n markerOptions: {\n offset,\n ...(result.markerOptions ?? {}),\n },\n };\n }\n }\n\n return null;\n}\n","/**\n * MapLibre glyph layer integration using DOM markers.\n *\n * Provides parity with the Leaflet glyph system while documenting the\n * alternative of using a CustomLayerInterface for high-volume glyph rendering.\n */\n\nimport { DEFAULT_GEOMETRY, resolveCollection } from \"../leaflet/utils/collections.js\";\nimport { toLngLat, getFeatureBoundsInPixels } from \"./utils/coordinates.js\";\nimport { normalizeGlyphResult } from \"./utils/glyphNormalizer.js\";\n\nconst defaultFeatureId = (feature) => feature?.properties?.code ?? feature?.properties?.id;\n\nconst fallbackNamespace = typeof globalThis !== \"undefined\" ? globalThis.maplibregl : undefined;\n\n/**\n * Create a glyph layer backed by MapLibre markers.\n *\n * @param {Object} params\n * @param {Object} params.morpher - Prepared GeoMorpher instance\n * @param {maplibregl.Map} params.map - MapLibre map instance\n * @param {Function} params.drawGlyph - Callback returning DOM-based glyph content\n * @param {number} [params.morphFactor=0] - Initial morph factor\n * @param {string|Function} [params.geometry=\"interpolated\"] - Geometry type or resolver\n * @param {Function} [params.getFeatureId] - Feature identifier resolver\n * @param {Function} [params.getGlyphData] - Custom data resolver for glyph rendering\n * @param {Function} [params.filterFeature] - Filter callback to skip glyph creation\n * @param {Object} [params.markerOptions={}] - Default Marker options\n * @param {boolean} [params.scaleWithZoom=false] - Re-render glyphs on zoom changes\n * @param {Object} [params.maplibreNamespace=maplibregl] - Optional MapLibre namespace override\n * @returns {Promise<Object>} Glyph layer controller\n */\nexport async function createMapLibreGlyphLayer({\n morpher,\n map,\n drawGlyph,\n morphFactor = 0,\n geometry = DEFAULT_GEOMETRY,\n getFeatureId = defaultFeatureId,\n getGlyphData,\n filterFeature,\n markerOptions = {},\n scaleWithZoom = false,\n maplibreNamespace = fallbackNamespace,\n} = {}) {\n if (!morpher || !map) {\n throw new Error(\"Both morpher and MapLibre map are required\");\n }\n\n if (!maplibreNamespace?.Marker) {\n throw new Error(\"MapLibre namespace is required. Pass the result of `import('maplibre-gl')` or ensure maplibregl is available on globalThis.\");\n }\n\n if (typeof drawGlyph !== \"function\") {\n throw new Error(\"drawGlyph must be a function that returns glyph rendering options\");\n }\n\n if (!morpher.isPrepared()) {\n await morpher.prepare();\n }\n\n let currentGeometry = geometry ?? DEFAULT_GEOMETRY;\n let currentMorphFactor = morphFactor ?? 0;\n\n const baseDataLookup = morpher.getKeyData();\n const markers = new Map();\n\n const resolveData = ({ featureId, feature }) => {\n if (typeof getGlyphData === \"function\") {\n return getGlyphData({\n feature,\n featureId,\n morpher,\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n });\n }\n return baseDataLookup?.[featureId] ?? null;\n };\n\n const shouldRenderFeature =\n typeof filterFeature === \"function\"\n ? (context) => Boolean(filterFeature(context))\n : () => true;\n\n const createMarker = ({ element, lngLat, options }) => {\n const marker = new maplibreNamespace.Marker({\n element,\n ...options,\n })\n .setLngLat(lngLat)\n .addTo(map);\n\n return marker;\n };\n\n const upsertMarker = ({ featureId, glyph, lngLat }) => {\n const combinedOptions = {\n draggable: false,\n ...markerOptions,\n ...(glyph.markerOptions ?? {}),\n };\n\n const { element: _ignored, ...markerOptionOverrides } = combinedOptions;\n\n const applyMarkerOptions = (markerInstance) => {\n if (Array.isArray(markerOptionOverrides.offset)) {\n markerInstance.setOffset(markerOptionOverrides.offset);\n }\n if (typeof markerOptionOverrides.rotation === \"number\") {\n markerInstance.setRotation(markerOptionOverrides.rotation);\n }\n if (typeof markerOptionOverrides.pitchAlignment === \"string\") {\n markerInstance.setPitchAlignment(markerOptionOverrides.pitchAlignment);\n }\n if (typeof markerOptionOverrides.rotationAlignment === \"string\") {\n markerInstance.setRotationAlignment(markerOptionOverrides.rotationAlignment);\n }\n };\n\n const entry = markers.get(featureId);\n\n if (!entry) {\n const marker = createMarker({\n element: glyph.element,\n lngLat,\n options: markerOptionOverrides,\n });\n applyMarkerOptions(marker);\n markers.set(featureId, { marker, element: glyph.element });\n return;\n }\n\n const { marker } = entry;\n\n if (glyph.element && glyph.element !== entry.element) {\n marker.remove();\n const replacement = createMarker({\n element: glyph.element,\n lngLat,\n options: markerOptionOverrides,\n });\n applyMarkerOptions(replacement);\n markers.set(featureId, { marker: replacement, element: glyph.element });\n return;\n }\n\n marker.setLngLat(lngLat);\n applyMarkerOptions(marker);\n };\n\n const removeMarker = (featureId) => {\n const entry = markers.get(featureId);\n if (!entry) return;\n markers.delete(featureId);\n entry.marker.remove();\n };\n\n const updateGlyphs = ({ geometry: nextGeometry, morphFactor: nextMorph } = {}) => {\n if (typeof nextGeometry !== \"undefined\") {\n currentGeometry = nextGeometry;\n }\n if (typeof nextMorph === \"number\") {\n currentMorphFactor = nextMorph;\n }\n\n const collection = resolveCollection({\n morpher,\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n });\n\n if (!collection?.features) {\n markers.forEach((_, id) => removeMarker(id));\n return { geometry: currentGeometry, morphFactor: currentMorphFactor, featureCount: 0 };\n }\n\n const nextIds = new Set();\n\n for (const feature of collection.features) {\n if (!feature) continue;\n const featureId = getFeatureId(feature);\n if (featureId == null) continue;\n\n const lngLat = toLngLat(feature);\n if (!lngLat) {\n removeMarker(featureId);\n continue;\n }\n\n const data = resolveData({ featureId, feature });\n const featureBounds = scaleWithZoom\n ? getFeatureBoundsInPixels(feature, map, maplibreNamespace)\n : null;\n\n const context = {\n feature,\n featureId,\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n data,\n morpher,\n map,\n zoom: map.getZoom(),\n featureBounds,\n };\n\n if (!shouldRenderFeature(context)) {\n removeMarker(featureId);\n continue;\n }\n\n const glyphResult = drawGlyph(context);\n const glyph = normalizeGlyphResult({ result: glyphResult });\n\n if (!glyph || !glyph.element) {\n removeMarker(featureId);\n continue;\n }\n\n upsertMarker({ featureId, glyph, lngLat });\n nextIds.add(featureId);\n }\n\n markers.forEach((_, id) => {\n if (!nextIds.has(id)) {\n removeMarker(id);\n }\n });\n\n return {\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n featureCount: nextIds.size,\n };\n };\n\n const clear = () => {\n markers.forEach((_, id) => removeMarker(id));\n };\n\n const getState = () => ({\n geometry: currentGeometry,\n morphFactor: currentMorphFactor,\n markerCount: markers.size,\n scaleWithZoom,\n });\n\n const destroy = () => {\n clear();\n if (scaleWithZoom && map) {\n map.off(\"zoomend\", handleZoomEnd);\n }\n };\n\n const handleZoomEnd = () => {\n updateGlyphs({});\n };\n\n if (scaleWithZoom && map) {\n map.on(\"zoomend\", handleZoomEnd);\n }\n\n updateGlyphs({});\n\n return {\n updateGlyphs,\n clear,\n getState,\n destroy,\n };\n}\n\n/**\n * For performance-critical glyph rendering, consider implementing a\n * MapLibre `CustomLayerInterface` that batches glyph drawing on the GPU.\n * See https://www.maplibre.org/maplibre-gl-js/docs/API/interfaces/CustomLayerInterface/\n * for details.\n */\n","/**\n * Common projection utilities for GeoMorpher\n * \n * Use these when your input data is not in OSGB British National Grid\n */\n\n/**\n * Identity projection for data already in WGS84 (lat/lng)\n * Use this when your GeoJSON is already in geographic coordinates\n */\nexport const WGS84Projection = {\n toGeo: ([x, y]) => [x, y],\n name: 'WGS84 (Identity)'\n};\n\n/**\n * Web Mercator projection (EPSG:3857)\n * Common for web maps and some tile services\n */\nexport const WebMercatorProjection = {\n toGeo: ([x, y]) => {\n const lng = (x * 180) / 20037508.34;\n const lat = (Math.atan(Math.exp((y * Math.PI) / 20037508.34)) * 360) / Math.PI - 90;\n return [lng, lat];\n },\n name: 'Web Mercator (EPSG:3857)'\n};\n\n/**\n * Create a custom projection from proj4 definition\n * Requires proj4 to be installed separately\n * \n * @example\n * import proj4 from 'proj4';\n * const projection = createProj4Projection(\n * '+proj=utm +zone=33 +datum=WGS84'\n * );\n */\nexport function createProj4Projection(projDefinition) {\n if (typeof require !== 'undefined') {\n try {\n const proj4 = require('proj4');\n const transform = proj4(projDefinition, 'WGS84');\n return {\n toGeo: ([x, y]) => {\n const [lng, lat] = transform.forward([x, y]);\n return [lng, lat];\n },\n name: `proj4: ${projDefinition}`\n };\n } catch (err) {\n throw new Error('proj4 is required for custom projections. Install it with: npm install proj4');\n }\n }\n throw new Error('createProj4Projection is only available in Node.js environments');\n}\n\n/**\n * Helper to detect if coordinates are likely already in WGS84\n * Returns true if coordinates appear to be lat/lng\n */\nexport function isLikelyWGS84(geojson) {\n if (!geojson?.features?.[0]?.geometry?.coordinates) {\n return null;\n }\n \n const coords = geojson.features[0].geometry.coordinates;\n \n // Flatten to get first coordinate pair\n let point = coords;\n while (Array.isArray(point[0])) {\n point = point[0];\n }\n \n const [x, y] = point;\n \n // WGS84 has lng in [-180, 180] and lat in [-90, 90]\n const inWGS84Range = x >= -180 && x <= 180 && y >= -90 && y <= 90;\n \n // OSGB has much larger numbers (eastings ~0-700000, northings ~0-1300000)\n const inOSGBRange = x >= 0 && x <= 800000 && y >= 0 && y <= 1400000;\n \n if (inWGS84Range && !inOSGBRange) {\n return 'WGS84';\n } else if (inOSGBRange && !inWGS84Range) {\n return 'OSGB';\n } else {\n return 'UNKNOWN';\n }\n}\n","import { GeoMorpher } from \"./core/geomorpher.js\";\nimport { createLeafletMorphLayers, createLeafletGlyphLayer } from \"./adapters/leaflet/index.js\";\nimport { createMapLibreMorphLayers, createMapLibreGlyphLayer } from \"./adapters/maplibre/index.js\";\nimport { WGS84Projection, WebMercatorProjection, isLikelyWGS84, createProj4Projection } from \"./utils/projections.js\";\nimport { parseCSV } from \"./utils/csv.js\";\nimport {\n\tcreateGridCartogramFeatureCollection,\n\tnormalizeCartogramInput,\n} from \"./utils/cartogram.js\";\n\nexport { \n GeoMorpher, \n createLeafletMorphLayers, \n createLeafletGlyphLayer,\n\tcreateMapLibreMorphLayers,\n\tcreateMapLibreGlyphLayer,\n WGS84Projection,\n WebMercatorProjection,\n isLikelyWGS84,\n\tcreateProj4Projection,\n\tparseCSV,\n\tcreateGridCartogramFeatureCollection,\n\tnormalizeCartogramInput,\n};\n\nexport async function geoMorpher(options) {\n\tconst morpher = new GeoMorpher(options);\n\tawait morpher.prepare();\n\treturn {\n\t\tmorpher,\n\t\tkeyData: morpher.getKeyData(),\n\t\tregularGeodataLookup: morpher.getGeographyLookup(),\n\t\tregularGeodataWgs84: morpher.getRegularFeatureCollection(),\n\t\tcartogramGeodataLookup: morpher.getCartogramLookup(),\n\t\tcartogramGeodataWgs84: morpher.getCartogramFeatureCollection(),\n\t\ttweenLookup: morpher.getInterpolatedLookup(options?.morphFactor ?? 0.5),\n\t};\n}\n"],"names":["turf","isHTMLElement","DEFAULT_GLYPH_CLASS","DEFAULT_ICON_SIZE","normalizeGlyphResult","getFeatureBoundsInPixels","fallbackNamespace"],"mappings":"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","x_google_ignoreList":[4]}