From 35691f62773828e2d075fdb7b517c7c79b6a6a73 Mon Sep 17 00:00:00 2001 From: graphieros Date: Fri, 6 Jun 2025 17:53:16 +0200 Subject: [PATCH 01/17] New feature - Add BaseDraggableDialog atom component --- src/atoms/BaseDraggableDialog.vue | 316 ++++++++++++++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100644 src/atoms/BaseDraggableDialog.vue diff --git a/src/atoms/BaseDraggableDialog.vue b/src/atoms/BaseDraggableDialog.vue new file mode 100644 index 00000000..ba1504d6 --- /dev/null +++ b/src/atoms/BaseDraggableDialog.vue @@ -0,0 +1,316 @@ + + + + + From af2086fac808e277f0bf8f3053592d5efa3089da Mon Sep 17 00:00:00 2001 From: graphieros Date: Sat, 7 Jun 2025 11:46:09 +0200 Subject: [PATCH 02/17] New feature - Add VueUiRidgeline component --- README.md | 18 +- TestingArena/ArenaVueUiIcon.vue | 2 +- TestingArena/ArenaVueUiRidgeline.vue | 207 +++++ cypress/fixtures/vdui-components.js | 331 ++++++++ documentation/installation.md | 3 +- package.json | 2 +- src/App.vue | 7 +- src/TestingArena.vue | 5 +- src/atoms/BaseIcon.vue | 4 +- src/components/vue-data-ui.vue | 6 +- src/components/vue-ui-ridgeline.vue | 1081 ++++++++++++++++++++++++++ src/components/vue-ui-skeleton.vue | 26 + src/index.js | 1 + src/lib.js | 16 +- src/main.js | 4 +- src/themes.json | 732 +++++++++++++++++ src/useConfig.js | 157 ++++ types/vue-data-ui.d.ts | 146 +++- 18 files changed, 2723 insertions(+), 25 deletions(-) create mode 100644 TestingArena/ArenaVueUiRidgeline.vue create mode 100644 src/components/vue-ui-ridgeline.vue diff --git a/README.md b/README.md index 94c2d8d6..db482124 100755 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # vue-data-ui [![npm](https://img.shields.io/npm/v/vue-data-ui)](https://github.com/graphieros/vue-data-ui) -[![Static Badge](https://img.shields.io/badge/components-61-blue)](https://github.com/graphieros/vue-data-ui) +[![Static Badge](https://img.shields.io/badge/components-62-blue)](https://github.com/graphieros/vue-data-ui) [![GitHub issues](https://img.shields.io/github/issues/graphieros/vue-data-ui)](https://github.com/graphieros/vue-data-ui/issues) [![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/graphieros/vue-data-ui?tab=MIT-1-ov-file#readme) [![MadeWithVueJs.com shield](https://madewithvuejs.com/storage/repo-shields/4526-shield.svg)](https://madewithvuejs.com/p/vue-data-ui/shield-link) @@ -43,6 +43,7 @@ Available components - [VueUiQuickChart](https://vue-data-ui.graphieros.com/docs#vue-ui-quick-chart) - [VueUiRadar](https://vue-data-ui.graphieros.com/docs#vue-ui-radar) - [VueUiRelationCircle](https://vue-data-ui.graphieros.com/docs#vue-ui-relation-circle) +- [VueUiRidgeline](https://vue-data-ui.graphieros.com/docs#vue-ui-ridgeline) - [VueUiRings](https://vue-data-ui.graphieros.com/docs#vue-ui-rings) - [VueUiScatter](https://vue-data-ui.graphieros.com/docs#vue-ui-scatter) - [VueUiStackbar](https://vue-data-ui.graphieros.com/docs#vue-ui-stackbar) @@ -427,8 +428,8 @@ From the dataset you pass into the props, this component will produce the most a | ----------------------------- | ------------------------------------------ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------ | | `VueUiAgePyramid` | `Array>` | `VueUiSparklineConfig` | `generatePdf`, `generateImage`, `generateCsv`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiCandlestick` | `Array>` | `VueUiCandlestickConfig` | `generatePdf`, `generateImage`, `generateCsv`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#reset-action`, `#watermark`, `#chart-background` | ✅ | ✅ | -| `VueUiCirclePack` | `VueUiCirclePackDatasetItem[]` | `VueUiCirclePackConfig` | `@selectDatapoint`, `getData`, `generatePdf`, `generateImage`, `generateCsv`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` , `#pattern`, `#zoom-label`, `#data-label` | ✅ | ✅ | | `VueUiChestnut` | `VueUiChestnutDatasetRoot[]` | `VueUiChestnutConfig` | `@selectRoot`, `@selectBranch`, `@selectNut`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` | ❌ | ✅ | +| `VueUiCirclePack` | `VueUiCirclePackDatasetItem[]` | `VueUiCirclePackConfig` | `@selectDatapoint`, `getData`, `generatePdf`, `generateImage`, `generateCsv`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` , `#pattern`, `#zoom-label`, `#data-label` | ✅ | ✅ | | `VueUiDonutEvolution` | `VueUiDonutEvolutionDatasetItem[]` | `VueUiDonutEvolutionConfig` | `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#reset-action`, `#watermark`, `#chart-background` | ❌ | ✅ | | `VueUiDonut` | `VueUiDonutDatasetItem[]` | `VueUiDonutConfig` | `@selectDatapoint`, `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#dataLabel`, `#tooltip-before`, `#tooltip-after`, `#plot-comment`, `#watermark`, `#chart-background`, `#pattern` | ✅ | ✅ | | `VueUiDumbbell` | `VueUiDumbbellDataset[]` | `VueUiDumbbellConfig` | `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` | ❌ | ✅ | @@ -445,6 +446,7 @@ From the dataset you pass into the props, this component will produce the most a | `VueUiParallelCoordinatePlot` | `VueUiParallelCoordinatePlotDatasetItem[]` | `VueUiParallelCoordinatePlotConfig` | `@selectLegend`, `@selectDatapoint`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#plot-comment`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiQuadrant` | `VueUiQuadrantDatasetItem[]` | `VueUiQuadrantConfig` | `@selectLegend`, `@selectPlot`, `@selectSide`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiRadar` | `VueUiRadarDataset` | `VueUiRadarConfig` | `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | +| `VueUiRidgeline` | `VueUiRidgelineDatasetItem[]` | `VueUiRidgelineConfig` | `@selectLegend`, `@selectX`, `@selectDatapoint`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#time-label`,`#watermark`, `#chart-background`, `#pattern` | ❌ | ✅ | | `VueUiRings` | `VueUiRingsDatasetItem[]` | `VueUiRingsConfig` | `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background`, `#pattern` | ✅ | ✅ | | `VueUiScatter` | `VueUiScatterDatasetItem[]` | `VueUiScatterConfig` | `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiStackbar` | `VueUiStackbarDatasetItem[]` | `VueUiStackbarConfig` | `@selectLegend`, `@selectDatapoint`, `@selectTimeLabel`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#time-label`, `#tooltip-before`, `#tooltip-after`, `#reset-action`, `#watermark`, `#chart-background`, `#pattern` | ✅ | ✅ | @@ -600,6 +602,7 @@ User options actions available per chart: | VueUiQuickChart | optionTooltip, optionPdf, optionImg, optionFullscreen, optionAnnotator | | VueUiRadar | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | | VueUiRelationCircle | optionPdf, optionImg, optionFullscreen, optionAnnotator | +| VueUiRidgeline | optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | | VueUiRings | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | | VueUiScatter | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | | VueUiSparkHistogram | (no user options menu) | @@ -619,9 +622,9 @@ User options actions available per chart: | VueUiWaffle | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | | VueUiWheel | optionPdf, optionImg, optionFullscreen, optionAnnotator | | VueUiWordCloud | optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | +| VueUiWorld | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | | VueUiXy | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionLabels, optionFullscreen, optionStack, optionAnnotator | | VueUiXyCanvas | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionLabels, optionFullscreen, optionStack, optionAnnotator | -| VueUiWorld | optionTooltip, optionPdf, optionImg, optionCsv, optionTable, optionFullscreen, optionAnnotator | User options menu icon can be customized using the #menuIcon slot: @@ -652,6 +655,7 @@ It is possible to provide a custom palette in the config prop through config.cus - VueUiQuickChart - VueUiRadar - VueUiRelationCircle +- VueUiRidgeline - VueUiRings - VueUiScatter - VueUiSparkStackbar @@ -664,9 +668,9 @@ It is possible to provide a custom palette in the config prop through config.cus - VueUiVerticalBar - VueUiWaffle - VueUiWordCloud +- VueUiWorld - VueUiXy - VueUiXyCanvas -- VueUiWorld If the array of colors provided in customPalette is too small for the dataset, remaining colors will be computed from the default internal palette. Accepted color formats: HEX, RGB, HSL, named colors. @@ -703,6 +707,7 @@ However the folowing charts can be made fully responsive, making them better to | VueUiQuickChart | ✅ | | VueUiRadar | ✅ | | VueUiRelationCircle | ✅ | +| VueUiRidgeline | ✅ | | VueUiRings | ✅ | | VueUiScatter | ✅ | | VueUiSparkHistogram | - | @@ -723,9 +728,9 @@ However the folowing charts can be made fully responsive, making them better to | VueUiWaffle | ✅ | | VueUiWheel | ✅ | | VueUiWordCloud | ✅ | +| VueUiWorld | - | | VueUiXy | ✅ | | VueUiXyCanvas | ✅ | -| VueUiWorld | - | To activate responsiveness, set the config.responsive attribute to true: @@ -822,12 +827,13 @@ The #pattern slot is available on the following components: - VueUiCirclePack - VueUiDonut - VueUiGauge +- VueUiRidgeline - VueUiRings - VueUiStackbar - VueUiVerticalBar - VueUiWaffle -- VueUiXy - VueUiWorld +- VueUiXy A set of 12 readymade patterns are available through the VueUiPattern component: diff --git a/TestingArena/ArenaVueUiIcon.vue b/TestingArena/ArenaVueUiIcon.vue index f27b5d66..2255082e 100644 --- a/TestingArena/ArenaVueUiIcon.vue +++ b/TestingArena/ArenaVueUiIcon.vue @@ -3,7 +3,7 @@ import { ref } from "vue"; import BaseIcon from "./../src/atoms/BaseIcon.vue"; const icons = ref([ - "annotator", "chart3dBar", "chartAgePyramid", "chartBar", "chartCandlestick", "chartChestnut", "chartDonut", "chartDonutEvolution", "chartGauge", "chartHeatmap", "chartLine", "chartMoodRadar", "chartOnion", "chartQuadrant", "chartRadar", "chartRelationCircle", "chartRings", "chartScatter", "chartSparkHistogram", "chartSparkStackbar", "chartTable", "chartThermometer", "chartTiremarks", "chartVerticalBar", "chartWaffle", "chartWheel", "close", "dashboard", "digit0", "digit1", "digit2", "digit3", "digit4", "digit5", "digit6", "digit7", "digit8", "digit9", "excel", "image", "labelClose", "labelOpen", "menu", "moodFlat", "moodHappy", "moodNeutral", "moodSad", "pdf", "screenshot", "skeleton", "smiley", "sort", "spin", "star", "tableClose", "tableOpen", "chartNestedDonuts", "chartSparkbar", "refresh", "circleQuestion", "circleExclamation", "circleCheck", "circleCancel", "moodLaughing", "moodWink", "moodEmbarrassed", "moodSurprised", "exitFullscreen", "fullscreen", "arrowRight", "arrowTop", "arrowBottom", "arrowLeft", "chartCluster", "chartSparkline", "legend", "csv", "chartGalaxy", "kpi", "kpiBox", "tooltip", "vueDataUi", "ratio", "func", "settings", "trendUp", "trendDown", "clipBoard", "zoomPlus", "zoomMinus", "clipboardLine", "clipboardDonut", "clipboardBar", "clipboardVariable", "triangle", "triangleFill", "square", "squareFill", "diamond", "diamondFill", "pentagon", "pentagonFill", "hexagon", "hexagonFill", "circle", "circleFill", "star", "starFace", "starFill", "numbers", "sigma", "mu", "lambda", "people", "copy", "accordion", "cursor", "trend", "chartStripPlot", "chartDumbbell", "copyLeft", "chartWordCloud", "stack", "unstack", "window", "chartFlow", "chartParallelCoordinatePlot", "tooltipDisabled", "pause", "play", "stop", "restart", "lap", "carouselTable", "battery", "chartStackbar", "chartBullet", "trash", "annotatorDisabled", "palette", "boxes", "chartFunnel", "chartHistoryPlot", "chartTableSparkline", "chartCirclePack", "icons", "robot", "hourglass", "computer", "htmlTag", "curlyBrackets", "curlySpread", "world", + "annotator", "chart3dBar", "chartAgePyramid", "chartBar", "chartCandlestick", "chartChestnut", "chartDonut", "chartDonutEvolution", "chartGauge", "chartHeatmap", "chartLine", "chartMoodRadar", "chartOnion", "chartQuadrant", "chartRadar", "chartRelationCircle", "chartRings", "chartScatter", "chartSparkHistogram", "chartSparkStackbar", "chartTable", "chartThermometer", "chartTiremarks", "chartVerticalBar", "chartWaffle", "chartWheel", "close", "dashboard", "digit0", "digit1", "digit2", "digit3", "digit4", "digit5", "digit6", "digit7", "digit8", "digit9", "excel", "image", "labelClose", "labelOpen", "menu", "moodFlat", "moodHappy", "moodNeutral", "moodSad", "pdf", "screenshot", "skeleton", "smiley", "sort", "spin", "star", "tableClose", "tableOpen", "chartNestedDonuts", "chartSparkbar", "refresh", "circleQuestion", "circleExclamation", "circleCheck", "circleCancel", "moodLaughing", "moodWink", "moodEmbarrassed", "moodSurprised", "exitFullscreen", "fullscreen", "arrowRight", "arrowTop", "arrowBottom", "arrowLeft", "chartCluster", "chartSparkline", "legend", "csv", "chartGalaxy", "kpi", "kpiBox", "tooltip", "vueDataUi", "ratio", "func", "settings", "trendUp", "trendDown", "clipBoard", "zoomPlus", "zoomMinus", "clipboardLine", "clipboardDonut", "clipboardBar", "clipboardVariable", "triangle", "triangleFill", "square", "squareFill", "diamond", "diamondFill", "pentagon", "pentagonFill", "hexagon", "hexagonFill", "circle", "circleFill", "star", "starFace", "starFill", "numbers", "sigma", "mu", "lambda", "people", "copy", "accordion", "cursor", "trend", "chartStripPlot", "chartDumbbell", "copyLeft", "chartWordCloud", "stack", "unstack", "window", "chartFlow", "chartParallelCoordinatePlot", "tooltipDisabled", "pause", "play", "stop", "restart", "lap", "carouselTable", "battery", "chartStackbar", "chartBullet", "trash", "annotatorDisabled", "palette", "boxes", "chartFunnel", "chartHistoryPlot", "chartTableSparkline", "chartCirclePack", "icons", "robot", "hourglass", "computer", "htmlTag", "curlyBrackets", "curlySpread", "world", "eye", "chartRidgeline" ]) diff --git a/TestingArena/ArenaVueUiRidgeline.vue b/TestingArena/ArenaVueUiRidgeline.vue new file mode 100644 index 00000000..7f7ca802 --- /dev/null +++ b/TestingArena/ArenaVueUiRidgeline.vue @@ -0,0 +1,207 @@ + + + \ No newline at end of file diff --git a/cypress/fixtures/vdui-components.js b/cypress/fixtures/vdui-components.js index 197c968e..04dedfd7 100644 --- a/cypress/fixtures/vdui-components.js +++ b/cypress/fixtures/vdui-components.js @@ -5,6 +5,337 @@ * */ export const components = [ + { + name: 'VueUiRidgeline', + dataset: [ + { + "name": "Serie 0", + "datapoints": [ + { + "name": "Variable 1", + "values": [ + 0, + 39.19772731440935, + 98.46485775929364, + 114.1908949057329, + 291.4884910336525, + 183.09090011896896, + 185.17193297940813, + 87.11985921912097, + 591.7728339449, + 64.18309645967346, + 107.88366917119507, + 782.9295340246069, + 348.5099161382734, + 990.367404438023, + 329.02212144414676, + 1424.4185279090398, + 1494.0572685328514, + 1336.717982199592, + 1796.4333568263096, + 442.9945458979909, + 396.8189640396176, + 1932.3494435569128, + 1970.748871336182, + 108.11006667003626 + ], + "color": "red" + }, + { + "name": "Variable 2", + "values": [ + 0, + 44.28146601852738, + 67.37504011659918, + 55.07512871419623, + 331.94363912799696, + 205.2717957693323, + 282.584906104573, + 178.3395950868987, + 322.35289229262804, + 335.30041398936856, + 889.9567716077663, + 818.1069205895715, + 278.6338830796641, + 879.3179399919828, + 1390.5780165869562, + 4.786267480583528, + 1032.9603277271387, + 226.90514191090506, + 112.6167852067102, + 1543.8043747859083, + 367.1148104592348, + 1299.3478064051128, + 312.7703389394627, + 1022.2306667527763 + ], + "color": "blue" + } + ] + }, + { + "name": "Serie 1", + "datapoints": [ + { + "name": "Variable 1", + "values": [ + 0, + 81.26281105289809, + 76.33258947423916, + 274.6970952998332, + 219.45589214138522, + 249.19606094147105, + 166.9312821503948, + 205.25199402219081, + 171.45141282343258, + 64.27950413815766, + 287.6927347508198, + 831.609590191458, + 348.68246685227905, + 986.0637489050416, + 53.78701016431815, + 942.4682172031519, + 1169.6517126157971, + 1336.7051626907864, + 1510.938463185112, + 1810.7169843571903, + 1850.522981210778, + 861.6668085910355, + 1678.2914654443643, + 207.0456193192308 + ], + "color": "red" + }, + { + "name": "Variable 2", + "values": [ + 0, + 85.35017895751969, + 64.08725288435046, + 62.091025438107586, + 170.95211279529136, + 298.12890093762, + 582.5960170052857, + 323.7189844880279, + 423.3506893849237, + 657.7001341358781, + 2.713954614031233, + 545.3087975091396, + 702.8615391951712, + 1033.3368790313962, + 908.8960310962362, + 62.66515263811101, + 673.0306750619106, + 184.86208038155638, + 1778.1388015007842, + 1802.2472242484766, + 812.5519521448052, + 1349.9104953715068, + 66.90846629013478, + 1426.911956876513 + ], + "color": "blue" + } + ] + }, + { + "name": "Serie 2", + "datapoints": [ + { + "name": "Variable 1", + "values": [ + 0, + 42.06495350648653, + 101.05869353465988, + 92.26302174995948, + 338.339203409907, + 1.2519596078831574, + 49.23995234368907, + 211.57351500184689, + 159.65108921874344, + 570.1116114115667, + 346.6598468204859, + 630.6436806341121, + 156.44168932078162, + 923.0391830068639, + 1148.5210079019737, + 1262.9079000859829, + 969.3634133802377, + 1464.3206563866524, + 1255.7719733646056, + 379.28845055207273, + 216.45101834516, + 529.3271202937832, + 1457.64507072256, + 86.95381633180313 + ], + "color": "red" + }, + { + "name": "Variable 2", + "values": [ + 0, + 75.89764669639099, + 84.19555235584355, + 11.373496883283252, + 9.575847679604221, + 133.96807445237573, + 302.19026132150134, + 628.9975382290132, + 641.8645590311042, + 456.38767540133176, + 478.4708811906736, + 805.3178498540375, + 112.26010442944207, + 342.94805727234177, + 128.89272912435382, + 284.3659595114697, + 1036.2780931807931, + 942.0189318077448, + 89.6166330908573, + 288.5635185961303, + 1568.2565253828009, + 775.6097202584252, + 767.858618801546, + 991.1162549165539 + ], + "color": "blue" + } + ] + }, + { + "name": "Serie 3", + "datapoints": [ + { + "name": "Variable 1", + "values": [ + 0, + 87.24083602248358, + 141.66207325395308, + 97.87958554535791, + 355.7165643729727, + 384.23318330720434, + 193.29236660309817, + 252.59887581113153, + 67.14746184735034, + 29.9638143757347, + 853.9898275161722, + 23.30862036523512, + 428.2673683813208, + 808.3043198982095, + 1198.4948642594736, + 983.648296520586, + 1262.3626148854303, + 831.0685221455387, + 131.09006051137538, + 1247.7148875175803, + 1046.6923207120324, + 1765.842459103364, + 1464.5035046557557, + 937.9409805898772 + ], + "color": "red" + }, + { + "name": "Variable 2", + "values": [ + 0, + 64.34514261558455, + 29.13571211794781, + 178.79816094275048, + 100.71693832818282, + 266.35484486351186, + 282.8546319898203, + 28.58624741203537, + 763.8857936170537, + 545.4865906731147, + 138.9520190122242, + 52.01382521803767, + 708.2681786588348, + 1000.3653557754008, + 669.0108269551466, + 1370.7718714060359, + 341.72834085520094, + 1338.4882311049869, + 1465.7838932875347, + 525.4626497552898, + 1328.2452503957193, + 92.92077419969087, + 1637.2865575361195, + 2171.208978748257 + ], + "color": "blue" + } + ] + }, + { + "name": "Serie 4", + "datapoints": [ + { + "name": "Variable 1", + "values": [ + 0, + 60.61521289241186, + 16.305592075492847, + 48.363055591540125, + 27.23026432694504, + 488.4123140883341, + 174.32399354720604, + 240.55844159317647, + 187.37484171298843, + 859.8358961146381, + 558.1527968699315, + 467.2840262018397, + 346.919280538702, + 57.887086544607634, + 600.6056861452856, + 1185.5149990254702, + 1594.4271139452926, + 75.36324238159816, + 1013.3531929981647, + 588.1040889224212, + 1484.0653649985697, + 1168.6542487499353, + 378.0462125683915, + 2173.718882255563 + ], + "color": "red" + }, + { + "name": "Variable 2", + "values": [ + 0, + 84.406644328534, + 37.35484914225673, + 67.52974005282377, + 137.33202552693209, + 365.77773290860466, + 33.39401198239542, + 189.25930454036668, + 101.64234806124375, + 168.33191271908987, + 68.24045476954255, + 392.56707245713505, + 25.076333442604337, + 511.44496577175147, + 1399.8223552541983, + 885.1608154526058, + 1183.3970451328325, + 601.923954269416, + 569.5347561506143, + 692.6873174187882, + 2.866047553335749, + 694.8270438153173, + 979.5776938575823, + 1090.9870382987206 + ], + "color": "blue" + } + ] + } + ], + wrapperClass: '.vue-ui-ridgeline' + }, { name: "VueUiWorld", dataset: { FRA: { value: 100 }}, diff --git a/documentation/installation.md b/documentation/installation.md index 6b84cc5d..92a2bd0f 100755 --- a/documentation/installation.md +++ b/documentation/installation.md @@ -146,8 +146,8 @@ From the dataset you pass into the props, this component will produce the most a | ----------------------------- | ------------------------------------------ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------ | | `VueUiAgePyramid` | `Array>` | `VueUiSparklineConfig` | `generatePdf`, `generateImage`, `generateCsv`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiCandlestick` | `Array>` | `VueUiCandlestickConfig` | `generatePdf`, `generateImage`, `generateCsv`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#reset-action`, `#watermark`, `#chart-background` | ✅ | ✅ | -| `VueUiCirclePack` | `VueUiCirclePackDatasetItem[]` | `VueUiCirclePackConfig` | `@selectDatapoint`, `getData`, `generatePdf`, `generateImage`, `generateCsv`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` , `#pattern`, `#zoom-label`, `#data-label` | ✅ | ✅ | | `VueUiChestnut` | `VueUiChestnutDatasetRoot[]` | `VueUiChestnutConfig` | `@selectRoot`, `@selectBranch`, `@selectNut`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` | ❌ | ✅ | +| `VueUiCirclePack` | `VueUiCirclePackDatasetItem[]` | `VueUiCirclePackConfig` | `@selectDatapoint`, `getData`, `generatePdf`, `generateImage`, `generateCsv`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` , `#pattern`, `#zoom-label`, `#data-label` | ✅ | ✅ | | `VueUiDonutEvolution` | `VueUiDonutEvolutionDatasetItem[]` | `VueUiDonutEvolutionConfig` | `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#reset-action`, `#watermark`, `#chart-background` | ❌ | ✅ | | `VueUiDonut` | `VueUiDonutDatasetItem[]` | `VueUiDonutConfig` | `@selectDatapoint`, `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#dataLabel`, `#tooltip-before`, `#tooltip-after`, `#plot-comment`, `#watermark`, `#chart-background`, `#pattern` | ✅ | ✅ | | `VueUiDumbbell` | `VueUiDumbbellDataset[]` | `VueUiDumbbellConfig` | `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#watermark`, `#chart-background` | ❌ | ✅ | @@ -164,6 +164,7 @@ From the dataset you pass into the props, this component will produce the most a | `VueUiParallelCoordinatePlot` | `VueUiParallelCoordinatePlotDatasetItem[]` | `VueUiParallelCoordinatePlotConfig` | `@selectLegend`, `@selectDatapoint`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#plot-comment`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiQuadrant` | `VueUiQuadrantDatasetItem[]` | `VueUiQuadrantConfig` | `@selectLegend`, `@selectPlot`, `@selectSide`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiRadar` | `VueUiRadarDataset` | `VueUiRadarConfig` | `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | +| `VueUiRidgeline` | `VueUiRidgelineDatasetItem[]` | `VueUiRidgelineConfig` | `@selectLegend`, `@selectX`, `@selectDatapoint`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable` | `#svg`, `#legend`, `#time-label`,`#watermark`, `#chart-background`, `#pattern` | ❌ | ✅ | | `VueUiRings` | `VueUiRingsDatasetItem[]` | `VueUiRingsConfig` | `@selectLegend`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background`, `#pattern` | ✅ | ✅ | | `VueUiScatter` | `VueUiScatterDatasetItem[]` | `VueUiScatterConfig` | `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleTooltip` | `#svg`, `#legend`, `#tooltip-before`, `#tooltip-after`, `#watermark`, `#chart-background` | ✅ | ✅ | | `VueUiStackbar` | `VueUiStackbarDatasetItem[]` | `VueUiStackbarConfig` | `@selectLegend`, `@selectDatapoint`, `@selectTimeLabel`, `getData`, `generatePdf`, `generateCsv`, `generateImage`, `toggleTable`, `toggleLabels`, `toggleTooltip` | `#svg`, `#legend`, `#time-label`, `#tooltip-before`, `#tooltip-after`, `#reset-action`, `#watermark`, `#chart-background`, `#pattern` | ✅ | ✅ | diff --git a/package.json b/package.json index fbebf672..fcb06cb3 100644 --- a/package.json +++ b/package.json @@ -110,4 +110,4 @@ "vitest": "^3.1.1", "vue": "^3.5.14" } -} +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 3fa513a4..172ed9f2 100755 --- a/src/App.vue +++ b/src/App.vue @@ -55,6 +55,7 @@ import ArenaVueUiHistoryPlot from "../TestingArena/ArenaVueUiHistoryPlot.vue"; import ArenaVueUiCirclePack from "../TestingArena/ArenaVueUiCirclePack.vue"; import ArenaVueUiWorld from "../TestingArena/ArenaVueUiWorld.vue"; import ArenaVueUiTable from "../TestingArena/ArenaVueUiTable.vue"; +import ArenaVueUiRidgeline from "../TestingArena/ArenaVueUiRidgeline.vue"; const components = ref([ //------| /*____________________*/"VueUiXy", // 0 @@ -111,6 +112,7 @@ const components = ref([ //------| /*____________*/"VueUiCirclePack", // 51 /*_________________*/"VueUiWorld", // 52 /*_________________*/"VueUiTable", // 53 + /*_____________*/"VueUiRidgeline", // 54 /** * TODO: migrate manual testing for the following: @@ -123,7 +125,7 @@ const components = ref([ //------| * Modify the index to display a component * [0] = VueUiXy */ - const selectedComponent = ref(components.value[52]); + const selectedComponent = ref(components.value[54]); /** * Legacy testing arena where some non chart components can be tested @@ -305,5 +307,8 @@ const showOldArena = ref(false); + + + \ No newline at end of file diff --git a/src/TestingArena.vue b/src/TestingArena.vue index f0d3fefd..94039204 100644 --- a/src/TestingArena.vue +++ b/src/TestingArena.vue @@ -2204,10 +2204,11 @@ const skeletonOptions = ref([ 'stripPlot', 'bullet', 'historyPlot', - 'circlePack' + 'circlePack', + 'ridgleline' ]); -const skeletonChoice = ref('circlePack') +const skeletonChoice = ref('ridgeline') const tiremarksDataset = ref({ percentage: 75 diff --git a/src/atoms/BaseIcon.vue b/src/atoms/BaseIcon.vue index efbe6dce..279d455d 100755 --- a/src/atoms/BaseIcon.vue +++ b/src/atoms/BaseIcon.vue @@ -189,7 +189,9 @@ const icons = computed(() => { curlyBrackets: ``, curlySpread: ``, text: ``, - world: `` + world: ``, + eye: ``, + chartRidgeline: `` } }); diff --git a/src/components/vue-data-ui.vue b/src/components/vue-data-ui.vue index b9705680..2bbca5e4 100644 --- a/src/components/vue-data-ui.vue +++ b/src/components/vue-data-ui.vue @@ -72,7 +72,8 @@ const components = { VueUiFunnel: defineAsyncComponent(() => import('./vue-ui-funnel.vue')), VueUiHistoryPlot: defineAsyncComponent(() => import('./vue-ui-history-plot.vue')), VueUiCirclePack: defineAsyncComponent(() => import('./vue-ui-circle-pack.vue')), - VueUiWorld: defineAsyncComponent(() => import('./vue-ui-world.vue')) + VueUiWorld: defineAsyncComponent(() => import('./vue-ui-world.vue')), + VueUiRidgeline: defineAsyncComponent(() => import('./vue-ui-ridgeline.vue')) }; const componentProps = { @@ -135,7 +136,8 @@ const componentProps = { VueUiFunnel: ['config', 'dataset'], VueUiHistoryPlot: ['config', 'dataset'], VueUiCirclePack: ['config', 'dataset'], - VueUiWorld: ['config', 'dataset'] + VueUiWorld: ['config', 'dataset'], + VueUiRidgeline: ['config', 'dataset'] }; const emit = defineEmits([ diff --git a/src/components/vue-ui-ridgeline.vue b/src/components/vue-ui-ridgeline.vue new file mode 100644 index 00000000..f037d534 --- /dev/null +++ b/src/components/vue-ui-ridgeline.vue @@ -0,0 +1,1081 @@ + + +