@unovis/ts 1.6.2 → 1.7.0-stellar.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/components/area/config.d.ts +2 -0
  2. package/components/area/config.js +1 -1
  3. package/components/area/config.js.map +1 -1
  4. package/components/area/index.js +6 -3
  5. package/components/area/index.js.map +1 -1
  6. package/components/crosshair/config.d.ts +1 -1
  7. package/components/crosshair/config.js.map +1 -1
  8. package/components/crosshair/index.d.ts +1 -1
  9. package/components/crosshair/index.js.map +1 -1
  10. package/components/topojson-map/config.d.ts +57 -1
  11. package/components/topojson-map/config.js +6 -2
  12. package/components/topojson-map/config.js.map +1 -1
  13. package/components/topojson-map/index.d.ts +25 -0
  14. package/components/topojson-map/index.js +708 -32
  15. package/components/topojson-map/index.js.map +1 -1
  16. package/components/topojson-map/modules/donut.d.ts +3 -0
  17. package/components/topojson-map/modules/donut.js +25 -0
  18. package/components/topojson-map/modules/donut.js.map +1 -0
  19. package/components/topojson-map/style.d.ts +6 -0
  20. package/components/topojson-map/style.js +45 -1
  21. package/components/topojson-map/style.js.map +1 -1
  22. package/components/topojson-map/types.d.ts +82 -0
  23. package/components/topojson-map/types.js +8 -1
  24. package/components/topojson-map/types.js.map +1 -1
  25. package/components/topojson-map/utils.d.ts +17 -0
  26. package/components/topojson-map/utils.js +177 -3
  27. package/components/topojson-map/utils.js.map +1 -1
  28. package/components.d.ts +2 -0
  29. package/components.js +1 -0
  30. package/components.js.map +1 -1
  31. package/containers/single-container/config.d.ts +3 -0
  32. package/containers/single-container/config.js.map +1 -1
  33. package/containers/single-container/index.js +2 -1
  34. package/containers/single-container/index.js.map +1 -1
  35. package/containers/xy-container/config.d.ts +3 -0
  36. package/containers/xy-container/config.js.map +1 -1
  37. package/containers/xy-container/index.d.ts +1 -0
  38. package/containers/xy-container/index.js +13 -9
  39. package/containers/xy-container/index.js.map +1 -1
  40. package/index.js +1 -1
  41. package/package.json +1 -1
  42. package/types.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/topojson-map/index.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { D3ZoomEvent, zoom, ZoomBehavior, zoomIdentity, ZoomTransform } from 'd3-zoom'\nimport { timeout } from 'd3-timer'\nimport { geoPath, GeoProjection, ExtendedFeatureCollection } from 'd3-geo'\nimport { color } from 'd3-color'\nimport { feature } from 'topojson-client'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { MapGraphDataModel } from 'data-models/map-graph'\n\n// Utils\nimport { clamp, getNumber, getString, isNumber } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getColor, hexToBrightness } from 'utils/color'\nimport { getCSSVariableValue, isStringCSSVariable } from 'utils/misc'\n\n// Types\nimport { MapLink } from 'types/map'\n\n// Local Types\nimport { MapData, MapFeature, MapPointLabelPosition, MapProjection } from './types'\n\n// Config\nimport { TopoJSONMapDefaultConfig, TopoJSONMapConfigInterface } from './config'\n\n// Modules\nimport { arc, getLonLat } from './utils'\n\n// Styles\nimport * as s from './style'\n\nexport class TopoJSONMap<\n AreaDatum,\n PointDatum = unknown,\n LinkDatum = unknown,\n> extends ComponentCore<\n MapData<AreaDatum, PointDatum, LinkDatum>,\n TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>\n > {\n static selectors = s\n protected _defaultConfig = TopoJSONMapDefaultConfig as TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>\n public config: TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum> = this._defaultConfig\n\n datamodel: MapGraphDataModel<AreaDatum, PointDatum, LinkDatum> = new MapGraphDataModel()\n g: Selection<SVGGElement, unknown, null, undefined>\n private _firstRender = true\n private _isResizing = false\n private _initialScale: number = undefined\n private _center: [number, number]\n private _currentZoomLevel: number = undefined\n private _transform: ZoomTransform\n private _path = geoPath()\n private _projection: GeoProjection\n private _prevWidth: number\n private _prevHeight: number\n private _animFrameId: number\n\n private _featureCollection: GeoJSON.FeatureCollection\n private _zoomBehavior: ZoomBehavior<SVGGElement, unknown> = zoom()\n private _backgroundRect = this.g.append('rect').attr('class', s.background)\n private _featuresGroup = this.g.append('g').attr('class', s.features)\n private _linksGroup = this.g.append('g').attr('class', s.links)\n private _pointsGroup = this.g.append('g').attr('class', s.points)\n\n events = {\n [TopoJSONMap.selectors.point]: {},\n [TopoJSONMap.selectors.feature]: {},\n }\n\n constructor (config?: TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>, data?: MapData<AreaDatum, PointDatum, LinkDatum>) {\n super()\n this._zoomBehavior.on('zoom', this._onZoom.bind(this))\n\n if (config) this.setConfig(config)\n if (data) this.setData(data)\n\n this.g.append('defs')\n .append('filter')\n .attr('id', 'heatmapFilter')\n .html(`\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${this.config.heatmapModeBlurStdDeviation}\" color-interpolation-filters=\"sRGB\" result=\"blur\"></feGaussianBlur>\n <feColorMatrix class=\"blurValues\" in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -4\"></feColorMatrix>\n `)\n }\n\n setData (data: MapData<AreaDatum, PointDatum, LinkDatum>): void {\n const { config } = this\n\n this.datamodel.pointId = config.pointId\n this.datamodel.linkSource = config.linkSource\n this.datamodel.linkTarget = config.linkTarget\n this.datamodel.data = data\n\n // If there was a data change and mapFitToPoints is enabled, we will need to re-fit the map\n this._firstRender = this._firstRender || config.mapFitToPoints\n }\n\n setConfig (config?: TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>): void {\n super.setConfig(config)\n\n // Setting the default here instead of defaultConfig to prevent mutation from other TopoJSONMap instances\n const newProjection = this.config.projection ?? MapProjection.Kavrayskiy7()\n if (this._projection) {\n newProjection.scale(this._projection.scale()).translate(this._projection.translate())\n }\n this._projection = newProjection\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n this._renderBackground()\n this._renderMap(duration)\n this._renderGroups(duration)\n this._renderLinks(duration)\n this._renderPoints(duration)\n\n // When animation is running we need to temporary disable zoom behaviour\n if (duration && !config.disableZoom) {\n this.g.on('.zoom', null)\n timeout(() => {\n this.g.call(this._zoomBehavior)\n }, duration)\n }\n\n // When zoom behaviour is active we assign the `draggable` class to show the grabbing cursor\n this.g.classed('draggable', !config.disableZoom)\n this._firstRender = false\n }\n\n _renderBackground (): void {\n this._backgroundRect\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('transform', `translate(${-this.bleed.left}, ${-this.bleed.top})`)\n }\n\n _renderGroups (duration: number): void {\n const transformString = this._transform.toString()\n smartTransition(this._featuresGroup, duration)\n .attr('transform', transformString)\n .attr('stroke-width', 1 / this._currentZoomLevel)\n\n smartTransition(this._linksGroup, duration)\n .attr('transform', transformString)\n\n smartTransition(this._pointsGroup, duration)\n .attr('transform', transformString)\n }\n\n _renderMap (duration: number): void {\n const { bleed, config, datamodel } = this\n\n this.g.attr('transform', `translate(${bleed.left}, ${bleed.top})`)\n const mapData: TopoJSON.Topology = config.topojson\n const featureName = config.mapFeatureName\n const featureObject = mapData?.objects?.[featureName]\n if (!featureObject) return\n\n this._featureCollection = feature(mapData, featureObject) as GeoJSON.FeatureCollection\n const featureData = (this._featureCollection?.features ?? []) as MapFeature<AreaDatum>[]\n\n if (this._firstRender) {\n // Rendering the map for the first time.\n this._projection.fitExtent([[0, 0], [this._width, this._height]], this._featureCollection)\n this._initialScale = this._projection.scale()\n this._center = this._projection.translate()\n\n if (config.mapFitToPoints) {\n this._fitToPoints()\n }\n\n const zoomExtent = config.zoomExtent\n this._zoomBehavior.scaleExtent([zoomExtent[0] * this._initialScale, zoomExtent[1] * this._initialScale])\n this.setZoom(config.zoomFactor || 1)\n\n if (!config.disableZoom) {\n this.g.call(this._zoomBehavior)\n this._applyZoom()\n }\n\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n if (this._prevWidth !== this._width || this._prevHeight !== this._height) {\n this._onResize()\n }\n\n\n this._path.projection(this._projection)\n\n // Merge passed area data and map feature data\n const areaData = datamodel.areas\n areaData.forEach(a => {\n const feature = featureData.find(f => f.id.toString() === getString(a, config.areaId).toString())\n if (feature) feature.data = a\n else if (this._firstRender) console.warn(`Can't find feature by area code ${getString(a, config.areaId)}`)\n })\n\n const features = this._featuresGroup\n .selectAll<SVGPathElement, unknown>(`.${s.feature}`)\n .data(featureData)\n\n const featuresEnter = features.enter().append('path').attr('class', s.feature)\n smartTransition(featuresEnter.merge(features), duration)\n .attr('d', this._path)\n .style('fill', (d, i) => d.data ? getColor(d.data, config.areaColor, i) : null)\n .style('cursor', d => d.data ? getString(d.data, config.areaCursor) : null)\n features.exit().remove()\n }\n\n _renderLinks (duration: number): void {\n const { config, datamodel } = this\n const links = datamodel.links\n\n const edges = this._linksGroup\n .selectAll<SVGPathElement, MapLink<PointDatum, LinkDatum>>(`.${s.link}`)\n .data(links, (d, i) => getString(d, config.linkId, i))\n\n const edgesEnter = edges.enter().append('path').attr('class', s.link)\n .style('stroke-width', 0)\n\n smartTransition(edgesEnter.merge(edges), duration)\n .attr('d', link => {\n const source = this._projection(getLonLat(link.source, config.longitude, config.latitude))\n const target = this._projection(getLonLat(link.target, config.longitude, config.latitude))\n return arc(source, target)\n })\n .style('stroke-width', link => getNumber(link, config.linkWidth) / this._currentZoomLevel)\n .style('cursor', link => getString(link, config.linkCursor))\n .style('stroke', (link, i) => getColor(link, config.linkColor, i))\n edges.exit().remove()\n }\n\n _renderPoints (duration: number): void {\n const { config, datamodel } = this\n const pointData = datamodel.points\n\n const points = this._pointsGroup\n .selectAll<SVGGElement, PointDatum>(`.${s.point}`)\n .data(pointData, (d, i) => getString(d, config.pointId, i))\n\n // Enter\n const pointsEnter = points.enter().append('g').attr('class', s.point)\n .attr('transform', d => {\n const pos = this._projection(getLonLat(d, config.longitude, config.latitude))\n return `translate(${pos[0]},${pos[1]})`\n })\n .style('opacity', 0)\n\n pointsEnter.append('circle').attr('class', s.pointCircle)\n .attr('r', 0)\n .style('fill', (d, i) => getColor(d, config.pointColor, i))\n .style('stroke-width', d => getNumber(d, config.pointStrokeWidth))\n\n pointsEnter.append('text').attr('class', s.pointLabel)\n .style('opacity', 0)\n\n // Update\n const pointsMerged = pointsEnter.merge(points)\n smartTransition(pointsMerged, duration)\n .attr('transform', d => {\n const pos = this._projection(getLonLat(d, config.longitude, config.latitude))\n return `translate(${pos[0]},${pos[1]})`\n })\n .style('cursor', d => getString(d, config.pointCursor))\n .style('opacity', 1)\n\n smartTransition(pointsMerged.select(`.${s.pointCircle}`), duration)\n .attr('r', d => getNumber(d, config.pointRadius) / this._currentZoomLevel)\n .style('fill', (d, i) => getColor(d, config.pointColor, i))\n .style('stroke', (d, i) => getColor(d, config.pointColor, i))\n .style('stroke-width', d => getNumber(d, config.pointStrokeWidth) / this._currentZoomLevel)\n\n const pointLabelsMerged = pointsMerged.select(`.${s.pointLabel}`)\n pointLabelsMerged\n .text(d => getString(d, config.pointLabel) ?? '')\n .style('font-size', d => {\n if (config.pointLabelPosition === MapPointLabelPosition.Bottom) {\n return `calc(var(--vis-map-point-label-font-size) / ${this._currentZoomLevel}`\n }\n const pointDiameter = 2 * getNumber(d, config.pointRadius)\n const pointLabelText = getString(d, config.pointLabel) || ''\n const textLength = pointLabelText.length\n const fontSize = 0.5 * pointDiameter / Math.pow(textLength, 0.4)\n return clamp(fontSize, fontSize, 16)\n })\n .attr('y', d => {\n if (config.pointLabelPosition === MapPointLabelPosition.Center) return null\n\n const pointRadius = getNumber(d, config.pointRadius) / this._currentZoomLevel\n return pointRadius\n })\n .attr('dy', config.pointLabelPosition === MapPointLabelPosition.Center ? '0.32em' : '1em')\n\n smartTransition(pointLabelsMerged, duration)\n .style('fill', (d, i) => {\n if (config.pointLabelPosition === MapPointLabelPosition.Bottom) return null\n\n const pointColor = getColor(d, config.pointColor, i)\n const hex = color(isStringCSSVariable(pointColor) ? getCSSVariableValue(pointColor, this.element) : pointColor)?.hex()\n if (!hex) return null\n\n const brightness = hexToBrightness(hex)\n return brightness > config.pointLabelTextBrightnessRatio ? 'var(--vis-map-point-label-text-color-dark)' : 'var(--vis-map-point-label-text-color-light)'\n })\n .style('opacity', 1)\n\n // Exit\n points.exit().remove()\n\n // Heatmap\n this._pointsGroup.style('filter', (config.heatmapMode && this._currentZoomLevel < config.heatmapModeZoomLevelThreshold) ? 'url(#heatmapFilter)' : null)\n this._pointsGroup.selectAll(`.${s.pointLabel}`).style('display', (config.heatmapMode && (this._currentZoomLevel < config.heatmapModeZoomLevelThreshold)) ? 'none' : null)\n }\n\n _fitToPoints (points?: PointDatum[], pad = 0.1): void {\n const { config, datamodel } = this\n const pointData = points || datamodel.points\n if (pointData.length === 0) return\n\n this.fitView()\n\n const featureCollection: ExtendedFeatureCollection = {\n type: 'FeatureCollection',\n features: [{\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'MultiPoint',\n coordinates: pointData.map(p => {\n return [\n getNumber(p, d => getNumber(d, config.longitude)),\n getNumber(p, d => getNumber(d, config.latitude)),\n ]\n }),\n },\n }],\n }\n\n this._projection.fitExtent([\n [this._width * pad, this._height * pad],\n [this._width * (1 - pad), this._height * (1 - pad)],\n ], featureCollection)\n\n const maxScale = config.zoomExtent[1] * this._initialScale\n const fittedScale = this._projection.scale()\n\n if (fittedScale > maxScale) {\n const fittedTranslate = this._projection.translate()\n const scaleRatio = maxScale / fittedScale\n\n this._projection.scale(maxScale)\n this._projection.translate([\n this._width / 2 - (this._width / 2 - fittedTranslate[0]) * scaleRatio,\n this._height / 2 - (this._height / 2 - fittedTranslate[1]) * scaleRatio,\n ])\n }\n\n // If we don't update the center, the next zoom will be centered around the previous value\n this._center = this._projection.translate()\n this._applyZoom()\n }\n\n _applyZoom (): void {\n const translate = this._center ?? this._projection.translate()\n const scale = this._initialScale * this._currentZoomLevel\n this.g.call(this._zoomBehavior.transform, zoomIdentity.translate(translate[0], translate[1]).scale(scale))\n }\n\n _onResize (): void {\n this._isResizing = true\n const prevTranslate = this._projection.translate()\n\n this._projection.fitExtent([[0, 0], [this._width, this._height]], this._featureCollection)\n this._initialScale = this._projection.scale()\n this._center = [\n this._projection.translate()[0] * this._center[0] / prevTranslate[0],\n this._projection.translate()[1] * this._center[1] / prevTranslate[1],\n ]\n this._applyZoom()\n\n this._isResizing = false\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n _onZoom (event: D3ZoomEvent<any, any>): void {\n if (this._firstRender) return // To prevent double render because of binding zoom behaviour\n const isMouseEvent = event.sourceEvent !== undefined\n const isExternalEvent = !event?.sourceEvent && !this._isResizing\n\n window.cancelAnimationFrame(this._animFrameId)\n this._animFrameId = window.requestAnimationFrame(this._onZoomHandler.bind(this, event.transform, isMouseEvent, isExternalEvent))\n\n if (isMouseEvent) {\n // Update the center coordinate so that the next call to _applyZoom()\n // will zoom with respect to the current view\n this._center = [event.transform.x, event.transform.y]\n }\n this._currentZoomLevel = (event?.transform.k / this._initialScale) || 1\n }\n\n _onZoomHandler (transform: ZoomTransform, isMouseEvent: boolean, isExternalEvent: boolean): void {\n const scale = transform.k / this._initialScale || 1\n const center = this._projection.translate()\n\n this._transform = zoomIdentity\n .translate(transform.x - center[0] * scale, transform.y - center[1] * scale)\n .scale(scale)\n\n const customDuration = isExternalEvent\n ? this.config.zoomDuration\n : (isMouseEvent ? 0 : null)\n\n // Call render functions that depend on this._transform\n this._renderGroups(customDuration)\n this._renderLinks(customDuration)\n this._renderPoints(customDuration)\n }\n\n public zoomIn (increment = 0.5): void {\n this.setZoom(this._currentZoomLevel + increment)\n }\n\n public zoomOut (increment = 0.5): void {\n this.setZoom(this._currentZoomLevel - increment)\n }\n\n public setZoom (zoomLevel: number): void {\n const { config } = this\n this._currentZoomLevel = clamp(zoomLevel, config.zoomExtent[0], config.zoomExtent[1])\n this._transform = zoomIdentity\n .translate(this._center[0] * (1 - this._currentZoomLevel), this._center[1] * (1 - this._currentZoomLevel))\n .scale(this._currentZoomLevel)\n // We are using this._applyZoom() instead of directly calling this._render(config.zoomDuration) because\n // we've to \"attach\" new transform to the map group element. Otherwise zoomBehavior will not know\n // that the zoom state has changed\n this._applyZoom()\n }\n\n public fitView (): void {\n this._projection.fitExtent([[0, 0], [this._width, this._height]], this._featureCollection)\n this._currentZoomLevel = (this._projection?.scale() / this._initialScale) || 1\n this._center = this._projection.translate()\n // We are using this._applyZoom() instead of directly calling this._render(config.zoomDuration) because\n // we've to \"attach\" new transform to the map group element. Otherwise zoomBehavior will not know\n // that the zoom state has changed\n this._applyZoom()\n }\n\n destroy (): void {\n window.cancelAnimationFrame(this._animFrameId)\n }\n}\n"],"names":["s.background","s.features","s.links","s.points","s.feature","s.link","s.point","s.pointCircle","s.pointLabel","s"],"mappings":";;;;;;;;;;;;;;;;;AAgCM,MAAO,WAIX,SAAQ,aAGP,CAAA;IA+BD,WAAa,CAAA,MAAqE,EAAE,IAAgD,EAAA;AAClI,QAAA,KAAK,EAAE,CAAA;QA9BC,IAAc,CAAA,cAAA,GAAG,wBAAwF,CAAA;AAC5G,QAAA,IAAA,CAAA,MAAM,GAAiE,IAAI,CAAC,cAAc,CAAA;AAEjG,QAAA,IAAA,CAAA,SAAS,GAAwD,IAAI,iBAAiB,EAAE,CAAA;QAEhF,IAAY,CAAA,YAAA,GAAG,IAAI,CAAA;QACnB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAA;QACnB,IAAa,CAAA,aAAA,GAAW,SAAS,CAAA;QAEjC,IAAiB,CAAA,iBAAA,GAAW,SAAS,CAAA;QAErC,IAAK,CAAA,KAAA,GAAG,OAAO,EAAE,CAAA;QAOjB,IAAa,CAAA,aAAA,GAAuC,IAAI,EAAE,CAAA;AAC1D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,UAAY,CAAC,CAAA;AACnE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,QAAU,CAAC,CAAA;AAC7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,KAAO,CAAC,CAAA;AACvD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,MAAQ,CAAC,CAAA;AAEjE,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;AACjC,YAAA,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE;SACpC,CAAA;AAIC,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAEtD,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AAClC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAE5B,QAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;aAClB,MAAM,CAAC,QAAQ,CAAC;AAChB,aAAA,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;AAC3B,aAAA,IAAI,CAAC,CAAA;2DAC+C,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAA;;AAE3F,MAAA,CAAA,CAAC,CAAA;KACL;AAED,IAAA,OAAO,CAAE,IAA+C,EAAA;AACtD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QACvC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QAC7C,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;;QAG1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,CAAA;KAC/D;AAED,IAAA,SAAS,CAAE,MAAqE,EAAA;;AAC9E,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;;AAGvB,QAAA,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,aAAa,CAAC,WAAW,EAAE,CAAA;QAC3E,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAA;AACtF,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa,CAAA;KACjC;AAED,IAAA,OAAO,CAAE,cAAuB,EAAA;AAC9B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAA;QAE5E,IAAI,CAAC,iBAAiB,EAAE,CAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;;AAG5B,QAAA,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACxB,OAAO,CAAC,MAAK;gBACX,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aAChC,EAAE,QAAQ,CAAC,CAAA;AACb,SAAA;;AAGD,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAChD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;KAC1B;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACrB,aAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtB,aAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAK,EAAA,EAAA,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA;KAC3E;AAED,IAAA,aAAa,CAAE,QAAgB,EAAA;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAA;AAClD,QAAA,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;AAC3C,aAAA,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC;aAClC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAEnD,QAAA,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;AACxC,aAAA,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;AAErC,QAAA,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;AACzC,aAAA,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;KACtC;AAED,IAAA,UAAU,CAAE,QAAgB,EAAA;;QAC1B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAEzC,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,IAAI,CAAK,EAAA,EAAA,KAAK,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA;AAClE,QAAA,MAAM,OAAO,GAAsB,MAAM,CAAC,QAAQ,CAAA;AAClD,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAA;AACzC,QAAA,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,OAAO,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,CAAA;AACrD,QAAA,IAAI,CAAC,aAAa;YAAE,OAAM;QAE1B,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,aAAa,CAA8B,CAAA;AACtF,QAAA,MAAM,WAAW,IAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,kBAAkB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAA4B,CAAA;QAExF,IAAI,IAAI,CAAC,YAAY,EAAE;;YAErB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC1F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;YAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;YAE3C,IAAI,MAAM,CAAC,cAAc,EAAE;gBACzB,IAAI,CAAC,YAAY,EAAE,CAAA;AACpB,aAAA;AAED,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;YACpC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;YACxG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAA;AAEpC,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACvB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAC/B,IAAI,CAAC,UAAU,EAAE,CAAA;AAClB,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAA;AAChC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,EAAE;YACxE,IAAI,CAAC,SAAS,EAAE,CAAA;AACjB,SAAA;QAGD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;;AAGvC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAA;AAChC,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAG;AACnB,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AACjG,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,CAAC,IAAI,GAAG,CAAC,CAAA;iBACxB,IAAI,IAAI,CAAC,YAAY;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,gCAAA,EAAmC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA;AAC5G,SAAC,CAAC,CAAA;AAEF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc;AACjC,aAAA,SAAS,CAA0B,CAAI,CAAA,EAAAC,SAAS,EAAE,CAAC;aACnD,IAAI,CAAC,WAAW,CAAC,CAAA;QAEpB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,SAAS,CAAC,CAAA;QAC9E,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;AACrD,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;AACrB,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9E,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAA;AAC7E,QAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;KACzB;AAED,IAAA,YAAY,CAAE,QAAgB,EAAA;AAC5B,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAClC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;AAE7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC3B,aAAA,SAAS,CAAiD,CAAI,CAAA,EAAAC,IAAM,EAAE,CAAC;aACvE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;AAExD,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,IAAM,CAAC;AAClE,aAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;QAE3B,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;AAC/C,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,IAAG;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC1F,YAAA,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC5B,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACzF,aAAA,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;aAC3D,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;AACpE,QAAA,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;KACtB;AAED,IAAA,aAAa,CAAE,QAAgB,EAAA;AAC7B,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAClC,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAA;AAElC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;AAC7B,aAAA,SAAS,CAA0B,CAAI,CAAA,EAAAC,KAAO,EAAE,CAAC;aACjD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;;AAG7D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,KAAO,CAAC;AAClE,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAG;AACrB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC7E,OAAO,CAAA,UAAA,EAAa,GAAG,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACzC,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,WAAa,CAAC;AACtD,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC1D,aAAA,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAEpE,QAAA,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,UAAY,CAAC;AACnD,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;;QAGtB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAC9C,QAAA,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC;AACpC,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAG;AACrB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC7E,OAAO,CAAA,UAAA,EAAa,GAAG,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACzC,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACtD,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAA,EAAID,WAAa,CAAA,CAAE,CAAC,EAAE,QAAQ,CAAC;AAChE,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;aACzE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;aAC1D,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;aAC5D,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAE7F,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAC,UAAY,CAAE,CAAA,CAAC,CAAA;QACjE,iBAAiB;AACd,aAAA,IAAI,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,MAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAA,EAAA,CAAC;AAChD,aAAA,KAAK,CAAC,WAAW,EAAE,CAAC,IAAG;AACtB,YAAA,IAAI,MAAM,CAAC,kBAAkB,KAAK,qBAAqB,CAAC,MAAM,EAAE;AAC9D,gBAAA,OAAO,CAA+C,4CAAA,EAAA,IAAI,CAAC,iBAAiB,EAAE,CAAA;AAC/E,aAAA;AACD,YAAA,MAAM,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;AAC1D,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;AAC5D,YAAA,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAA;AACxC,YAAA,MAAM,QAAQ,GAAG,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YAChE,OAAO,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;AACtC,SAAC,CAAC;AACD,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAG;AACb,YAAA,IAAI,MAAM,CAAC,kBAAkB,KAAK,qBAAqB,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAA;AAE3E,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAA;AAC7E,YAAA,OAAO,WAAW,CAAA;AACpB,SAAC,CAAC;AACD,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,kBAAkB,KAAK,qBAAqB,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAA;AAE5F,QAAA,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC;aACzC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;;AACtB,YAAA,IAAI,MAAM,CAAC,kBAAkB,KAAK,qBAAqB,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAA;AAE3E,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;AACpD,YAAA,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,EAAE,CAAA;AACtH,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,IAAI,CAAA;AAErB,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;AACvC,YAAA,OAAO,UAAU,GAAG,MAAM,CAAC,6BAA6B,GAAG,4CAA4C,GAAG,6CAA6C,CAAA;AACzJ,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;;AAGtB,QAAA,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;;AAGtB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,IAAI,qBAAqB,GAAG,IAAI,CAAC,CAAA;AACvJ,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA,CAAA,EAAIA,UAAY,CAAE,CAAA,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,CAAA;KAC1K;AAED,IAAA,YAAY,CAAE,MAAqB,EAAE,GAAG,GAAG,GAAG,EAAA;AAC5C,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAClC,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,CAAA;AAC5C,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAElC,IAAI,CAAC,OAAO,EAAE,CAAA;AAEd,QAAA,MAAM,iBAAiB,GAA8B;AACnD,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,QAAQ,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,EAAE;AACd,oBAAA,QAAQ,EAAE;AACR,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAG;4BAC7B,OAAO;AACL,gCAAA,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACjD,gCAAA,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;6BACjD,CAAA;AACH,yBAAC,CAAC;AACH,qBAAA;iBACF,CAAC;SACH,CAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;YACzB,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;AACvC,YAAA,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;SACpD,EAAE,iBAAiB,CAAC,CAAA;AAErB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAA;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QAE5C,IAAI,WAAW,GAAG,QAAQ,EAAE;YAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;AACpD,YAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEzC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACzB,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,UAAU;AACrE,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,UAAU;AACxE,aAAA,CAAC,CAAA;AACH,SAAA;;QAGD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAA;KAClB;IAED,UAAU,GAAA;;AACR,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAA;AACzD,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;KAC3G;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;QAElD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC1F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QAC7C,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;SACrE,CAAA;QACD,IAAI,CAAC,UAAU,EAAE,CAAA;AAEjB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAA;KAChC;AAED,IAAA,OAAO,CAAE,KAA4B,EAAA;QACnC,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,OAAM;AAC7B,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,KAAK,SAAS,CAAA;AACpD,QAAA,MAAM,eAAe,GAAG,EAAC,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,WAAW,CAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;AAEhE,QAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC9C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAA;AAEhI,QAAA,IAAI,YAAY,EAAE;;;AAGhB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACtD,SAAA;QACD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,SAAS,CAAC,CAAC,IAAG,IAAI,CAAC,aAAa,KAAK,CAAC,CAAA;KACxE;AAED,IAAA,cAAc,CAAE,SAAwB,EAAE,YAAqB,EAAE,eAAwB,EAAA;QACvF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;QAE3C,IAAI,CAAC,UAAU,GAAG,YAAY;aAC3B,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;aAC3E,KAAK,CAAC,KAAK,CAAC,CAAA;QAEf,MAAM,cAAc,GAAG,eAAe;AACpC,cAAE,IAAI,CAAC,MAAM,CAAC,YAAY;AAC1B,eAAG,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;;AAG7B,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;KACnC;IAEM,MAAM,CAAE,SAAS,GAAG,GAAG,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAA;KACjD;IAEM,OAAO,CAAE,SAAS,GAAG,GAAG,EAAA;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAA;KACjD;AAEM,IAAA,OAAO,CAAE,SAAiB,EAAA;AAC/B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACrF,IAAI,CAAC,UAAU,GAAG,YAAY;AAC3B,aAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACzG,aAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;;;;QAIhC,IAAI,CAAC,UAAU,EAAE,CAAA;KAClB;IAEM,OAAO,GAAA;;QACZ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAC1F,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,0CAAE,KAAK,EAAE,IAAG,IAAI,CAAC,aAAa,KAAK,CAAC,CAAA;QAC9E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;;;;QAI3C,IAAI,CAAC,UAAU,EAAE,CAAA;KAClB;IAED,OAAO,GAAA;AACL,QAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;KAC/C;;AAhaM,WAAS,CAAA,SAAA,GAAGC,KAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/topojson-map/index.ts"],"sourcesContent":["import { Selection, select } from 'd3-selection'\nimport { D3ZoomEvent, zoom, ZoomBehavior, zoomIdentity, ZoomTransform } from 'd3-zoom'\nimport { timeout } from 'd3-timer'\nimport { easeCubicInOut } from 'd3-ease'\nimport { geoPath, GeoProjection, ExtendedFeatureCollection } from 'd3-geo'\nimport { color } from 'd3-color'\nimport { packSiblings } from 'd3-hierarchy'\nimport { feature } from 'topojson-client'\nimport Supercluster from 'supercluster'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { MapGraphDataModel } from 'data-models/map-graph'\n\n// Utils\nimport { clamp, getNumber, getString, isNumber } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getColor, hexToBrightness } from 'utils/color'\nimport { getCSSVariableValue, isStringCSSVariable, rectIntersect } from 'utils/misc'\nimport { estimateStringPixelLength } from 'utils/text'\n\n// Types\nimport { MapLink } from 'types/map'\nimport { Rect } from 'types/misc'\n\n// Local Types\nimport {\n MapData,\n MapFeature,\n MapPointLabelPosition,\n MapProjection,\n TopoJSONMapPointShape,\n TopoJSONMapPoint,\n TopoJSONMapClusterDatum,\n TopoJSONMapPointDatum,\n FlowParticle,\n FlowSourcePoint,\n} from './types'\n\n// Config\nimport { TopoJSONMapDefaultConfig, TopoJSONMapConfigInterface } from './config'\n\n// Modules\nimport {\n arc,\n getLonLat,\n getDonutData,\n getPointPathData,\n calculateClusterIndex,\n getClustersAndPoints,\n geoJsonPointToScreenPoint,\n getNextZoomLevelOnClusterClick,\n} from './utils'\nimport { updateDonut } from './modules/donut'\n\n// Styles\nimport * as s from './style'\n\nexport class TopoJSONMap<\n AreaDatum,\n PointDatum = unknown,\n LinkDatum = unknown,\n> extends ComponentCore<\n MapData<AreaDatum, PointDatum, LinkDatum>,\n TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>\n > {\n static selectors = s\n protected _defaultConfig = TopoJSONMapDefaultConfig as TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>\n public config: TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum> = this._defaultConfig\n\n datamodel: MapGraphDataModel<AreaDatum, PointDatum, LinkDatum> = new MapGraphDataModel()\n g: Selection<SVGGElement, unknown, null, undefined>\n private _firstRender = true\n private _isResizing = false\n private _initialScale: number = undefined\n private _center: [number, number]\n private _currentZoomLevel: number = undefined\n private _transform: ZoomTransform\n private _path = geoPath()\n private _projection: GeoProjection\n private _prevWidth: number\n private _prevHeight: number\n private _animFrameId: number\n private _clusterIndex: Supercluster<PointDatum> | null = null\n private _expandedCluster: {\n cluster: TopoJSONMapPoint<PointDatum>;\n points: any[];\n } | null = null\n\n private _eventInitiatedByComponent = false\n private _collideLabelsAnimFrameId: ReturnType<typeof requestAnimationFrame>\n\n private _featureCollection: GeoJSON.FeatureCollection\n private _zoomBehavior: ZoomBehavior<SVGGElement, unknown> = zoom()\n private _backgroundRect = this.g.append('rect').attr('class', s.background)\n private _featuresGroup = this.g.append('g').attr('class', s.features)\n private _areaLabelsGroup = this.g.append('g').attr('class', s.areaLabel)\n private _linksGroup = this.g.append('g').attr('class', s.links)\n private _pointsGroup = this.g.append('g').attr('class', s.points)\n\n // Flow-related properties\n private _flowParticlesGroup = this.g.append('g').attr('class', s.flowParticles)\n private _sourcePointsGroup = this.g.append('g').attr('class', s.sourcePoints)\n private _flowParticles: any[] = []\n private _sourcePoints: any[] = []\n private _animationId: number | null = null\n\n events = {\n [TopoJSONMap.selectors.point]: {},\n [TopoJSONMap.selectors.feature]: {},\n }\n\n constructor (config?: TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>, data?: MapData<AreaDatum, PointDatum, LinkDatum>) {\n super()\n this._zoomBehavior.on('zoom', this._onZoom.bind(this))\n\n if (config) this.setConfig(config)\n if (data) this.setData(data)\n\n this.g.append('defs')\n .append('filter')\n .attr('id', 'heatmapFilter')\n .html(`\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${this.config.heatmapModeBlurStdDeviation}\" color-interpolation-filters=\"sRGB\" result=\"blur\"></feGaussianBlur>\n <feColorMatrix class=\"blurValues\" in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -4\"></feColorMatrix>\n `)\n }\n\n setData (data: MapData<AreaDatum, PointDatum, LinkDatum>): void {\n const { config } = this\n\n this.datamodel.pointId = config.pointId\n this.datamodel.linkSource = config.linkSource\n this.datamodel.linkTarget = config.linkTarget\n this.datamodel.data = data\n\n // Reset expanded cluster when data changes\n this._resetExpandedCluster()\n\n // Initialize clustering if enabled\n if (config.clustering && data.points?.length) {\n const dataValid = data.points.filter(d => {\n const lat = getNumber(d, config.latitude)\n const lon = getNumber(d, config.longitude)\n return isNumber(lat) && isNumber(lon)\n })\n\n this._clusterIndex = calculateClusterIndex(dataValid as any, this.config as any) as any\n } else {\n this._clusterIndex = null\n }\n\n // If there was a data change and mapFitToPoints is enabled, we will need to re-fit the map\n this._firstRender = this._firstRender || config.mapFitToPoints\n }\n\n setConfig (config?: TopoJSONMapConfigInterface<AreaDatum, PointDatum, LinkDatum>): void {\n super.setConfig(config)\n\n // Setting the default here instead of defaultConfig to prevent mutation from other TopoJSONMap instances\n const newProjection = this.config.projection ?? MapProjection.Kavrayskiy7()\n if (this._projection) {\n newProjection.scale(this._projection.scale()).translate(this._projection.translate())\n }\n this._projection = newProjection\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n this._renderBackground()\n this._renderMap(duration)\n this._renderAreaLabels(duration)\n this._renderGroups(duration)\n this._renderLinks(duration)\n this._renderPoints(duration)\n\n // Flow features\n if (config.enableFlowAnimation) {\n this._initFlowFeatures()\n this._renderSourcePoints(duration)\n this._renderFlowParticles(duration)\n this._startFlowAnimation()\n } else {\n this._stopFlowAnimation()\n }\n\n // When animation is running we need to temporary disable zoom behaviour\n if (duration && !config.disableZoom) {\n this.g.on('.zoom', null)\n timeout(() => {\n this.g.call(this._zoomBehavior)\n }, duration)\n }\n\n // When zoom behaviour is active we assign the `draggable` class to show the grabbing cursor\n this.g.classed('draggable', !config.disableZoom)\n this._firstRender = false\n }\n\n _renderBackground (): void {\n this._backgroundRect\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('transform', `translate(${-this.bleed.left}, ${-this.bleed.top})`)\n }\n\n _renderGroups (duration: number): void {\n const transformString = this._transform.toString()\n smartTransition(this._featuresGroup, duration)\n .attr('transform', transformString)\n .attr('stroke-width', 1 / this._currentZoomLevel)\n\n smartTransition(this._areaLabelsGroup, duration)\n .attr('transform', transformString)\n\n smartTransition(this._linksGroup, duration)\n .attr('transform', transformString)\n\n smartTransition(this._pointsGroup, duration)\n .attr('transform', transformString)\n\n // Flow groups\n smartTransition(this._sourcePointsGroup, duration)\n .attr('transform', transformString)\n\n smartTransition(this._flowParticlesGroup, duration)\n .attr('transform', transformString)\n }\n\n _renderMap (duration: number): void {\n const { bleed, config, datamodel } = this\n\n this.g.attr('transform', `translate(${bleed.left}, ${bleed.top})`)\n const mapData: TopoJSON.Topology = config.topojson\n const featureName = config.mapFeatureName\n const featureObject = mapData?.objects?.[featureName]\n if (!featureObject) return\n\n this._featureCollection = feature(mapData, featureObject) as GeoJSON.FeatureCollection\n const featureData = (this._featureCollection?.features ?? []) as MapFeature<AreaDatum>[]\n\n if (this._firstRender) {\n // Rendering the map for the first time.\n this._projection.fitExtent([[0, 0], [this._width, this._height]], this._featureCollection)\n this._initialScale = this._projection.scale()\n this._center = this._projection.translate()\n\n if (config.mapFitToPoints) {\n this._fitToPoints()\n }\n\n const zoomExtent = config.zoomExtent\n this._zoomBehavior.scaleExtent([zoomExtent[0] * this._initialScale, zoomExtent[1] * this._initialScale])\n this.setZoom(config.zoomFactor || 1)\n\n if (!config.disableZoom) {\n this.g.call(this._zoomBehavior)\n this._applyZoom()\n }\n\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n if (this._prevWidth !== this._width || this._prevHeight !== this._height) {\n this._onResize()\n }\n\n\n this._path.projection(this._projection)\n\n // Merge passed area data and map feature data\n const areaData = datamodel.areas\n areaData.forEach(a => {\n const feature = featureData.find(f => f.id.toString() === getString(a, config.areaId).toString())\n if (feature) feature.data = a\n else if (this._firstRender) console.warn(`Can't find feature by area code ${getString(a, config.areaId)}`)\n })\n\n const features = this._featuresGroup\n .selectAll<SVGPathElement, unknown>(`.${s.feature}`)\n .data(featureData)\n\n const featuresEnter = features.enter().append('path').attr('class', s.feature)\n smartTransition(featuresEnter.merge(features), duration)\n .attr('d', this._path)\n .style('fill', (d, i) => d.data ? getColor(d.data, config.areaColor, i) : null)\n .style('cursor', d => d.data ? getString(d.data, config.areaCursor) : null)\n features.exit().remove()\n }\n\n _renderAreaLabels (duration: number): void {\n const { config } = this\n\n // Early return if no area label configuration\n if (!config.areaLabel) {\n this._areaLabelsGroup.selectAll('*').remove()\n return\n }\n\n const featureData = (this._featureCollection?.features ?? []) as MapFeature<AreaDatum>[]\n\n // Prepare candidate labels with optimized filtering and calculations\n const candidateLabels = featureData\n .map(feature => {\n // Get label text from user-provided area data only\n const labelText = feature.data ? getString(feature.data, config.areaLabel) : null\n if (!labelText) return null\n\n const centroid = this._path.centroid(feature)\n\n // Skip if centroid is invalid (e.g., for very small or complex shapes)\n if (!centroid || centroid.some(coord => !isFinite(coord))) return null\n\n const bounds = this._path.bounds(feature)\n const area = (bounds[1][0] - bounds[0][0]) * (bounds[1][1] - bounds[0][1])\n\n return {\n feature,\n centroid,\n area,\n labelText,\n id: feature.data ? getString(feature.data, config.areaId) : feature.id?.toString(),\n }\n })\n .filter(Boolean) // Remove null entries\n .sort((a, b) => b.area - a.area) // Prioritize larger areas\n\n // D3 data binding with improved key function\n const labels = this._areaLabelsGroup\n .selectAll<SVGTextElement, typeof candidateLabels[0]>(`.${s.areaLabel}`)\n .data(candidateLabels, d => d.id || '')\n\n // Handle entering labels\n const labelsEnter = labels.enter()\n .append('text')\n .attr('class', s.areaLabel)\n .attr('transform', d => `translate(${d.centroid[0]},${d.centroid[1]})`)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n // Update all labels (enter + update)\n const labelsMerged = labelsEnter.merge(labels)\n labelsMerged\n .text(d => d.labelText)\n .attr('transform', d => `translate(${d.centroid[0]},${d.centroid[1]})`)\n .style('font-size', `calc(var(--vis-map-point-label-font-size) / ${this._currentZoomLevel})`)\n .style('text-anchor', 'middle')\n .style('dominant-baseline', 'middle')\n\n // Handle exiting labels\n smartTransition(labels.exit(), duration)\n .style('opacity', 0)\n .remove()\n\n // Run collision detection immediately to prevent flickering during zoom\n if (candidateLabels.length > 0) {\n window.cancelAnimationFrame(this._collideLabelsAnimFrameId)\n // Run collision detection synchronously first\n this._collideLabels()\n\n // Then schedule follow-up collision detection for any dynamic changes\n this._collideLabelsAnimFrameId = window.requestAnimationFrame(() => {\n this._collideLabels()\n })\n }\n\n // Animate to visible state AFTER collision detection\n smartTransition(labelsMerged, duration)\n .style('opacity', 1)\n }\n\n private _collideLabels (): void {\n const labels = this._areaLabelsGroup.selectAll<SVGTextElement, any>(`.${s.areaLabel}`)\n const labelNodes = labels.nodes() as (SVGTextElement & { _labelVisible?: boolean })[]\n const labelData = labels.data()\n\n if (labelNodes.length === 0) return\n\n // Reset all labels to visible and mark them as such\n labelNodes.forEach((node) => {\n node._labelVisible = true\n })\n\n // Helper function to get bounding box\n const getBBox = (labelData: any): Rect => {\n const [x, y] = labelData.centroid\n const labelText = labelData.labelText || ''\n const fontSize = 12 // Default font size\n\n const width = estimateStringPixelLength(labelText, fontSize, 0.6)\n const height = fontSize * 1.2 // Line height factor\n\n return {\n x: x - width / 2,\n y: y - height / 2,\n width,\n height,\n }\n }\n\n // Run collision detection similar to scatter plot\n labelNodes.forEach((node1, i) => {\n const data1 = labelData[i]\n if (!node1._labelVisible) return\n\n const label1BoundingRect = getBBox(data1)\n\n for (let j = 0; j < labelNodes.length; j++) {\n if (i === j) continue\n\n const node2 = labelNodes[j]\n const data2 = labelData[j]\n\n if (!node2._labelVisible) continue\n\n const label2BoundingRect = getBBox(data2)\n const intersect = rectIntersect(label1BoundingRect, label2BoundingRect, 2)\n\n if (intersect) {\n // Priority based on area size - larger areas keep their labels\n if (data1.area >= data2.area) {\n node2._labelVisible = false\n } else {\n node1._labelVisible = false\n break\n }\n }\n }\n })\n\n // Apply visibility based on collision detection\n labels.style('opacity', (d, i) => labelNodes[i]._labelVisible ? 1 : 0)\n }\n\n _renderLinks (duration: number): void {\n const { config, datamodel } = this\n const links = datamodel.links\n\n const edges = this._linksGroup\n .selectAll<SVGPathElement, MapLink<PointDatum, LinkDatum>>(`.${s.link}`)\n .data(links, (d, i) => getString(d, config.linkId, i))\n\n const edgesEnter = edges.enter().append('path').attr('class', s.link)\n .style('stroke-width', 0)\n\n smartTransition(edgesEnter.merge(edges), duration)\n .attr('d', link => {\n const source = this._projection(getLonLat(link.source, config.longitude, config.latitude))\n const target = this._projection(getLonLat(link.target, config.longitude, config.latitude))\n return arc(source, target)\n })\n .style('stroke-width', link => getNumber(link, config.linkWidth) / this._currentZoomLevel)\n .style('cursor', link => getString(link, config.linkCursor))\n .style('stroke', (link, i) => getColor(link, config.linkColor, i))\n edges.exit().remove()\n }\n\n private _getPointData (): TopoJSONMapPoint<PointDatum>[] {\n const { config, datamodel } = this\n\n if (!config.clustering || !this._clusterIndex) {\n // Return regular points when clustering is disabled\n return datamodel.points.map((d, i) => {\n const pos = this._projection(getLonLat(d, config.longitude, config.latitude))\n const radius = getNumber(d, config.pointRadius)\n const shape = getString(d, config.pointShape) as TopoJSONMapPointShape || TopoJSONMapPointShape.Circle\n const donutData = getDonutData(d, config.colorMap)\n const pointColor = getColor(d, config.pointColor, i)\n\n return {\n geometry: { type: 'Point', coordinates: getLonLat(d, config.longitude, config.latitude) },\n bbox: { x1: pos[0] - radius, y1: pos[1] - radius, x2: pos[0] + radius, y2: pos[1] + radius },\n radius,\n path: getPointPathData({ x: 0, y: 0 }, radius, shape),\n color: pointColor,\n id: getString(d, config.pointId, i),\n properties: d as TopoJSONMapPointDatum<PointDatum>,\n donutData,\n isCluster: false,\n _zIndex: 0,\n } as TopoJSONMapPoint<PointDatum>\n })\n }\n\n // Get bounds for clustering\n const bounds = this._projection.invert ? [\n this._projection.invert([0, this._height])[0],\n this._projection.invert([0, this._height])[1],\n this._projection.invert([this._width, 0])[0],\n this._projection.invert([this._width, 0])[1],\n ] as [number, number, number, number] : [-180, -90, 180, 90] as [number, number, number, number]\n\n // Use a capped zoom level for clustering to prevent over-fragmentation\n const clusterZoom = Math.min(Math.round(this._currentZoomLevel || 1), 8)\n let geoJsonPoints = getClustersAndPoints(this._clusterIndex as any, bounds, clusterZoom)\n\n // Handle expanded cluster points - replace the expanded cluster with individual points\n if (this._expandedCluster) {\n // Remove expanded cluster from the data\n geoJsonPoints = geoJsonPoints.filter((c: any) => c.properties.clusterId !== (this._expandedCluster?.cluster.properties as any).clusterId)\n // Add points from the expanded cluster\n geoJsonPoints = geoJsonPoints.concat(this._expandedCluster.points as any)\n }\n\n return geoJsonPoints.map((geoPoint, i) =>\n geoJsonPointToScreenPoint(geoPoint as any, i, this._projection, this.config as any, this._currentZoomLevel || 1)\n ) as any\n }\n\n _renderPoints (duration: number): void {\n const { config } = this\n const hasColorMap = config.colorMap && Object.keys(config.colorMap).length > 0\n const pointData = this._getPointData()\n\n\n const points = this._pointsGroup\n .selectAll<SVGGElement, TopoJSONMapPoint<PointDatum>>(`.${s.point}`)\n .data(pointData, (d, i) => d.id.toString())\n\n // Enter\n const pointsEnter = points.enter().append('g').attr('class', s.point)\n .attr('transform', d => {\n const pos = this._projection(d.geometry.coordinates as [number, number])\n const expandedPoint = d as any\n const dx = expandedPoint.dx || 0\n const dy = expandedPoint.dy || 0\n return `translate(${pos[0] + dx},${pos[1] + dy})`\n })\n .style('opacity', 0)\n\n pointsEnter.append('path').attr('class', s.pointCircle)\n .attr('d', 'M0,0')\n .style('fill', (d, i) => d.color)\n .style('stroke-width', d => getNumber(d.properties as PointDatum, config.pointStrokeWidth))\n\n // Add donut chart group\n pointsEnter.append('g').attr('class', 'donut-group')\n\n pointsEnter.append('text').attr('class', s.pointLabel)\n .style('opacity', 0)\n\n // Update\n const pointsMerged = pointsEnter.merge(points)\n smartTransition(pointsMerged, duration)\n .attr('transform', d => {\n const pos = this._projection(d.geometry.coordinates as [number, number])\n const expandedPoint = d as any\n const dx = expandedPoint.dx || 0\n const dy = expandedPoint.dy || 0\n return `translate(${pos[0] + dx},${pos[1] + dy})`\n })\n .style('cursor', d => {\n return (d.isCluster && (config.clusterExpandOnClick || hasColorMap)) ? 'pointer' : getString(d.properties as PointDatum, config.pointCursor)\n })\n .style('opacity', 1)\n\n // Cursor is handled by the parent point element\n\n // Add click event handler for clusters\n pointsMerged\n .style('pointer-events', 'all') // Ensure pointer events are enabled\n .on('click', (event: MouseEvent, d: TopoJSONMapPoint<PointDatum>) => {\n this._onPointClick(d, event)\n })\n\n\n smartTransition(pointsMerged.select(`.${s.pointCircle}`), duration)\n .attr('d', d => {\n const radius = d.radius / (this._currentZoomLevel || 1)\n const shape = getString(d.properties as PointDatum, config.pointShape) as TopoJSONMapPointShape || TopoJSONMapPointShape.Circle\n return getPointPathData({ x: 0, y: 0 }, radius, shape)\n })\n .style('fill', d => {\n const donutData = d.donutData\n const shape = getString(d.properties as any, config.pointShape) as TopoJSONMapPointShape || TopoJSONMapPointShape.Circle\n const isRing = shape === TopoJSONMapPointShape.Ring\n const expandedPoint = d as any\n\n // For expanded cluster points, use the preserved cluster color\n if (expandedPoint.expandedClusterPoint) {\n return expandedPoint.clusterColor || expandedPoint.expandedClusterPoint.color\n }\n\n if (donutData.length > 0) return 'transparent'\n return isRing ? 'transparent' : d.color\n })\n .style('stroke', d => {\n const expandedPoint = d as any\n // For expanded cluster points, use the preserved cluster color\n if (expandedPoint.expandedClusterPoint) {\n return expandedPoint.clusterColor || expandedPoint.expandedClusterPoint.color\n }\n return d.color\n })\n .style('stroke-width', d => {\n const shape = getString(d.properties as any, config.pointShape) as TopoJSONMapPointShape || TopoJSONMapPointShape.Circle\n const isRing = shape === TopoJSONMapPointShape.Ring\n const baseStrokeWidth = isRing ? getNumber(d.properties as any, config.pointRingWidth) : getNumber(d.properties as any, config.pointStrokeWidth)\n return baseStrokeWidth / (this._currentZoomLevel || 1)\n })\n\n // Update donut charts\n const currentZoomLevel = this._currentZoomLevel\n pointsMerged.select('.donut-group')\n .style('pointer-events', 'none') // Allow clicks to pass through donut charts\n .each(function (d) {\n if (d.donutData.length > 0) {\n const radius = getNumber(d.properties as any, config.pointRadius, 0) / (currentZoomLevel || 1)\n const arcWidth = (d.isCluster ? 4 : 2) / (currentZoomLevel || 1) // Thicker ring for clusters\n updateDonut(select(this as SVGGElement), d.donutData, radius, arcWidth, 0.05)\n } else {\n select(this as SVGGElement).selectAll('*').remove()\n }\n })\n\n const pointLabelsMerged = pointsMerged.select(`.${s.pointLabel}`)\n pointLabelsMerged\n .text(d => {\n if (d.isCluster) {\n // Use cluster label for clusters\n return getString(d as any, config.clusterLabel) ?? ''\n } else {\n // Use point label for regular points\n return getString(d.properties as any, config.pointLabel) ?? ''\n }\n })\n .style('font-size', d => {\n if (config.pointLabelPosition === MapPointLabelPosition.Bottom) {\n return `calc(var(--vis-map-point-label-font-size) / ${this._currentZoomLevel}`\n }\n const pointDiameter = 2 * getNumber(d.properties as any, config.pointRadius, 0)\n const pointLabelText = d.isCluster\n ? (getString(d as any, config.clusterLabel) || '')\n : (getString(d.properties as any, config.pointLabel) || '')\n const textLength = pointLabelText.length\n const fontSize = 0.5 * pointDiameter / Math.pow(textLength, 0.4)\n return clamp(fontSize, fontSize, 16)\n })\n .attr('y', d => {\n if (config.pointLabelPosition === MapPointLabelPosition.Center) return null\n\n const pointRadius = getNumber(d.properties as any, config.pointRadius, 0) / this._currentZoomLevel\n return pointRadius\n })\n .attr('dy', config.pointLabelPosition === MapPointLabelPosition.Center ? '0.32em' : '1em')\n\n smartTransition(pointLabelsMerged, duration)\n .style('fill', (d, i) => {\n if (config.pointLabelPosition === MapPointLabelPosition.Bottom) return null\n\n if (d.isCluster) {\n // For clusters, use contrasting color against cluster background\n const clusterColor = getColor(d as any, config.clusterColor, i) || '#2196F3'\n const hex = color(isStringCSSVariable(clusterColor) ? getCSSVariableValue(clusterColor, this.element) : clusterColor)?.hex()\n if (hex) {\n const brightness = hexToBrightness(hex)\n return brightness > 0.5 ? '#333' : '#fff'\n }\n return '#fff'\n } else {\n // Regular point label color logic\n const pointColor = getColor(d.properties as any, config.pointColor, i)\n const hex = color(isStringCSSVariable(pointColor) ? getCSSVariableValue(pointColor, this.element) : pointColor)?.hex()\n if (!hex) return null\n\n const brightness = hexToBrightness(hex)\n return brightness > config.pointLabelTextBrightnessRatio ? 'var(--vis-map-point-label-text-color-dark)' : 'var(--vis-map-point-label-text-color-light)'\n }\n })\n .style('font-weight', d => d.isCluster ? 'bold' : 'normal')\n .style('opacity', 1)\n\n // Exit\n points.exit().remove()\n\n // Heatmap\n this._pointsGroup.style('filter', (config.heatmapMode && this._currentZoomLevel < config.heatmapModeZoomLevelThreshold) ? 'url(#heatmapFilter)' : null)\n this._pointsGroup.selectAll(`.${s.pointLabel}`).style('display', (config.heatmapMode && (this._currentZoomLevel < config.heatmapModeZoomLevelThreshold)) ? 'none' : null)\n }\n\n _fitToPoints (points?: PointDatum[], pad = 0.1): void {\n const { config, datamodel } = this\n const pointData = points || datamodel.points\n if (pointData.length === 0) return\n\n this.fitView()\n\n const featureCollection: ExtendedFeatureCollection = {\n type: 'FeatureCollection',\n features: [{\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'MultiPoint',\n coordinates: pointData.map(p => {\n return [\n getNumber(p, d => getNumber(d, config.longitude)),\n getNumber(p, d => getNumber(d, config.latitude)),\n ]\n }),\n },\n }],\n }\n\n this._projection.fitExtent([\n [this._width * pad, this._height * pad],\n [this._width * (1 - pad), this._height * (1 - pad)],\n ], featureCollection)\n\n const maxScale = config.zoomExtent[1] * this._initialScale\n const fittedScale = this._projection.scale()\n\n if (fittedScale > maxScale) {\n const fittedTranslate = this._projection.translate()\n const scaleRatio = maxScale / fittedScale\n\n this._projection.scale(maxScale)\n this._projection.translate([\n this._width / 2 - (this._width / 2 - fittedTranslate[0]) * scaleRatio,\n this._height / 2 - (this._height / 2 - fittedTranslate[1]) * scaleRatio,\n ])\n }\n\n // If we don't update the center, the next zoom will be centered around the previous value\n this._center = this._projection.translate()\n this._applyZoom()\n }\n\n _applyZoom (): void {\n const translate = this._center ?? this._projection.translate()\n const scale = this._initialScale * this._currentZoomLevel\n this.g.call(this._zoomBehavior.transform, zoomIdentity.translate(translate[0], translate[1]).scale(scale))\n }\n\n _onResize (): void {\n this._isResizing = true\n const prevTranslate = this._projection.translate()\n\n this._projection.fitExtent([[0, 0], [this._width, this._height]], this._featureCollection)\n this._initialScale = this._projection.scale()\n this._center = [\n this._projection.translate()[0] * this._center[0] / prevTranslate[0],\n this._projection.translate()[1] * this._center[1] / prevTranslate[1],\n ]\n this._applyZoom()\n\n this._isResizing = false\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n _onZoom (event: D3ZoomEvent<any, any>): void {\n if (this._firstRender) return // To prevent double render because of binding zoom behaviour\n const isMouseEvent = event.sourceEvent !== undefined\n const isExternalEvent = !event?.sourceEvent && !this._isResizing\n\n // Reset expanded cluster when manually zooming (but not during component-initiated zoom)\n if (isMouseEvent && !this._eventInitiatedByComponent) this._resetExpandedCluster()\n\n // Reset the flag after handling the zoom\n if (this._eventInitiatedByComponent && !isMouseEvent) {\n this._eventInitiatedByComponent = false\n }\n\n window.cancelAnimationFrame(this._animFrameId)\n this._animFrameId = window.requestAnimationFrame(this._onZoomHandler.bind(this, event.transform, isMouseEvent, isExternalEvent))\n\n if (isMouseEvent) {\n // Update the center coordinate so that the next call to _applyZoom()\n // will zoom with respect to the current view\n this._center = [event.transform.x, event.transform.y]\n }\n this._currentZoomLevel = (event?.transform.k / this._initialScale) || 1\n }\n\n _onZoomHandler (transform: ZoomTransform, isMouseEvent: boolean, isExternalEvent: boolean): void {\n const scale = transform.k / this._initialScale || 1\n const center = this._projection.translate()\n\n this._transform = zoomIdentity\n .translate(transform.x - center[0] * scale, transform.y - center[1] * scale)\n .scale(scale)\n\n const customDuration = isExternalEvent\n ? this.config.zoomDuration\n : (isMouseEvent ? 0 : null)\n\n // Call render functions that depend on this._transform\n this._renderGroups(customDuration)\n this._renderAreaLabels(customDuration)\n this._renderLinks(customDuration)\n this._renderPoints(customDuration)\n\n // Update flow features on zoom\n if (this.config.enableFlowAnimation) {\n this._renderSourcePoints(customDuration)\n this._renderFlowParticles(customDuration)\n }\n\n // Update flow features on zoom\n if (this.config.enableFlowAnimation) {\n this._renderSourcePoints(customDuration)\n this._renderFlowParticles(customDuration)\n }\n }\n\n public zoomIn (increment = 0.5): void {\n this.setZoom(this._currentZoomLevel + increment)\n }\n\n public zoomOut (increment = 0.5): void {\n this.setZoom(this._currentZoomLevel - increment)\n }\n\n public setZoom (zoomLevel: number): void {\n const { config } = this\n this._currentZoomLevel = clamp(zoomLevel, config.zoomExtent[0], config.zoomExtent[1])\n this._transform = zoomIdentity\n .translate(this._center[0] * (1 - this._currentZoomLevel), this._center[1] * (1 - this._currentZoomLevel))\n .scale(this._currentZoomLevel)\n // We are using this._applyZoom() instead of directly calling this._render(config.zoomDuration) because\n // we've to \"attach\" new transform to the map group element. Otherwise zoomBehavior will not know\n // that the zoom state has changed\n this._applyZoom()\n }\n\n public fitView (): void {\n this._projection.fitExtent([[0, 0], [this._width, this._height]], this._featureCollection)\n this._currentZoomLevel = (this._projection?.scale() / this._initialScale) || 1\n this._center = this._projection.translate()\n // We are using this._applyZoom() instead of directly calling this._render(config.zoomDuration) because\n // we've to \"attach\" new transform to the map group element. Otherwise zoomBehavior will not know\n // that the zoom state has changed\n this._applyZoom()\n }\n\n public fitViewToFlows (pad = 0.1): void {\n const { config, datamodel } = this\n const points: PointDatum[] = [...(datamodel.points || [])]\n const links = datamodel.links || []\n\n // Add flow endpoints to the points to consider for fitting\n links.forEach((link) => {\n // Try to get source point\n if (config.sourceLongitude && config.sourceLatitude) {\n const sourceLon = getNumber(link, config.sourceLongitude)\n const sourceLat = getNumber(link, config.sourceLatitude)\n if (isNumber(sourceLon) && isNumber(sourceLat)) {\n points.push({ longitude: sourceLon, latitude: sourceLat } as unknown as PointDatum)\n }\n } else {\n const sourcePoint = config.linkSource?.(link)\n if (typeof sourcePoint === 'object' && sourcePoint !== null) {\n points.push(sourcePoint as PointDatum)\n }\n }\n\n // Try to get target point\n if (config.targetLongitude && config.targetLatitude) {\n const targetLon = getNumber(link, config.targetLongitude)\n const targetLat = getNumber(link, config.targetLatitude)\n if (isNumber(targetLon) && isNumber(targetLat)) {\n points.push({ longitude: targetLon, latitude: targetLat } as unknown as PointDatum)\n }\n } else {\n const targetPoint = config.linkTarget?.(link)\n if (typeof targetPoint === 'object' && targetPoint !== null) {\n points.push(targetPoint as PointDatum)\n }\n }\n })\n\n if (points.length > 0) {\n this._fitToPoints(points, pad)\n } else {\n this.fitView()\n }\n }\n\n private _onPointClick (d: TopoJSONMapPoint<PointDatum>, event: MouseEvent): void {\n const { config } = this\n event.stopPropagation()\n\n // Handle clicking on expanded cluster points to collapse them\n const expandedPoint = d as any\n if (expandedPoint.expandedClusterPoint) {\n this._resetExpandedCluster()\n this._renderPoints(config.duration)\n return\n }\n\n if (d.isCluster && (d.properties as TopoJSONMapClusterDatum<PointDatum>).cluster) {\n // Enable click expansion when clusterExpandOnClick is true OR when colorMap is enabled (for pie chart clusters)\n const hasColorMap = config.colorMap && Object.keys(config.colorMap).length > 0\n\n if (config.clusterExpandOnClick || hasColorMap) {\n // Always expand the cluster to show individual points\n const expandedPoints = this._expandCluster(d)\n\n // Calculate the geographic center (centroid) of the expanded points and zoom to it\n if (expandedPoints && expandedPoints.length > 0) {\n const avgLat = expandedPoints.reduce((sum, p) => sum + getNumber(p, config.latitude), 0) / expandedPoints.length\n const avgLon = expandedPoints.reduce((sum, p) => sum + getNumber(p, config.longitude), 0) / expandedPoints.length\n const centroidCoordinates: [number, number] = [avgLon, avgLat]\n\n // Calculate appropriate zoom level\n const newZoomLevel = getNextZoomLevelOnClusterClick(this._currentZoomLevel || 1)\n\n // Start zoom immediately for smoother transition\n this._zoomToLocation(centroidCoordinates, newZoomLevel)\n }\n }\n }\n }\n\n private _expandCluster (clusterPoint: TopoJSONMapPoint<PointDatum>): PointDatum[] | undefined {\n const { config } = this\n\n if (!clusterPoint.clusterIndex) return undefined\n\n const padding = 1\n const clusterId = (clusterPoint.properties as TopoJSONMapClusterDatum<PointDatum>).clusterId as number\n const points = clusterPoint.clusterIndex.getLeaves(clusterId, Infinity)\n\n // Calculate positions for expanded points using d3.packSiblings (same as leaflet map)\n const packPoints: {x: number; y: number; r: number }[] = points.map(() => ({\n x: 0,\n y: 0,\n r: 8 + padding, // Base radius for individual points\n }))\n packSiblings(packPoints)\n\n // Create expanded points with relative positions\n const expandedPoints = points.map((point, i) => {\n const originalData = point.properties as PointDatum\n const radius = getNumber(originalData, config.pointRadius) || 8\n const shape = getString(originalData, config.pointShape) as TopoJSONMapPointShape || TopoJSONMapPointShape.Circle\n const donutData = getDonutData(originalData, config.colorMap)\n // Use the cluster's exact color for all expanded points to maintain visual consistency\n const pointColor = clusterPoint.color\n\n return {\n geometry: { type: 'Point' as const, coordinates: clusterPoint.geometry.coordinates },\n bbox: { x1: 0, y1: 0, x2: 0, y2: 0 },\n radius,\n path: getPointPathData({ x: 0, y: 0 }, radius, shape),\n color: pointColor,\n id: getString(originalData, config.pointId, i),\n properties: originalData,\n donutData,\n isCluster: false,\n _zIndex: 1,\n expandedClusterPoint: clusterPoint,\n clusterColor: pointColor, // Preserve the cluster color\n dx: packPoints[i].x,\n dy: packPoints[i].y,\n } as TopoJSONMapPoint<PointDatum> & { expandedClusterPoint: TopoJSONMapPoint<PointDatum>; dx: number; dy: number }\n })\n\n this._resetExpandedCluster()\n this._expandedCluster = {\n cluster: clusterPoint,\n points: expandedPoints,\n }\n\n // Re-render to show expanded points with smooth animation\n this._renderPoints(config.duration / 2)\n\n // Return the original point data for centroid calculation\n return points.map(p => p.properties as PointDatum)\n }\n\n private _zoomToLocation (coordinates: [number, number], zoomLevel: number): void {\n const { config } = this\n\n const clampedZoomLevel = clamp(zoomLevel, config.zoomExtent[0], config.zoomExtent[1])\n\n // Project the target coordinates using the current projection\n const targetPoint = this._projection(coordinates)\n if (!targetPoint) return\n\n // Calculate the center of the viewport\n const centerX = this._width / 2\n const centerY = this._height / 2\n\n // Calculate the scale factor\n const k = this._initialScale * clampedZoomLevel\n\n // Calculate translation to center the target point\n // We need to account for the current projection center\n const currentCenter = this._projection.translate()\n const x = currentCenter[0] + (centerX - targetPoint[0]) * (k / this._initialScale)\n const y = currentCenter[1] + (centerY - targetPoint[1]) * (k / this._initialScale)\n\n const transform = zoomIdentity.translate(x, y).scale(k)\n\n // Update internal state\n this._currentZoomLevel = clampedZoomLevel\n this._center = [x, y]\n\n // Set flag to indicate this is a component-initiated zoom\n this._eventInitiatedByComponent = true\n\n // Apply the transform with smooth eased animation\n this.g\n .transition()\n .duration(config.zoomDuration)\n .ease(easeCubicInOut)\n .call(this._zoomBehavior.transform, transform)\n }\n\n private _resetExpandedCluster (): void {\n this._expandedCluster?.points?.forEach((d: any) => { delete d.expandedClusterPoint })\n this._expandedCluster = null\n }\n\n private _initFlowFeatures (): void {\n const { config, datamodel } = this\n // Use raw links data instead of processed links to avoid point lookup issues for flows\n const rawLinks = datamodel.data?.links || []\n\n // Clear existing flow data\n this._flowParticles = []\n this._sourcePoints = []\n\n if (!rawLinks || rawLinks.length === 0) return\n\n // Create source points and flow particles for each link\n rawLinks.forEach((link, i) => {\n // Try to get coordinates from flow-specific accessors first, then fall back to link endpoints\n let sourceLon: number, sourceLat: number, targetLon: number, targetLat: number\n\n if (config.sourceLongitude && config.sourceLatitude) {\n sourceLon = getNumber(link, config.sourceLongitude)\n sourceLat = getNumber(link, config.sourceLatitude)\n } else {\n // Fall back to using linkSource point coordinates\n const sourcePoint = config.linkSource?.(link)\n if (typeof sourcePoint === 'object' && sourcePoint !== null) {\n sourceLon = getNumber(sourcePoint as PointDatum, config.longitude)\n sourceLat = getNumber(sourcePoint as PointDatum, config.latitude)\n } else {\n return // Skip if can't resolve source coordinates\n }\n }\n\n if (config.targetLongitude && config.targetLatitude) {\n targetLon = getNumber(link, config.targetLongitude)\n targetLat = getNumber(link, config.targetLatitude)\n } else {\n // Fall back to using linkTarget point coordinates\n const targetPoint = config.linkTarget?.(link)\n if (typeof targetPoint === 'object' && targetPoint !== null) {\n targetLon = getNumber(targetPoint as PointDatum, config.longitude)\n targetLat = getNumber(targetPoint as PointDatum, config.latitude)\n } else {\n return // Skip if can't resolve target coordinates\n }\n }\n\n if (!isNumber(sourceLon) || !isNumber(sourceLat) || !isNumber(targetLon) || !isNumber(targetLat)) {\n return\n }\n\n const source = { lat: sourceLat, lon: sourceLon }\n const target = { lat: targetLat, lon: targetLon }\n\n // Create source point\n const sourcePos = this._projection([sourceLon, sourceLat])\n if (sourcePos) {\n const sourcePoint: FlowSourcePoint = {\n lat: sourceLat,\n lon: sourceLon,\n x: sourcePos[0],\n y: sourcePos[1],\n radius: getNumber(link, config.sourcePointRadius),\n color: getColor(link, config.sourcePointColor, i),\n flowData: link,\n }\n this._sourcePoints.push(sourcePoint)\n }\n\n // Create flow particles\n const dist = Math.sqrt((targetLat - sourceLat) ** 2 + (targetLon - sourceLon) ** 2)\n const numParticles = Math.max(1, Math.round(dist * getNumber(link, config.flowParticleDensity)))\n const velocity = getNumber(link, config.flowParticleSpeed)\n const radius = getNumber(link, config.flowParticleRadius)\n const color = getColor(link, config.flowParticleColor, i)\n\n for (let j = 0; j < numParticles; j += 1) {\n const progress = j / numParticles\n const location = {\n lat: sourceLat + (targetLat - sourceLat) * progress,\n lon: sourceLon + (targetLon - sourceLon) * progress,\n }\n\n const pos = this._projection([location.lon, location.lat])\n if (pos) {\n const particle: FlowParticle = {\n x: pos[0],\n y: pos[1],\n source,\n target,\n location,\n velocity,\n radius,\n color,\n flowData: link,\n progress: 0, // Keep for compatibility but not used in angle-based movement\n id: `${getString(link, config.linkId, i) || i}-${j}`,\n }\n this._flowParticles.push(particle)\n }\n }\n })\n }\n\n private _renderSourcePoints (duration: number): void {\n const { config } = this\n\n const sourcePoints = this._sourcePointsGroup\n .selectAll<SVGCircleElement, FlowSourcePoint>(`.${s.sourcePoint}`)\n .data(this._sourcePoints, (d, i) => `${d.flowData}-${i}`)\n\n const sourcePointsEnter = sourcePoints.enter()\n .append('circle')\n .attr('class', s.sourcePoint)\n .attr('r', 0)\n .style('opacity', 0)\n .on('click', (event: MouseEvent, d) => {\n event.stopPropagation()\n config.onSourcePointClick?.(d.flowData, d.x, d.y, event)\n })\n .on('mouseenter', (event: MouseEvent, d) => {\n config.onSourcePointMouseEnter?.(d.flowData, d.x, d.y, event)\n })\n .on('mouseleave', (event: MouseEvent, d) => {\n config.onSourcePointMouseLeave?.(d.flowData, event)\n })\n\n smartTransition(sourcePointsEnter.merge(sourcePoints), duration)\n .attr('cx', d => d.x)\n .attr('cy', d => d.y)\n .attr('r', d => d.radius / (this._currentZoomLevel || 1))\n .style('fill', d => d.color)\n .style('stroke', d => d.color)\n .style('opacity', 1)\n\n sourcePoints.exit().remove()\n }\n\n private _renderFlowParticles (duration: number): void {\n const flowParticles = this._flowParticlesGroup\n .selectAll<SVGCircleElement, FlowParticle>(`.${s.flowParticle}`)\n .data(this._flowParticles, d => d.id)\n\n const flowParticlesEnter = flowParticles.enter()\n .append('circle')\n .attr('class', s.flowParticle)\n .attr('r', 0)\n .style('opacity', 0)\n\n smartTransition(flowParticlesEnter.merge(flowParticles), duration)\n .attr('cx', d => d.x)\n .attr('cy', d => d.y)\n .attr('r', d => d.radius / (this._currentZoomLevel || 1))\n .style('fill', d => d.color)\n .style('opacity', 0.8)\n\n flowParticles.exit().remove()\n }\n\n private _startFlowAnimation (): void {\n if (this._animationId) return // Animation already running\n\n this._animateFlow()\n }\n\n private _animateFlow (): void {\n if (!this.config.enableFlowAnimation) return\n\n this._animationId = requestAnimationFrame(() => {\n this._updateFlowParticles()\n this._animateFlow() // Recursive call like LeafletFlowMap\n })\n }\n\n private _stopFlowAnimation (): void {\n if (this._animationId) {\n cancelAnimationFrame(this._animationId)\n this._animationId = null\n }\n }\n\n private _updateFlowParticles (): void {\n if (this._flowParticles.length === 0) return\n\n const zoomLevel = this._currentZoomLevel || 1\n\n this._flowParticles.forEach(particle => {\n const { source, target } = particle\n\n // Calculate movement using angle-based velocity (like LeafletFlowMap)\n const fullDist = Math.sqrt((target.lat - source.lat) ** 2 + (target.lon - source.lon) ** 2)\n const remainedDist = Math.sqrt((target.lat - particle.location.lat) ** 2 + (target.lon - particle.location.lon) ** 2)\n const angle = Math.atan2(target.lat - source.lat, target.lon - source.lon)\n\n // Update geographic location\n particle.location.lat += particle.velocity * Math.sin(angle)\n particle.location.lon += particle.velocity * Math.cos(angle)\n\n // Reset to start when reaching target (like LeafletFlowMap)\n if (\n (((target.lat > source.lat) && (particle.location.lat > target.lat)) || ((target.lon > source.lon) && (particle.location.lon > target.lon))) ||\n (((target.lat < source.lat) && (particle.location.lat < target.lat)) || ((target.lon < source.lon) && (particle.location.lon < target.lon)))\n ) {\n particle.location.lat = source.lat\n particle.location.lon = source.lon\n }\n\n // Project to screen coordinates\n const pos = this._projection([particle.location.lon, particle.location.lat])\n if (pos) {\n // Add orthogonal arc shift (adapted from LeafletFlowMap)\n const orthogonalArcShift = -(zoomLevel ** 2 * fullDist / 8) * Math.cos(Math.PI / 2 * (fullDist / 2 - remainedDist) / (fullDist / 2)) || 0\n particle.x = pos[0]\n particle.y = pos[1] + orthogonalArcShift\n }\n })\n\n // Update DOM elements directly without data rebinding (for performance)\n this._flowParticlesGroup\n .selectAll<SVGCircleElement, any>(`.${s.flowParticle}`)\n .attr('cx', (d, i) => this._flowParticles[i]?.x || 0)\n .attr('cy', (d, i) => this._flowParticles[i]?.y || 0)\n .attr('r', (d, i) => (this._flowParticles[i]?.radius || 1) / zoomLevel)\n }\n\n destroy (): void {\n window.cancelAnimationFrame(this._animFrameId)\n this._stopFlowAnimation()\n window.cancelAnimationFrame(this._collideLabelsAnimFrameId)\n }\n}\n"],"names":["s.background","s.features","s.areaLabel","s.links","s.points","s.flowParticles","s.sourcePoints","s.feature","s.link","s.point","s.pointCircle","s.pointLabel","s.sourcePoint","s.flowParticle","s"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Selection } from 'd3-selection';
