Column Rake
cellforge/cell-angle-10FreeComponent
A stepped head and tail snake the mask in strict column order (bottom to top per column, columns left to right), unlike perimeter chases or diagonal waves.
Install it
npx shadcn@latest add https://cellforge.dev/r/cell-angle-10.jsonSource
1"use client";23import type { CSSProperties } from "react";45import { cx } from "@/components/ui/cellforge-core";6import { resolveDmxColorTokens } from "@/components/ui/cellforge-core";7import { useCellForgePhases } from "@/components/ui/cellforge-hooks";8import { styleOpacity, stylePx } from "@/components/ui/cellforge-core";9import { remapOpacityToTriplet } from "@/components/ui/cellforge-core";10import { dmxBloomHaloSpreadClass, dmxBloomRootActive, dmxDotBloomParts } from "@/components/ui/cellforge-core";11import { usePrefersReducedMotion } from "@/components/ui/cellforge-hooks";12import { useSteppedCycle } from "@/components/ui/cellforge-hooks";13import type { CellForgeCommonProps } from "@/components/ui/cellforge-core";1415export type CellAngle10Props = CellForgeCommonProps;1617const MATRIX_SIZE = 7;18const STEP_COUNT = 36;19const BASE_OPACITY = 0.07;20const TAIL_LEVELS = [0.94, 0.68, 0.42, 0.24] as const;2122const TRIANGLE_CELLS = new Set([23 "1,3",24 "2,2",25 "2,4",26 "3,1",27 "3,3",28 "3,5",29 "4,0",30 "4,2",31 "4,4",32 "4,6"33]);3435/** Bottom-to-top within each column, columns 0→6 — only triangle cells appear in the path. */36const COLUMN_RAKE_PATH: ReadonlyArray<readonly [number, number]> = [37 [4, 0],38 [3, 1],39 [4, 2],40 [2, 2],41 [3, 3],42 [1, 3],43 [4, 4],44 [2, 4],45 [4, 6],46 [3, 5]47];4849function isWithinTriangleMask(row: number, col: number): boolean {50 if (row < 0 || row >= MATRIX_SIZE || col < 0 || col >= MATRIX_SIZE) {51 return false;52 }5354 return TRIANGLE_CELLS.has(`${row},${col}`);55}5657export function CellAngle10({58 size = 30,59 dotSize = 6.5,60 color = "currentColor",61 colorPreset,62 ariaLabel = "Loading",63 className,64 muted = false,65 bloom = false,66 halo = 0,67 dotClassName,68 dotShape = "circle",69 speed = 1.8,70 animated = true,71 hoverAnimated = false,72 cellPadding,73 opacityBase,74 opacityMid,75 opacityPeak76}: CellAngle10Props) {77 const reducedMotion = usePrefersReducedMotion();78 const { phase: matrixPhase, onMouseEnter, onMouseLeave } = useCellForgePhases({79 animated: Boolean(animated && !reducedMotion),80 hoverAnimated: Boolean(hoverAnimated && !reducedMotion),81 speed82 });83 const step = useSteppedCycle({84 active: !reducedMotion && matrixPhase !== "idle",85 cycleMsBase: 1750,86 steps: STEP_COUNT,87 speed,88 });8990 const gap =91 cellPadding ?? Math.max(1, Math.floor((size - dotSize * MATRIX_SIZE) / (MATRIX_SIZE - 1)));92 const matrixSize = dotSize * MATRIX_SIZE + gap * (MATRIX_SIZE - 1);93// … truncated
More from @cellforge
All 71 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| All CellForge Loadersall | @cellforge | Components | Free | no deps | |
| Core Spokescell-angle-1 | @cellforge | Components | Free | no deps | |
| Shelf Descentcell-angle-11 | @cellforge | Components | Free | no deps | |
| Skew Driftcell-angle-12 | @cellforge | Components | Free | no deps | |
| Serpent Zipcell-angle-13 | @cellforge | Components | Free | no deps | |
| Pillar Sweepcell-angle-14 | @cellforge | Components | Free | no deps | |
| Tripod Handoffcell-angle-15 | @cellforge | Components | Free | no deps | |
| Updraftcell-angle-16 | @cellforge | Components | Free | no deps |
