@validationcloud/fractal-ui 1.77.0 → 1.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +20 -0
  2. package/dist/charts.d.ts +2 -0
  3. package/dist/charts.js +29 -20
  4. package/dist/components/dropdown-menu/dropdown-menu.js +34 -26
  5. package/dist/components/echarts-renderer/geo/africa-countries.json.d.ts +2463 -0
  6. package/dist/components/echarts-renderer/geo/africa-countries.json.js +9 -0
  7. package/dist/components/echarts-renderer/geo/americas-countries.json.d.ts +4160 -0
  8. package/dist/components/echarts-renderer/geo/americas-countries.json.js +9 -0
  9. package/dist/components/echarts-renderer/geo/asia-countries.json.d.ts +4297 -0
  10. package/dist/components/echarts-renderer/geo/asia-countries.json.js +9 -0
  11. package/dist/components/echarts-renderer/geo/europe-countries.json.d.ts +2486 -0
  12. package/dist/components/echarts-renderer/geo/europe-countries.json.js +9 -0
  13. package/dist/components/echarts-renderer/geo/us-states.json.d.ts +1338 -0
  14. package/dist/components/echarts-renderer/geo/us-states.json.js +9 -0
  15. package/dist/components/echarts-renderer/geo/world-continents.json.d.ts +10639 -0
  16. package/dist/components/echarts-renderer/geo/world-continents.json.js +9 -0
  17. package/dist/components/echarts-renderer/geo/world-countries.json.d.ts +14549 -0
  18. package/dist/components/echarts-renderer/geo/world-countries.json.js +9 -0
  19. package/dist/components/echarts-renderer/geo/world-regions.json.d.ts +10621 -0
  20. package/dist/components/echarts-renderer/geo/world-regions.json.js +9 -0
  21. package/dist/components/echarts-renderer/map-centers.d.ts +1 -0
  22. package/dist/components/echarts-renderer/map-centers.js +13 -0
  23. package/dist/components/echarts-renderer/map-style.d.ts +12 -0
  24. package/dist/components/echarts-renderer/map-style.js +12 -0
  25. package/dist/components/echarts-renderer/mavrik-theme-horizontal.json.d.ts +36 -0
  26. package/dist/components/echarts-renderer/mavrik-theme-horizontal.json.js +26 -22
  27. package/dist/components/echarts-renderer/mavrik-theme.json.d.ts +36 -0
  28. package/dist/components/echarts-renderer/mavrik-theme.json.js +26 -22
  29. package/dist/components/echarts-renderer/natural-earth-projection.d.ts +29 -0
  30. package/dist/components/echarts-renderer/natural-earth-projection.js +64 -0
  31. package/dist/components/echarts-renderer/register-map.d.ts +24 -0
  32. package/dist/components/echarts-renderer/register-map.js +62 -0
  33. package/dist/components/echarts-renderer/sanitize-chart-options.d.ts +2 -2
  34. package/dist/components/echarts-renderer/sanitize-chart-options.js +28 -5
  35. package/dist/components/echarts-renderer/use-chart-instance.js +38 -36
  36. package/dist/hooks/use-scroll-to-bottom.d.ts +4 -3
  37. package/dist/lib/render-chart-to-image.js +72 -43
  38. package/dist/maps.json +438 -0
  39. package/package.json +22 -4