2
+ import { TopoJSONMapPieDatum } from '../types';
3
+ export declare function updateDonut(selection: Selection<SVGGElement, unknown, null, undefined>, data: TopoJSONMapPieDatum[], radius: number, arcWidth?: number, padAngle?: number): void;
@@ -0,0 +1,25 @@
1
+ import { pie, arc } from 'd3-shape';
2
+
3
+ const pieConstructor = pie()
4
+ .sort(null)
5
+ .value((d) => d.value);
6
+ function updateDonut(selection, data, radius, arcWidth = 2, padAngle = 0.05) {
7
+ pieConstructor.padAngle(padAngle);
8
+ const arcs = pieConstructor(data.filter(d => d.value));
9
+ const arcPathGen = arc()
10
+ .innerRadius(radius) // Start from the edge of the main circle
11
+ .outerRadius(radius + arcWidth); // Extend outward to create a ring
12
+ const donuts = selection.selectAll('path')
13
+ .data(arcs);
14
+ donuts.exit().remove();
15
+ donuts.enter()
16
+ .append('path')
17
+ .merge(donuts)
18
+ .attr('class', d => { var _a; return (_a = d.data.className) !== null && _a !== void 0 ? _a : null; })
19
+ .attr('d', arcPathGen)
20
+ .style('fill', d => { var _a; return (_a = d.data.color) !== null && _a !== void 0 ? _a : null; })
21
+ .style('stroke', d => { var _a; return (_a = d.data.color) !== null && _a !== void 0 ? _a : null; });
22
+ }
23
+
24
+ export { updateDonut };
25
+ //# sourceMappingURL=donut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donut.js","sources":["../../../../src/components/topojson-map/modules/donut.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { pie, arc, PieArcDatum } from 'd3-shape'\n\n// Local Types\nimport { TopoJSONMapPieDatum } from '../types'\n\nconst pieConstructor = pie<TopoJSONMapPieDatum>()\n .sort(null)\n .value((d: TopoJSONMapPieDatum): number => d.value)\n\nexport function updateDonut (\n selection: Selection<SVGGElement, unknown, null, undefined>,\n data: TopoJSONMapPieDatum[],\n radius: number,\n arcWidth = 2,\n padAngle = 0.05\n): void {\n pieConstructor.padAngle(padAngle)\n const arcs = pieConstructor(data.filter(d => d.value))\n\n const arcPathGen = arc<PieArcDatum<TopoJSONMapPieDatum>>()\n .innerRadius(radius) // Start from the edge of the main circle\n .outerRadius(radius + arcWidth) // Extend outward to create a ring\n\n const donuts = selection.selectAll<SVGPathElement, TopoJSONMapPieDatum>('path')\n .data(arcs)\n\n donuts.exit().remove()\n\n donuts.enter()\n .append('path')\n .merge(donuts)\n .attr('class', d => d.data.className ?? null)\n .attr('d', arcPathGen)\n .style('fill', d => d.data.color ?? null)\n .style('stroke', d => d.data.color ?? null)\n}\n"],"names":[],"mappings":";;AAMA,MAAM,cAAc,GAAG,GAAG,EAAuB;KAC9C,IAAI,CAAC,IAAI,CAAC;KACV,KAAK,CAAC,CAAC,CAAsB,KAAa,CAAC,CAAC,KAAK,CAAC,CAAA;AAErC,SAAA,WAAW,CACzB,SAA2D,EAC3D,IAA2B,EAC3B,MAAc,EACd,QAAQ,GAAG,CAAC,EACZ,QAAQ,GAAG,IAAI,EAAA;AAEf,IAAA,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACjC,IAAA,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAEtD,MAAM,UAAU,GAAG,GAAG,EAAoC;AACvD,SAAA,WAAW,CAAC,MAAM,CAAC;AACnB,SAAA,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;AAEjC,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAsC,MAAM,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb,IAAA,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;IAEtB,MAAM,CAAC,KAAK,EAAE;SACX,MAAM,CAAC,MAAM,CAAC;SACd,KAAK,CAAC,MAAM,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,CAAC,cAAI,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,SAAS,mCAAI,IAAI,CAAA,EAAA,CAAC;AAC5C,SAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;AACrB,SAAA,KAAK,CAAC,MAAM,EAAE,CAAC,cAAI,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAA,EAAA,CAAC;AACxC,SAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,cAAI,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAA,EAAA,CAAC,CAAA;AAC/C;;;;"}
@@ -2,10 +2,16 @@ export declare const root: string;
2
2
  export declare const variables: void;
3
3
  export declare const features: string;
4
4
  export declare const feature: string;
5
+ export declare const areaLabel: string;
5
6
  export declare const background: string;
6
7
  export declare const points: string;
7
8
  export declare const point: string;
8
9
  export declare const pointCircle: string;
9
10
  export declare const pointLabel: string;
11
+ export declare const pointDonut: string;
10
12
  export declare const links: string;
11
13
  export declare const link: string;
14
+ export declare const flowParticles: string;
15
+ export declare const flowParticle: string;
16
+ export declare const sourcePoints: string;
17
+ export declare const sourcePoint: string;
@@ -47,6 +47,18 @@ const feature = css `
47
47
  stroke: var(--vis-map-boundary-color);
48
48
  stroke-opacity: 0.5;
49
49
  `;
50
+ const areaLabel = css `
51
+ label: area-label;
52
+
53
+ text-anchor: middle;
54
+ cursor: default;
55
+ pointer-events: none;
56
+
57
+ font-size: var(--vis-map-point-label-font-size);
58
+ font-family: var(--vis-map-point-label-font-family, var(--vis-font-family));
59
+ font-weight: var(--vis-map-point-label-font-weight);
60
+ fill: var(--vis-map-point-label-text-color-dark);
61
+ `;
50
62
  const background = css `
51
63
  label: background;
52
64
 
@@ -81,6 +93,16 @@ const pointLabel = css `
81
93
  font-weight: var(--vis-map-point-label-font-weight);
