ASCIIText
react-bits/ASCIIText-TS-CSSFreeComponent
Renders text with an animated ASCII background for a retro feel.
Live preview
live · rendered by the registry
Rendered by @react-bits on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://www.reactbits.dev/r/ASCIIText-TS-CSS.jsonSource
1// Component ported and enhanced from https://codepen.io/JuanFuentes/pen/eYEeoyE23import { useEffect, useRef } from 'react';4import * as THREE from 'three';56const vertexShader = `7varying vec2 vUv;8uniform float uTime;9uniform float mouse;10uniform float uEnableWaves;1112void main() {13 vUv = uv;14 float time = uTime * 5.;1516 float waveFactor = uEnableWaves;1718 vec3 transformed = position;1920 transformed.x += sin(time + position.y) * 0.5 * waveFactor;21 transformed.y += cos(time + position.z) * 0.15 * waveFactor;22 transformed.z += sin(time + position.x) * waveFactor;2324 gl_Position = projectionMatrix * modelViewMatrix * vec4(transformed, 1.0);25}26`;2728const fragmentShader = `29varying vec2 vUv;30uniform float mouse;31uniform float uTime;32uniform sampler2D uTexture;3334void main() {35 float time = uTime;36 vec2 pos = vUv;3738 float move = sin(time + mouse) * 0.01;39 float r = texture2D(uTexture, pos + cos(time * 2. - time + pos.x) * .01).r;40 float g = texture2D(uTexture, pos + tan(time * .5 + pos.x - time) * .01).g;41 float b = texture2D(uTexture, pos - cos(time * 2. + time + pos.y) * .01).b;42 float a = texture2D(uTexture, pos).a;43 gl_FragColor = vec4(r, g, b, a);44}45`;4647function map(n: number, start: number, stop: number, start2: number, stop2: number) {48 return ((n - start) / (stop - start)) * (stop2 - start2) + start2;49}5051const PX_RATIO = typeof window !== 'undefined' ? window.devicePixelRatio : 1;5253interface AsciiFilterOptions {54 fontSize?: number;55 fontFamily?: string;56 charset?: string;57 invert?: boolean;58}5960class AsciiFilter {61 renderer!: THREE.WebGLRenderer;62 domElement: HTMLDivElement;63 pre: HTMLPreElement;64 canvas: HTMLCanvasElement;65 context: CanvasRenderingContext2D | null;66 deg: number;67 invert: boolean;68 fontSize: number;69 fontFamily: string;70 charset: string;71 width: number = 0;72 height: number = 0;73 center: { x: number; y: number } = { x: 0, y: 0 };74 mouse: { x: number; y: number } = { x: 0, y: 0 };75 cols: number = 0;76 rows: number = 0;7778 constructor(renderer: THREE.WebGLRenderer, { fontSize, fontFamily, charset, invert }: AsciiFilterOptions = {}) {79 this.renderer = renderer;80 this.domElement = document.createElement('div');81 this.domElement.style.position = 'absolute';82 this.domElement.style.top = '0';83 this.domElement.style.left = '0';84 this.domElement.style.width = '100%';85 this.domElement.style.height = '100%';8687 this.pre = document.createElement('pre');88// … truncated
What it pulls in
npm packages
Files it writes
More from @react-bits
All 556 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| AnimatedContentAnimatedContent-JS-CSS | @react-bits | Components | Free | 1 dep | |
| AnimatedContentAnimatedContent-JS-TW | @react-bits | Components | Free | 1 dep | |
| AnimatedContentAnimatedContent-TS-CSS | @react-bits | Components | Free | 1 dep | |
| AnimatedContentAnimatedContent-TS-TW | @react-bits | Components | Free | 1 dep | |
| AnimatedListAnimatedList-JS-CSS | @react-bits | Components | Free | 1 dep · 2 files | |
| AnimatedListAnimatedList-JS-TW | @react-bits | Components | Free | 1 dep | |
| AnimatedListAnimatedList-TS-CSS | @react-bits | Components | Free | 1 dep · 2 files | |
| AnimatedListAnimatedList-TS-TW | @react-bits | Components | Free | 1 dep |
