From 18d561ea6f333c057eff53e33d2c52d01d037287 Mon Sep 17 00:00:00 2001 From: Utkarsh-Singhal-26 Date: Wed, 21 Jan 2026 16:08:55 +0530 Subject: [PATCH] [ FIX ] : ASCIIText Naming & Registry --- public/r/ASCIIText.json | 2 +- public/r/Ballpit.json | 2 +- public/r/ClickSpark.json | 2 +- public/r/CountUp.json | 2 +- public/r/Cubes.json | 2 +- public/r/DecryptedText.json | 2 +- public/r/Dock.json | 2 +- public/r/InfiniteMenu.json | 2 +- public/r/InfiniteScroll.json | 2 +- public/r/LetterGlitch.json | 2 +- public/r/MagicBento.json | 2 +- public/r/MetallicPaint.json | 2 +- public/r/PixelBlast.json | 2 +- public/r/PixelSnow.json | 1 + public/r/PixelTrail.json | 1 + public/r/RotatingText.json | 2 +- public/r/Shuffle.json | 1 + public/r/StickerPeel.json | 2 +- public/r/TargetCursor.json | 2 +- public/r/TextCursor.json | 2 +- public/r/TrueFocus.json | 2 +- public/r/registry.json | 75 +++++++++++++++++-- src/constants/Components.ts | 2 +- src/constants/Information.ts | 4 +- .../code/TextAnimations/asciiTextCode.ts | 8 +- .../TextAnimations/AsciiText/AsciiText.vue | 4 +- src/demo/TextAnimations/AsciiTextDemo.vue | 4 +- 27 files changed, 101 insertions(+), 35 deletions(-) create mode 100644 public/r/PixelSnow.json create mode 100644 public/r/PixelTrail.json create mode 100644 public/r/Shuffle.json diff --git a/public/r/ASCIIText.json b/public/r/ASCIIText.json index 40ac23e..85475ce 100644 --- a/public/r/ASCIIText.json +++ b/public/r/ASCIIText.json @@ -1 +1 @@ -{"name":"ASCIIText","title":"ASCIIText","description":"Renders text with an animated ASCII background for a retro feel.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n\n\n","path":"ASCIIText/AsciiText.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file +{"name":"ASCIIText","title":"ASCIIText","description":"Renders text with an animated ASCII background for a retro feel.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n\n\n","path":"ASCIIText/ASCIIText.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/Ballpit.json b/public/r/Ballpit.json index 49698da..2729b9d 100644 --- a/public/r/Ballpit.json +++ b/public/r/Ballpit.json @@ -1 +1 @@ -{"name":"Ballpit","title":"Ballpit","description":"Physics ball pit simulation with bouncing colorful spheres.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"Ballpit/Ballpit.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"},{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file +{"name":"Ballpit","title":"Ballpit","description":"Physics ball pit simulation with bouncing colorful spheres.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"Ballpit/Ballpit.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"},{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file diff --git a/public/r/ClickSpark.json b/public/r/ClickSpark.json index 2dc37c7..cd8d257 100644 --- a/public/r/ClickSpark.json +++ b/public/r/ClickSpark.json @@ -1 +1 @@ -{"name":"ClickSpark","title":"ClickSpark","description":"Creates particle spark bursts at click position.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"ClickSpark/ClickSpark.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file +{"name":"ClickSpark","title":"ClickSpark","description":"Creates particle spark bursts at click position.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"ClickSpark/ClickSpark.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file diff --git a/public/r/CountUp.json b/public/r/CountUp.json index 8613b2c..d724da3 100644 --- a/public/r/CountUp.json +++ b/public/r/CountUp.json @@ -1 +1 @@ -{"name":"CountUp","title":"CountUp","description":"Animated number counter supporting formatting and decimals.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"CountUp/CountUp.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file +{"name":"CountUp","title":"CountUp","description":"Animated number counter supporting formatting and decimals.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"CountUp/CountUp.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/Cubes.json b/public/r/Cubes.json index 5580e70..712b304 100644 --- a/public/r/Cubes.json +++ b/public/r/Cubes.json @@ -1 +1 @@ -{"name":"Cubes","title":"Cubes","description":"3D rotating cube cluster. Supports auto-rotation or hover interaction.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"Cubes/Cubes.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file +{"name":"Cubes","title":"Cubes","description":"3D rotating cube cluster. Supports auto-rotation or hover interaction.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"Cubes/Cubes.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file diff --git a/public/r/DecryptedText.json b/public/r/DecryptedText.json index 6eef904..a97fd02 100644 --- a/public/r/DecryptedText.json +++ b/public/r/DecryptedText.json @@ -1 +1 @@ -{"name":"DecryptedText","title":"DecryptedText","description":"Hacker-style decryption cycling random glyphs until resolving to real text.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"DecryptedText/DecryptedText.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file +{"name":"DecryptedText","title":"DecryptedText","description":"Hacker-style decryption cycling random glyphs until resolving to real text.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"DecryptedText/DecryptedText.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/Dock.json b/public/r/Dock.json index e9d6c8b..665b660 100644 --- a/public/r/Dock.json +++ b/public/r/Dock.json @@ -1 +1 @@ -{"name":"Dock","title":"Dock","description":"macOS style magnifying dock with proximity scaling of icons.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"Dock/Dock.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file +{"name":"Dock","title":"Dock","description":"macOS style magnifying dock with proximity scaling of icons.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"Dock/Dock.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file diff --git a/public/r/InfiniteMenu.json b/public/r/InfiniteMenu.json index 4a39bdb..12c27b2 100644 --- a/public/r/InfiniteMenu.json +++ b/public/r/InfiniteMenu.json @@ -1 +1 @@ -{"name":"InfiniteMenu","title":"InfiniteMenu","description":"Horizontally looping menu effect that scrolls endlessly with seamless wrap.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"InfiniteMenu/InfiniteMenu.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gl-matrix","version":"^3.4.3"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file +{"name":"InfiniteMenu","title":"InfiniteMenu","description":"Horizontally looping menu effect that scrolls endlessly with seamless wrap.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"InfiniteMenu/InfiniteMenu.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gl-matrix","version":"^3.4.3"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file diff --git a/public/r/InfiniteScroll.json b/public/r/InfiniteScroll.json index 5978840..3ec3df3 100644 --- a/public/r/InfiniteScroll.json +++ b/public/r/InfiniteScroll.json @@ -1 +1 @@ -{"name":"InfiniteScroll","title":"InfiniteScroll","description":"Infinite scrolling container auto-loads content near viewport end.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"InfiniteScroll/InfiniteScroll.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file +{"name":"InfiniteScroll","title":"InfiniteScroll","description":"Infinite scrolling container auto-loads content near viewport end.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"InfiniteScroll/InfiniteScroll.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file diff --git a/public/r/LetterGlitch.json b/public/r/LetterGlitch.json index 1fd5c8f..c24a7b4 100644 --- a/public/r/LetterGlitch.json +++ b/public/r/LetterGlitch.json @@ -1 +1 @@ -{"name":"LetterGlitch","title":"LetterGlitch","description":"Matrix style letter animation.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"LetterGlitch/LetterGlitch.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file +{"name":"LetterGlitch","title":"LetterGlitch","description":"Matrix style letter animation.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"LetterGlitch/LetterGlitch.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file diff --git a/public/r/MagicBento.json b/public/r/MagicBento.json index 8e1d2b6..ff98ca5 100644 --- a/public/r/MagicBento.json +++ b/public/r/MagicBento.json @@ -1 +1 @@ -{"name":"MagicBento","title":"MagicBento","description":"Interactive bento grid tiles expand + animate with various options.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"MagicBento/MagicBento.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file +{"name":"MagicBento","title":"MagicBento","description":"Interactive bento grid tiles expand + animate with various options.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"MagicBento/MagicBento.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Components"]} \ No newline at end of file diff --git a/public/r/MetallicPaint.json b/public/r/MetallicPaint.json index 89dca36..fb447f1 100644 --- a/public/r/MetallicPaint.json +++ b/public/r/MetallicPaint.json @@ -1 +1 @@ -{"name":"MetallicPaint","title":"MetallicPaint","description":"Liquid metallic paint shader which can be applied to SVG elements.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"MetallicPaint/MetallicPaint.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]},{"type":"registry:component","role":"file","content":"export function parseImage(file: File): Promise<{ imageData: ImageData; pngBlob: Blob }> {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n return new Promise((resolve, reject) => {\n if (!file || !ctx) {\n reject(new Error('Invalid file or context'));\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = function () {\n if (file.type === 'image/svg+xml') {\n img.width = 1000;\n img.height = 1000;\n }\n\n const MAX_SIZE = 1000;\n const MIN_SIZE = 500;\n let width = img.naturalWidth;\n let height = img.naturalHeight;\n\n if (width > MAX_SIZE || height > MAX_SIZE || width < MIN_SIZE || height < MIN_SIZE) {\n if (width > height) {\n if (width > MAX_SIZE) {\n height = Math.round((height * MAX_SIZE) / width);\n width = MAX_SIZE;\n } else if (width < MIN_SIZE) {\n height = Math.round((height * MIN_SIZE) / width);\n width = MIN_SIZE;\n }\n } else {\n if (height > MAX_SIZE) {\n width = Math.round((width * MAX_SIZE) / height);\n height = MAX_SIZE;\n } else if (height < MIN_SIZE) {\n width = Math.round((width * MIN_SIZE) / height);\n height = MIN_SIZE;\n }\n }\n }\n\n canvas.width = width;\n canvas.height = height;\n\n const shapeCanvas = document.createElement('canvas');\n shapeCanvas.width = width;\n shapeCanvas.height = height;\n const shapeCtx = shapeCanvas.getContext('2d')!;\n shapeCtx.drawImage(img, 0, 0, width, height);\n\n const shapeImageData = shapeCtx.getImageData(0, 0, width, height);\n const data = shapeImageData.data;\n const shapeMask = new Array(width * height).fill(false);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const idx4 = (y * width + x) * 4;\n const r = data[idx4];\n const g = data[idx4 + 1];\n const b = data[idx4 + 2];\n const a = data[idx4 + 3];\n shapeMask[y * width + x] = !((r === 255 && g === 255 && b === 255 && a === 255) || a === 0);\n }\n }\n\n function inside(x: number, y: number) {\n if (x < 0 || x >= width || y < 0 || y >= height) return false;\n return shapeMask[y * width + x];\n }\n\n const boundaryMask = new Array(width * height).fill(false);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const idx = y * width + x;\n if (!shapeMask[idx]) continue;\n let isBoundary = false;\n for (let ny = y - 1; ny <= y + 1 && !isBoundary; ny++) {\n for (let nx = x - 1; nx <= x + 1 && !isBoundary; nx++) {\n if (!inside(nx, ny)) {\n isBoundary = true;\n }\n }\n }\n if (isBoundary) {\n boundaryMask[idx] = true;\n }\n }\n }\n\n const interiorMask = new Array(width * height).fill(false);\n for (let y = 1; y < height - 1; y++) {\n for (let x = 1; x < width - 1; x++) {\n const idx = y * width + x;\n if (\n shapeMask[idx] &&\n shapeMask[idx - 1] &&\n shapeMask[idx + 1] &&\n shapeMask[idx - width] &&\n shapeMask[idx + width]\n ) {\n interiorMask[idx] = true;\n }\n }\n }\n\n const u = new Float32Array(width * height).fill(0);\n const newU = new Float32Array(width * height).fill(0);\n const C = 0.01;\n const ITERATIONS = 300;\n\n function getU(x: number, y: number, arr: Float32Array) {\n if (x < 0 || x >= width || y < 0 || y >= height) return 0;\n if (!shapeMask[y * width + x]) return 0;\n return arr[y * width + x];\n }\n\n for (let iter = 0; iter < ITERATIONS; iter++) {\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const idx = y * width + x;\n if (!shapeMask[idx] || boundaryMask[idx]) {\n newU[idx] = 0;\n continue;\n }\n const sumN = getU(x + 1, y, u) + getU(x - 1, y, u) + getU(x, y + 1, u) + getU(x, y - 1, u);\n newU[idx] = (C + sumN) / 4;\n }\n }\n u.set(newU);\n }\n\n let maxVal = 0;\n for (let i = 0; i < width * height; i++) {\n if (u[i] > maxVal) maxVal = u[i];\n }\n const alpha = 2.0;\n const outImg = ctx.createImageData(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const idx = y * width + x;\n const px = idx * 4;\n if (!shapeMask[idx]) {\n outImg.data[px] = 255;\n outImg.data[px + 1] = 255;\n outImg.data[px + 2] = 255;\n outImg.data[px + 3] = 255;\n } else {\n const raw = u[idx] / maxVal;\n const remapped = Math.pow(raw, alpha);\n const gray = 255 * (1 - remapped);\n outImg.data[px] = gray;\n outImg.data[px + 1] = gray;\n outImg.data[px + 2] = gray;\n outImg.data[px + 3] = 255;\n }\n }\n }\n ctx.putImageData(outImg, 0, 0);\n\n canvas.toBlob(blob => {\n if (!blob) {\n reject(new Error('Failed to create PNG blob'));\n return;\n }\n resolve({\n imageData: outImg,\n pngBlob: blob\n });\n }, 'image/png');\n };\n\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = URL.createObjectURL(file);\n });\n}\n","path":"MetallicPaint/parseImage.ts","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file +{"name":"MetallicPaint","title":"MetallicPaint","description":"Liquid metallic paint shader which can be applied to SVG elements.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"MetallicPaint/MetallicPaint.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file diff --git a/public/r/PixelBlast.json b/public/r/PixelBlast.json index c82b21f..0bcb70e 100644 --- a/public/r/PixelBlast.json +++ b/public/r/PixelBlast.json @@ -1 +1 @@ -{"name":"PixelBlast","title":"PixelBlast","description":"Exploding pixel particle bursts with optional liquid postprocessing.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"PixelBlast/PixelBlast.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"postprocessing","version":"^6.37.6"},{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file +{"name":"PixelBlast","title":"PixelBlast","description":"Exploding pixel particle bursts with optional liquid postprocessing.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"PixelBlast/PixelBlast.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"postprocessing","version":"^6.37.6"},{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file diff --git a/public/r/PixelSnow.json b/public/r/PixelSnow.json new file mode 100644 index 0000000..025a875 --- /dev/null +++ b/public/r/PixelSnow.json @@ -0,0 +1 @@ +{"name":"PixelSnow","title":"PixelSnow","description":"Falling pixelated snow effect with customizable density and speed.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"PixelSnow/PixelSnow.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["Backgrounds"]} \ No newline at end of file diff --git a/public/r/PixelTrail.json b/public/r/PixelTrail.json new file mode 100644 index 0000000..f1a01ac --- /dev/null +++ b/public/r/PixelTrail.json @@ -0,0 +1 @@ +{"name":"PixelTrail","title":"PixelTrail","description":"Pixel grid trail effect that follows cursor movement with customizable gooey filter.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"PixelTrail/PixelTrail.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"three","version":"^0.178.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file diff --git a/public/r/RotatingText.json b/public/r/RotatingText.json index 0adde8c..68c31bb 100644 --- a/public/r/RotatingText.json +++ b/public/r/RotatingText.json @@ -1 +1 @@ -{"name":"RotatingText","title":"RotatingText","description":"Cycles through multiple phrases with 3D rotate / flip transitions.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"RotatingText/RotatingText.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file +{"name":"RotatingText","title":"RotatingText","description":"Cycles through multiple phrases with 3D rotate / flip transitions.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"RotatingText/RotatingText.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/Shuffle.json b/public/r/Shuffle.json new file mode 100644 index 0000000..ed86190 --- /dev/null +++ b/public/r/Shuffle.json @@ -0,0 +1 @@ +{"name":"Shuffle","title":"Shuffle","description":"GSAP-powered slot machine style text shuffle animation with scroll trigger.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"Shuffle/Shuffle.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/StickerPeel.json b/public/r/StickerPeel.json index 70d0847..a28a84b 100644 --- a/public/r/StickerPeel.json +++ b/public/r/StickerPeel.json @@ -1 +1 @@ -{"name":"StickerPeel","title":"StickerPeel","description":"Sticker corner lift + peel interaction using 3D transform and shadow depth.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"StickerPeel/StickerPeel.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file +{"name":"StickerPeel","title":"StickerPeel","description":"Sticker corner lift + peel interaction using 3D transform and shadow depth.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"StickerPeel/StickerPeel.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file diff --git a/public/r/TargetCursor.json b/public/r/TargetCursor.json index 28052b5..edd7fba 100644 --- a/public/r/TargetCursor.json +++ b/public/r/TargetCursor.json @@ -1 +1 @@ -{"name":"TargetCursor","title":"TargetCursor","description":"A cursor follow animation with 4 corners that lock onto targets.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"TargetCursor/TargetCursor.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file +{"name":"TargetCursor","title":"TargetCursor","description":"A cursor follow animation with 4 corners that lock onto targets.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"TargetCursor/TargetCursor.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"gsap","version":"^3.13.0"}],"devDependencies":[],"categories":["Animations"]} \ No newline at end of file diff --git a/public/r/TextCursor.json b/public/r/TextCursor.json index 988900f..110d2a8 100644 --- a/public/r/TextCursor.json +++ b/public/r/TextCursor.json @@ -1 +1 @@ -{"name":"TextCursor","title":"TextCursor","description":"Make any text element follow your cursor, leaving a trail of copies behind it.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"TextCursor/TextCursor.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file +{"name":"TextCursor","title":"TextCursor","description":"Make any text element follow your cursor, leaving a trail of copies behind it.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n\n\n","path":"TextCursor/TextCursor.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/TrueFocus.json b/public/r/TrueFocus.json index ba293a3..5f95aa2 100644 --- a/public/r/TrueFocus.json +++ b/public/r/TrueFocus.json @@ -1 +1 @@ -{"name":"TrueFocus","title":"TrueFocus","description":"Applies dynamic blur / clarity based over a series of words in order.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"TrueFocus/TrueFocus.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file +{"name":"TrueFocus","title":"TrueFocus","description":"Applies dynamic blur / clarity based over a series of words in order.","type":"registry:component","add":"when-added","files":[{"type":"registry:component","role":"file","content":"\n\n\n","path":"TrueFocus/TrueFocus.vue","_imports_":[],"registryDependencies":[],"dependencies":[],"devDependencies":[]}],"registryDependencies":[],"dependencies":[{"ecosystem":"js","name":"motion-v","version":"^1.5.0"}],"devDependencies":[],"categories":["TextAnimations"]} \ No newline at end of file diff --git a/public/r/registry.json b/public/r/registry.json index a783f34..af2454a 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -549,19 +549,19 @@ "categories": ["Animations"] }, { - "name": "CountUp", - "title": "CountUp", - "description": "Animated number counter supporting formatting and decimals.", + "name": "PixelTrail", + "title": "PixelTrail", + "description": "Pixel grid trail effect that follows cursor movement with customizable gooey filter.", "type": "registry:component", "add": "when-added", "registryDependencies": [], - "dependencies": [], + "dependencies": [{ "ecosystem": "js", "name": "three", "version": "^0.178.0" }], "devDependencies": [], "files": [ { "type": "registry:component", "role": "file", - "path": "CountUp/CountUp.vue", + "path": "PixelTrail/PixelTrail.vue", "registryDependencies": [], "dependencies": [], "devDependencies": [] @@ -582,7 +582,28 @@ { "type": "registry:component", "role": "file", - "path": "ASCIIText/AsciiText.vue", + "path": "ASCIIText/ASCIIText.vue", + "registryDependencies": [], + "dependencies": [], + "devDependencies": [] + } + ], + "categories": ["TextAnimations"] + }, + { + "name": "CountUp", + "title": "CountUp", + "description": "Animated number counter supporting formatting and decimals.", + "type": "registry:component", + "add": "when-added", + "registryDependencies": [], + "dependencies": [], + "devDependencies": [], + "files": [ + { + "type": "registry:component", + "role": "file", + "path": "CountUp/CountUp.vue", "registryDependencies": [], "dependencies": [], "devDependencies": [] @@ -1010,6 +1031,27 @@ ], "categories": ["TextAnimations"] }, + { + "name": "Shuffle", + "title": "Shuffle", + "description": "GSAP-powered slot machine style text shuffle animation with scroll trigger.", + "type": "registry:component", + "add": "when-added", + "registryDependencies": [], + "dependencies": [{ "ecosystem": "js", "name": "gsap", "version": "^3.13.0" }], + "devDependencies": [], + "files": [ + { + "type": "registry:component", + "role": "file", + "path": "Shuffle/Shuffle.vue", + "registryDependencies": [], + "dependencies": [], + "devDependencies": [] + } + ], + "categories": ["TextAnimations"] + }, { "name": "AnimatedList", "title": "AnimatedList", @@ -2391,6 +2433,27 @@ } ], "categories": ["Backgrounds"] + }, + { + "name": "PixelSnow", + "title": "PixelSnow", + "description": "Falling pixelated snow effect with customizable density and speed.", + "type": "registry:component", + "add": "when-added", + "registryDependencies": [], + "dependencies": [{ "ecosystem": "js", "name": "three", "version": "^0.178.0" }], + "devDependencies": [], + "files": [ + { + "type": "registry:component", + "role": "file", + "path": "PixelSnow/PixelSnow.vue", + "registryDependencies": [], + "dependencies": [], + "devDependencies": [] + } + ], + "categories": ["Backgrounds"] } ] } diff --git a/src/constants/Components.ts b/src/constants/Components.ts index 658867b..eefff81 100644 --- a/src/constants/Components.ts +++ b/src/constants/Components.ts @@ -42,7 +42,7 @@ const textAnimations = { 'falling-text': () => import("../demo/TextAnimations/FallingTextDemo.vue"), 'text-cursor': () => import("../demo/TextAnimations/TextCursorDemo.vue"), 'decrypted-text': () => import("../demo/TextAnimations/DecryptedTextDemo.vue"), - 'ascii-text': () => import("../demo/TextAnimations/AsciiTextDemo.vue"), + 'ascii-text': () => import("../demo/TextAnimations/ASCIITextDemo.vue"), 'scramble-text': () => import("../demo/TextAnimations/ScrambleTextDemo.vue"), 'true-focus': () => import("../demo/TextAnimations/TrueFocusDemo.vue"), 'scroll-float': () => import("../demo/TextAnimations/ScrollFloatDemo.vue"), diff --git a/src/constants/Information.ts b/src/constants/Information.ts index 4228e90..82c076b 100644 --- a/src/constants/Information.ts +++ b/src/constants/Information.ts @@ -225,11 +225,11 @@ export const componentMetadata: ComponentMetadata = { //! Text Animations ------------------------------------------------------------------------------------------------------------------------------- - 'TextAnimations/AsciiText': { + 'TextAnimations/ASCIIText': { videoUrl: '/assets/videos/asciitext.webm', description: 'Renders text with an animated ASCII background for a retro feel.', category: 'TextAnimations', - name: 'AsciiText', + name: 'ASCIIText', docsUrl: 'https://vue-bits.dev/text-animations/ascii-text', tags: [] }, diff --git a/src/constants/code/TextAnimations/asciiTextCode.ts b/src/constants/code/TextAnimations/asciiTextCode.ts index c8e1af4..90e9464 100644 --- a/src/constants/code/TextAnimations/asciiTextCode.ts +++ b/src/constants/code/TextAnimations/asciiTextCode.ts @@ -1,12 +1,12 @@ -import code from '@/content/TextAnimations/AsciiText/AsciiText.vue?raw'; +import code from '@/content/TextAnimations/ASCIIText/ASCIIText.vue?raw'; import { createCodeObject } from '../../../types/code'; -export const asciiText = createCodeObject(code, 'TextAnimations/AsciiText', { +export const asciiText = createCodeObject(code, 'TextAnimations/ASCIIText', { installation: `npm install three @types/three`, usage: `