82
94
  fill: var(--vis-map-point-label-text-color-dark);
83
95
  `;
96
+ const pointDonut = css `
97
+ label: point-donut;
98
+
99
+ pointer-events: none;
100
+
101
+ path {
102
+ stroke-width: 1;
103
+ stroke-opacity: 0.8;
104
+ }
105
+ `;
84
106
  const links = css `
85
107
  label: links;
86
108
  `;
@@ -94,7 +116,29 @@ const link = css `
94
116
  &:hover {
95
117
  stroke-opacity: .90;
96
118
  }
119
+ `;
120
+ const flowParticles = css `
121
+ label: flow-particles;
122
+ `;
123
+ const flowParticle = css `
124
+ label: flow-particle;
125
+
126
+ pointer-events: none;
127
+ `;
128
+ const sourcePoints = css `
129
+ label: source-points;
130
+ `;
131
+ const sourcePoint = css `
132
+ label: source-point;
133
+
134
+ cursor: pointer;
135
+ stroke-opacity: 0.8;
136
+
137
+ &:hover {
138
+ stroke-opacity: 1;
139
+ transform: scale(1.1);
140
+ }
97
141
  `;
98
142
 
99
- export { background, feature, features, link, links, point, pointCircle, pointLabel, points, root, variables };
143
+ export { areaLabel, background, feature, features, flowParticle, flowParticles, link, links, point, pointCircle, pointDonut, pointLabel, points, root, sourcePoint, sourcePoints, variables };
100
144
  //# sourceMappingURL=style.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../src/components/topojson-map/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: topojson-map-component;\n\n &.draggable {\n &:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n }\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-map-feature-color: #dce3eb;\n --vis-map-boundary-color: #ffffff;\n\n --vis-map-point-label-text-color-dark: #5b5f6d;\n --vis-map-point-label-text-color-light: #fff;\n\n // Undefined by default to allow proper fallback to var(--vis-font-family)\n /* --vis-map-point-label-font-family: */\n --vis-map-point-label-font-weight: 600;\n --vis-map-point-label-font-size: 12px;\n\n /* Dark Theme */\n --vis-dark-map-feature-color: #5b5f6d;\n --vis-dark-map-boundary-color: #2a2a2a;\n --vis-dark-map-point-label-text-color-dark: #fff;\n --vis-dark-map-point-label-text-color-light:#5b5f6d;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-map-feature-color: var(--vis-dark-map-feature-color);\n --vis-map-boundary-color: var(--vis-dark-map-boundary-color);\n --vis-map-point-label-text-color-dark: var(--vis-dark-map-point-label-text-color-dark);\n --vis-map-point-label-text-color-light: var(--vis-dark-map-point-label-text-color-light);\n }\n`\n\nexport const features = css`\n label: features;\n`\n\nexport const feature = css`\n label: feature;\n fill: var(--vis-map-feature-color);\n stroke: var(--vis-map-boundary-color);\n stroke-opacity: 0.5;\n`\n\nexport const background = css`\n label: background;\n\n fill-opacity: 0;\n pointer-events: all;\n`\n\nexport const points = css`\n label: points;\n`\n\nexport const point = css`\n label: point;\n`\n\nexport const pointCircle = css`\n label: point;\n\n stroke-opacity: 0.4;\n pointer-events: fill;\n\n &:active {\n cursor: default;\n }\n`\n\nexport const pointLabel = css`\n label: label;\n\n text-anchor: middle;\n cursor: default;\n pointer-events:none;\n\n font-size: var(--vis-map-point-label-font-size);\n font-family: var(--vis-map-point-label-font-family, var(--vis-font-family));\n font-weight: var(--vis-map-point-label-font-weight);\n fill: var(--vis-map-point-label-text-color-dark);\n`\n\nexport const links = css`\n label: links;\n`\n\nexport const link = css`\n label: link;\n\n fill: none;\n stroke-opacity: .50;\n stroke-linecap: round;\n\n &:hover {\n stroke-opacity: .90;\n }\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;EAUtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;AAoBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;;EAM7B;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;EAE1B;AAEM,MAAM,OAAO,GAAG,GAAG,CAAA,CAAA;;;;;EAKzB;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;EAK5B;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAS7B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;EAW5B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"style.js","sources":["../../../src/components/topojson-map/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: topojson-map-component;\n\n &.draggable {\n &:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n }\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-map-feature-color: #dce3eb;\n --vis-map-boundary-color: #ffffff;\n\n --vis-map-point-label-text-color-dark: #5b5f6d;\n --vis-map-point-label-text-color-light: #fff;\n\n // Undefined by default to allow proper fallback to var(--vis-font-family)\n /* --vis-map-point-label-font-family: */\n --vis-map-point-label-font-weight: 600;\n --vis-map-point-label-font-size: 12px;\n\n /* Dark Theme */\n --vis-dark-map-feature-color: #5b5f6d;\n --vis-dark-map-boundary-color: #2a2a2a;\n --vis-dark-map-point-label-text-color-dark: #fff;\n --vis-dark-map-point-label-text-color-light:#5b5f6d;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-map-feature-color: var(--vis-dark-map-feature-color);\n --vis-map-boundary-color: var(--vis-dark-map-boundary-color);\n --vis-map-point-label-text-color-dark: var(--vis-dark-map-point-label-text-color-dark);\n --vis-map-point-label-text-color-light: var(--vis-dark-map-point-label-text-color-light);\n }\n`\n\nexport const features = css`\n label: features;\n`\n\nexport const feature = css`\n label: feature;\n fill: var(--vis-map-feature-color);\n stroke: var(--vis-map-boundary-color);\n stroke-opacity: 0.5;\n`\n\nexport const areaLabel = css`\n label: area-label;\n\n text-anchor: middle;\n cursor: default;\n pointer-events: none;\n\n font-size: var(--vis-map-point-label-font-size);\n font-family: var(--vis-map-point-label-font-family, var(--vis-font-family));\n font-weight: var(--vis-map-point-label-font-weight);\n fill: var(--vis-map-point-label-text-color-dark);\n`\n\nexport const background = css`\n label: background;\n\n fill-opacity: 0;\n pointer-events: all;\n`\n\nexport const points = css`\n label: points;\n`\n\nexport const point = css`\n label: point;\n`\n\nexport const pointCircle = css`\n label: point;\n\n stroke-opacity: 0.4;\n pointer-events: fill;\n\n &:active {\n cursor: default;\n }\n`\n\nexport const pointLabel = css`\n label: label;\n\n text-anchor: middle;\n cursor: default;\n pointer-events:none;\n\n font-size: var(--vis-map-point-label-font-size);\n font-family: var(--vis-map-point-label-font-family, var(--vis-font-family));\n font-weight: var(--vis-map-point-label-font-weight);\n fill: var(--vis-map-point-label-text-color-dark);\n`\n\nexport const pointDonut = css`\n label: point-donut;\n\n pointer-events: none;\n\n path {\n stroke-width: 1;\n stroke-opacity: 0.8;\n }\n`\n\nexport const links = css`\n label: links;\n`\n\nexport const link = css`\n label: link;\n\n fill: none;\n stroke-opacity: .50;\n stroke-linecap: round;\n\n &:hover {\n stroke-opacity: .90;\n }\n`\n\nexport const flowParticles = css`\n label: flow-particles;\n`\n\nexport const flowParticle = css`\n label: flow-particle;\n \n pointer-events: none;\n`\n\nexport const sourcePoints = css`\n label: source-points;\n`\n\nexport const sourcePoint = css`\n label: source-point;\n \n cursor: pointer;\n stroke-opacity: 0.8;\n \n &:hover {\n stroke-opacity: 1;\n transform: scale(1.1);\n }\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;EAUtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;AAoBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;;EAM7B;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;EAE1B;AAEM,MAAM,OAAO,GAAG,GAAG,CAAA,CAAA;;;;;EAKzB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;EAW3B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;EAK5B;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAS7B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;EAW5B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAS5B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;EAUtB;AAEM,MAAM,aAAa,GAAG,GAAG,CAAA,CAAA;;EAE/B;AAEM,MAAM,YAAY,GAAG,GAAG,CAAA,CAAA;;;;EAI9B;AAEM,MAAM,YAAY,GAAG,GAAG,CAAA,CAAA;;EAE9B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { Feature, Geometry } from 'geojson';
2
+ import Supercluster from 'supercluster';
2
3
  import { GeoProjection, geoMercator, geoEquirectangular, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoGnomonic, geoOrthographic, geoStereographic, geoEqualEarth, geoAlbersUsa, geoAlbers, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoTransverseMercator, geoNaturalEarth1 } from 'd3-geo';
3
4
  export declare type MapData<AreaDatum, PointDatum = unknown, LinkDatum = unknown> = {
4
5
  areas?: AreaDatum[];
@@ -9,9 +10,90 @@ export declare enum MapPointLabelPosition {
9
10
  Center = "center",
10
11
  Bottom = "bottom"
11
12
  }
13
+ export declare enum TopoJSONMapPointShape {
14
+ Square = "square",
15
+ Circle = "circle",
16
+ Triangle = "triangle",
17
+ Ring = "ring"
18
+ }
12
19
  export declare type MapFeature<D> = Feature<Geometry> & {
13
20
  data: D;
14
21
  };
22
+ export declare type TopoJSONMapPieDatum = {
23
+ value: number;
24
+ name: string;
25
+ color: string;
26
+ className?: string;
27
+ };
28
+ export interface TopoJSONMapPointStyle {
29
+ color: string;
30
+ className?: string;
31
+ }
32
+ export declare type TopoJSONMapPointStyles<D> = {
33
+ [key in keyof D]?: TopoJSONMapPointStyle;
34
+ };
35
+ export declare type TopoJSONMapPointDatum<D> = D & {
36
+ id: string | number;
37
+ shape: TopoJSONMapPointShape;
38
+ _index: number;
39
+ };
40
+ export declare type TopoJSONMapClusterDatum<D> = Partial<D> & {
41
+ cluster?: boolean;
42
+ clusterId?: number;
43
+ pointCount?: number;
44
+ pointCountAbbreviated?: string;
45
+ clusterPoints?: D[];
46
+ clusterIndex?: Supercluster<D>;
47
+ };
48
+ export declare type TopoJSONMapPoint<D> = {
49
+ geometry: GeoJSON.Point;
50
+ bbox: {
51
+ x1: number;
52
+ x2: number;
53
+ y1: number;
54
+ y2: number;
55
+ };
56
+ radius: number;
57
+ path: string;
58
+ color: string;
59
+ id: number | string;
60
+ properties: TopoJSONMapPointDatum<D> | TopoJSONMapClusterDatum<D>;
61
+ donutData: TopoJSONMapPieDatum[];
62
+ isCluster: boolean;
63
+ clusterIndex?: Supercluster<D>;
64
+ _zIndex: number;
65
+ };
66
+ export interface FlowParticle {
67
+ source: {
68
+ lat: number;
69
+ lon: number;
70
+ };
71
+ target: {
72
+ lat: number;
73
+ lon: number;
74
+ };
75
+ location: {
76
+ lat: number;
77
+ lon: number;
78
+ };
79
+ velocity: number;
80
+ x: number;
81
+ y: number;
82
+ radius: number;
83
+ color: string;
84
+ flowData: any;
85
+ progress: number;
86
+ id: string;
87
+ }
88
+ export interface FlowSourcePoint {
89
+ lat: number;
90
+ lon: number;
91
+ x: number;
92
+ y: number;
93
+ radius: number;
94
+ color: string;
95
+ flowData: any;
96
+ }
15
97
  export declare enum MapProjectionKind {
16
98
  Mercator = "Mercator",
17
99
  Equirectangular = "Equirectangular",
@@ -6,6 +6,13 @@ var MapPointLabelPosition;
6
6
  MapPointLabelPosition["Center"] = "center";
7
7
  MapPointLabelPosition["Bottom"] = "bottom";
8
8
  })(MapPointLabelPosition || (MapPointLabelPosition = {}));
9
+ var TopoJSONMapPointShape;
10
+ (function (TopoJSONMapPointShape) {
11
+ TopoJSONMapPointShape["Square"] = "square";
12
+ TopoJSONMapPointShape["Circle"] = "circle";
13
+ TopoJSONMapPointShape["Triangle"] = "triangle";
14
+ TopoJSONMapPointShape["Ring"] = "ring";
15
+ })(TopoJSONMapPointShape || (TopoJSONMapPointShape = {}));
9
16
  var MapProjectionKind;
10
17
  (function (MapProjectionKind) {
11
18
  // Projections form `d3-geo`
@@ -76,5 +83,5 @@ const MapProjection = {
76
83
  [MapProjectionKind.Robinson]: geoRobinson,
77
84
  };
78
85
 
79
- export { MapPointLabelPosition, MapProjection, MapProjectionKind };
86
+ export { MapPointLabelPosition, MapProjection, MapProjectionKind, TopoJSONMapPointShape };
80
87
  //# sourceMappingURL=types.js.map