diff --git a/package.json b/package.json index b97c669..eb1b722 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,10 @@ "@sa/hooks": "workspace:*", "@sa/materials": "workspace:*", "@sa/utils": "workspace:*", + "@visactor/vchart": "1.12.11", + "@visactor/vchart-theme": "1.12.2", + "@visactor/vtable-editors": "1.10.5", + "@visactor/vtable-gantt": "1.10.5", "@vueuse/components": "11.2.0", "@vueuse/core": "11.2.0", "clipboard": "2.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6e1ba6..0427c67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,18 @@ importers: '@sa/utils': specifier: workspace:* version: link:packages/utils + '@visactor/vchart': + specifier: 1.12.11 + version: 1.12.11 + '@visactor/vchart-theme': + specifier: 1.12.2 + version: 1.12.2(@visactor/vchart@1.12.11) + '@visactor/vtable-editors': + specifier: 1.10.5 + version: 1.10.5 + '@visactor/vtable-gantt': + specifier: 1.10.5 + version: 1.10.5 '@vueuse/components': specifier: 11.2.0 version: 11.2.0(vue@3.5.13) @@ -2126,6 +2138,136 @@ packages: resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} dev: true + /@resvg/resvg-js-android-arm-eabi@2.4.1: + resolution: {integrity: sha512-AA6f7hS0FAPpvQMhBCf6f1oD1LdlqNXKCxAAPpKh6tR11kqV0YIB9zOlIYgITM14mq2YooLFl6XIbbvmY+jwUw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-android-arm64@2.4.1: + resolution: {integrity: sha512-/QleoRdPfsEuH9jUjilYcDtKK/BkmWcK+1LXM8L2nsnf/CI8EnFyv7ZzCj4xAIvZGAy9dTYr/5NZBcTwxG2HQg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-darwin-arm64@2.4.1: + resolution: {integrity: sha512-U1oMNhea+kAXgiEXgzo7EbFGCD1Edq5aSlQoe6LMly6UjHzgx2W3N5kEXCwU/CgN5FiQhZr7PlSJSlcr7mdhfg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-darwin-x64@2.4.1: + resolution: {integrity: sha512-avyVh6DpebBfHHtTQTZYSr6NG1Ur6TEilk1+H0n7V+g4F7x7WPOo8zL00ZhQCeRQ5H4f8WXNWIEKL8fwqcOkYw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-arm-gnueabihf@2.4.1: + resolution: {integrity: sha512-isY/mdKoBWH4VB5v621co+8l101jxxYjuTkwOLsbW+5RK9EbLciPlCB02M99ThAHzI2MYxIUjXNmNgOW8btXvw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-arm64-gnu@2.4.1: + resolution: {integrity: sha512-uY5voSCrFI8TH95vIYBm5blpkOtltLxLRODyhKJhGfskOI7XkRw5/t1u0sWAGYD8rRSNX+CA+np86otKjubrNg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-arm64-musl@2.4.1: + resolution: {integrity: sha512-6mT0+JBCsermKMdi/O2mMk3m7SqOjwi9TKAwSngRZ/nQoL3Z0Z5zV+572ztgbWr0GODB422uD8e9R9zzz38dRQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-x64-gnu@2.4.1: + resolution: {integrity: sha512-60KnrscLj6VGhkYOJEmmzPlqqfcw1keDh6U+vMcNDjPhV3B5vRSkpP/D/a8sfokyeh4VEacPSYkWGezvzS2/mg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-x64-musl@2.4.1: + resolution: {integrity: sha512-0AMyZSICC1D7ge115cOZQW8Pcad6PjWuZkBFF3FJuSxC6Dgok0MQnLTs2MfMdKBlAcwO9dXsf3bv9tJZj8pATA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-win32-arm64-msvc@2.4.1: + resolution: {integrity: sha512-76XDFOFSa3d0QotmcNyChh2xHwk+JTFiEQBVxMlHpHMeq7hNrQJ1IpE1zcHSQvrckvkdfLboKRrlGB86B10Qjw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-win32-ia32-msvc@2.4.1: + resolution: {integrity: sha512-odyVFGrEWZIzzJ89KdaFtiYWaIJh9hJRW/frcEcG3agJ464VXkN/2oEVF5ulD+5mpGlug9qJg7htzHcKxDN8sg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-win32-x64-msvc@2.4.1: + resolution: {integrity: sha512-vY4kTLH2S3bP+puU5x7hlAxHv+ulFgcK6Zn3efKSr0M0KnZ9A3qeAjZteIpkowEFfUeMPNg2dvvoFRJA9zqxSw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js@2.4.1: + resolution: {integrity: sha512-wTOf1zerZX8qYcMmLZw3czR4paI4hXqPjShNwJRh5DeHxvgffUS5KM7XwxtbIheUW6LVYT5fhT2AJiP6mU7U4A==} + engines: {node: '>= 10'} + optionalDependencies: + '@resvg/resvg-js-android-arm-eabi': 2.4.1 + '@resvg/resvg-js-android-arm64': 2.4.1 + '@resvg/resvg-js-darwin-arm64': 2.4.1 + '@resvg/resvg-js-darwin-x64': 2.4.1 + '@resvg/resvg-js-linux-arm-gnueabihf': 2.4.1 + '@resvg/resvg-js-linux-arm64-gnu': 2.4.1 + '@resvg/resvg-js-linux-arm64-musl': 2.4.1 + '@resvg/resvg-js-linux-x64-gnu': 2.4.1 + '@resvg/resvg-js-linux-x64-musl': 2.4.1 + '@resvg/resvg-js-win32-arm64-msvc': 2.4.1 + '@resvg/resvg-js-win32-ia32-msvc': 2.4.1 + '@resvg/resvg-js-win32-x64-msvc': 2.4.1 + dev: false + /@rollup/pluginutils@5.1.0: resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -2512,6 +2654,56 @@ packages: engines: {node: '>=10.13.0'} dev: true + /@turf/boolean-clockwise@6.5.0: + resolution: {integrity: sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/clone@6.5.0: + resolution: {integrity: sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/flatten@6.5.0: + resolution: {integrity: sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/helpers@6.5.0: + resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} + dev: false + + /@turf/invariant@6.5.0: + resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/meta@3.14.0: + resolution: {integrity: sha512-OtXqLQuR9hlQ/HkAF/OdzRea7E0eZK1ay8y8CBXkoO2R6v34CsDrWYLMSo0ZzMsaQDpKo76NPP2GGo+PyG1cSg==} + dev: false + + /@turf/meta@6.5.0: + resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/rewind@6.5.0: + resolution: {integrity: sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==} + dependencies: + '@turf/boolean-clockwise': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + /@types/bmapgl@0.0.7: resolution: {integrity: sha512-3R0wFbZtynfHBJq0v477amaNH3t2u2CzBo46ViIPDdOTEJJ+Ma/ql4X8tS2XjDZcZhDAr6QDWoqV8SZvp6STvA==} dev: true @@ -3137,6 +3329,250 @@ packages: - vue dev: true + /@visactor/vchart-theme@1.12.2(@visactor/vchart@1.12.11): + resolution: {integrity: sha512-r298TUdK+CKbHGVYWgQnNSEB5uqpFvF2/aMNZ/2POQnd2CovAPJOx2nTE6hAcOn8rra2FwJ2xF8AyP1O5OhrTw==} + peerDependencies: + '@visactor/vchart': '>=1.10.4' + dependencies: + '@visactor/vchart': 1.12.11 + dev: false + + /@visactor/vchart@1.12.11: + resolution: {integrity: sha512-1DfrmArxl9SLsD90AvrPNdy3YPaGzHojCzZo57WqNlDb2IheStu0u6jsoy07svKqLQxyjwRp7yIQHK7HEKvI7A==} + dependencies: + '@visactor/vdataset': 0.18.18 + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-hierarchy': 0.14.14 + '@visactor/vgrammar-projection': 0.14.14 + '@visactor/vgrammar-sankey': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vgrammar-venn': 0.14.14 + '@visactor/vgrammar-wordcloud': 0.14.14 + '@visactor/vgrammar-wordcloud-shape': 0.14.14 + '@visactor/vrender-components': 0.20.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vscale': 0.18.18 + '@visactor/vutils': 0.18.18 + '@visactor/vutils-extension': 1.12.11 + dev: false + + /@visactor/vdataset@0.18.18: + resolution: {integrity: sha512-lye23zpineMKV42JmuJaOY3fgl7aWhyDIwK9dWooqZzP14AFukPoK7ZvUeuKZihLrHxqtCg2VWEjovnh9O1RUg==} + dependencies: + '@turf/flatten': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/rewind': 6.5.0 + '@visactor/vutils': 0.18.18 + d3-dsv: 2.0.0 + d3-geo: 1.12.1 + d3-hexbin: 0.2.2 + d3-hierarchy: 3.1.2 + eventemitter3: 4.0.7 + geobuf: 3.0.2 + geojson-dissolve: 3.1.0 + path-browserify: 1.0.1 + pbf: 3.3.0 + point-at-length: 1.1.0 + simple-statistics: 7.8.7 + simplify-geojson: 1.0.5 + topojson-client: 3.1.0 + dev: false + + /@visactor/vgrammar-coordinate@0.14.14: + resolution: {integrity: sha512-ihuWr+7VotZvpMSNfXOc6OU7GBhNAZLYTHLgusae+Qq9o5ZBYgndAV3Gd1NKrcq6lMXlgchpBHSBt99M0wvAQw==} + dependencies: + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-core@0.14.14: + resolution: {integrity: sha512-pLn/BBfpdZFmIDsSQx1L3VfU4mEzT8W4VoAlqssSZusQK9ijVqo/6taUqXgDRUy9m4T01S1RJg0xUx10pGrS8w==} + dependencies: + '@visactor/vdataset': 0.18.18 + '@visactor/vgrammar-coordinate': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vrender-components': 0.20.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vscale': 0.18.18 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-hierarchy@0.14.14: + resolution: {integrity: sha512-28TO4R8tgPi604N5YgHsejrPNhoTXjc+cBYdzskfc4z8EK3bZArYIjbZTUwHGtrl4Ql/e1hzMoieJVPa3BM2zw==} + dependencies: + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-projection@0.14.14: + resolution: {integrity: sha512-ilJ5ogP99q0QCWUkWfV+sc339LlUkAwrQIaXyWLqt+c77UxBVRhrXLG/h8FIAPXIEShApje1SYm9Nn8fQjc8kA==} + dependencies: + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vutils': 0.18.18 + d3-geo: 1.12.1 + dev: false + + /@visactor/vgrammar-sankey@0.14.14: + resolution: {integrity: sha512-ApodG82KZN+XSOftxPKWwGPufE6htXcqVuEdXLmBlLwO5hr+F++HQV8JP1slhYXW0bkYgtOsPOdHkAxbca6Yqw==} + dependencies: + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-util@0.14.14: + resolution: {integrity: sha512-UDP98/G5DJJl50KjxLKxz8CKMqVlHqpJF3Awkum56x+Hq7VWOyvTc/PX8933FXiTDQcLARJNU/2sDBsbhzxJDg==} + dependencies: + '@visactor/vrender-core': 0.20.14 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-venn@0.14.14: + resolution: {integrity: sha512-fu/kztwABVc24gdPpj+zhdbJRSEz0c6Prr4tGBFyWBgf2pCBleFH/Nxvk4JMtAAJ1KJQGWaazJU/TkKYvh1bdQ==} + dependencies: + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-wordcloud-shape@0.14.14: + resolution: {integrity: sha512-1b8xwSi8DApEKiahT/NArLTKHQEgjzbn6AnSTX+9qiqSCd/fvWId9N02yWBIurCNvrsA025dbo/yTaaVsh+vaA==} + dependencies: + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vscale': 0.18.18 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vgrammar-wordcloud@0.14.14: + resolution: {integrity: sha512-jK7yc2KxYDuCQmcQXOTjyfoDcJwN9+1pOF9nZYO4Oh1mXul+5KcPiEbRa3uXUeYE8OXUjDGtyF6aTWgtvRqLEA==} + dependencies: + '@visactor/vgrammar-core': 0.14.14 + '@visactor/vgrammar-util': 0.14.14 + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vrender-components@0.20.14: + resolution: {integrity: sha512-GVU+dYq5qPBdOmg+87wi3F/3U40rqjQHnEBygnEZFhQbNcJGhgDMl4kAXNxq4YanxkDlHHFpQmfhqvOnZ6HngA==} + dependencies: + '@visactor/vrender-core': 0.20.14 + '@visactor/vrender-kits': 0.20.14 + '@visactor/vscale': 0.18.18 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vrender-components@0.21.0-alpha.2: + resolution: {integrity: sha512-1r85YiQvF8jsnNKE8Zr4xEhbf5BGDAo7TBwVWvpAwkCYDzv6vP7dzxX9+K6aoft8jgKJiIeP8T2xVvlUqHoEqw==} + dependencies: + '@visactor/vrender-core': 0.21.0-alpha.2 + '@visactor/vrender-kits': 0.21.0-alpha.2 + '@visactor/vscale': 0.18.18 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vrender-core@0.20.14: + resolution: {integrity: sha512-eIHD4V2fl3Ps6UZlx0Ef6S/1iTOjKGZP39Lpn7+KO4G45O39EQwB8J8KmgrY/kmZDLCy93aH1QYPJhKVWQdTTw==} + dependencies: + '@visactor/vutils': 0.18.18 + color-convert: 2.0.1 + dev: false + + /@visactor/vrender-core@0.21.0-alpha.2: + resolution: {integrity: sha512-rfgt+KajHSqtGNm2O/iZpNcX7AjgiQGF7coeGkZraN87l3nN2uGBFosI6E2kCJ4IURB7d2e7zAGdyoANQ/Hzeg==} + dependencies: + '@visactor/vutils': 0.18.18 + color-convert: 2.0.1 + dev: false + + /@visactor/vrender-kits@0.20.14: + resolution: {integrity: sha512-seA+Af//ydPWLwuS461eti8vIukxGcy+84m2qnic7q0F774NZLYeNrWUlHw46Hu7SBQhAyZrb8GU9Hp+fPnLiw==} + dependencies: + '@resvg/resvg-js': 2.4.1 + '@visactor/vrender-core': 0.20.14 + '@visactor/vutils': 0.18.18 + roughjs: 4.5.2 + dev: false + + /@visactor/vrender-kits@0.21.0-alpha.2: + resolution: {integrity: sha512-P+tAv1oPIWydCPdGvT+02XgemOLKbZ97OztjHQyN5H4ykzw9uCYBmrCDsWrkMaAoYYzjnp3D0u/XFhY5viH1HQ==} + dependencies: + '@resvg/resvg-js': 2.4.1 + '@visactor/vrender-core': 0.21.0-alpha.2 + '@visactor/vutils': 0.18.18 + roughjs: 4.5.2 + dev: false + + /@visactor/vscale@0.18.18: + resolution: {integrity: sha512-iRG4kv+5Fv4KX3AxEfV95XU3I6OmF0QizyAhqHxKa7L1MaT+MRvDDk5zHWf1E8gialLbL2xDe3GnT6g/4u5jhA==} + dependencies: + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vtable-editors@1.10.5: + resolution: {integrity: sha512-JR5pURj/n/QyjfXONM4gRxURB/cKgWw61NC2+26fO8mOTvi6HccvoaliCEYWBAVtyrHySfOAL6fVpH06PkJrFw==} + dev: false + + /@visactor/vtable-gantt@1.10.5: + resolution: {integrity: sha512-e/ZgapdYzXgHlUN5aqsSz9DRxxCX6Cwm3fyeCyto1Em9NabRDvSfCJES0wc1TFhCns6Zc5WJnkvpZO3qhUEg8g==} + dependencies: + '@visactor/vdataset': 0.18.18 + '@visactor/vscale': 0.18.18 + '@visactor/vtable': 1.10.5 + '@visactor/vtable-editors': 1.10.5 + '@visactor/vutils': 0.18.18 + cssfontparser: 1.2.1 + dev: false + + /@visactor/vtable@1.10.5: + resolution: {integrity: sha512-SoEaVgkFl4+89kAMn+Q0qaDboQP93cKm3+frcbqz5lSzMrhw9v1rf+S3f3kljrAxVGMbWKv+g4cy5kXQNxq8Iw==} + dependencies: + '@visactor/vdataset': 0.18.18 + '@visactor/vrender-components': 0.21.0-alpha.2 + '@visactor/vrender-core': 0.21.0-alpha.2 + '@visactor/vrender-kits': 0.21.0-alpha.2 + '@visactor/vscale': 0.18.18 + '@visactor/vtable-editors': 1.10.5 + '@visactor/vutils': 0.18.18 + '@visactor/vutils-extension': 1.11.14 + cssfontparser: 1.2.1 + dev: false + + /@visactor/vutils-extension@1.11.14: + resolution: {integrity: sha512-vfViZphXJBH0NwCHIoe8S1/+tDtykEKIfsLMIHprh7Azv7fVSB1eotG00SAegK75E18ARQGNXF1DxixUFiXSIQ==} + dependencies: + '@visactor/vdataset': 0.18.18 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vutils-extension@1.12.11: + resolution: {integrity: sha512-0skd9Vnb//R9i34AvQtufkhpvyULaWXq8FjHNF1LEuAnDA6GjlPwtW0lxMtqpEQmNE+2aPfQUQr4rKop7nmbGA==} + dependencies: + '@visactor/vdataset': 0.18.18 + '@visactor/vutils': 0.18.18 + dev: false + + /@visactor/vutils@0.18.18: + resolution: {integrity: sha512-byEJefqxiCz3UWe+YedEVjsdPtnJOAtKdRYi4qT9ojgACdd6QqlWs53Eb7PlMZgWDxVxqkxJP2bZnRKw+ME0Xg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + eventemitter3: 4.0.7 + dev: false + /@vitejs/plugin-vue-jsx@4.1.0(vite@5.4.11)(vue@3.5.13): resolution: {integrity: sha512-KuRejz7KAFvhXDzOudlaS2IyygAwoAEEMtHAdcRSy/8cA5iKH043Qudcz48zsC0M0vvN5iKwIwNMuWbBYn6/Yg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3776,6 +4212,10 @@ packages: call-bind: 1.0.7 is-array-buffer: 3.0.4 + /array-source@0.0.4: + resolution: {integrity: sha512-frNdc+zBn80vipY+GdcJkLEbMWj3xmzArYApmUGxoiV8uAu/ygcs9icPdsGdA26h0MkHUMW6EN2piIvVx+M5Mw==} + dev: false + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -4311,7 +4751,6 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} @@ -4371,6 +4810,25 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /concat-stream@1.4.11: + resolution: {integrity: sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==} + engines: {'0': node >= 0.8} + dependencies: + inherits: 2.0.4 + readable-stream: 1.1.14 + typedarray: 0.0.7 + dev: false + + /concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + dev: false + /confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} dev: true @@ -4430,6 +4888,10 @@ packages: requiresBuild: true dev: false + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -4494,6 +4956,10 @@ packages: hasBin: true dev: true + /cssfontparser@1.2.1: + resolution: {integrity: sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==} + dev: false + /csso@4.2.0: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} engines: {node: '>=8.0.0'} @@ -4555,6 +5021,15 @@ packages: rw: 1.3.3 dev: false + /d3-dsv@2.0.0: + resolution: {integrity: sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==} + hasBin: true + dependencies: + commander: 2.20.3 + iconv-lite: 0.4.24 + rw: 1.3.3 + dev: false + /d3-dsv@3.0.1: resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} engines: {node: '>=12'} @@ -4599,6 +5074,12 @@ packages: d3-geo: 1.6.4 dev: false + /d3-geo@1.12.1: + resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==} + dependencies: + d3-array: 1.2.4 + dev: false + /d3-geo@1.6.4: resolution: {integrity: sha512-O5Q3iftLc6/EdU1MHUm+O29NoKKN/cyQtySnD9/yEEcinN+q4ng+H56e2Yn1YWdfZBoiaRVtR2NoJ3ivKX5ptQ==} dependencies: @@ -4618,6 +5099,10 @@ packages: d3-array: 3.2.4 dev: false + /d3-hexbin@0.2.2: + resolution: {integrity: sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==} + dev: false + /d3-hexjson@1.1.1: resolution: {integrity: sha512-WMF1juFJwAx6LzdEVKlsCGZz+7QUG7VMJDtg8uD3cfNwWOTgMiy6qBRRGU7LSY2KbmEObu3BV5ZQbq9l/BvUZQ==} dependencies: @@ -6033,6 +6518,12 @@ packages: flat-cache: 4.0.1 dev: true + /file-source@0.6.1: + resolution: {integrity: sha512-1R1KneL7eTXmXfKxC10V/9NeGOdbsAXJ+lQ//fvvcHUgtaZcZDWNJNblxAoVOyV1cj45pOtUrR3vZTBwqcW8XA==} + dependencies: + stream-source: 0.3.5 + dev: false + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -6218,6 +6709,37 @@ packages: engines: {node: '>=6.9.0'} dev: true + /geobuf@3.0.2: + resolution: {integrity: sha512-ASgKwEAQQRnyNFHNvpd5uAwstbVYmiTW0Caw3fBb509tNTqXyAAPMyFs5NNihsLZhLxU1j/kjFhkhLWA9djuVg==} + hasBin: true + dependencies: + concat-stream: 2.0.0 + pbf: 3.3.0 + shapefile: 0.6.6 + dev: false + + /geojson-dissolve@3.1.0: + resolution: {integrity: sha512-JXHfn+A3tU392HA703gJbjmuHaQOAE/C1KzbELCczFRFux+GdY6zt1nKb1VMBHp4LWeE7gUY2ql+g06vJqhiwQ==} + dependencies: + '@turf/meta': 3.14.0 + geojson-flatten: 0.2.4 + geojson-linestring-dissolve: 0.0.1 + topojson-client: 3.1.0 + topojson-server: 3.0.1 + dev: false + + /geojson-flatten@0.2.4: + resolution: {integrity: sha512-LiX6Jmot8adiIdZ/fthbcKKPOfWjTQchX/ggHnwMZ2e4b0I243N1ANUos0LvnzepTEsj0+D4fIJ5bKhBrWnAHA==} + hasBin: true + dependencies: + get-stdin: 6.0.0 + minimist: 1.2.0 + dev: false + + /geojson-linestring-dissolve@0.0.1: + resolution: {integrity: sha512-Y8I2/Ea28R/Xeki7msBcpMvJL2TaPfaPKP8xqueJfQ9/jEhps+iOJxOR2XCBGgVb12Z6XnDb1CMbaPfLepsLaw==} + dev: false + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -6238,6 +6760,11 @@ packages: has-symbols: 1.0.3 hasown: 2.0.2 + /get-stdin@6.0.0: + resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} + engines: {node: '>=4'} + dev: false + /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -6596,7 +7123,6 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} requiresBuild: true dev: false - optional: true /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} @@ -7684,6 +8210,14 @@ packages: brace-expansion: 2.0.1 dev: true + /minimist@1.2.0: + resolution: {integrity: sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==} + dev: false + + /minimist@1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: false + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -8148,7 +8682,10 @@ packages: /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true + + /path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + dev: false /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -8188,6 +8725,13 @@ packages: minipass: 7.1.2 dev: true + /path-source@0.1.3: + resolution: {integrity: sha512-dWRHm5mIw5kw0cs3QZLNmpUWty48f5+5v9nWD2dw3Y0Hf+s01Ag8iJEWV0Sm0kocE8kK27DrIowha03e1YR+Qw==} + dependencies: + array-source: 0.0.4 + file-source: 0.6.1 + dev: false + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -8208,6 +8752,14 @@ packages: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true + /pbf@3.3.0: + resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} + hasBin: true + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + dev: false + /pdfast@0.2.0: resolution: {integrity: sha512-cq6TTu6qKSFUHwEahi68k/kqN2mfepjkGrG9Un70cgdRRKLKY6Rf8P8uvP2NvZktaQZNF3YE7agEkLj0vGK9bA==} dev: false @@ -8290,6 +8842,17 @@ packages: parse-svg-path: 0.1.2 dev: false + /points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + dev: false + + /points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + dev: false + /posix-character-classes@0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} @@ -8544,6 +9107,10 @@ packages: sisteransi: 1.0.5 dev: true + /protocol-buffers-schema@3.6.0: + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + dev: false + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false @@ -8644,6 +9211,15 @@ packages: type-fest: 0.6.0 dev: true + /readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -8735,6 +9311,12 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve-protobuf-schema@2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + dependencies: + protocol-buffers-schema: 3.6.0 + dev: false + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -8831,6 +9413,14 @@ packages: fsevents: 2.3.3 dev: true + /roughjs@4.5.2: + resolution: {integrity: sha512-2xSlLDKdsWyFxrveYWk9YQ/Y9UfK38EAMRNkYkMqYBJvPX8abCa9PN0x3w02H8Oa6/0bcZICJU+U95VumPqseg==} + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + dev: false + /run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -8957,6 +9547,18 @@ packages: split-string: 3.1.0 dev: true + /shapefile@0.6.6: + resolution: {integrity: sha512-rLGSWeK2ufzCVx05wYd+xrWnOOdSV7xNUW5/XFgx3Bc02hBkpMlrd2F1dDII7/jhWzv0MSyBFh5uJIy9hLdfuw==} + hasBin: true + dependencies: + array-source: 0.0.4 + commander: 2.20.3 + path-source: 0.1.3 + slice-source: 0.4.1 + stream-source: 0.3.5 + text-encoding: 0.6.4 + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -9019,6 +9621,10 @@ packages: resolution: {integrity: sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA==} dev: false + /simple-statistics@7.8.7: + resolution: {integrity: sha512-ed5FwTNYvkMTfbCai1U+r3symP+lIPKWCqKdudpN4NFNMn9RtDlFtSyAQhCp4oPH0YBjWu/qnW+5q5ZkPB3uHQ==} + dev: false + /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: @@ -9045,6 +9651,19 @@ packages: - '@vue/composition-api' dev: false + /simplify-geojson@1.0.5: + resolution: {integrity: sha512-02l1W4UipP5ivNVq6kX15mAzCRIV1oI3tz0FUEyOsNiv1ltuFDjbNhO+nbv/xhbDEtKqWLYuzpWhUsJrjR/ypA==} + hasBin: true + dependencies: + concat-stream: 1.4.11 + minimist: 1.2.6 + simplify-geometry: 0.0.2 + dev: false + + /simplify-geometry@0.0.2: + resolution: {integrity: sha512-ZEyrplkqgCqDlL7V8GbbYgTLlcnNF+MWWUdy8s8ZeJru50bnI71rDew/I+HG36QS2mPOYAq1ZjwNXxHJ8XOVBw==} + dev: false + /sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -9088,6 +9707,10 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /slice-source@0.4.1: + resolution: {integrity: sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==} + dev: false + /snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -9231,6 +9854,10 @@ packages: object-copy: 0.1.0 dev: true + /stream-source@0.3.5: + resolution: {integrity: sha512-ZuEDP9sgjiAwUVoDModftG0JtYiLUV8K4ljYD1VyUMRWtbVf92474o4kuuul43iZ8t/hRuiDAx1dIJSvirrK/g==} + dev: false + /strict-uri-encode@1.1.0: resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} engines: {node: '>=0.10.0'} @@ -9292,6 +9919,10 @@ packages: define-properties: 1.2.1 es-object-atoms: 1.0.0 + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: false + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -9562,6 +10193,11 @@ packages: source-map-support: 0.5.21 dev: false + /text-encoding@0.6.4: + resolution: {integrity: sha512-hJnc6Qg3dWoOMkqP53F0dzRIgtmsAge09kxUIqGrEUS4qr5rWLckGYaQAVr+opBrIMRErGgy6f5aPnyPpyGRfg==} + deprecated: no longer maintained + dev: false + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -9630,6 +10266,13 @@ packages: commander: 2.20.3 dev: false + /topojson-server@3.0.1: + resolution: {integrity: sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==} + hasBin: true + dependencies: + commander: 2.20.3 + dev: false + /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -9782,6 +10425,14 @@ packages: typed-array-byte-offset: 1.0.2 dev: true + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: false + + /typedarray@0.0.7: + resolution: {integrity: sha512-ueeb9YybpjhivjbHP2LdFDAjbS948fGEPj+ACAMs4xCMmh72OCOMQWBQKlaN4ZNQ04yfLSDLSx1tGRIoWimObQ==} + dev: false + /typeit@8.8.7: resolution: {integrity: sha512-sSVpy+cjeFP6Z+fZqiHzUSShg5yYFeJEt/Qut/bX945+Axyq+Yq+GPOuuk+sofoccSv8nNX/ibOOHkbki2mEpg==} requiresBuild: true diff --git a/src/assets/svg-icon/visactor.svg b/src/assets/svg-icon/visactor.svg new file mode 100644 index 0000000..5c4e884 --- /dev/null +++ b/src/assets/svg-icon/visactor.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/hooks/common/vchart.ts b/src/hooks/common/vchart.ts new file mode 100644 index 0000000..caf2a29 --- /dev/null +++ b/src/hooks/common/vchart.ts @@ -0,0 +1,158 @@ +import { computed, effectScope, onScopeDispose, ref, watch } from 'vue'; +import { useElementSize } from '@vueuse/core'; +import VChart, { registerLiquidChart } from '@visactor/vchart'; +import type { ISpec, ITheme } from '@visactor/vchart'; +import light from '@visactor/vchart-theme/public/light.json'; +import dark from '@visactor/vchart-theme/public/dark.json'; +import { useThemeStore } from '@/store/modules/theme'; + +registerLiquidChart(); + +// register the theme +VChart.ThemeManager.registerTheme('light', light as ITheme); +VChart.ThemeManager.registerTheme('dark', dark as ITheme); + +interface ChartHooks { + onRender?: (chart: VChart) => void | Promise; + onUpdated?: (chart: VChart) => void | Promise; + onDestroy?: (chart: VChart) => void | Promise; +} + +export function useVChart(specFactory: () => T, hooks: ChartHooks = {}) { + const scope = effectScope(); + const themeStore = useThemeStore(); + const darkMode = computed(() => themeStore.darkMode); + + const domRef = ref(null); + const initialSize = { width: 0, height: 0 }; + const { width, height } = useElementSize(domRef, initialSize); + + let chart: VChart | null = null; + const spec: T = specFactory(); + + const { onRender, onUpdated, onDestroy } = hooks; + + /** + * whether can render chart + * + * when domRef is ready and initialSize is valid + */ + function canRender() { + return domRef.value && initialSize.width > 0 && initialSize.height > 0; + } + + /** is chart rendered */ + function isRendered() { + return Boolean(domRef.value && chart); + } + + /** + * update chart spec + * + * @param callback callback function + */ + async function updateSpec(callback: (opts: T, optsFactory: () => T) => ISpec = () => spec) { + if (!isRendered()) return; + + const updatedOpts = callback(spec, specFactory); + + Object.assign(spec, updatedOpts); + + if (isRendered()) { + chart?.release(); + } + + chart?.updateSpec({ ...updatedOpts }, true); + + await onUpdated?.(chart!); + } + + function setSpec(newSpec: T) { + chart?.updateSpec(newSpec); + } + + /** render chart */ + async function render() { + if (!isRendered()) { + // apply the theme + if (darkMode.value) { + VChart.ThemeManager.setCurrentTheme('dark'); + } else { + VChart.ThemeManager.setCurrentTheme('light'); + } + + chart = new VChart(spec, { dom: domRef.value as HTMLElement }); + chart.renderSync(); + + await onRender?.(chart); + } + } + + /** resize chart */ + function resize() { + // chart?.resize(); + } + + /** destroy chart */ + async function destroy() { + if (!chart) return; + + await onDestroy?.(chart); + chart?.release(); + chart = null; + } + + /** change chart theme */ + async function changeTheme() { + await destroy(); + await render(); + await onUpdated?.(chart!); + } + + /** + * render chart by size + * + * @param w width + * @param h height + */ + async function renderChartBySize(w: number, h: number) { + initialSize.width = w; + initialSize.height = h; + + // size is abnormal, destroy chart + if (!canRender()) { + await destroy(); + + return; + } + + // resize chart + if (isRendered()) { + resize(); + } + + // render chart + await render(); + } + + scope.run(() => { + watch([width, height], ([newWidth, newHeight]) => { + renderChartBySize(newWidth, newHeight); + }); + + watch(darkMode, () => { + changeTheme(); + }); + }); + + onScopeDispose(() => { + destroy(); + scope.stop(); + }); + + return { + domRef, + updateSpec, + setSpec + }; +} diff --git a/src/locales/langs/en-us.ts b/src/locales/langs/en-us.ts index 852cebd..73bd10a 100644 --- a/src/locales/langs/en-us.ts +++ b/src/locales/langs/en-us.ts @@ -205,6 +205,7 @@ const local: App.I18n.Schema = { plugin_charts: 'Charts', plugin_charts_echarts: 'ECharts', plugin_charts_antv: 'AntV', + plugin_charts_vchart: 'VChart', plugin_editor: 'Editor', plugin_editor_quill: 'Quill', plugin_editor_markdown: 'Markdown', diff --git a/src/locales/langs/zh-cn.ts b/src/locales/langs/zh-cn.ts index 79cf9b5..2ff6b16 100644 --- a/src/locales/langs/zh-cn.ts +++ b/src/locales/langs/zh-cn.ts @@ -205,6 +205,7 @@ const local: App.I18n.Schema = { plugin_charts: '图表', plugin_charts_echarts: 'ECharts', plugin_charts_antv: 'AntV', + plugin_charts_vchart: 'VChart', plugin_editor: '编辑器', plugin_editor_quill: '富文本编辑器', plugin_editor_markdown: 'MD 编辑器', diff --git a/src/plugins/ui.ts b/src/plugins/ui.ts index c7c5217..203c5bb 100644 --- a/src/plugins/ui.ts +++ b/src/plugins/ui.ts @@ -1,5 +1,5 @@ import type { App } from 'vue'; -import ElementPlus, { ElTable } from 'element-plus'; +import ElementPlus, { ElCard, ElTable } from 'element-plus'; /** global table column align */ ElTable.TableColumn.props.align = { @@ -7,6 +7,12 @@ ElTable.TableColumn.props.align = { default: 'center' }; +/** global ElCard shadow */ +ElCard.props.shadow = { + type: String, + default: 'never' +}; + /** full import ElementPlus */ export const setupUI = (app: App) => { app.use(ElementPlus); diff --git a/src/router/elegant/imports.ts b/src/router/elegant/imports.ts index 75f1b1f..924ae51 100644 --- a/src/router/elegant/imports.ts +++ b/src/router/elegant/imports.ts @@ -42,6 +42,7 @@ export const views: Record Promise import("@/views/plugin/barcode/index.vue"), plugin_charts_antv: () => import("@/views/plugin/charts/antv/index.vue"), plugin_charts_echarts: () => import("@/views/plugin/charts/echarts/index.vue"), + plugin_charts_vchart: () => import("@/views/plugin/charts/vchart/index.vue"), plugin_copy: () => import("@/views/plugin/copy/index.vue"), plugin_editor_markdown: () => import("@/views/plugin/editor/markdown/index.vue"), plugin_editor_quill: () => import("@/views/plugin/editor/quill/index.vue"), diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts index 16b29a3..ca294bb 100644 --- a/src/router/elegant/routes.ts +++ b/src/router/elegant/routes.ts @@ -424,6 +424,16 @@ export const generatedRoutes: GeneratedRoute[] = [ i18nKey: 'route.plugin_charts_echarts', icon: 'simple-icons:apacheecharts' } + }, + { + name: 'plugin_charts_vchart', + path: '/plugin/charts/vchart', + component: 'view.plugin_charts_vchart', + meta: { + title: 'plugin_charts_vchart', + i18nKey: 'route.plugin_charts_vchart', + localIcon: 'visactor' + } } ] }, diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index 47347a1..a67a34f 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -213,6 +213,7 @@ const routeMap: RouteMap = { "plugin_charts": "/plugin/charts", "plugin_charts_antv": "/plugin/charts/antv", "plugin_charts_echarts": "/plugin/charts/echarts", + "plugin_charts_vchart": "/plugin/charts/vchart", "plugin_copy": "/plugin/copy", "plugin_editor": "/plugin/editor", "plugin_editor_markdown": "/plugin/editor/markdown", diff --git a/src/typings/elegant-router.d.ts b/src/typings/elegant-router.d.ts index cf915cf..4e3e22a 100644 --- a/src/typings/elegant-router.d.ts +++ b/src/typings/elegant-router.d.ts @@ -67,6 +67,7 @@ declare module "@elegant-router/types" { "plugin_charts": "/plugin/charts"; "plugin_charts_antv": "/plugin/charts/antv"; "plugin_charts_echarts": "/plugin/charts/echarts"; + "plugin_charts_vchart": "/plugin/charts/vchart"; "plugin_copy": "/plugin/copy"; "plugin_editor": "/plugin/editor"; "plugin_editor_markdown": "/plugin/editor/markdown"; @@ -184,6 +185,7 @@ declare module "@elegant-router/types" { | "plugin_barcode" | "plugin_charts_antv" | "plugin_charts_echarts" + | "plugin_charts_vchart" | "plugin_copy" | "plugin_editor_markdown" | "plugin_editor_quill" diff --git a/src/views/_builtin/login/index.vue b/src/views/_builtin/login/index.vue index 6550ab7..b0d6972 100644 --- a/src/views/_builtin/login/index.vue +++ b/src/views/_builtin/login/index.vue @@ -55,7 +55,7 @@ const bgColor = computed(() => {