{"version":3,"file":"Utils-Dy1qLCgG.cjs","names":["identity","transform"],"sources":["../node_modules/topojson-client/src/identity.js","../node_modules/topojson-client/src/transform.js","../node_modules/topojson-client/src/reverse.js","../node_modules/topojson-client/src/feature.js","../src/Utils/convertTopoJsonToGeoJson.ts","../src/Utils/generateCodes.ts","../src/Utils/getPercentileValue.ts","../src/Utils/getQueryParamsFromLink.ts","../src/Utils/getScatteredCircleCoordinates.ts","../src/Utils/removeOutliers.ts"],"sourcesContent":["export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2, n = input.length, output = new Array(n);\n    output[0] = (x0 += input[0]) * kx + dx;\n    output[1] = (y0 += input[1]) * ky + dy;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n  if (typeof o === \"string\") o = topology.objects[o];\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology.transform),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k], k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p);\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","import type { FeatureCollection, Geometry } from 'geojson';\r\nimport { feature } from 'topojson-client';\r\nimport type { Topology } from 'topojson-specification';\r\n\r\n/**\r\n * Converts a TopoJSON object to a GeoJSON object.\r\n * @param topoJson The TopoJSON object to convert.\r\n * @param key The key of the object to convert.\r\n * @returns The GeoJSON object.\r\n */\r\nexport function convertTopoJsonToGeoJson(\r\n  topoJson: Topology,\r\n  key?: string,\r\n): FeatureCollection<Geometry> {\r\n  if (!topoJson?.objects) {\r\n    throw new Error('Invalid TopoJSON object');\r\n  }\r\n  const keyToUse = key || Object.keys(topoJson.objects)[0];\r\n  return feature(topoJson, topoJson.objects[keyToUse]) as FeatureCollection<Geometry>;\r\n}\r\n\r\nexport function convertTopoJsonUrlToGeoJson(\r\n  url: string,\r\n  key?: string,\r\n): Promise<FeatureCollection<Geometry>> {\r\n  return fetch(url)\r\n    .then((response) => {\r\n      if (!response.ok) {\r\n        throw new Error(`Failed to fetch TopoJSON: ${response.status} ${response.statusText}`);\r\n      }\r\n      return response.json();\r\n    })\r\n    .then((topoJson: Topology) => {\r\n      const keyToUse = key || Object.keys(topoJson.objects)[0];\r\n      const geoJson = feature(topoJson, topoJson.objects[keyToUse]);\r\n      return geoJson as FeatureCollection<Geometry>;\r\n    });\r\n}\r\n","/**\r\n * Converts an array of strings or numbers into a tilde-separated string with spaces replaced by `+`.\r\n * Example: `['A B', 'C']` → `'A+B~C'`\r\n */\r\nconst ArrToString = (d: string[] | number[]) => {\r\n  let stringValTemp = '';\r\n  d.forEach((el) => {\r\n    stringValTemp += `~${`${el}`.replace(/ /g, '+')}`;\r\n  });\r\n  const stringVal = stringValTemp.substring(1);\r\n  return stringVal;\r\n};\r\n\r\n/**\r\n * Represents a parameter to be embedded in a URL.\r\n */\r\ninterface ParamsProps {\r\n  id: string;\r\n  value: string | boolean | number | string[] | number[];\r\n}\r\n\r\n/**\r\n * Generates an embed link with custom query parameters.\r\n * @param link - The base URL.\r\n * @param params - An array of parameters to append.\r\n * @returns A URL string with encoded query parameters.\r\n */\r\nexport function generateEmbedLink(link: string, params: ParamsProps[]) {\r\n  let queryParams = '';\r\n  params.forEach((d) => {\r\n    let paramToString = '';\r\n    switch (typeof d.value) {\r\n      case 'number':\r\n        paramToString = `${d.value}`;\r\n        break;\r\n      case 'boolean':\r\n        paramToString = `${d.value}`;\r\n        break;\r\n      case 'object':\r\n        paramToString = ArrToString(d.value as string[] | number[]);\r\n        break;\r\n      default:\r\n        paramToString = `${d.value}`;\r\n    }\r\n    queryParams += `&${d.id}=${paramToString.replace(/ /g, '+').replaceAll(\"'\", '_')}`;\r\n  });\r\n  return `${link}?${queryParams}`;\r\n}\r\n\r\n/**\r\n * Generates an iframe HTML string using a base link and parameters.\r\n * @param link - The base URL.\r\n * @param params - Parameters to convert into query string.\r\n * @returns A string of iframe HTML.\r\n */\r\nexport function generateIframeCode(link: string, params: ParamsProps[]) {\r\n  return `<iframe src=\"${generateEmbedLink(\r\n    link,\r\n    params,\r\n  )}\" loading=\"lazy\" style=\"width: 100%; border: 0px none\"></iframe>`;\r\n}\r\n","/**\r\n * Returns the value at the given percentile from a numeric dataset.\r\n *\r\n * @param data - An array of numbers to compute the percentile from.\r\n * @param percentile - The desired percentile (0–100).\r\n * @returns The value at the specified percentile.\r\n *\r\n * @example\r\n * getPercentileValue([1, 3, 5, 7, 9], 50); // 5\r\n */\r\nexport function getPercentileValue(data: number[], percentile: number) {\r\n  const sortedData = data.slice().sort((a, b) => a - b);\r\n  const index = Math.ceil((percentile / 100) * sortedData.length) - 1;\r\n  return sortedData[index];\r\n}\r\n","/**\r\n * Parses query parameters from the current browser URL.\r\n *\r\n * @returns An array of objects containing each query parameter and its value.\r\n * If a value contains the `~` delimiter, it will be returned as a string array.\r\n *\r\n * - Replaces `+` with spaces and `_` with `'`.\r\n * - Splits values by `~` to support array-style data.\r\n *\r\n * @example\r\n * getQueryParamsFromLink();\r\n */\r\nexport function getQueryParamsFromLink() {\r\n  const params: {\r\n    param: string;\r\n    value: string | string[];\r\n  }[] = [];\r\n  new URL(window.location.href).searchParams.forEach((value, param) => {\r\n    params.push({\r\n      param,\r\n      value:\r\n        value.replaceAll('+', ' ').replaceAll('_', \"'\").split('~').length > 1\r\n          ? value.replaceAll('+', ' ').replaceAll('_', \"'\").split('~')\r\n          : value.replaceAll('+', ' ').replaceAll('_', \"'\"),\r\n    });\r\n  });\r\n  return params;\r\n}\r\n","interface CoordinatesProps {\r\n  id: number;\r\n  x: number;\r\n  y: number;\r\n  distanceFromCenter: number;\r\n}\r\n\r\ninterface Props {\r\n  noOfPoints: number;\r\n  pointRadius?: number;\r\n  outerRadius?: number;\r\n  innerRadius?: number;\r\n  padding?: number;\r\n  noOfTicks?: number;\r\n  random?: () => number;\r\n  verticalRange?: [number, number];\r\n  horizontalRange?: [number, number];\r\n  angleRange?: [number, number];\r\n}\r\n\r\nexport const getScatteredCircleCoordinates = ({\r\n  outerRadius = 500,\r\n  noOfPoints,\r\n  pointRadius = 6,\r\n  innerRadius = 0,\r\n  padding = 1,\r\n  noOfTicks = 1000,\r\n  random = Math.random,\r\n  verticalRange = [0, 1],\r\n  horizontalRange = [0, 1],\r\n  angleRange = [0, 2 * Math.PI],\r\n}: Props): CoordinatesProps[] => {\r\n  const rMin = innerRadius + pointRadius;\r\n  const rMax = Math.max(rMin, outerRadius - pointRadius);\r\n  const verticalRangePoint = [\r\n    Math.max(verticalRange[0], 0) * outerRadius * 2,\r\n    Math.min(verticalRange[1], 1) * outerRadius * 2,\r\n  ];\r\n  const horizontalRangePoint = [\r\n    Math.max(horizontalRange[0], 0) * outerRadius * 2,\r\n    Math.min(horizontalRange[1], 1) * outerRadius * 2,\r\n  ];\r\n  const xMin = horizontalRangePoint[0] - outerRadius + pointRadius;\r\n  const xMax = horizontalRangePoint[1] - outerRadius - pointRadius;\r\n  const yMin = verticalRangePoint[0] - outerRadius + pointRadius;\r\n  const yMax = verticalRangePoint[1] - outerRadius - pointRadius;\r\n\r\n  const minDist = 2 * pointRadius + padding;\r\n  const minDistanceSquared = minDist * minDist;\r\n\r\n  const grid = new Map<string, CoordinatesProps[]>();\r\n  const getNearestDistanceSquared = (x: number, y: number) => {\r\n    const cx = Math.floor(x / minDist);\r\n    const cy = Math.floor(y / minDist);\r\n    let best = minDistanceSquared;\r\n    for (let i = -1; i <= 1; i++) {\r\n      for (let j = -1; j <= 1; j++) {\r\n        const bucket = grid.get(`${cx + i},${cy + j}`);\r\n        if (!bucket) continue;\r\n        for (const p of bucket) {\r\n          const dx = p.x - x;\r\n          const dy = p.y - y;\r\n          best = Math.min(best, dx * dx + dy * dy);\r\n        }\r\n      }\r\n    }\r\n    return best;\r\n  };\r\n\r\n  const sampleInRange = () => {\r\n    const x = random() * (xMax - xMin) + xMin;\r\n    const y = random() * (yMax - yMin) + yMin;\r\n    return { x, y, d: Math.hypot(x, y) };\r\n  };\r\n\r\n  const points: CoordinatesProps[] = [];\r\n\r\n  while (points.length < noOfPoints) {\r\n    let best = {\r\n      x: 0,\r\n      y: 0,\r\n      d: 0,\r\n      nearestDistanceSquared: -Infinity,\r\n    };\r\n\r\n    for (let tick = 0; tick <= noOfTicks; tick++) {\r\n      const angle = angleRange[0] + random() * (angleRange[1] - angleRange[0]);\r\n      const d = random() * (rMax - rMin) + rMin;\r\n      const x = d * Math.cos(angle);\r\n      const y = d * Math.sin(angle);\r\n      if (x < xMin || x > xMax || y < yMin || y > yMax) continue; // out of range, try again\r\n\r\n      const nearestDistanceSquared = getNearestDistanceSquared(x, y);\r\n      if (nearestDistanceSquared > best.nearestDistanceSquared)\r\n        best = { x, y, d, nearestDistanceSquared };\r\n      if (nearestDistanceSquared >= minDistanceSquared) break;\r\n    }\r\n\r\n    if (best.nearestDistanceSquared === -Infinity) {\r\n      console.warn(\r\n        'No valid positions found inside the given x/y range, therefore placing point inside the range only.',\r\n      );\r\n      const { x, y, d } = sampleInRange();\r\n      best = { x, y, d, nearestDistanceSquared: getNearestDistanceSquared(x, y) };\r\n    }\r\n    const point = { id: points.length, x: best.x, y: best.y, distanceFromCenter: 0 };\r\n    points.push(point);\r\n    const k = `${Math.floor(point.x / minDist)},${Math.floor(point.y / minDist)}`;\r\n    if (!grid.has(k)) grid.set(k, []);\r\n    grid.get(k)?.push(point);\r\n  }\r\n\r\n  return points.map((p) => ({ ...p, x: p.x + outerRadius, y: p.y + outerRadius }));\r\n};\r\n","/**\r\n * Removes statistical outliers from a numeric dataset based on standard deviation.\r\n *\r\n * @param data - The array of numbers to filter.\r\n * @param outlierThreshold - Optional multiplier for standard deviation (default: 2).\r\n * Values further than `threshold * stdDev` from the mean are considered outliers.\r\n *\r\n * @returns A filtered array with outliers removed.\r\n *\r\n * @example\r\n * removeOutliers([1, 2, 3, 100]); // [1, 2, 3]\r\n * removeOutliers([10, 12, 11, 13, 300], 1.5); // May remove 300\r\n */\r\nexport function removeOutliers(data: number[], outlierThreshold = 2) {\r\n  const mean = data.reduce((acc, val) => acc + val, 0) / data.length;\r\n  const stdDev = Math.sqrt(data.reduce((acc, val) => acc + (val - mean) ** 2, 0) / data.length);\r\n  const outlierThresholdWithStdDev = outlierThreshold * stdDev;\r\n  const filteredData = data.filter((val) => Math.abs(val - mean) <= outlierThresholdWithStdDev);\r\n\r\n  return filteredData;\r\n}\r\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}