docs: update Basic.vue class and style functions

This commit is contained in:
bcakmakoglu
2022-06-10 21:11:10 +02:00
committed by Braks
parent 37fd017e37
commit 2e1b2db26b
2 changed files with 41 additions and 51 deletions
-7
View File
@@ -1,7 +0,0 @@
module.exports = {
rules: {
'no-use-before-define': 0,
'no-console': 0,
},
extends: ['../.eslintrc.js'],
}
+41 -44
View File
@@ -1,8 +1,11 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Background, ClassFunc, ConnectionLineType, Controls, GraphEdge, useVueFlow, VueFlow } from "@braks/vue-flow"; import type { ClassFunc, GraphEdge, GraphNode, StyleFunc } from '@braks/vue-flow'
import Cross from "~icons/mdi/window-close"; import { Background, ConnectionLineType, Controls, VueFlow, useVueFlow } from '@braks/vue-flow'
import Cross from '~icons/mdi/window-close'
const getClass: ClassFunc = (el) => { const emit = defineEmits(['pane'])
const getNodeClass: ClassFunc<GraphNode> = (el) => {
const classes = ['font-semibold', '!border-2', 'transition-colors', 'duration-300', 'ease-in-out'] const classes = ['font-semibold', '!border-2', 'transition-colors', 'duration-300', 'ease-in-out']
if (el.selected) if (el.selected)
classes.push( classes.push(
@@ -12,7 +15,18 @@ const getClass: ClassFunc = (el) => {
return classes.join(' ') return classes.join(' ')
} }
const emit = defineEmits(['pane']) const getEdgeClass: ClassFunc<GraphEdge> = (el) => {
const classes = ['transition-colors duration-300', el.sourceNode.selected ? 'font-semibold' : '']
return classes.join(' ')
}
const getEdgeStyle: StyleFunc<GraphEdge> = (el) => {
const sourceNodeSelected = el.sourceNode.selected
return {
transition: 'stroke ease-in-out 300ms',
stroke: el.selected || sourceNodeSelected ? 'var(--secondary)' : '',
}
}
const { onPaneReady, onConnect, addEdges, viewport } = useVueFlow({ const { onPaneReady, onConnect, addEdges, viewport } = useVueFlow({
connectionLineType: ConnectionLineType.SmoothStep, connectionLineType: ConnectionLineType.SmoothStep,
@@ -26,21 +40,21 @@ const { onPaneReady, onConnect, addEdges, viewport } = useVueFlow({
type: 'input', type: 'input',
label: 'Start', label: 'Start',
position: { x: 250, y: 5 }, position: { x: 250, y: 5 },
class: getClass, class: getNodeClass,
}, },
{ {
id: '2', id: '2',
label: 'Waypoint', label: 'Waypoint',
position: { x: 100, y: 100 }, position: { x: 100, y: 100 },
class: getClass, class: getNodeClass,
}, },
{ id: '3', label: 'Waypoint', position: { x: 400, y: 100 }, class: getClass }, { id: '3', label: 'Waypoint', position: { x: 400, y: 100 }, class: getNodeClass },
{ {
id: '4', id: '4',
type: 'output', type: 'output',
label: 'End', label: 'End',
position: { x: 250, y: 225 }, position: { x: 250, y: 225 },
class: getClass, class: getNodeClass,
}, },
{ {
id: 'e1-2', id: 'e1-2',
@@ -48,29 +62,17 @@ const { onPaneReady, onConnect, addEdges, viewport } = useVueFlow({
label: 'animated edge', label: 'animated edge',
target: '2', target: '2',
animated: true, animated: true,
class: (el) => { class: getEdgeClass,
const classes = ['transition-colors duration-300', (<GraphEdge>el).sourceNode.selected ? 'font-semibold' : ''] style: getEdgeStyle,
return classes.join(' ')
},
style: (el) => {
const sourceNodeSelected = (<GraphEdge>el).sourceNode.selected
return {
transition: 'stroke ease-in-out 300ms',
stroke: el.selected || sourceNodeSelected ? 'var(--secondary)' : '',
}
},
}, },
{ {
id: 'e1-3', id: 'e1-3',
source: '1', source: '1',
target: '3', target: '3',
label: 'default edge', label: 'default edge',
class: (el) => { class: getEdgeClass,
const classes = ['transition-colors duration-300', (<GraphEdge>el).sourceNode.selected ? 'font-semibold' : ''] style: (el: GraphEdge) => {
return classes.join(' ') const sourceNodeSelected = el.sourceNode.selected
},
style: (el) => {
const sourceNodeSelected = (<GraphEdge>el).sourceNode.selected
return { return {
transition: 'stroke ease-in-out 300ms', transition: 'stroke ease-in-out 300ms',
stroke: el.selected || sourceNodeSelected ? 'red' : '', stroke: el.selected || sourceNodeSelected ? 'red' : '',
@@ -83,37 +85,31 @@ const { onPaneReady, onConnect, addEdges, viewport } = useVueFlow({
target: '4', target: '4',
type: 'step', type: 'step',
animated: true, animated: true,
class: (el) => { class: getEdgeClass,
const classes = ['transition-colors duration-300', (<GraphEdge>el).sourceNode.selected ? 'font-semibold' : ''] style: getEdgeStyle,
return classes.join(' ')
},
style: (el) => {
const sourceNodeSelected = (<GraphEdge>el).sourceNode.selected
return {
transition: 'stroke ease-in-out 300ms',
stroke: el.selected || sourceNodeSelected ? 'var(--secondary)' : '',
}
},
}, },
], ],
}) })
onPaneReady((i) => emit('pane', i)) onPaneReady((i) => emit('pane', i))
onConnect((param) => { onConnect((param) => {
addEdges([{ addEdges([
...param, {
type: 'smoothstep', ...param,
animated: true, type: 'smoothstep',
}]) animated: true,
},
])
}) })
</script> </script>
<template> <template>
<div class="md:max-w-1/3 flex flex-col justify-center"> <div class="md:max-w-1/3 flex flex-col justify-center">
<div class="flex flex-col items-center md:items-start"> <div class="flex flex-col items-center md:items-start">
<h1>Interactive Graphs</h1> <h1>Interactive Graphs</h1>
<p> <p>
Vue Flow comes with built-in features like zoom & pan and dedicated controls, single & multi-selections, draggable elements, Vue Flow comes with built-in features like zoom & pan and dedicated controls, single & multi-selections, draggable
customizable nodes and edges and a bunch of event handlers. elements, customizable nodes and edges and a bunch of event handlers.
</p> </p>
<router-link class="button max-w-max" to="/guide/"> Documentation </router-link> <router-link class="button max-w-max" to="/guide/"> Documentation </router-link>
</div> </div>
@@ -123,7 +119,7 @@ onConnect((param) => {
> >
<VueFlow class="basic"> <VueFlow class="basic">
<Controls class="md:(!left-auto !right-[10px])" /> <Controls class="md:(!left-auto !right-[10px])" />
<Background pattern-color="#aaa" :gap="60"> <Background :gap="60">
<template #pattern> <template #pattern>
<Cross :style="{ fontSize: `${8 * viewport.zoom || 1}px` }" class="text-[#10b981] opacity-50" /> <Cross :style="{ fontSize: `${8 * viewport.zoom || 1}px` }" class="text-[#10b981] opacity-50" />
</template> </template>
@@ -131,6 +127,7 @@ onConnect((param) => {
</VueFlow> </VueFlow>
</div> </div>
</template> </template>
<style> <style>
.basic .vue-flow__node-input.selected .vue-flow__handle { .basic .vue-flow__node-input.selected .vue-flow__handle {
@apply bg-green-500; @apply bg-green-500;