11<script lang="ts" setup>
2- import { useVueFlow } from ' @vue-flow/core'
3- import { computed , toRef } from ' vue'
4- import { BackgroundVariant } from ' ./types'
2+ import { computed } from ' vue'
3+ import { useVueFlow } from ' ../../composables/useVueFlow'
54import type { BackgroundProps } from ' ./types'
65import { DefaultBgColors , DotPattern , LinePattern } from ' ./patterns'
76
8- const {
9- id,
10- variant = BackgroundVariant .Dots ,
7+ const props = withDefaults (defineProps <BackgroundProps >(), {
8+ variant = ' dots' ,
119 gap = 20 ,
1210 size = 1 ,
1311 lineWidth = 1 ,
14- height = 100 ,
15- width = 100 ,
1612 x = 0 ,
1713 y = 0 ,
18- bgColor,
19- patternColor : initialPatternColor,
20- color : _patternColor,
2114 offset = 2 ,
22- } = defineProps < BackgroundProps >( )
15+ })
2316
2417const { id : vueFlowId, viewport } = useVueFlow ()
2518
2619const background = computed (() => {
27- const [gapX, gapY] = Array .isArray (gap ) ? gap : [gap , gap ]
20+ const [gapX, gapY] = Array .isArray (props . gap ) ? props . gap : [props . gap , props . gap ]
2821
2922 const scaledGap: [number , number ] = [gapX * viewport .value .zoom || 1 , gapY * viewport .value .zoom || 1 ]
3023
31- const scaledSize = size * viewport .value .zoom
24+ const scaledSize = props . size * viewport .value .zoom
3225
3326 const patternOffset =
34- variant === BackgroundVariant . Dots
35- ? [scaledSize / offset , scaledSize / offset ]
36- : [scaledGap [0 ] / offset , scaledGap [1 ] / offset ]
27+ props . variant === ' dots '
28+ ? [scaledSize / props . offset , scaledSize / props . offset ]
29+ : [scaledGap [0 ] / props . offset , scaledGap [1 ] / props . offset ]
3730
3831 return {
3932 scaledGap ,
@@ -43,9 +36,9 @@ const background = computed(() => {
4336})
4437
4538// when there are multiple flows on a page we need to make sure that every background gets its own pattern.
46- const patternId = toRef (() => ` pattern-${vueFlowId }${id ? ` -${id } ` : ' ' } ` )
39+ const patternId = computed (() => ` pattern-${vueFlowId }${props . id ? ` -${props . id } ` : ' ' } ` )
4740
48- const patternColor = toRef (() => _patternColor || initialPatternColor || DefaultBgColors [variant || BackgroundVariant . Dots ])
41+ const patternColor = computed (() => props . color || DefaultBgColors [props . variant || ' dots ' ])
4942 </script >
5043
5144<script lang="ts">
@@ -56,13 +49,7 @@ export default {
5649 </script >
5750
5851<template >
59- <svg
60- class =" vue-flow__background vue-flow__container"
61- :style =" {
62- height: `${height > 100 ? 100 : height}%`,
63- width: `${width > 100 ? 100 : width}%`,
64- }"
65- >
52+ <svg class =" vue-flow__background vue-flow__container" >
6653 <slot :id =" patternId" name =" pattern-container" >
6754 <pattern
6855 :id =" patternId"
@@ -74,17 +61,13 @@ export default {
7461 patternUnits =" userSpaceOnUse"
7562 >
7663 <slot name =" pattern" >
77- <template v-if =" variant === BackgroundVariant . Lines " >
64+ <template v-if =" variant === ' lines ' " >
7865 <LinePattern :size =" lineWidth" :color =" patternColor" :dimensions =" background.scaledGap" />
7966 </template >
8067
81- <template v-else-if =" variant === BackgroundVariant . Dots " >
68+ <template v-else-if =" variant === ' dots ' " >
8269 <DotPattern :color =" patternColor" :radius =" background.size / offset" />
8370 </template >
84-
85- <svg v-if =" bgColor" height =" 100" width =" 100" >
86- <rect width =" 100%" height =" 100%" :fill =" bgColor" />
87- </svg >
8871 </slot >
8972 </pattern >
9073 </slot >
0 commit comments