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 3b6ead7..53a91ec 100644
--- a/src/constants/Categories.ts
+++ b/src/constants/Categories.ts
@@ -1,5 +1,5 @@
// Highlighted sidebar items
-export const NEW = ['Infinite Menu', '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',
@@ -87,6 +88,7 @@ export const CATEGORIES = [
'Tilted Card',
'Glass Icons',
'Decay Card',
+ 'Dome Gallery',
'Flowing Menu',
'Elastic Slider',
'Stack',
diff --git a/src/constants/Components.ts b/src/constants/Components.ts
index 36cbaf5..326c231 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 = {
@@ -70,6 +71,7 @@ const components = {
'infinite-scroll': () => import('../demo/Components/InfiniteScrollDemo.vue'),
'glass-icons': () => import('../demo/Components/GlassIconsDemo.vue'),
'decay-card': () => import('../demo/Components/DecayCardDemo.vue'),
+ 'dome-gallery': () => import('../demo/Components/DomeGalleryDemo.vue'),
'flowing-menu': () => import('../demo/Components/FlowingMenuDemo.vue'),
'elastic-slider': () => import('../demo/Components/ElasticSliderDemo.vue'),
'tilted-card': () => import('../demo/Components/TiltedCardDemo.vue'),
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/constants/code/Components/domeGalleryCode.ts b/src/constants/code/Components/domeGalleryCode.ts
new file mode 100644
index 0000000..1568cb7
--- /dev/null
+++ b/src/constants/code/Components/domeGalleryCode.ts
@@ -0,0 +1,30 @@
+import code from '@content/Components/DomeGallery/DomeGallery.vue?raw';
+import { createCodeObject } from '../../../types/code';
+
+export const domeGallery = createCodeObject(code, 'Components/DomeGallery', {
+ installation: `# No external dependencies required`,
+ usage: `
+
+
+
+`
+});
\ No newline at end of file
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/Components/DomeGallery/DomeGallery.vue b/src/content/Components/DomeGallery/DomeGallery.vue
new file mode 100644
index 0000000..3c628af
--- /dev/null
+++ b/src/content/Components/DomeGallery/DomeGallery.vue
@@ -0,0 +1,866 @@
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/demo/Components/DomeGalleryDemo.vue b/src/demo/Components/DomeGalleryDemo.vue
new file mode 100644
index 0000000..1cfe4bf
--- /dev/null
+++ b/src/demo/Components/DomeGalleryDemo.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file