@@ -1,39 +1,43 @@
1
- const M = [{ type: "linear", x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: "#C14E64" }, { offset: 1, color: "#DE7385" }] }, "#00BBFA", "#0072B2", "#E69F00", "#D66119", "#56B4E9", "#45B26B", "#F0E442", "#FF99BF", "#8277D8"], L = "#1A1D1F", N = { fontFamily: "Poppins, sans-serif", fontWeight: 500 }, j = { top: 32, left: 32, textStyle: { color: "#FFFFFF", fontSize: 16, fontWeight: 600 }, subtextStyle: { color: "#A7A9AD" } }, A = { itemStyle: { borderWidth: 1 }, lineStyle: { width: 2 }, areaStyle: { opacity: 0.15 }, showSymbol: !1, symbolSize: 5, symbol: "circle", smooth: !1, sampling: "lttb" }, D = { barGap: "25%", barCategoryGap: "25%" }, g = { axisLine: { show: !0, lineStyle: { color: "#3A3D46", type: "dashed" } }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !1 } }, u = { axisLine: { show: !1 }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !0, lineStyle: { color: ["#3A3D46"], type: "dashed" } } }, I = { axisLine: { show: !1 }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !0, lineStyle: { color: ["#3A3D46"], type: "dashed" } } }, t = { axisLine: { show: !0, lineStyle: { color: "#3A3D46" } }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !1 } }, y = { top: 82, left: "auto", right: 32, icon: "circle", itemGap: 22, itemWidth: 12, itemHeight: 12, textStyle: { color: "#A7A9AD", fontSize: 11 } }, T = { top: 132, left: 32, right: 32, bottom: 32, outerBoundsMode: "same", outerBoundsContain: "axisLabel" }, S = { backgroundColor: "rgba(26, 29, 31, 0)", borderColor: "#3A3D46", borderRadius: 4, dataBackground: { lineStyle: { color: "#606060", width: 1 }, areaStyle: { color: "rgba(96, 96, 96, 0.3)" } }, selectedDataBackground: { lineStyle: { color: "#b36674", width: 1 }, areaStyle: { color: "rgba(164, 91, 105, 0.5)" } }, fillerColor: "rgba(82, 45, 52, 0.35)", handleStyle: { color: "#C14E64", borderColor: "#C14E64" }, moveHandleStyle: { color: "#b36674" }, brushStyle: { color: "rgba(95, 58, 65, 0.2)" }, emphasis: { handleStyle: { color: "rgb(209, 123, 140)", borderColor: "rgb(209, 123, 140)" } }, handleSize: "100%", textStyle: { color: "#A7A9AD" } }, i = { color: ["#C14E64", "#00BBFA", "#0072B2", "#E69F00", "#D66119", "#56B4E9", "#45B26B", "#F0E442", "#FF99BF", "#8277D8"], left: 140, right: 140, top: 82, bottom: 32, nodeWidth: 20, nodeGap: 40, layoutIterations: 32, draggable: !1, emphasis: { focus: "adjacency" }, label: { show: !0, formatter: "{b}", color: "#FCFCFC", fontSize: 11, width: 100, overflow: "truncate", ellipsis: "..." }, edgeLabel: { show: !1, fontSize: 9, color: "#A7A9AD", backgroundColor: "rgba(26, 29, 31, 0.85)", padding: [2, 6], borderRadius: 3 }, lineStyle: { color: "gradient", opacity: 0.4, curveness: 0.5 }, itemStyle: { borderWidth: 0 }, levels: [{ depth: 0, itemStyle: { color: "#C14E64" }, lineStyle: { color: "gradient", opacity: 0.4 } }, { depth: 1, itemStyle: { color: "#56B4E9" }, lineStyle: { color: "gradient", opacity: 0.4 } }, { depth: 2, itemStyle: { color: "#0072B2" }, lineStyle: { color: "gradient", opacity: 0.4 } }] }, z = { label: { color: "#A7A9AD" }, emphasis: { label: { color: "#FFFFFF" } } }, o = { confine: !0, backgroundColor: "transparent", padding: 10, borderRadius: 8, borderColor: "#50525A", borderWidth: 1, textStyle: { color: "#FCFCFC", fontFamily: "Poppins, sans-serif", fontSize: 11, fontStyle: "normal", fontWeight: 500 }, extraCssText: "letter-spacing: 0.22px; box-shadow: 0 14px 11px -4px rgba(0, 0, 0, 0.30), 0 -4px 4px 0 rgba(0, 0, 0, 0.04) inset; background: radial-gradient(ellipse at 25% 0%, rgba(217, 217, 217, 0.12) 0%, transparent 60%), #1A1D1F;" }, e = { type: "image", id: "fractal-watermark", left: "center", top: "middle", style: { image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTAiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMTAgMjQiPgogIDxnIGZpbGw9IiNhN2E5YWQiIGZpbGwtb3BhY2l0eT0iMC4zIj4KICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjczMyAxLjg2OGgtMjEuNjdDNi40MzggMS44NjggMS44NzggNi40MDQgMS44NzggMTJzNC41NiAxMC4xMzIgMTAuMTg1IDEwLjEzMmgyMS42N2M1LjYyNSAwIDEwLjE4NS00LjUzNiAxMC4xODUtMTAuMTMyUzM5LjM1OCAxLjg2OCAzMy43MzMgMS44NjhNMCAxMmMwIDYuNjI3IDUuNCAxMiAxMi4wNjMgMTJoMjEuNjdjNi42NjIgMCAxMi4wNjMtNS4zNzMgMTIuMDYzLTEycy01LjQtMTItMTIuMDYzLTEyaC0yMS42N0M1LjQwMSAwIDAgNS4zNzMgMCAxMiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy43MzQgNS4xNzRoLTIxLjY3QzguMjczIDUuMTc0IDUuMiA4LjIzIDUuMiAxMnMzLjA3MyA2LjgyNiA2Ljg2MyA2LjgyNmgyMS42N2MzLjc5IDAgNi44NjItMy4wNTYgNi44NjItNi44MjZzLTMuMDcyLTYuODI2LTYuODYyLTYuODI2TTMuMzIzIDEyYzAgNC44MDIgMy45MTIgOC42OTUgOC43NCA4LjY5NWgyMS42N2M0LjgyNyAwIDguNzQtMy44OTMgOC43NC04LjY5NXMtMy45MTMtOC42OTUtOC43NC04LjY5NWgtMjEuNjdjLTQuODI4IDAtOC43NCAzLjg5My04Ljc0IDguNjk1IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjczMyA4LjQ4aC0yMS42N0EzLjUzIDMuNTMgMCAwIDAgOC41MjMgMTJhMy41MyAzLjUzIDAgMCAwIDMuNTQgMy41MjFoMjEuNjdhMy41MyAzLjUzIDAgMCAwIDMuNTQtMy41MiAzLjUzIDMuNTMgMCAwIDAtMy41NC0zLjUyMk02LjY0NiAxMmMwIDIuOTc2IDIuNDI1IDUuMzkgNS40MTcgNS4zOWgyMS42N2MyLjk5MiAwIDUuNDE4LTIuNDE0IDUuNDE4LTUuMzlzLTIuNDI2LTUuMzktNS40MTgtNS4zOWgtMjEuNjdjLTIuOTkyIDAtNS40MTcgMi40MTQtNS40MTcgNS4zOSIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICA8cGF0aCBkPSJNNTguNDUgMjAuNjk1aC0yLjc3TDQ4LjU5MiAzLjMyN2gyLjdsNS43NzMgMTQuNTQyIDUuNzczLTE0LjU0MmgyLjd6TTczLjk4NiAyMC42OTVoLTIuMDZsLS4xNC0xLjQ4MnEtLjY0LjgxLTEuNjE3IDEuMjYyLS45NzguNDUtMi4xNjUuNDUxLTEuMjQ2IDAtMi4yMjMtLjQ4NmEzLjg2IDMuODYgMCAwIDEtMS41MzctMS4zMzIgMy40IDMuNCAwIDAgMS0uNTU5LTEuOTIycTAtMS4xMzQuNjA2LTEuOTkxLjYwNS0uODY4IDEuNjUzLTEuMzU1IDEuMDQ3LS40OTggMi4zODYtLjQ5OC44MzggMCAxLjY5OS4xOTdhNi42IDYuNiAwIDAgMSAxLjU3MS41NTZ2LS40MjlxMC0uODQ0LS40NDItMS40NDdhMi43IDIuNyAwIDAgMC0xLjE4Ny0uOTM4IDQuMSA0LjEgMCAwIDAtMS42NTMtLjMyNHEtLjgwMiAwLTEuNjQxLjI3OC0uODI2LjI3Ny0xLjU2Ljg1N2wtLjcyMS0xLjkzNGE5LjMgOS4zIDAgMCAxIDIuMi0uOTUgOC4zIDguMyAwIDAgMSAyLjI1Ny0uMzIzcTEuNTgzIDAgMi43MjQuNjI1YTQuMzUgNC4zNSAwIDAgMSAxLjc4IDEuNzgzcS42MyAxLjE0Ni42MyAyLjcxem0tNS41MTctMS43ODNxLjgyNyAwIDEuNTI1LS4zMzZhMi45MyAyLjkzIDAgMCAwIDEuMTI5LS45NzNxLjQ0Mi0uNjM2LjQ3Ny0xLjQ4MnYtLjE2MmE0LjcgNC43IDAgMCAwLTEuMzM4LS42ODMgNC42IDQuNiAwIDAgMC0xLjUwMi0uMjU1cS0xLjE3NiAwLTEuOTU1LjU1Ni0uNzguNTU1LS43OCAxLjQyNCAwIC41NDQuMzE0Ljk4NC4zMjYuNDMuODczLjY4My41Ni4yNDQgMS4yNTcuMjQ0TTc3Ljk4OCAyMC42OTVoLTIuNTRWMi44NjRoMi41NHpNODAuNjY2IDUuNzU4cS0uNTQ4IDAtLjkyLS4zODJhMS4yOCAxLjI4IDAgMCAxLS4zNzMtLjkyNnEwLS41NDUuMzczLS45MTUuMzcyLS4zODIuOTItLjM4Mi41NiAwIC45MzIuMzgyLjM4NS4zNy4zODUuOTE1dC0uMzg1LjkyNnEtLjM3My4zODItLjkzMi4zODJtMS4xODggMTQuOTM3aC0yLjM4OFY5LjExNmgyLjM4OHpNOTUuNjI4IDIwLjY5NUg5My41MmwtLjEyOC0xLjY1NmE1LjcgNS43IDAgMCAxLTEuOTA5IDEuMzlxLTEuMTA2LjQ5Ny0yLjQzMi40OTctMS42NzcgMC0zLjAwMy0uNzg3YTUuNyA1LjcgMCAwIDEtMi4wOTUtMi4xNTRxLS43NTctMS4zNjUtLjc1Ny0zLjA4IDAtMS43MjQuNzU3LTMuMDhhNS43IDUuNyAwIDAgMSAyLjA5NS0yLjE1M3ExLjMyNi0uNzg3IDMuMDAzLS43ODcgMS4yNTcgMCAyLjMyOC40NTFhNS41IDUuNSAwIDAgMSAxLjg2MiAxLjI2MlYzLjMyN2gyLjM4NnptLTYuMTgtMS45cTEuMDU5IDAgMS45MDgtLjQ4NmEzLjc1IDMuNzUgMCAwIDAgMS4zNzQtMS4zMnEuNTEyLS44MzMuNTEyLTEuODk4di0uMzk0cTAtMS4wNjUtLjUxMi0xLjg5OWEzLjY2IDMuNjYgMCAwIDAtMS4zNzQtMS4zMDhxLS44NS0uNDc1LTEuOTA4LS40NzUtMS4wODMgMC0xLjk0NC41MWEzLjcgMy43IDAgMCAwLTEuMzYyIDEuMzg5cS0uNS44NjktLjUgMS45OHQuNSAxLjk5MWEzLjggMy44IDAgMCAwIDEuMzYyIDEuNDAxcS44NjEuNTEgMS45NDQuNTFNMTA3LjI2OSAyMC42OTVoLTIuMDYxbC0uMTM5LTEuNDgycS0uNjQuODEtMS42MTggMS4yNjItLjk3OC40NS0yLjE2NS40NTEtMS4yNDUgMC0yLjIyMy0uNDg2YTMuODYgMy44NiAwIDAgMS0xLjUzNi0xLjMzMiAzLjQgMy40IDAgMCAxLS41Ni0xLjkyMnEwLTEuMTM0LjYwNi0xLjk5MS42MDUtLjg2OCAxLjY1My0xLjM1NSAxLjA0Ny0uNDk4IDIuMzg2LS40OThhNy42IDcuNiAwIDAgMSAxLjY5OS4xOTcgNi42IDYuNiAwIDAgMSAxLjU3MS41NTZ2LS40MjlxMC0uODQ0LS40NDItMS40NDdhMi43IDIuNyAwIDAgMC0xLjE4Ny0uOTM4IDQuMSA0LjEgMCAwIDAtMS42NTMtLjMyNCA1LjE2NiA1LjE2NiAwIDAgMC0zLjIgMS4xMzVsLS43MjItMS45MzRhOS4zIDkuMyAwIDAgMSAyLjItLjk1IDguMyA4LjMgMCAwIDEgMi4yNTgtLjMyM3ExLjU4MyAwIDIuNzIzLjYyNWE0LjM1IDQuMzUgMCAwIDEgMS43ODEgMS43ODNxLjYyOSAxLjE0Ni42MjkgMi43MXptLTUuNTE3LTEuNzgzcS44MjYgMCAxLjUyNC0uMzM2YTIuOSAyLjkgMCAwIDAgMS4xMjktLjk3M3EuNDQyLS42MzYuNDc3LTEuNDgydi0uMTYyYTQuNiA0LjYgMCAwIDAtMS4zMzgtLjY4MyA0LjYgNC42IDAgMCAwLTEuNTAyLS4yNTVxLTEuMTc1IDAtMS45NTUuNTU2LS43OC41NTUtLjc4IDEuNDI0IDAgLjU0NC4zMTQuOTg0LjMyNy40My44NzMuNjgzLjU2LjI0NCAxLjI1OC4yNDRNMTE2LjQyNCAyMC40MDVxLTEuMjIxLjUyMS0yLjM2Mi41MjF0LTIuMDAyLS40ODZhMy41IDMuNSAwIDAgMS0xLjMzOS0xLjM2NnEtLjQ3Ny0uODkyLS40NzctMi4wNXYtNS43ODloLTIuMDM3VjkuMTE2aDIuMTUzVjYuMjIyaDIuMjd2Mi44OTRoMy4zOTl2Mi4xMTloLTMuMzk5djUuMzVxMCAxLjAxOC41NDcgMS42Mi41NTguNTkgMS40MzIuNTkuNzM0IDAgMS40NTUtLjQ0ek0xMTguNTggNS43NThxLS41NDggMC0uOTItLjM4MmExLjI4IDEuMjggMCAwIDEtLjM3My0uOTI2cTAtLjU0NS4zNzMtLjkxNS4zNzItLjM4Mi45Mi0uMzgyLjU2IDAgLjkzMi4zODIuMzg1LjM3LjM4NS45MTV0LS4zODUuOTI2YTEuMjUgMS4yNSAwIDAgMS0uOTMyLjM4Mm0xLjE4OCAxNC45MzdoLTIuMzg4VjkuMTE2aDIuMzg4ek0xMjcuMjU3IDIwLjkyNnEtMS43NDYgMC0zLjE0My0uNzg3YTUuODUgNS44NSAwIDAgMS0yLjItMi4xNDJxLS44MDMtMS4zNjYtLjgwMy0zLjA5MiAwLTEuNzEzLjgwMy0zLjA2OGE1LjggNS44IDAgMCAxIDIuMi0yLjE1M3ExLjM5Ny0uOCAzLjE0My0uOCAxLjc1NyAwIDMuMTQyLjhhNS43NiA1Ljc2IDAgMCAxIDIuMTc3IDIuMTUzcS44MDMgMS4zNTUuODAzIDMuMDY4IDAgMS43MjUtLjgwMyAzLjA5MmE1LjggNS44IDAgMCAxLTIuMTc3IDIuMTQycS0xLjM4NS43ODctMy4xNDIuNzg3bS0uMDEyLTIuMTNxMS4wNiAwIDEuODg2LS41MWEzLjcgMy43IDAgMCAwIDEuMzE1LTEuMzlxLjQ4OS0uODguNDg5LTIuMDAyIDAtMS4xLS40ODktMS45NjlhMy42IDMuNiAwIDAgMC0xLjMxNS0xLjM4OXEtLjgyNy0uNTItMS44ODYtLjUyLTEuMDQ3IDAtMS44ODUuNTJhMy43IDMuNyAwIDAgMC0xLjMyNyAxLjM5cS0uNDc3Ljg2OC0uNDc3IDEuOTY4IDAgMS4xMjMuNDc3IDIuMDAzYTMuOCAzLjggMCAwIDAgMS4zMjcgMS4zOXEuODM3LjUwOSAxLjg4NS41MDlNMTQ1LjgxNiAyMC42OTVoLTIuMzg2di02LjI4N3EwLTEuNTQtLjg0OS0yLjQ1NS0uODM5LS45MTUtMi4yNTgtLjkxNS0xLjQ2NiAwLTIuMzYzLjk3My0uODk2Ljk3Mi0uODk2IDIuNTgydjYuMTAyaC0yLjM4NlY5LjExNmgyLjAxM2wuMDgyIDEuODY0YTQuMjUgNC4yNSAwIDAgMSAxLjY3Ni0xLjU1MXExLjAzNS0uNTQ0IDIuNDMyLS41NDQgMi4yOTQgMCAzLjYwOSAxLjM3NyAxLjMyNiAxLjM3OSAxLjMyNiAzLjc5OHpNMTY2LjE3OCAxOC40ODNhOC43IDguNyAwIDAgMS0yLjg4OCAxLjg4N3EtMS42NjQuNjcyLTMuNjMxLjY3MnQtMy42MzItLjY3MmE4LjcgOC43IDAgMCAxLTIuODk4LTEuODg3IDguOSA4LjkgMCAwIDEtMS45MDgtMi44NzFxLS42NzYtMS42NTYtLjY3Ni0zLjYwMSAwLTEuOTU3LjY3Ni0zLjYwMWE4LjcgOC43IDAgMCAxIDEuOTA4LTIuODcyIDguNyA4LjcgMCAwIDEgMi44OTgtMS44ODdxMS42NjUtLjY3MSAzLjYzMi0uNjcxIDEuOTU1IDAgMy42MTkuNjgzIDEuNjc3LjY3MSAyLjg3NSAxLjg2NGwtMS43OCAxLjgwNmE2LjIgNi4yIDAgMCAwLTIuMDk0LTEuNTRxLTEuMjEyLS41NjctMi42NTQtLjU2Ny0xLjM5NyAwLTIuNTczLjUxYTYgNiAwIDAgMC0yLjA0OSAxLjQyMyA2LjYgNi42IDAgMCAwLTEuMzYxIDIuMTU0cS0uNDc4IDEuMjM5LS40NzggMi42OTh0LjQ3OCAyLjY5OGE2LjcgNi43IDAgMCAwIDEuMzYxIDIuMTY1IDYuMiA2LjIgMCAwIDAgMi4wNDkgMS40MjRxMS4xNzUuNDk4IDIuNTczLjQ5OCAxLjQ0MiAwIDIuNjU0LS41NTZhNi4yIDYuMiAwIDAgMCAyLjA4My0xLjU1MnpNMTcwLjA5MiAyMC42OTVoLTIuNTRWMi44NjRoMi41NHpNMTc3LjUzNCAyMC45MjZxLTEuNzQ1IDAtMy4xNDMtLjc4N2E1Ljg0IDUuODQgMCAwIDEtMi4xOTktMi4xNDJxLS44MDMtMS4zNjYtLjgwMy0zLjA5MiAwLTEuNzEzLjgwMy0zLjA2OGE1LjggNS44IDAgMCAxIDIuMTk5LTIuMTUzcTEuMzk4LS44IDMuMTQzLS44IDEuNzU4IDAgMy4xNDIuOGE1Ljc1IDUuNzUgMCAwIDEgMi4xNzYgMi4xNTNxLjgwNCAxLjM1NS44MDMgMy4wNjggMCAxLjcyNS0uODAzIDMuMDkyYTUuOCA1LjggMCAwIDEtMi4xNzYgMi4xNDJxLTEuMzg0Ljc4Ny0zLjE0Mi43ODdtLS4wMTMtMi4xM3ExLjA2IDAgMS44ODctLjUxYTMuNyAzLjcgMCAwIDAgMS4zMTUtMS4zOXEuNDg4LS44OC40ODgtMi4wMDIgMC0xLjEtLjQ4OC0xLjk2OWEzLjYgMy42IDAgMCAwLTEuMzE1LTEuMzg5cS0uODI3LS41Mi0xLjg4Ny0uNTJhMy41IDMuNSAwIDAgMC0xLjg4NS41MiAzLjcgMy43IDAgMCAwLTEuMzI2IDEuMzlxLS40NzcuODY4LS40NzcgMS45NjggMCAxLjEyMy40NzcgMi4wMDNhMy44IDMuOCAwIDAgMCAxLjMyNiAxLjM5IDMuNTYgMy41NiAwIDAgMCAxLjg4NS41MDlNMTk2LjEgMjAuNjk1aC0yLjAyNmwtLjA4Mi0xLjg2NHEtLjY0IDEuMDE4LTEuNjc2IDEuNTYzLTEuMDI1LjUzMi0yLjQzMy41MzItMi4yOCAwLTMuNjA3LTEuMzc4LTEuMzE2LTEuMzktMS4zMTYtMy43OTdWOS4xMTZoMi4zODd2Ni4yODdxMCAxLjU0LjgzNyAyLjQ1NS44NC45MTUgMi4yNTguOTE1IDEuNDY4IDAgMi4zNjQtLjk3My45MDctLjk4NC45MDctMi41ODJWOS4xMTZoMi4zODd6TTIwOS44NCAyMC42OTVoLTIuMTA2bC0uMTI5LTEuNjU2YTUuNyA1LjcgMCAwIDEtMS45MDggMS4zOXEtMS4xMDUuNDk3LTIuNDMzLjQ5Ny0xLjY3NiAwLTMuMDAyLS43ODdhNS43IDUuNyAwIDAgMS0yLjA5Ni0yLjE1NHEtLjc1Ni0xLjM2NS0uNzU2LTMuMDggMC0xLjcyNC43NTYtMy4wOGE1LjcgNS43IDAgMCAxIDIuMDk2LTIuMTUzcTEuMzI2LS43ODcgMy4wMDItLjc4NyAxLjI1NyAwIDIuMzI5LjQ1MWE1LjUgNS41IDAgMCAxIDEuODYyIDEuMjYyVjMuMzI3aDIuMzg1em0tNi4xOC0xLjlxMS4wNTkgMCAxLjkwOC0uNDg2YTMuNzQgMy43NCAwIDAgMCAxLjM3NC0xLjMycS41MTItLjgzMy41MTMtMS44OTh2LS4zOTRxMC0xLjA2NS0uNTEzLTEuODk5YTMuNjUgMy42NSAwIDAgMC0xLjM3NC0xLjMwOHEtLjg0OS0uNDc1LTEuOTA4LS40NzUtMS4wODIgMC0xLjk0My41MWEzLjcgMy43IDAgMCAwLTEuMzYzIDEuMzg5cS0uNS44NjktLjQ5OSAxLjk4IDAgMS4xMTEuNDk5IDEuOTkxYTMuOCAzLjggMCAwIDAgMS4zNjMgMS40MDFxLjg2LjUxIDEuOTQzLjUxIi8+CiAgPC9nPgo8L3N2Zz4=", width: 210, height: 24 }, z: 100, silent: !0 }, x = {
1
+ const M = [{ type: "linear", x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: "#C14E64" }, { offset: 1, color: "#DE7385" }] }, "#00BBFA", "#0072B2", "#E69F00", "#D66119", "#56B4E9", "#45B26B", "#F0E442", "#FF99BF", "#8277D8"], L = "#1A1D1F", N = { fontFamily: "Poppins, sans-serif", fontWeight: 500 }, j = { top: 32, left: 32, textStyle: { color: "#FFFFFF", fontSize: 16, fontWeight: 600 }, subtextStyle: { color: "#A7A9AD" } }, D = { itemStyle: { borderWidth: 1 }, lineStyle: { width: 2 }, areaStyle: { opacity: 0.15 }, showSymbol: !1, symbolSize: 5, symbol: "circle", smooth: !1, sampling: "lttb" }, A = { barGap: "25%", barCategoryGap: "25%" }, g = { axisLine: { show: !0, lineStyle: { color: "#3A3D46", type: "dashed" } }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !1 } }, t = { axisLine: { show: !1 }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !0, lineStyle: { color: ["#3A3D46"], type: "dashed" } } }, u = { axisLine: { show: !1 }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !0, lineStyle: { color: ["#3A3D46"], type: "dashed" } } }, I = { axisLine: { show: !0, lineStyle: { color: "#3A3D46" } }, axisTick: { show: !1 }, axisLabel: { show: !0, color: "#A7A9AD", hideOverlap: !0 }, nameLocation: "middle", nameTextStyle: { color: "#A7A9AD", fontSize: 11, fontWeight: 400 }, splitLine: { show: !1 } }, y = { top: 82, left: "auto", right: 32, icon: "circle", itemGap: 22, itemWidth: 12, itemHeight: 12, textStyle: { color: "#A7A9AD", fontSize: 11 } }, T = { top: 132, left: 32, right: 32, bottom: 32, outerBoundsMode: "same", outerBoundsContain: "axisLabel" }, i = { backgroundColor: "rgba(26, 29, 31, 0)", borderColor: "#3A3D46", borderRadius: 4, dataBackground: { lineStyle: { color: "#606060", width: 1 }, areaStyle: { color: "rgba(96, 96, 96, 0.3)" } }, selectedDataBackground: { lineStyle: { color: "#b36674", width: 1 }, areaStyle: { color: "rgba(164, 91, 105, 0.5)" } }, fillerColor: "rgba(82, 45, 52, 0.35)", handleStyle: { color: "#C14E64", borderColor: "#C14E64" }, moveHandleStyle: { color: "#b36674" }, brushStyle: { color: "rgba(95, 58, 65, 0.2)" }, emphasis: { handleStyle: { color: "rgb(209, 123, 140)", borderColor: "rgb(209, 123, 140)" } }, handleSize: "100%", textStyle: { color: "#A7A9AD" } }, S = { color: ["#C14E64", "#00BBFA", "#0072B2", "#E69F00", "#D66119", "#56B4E9", "#45B26B", "#F0E442", "#FF99BF", "#8277D8"], left: 140, right: 140, top: 82, bottom: 32, nodeWidth: 20, nodeGap: 40, layoutIterations: 32, draggable: !1, emphasis: { focus: "adjacency" }, label: { show: !0, formatter: "{b}", color: "#FCFCFC", fontSize: 11, width: 100, overflow: "truncate", ellipsis: "..." }, edgeLabel: { show: !1, fontSize: 9, color: "#A7A9AD", backgroundColor: "rgba(26, 29, 31, 0.85)", padding: [2, 6], borderRadius: 3 }, lineStyle: { color: "gradient", opacity: 0.4, curveness: 0.5 }, itemStyle: { borderWidth: 0 }, levels: [{ depth: 0, itemStyle: { color: "#C14E64" }, lineStyle: { color: "gradient", opacity: 0.4 } }, { depth: 1, itemStyle: { color: "#56B4E9" }, lineStyle: { color: "gradient", opacity: 0.4 } }, { depth: 2, itemStyle: { color: "#0072B2" }, lineStyle: { color: "gradient", opacity: 0.4 } }] }, z = { itemStyle: { areaColor: "#413E3D", borderColor: "#2A2726", borderWidth: 0.5 }, label: { show: !1 }, emphasis: { label: { show: !1 }, itemStyle: { areaColor: "#524E4D" } } }, e = { itemStyle: { areaColor: "#413E3D", borderColor: "#2A2726", borderWidth: 0.5 }, label: { show: !1 }, emphasis: { label: { show: !1 }, itemStyle: { areaColor: "#524E4D" } } }, o = { label: { color: "#A7A9AD" }, emphasis: { label: { color: "#FFFFFF" } } }, x = { confine: !0, backgroundColor: "transparent", padding: 10, borderRadius: 8, borderColor: "#50525A", borderWidth: 1, textStyle: { color: "#FCFCFC", fontFamily: "Poppins, sans-serif", fontSize: 11, fontStyle: "normal", fontWeight: 500 }, extraCssText: "letter-spacing: 0.22px; box-shadow: 0 14px 11px -4px rgba(0, 0, 0, 0.30), 0 -4px 4px 0 rgba(0, 0, 0, 0.04) inset; background: radial-gradient(ellipse at 25% 0%, rgba(217, 217, 217, 0.12) 0%, transparent 60%), #1A1D1F;" }, C = { type: "image", id: "fractal-watermark", left: "center", top: "middle", style: { image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTAiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMTAgMjQiPgogIDxnIGZpbGw9IiNhN2E5YWQiIGZpbGwtb3BhY2l0eT0iMC4zIj4KICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjczMyAxLjg2OGgtMjEuNjdDNi40MzggMS44NjggMS44NzggNi40MDQgMS44NzggMTJzNC41NiAxMC4xMzIgMTAuMTg1IDEwLjEzMmgyMS42N2M1LjYyNSAwIDEwLjE4NS00LjUzNiAxMC4xODUtMTAuMTMyUzM5LjM1OCAxLjg2OCAzMy43MzMgMS44NjhNMCAxMmMwIDYuNjI3IDUuNCAxMiAxMi4wNjMgMTJoMjEuNjdjNi42NjIgMCAxMi4wNjMtNS4zNzMgMTIuMDYzLTEycy01LjQtMTItMTIuMDYzLTEyaC0yMS42N0M1LjQwMSAwIDAgNS4zNzMgMCAxMiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy43MzQgNS4xNzRoLTIxLjY3QzguMjczIDUuMTc0IDUuMiA4LjIzIDUuMiAxMnMzLjA3MyA2LjgyNiA2Ljg2MyA2LjgyNmgyMS42N2MzLjc5IDAgNi44NjItMy4wNTYgNi44NjItNi44MjZzLTMuMDcyLTYuODI2LTYuODYyLTYuODI2TTMuMzIzIDEyYzAgNC44MDIgMy45MTIgOC42OTUgOC43NCA4LjY5NWgyMS42N2M0LjgyNyAwIDguNzQtMy44OTMgOC43NC04LjY5NXMtMy45MTMtOC42OTUtOC43NC04LjY5NWgtMjEuNjdjLTQuODI4IDAtOC43NCAzLjg5My04Ljc0IDguNjk1IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjczMyA4LjQ4aC0yMS42N0EzLjUzIDMuNTMgMCAwIDAgOC41MjMgMTJhMy41MyAzLjUzIDAgMCAwIDMuNTQgMy41MjFoMjEuNjdhMy41MyAzLjUzIDAgMCAwIDMuNTQtMy41MiAzLjUzIDMuNTMgMCAwIDAtMy41NC0zLjUyMk02LjY0NiAxMmMwIDIuOTc2IDIuNDI1IDUuMzkgNS40MTcgNS4zOWgyMS42N2MyLjk5MiAwIDUuNDE4LTIuNDE0IDUuNDE4LTUuMzlzLTIuNDI2LTUuMzktNS40MTgtNS4zOWgtMjEuNjdjLTIuOTkyIDAtNS40MTcgMi40MTQtNS40MTcgNS4zOSIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICA8cGF0aCBkPSJNNTguNDUgMjAuNjk1aC0yLjc3TDQ4LjU5MiAzLjMyN2gyLjdsNS43NzMgMTQuNTQyIDUuNzczLTE0LjU0MmgyLjd6TTczLjk4NiAyMC42OTVoLTIuMDZsLS4xNC0xLjQ4MnEtLjY0LjgxLTEuNjE3IDEuMjYyLS45NzguNDUtMi4xNjUuNDUxLTEuMjQ2IDAtMi4yMjMtLjQ4NmEzLjg2IDMuODYgMCAwIDEtMS41MzctMS4zMzIgMy40IDMuNCAwIDAgMS0uNTU5LTEuOTIycTAtMS4xMzQuNjA2LTEuOTkxLjYwNS0uODY4IDEuNjUzLTEuMzU1IDEuMDQ3LS40OTggMi4zODYtLjQ5OC44MzggMCAxLjY5OS4xOTdhNi42IDYuNiAwIDAgMSAxLjU3MS41NTZ2LS40MjlxMC0uODQ0LS40NDItMS40NDdhMi43IDIuNyAwIDAgMC0xLjE4Ny0uOTM4IDQuMSA0LjEgMCAwIDAtMS42NTMtLjMyNHEtLjgwMiAwLTEuNjQxLjI3OC0uODI2LjI3Ny0xLjU2Ljg1N2wtLjcyMS0xLjkzNGE5LjMgOS4zIDAgMCAxIDIuMi0uOTUgOC4zIDguMyAwIDAgMSAyLjI1Ny0uMzIzcTEuNTgzIDAgMi43MjQuNjI1YTQuMzUgNC4zNSAwIDAgMSAxLjc4IDEuNzgzcS42MyAxLjE0Ni42MyAyLjcxem0tNS41MTctMS43ODNxLjgyNyAwIDEuNTI1LS4zMzZhMi45MyAyLjkzIDAgMCAwIDEuMTI5LS45NzNxLjQ0Mi0uNjM2LjQ3Ny0xLjQ4MnYtLjE2MmE0LjcgNC43IDAgMCAwLTEuMzM4LS42ODMgNC42IDQuNiAwIDAgMC0xLjUwMi0uMjU1cS0xLjE3NiAwLTEuOTU1LjU1Ni0uNzguNTU1LS43OCAxLjQyNCAwIC41NDQuMzE0Ljk4NC4zMjYuNDMuODczLjY4My41Ni4yNDQgMS4yNTcuMjQ0TTc3Ljk4OCAyMC42OTVoLTIuNTRWMi44NjRoMi41NHpNODAuNjY2IDUuNzU4cS0uNTQ4IDAtLjkyLS4zODJhMS4yOCAxLjI4IDAgMCAxLS4zNzMtLjkyNnEwLS41NDUuMzczLS45MTUuMzcyLS4zODIuOTItLjM4Mi41NiAwIC45MzIuMzgyLjM4NS4zNy4zODUuOTE1dC0uMzg1LjkyNnEtLjM3My4zODItLjkzMi4zODJtMS4xODggMTQuOTM3aC0yLjM4OFY5LjExNmgyLjM4OHpNOTUuNjI4IDIwLjY5NUg5My41MmwtLjEyOC0xLjY1NmE1LjcgNS43IDAgMCAxLTEuOTA5IDEuMzlxLTEuMTA2LjQ5Ny0yLjQzMi40OTctMS42NzcgMC0zLjAwMy0uNzg3YTUuNyA1LjcgMCAwIDEtMi4wOTUtMi4xNTRxLS43NTctMS4zNjUtLjc1Ny0zLjA4IDAtMS43MjQuNzU3LTMuMDhhNS43IDUuNyAwIDAgMSAyLjA5NS0yLjE1M3ExLjMyNi0uNzg3IDMuMDAzLS43ODcgMS4yNTcgMCAyLjMyOC40NTFhNS41IDUuNSAwIDAgMSAxLjg2MiAxLjI2MlYzLjMyN2gyLjM4NnptLTYuMTgtMS45cTEuMDU5IDAgMS45MDgtLjQ4NmEzLjc1IDMuNzUgMCAwIDAgMS4zNzQtMS4zMnEuNTEyLS44MzMuNTEyLTEuODk4di0uMzk0cTAtMS4wNjUtLjUxMi0xLjg5OWEzLjY2IDMuNjYgMCAwIDAtMS4zNzQtMS4zMDhxLS44NS0uNDc1LTEuOTA4LS40NzUtMS4wODMgMC0xLjk0NC41MWEzLjcgMy43IDAgMCAwLTEuMzYyIDEuMzg5cS0uNS44NjktLjUgMS45OHQuNSAxLjk5MWEzLjggMy44IDAgMCAwIDEuMzYyIDEuNDAxcS44NjEuNTEgMS45NDQuNTFNMTA3LjI2OSAyMC42OTVoLTIuMDYxbC0uMTM5LTEuNDgycS0uNjQuODEtMS42MTggMS4yNjItLjk3OC40NS0yLjE2NS40NTEtMS4yNDUgMC0yLjIyMy0uNDg2YTMuODYgMy44NiAwIDAgMS0xLjUzNi0xLjMzMiAzLjQgMy40IDAgMCAxLS41Ni0xLjkyMnEwLTEuMTM0LjYwNi0xLjk5MS42MDUtLjg2OCAxLjY1My0xLjM1NSAxLjA0Ny0uNDk4IDIuMzg2LS40OThhNy42IDcuNiAwIDAgMSAxLjY5OS4xOTcgNi42IDYuNiAwIDAgMSAxLjU3MS41NTZ2LS40MjlxMC0uODQ0LS40NDItMS40NDdhMi43IDIuNyAwIDAgMC0xLjE4Ny0uOTM4IDQuMSA0LjEgMCAwIDAtMS42NTMtLjMyNCA1LjE2NiA1LjE2NiAwIDAgMC0zLjIgMS4xMzVsLS43MjItMS45MzRhOS4zIDkuMyAwIDAgMSAyLjItLjk1IDguMyA4LjMgMCAwIDEgMi4yNTgtLjMyM3ExLjU4MyAwIDIuNzIzLjYyNWE0LjM1IDQuMzUgMCAwIDEgMS43ODEgMS43ODNxLjYyOSAxLjE0Ni42MjkgMi43MXptLTUuNTE3LTEuNzgzcS44MjYgMCAxLjUyNC0uMzM2YTIuOSAyLjkgMCAwIDAgMS4xMjktLjk3M3EuNDQyLS42MzYuNDc3LTEuNDgydi0uMTYyYTQuNiA0LjYgMCAwIDAtMS4zMzgtLjY4MyA0LjYgNC42IDAgMCAwLTEuNTAyLS4yNTVxLTEuMTc1IDAtMS45NTUuNTU2LS43OC41NTUtLjc4IDEuNDI0IDAgLjU0NC4zMTQuOTg0LjMyNy40My44NzMuNjgzLjU2LjI0NCAxLjI1OC4yNDRNMTE2LjQyNCAyMC40MDVxLTEuMjIxLjUyMS0yLjM2Mi41MjF0LTIuMDAyLS40ODZhMy41IDMuNSAwIDAgMS0xLjMzOS0xLjM2NnEtLjQ3Ny0uODkyLS40NzctMi4wNXYtNS43ODloLTIuMDM3VjkuMTE2aDIuMTUzVjYuMjIyaDIuMjd2Mi44OTRoMy4zOTl2Mi4xMTloLTMuMzk5djUuMzVxMCAxLjAxOC41NDcgMS42Mi41NTguNTkgMS40MzIuNTkuNzM0IDAgMS40NTUtLjQ0ek0xMTguNTggNS43NThxLS41NDggMC0uOTItLjM4MmExLjI4IDEuMjggMCAwIDEtLjM3My0uOTI2cTAtLjU0NS4zNzMtLjkxNS4zNzItLjM4Mi45Mi0uMzgyLjU2IDAgLjkzMi4zODIuMzg1LjM3LjM4NS45MTV0LS4zODUuOTI2YTEuMjUgMS4yNSAwIDAgMS0uOTMyLjM4Mm0xLjE4OCAxNC45MzdoLTIuMzg4VjkuMTE2aDIuMzg4ek0xMjcuMjU3IDIwLjkyNnEtMS43NDYgMC0zLjE0My0uNzg3YTUuODUgNS44NSAwIDAgMS0yLjItMi4xNDJxLS44MDMtMS4zNjYtLjgwMy0zLjA5MiAwLTEuNzEzLjgwMy0zLjA2OGE1LjggNS44IDAgMCAxIDIuMi0yLjE1M3ExLjM5Ny0uOCAzLjE0My0uOCAxLjc1NyAwIDMuMTQyLjhhNS43NiA1Ljc2IDAgMCAxIDIuMTc3IDIuMTUzcS44MDMgMS4zNTUuODAzIDMuMDY4IDAgMS43MjUtLjgwMyAzLjA5MmE1LjggNS44IDAgMCAxLTIuMTc3IDIuMTQycS0xLjM4NS43ODctMy4xNDIuNzg3bS0uMDEyLTIuMTNxMS4wNiAwIDEuODg2LS41MWEzLjcgMy43IDAgMCAwIDEuMzE1LTEuMzlxLjQ4OS0uODguNDg5LTIuMDAyIDAtMS4xLS40ODktMS45NjlhMy42IDMuNiAwIDAgMC0xLjMxNS0xLjM4OXEtLjgyNy0uNTItMS44ODYtLjUyLTEuMDQ3IDAtMS44ODUuNTJhMy43IDMuNyAwIDAgMC0xLjMyNyAxLjM5cS0uNDc3Ljg2OC0uNDc3IDEuOTY4IDAgMS4xMjMuNDc3IDIuMDAzYTMuOCAzLjggMCAwIDAgMS4zMjcgMS4zOXEuODM3LjUwOSAxLjg4NS41MDlNMTQ1LjgxNiAyMC42OTVoLTIuMzg2di02LjI4N3EwLTEuNTQtLjg0OS0yLjQ1NS0uODM5LS45MTUtMi4yNTgtLjkxNS0xLjQ2NiAwLTIuMzYzLjk3My0uODk2Ljk3Mi0uODk2IDIuNTgydjYuMTAyaC0yLjM4NlY5LjExNmgyLjAxM2wuMDgyIDEuODY0YTQuMjUgNC4yNSAwIDAgMSAxLjY3Ni0xLjU1MXExLjAzNS0uNTQ0IDIuNDMyLS41NDQgMi4yOTQgMCAzLjYwOSAxLjM3NyAxLjMyNiAxLjM3OSAxLjMyNiAzLjc5OHpNMTY2LjE3OCAxOC40ODNhOC43IDguNyAwIDAgMS0yLjg4OCAxLjg4N3EtMS42NjQuNjcyLTMuNjMxLjY3MnQtMy42MzItLjY3MmE4LjcgOC43IDAgMCAxLTIuODk4LTEuODg3IDguOSA4LjkgMCAwIDEtMS45MDgtMi44NzFxLS42NzYtMS42NTYtLjY3Ni0zLjYwMSAwLTEuOTU3LjY3Ni0zLjYwMWE4LjcgOC43IDAgMCAxIDEuOTA4LTIuODcyIDguNyA4LjcgMCAwIDEgMi44OTgtMS44ODdxMS42NjUtLjY3MSAzLjYzMi0uNjcxIDEuOTU1IDAgMy42MTkuNjgzIDEuNjc3LjY3MSAyLjg3NSAxLjg2NGwtMS43OCAxLjgwNmE2LjIgNi4yIDAgMCAwLTIuMDk0LTEuNTRxLTEuMjEyLS41NjctMi42NTQtLjU2Ny0xLjM5NyAwLTIuNTczLjUxYTYgNiAwIDAgMC0yLjA0OSAxLjQyMyA2LjYgNi42IDAgMCAwLTEuMzYxIDIuMTU0cS0uNDc4IDEuMjM5LS40NzggMi42OTh0LjQ3OCAyLjY5OGE2LjcgNi43IDAgMCAwIDEuMzYxIDIuMTY1IDYuMiA2LjIgMCAwIDAgMi4wNDkgMS40MjRxMS4xNzUuNDk4IDIuNTczLjQ5OCAxLjQ0MiAwIDIuNjU0LS41NTZhNi4yIDYuMiAwIDAgMCAyLjA4My0xLjU1MnpNMTcwLjA5MiAyMC42OTVoLTIuNTRWMi44NjRoMi41NHpNMTc3LjUzNCAyMC45MjZxLTEuNzQ1IDAtMy4xNDMtLjc4N2E1Ljg0IDUuODQgMCAwIDEtMi4xOTktMi4xNDJxLS44MDMtMS4zNjYtLjgwMy0zLjA5MiAwLTEuNzEzLjgwMy0zLjA2OGE1LjggNS44IDAgMCAxIDIuMTk5LTIuMTUzcTEuMzk4LS44IDMuMTQzLS44IDEuNzU4IDAgMy4xNDIuOGE1Ljc1IDUuNzUgMCAwIDEgMi4xNzYgMi4xNTNxLjgwNCAxLjM1NS44MDMgMy4wNjggMCAxLjcyNS0uODAzIDMuMDkyYTUuOCA1LjggMCAwIDEtMi4xNzYgMi4xNDJxLTEuMzg0Ljc4Ny0zLjE0Mi43ODdtLS4wMTMtMi4xM3ExLjA2IDAgMS44ODctLjUxYTMuNyAzLjcgMCAwIDAgMS4zMTUtMS4zOXEuNDg4LS44OC40ODgtMi4wMDIgMC0xLjEtLjQ4OC0xLjk2OWEzLjYgMy42IDAgMCAwLTEuMzE1LTEuMzg5cS0uODI3LS41Mi0xLjg4Ny0uNTJhMy41IDMuNSAwIDAgMC0xLjg4NS41MiAzLjcgMy43IDAgMCAwLTEuMzI2IDEuMzlxLS40NzcuODY4LS40NzcgMS45NjggMCAxLjEyMy40NzcgMi4wMDNhMy44IDMuOCAwIDAgMCAxLjMyNiAxLjM5IDMuNTYgMy41NiAwIDAgMCAxLjg4NS41MDlNMTk2LjEgMjAuNjk1aC0yLjAyNmwtLjA4Mi0xLjg2NHEtLjY0IDEuMDE4LTEuNjc2IDEuNTYzLTEuMDI1LjUzMi0yLjQzMy41MzItMi4yOCAwLTMuNjA3LTEuMzc4LTEuMzE2LTEuMzktMS4zMTYtMy43OTdWOS4xMTZoMi4zODd2Ni4yODdxMCAxLjU0LjgzNyAyLjQ1NS44NC45MTUgMi4yNTguOTE1IDEuNDY4IDAgMi4zNjQtLjk3My45MDctLjk4NC45MDctMi41ODJWOS4xMTZoMi4zODd6TTIwOS44NCAyMC42OTVoLTIuMTA2bC0uMTI5LTEuNjU2YTUuNyA1LjcgMCAwIDEtMS45MDggMS4zOXEtMS4xMDUuNDk3LTIuNDMzLjQ5Ny0xLjY3NiAwLTMuMDAyLS43ODdhNS43IDUuNyAwIDAgMS0yLjA5Ni0yLjE1NHEtLjc1Ni0xLjM2NS0uNzU2LTMuMDggMC0xLjcyNC43NTYtMy4wOGE1LjcgNS43IDAgMCAxIDIuMDk2LTIuMTUzcTEuMzI2LS43ODcgMy4wMDItLjc4NyAxLjI1NyAwIDIuMzI5LjQ1MWE1LjUgNS41IDAgMCAxIDEuODYyIDEuMjYyVjMuMzI3aDIuMzg1em0tNi4xOC0xLjlxMS4wNTkgMCAxLjkwOC0uNDg2YTMuNzQgMy43NCAwIDAgMCAxLjM3NC0xLjMycS41MTItLjgzMy41MTMtMS44OTh2LS4zOTRxMC0xLjA2NS0uNTEzLTEuODk5YTMuNjUgMy42NSAwIDAgMC0xLjM3NC0xLjMwOHEtLjg0OS0uNDc1LTEuOTA4LS40NzUtMS4wODIgMC0xLjk0My41MWEzLjcgMy43IDAgMCAwLTEuMzYzIDEuMzg5cS0uNS44NjktLjQ5OSAxLjk4IDAgMS4xMTEuNDk5IDEuOTkxYTMuOCAzLjggMCAwIDAgMS4zNjMgMS40MDFxLjg2LjUxIDEuOTQzLjUxIi8+CiAgPC9nPgo8L3N2Zz4=", width: 210, height: 24 }, z: 100, silent: !0 }, l = {
2
2
  color: M,
3
3
  backgroundColor: L,
4
4
  textStyle: N,
5
5
  title: j,
6
- line: A,
7
- bar: D,
6
+ line: D,
7
+ bar: A,
8
8
  categoryAxis: g,
9
- valueAxis: u,
10
- logAxis: I,
11
- timeAxis: t,
9
+ valueAxis: t,
10
+ logAxis: u,
11
+ timeAxis: I,
12
12
  legend: y,
13
13
  grid: T,
14
- dataZoom: S,
15
- sankey: i,
16
- markPoint: z,
17
- tooltip: o,
18
- graphic: e
14
+ dataZoom: i,
15
+ sankey: S,
16
+ map: z,
17
+ geo: e,
18
+ markPoint: o,
19
+ tooltip: x,
20
+ graphic: C
19
21
  };
20
22
  export {
21
23
  L as backgroundColor,
22
- D as bar,
24
+ A as bar,
23
25
  g as categoryAxis,
24
26
  M as color,
25
- S as dataZoom,
26
- x as default,
27
- e as graphic,
27
+ i as dataZoom,
28
+ l as default,
29
+ e as geo,
30
+ C as graphic,
28
31
  T as grid,
29
32
  y as legend,
30
- A as line,
31
- I as logAxis,
32
- z as markPoint,
33
- i as sankey,
33
+ D as line,
34
+ u as logAxis,
35
+ z as map,
36
+ o as markPoint,
37
+ S as sankey,
34
38
  N as textStyle,
35
- t as timeAxis,
39
+ I as timeAxis,
36
40
  j as title,
37
- o as tooltip,
38
- u as valueAxis
41
+ x as tooltip,
42
+ t as valueAxis
39
43
  };
@@ -0,0 +1,29 @@
1
+ import { MapName } from './register-map';
2
+ type Projection = {
3
+ project(point: number[]): number[];
4
+ unproject(point: number[]): number[];
5
+ };
6
+ /**
7
+ * Creates a Natural Earth I projection centered on the given longitude.
8
+ * Polynomial coefficients from Savric et al. (2011).
9
+ */
10
+ export declare function createNaturalEarthProjection(centerLon?: number): Projection;
11
+ type LambertParams = {
12
+ centerLon: number;
13
+ centerLat: number;
14
+ standardParallel1: number;
15
+ standardParallel2: number;
16
+ };
17
+ /**
18
+ * Creates a Lambert Conformal Conic projection.
19
+ * Conformal — preserves local shapes. Well suited for mid-latitude regions.
20
+ */
21
+ export declare function createLambertProjection({ centerLon, centerLat, standardParallel1, standardParallel2, }: LambertParams): Projection;
22
+ /**
23
+ * Creates the appropriate projection for a named map.
24
+ * World maps use Natural Earth I; regional maps use Lambert Conformal Conic.
25
+ */
26
+ export declare function createMapProjection(mapName: MapName): Projection;
27
+ /** Default Natural Earth I projection centered at longitude 0 (for world maps). */
28
+ export declare const naturalEarthProjection: Projection;
29
+ export {};
@@ -0,0 +1,64 @@
1
+ import { MAP_CENTERS as w } from "./map-centers.js";
2
+ const n = Math.PI / 180, b = 180 / Math.PI;
3
+ function f(l = 0) {
4
+ const M = l * n;
5
+ return {
6
+ project(e) {
7
+ const u = (e[0] ?? 0) * n - M, o = (e[1] ?? 0) * n, a = o * o, t = a * a;
8
+ return [
9
+ u * (0.8707 - 0.131979 * a + t * (-0.013791 + t * (3971e-6 * a - 1529e-6 * t))),
10
+ -(o * (1.007226 + a * (0.015085 + t * (-0.044475 + 0.028874 * a - 5916e-6 * t))))
11
+ ];
12
+ },
13
+ unproject(e) {
14
+ const u = e[0] ?? 0, o = -(e[1] ?? 0);
15
+ let a = o;
16
+ for (let i = 25; i > 0; i--) {
17
+ const s = a * a, r = s * s, h = (a * (1.007226 + s * (0.015085 + r * (-0.044475 + 0.028874 * s - 5916e-6 * r))) - o) / (1.007226 + s * (3 * 0.015085 + r * (7 * -0.044475 + 9 * 0.028874 * s - 11 * 5916e-6 * r)));
18
+ if (a -= h, Math.abs(h) < 1e-12) break;
19
+ }
20
+ const t = a * a, d = t * t;
21
+ return [(u / (0.8707 + t * (-0.131979 + d * (-0.013791 + d * (3971e-6 * t - 1529e-6 * d)))) + M) * b, a * b];
22
+ }
23
+ };
24
+ }
25
+ function m({
26
+ centerLon: l,
27
+ centerLat: M,
28
+ standardParallel1: e,
29
+ standardParallel2: u
30
+ }) {
31
+ const o = l * n, a = M * n, t = e * n, d = u * n, c = Math.abs(t - d) < 1e-10 ? Math.sin(t) : Math.log(Math.cos(t) / Math.cos(d)) / Math.log(Math.tan(Math.PI / 4 + d / 2) / Math.tan(Math.PI / 4 + t / 2)), i = Math.cos(t) * Math.pow(Math.tan(Math.PI / 4 + t / 2), c) / c, s = i / Math.pow(Math.tan(Math.PI / 4 + a / 2), c);
32
+ return {
33
+ project(r) {
34
+ const h = (r[0] ?? 0) * n, P = Math.max(-89.5 * n, Math.min(89.5 * n, (r[1] ?? 0) * n)), p = i / Math.pow(Math.tan(Math.PI / 4 + P / 2), c), L = c * (h - o);
35
+ return [p * Math.sin(L), -(s - p * Math.cos(L))];
36
+ },
37
+ unproject(r) {
38
+ const h = r[0] ?? 0, P = s + (r[1] ?? 0), p = Math.sign(c) * Math.sqrt(h * h + P * P), L = Math.atan2(h, Math.abs(P)) * Math.sign(P), j = 2 * Math.atan(Math.pow(i / p, 1 / c)) - Math.PI / 2;
39
+ return [(L / c + o) * b, j * b];
40
+ }
41
+ };
42
+ }
43
+ const I = {
44
+ "us-states": { centerLon: -96, centerLat: 37, standardParallel1: 33, standardParallel2: 45 },
45
+ "europe-countries": { centerLon: 15, centerLat: 52, standardParallel1: 43, standardParallel2: 62 },
46
+ "americas-countries": { centerLon: -80, centerLat: 10, standardParallel1: -20, standardParallel2: 40 },
47
+ "asia-countries": { centerLon: 90, centerLat: 35, standardParallel1: 20, standardParallel2: 50 },
48
+ "africa-countries": { centerLon: 20, centerLat: 0, standardParallel1: -10, standardParallel2: 20 }
49
+ }, A = /* @__PURE__ */ new Set(["world-countries", "world-continents", "world-regions"]);
50
+ function R(l) {
51
+ if (A.has(l)) {
52
+ const e = w[l] ?? [0, 0];
53
+ return f(e[0]);
54
+ }
55
+ const M = I[l];
56
+ return m(M || { centerLon: 0, centerLat: 0, standardParallel1: -15, standardParallel2: 15 });
57
+ }
58
+ const g = f();
59
+ export {
60
+ m as createLambertProjection,
61
+ R as createMapProjection,
62
+ f as createNaturalEarthProjection,
63
+ g as naturalEarthProjection
64
+ };
@@ -0,0 +1,24 @@
1
+ import { registerMap } from 'echarts';
2
+ type EChartsModule = {
3
+ registerMap: typeof registerMap;
4
+ };
5
+ /** All available map names. This is the single source of truth for map registration. */
6
+ export declare const MAP_NAMES: readonly ["world-countries", "world-continents", "world-regions", "us-states", "europe-countries", "americas-countries", "asia-countries", "africa-countries"];
7
+ export type MapName = (typeof MAP_NAMES)[number];
8
+ export declare function isMapName(value: string): value is MapName;
9
+ /**
10
+ * Extracts the map name required by chart options, if any.
11
+ * Looks at `series[].map` and `geo[].map` properties.
12
+ */
13
+ export declare function getRequiredMapName(option: unknown): string | undefined;
14
+ /**
15
+ * Registers a named map GeoJSON with ECharts (async, for client-side use).
16
+ * Uses dynamic import so each map's GeoJSON is code-split into its own chunk.
17
+ */
18
+ export declare function registerMapAsync(echarts: EChartsModule, mapName: string): Promise<void>;
19
+ /**
20
+ * Registers a named map GeoJSON with ECharts (sync, for server-side use).
21
+ * Accepts pre-loaded GeoJSON to avoid async in synchronous render paths.
22
+ */
23
+ export declare function registerMapSync(echarts: EChartsModule, mapName: string, geoJSON: unknown): void;
24
+ export {};
@@ -0,0 +1,62 @@
1
+ const s = /* @__PURE__ */ new Set(), a = [
2
+ "world-countries",
3
+ "world-continents",
4
+ "world-regions",
5
+ "us-states",
6
+ "europe-countries",
7
+ "americas-countries",
8
+ "asia-countries",
9
+ "africa-countries"
10
+ ], u = new Set(a);
11
+ function f(t) {
12
+ return u.has(t);
13
+ }
14
+ const p = {
15
+ "world-countries": () => import("./geo/world-countries.json.js").then((t) => t.default),
16
+ "world-continents": () => import("./geo/world-continents.json.js").then((t) => t.default),
17
+ "world-regions": () => import("./geo/world-regions.json.js").then((t) => t.default),
18
+ "us-states": () => import("./geo/us-states.json.js").then((t) => t.default),
19
+ "europe-countries": () => import("./geo/europe-countries.json.js").then((t) => t.default),
20
+ "americas-countries": () => import("./geo/americas-countries.json.js").then((t) => t.default),
21
+ "asia-countries": () => import("./geo/asia-countries.json.js").then((t) => t.default),
22
+ "africa-countries": () => import("./geo/africa-countries.json.js").then((t) => t.default)
23
+ };
24
+ function d(t) {
25
+ if (!t || typeof t != "object") return;
26
+ const e = t;
27
+ if (e.geo) {
28
+ const o = Array.isArray(e.geo) ? e.geo : [e.geo];
29
+ for (const n of o)
30
+ if (n && typeof n == "object") {
31
+ const i = n.map;
32
+ if (typeof i == "string") return i;
33
+ }
34
+ }
35
+ const r = e.series;
36
+ if (!r) return;
37
+ const c = Array.isArray(r) ? r : [r];
38
+ for (const o of c)
39
+ if (o && typeof o == "object" && o.type === "map") {
40
+ const n = o.map;
41
+ if (typeof n == "string") return n;
42
+ }
43
+ }
44
+ async function g(t, e) {
45
+ if (s.has(e)) return;
46
+ if (!f(e)) {
47
+ console.warn(`Unknown map name: "${e}". Available maps: ${a.join(", ")}`);
48
+ return;
49
+ }
50
+ const r = await p[e]();
51
+ t.registerMap(e, r), s.add(e);
52
+ }
53
+ function l(t, e, r) {
54
+ s.has(e) || (t.registerMap(e, r), s.add(e));
55
+ }
56
+ export {
57
+ a as MAP_NAMES,
58
+ d as getRequiredMapName,
59
+ f as isMapName,
60
+ g as registerMapAsync,
61
+ l as registerMapSync
62
+ };
@@ -1,6 +1,6 @@
1
1
  import { EChartsOption } from 'echarts';
2
2
  /**
3
- * Removes problematic interactive components from chart options.
4
- * These components have known issues with ECharts' cleanup lifecycle.
3
+ * Removes problematic interactive components from chart options
4
+ * and applies sensible defaults for map charts.
5
5
  */
6
6
  export declare function sanitizeChartOptions(option: EChartsOption): EChartsOption;
@@ -1,9 +1,32 @@
1
- const n = /* @__PURE__ */ new Set(["axisPointer"]);
2
- function i(t) {
3
- return Object.fromEntries(
4
- Object.entries(t).filter(([e]) => !n.has(e))
1
+ const i = /* @__PURE__ */ new Set(["axisPointer"]);
2
+ function o(t) {
3
+ const e = t.series;
4
+ return e ? (Array.isArray(e) ? e : [e]).some((n) => typeof n == "object" && "type" in n && n.type === "map") : !1;
5
+ }
6
+ function a(t) {
7
+ const e = t.name ?? "", r = t.value;
8
+ if (r == null || typeof r == "number" && isNaN(r))
9
+ return e;
10
+ const n = typeof r == "number" ? r.toLocaleString(void 0, { maximumFractionDigits: 2 }) : r;
11
+ return `${e}: ${n}`;
12
+ }
13
+ function s(t) {
14
+ if (!o(t)) return t;
15
+ const e = t.tooltip ?? {};
16
+ return e.formatter ? t : {
17
+ ...t,
18
+ tooltip: {
19
+ ...e,
20
+ formatter: a
21
+ }
22
+ };
23
+ }
24
+ function f(t) {
25
+ const e = Object.fromEntries(
26
+ Object.entries(t).filter(([r]) => !i.has(r))
5
27
  );
28
+ return s(e);
6
29
  }
7
30
  export {
8
- i as sanitizeChartOptions
31
+ f as sanitizeChartOptions
9
32
  };
@@ -1,56 +1,58 @@
1
1
  "use client";
2
- import { useRef as d, useState as T, useEffect as I, useCallback as S } from "react";
2
+ import { useRef as f, useState as T, useEffect as I, useCallback as S } from "react";
3
3
  import { calculateTitleLayout as m } from "./calculate-title-layout.js";
4
4
  import { replaceFormatterTokens as O } from "./formatters/replace-formatter-tokens.js";
5
5
  import { mergeThemeGraphicIntoOptions as R } from "./merge-theme-graphic-into-options.js";
6
+ import { getRequiredMapName as j, registerMapAsync as x } from "./register-map.js";
6
7
  import { sanitizeChartOptions as w } from "./sanitize-chart-options.js";
7
8
  const W = /* @__PURE__ */ new Set();
8
- function L({ options: o, theme: t }) {
9
- const n = d(null), c = d(null), y = d(o), C = d(t?.config), z = d(t?.config.graphic), [b, v] = T(!1);
10
- y.current = o, C.current = t?.config, z.current = t?.config.graphic, I(() => {
11
- const s = n.current;
9
+ function B({ options: i, theme: t }) {
10
+ const e = f(null), o = f(null), y = f(i), C = f(t?.config), z = f(t?.config.graphic), [b, v] = T(!1);
11
+ y.current = i, C.current = t?.config, z.current = t?.config.graphic, I(() => {
12
+ const s = e.current;
12
13
  if (!s) return;
13
- let r = !0, e;
14
- const f = new ResizeObserver((i) => {
15
- const a = i[0], u = c.current;
16
- if (!a || !u) return;
17
- const p = a.contentRect.width, g = w(y.current), l = O(g), h = m(l, p, C.current);
18
- u.setOption(R(h, z.current), {
14
+ let r = !0, n;
15
+ const d = new ResizeObserver((c) => {
16
+ const u = c[0], a = o.current;
17
+ if (!u || !a) return;
18
+ const p = u.contentRect.width, g = w(y.current), l = O(g), h = m(l, p, C.current);
19
+ a.setOption(R(h, z.current), {
19
20
  replaceMerge: ["graphic"]
20
- }), u.resize();
21
+ }), a.resize();
21
22
  });
22
- return f.observe(s), (async () => {
23
+ return d.observe(s), (async () => {
23
24
  try {
24
- const i = await import("echarts");
25
- if (!r || !n.current) return;
26
- if (t && !W.has(t.name)) {
27
- const { graphic: h, ...F } = t.config;
28
- i.registerTheme(t.name, F), W.add(t.name);
25
+ const c = await import("echarts");
26
+ if (!r || !e.current) return;
27
+ const u = j(i);
28
+ if (u && await x(c, u), t && !W.has(t.name)) {
29
+ const { graphic: F, ...M } = t.config;
30
+ c.registerTheme(t.name, M), W.add(t.name);
29
31
  }
30
- const a = i.getInstanceByDom(n.current);
31
- a && a.dispose(), e = i.init(n.current, t?.name, {
32
+ const a = c.getInstanceByDom(e.current);
33
+ a && a.dispose(), n = c.init(e.current, t?.name, {
32
34
  renderer: "svg"
33
- }), c.current = e;
34
- const u = n.current.clientWidth, p = w(o), g = O(p), l = m(g, u, t?.config);
35
- e.setOption(R(l, t?.config.graphic), {
35
+ }), o.current = n;
36
+ const p = e.current.clientWidth, g = w(i), l = O(g), h = m(l, p, t?.config);
37
+ n.setOption(R(h, t?.config.graphic), {
36
38
  replaceMerge: ["graphic"]
37
- }), e.resize(), v(!0);
38
- } catch (i) {
39
- console.error("Failed to load echarts", i);
39
+ }), n.resize(), v(!0);
40
+ } catch (c) {
41
+ console.error("Failed to load echarts", c);
40
42
  }
41
43
  })(), () => {
42
- r = !1, f.disconnect(), e && e.dispose(), c.current = null, v(!1);
44
+ r = !1, d.disconnect(), n && n.dispose(), o.current = null, v(!1);
43
45
  };
44
- }, [t, o]), I(() => {
45
- if (!b || !c.current || !n.current) return;
46
- const s = n.current.clientWidth, r = w(o), e = O(r), f = m(e, s, t?.config);
47
- c.current.setOption(R(f, t?.config.graphic), {
46
+ }, [t, i]), I(() => {
47
+ if (!b || !o.current || !e.current) return;
48
+ const s = e.current.clientWidth, r = w(i), n = O(r), d = m(n, s, t?.config);
49
+ o.current.setOption(R(d, t?.config.graphic), {
48
50
  replaceMerge: ["graphic"]
49
51
  });
50
- }, [b, o, t?.config, t?.config.graphic]);
52
+ }, [b, i, t?.config, t?.config.graphic]);
51
53
  const k = S(async () => {
52
- if (!c.current) return;
53
- const s = c.current.getDataURL({
54
+ if (!o.current) return;
55
+ const s = o.current.getDataURL({
54
56
  type: "png",
55
57
  pixelRatio: 2,
56
58
  backgroundColor: "#fff"
@@ -58,10 +60,10 @@ function L({ options: o, theme: t }) {
58
60
  r.download = `chart-${(/* @__PURE__ */ new Date()).toISOString()}.png`, r.href = s, document.body.appendChild(r), r.click(), document.body.removeChild(r);
59
61
  }, []);
60
62
  return {
61
- containerRef: n,
63
+ containerRef: e,
62
64
  downloadChart: k
63
65
  };
64
66
  }
65
67
  export {
66
- L as useChartInstance
68
+ B as useChartInstance
67
69
  };
@@ -1,12 +1,13 @@
1
1
  type UseScrollToBottomOptions = {
2
2
  readonly threshold?: number;
3
3
  };
4
- export declare function useScrollToBottom({ threshold }?: UseScrollToBottomOptions): {
5
- containerRef: import('react').RefObject<HTMLDivElement | null>;
6
- endRef: import('react').RefObject<HTMLDivElement | null>;
4
+ type UseScrollToBottomReturn = {
5
+ containerRef: React.RefObject<HTMLDivElement | null>;
6
+ endRef: React.RefObject<HTMLDivElement | null>;
7
7
  isAtBottom: boolean;
8
8
  scrollToBottom: (behavior?: ScrollBehavior) => void;
9
9
  onViewportEnter: () => void;
10
10
  onViewportLeave: () => void;
11
11
  };
12
+ export declare function useScrollToBottom({ threshold }?: UseScrollToBottomOptions): UseScrollToBottomReturn;
12
13
  export {};
@@ -1,33 +1,51 @@
1
- import * as p from "echarts";
2
- import { randomUUID as C } from "node:crypto";
3
- import { writeFileSync as F, mkdtempSync as O } from "node:fs";
4
- import { tmpdir as b } from "node:os";
5
- import h from "node:path";
6
- import { Image as I, Canvas as S, FontLibrary as j } from "skia-canvas";
7
- import { calculateTitleLayout as w } from "../components/echarts-renderer/calculate-title-layout.js";
8
- import { isChartTheme as v } from "../components/echarts-renderer/chart-theme.js";
9
- import { replaceFormatterTokens as A } from "../components/echarts-renderer/formatters/replace-formatter-tokens.js";
10
- import { mergeThemeGraphicIntoOptions as D } from "../components/echarts-renderer/merge-theme-graphic-into-options.js";
11
- globalThis.Image = I;
12
- const l = /* @__PURE__ */ new Set();
13
- let m;
14
- function E() {
15
- return m || (m = O(h.join(b(), "chart-fonts-"))), m;
1
+ import * as d from "echarts";
2
+ import { writeFileSync as w, mkdtempSync as N } from "node:fs";
3
+ import { tmpdir as T } from "node:os";
4
+ import y from "node:path";
5
+ import { Image as C, Canvas as S, FontLibrary as G } from "skia-canvas";
6
+ import { calculateTitleLayout as F } from "../components/echarts-renderer/calculate-title-layout.js";
7
+ import { isChartTheme as b } from "../components/echarts-renderer/chart-theme.js";
8
+ import { replaceFormatterTokens as J } from "../components/echarts-renderer/formatters/replace-formatter-tokens.js";
9
+ import A from "../components/echarts-renderer/geo/africa-countries.json.js";
10
+ import I from "../components/echarts-renderer/geo/americas-countries.json.js";
11
+ import j from "../components/echarts-renderer/geo/asia-countries.json.js";
12
+ import E from "../components/echarts-renderer/geo/europe-countries.json.js";
13
+ import M from "../components/echarts-renderer/geo/us-states.json.js";
14
+ import R from "../components/echarts-renderer/geo/world-continents.json.js";
15
+ import P from "../components/echarts-renderer/geo/world-countries.json.js";
16
+ import k from "../components/echarts-renderer/geo/world-regions.json.js";
17
+ import { mergeThemeGraphicIntoOptions as v } from "../components/echarts-renderer/merge-theme-graphic-into-options.js";
18
+ import { getRequiredMapName as x, isMapName as D, registerMapSync as _ } from "../components/echarts-renderer/register-map.js";
19
+ const $ = {
20
+ "world-countries": P,
21
+ "world-continents": R,
22
+ "world-regions": k,
23
+ "us-states": M,
24
+ "europe-countries": E,
25
+ "americas-countries": I,
26
+ "asia-countries": j,
27
+ "africa-countries": A
28
+ };
29
+ globalThis.Image = C;
30
+ const g = /* @__PURE__ */ new Set();
31
+ let f;
32
+ function z() {
33
+ return f || (f = N(y.join(T(), "chart-fonts-"))), f;
16
34
  }
17
- function N(r) {
35
+ function L(r) {
18
36
  for (const t of r)
19
- if (!l.has(t.family))
37
+ if (!g.has(t.family))
20
38
  try {
21
- const e = E(), n = t.data.map((i, s) => {
22
- const o = h.join(e, `${t.family}-${String(s)}.ttf`);
23
- return F(o, i), o;
39
+ const e = z(), o = t.data.map((a, m) => {
40
+ const n = y.join(e, `${t.family}-${String(m)}.ttf`);
41
+ return w(n, a), n;
24
42
  });
25
- j.use(t.family, n), l.add(t.family);
43
+ G.use(t.family, o), g.add(t.family);
26
44
  } catch (e) {
27
45
  console.warn(`Failed to register ${t.family} fonts, charts will use fallback font:`, e);
28
46
  }
29
47
  }
30
- const P = /* @__PURE__ */ new Set([
48
+ const V = /* @__PURE__ */ new Set([
31
49
  "aria",
32
50
  // Tries to set DOM attributes which node-canvas doesn't implement
33
51
  "toolbox",
@@ -39,41 +57,52 @@ const P = /* @__PURE__ */ new Set([
39
57
  "axisPointer"
40
58
  // Crosshair on hover
41
59
  ]);
42
- function $(r) {
60
+ function q(r) {
43
61
  if (!r || typeof r != "object" || Array.isArray(r))
44
62
  return { animation: !1 };
45
63
  const t = Object.fromEntries(
46
- Object.entries(r).filter(([e]) => !P.has(e))
64
+ Object.entries(r).filter(([e]) => !V.has(e))
47
65
  );
48
66
  return t.animation = !1, t;
49
67
  }
50
- function k({
68
+ function B(r) {
69
+ const t = new S(r.width, r.height);
70
+ return t.getContext("2d").drawImage(r, 0, 0), t;
71
+ }
72
+ function U({
51
73
  option: r,
52
74
  theme: t,
53
75
  fonts: e,
54
- width: n = 800,
55
- height: i = 600,
56
- devicePixelRatio: s = 2
76
+ width: o = 800,
77
+ height: a = 600,
78
+ devicePixelRatio: m = 2
57
79
  }) {
58
- e?.length && N(e);
59
- let o, a, c;
80
+ e?.length && L(e);
81
+ let n, s, p;
60
82
  if (t) {
61
- a = v(t) ? t.config : t, c = a.graphic, o = `theme-${C()}`;
62
- const { graphic: x, ...T } = a;
63
- p.registerTheme(o, T);
83
+ s = b(t) ? t.config : t, p = s.graphic;
84
+ const { graphic: h, ...c } = s;
85
+ n = c;
64
86
  }
65
- const f = new S(n, i), u = p.init(f, o, {
87
+ const i = x(r);
88
+ i && (D(i) ? _(d, i, $[i]) : console.warn(`Unknown map name for server-side rendering: "${i}"`));
89
+ const l = new S(o, a), u = d.init(l, n, {
66
90
  renderer: "canvas",
67
- devicePixelRatio: s,
68
- width: n,
69
- height: i
70
- }), g = $(r), d = A(g), y = w(d, n, a);
71
- return u.setOption(D(y, c), { replaceMerge: ["graphic"] }), f;
91
+ devicePixelRatio: m,
92
+ width: o,
93
+ height: a
94
+ });
95
+ try {
96
+ const h = q(r), c = J(h), O = F(c, o, s);
97
+ return u.setOption(v(O, p), { replaceMerge: ["graphic"] }), B(l);
98
+ } finally {
99
+ u.dispose();
100
+ }
72
101
  }
73
- function W(r) {
74
- return k(r).toBufferSync("png");
102
+ function ft(r) {
103
+ return U(r).toBufferSync("png");
75
104
  }
76
105
  export {
77
- k as renderChartToCanvas,
78
- W as renderChartToImage
106
+ U as renderChartToCanvas,
107
+ ft as renderChartToImage
79
108
  };