Skip to content

Commit 08eb4d0

Browse files
committed
Added Arrow component
1 parent ad83233 commit 08eb4d0

File tree

7 files changed

+119
-5
lines changed

7 files changed

+119
-5
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "vue-data-ui",
33
"private": false,
4-
"version": "1.9.85",
4+
"version": "1.9.86",
55
"type": "module",
66
"description": "A user-empowering data visualization Vue components library",
77
"keywords": [

src/App.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4625,6 +4625,14 @@ const moodRadarConfig = ref({
46254625
>
46264626
<template #svg="{ svg }">
46274627
<circle :cx="svg.width / 2" :cy="svg.height / 2" :r="30" fill="#FF000033"/>
4628+
<Arrow
4629+
:x1="20"
4630+
:y1="20"
4631+
:x2="100"
4632+
:y2="100"
4633+
:pointerSize="10"
4634+
:strokeWidth="2"
4635+
/>
46284636
</template>
46294637
</DonutTest>
46304638
</template>

src/atoms/Arrow.vue

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<script setup>
2+
import { createUid } from '../lib';
3+
import { computed } from "vue"
4+
5+
const props = defineProps({
6+
markerEnd: {
7+
type: Boolean,
8+
default: true
9+
},
10+
markerSize: {
11+
type: Number,
12+
default: 10
13+
},
14+
markerStart: {
15+
type: Boolean,
16+
default: false,
17+
},
18+
stroke: {
19+
type: String,
20+
default: "#2D353C"
21+
},
22+
strokeDasharray: {
23+
type: Number,
24+
default: 0
25+
},
26+
strokeLinecap: {
27+
type: String,
28+
default: "round"
29+
},
30+
strokeWidth: {
31+
type: Number,
32+
default: 1
33+
},
34+
x1: {
35+
type: Number,
36+
default: 0
37+
},
38+
x2: {
39+
type: Number,
40+
default: 0,
41+
},
42+
y1: {
43+
type: Number,
44+
default: 0
45+
},
46+
y2: {
47+
type: Number,
48+
default: 0
49+
},
50+
})
51+
52+
const uid = createUid();
53+
54+
const viewBox = computed(() => {
55+
return `0 0 ${props.markerSize} ${props.markerSize}`
56+
})
57+
58+
const refC = computed(() => props.markerSize / 2)
59+
const markerSize = computed(() => {
60+
return refC.value + (props.markerSize / 10)
61+
})
62+
63+
</script>
64+
65+
<template>
66+
<g class="vue-ui-element-arrow">
67+
<defs>
68+
<marker :id="`arrow_end_${uid}`" orient="auto" :viewBox="viewBox" :refX="refC" :refY="refC" :markerWidth="markerSize" :markerHeight="markerSize">
69+
<path :d="`M 0 0 L ${markerSize} ${refC} L 0 ${markerSize} z`" :fill="stroke" />
70+
</marker>
71+
<marker :id="`arrow_start_${uid}`" orient="auto-start-reverse" :viewBox="viewBox" :refX="refC" :refY="refC" :markerWidth="markerSize" :markerHeight="markerSize">
72+
<path :d="`M 0 0 L ${markerSize} ${refC} L 0 ${markerSize} z`" :fill="stroke" />
73+
</marker>
74+
</defs>
75+
<line
76+
:x1="x1"
77+
:y1="y1"
78+
:x2="x2"
79+
:y2="y2"
80+
:stroke="stroke"
81+
:stroke-width="strokeWidth"
82+
:stroke-linecap="strokeLinecap"
83+
:stroke-dasharray="strokeDasharray"
84+
:marker-end="markerEnd ? `url(#arrow_end_${uid})` : ''"
85+
:marker-start="markerStart ? `url(#arrow_start_${uid})` : ''"
86+
/>
87+
</g>
88+
</template>

src/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import VueUi3dBar from "./components/vue-ui-3d-bar.vue";
3434
import VueUiDigits from "./components/vue-ui-digits.vue";
3535
import VueUiMolecule from "./components/vue-ui-molecule.vue";
3636
import VueUiTableSparkline from "./components/vue-ui-table-sparkline.vue";
37+
import Arrow from "./atoms/Arrow.vue"
3738

3839
export {
3940
VueUiXy,
@@ -71,5 +72,6 @@ export {
7172
VueUi3dBar,
7273
VueUiDigits,
7374
VueUiMolecule,
74-
VueUiTableSparkline
75+
VueUiTableSparkline,
76+
Arrow
7577
};

src/main.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ import {
3737
VueUi3dBar,
3838
VueUiDigits,
3939
VueUiMolecule,
40-
VueUiTableSparkline
40+
VueUiTableSparkline,
41+
Arrow
4142
} from 'vue-data-ui';
4243
import 'vue-data-ui/style.css';
4344

@@ -78,4 +79,5 @@ app.component("VueUi3dBar", VueUi3dBar);
7879
app.component("VueUiDigits", VueUiDigits);
7980
app.component("VueUiMolecule", VueUiMolecule);
8081
app.component("VueUiTableSparkline", VueUiTableSparkline);
82+
app.component("Arrow", Arrow);
8183
app.mount('#app');

types/vue-data-ui.d.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@ declare module 'vue-data-ui' {
55
[key: string]: unknown;
66
}
77

8+
export const Arrow: DefineComponent<{
9+
markerEnd?: boolean,
10+
markerSize?: number,
11+
markerStart?: boolean,
12+
stroke?: string,
13+
strokeDasharray?: number,
14+
strokeLinecap?: "round" | "butt" | "square",
15+
strokeWidth?: number,
16+
x1: number,
17+
x2: number,
18+
y1: number,
19+
y2: number
20+
}>
21+
822
export type VueUiTableSparklineDatasetItem = {
923
name: string;
1024
values: number[];

0 commit comments

Comments
 (0)