From c056c4e79e8fbf762672504572a62d47204c42ef Mon Sep 17 00:00:00 2001 From: "Adrian O.V" <83074853+CodexAdrian@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:39:26 -0400 Subject: [PATCH] Improved graphs (#120) * Complete chart overhaul * Update package.json * Update pnpm-lock.yaml * run lint * whoops * Update pnpm-lock.yaml * Update analytics.md * Try again? * Update Chart.vue * Added Compact/Spark charts * Added number formatting and cleanup * Touch ups * improve default colors * removed unnecessary tooltip --- docs/components/analytics.md | 282 +++++++++-------- lib/assets/icons/zoom-in.svg | 1 + lib/assets/icons/zoom-out.svg | 1 + lib/assets/styles/defaults.scss | 7 + lib/components/chart/BarChart.vue | 115 ------- lib/components/chart/Chart.vue | 417 ++++++++++++++++++++++++++ lib/components/chart/CompactChart.vue | 278 +++++++++++++++++ lib/components/chart/LineChart.vue | 127 -------- lib/components/chart/PieChart.vue | 93 ------ lib/components/index.js | 7 +- package.json | 6 +- pnpm-lock.yaml | 113 +++++-- 12 files changed, 954 insertions(+), 493 deletions(-) create mode 100644 lib/assets/icons/zoom-in.svg create mode 100644 lib/assets/icons/zoom-out.svg delete mode 100644 lib/components/chart/BarChart.vue create mode 100644 lib/components/chart/Chart.vue create mode 100644 lib/components/chart/CompactChart.vue delete mode 100644 lib/components/chart/LineChart.vue delete mode 100644 lib/components/chart/PieChart.vue diff --git a/docs/components/analytics.md b/docs/components/analytics.md index 22a2a0ec0..3e7adbdf0 100644 --- a/docs/components/analytics.md +++ b/docs/components/analytics.md @@ -2,136 +2,168 @@ - - - + + + + + + + + + + + + Slot for title stuff + + + + + + + +
+ +
```vue - + + ... slot for title stuff + + ``` + ```vue - ``` diff --git a/lib/assets/icons/zoom-in.svg b/lib/assets/icons/zoom-in.svg new file mode 100644 index 000000000..deaf81253 --- /dev/null +++ b/lib/assets/icons/zoom-in.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/assets/icons/zoom-out.svg b/lib/assets/icons/zoom-out.svg new file mode 100644 index 000000000..0dab38198 --- /dev/null +++ b/lib/assets/icons/zoom-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/assets/styles/defaults.scss b/lib/assets/styles/defaults.scss index 37d1b9212..4c74292e7 100644 --- a/lib/assets/styles/defaults.scss +++ b/lib/assets/styles/defaults.scss @@ -165,6 +165,13 @@ svg { width: 1em; } +.chart { + svg { + height: 100%; + width: 100%; + } +} + .button-animation { transition: opacity 0.5s ease-in-out, filter 0.2s ease-in-out, transform 0.05s ease-in-out, outline 0.2s ease-in-out; diff --git a/lib/components/chart/BarChart.vue b/lib/components/chart/BarChart.vue deleted file mode 100644 index cd5811dec..000000000 --- a/lib/components/chart/BarChart.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - - - diff --git a/lib/components/chart/Chart.vue b/lib/components/chart/Chart.vue new file mode 100644 index 000000000..3321ce2cf --- /dev/null +++ b/lib/components/chart/Chart.vue @@ -0,0 +1,417 @@ + + + + + diff --git a/lib/components/chart/CompactChart.vue b/lib/components/chart/CompactChart.vue new file mode 100644 index 000000000..72bf4a9c9 --- /dev/null +++ b/lib/components/chart/CompactChart.vue @@ -0,0 +1,278 @@ + + + + + diff --git a/lib/components/chart/LineChart.vue b/lib/components/chart/LineChart.vue deleted file mode 100644 index 332f76fb5..000000000 --- a/lib/components/chart/LineChart.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - diff --git a/lib/components/chart/PieChart.vue b/lib/components/chart/PieChart.vue deleted file mode 100644 index e30317a45..000000000 --- a/lib/components/chart/PieChart.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - - diff --git a/lib/components/index.js b/lib/components/index.js index aa0cdb769..ebd59a59e 100644 --- a/lib/components/index.js +++ b/lib/components/index.js @@ -30,9 +30,8 @@ export { default as TextLogo } from './brand/TextLogo.vue' export { default as FourOhFourNotFound } from '@/assets/branding/404.svg?component' // Charts -export { default as BarChart } from './chart/BarChart.vue' -export { default as LineChart } from './chart/LineChart.vue' -export { default as PieChart } from './chart/PieChart.vue' +export { default as Chart } from './chart/Chart.vue' +export { default as CompactChart } from './chart/CompactChart.vue' // Modals export { default as Modal } from './modal/Modal.vue' @@ -185,6 +184,8 @@ export { default as VersionIcon } from '@/assets/icons/version.svg?component' export { default as WikiIcon } from '@/assets/icons/wiki.svg?component' export { default as XIcon } from '@/assets/icons/x.svg?component' export { default as XCircleIcon } from '@/assets/icons/x-circle.svg?component' +export { default as ZoomInIcon } from '@/assets/icons/zoom-in.svg?component' +export { default as ZoomOutIcon } from '@/assets/icons/zoom-out.svg?component' // Editor Icons export { default as BoldIcon } from '@/assets/icons/bold.svg?component' diff --git a/package.json b/package.json index 8195c6f45..bdbb3e48d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "omorphia", "type": "module", - "version": "0.6.2", + "version": "0.6.3", "files": [ "dist" ], @@ -30,15 +30,15 @@ "@codemirror/language": "^6.9.1", "@codemirror/state": "^6.3.0", "@codemirror/view": "^6.21.3", - "chart.js": "^4.3.3", + "apexcharts": "^3.44.0", "dayjs": "^1.11.7", "floating-vue": "^2.0.0-beta.20", "highlight.js": "^11.8.0", "markdown-it": "^13.0.1", "qrcode.vue": "^3.4.0", - "vue-chartjs": "^5.2.0", "vue-router": "^4.2.1", "vue-select": "^4.0.0-beta.6", + "vue3-apexcharts": "^1.4.4", "xss": "^1.0.14" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 712339459..971da712a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,9 @@ dependencies: '@codemirror/view': specifier: ^6.21.3 version: 6.21.3 - chart.js: - specifier: ^4.3.3 - version: 4.3.3 + apexcharts: + specifier: ^3.44.0 + version: 3.44.0 dayjs: specifier: ^1.11.7 version: 1.11.7 @@ -41,15 +41,15 @@ dependencies: vue: specifier: ^3.3.4 version: 3.3.4 - vue-chartjs: - specifier: ^5.2.0 - version: 5.2.0(chart.js@4.3.3)(vue@3.3.4) vue-router: specifier: ^4.2.1 version: 4.2.1(vue@3.3.4) vue-select: specifier: ^4.0.0-beta.6 version: 4.0.0-beta.6(vue@3.3.4) + vue3-apexcharts: + specifier: ^1.4.4 + version: 1.4.4(apexcharts@3.44.0)(vue@3.3.4) xss: specifier: ^1.0.14 version: 1.0.14 @@ -699,10 +699,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@kurkle/color@0.3.2: - resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} - dev: false - /@lezer/common@1.1.0: resolution: {integrity: sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==} dev: false @@ -1364,6 +1360,10 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true + /@yr/monotone-cubic-spline@1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false + /acorn-import-assertions@1.9.0(acorn@8.8.2): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: @@ -1446,6 +1446,18 @@ packages: picomatch: 2.3.1 dev: true + /apexcharts@3.44.0: + resolution: {integrity: sha512-u7Xzrbcxc2yWznN78Jh5NMCYVAsWDfBjRl5ea++rVzFAqjU2hLz4RgKIFwYOBDRQtW1e/Qz8azJTqIJ1+Vu9Qg==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + dev: false + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -1529,13 +1541,6 @@ packages: supports-color: 7.2.0 dev: true - /chart.js@4.3.3: - resolution: {integrity: sha512-aTk7pBw+x6sQYhon/NR3ikfUJuym/LdgpTlgZRe2PaEhjUMKBKyNaFCMVRAyTEWYFNO7qRu7iQVqOw/OqzxZxQ==} - engines: {pnpm: '>=7'} - dependencies: - '@kurkle/color': 0.3.2 - dev: false - /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -2784,6 +2789,60 @@ packages: engines: {node: '>= 0.4'} dev: true + /svg.draggable.js@2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.easing.js@2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.filter.js@2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.js@2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false + + /svg.pathmorphing.js@0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.resize.js@1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + dev: false + + /svg.select.js@2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.select.js@3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + /svgo@3.0.2: resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} engines: {node: '>=14.0.0'} @@ -3051,16 +3110,6 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /vue-chartjs@5.2.0(chart.js@4.3.3)(vue@3.3.4): - resolution: {integrity: sha512-d3zpKmGZr2OWHQ1xmxBcAn5ShTG917+/UCLaSpaCDDqT0U7DBsvFzTs69ZnHCgKoXT55GZDW8YEj9Av+dlONLA==} - peerDependencies: - chart.js: ^4.1.1 - vue: ^3.0.0-0 || ^2.7.0 - dependencies: - chart.js: 4.3.3 - vue: 3.3.4 - dev: false - /vue-demi@0.14.5(vue@3.3.4): resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} engines: {node: '>=12'} @@ -3138,6 +3187,16 @@ packages: typescript: 5.2.2 dev: true + /vue3-apexcharts@1.4.4(apexcharts@3.44.0)(vue@3.3.4): + resolution: {integrity: sha512-TH89uZrxGjaDvkaYAISvj8+k6Bf1rUKFillc8oJirs5XZEPiwM1ELKZQ786wz0rfPqkSHHny2lqqUCK7Rw+LcQ==} + peerDependencies: + apexcharts: '> 3.0.0' + vue: '> 3.0.0' + dependencies: + apexcharts: 3.44.0 + vue: 3.3.4 + dev: false + /vue@3.3.4: resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} dependencies: