diff --git a/src/components/landing/Hero/Hero.vue b/src/components/landing/Hero/Hero.vue index a276611..36b952f 100644 --- a/src/components/landing/Hero/Hero.vue +++ b/src/components/landing/Hero/Hero.vue @@ -19,10 +19,10 @@ />
- + New 🎉
- Liquid Ether + Laser Flow
diff --git a/src/constants/Categories.ts b/src/constants/Categories.ts index d8af5c4..4059c8f 100644 --- a/src/constants/Categories.ts +++ b/src/constants/Categories.ts @@ -1,5 +1,5 @@ // Highlighted sidebar items -export const NEW = ['Dome Gallery', 'Liquid Ether', 'Staggered Menu', 'Pixel Blast', 'Gradual Blur', 'Gradient Blinds', 'Bubble Menu', 'Prism', 'Plasma', 'Electric Border', 'Target Cursor', 'Pill Nav', 'Card Nav', 'Logo Loop', 'Prismatic Burst']; +export const NEW = ['Laser Flow', 'Dome Gallery', 'Liquid Ether', 'Staggered Menu', 'Pixel Blast', 'Gradual Blur', 'Gradient Blinds', 'Bubble Menu', 'Prism', 'Plasma', 'Electric Border', 'Target Cursor', 'Pill Nav', 'Card Nav', 'Logo Loop', 'Prismatic Burst']; export const UPDATED = []; // Used for main sidebar navigation @@ -37,6 +37,7 @@ export const CATEGORIES = [ 'Animated Content', 'Fade Content', 'Gradual Blur', + 'Laser Flow', 'Noise', 'Splash Cursor', 'Logo Loop', diff --git a/src/constants/Components.ts b/src/constants/Components.ts index c385017..7480543 100644 --- a/src/constants/Components.ts +++ b/src/constants/Components.ts @@ -23,6 +23,7 @@ const animations = { 'sticker-peel': () => import('../demo/Animations/StickerPeelDemo.vue'), 'electric-border': () => import('../demo/Animations/ElectricBorderDemo.vue'), 'gradual-blur': () => import('../demo/Animations/GradualBlurDemo.vue'), + 'laser-flow': () => import('../demo/Animations/LaserFlowDemo.vue'), }; const textAnimations = { diff --git a/src/constants/code/Animations/gradualBlurCode.ts b/src/constants/code/Animations/gradualBlurCode.ts index 3a4d480..fbe391b 100644 --- a/src/constants/code/Animations/gradualBlurCode.ts +++ b/src/constants/code/Animations/gradualBlurCode.ts @@ -3,7 +3,24 @@ import { createCodeObject } from '@/types/code'; export const gradualBlur = createCodeObject(code, 'Animations/GradualBlur', { installation: `npm install mathjs`, - usage: ` + usage: ` ` +}); diff --git a/src/content/Animations/LaserFlow/LaserFlow.vue b/src/content/Animations/LaserFlow/LaserFlow.vue new file mode 100644 index 0000000..412c624 --- /dev/null +++ b/src/content/Animations/LaserFlow/LaserFlow.vue @@ -0,0 +1,615 @@ + + + diff --git a/src/content/TextAnimations/TrueFocus/TrueFocus.vue b/src/content/TextAnimations/TrueFocus/TrueFocus.vue index f1de0b6..3ef0096 100644 --- a/src/content/TextAnimations/TrueFocus/TrueFocus.vue +++ b/src/content/TextAnimations/TrueFocus/TrueFocus.vue @@ -31,26 +31,6 @@ const focusRect = ref({ x: 0, y: 0, width: 0, height: 0 }); let interval: number | null = null; -watch( - [() => props.manualMode, () => props.animationDuration, () => props.pauseBetweenAnimations, () => words.value], - () => { - if (interval) { - clearInterval(interval); - interval = null; - } - - if (!props.manualMode) { - interval = setInterval( - () => { - currentIndex.value = (currentIndex.value + 1) % words.value.length; - }, - (props.animationDuration + props.pauseBetweenAnimations) * 1000 - ); - } - }, - { immediate: true } -); - watch( [currentIndex, () => words.value.length], async () => { @@ -105,6 +85,26 @@ onMounted(async () => { height: activeRect.height }; } + + watch( + [() => props.manualMode, () => props.animationDuration, () => props.pauseBetweenAnimations, () => words.value], + () => { + if (interval) { + clearInterval(interval); + interval = null; + } + + if (!props.manualMode) { + interval = setInterval( + () => { + currentIndex.value = (currentIndex.value + 1) % words.value.length; + }, + (props.animationDuration + props.pauseBetweenAnimations) * 1000 + ); + } + }, + { immediate: true } + ); }); onUnmounted(() => { diff --git a/src/demo/Animations/LaserFlowDemo.vue b/src/demo/Animations/LaserFlowDemo.vue new file mode 100644 index 0000000..bc5b240 --- /dev/null +++ b/src/demo/Animations/LaserFlowDemo.vue @@ -0,0 +1,213 @@ + + + + +