image-sphere
jolyui-ui/image-sphereFreeComponent
jolyui/ui publishes no description for this item.
Install it
npx shadcn@latest add https://jolyui.dev/r/image-sphere.jsonSource
1import { X } from "lucide-react";2import Image from "next/image";3import type React from "react";4import { useCallback, useEffect, useRef, useState } from "react";56export interface Position3D {7 x: number;8 y: number;9 z: number;10}1112export interface SphericalPosition {13 theta: number; // Azimuth angle in degrees14 phi: number; // Polar angle in degrees15 radius: number; // Distance from center16}1718export interface WorldPosition extends Position3D {19 scale: number;20 zIndex: number;21 isVisible: boolean;22 fadeOpacity: number;23 originalIndex: number;24}2526export interface ImageData {27 id: string;28 src: string;29 alt: string;30 title?: string;31 description?: string;32}3334export interface SphereImageGridProps {35 images?: ImageData[];36 containerSize?: number;37 sphereRadius?: number;38 dragSensitivity?: number;39 momentumDecay?: number;40 maxRotationSpeed?: number;41 baseImageScale?: number;42 hoverScale?: number;43 perspective?: number;44 autoRotate?: boolean;45 autoRotateSpeed?: number;46 className?: string;47}4849interface RotationState {50 x: number;51 y: number;52 z: number;53}5455interface VelocityState {56 x: number;57 y: number;58}5960interface MousePosition {61 x: number;62 y: number;63}6465// ==========================================66// CONSTANTS & CONFIGURATION67// ==========================================6869const SPHERE_MATH = {70 degreesToRadians: (degrees: number): number => degrees * (Math.PI / 180),71 radiansToDegrees: (radians: number): number => radians * (180 / Math.PI),7273 sphericalToCartesian: (74 radius: number,75 theta: number,76 phi: number,77 ): Position3D => ({78 x: radius * Math.sin(phi) * Math.cos(theta),79 y: radius * Math.cos(phi),80 z: radius * Math.sin(phi) * Math.sin(theta),81 }),8283 calculateDistance: (84 pos: Position3D,85 center: Position3D = { x: 0, y: 0, z: 0 },86 ): number => {87 const dx = pos.x - center.x;88 const dy = pos.y - center.y;89 const dz = pos.z - center.z;90 return Math.sqrt(dx * dx + dy * dy + dz * dz);91 },9293 normalizeAngle: (angle: number): number => {94 while (angle > 180) angle -= 360;95 while (angle < -180) angle += 360;96 return angle;97 },98};99100// ==========================================101// MAIN COMPONENT102// ==========================================103104const SphereImageGrid: React.FC<SphereImageGridProps> = ({105 images = [],106 containerSize = 400,107 sphereRadius = 200,108 dragSensitivity = 0.5,109 momentumDecay = 0.95,110 maxRotationSpeed = 5,111 baseImageScale = 0.12,112// … truncated
What it pulls in
npm packages
Files it writes
More from jolyui/ui
All 199 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ai-prompt-boxai-prompt-box | jolyui/ui | Components | Free | 4 deps | |
| animated-beamanimated-beam | jolyui/ui | Components | Free | 1 dep | |
| animated-tableanimated-table | jolyui/ui | Components | Free | 2 deps | |
| animated-theme-toggleanimated-theme-toggle | jolyui/ui | Components | Free | 2 deps | |
| animated-toastanimated-toast | jolyui/ui | Components | Free | 2 deps | |
| animated-tooltipanimated-tooltip | jolyui/ui | Components | Free | 1 dep | |
| bento-gridbento-grid | jolyui/ui | Components | Free | no deps | |
| buttonbutton | jolyui/ui | Components | Free | 3 deps |
