{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "dynamic-island-demo",
"registryDependencies": [
"dynamic-island"
],
"files": [
{
"path": "registry/default/example/dynamic-island-demo.tsx",
"content": "\"use client\"\n\nimport { createContext, useContext } from \"react\"\nimport {\n ArrowUpLeftSquareIcon,\n Loader,\n Mail,\n MessageCircle,\n MousePointerClickIcon,\n User,\n Waves,\n} from \"lucide-react\"\nimport { motion, useReducedMotion } from \"motion/react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n DynamicContainer,\n DynamicDescription,\n DynamicDiv,\n DynamicIsland,\n DynamicIslandProvider,\n DynamicTitle,\n SizePresets,\n useDynamicIslandSize,\n useScheduledAnimations,\n} from \"@/registry/default/ui/dynamic-island\"\n\nconst DynamicAction = () => {\n const { state: blobState, setSize } = useDynamicIslandSize()\n\n const blobStates: SizePresets[] = [\n \"compact\",\n \"large\",\n \"tall\",\n \"long\",\n \"medium\",\n ]\n\n const cycleBlobStates = () => {\n const currentIndex = blobStates.indexOf(blobState.size)\n const nextIndex = (currentIndex + 1) % blobStates.length\n setSize(blobStates[nextIndex])\n }\n\n useScheduledAnimations([\n { size: \"compact\", delay: 1000 },\n { size: \"large\", delay: 1200 },\n { size: \"tall\", delay: 1600 },\n { size: \"long\", delay: 1800 },\n { size: \"medium\", delay: 2200 },\n ])\n\n // Provide dynamic detail in such a beautiful small place :)\n const renderCompactState = () => (\n
cycle states
\n