From 1f493585696f34405c178deda91767c7e55610ea Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Wed, 22 Mar 2023 22:26:11 +0100 Subject: [PATCH] feat(background): add `offset` prop Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --- packages/background/src/Background.vue | 47 +++++++++++++++----------- packages/background/src/patterns.ts | 31 +++++++++++++++++ packages/background/src/types.ts | 6 +++- 3 files changed, 63 insertions(+), 21 deletions(-) create mode 100644 packages/background/src/patterns.ts diff --git a/packages/background/src/Background.vue b/packages/background/src/Background.vue index dbb7e9af..81c4b673 100644 --- a/packages/background/src/Background.vue +++ b/packages/background/src/Background.vue @@ -2,17 +2,21 @@ import { useVueFlow } from '@vue-flow/core' import { BackgroundVariant } from './types' import type { BackgroundProps } from './types' +import { LinePattern } from './patterns' const { + id, variant = 'dots' as BackgroundVariant, gap = 10, - size = 0.4, + size = 1, + lineWidth = 1, height = 100, width = 100, x = 0, y = 0, bgColor, patternColor: initialPatternColor, + offset = 2, } = defineProps() const defaultColors: Record = { @@ -20,30 +24,31 @@ const defaultColors: Record = { [BackgroundVariant.Lines]: '#eee', } -const { id, viewport } = useVueFlow() +const { id: vueFlowId, viewport } = useVueFlow() + +const gapXY = computed(() => (Array.isArray(gap) ? gap : [gap, gap])) const background = $computed(() => { - const scaledGap = gap && gap * viewport.value.zoom - const xOffset = scaledGap && viewport.value.x % scaledGap - const yOffset = scaledGap && viewport.value.y % scaledGap - const bgSize = size * viewport.value.zoom + const scaledGap = [gapXY.value[0] * viewport.value.zoom || 1, gapXY.value[1] * viewport.value.zoom || 1] + + const scaledSize = size * viewport.value.zoom + + const patternOffset = + variant === BackgroundVariant.Dots + ? [scaledSize / offset, scaledSize / offset] + : [scaledGap[0] / offset, scaledGap[1] / offset] return { scaledGap, - xOffset, - yOffset, - size: bgSize, + offset: patternOffset, + size: scaledSize, } }) // when there are multiple flows on a page we need to make sure that every background gets its own pattern. -const patternId = `pattern-${id}` +const patternId = computed(() => `pattern-${vueFlowId}${id ? `-${id}` : ''}`) const patternColor = computed(() => initialPatternColor || defaultColors[variant || BackgroundVariant.Dots]) - -const d = computed( - () => `M${background.scaledGap / 2} 0 V${background.scaledGap} M0 ${background.scaledGap / 2} H${background.scaledGap}`, -)