{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "arling",
  "homepage": "https://arling.sk/motion/",
  "items": [
    {
      "name": "core",
      "type": "registry:lib",
      "title": "ARLing Motion core",
      "description": "The motion core every component uses: closed-form springs as pure functions of time, tracks, a two edge indicator, presence for content, a live driver and demo beats. No dependencies. Also adds the springs as CSS variables (--arling-spring-snappy and others).",
      "files": [
        {
          "path": "registry/arling/lib/arling-motion.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion.d.ts",
          "type": "registry:lib"
        }
      ],
      "categories": [
        "motion",
        "animation",
        "spring"
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "A modal dialog that grows out of the button that opened it and folds back into it. Focus stays inside, Escape closes, focus returns to the button.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-dialog.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-dialog.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-dialog.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "dialog",
        "modal"
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Tabs whose indicator stretches toward the new tab with its leading edge while the trailing edge catches up. Arrow keys, Home and End, panels without layout shift.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-tabs.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-tabs.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-tabs.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "tabs",
        "navigation"
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "One tooltip bubble for a group of triggers that slides and resizes from one trigger to the next. Shows on keyboard focus, Escape hides it, it stays while the pointer is over it.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-tooltip.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-tooltip.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-tooltip.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "tooltip"
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Dropdown menu and popover",
      "description": "A dropdown menu and a popover that unfold from their trigger. Items enter one after another and a single highlight slides between them. Menu keyboard as in the WAI-ARIA pattern.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-popover.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-popover.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-popover.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "menu",
        "popover",
        "dropdown"
      ]
    },
    {
      "name": "toast",
      "type": "registry:ui",
      "title": "Toast",
      "description": "Toasts that grow out of the point you clicked and fold into a stack. Hover or focus unfolds the stack and pauses the timers, a polite live region reads each one, Alt+T jumps to the newest.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-toast.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-toast.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-toast.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "toast",
        "notification"
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "A switch whose thumb travels on a spring and stretches while pressed. The new colour grows as a circle from the press point instead of fading through grey.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-switch.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-switch.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-switch.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "switch",
        "toggle",
        "form"
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "An accordion whose panel unfolds downward while each row enters as the growing edge reaches it. Closing lets the rows leave first, then folds the panel.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-accordion.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-accordion.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-accordion.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "accordion",
        "disclosure"
      ]
    },
    {
      "name": "command",
      "type": "registry:ui",
      "title": "Command menu",
      "description": "A Cmd+K command menu that filters without a cut: rows that stop matching leave in place, the rest slide into the gaps and one highlight moves between rows.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-command.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-command.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-command.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "command",
        "search",
        "combobox"
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "A bottom sheet that follows your pointer 1:1 and hands over to a spring that keeps your release speed. A flick or a pull past the middle closes it; Escape and buttons always work too.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-drawer.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-drawer.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-drawer.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "drawer",
        "sheet",
        "gesture"
      ]
    },
    {
      "name": "carousel",
      "type": "registry:ui",
      "title": "Carousel",
      "description": "A carousel you can drag and throw. The spring starts from your release speed and lands on the slide the throw points to; buttons and arrow keys use the same spring. No auto rotation.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-carousel.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-carousel.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-carousel.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "carousel",
        "slider",
        "gesture"
      ]
    },
    {
      "name": "otp",
      "type": "registry:ui",
      "title": "One-time code input",
      "description": "A one-time code input built on one real text field. Each digit enters its own slot, the focus ring slides ahead, and a verified code turns green as one circle growing across the row.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-otp.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-otp.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-otp.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "otp",
        "input",
        "form"
      ]
    },
    {
      "name": "dropzone",
      "type": "registry:ui",
      "title": "Dropzone",
      "description": "A drop zone that unfolds into a file list row by row and folds back on Clear. It only lists the files and hands you the File objects; nothing is uploaded.",
      "registryDependencies": [
        "https://arling.sk/motion/r/core.json"
      ],
      "files": [
        {
          "path": "registry/arling/lib/arling-motion-dropzone.js",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/lib/arling-motion-dropzone.d.ts",
          "type": "registry:lib"
        },
        {
          "path": "registry/arling/ui/motion-dropzone.tsx",
          "type": "registry:ui"
        }
      ],
      "categories": [
        "motion",
        "dropzone",
        "upload",
        "file"
      ]
    }
  ]
}
