{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "remold",
  "homepage": "/",
  "items": [
    {
      "name": "popover-menu",
      "type": "registry:block",
      "title": "Popover menu",
      "description": "A project-actions menu that grows from a compact trigger into an anchored popover.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/popover-menu.tsx",
          "type": "registry:component",
          "target": "components/remold/popover-menu.tsx"
        },
        {
          "path": "components/remold/use-script.ts",
          "type": "registry:component",
          "target": "components/remold/use-script.ts"
        }
      ]
    },
    {
      "name": "split-amount",
      "type": "registry:block",
      "title": "Split amount",
      "description": "A bill splitter where toggling people re-divides the bar and rolls everyone's share, cents included. Built on Base UI's ToggleGroup.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/split-amount.tsx",
          "type": "registry:component",
          "target": "components/remold/split-amount.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/form-kit.css",
          "type": "registry:file",
          "target": "components/remold/form-kit.css"
        },
        {
          "path": "components/remold/split-amount.css",
          "type": "registry:file",
          "target": "components/remold/split-amount.css"
        }
      ]
    },
    {
      "name": "range-slider",
      "type": "registry:block",
      "title": "Range slider",
      "description": "A price range slider whose price rides above the handle while you drag and flies back into the label when you let go. Built on Base UI's Slider.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/range-slider.tsx",
          "type": "registry:component",
          "target": "components/remold/range-slider.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/form-kit.css",
          "type": "registry:file",
          "target": "components/remold/form-kit.css"
        },
        {
          "path": "components/remold/range-slider.css",
          "type": "registry:file",
          "target": "components/remold/range-slider.css"
        }
      ]
    },
    {
      "name": "stepper-slider",
      "type": "registry:block",
      "title": "Stepper slider",
      "description": "A number control that's a − / + stepper for small nudges and stretches into a slider when you drag the number sideways. Built on Base UI's Number Field and Slider.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/stepper-slider.tsx",
          "type": "registry:component",
          "target": "components/remold/stepper-slider.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-script.ts",
          "type": "registry:component",
          "target": "components/remold/use-script.ts"
        },
        {
          "path": "components/remold/stepper-slider.css",
          "type": "registry:file",
          "target": "components/remold/stepper-slider.css"
        }
      ]
    },
    {
      "name": "event-rsvp",
      "type": "registry:block",
      "title": "Event RSVP",
      "description": "An RSVP button that grows into a sheet for your answer, saves with a progress bar, and becomes your spot. Built on Base UI's Button, Radio Group, Checkbox, Progress, Tooltip and Separator.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/event-rsvp.tsx",
          "type": "registry:component",
          "target": "components/remold/event-rsvp.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/use-script.ts",
          "type": "registry:component",
          "target": "components/remold/use-script.ts"
        },
        {
          "path": "components/remold/event-rsvp.css",
          "type": "registry:file",
          "target": "components/remold/event-rsvp.css"
        }
      ]
    },
    {
      "name": "promo-code",
      "type": "registry:block",
      "title": "Promo code",
      "description": "A promo code field that shrinks into a chip when applied, slides in the discount and rolls the total; refused codes shake and say why. Built on Base UI's Field.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/promo-code.tsx",
          "type": "registry:component",
          "target": "components/remold/promo-code.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/form-kit.css",
          "type": "registry:file",
          "target": "components/remold/form-kit.css"
        },
        {
          "path": "components/remold/promo-code.css",
          "type": "registry:file",
          "target": "components/remold/promo-code.css"
        }
      ]
    },
    {
      "name": "quantity-stepper",
      "type": "registry:block",
      "title": "Quantity stepper",
      "description": "An Add button that stretches into a quantity stepper whose count rolls, with the minus becoming a bin at one. Built on Base UI's NumberField.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/quantity-stepper.tsx",
          "type": "registry:component",
          "target": "components/remold/quantity-stepper.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/form-kit.css",
          "type": "registry:file",
          "target": "components/remold/form-kit.css"
        },
        {
          "path": "components/remold/quantity-stepper.css",
          "type": "registry:file",
          "target": "components/remold/quantity-stepper.css"
        }
      ]
    },
    {
      "name": "tag-input",
      "type": "registry:block",
      "title": "Tag input",
      "description": "A tag field where the word you type becomes the chip in place: its fill and remove button grow in around the text. Built on Base UI's Combobox with Chips.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/tag-input.tsx",
          "type": "registry:component",
          "target": "components/remold/tag-input.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/form-kit.css",
          "type": "registry:file",
          "target": "components/remold/form-kit.css"
        },
        {
          "path": "components/remold/tag-input.css",
          "type": "registry:file",
          "target": "components/remold/tag-input.css"
        }
      ]
    },
    {
      "name": "phone-input",
      "type": "registry:block",
      "title": "Phone input",
      "description": "A phone number field that formats as you type, regrouping the same digits with sliding separators when you change country. Built on Base UI's Field and Select.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/phone-input.tsx",
          "type": "registry:component",
          "target": "components/remold/phone-input.tsx"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/form-kit.css",
          "type": "registry:file",
          "target": "components/remold/form-kit.css"
        },
        {
          "path": "components/remold/phone-input.css",
          "type": "registry:file",
          "target": "components/remold/phone-input.css"
        }
      ]
    },
    {
      "name": "amount-input",
      "type": "registry:block",
      "title": "Amount input",
      "description": "An amount field whose digits rise into place and separators slide, with a shake for refused input and a helper that morphs to say how far over your balance you are.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/amount-input.tsx",
          "type": "registry:component",
          "target": "components/remold/amount-input.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/amount-input.css",
          "type": "registry:file",
          "target": "components/remold/amount-input.css"
        }
      ]
    },
    {
      "name": "course-outline",
      "type": "registry:block",
      "title": "Course outline",
      "description": "Modules and lessons joined by lines that stay attached as modules open and lessons are ticked off.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/course-outline.tsx",
          "type": "registry:component",
          "target": "components/remold/course-outline.tsx"
        },
        {
          "path": "components/remold/course-outline.css",
          "type": "registry:file",
          "target": "components/remold/course-outline.css"
        }
      ]
    },
    {
      "name": "comment-thread",
      "type": "registry:block",
      "title": "Comment thread",
      "description": "A post and the conversation under it, with live typing, lit reply paths and replies that fold away.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/comment-thread.tsx",
          "type": "registry:component",
          "target": "components/remold/comment-thread.tsx"
        },
        {
          "path": "components/remold/demo-icons.tsx",
          "type": "registry:component",
          "target": "components/remold/demo-icons.tsx"
        },
        {
          "path": "components/remold/comment-thread.model.ts",
          "type": "registry:component",
          "target": "components/remold/comment-thread.model.ts"
        },
        {
          "path": "components/remold/comment-thread.css",
          "type": "registry:file",
          "target": "components/remold/comment-thread.css"
        }
      ]
    },
    {
      "name": "table-booking",
      "type": "registry:block",
      "title": "Table booking",
      "description": "A restaurant booking that fell through offers two other times; the one you pick grows into the updated booking, whose party size opens a compact picker. Built on Base UI's Button, Toggle Group and Tooltip.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/table-booking.tsx",
          "type": "registry:component",
          "target": "components/remold/table-booking.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/use-script.ts",
          "type": "registry:component",
          "target": "components/remold/use-script.ts"
        },
        {
          "path": "components/remold/table-booking.css",
          "type": "registry:file",
          "target": "components/remold/table-booking.css"
        }
      ]
    },
    {
      "name": "otp-input",
      "type": "registry:block",
      "title": "One-time code",
      "description": "A sign-in card asking for an emailed code: the six cells fold into a Verifying pill, which turns green as its spinner becomes a check and the word becomes Verified.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/otp-input.tsx",
          "type": "registry:component",
          "target": "components/remold/otp-input.tsx"
        },
        {
          "path": "components/remold/code-field.tsx",
          "type": "registry:component",
          "target": "components/remold/code-field.tsx"
        },
        {
          "path": "components/remold/otp-input.css",
          "type": "registry:file",
          "target": "components/remold/otp-input.css"
        }
      ]
    },
    {
      "name": "morphing-dialog",
      "type": "registry:block",
      "title": "Morphing dialog",
      "description": "A New trip button that grows into its dialog, and a dialog that shrinks into the trip it created. Built on Base UI's Dialog, Field and Toggle Group.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/morphing-dialog.tsx",
          "type": "registry:component",
          "target": "components/remold/morphing-dialog.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/morphing-dialog.css",
          "type": "registry:file",
          "target": "components/remold/morphing-dialog.css"
        }
      ]
    },
    {
      "name": "podcast-player",
      "type": "registry:block",
      "title": "Podcast",
      "description": "A mini now-playing bar that opens into the full player: the artwork grows from a thumbnail into the cover and the title, show and play button settle into place, matched with no ids.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/podcast-player.tsx",
          "type": "registry:component",
          "target": "components/remold/podcast-player.tsx"
        },
        {
          "path": "components/remold/podcast-player.model.ts",
          "type": "registry:component",
          "target": "components/remold/podcast-player.model.ts"
        }
      ]
    },
    {
      "name": "share-link",
      "type": "registry:block",
      "title": "Share link",
      "description": "A Share pill with the faces of who can already open the file: it opens into the link, who it lets in and a Copy button, and copying folds it back. Built on Base UI's Button, Toggle Group and Tooltip.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/share-link.tsx",
          "type": "registry:component",
          "target": "components/remold/share-link.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/use-script.ts",
          "type": "registry:component",
          "target": "components/remold/use-script.ts"
        }
      ]
    },
    {
      "name": "expanding-search",
      "type": "registry:block",
      "title": "Expanding search",
      "description": "A search that takes over its screen: the greeting folds away, the field rises with Cancel beside it, and the shop gives way to results. Built on Base UI's Autocomplete.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/expanding-search.tsx",
          "type": "registry:component",
          "target": "components/remold/expanding-search.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/expanding-search.css",
          "type": "registry:file",
          "target": "components/remold/expanding-search.css"
        }
      ]
    },
    {
      "name": "booking-steps",
      "type": "registry:block",
      "title": "Booking steps",
      "description": "Booking a hospital appointment where each chosen option fills in and flies up into the summary as a chip, and flies back down to change. Built on Base UI's Radio Group.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/booking-steps.tsx",
          "type": "registry:component",
          "target": "components/remold/booking-steps.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/booking-steps.css",
          "type": "registry:file",
          "target": "components/remold/booking-steps.css"
        }
      ]
    },
    {
      "name": "feedback-prompt",
      "type": "registry:block",
      "title": "Feedback prompt",
      "description": "A \"Was this helpful?\" pill that grows into a small card with quick reasons and a comment, then draws back into a thank-you. Built on Base UI's Button, Toggle Group and Field.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/feedback-prompt.tsx",
          "type": "registry:component",
          "target": "components/remold/feedback-prompt.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/feedback-prompt.css",
          "type": "registry:file",
          "target": "components/remold/feedback-prompt.css"
        }
      ]
    },
    {
      "name": "product-tour",
      "type": "registry:block",
      "title": "Product tour",
      "description": "A product tour where the spotlight springs from one control to the next, a line ties each tip to its target, and the tip grows out of the help button.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/product-tour.tsx",
          "type": "registry:component",
          "target": "components/remold/product-tour.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "command-palette",
      "type": "registry:block",
      "title": "Command palette",
      "description": "A command palette that grows out of its search pill, keeps results in place as you type, and turns a scope into a chip in the field.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/command-palette.tsx",
          "type": "registry:component",
          "target": "components/remold/command-palette.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "two-factor",
      "type": "registry:block",
      "title": "Two-factor setup",
      "description": "A setting that opens a QR code and code field in place, moving the rows below, and folds to one line once on.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/two-factor.tsx",
          "type": "registry:component",
          "target": "components/remold/two-factor.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/code-field.tsx",
          "type": "registry:component",
          "target": "components/remold/code-field.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "invite-team",
      "type": "registry:block",
      "title": "Invite teammates",
      "description": "A team's members panel: an email becomes a chip, a pending invite, then a member in their place by name.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/invite-team.tsx",
          "type": "registry:component",
          "target": "components/remold/invite-team.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/invite-team.css",
          "type": "registry:file",
          "target": "components/remold/invite-team.css"
        }
      ]
    },
    {
      "name": "signature",
      "type": "registry:block",
      "title": "Adopt your signature",
      "description": "A signature pad where drawn ink flows into your name set in a script and back: strokes become ink outlines and morph into real glyph outlines.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/signature.tsx",
          "type": "registry:component",
          "target": "components/remold/signature.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/signature-glyphs.ts",
          "type": "registry:component",
          "target": "components/remold/signature-glyphs.ts"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/signature.css",
          "type": "registry:file",
          "target": "components/remold/signature.css"
        }
      ]
    },
    {
      "name": "project-setup",
      "type": "registry:block",
      "title": "Project setup",
      "description": "A setup checklist beside an isometric picture of the project: each finished step lowers its piece into place, and the lines between pieces appear once both ends exist.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/canvas",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/project-setup.tsx",
          "type": "registry:component",
          "target": "components/remold/project-setup.tsx"
        },
        {
          "path": "components/remold/demo-glyphs.ts",
          "type": "registry:component",
          "target": "components/remold/demo-glyphs.ts"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "task-list",
      "type": "registry:block",
      "title": "Task list",
      "description": "Issues grouped by status, with Done folded: a completed issue's ID travels into the folded row, and opening Done spreads them back out into rows.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/task-list.tsx",
          "type": "registry:component",
          "target": "components/remold/task-list.tsx"
        },
        {
          "path": "components/remold/demo-icons.tsx",
          "type": "registry:component",
          "target": "components/remold/demo-icons.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "logo-morph",
      "type": "registry:block",
      "title": "Logo morph",
      "description": "Text whose glyph outlines flow into the next word or mark: product names by default, or any SVG path data you pass in.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/core",
        "@remold-ui/dom",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/logo-morph.tsx",
          "type": "registry:component",
          "target": "components/remold/logo-morph.tsx"
        },
        {
          "path": "components/remold/glyphs-data.ts",
          "type": "registry:component",
          "target": "components/remold/glyphs-data.ts"
        },
        {
          "path": "components/remold/logo-morph-marks.ts",
          "type": "registry:component",
          "target": "components/remold/logo-morph-marks.ts"
        }
      ]
    },
    {
      "name": "voice-orb",
      "type": "registry:block",
      "title": "Voice orb",
      "description": "A soft cloud-filled voice orb that breathes, listens, thinks and speaks, with a live translation demo whose translated line morphs as it revises itself.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/canvas",
        "@remold-ui/react",
        "react-speech-recognition"
      ],
      "files": [
        {
          "path": "components/remold/voice-orb.tsx",
          "type": "registry:component",
          "target": "components/remold/voice-orb.tsx"
        },
        {
          "path": "components/remold/voice-orb.css",
          "type": "registry:file",
          "target": "components/remold/voice-orb.css"
        }
      ]
    },
    {
      "name": "editor-mentions",
      "type": "registry:block",
      "title": "Mentions",
      "description": "Mentioning people in a comment: type @ and a picker opens at the caret, and the person you pick flies out of the list into the sentence as a chip.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/editor-mentions.tsx",
          "type": "registry:component",
          "target": "components/remold/editor-mentions.tsx"
        },
        {
          "path": "components/remold/editor-mentions.model.ts",
          "type": "registry:component",
          "target": "components/remold/editor-mentions.model.ts"
        },
        {
          "path": "components/remold/editor-mentions.css",
          "type": "registry:file",
          "target": "components/remold/editor-mentions.css"
        }
      ]
    },
    {
      "name": "wallet-stack",
      "type": "registry:block",
      "title": "Wallet",
      "description": "A leather card holder whose cards slide up and fan out; choose one and it rises to the top while its latest transactions fill in.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/wallet-stack.tsx",
          "type": "registry:component",
          "target": "components/remold/wallet-stack.tsx"
        },
        {
          "path": "components/remold/merchant-logos.ts",
          "type": "registry:component",
          "target": "components/remold/merchant-logos.ts"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/wallet-stack.css",
          "type": "registry:file",
          "target": "components/remold/wallet-stack.css"
        }
      ]
    },
    {
      "name": "revenue-card",
      "type": "registry:block",
      "title": "Revenue",
      "description": "A dashboard revenue card whose chart line reshapes between ranges while the MRR and change badge roll.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/core",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/revenue-card.tsx",
          "type": "registry:component",
          "target": "components/remold/revenue-card.tsx"
        },
        {
          "path": "components/remold/use-morph-path.ts",
          "type": "registry:component",
          "target": "components/remold/use-morph-path.ts"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/revenue-card.css",
          "type": "registry:file",
          "target": "components/remold/revenue-card.css"
        }
      ]
    },
    {
      "name": "streak",
      "type": "registry:block",
      "title": "Streak",
      "description": "A daily streak celebration: the ember grows into a flame, sparks burst, the count rolls up and today's dot fills in.",
      "dependencies": [
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/streak.tsx",
          "type": "registry:component",
          "target": "components/remold/streak.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "send-message",
      "type": "registry:block",
      "title": "Send a message",
      "description": "A chat composer whose mic becomes a send arrow; the message rises into the thread and the read receipt moves down to it.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/send-message.tsx",
          "type": "registry:component",
          "target": "components/remold/send-message.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        }
      ]
    },
    {
      "name": "kitchen-ticket",
      "type": "registry:block",
      "title": "Kitchen ticket",
      "description": "A counter ticket whose ring fills as the order cooks, with a check and a cross that reshape into each other.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/kitchen-ticket.tsx",
          "type": "registry:component",
          "target": "components/remold/kitchen-ticket.tsx"
        },
        {
          "path": "components/remold/picker.tsx",
          "type": "registry:component",
          "target": "components/remold/picker.tsx"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/picker.css",
          "type": "registry:file",
          "target": "components/remold/picker.css"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/kitchen-ticket.css",
          "type": "registry:file",
          "target": "components/remold/kitchen-ticket.css"
        }
      ]
    },
    {
      "name": "order-tracker",
      "type": "registry:block",
      "title": "Order tracker",
      "description": "A food order told like a short film: each stage plays live, then its illustration reshapes into the next, from the pot to the bag, the scooter and your front door.",
      "dependencies": [
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/order-tracker.tsx",
          "type": "registry:component",
          "target": "components/remold/order-tracker.tsx"
        },
        {
          "path": "components/remold/illustrated-story.tsx",
          "type": "registry:component",
          "target": "components/remold/illustrated-story.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/illustrated-story.css",
          "type": "registry:file",
          "target": "components/remold/illustrated-story.css"
        },
        {
          "path": "components/remold/order-tracker.css",
          "type": "registry:file",
          "target": "components/remold/order-tracker.css"
        }
      ]
    },
    {
      "name": "voice-assistant",
      "type": "registry:block",
      "title": "Voice assistant",
      "description": "A voice assistant's orb of 3D dots that breathes while idle, ripples with your voice as it listens, swirls into a ring as it thinks, and pulses as it speaks.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/core",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/voice-assistant.tsx",
          "type": "registry:component",
          "target": "components/remold/voice-assistant.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/voice-assistant.css",
          "type": "registry:file",
          "target": "components/remold/voice-assistant.css"
        }
      ]
    },
    {
      "name": "particle-shapes",
      "type": "registry:block",
      "title": "Particle shapes",
      "description": "Thousands of dots turning in 3D that flow from a spiral galaxy into a double helix, then the Lorenz attractor's two wings, a honeybee, a butterfly and the Remold mark, drawn with Remold's particles camera.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/core",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/particle-shapes.tsx",
          "type": "registry:component",
          "target": "components/remold/particle-shapes.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/particle-shapes.css",
          "type": "registry:file",
          "target": "components/remold/particle-shapes.css"
        }
      ]
    },
    {
      "name": "payment-status",
      "type": "registry:block",
      "title": "Payment status",
      "description": "A payment's status as one drawing: the card becomes a lock while the bank confirms, then a receipt when it's paid, or the card again with a warning when it's declined.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/payment-status.tsx",
          "type": "registry:component",
          "target": "components/remold/payment-status.tsx"
        },
        {
          "path": "components/remold/illustrated-story.tsx",
          "type": "registry:component",
          "target": "components/remold/illustrated-story.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/illustrated-story.css",
          "type": "registry:file",
          "target": "components/remold/illustrated-story.css"
        },
        {
          "path": "components/remold/payment-status.css",
          "type": "registry:file",
          "target": "components/remold/payment-status.css"
        }
      ]
    },
    {
      "name": "send-money",
      "type": "registry:block",
      "title": "Send money",
      "description": "A keypad for sending money: digits roll in, an amount over your balance is refused with a shake, and Send becomes a spinner then a check.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/send-money.tsx",
          "type": "registry:component",
          "target": "components/remold/send-money.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/send-money.css",
          "type": "registry:file",
          "target": "components/remold/send-money.css"
        }
      ]
    },
    {
      "name": "currency-converter",
      "type": "registry:block",
      "title": "Currency converter",
      "description": "A converter at today's real exchange rates that springs into a searchable currency list, and whose Send button says what it did.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/currency-converter.tsx",
          "type": "registry:component",
          "target": "components/remold/currency-converter.tsx"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/use-measured-size.ts",
          "type": "registry:component",
          "target": "components/remold/use-measured-size.ts"
        },
        {
          "path": "components/remold/use-script.ts",
          "type": "registry:component",
          "target": "components/remold/use-script.ts"
        },
        {
          "path": "components/remold/currency-converter.css",
          "type": "registry:file",
          "target": "components/remold/currency-converter.css"
        }
      ]
    },
    {
      "name": "donation-goal",
      "type": "registry:block",
      "title": "Donation goal",
      "description": "A fundraising goal told in dots: every donation flies in as particles and fills the picture of what it pays for, until the water gathers into a heart.",
      "dependencies": [
        "@remold-ui/core",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/donation-goal.tsx",
          "type": "registry:component",
          "target": "components/remold/donation-goal.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/donation-goal.css",
          "type": "registry:file",
          "target": "components/remold/donation-goal.css"
        }
      ]
    },
    {
      "name": "focus-timer",
      "type": "registry:block",
      "title": "Focus timer",
      "description": "A Pomodoro focus timer drawn as a particle hourglass: the sand really falls as the session runs, freezes on pause, and the glass flips into the break.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/core",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/focus-timer.tsx",
          "type": "registry:component",
          "target": "components/remold/focus-timer.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/focus-timer.css",
          "type": "registry:file",
          "target": "components/remold/focus-timer.css"
        }
      ]
    },
    {
      "name": "unit-chart",
      "type": "registry:block",
      "title": "Unit chart",
      "description": "A chart where every dot is 25 customers: regroup by plan, region or channel and the same dots walk to their new column.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/unit-chart.tsx",
          "type": "registry:component",
          "target": "components/remold/unit-chart.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/unit-chart.css",
          "type": "registry:file",
          "target": "components/remold/unit-chart.css"
        }
      ]
    },
    {
      "name": "inbox-triage",
      "type": "registry:block",
      "title": "Inbox triage",
      "description": "An inbox where archived and deleted mail breaks into dust and pours into its tab, with multi-select, swipe, hover actions and an undo toast.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/inbox-triage.tsx",
          "type": "registry:component",
          "target": "components/remold/inbox-triage.tsx"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/inbox-triage.css",
          "type": "registry:file",
          "target": "components/remold/inbox-triage.css"
        }
      ]
    },
    {
      "name": "api-keys",
      "type": "registry:block",
      "title": "API keys",
      "description": "Creating an API key in one springing card: the secret decodes once, then travels into the newest row and scrambles into its masked form.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/api-keys.tsx",
          "type": "registry:component",
          "target": "components/remold/api-keys.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/use-scramble.ts",
          "type": "registry:component",
          "target": "components/remold/use-scramble.ts"
        },
        {
          "path": "components/remold/api-keys.css",
          "type": "registry:file",
          "target": "components/remold/api-keys.css"
        }
      ]
    },
    {
      "name": "seat-calculator",
      "type": "registry:block",
      "title": "Seat calculator",
      "description": "Pricing by team size: faces join your team, the price rolls, and the plan steps up at each tier.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/seat-calculator.tsx",
          "type": "registry:component",
          "target": "components/remold/seat-calculator.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/seat-calculator.css",
          "type": "registry:file",
          "target": "components/remold/seat-calculator.css"
        }
      ]
    },
    {
      "name": "usage-meter",
      "type": "registry:block",
      "title": "Usage meter",
      "description": "A plan's usage bars that fill, warn and go over through the month, and spring back down on upgrade.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/usage-meter.tsx",
          "type": "registry:component",
          "target": "components/remold/usage-meter.tsx"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/usage-meter.css",
          "type": "registry:file",
          "target": "components/remold/usage-meter.css"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        }
      ]
    },
    {
      "name": "onboarding-checklist",
      "type": "registry:block",
      "title": "Onboarding checklist",
      "description": "A getting-started checklist that opens each next step in place and folds into an \"All set\" pill when you're done.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/onboarding-checklist.tsx",
          "type": "registry:component",
          "target": "components/remold/onboarding-checklist.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/onboarding-checklist.css",
          "type": "registry:file",
          "target": "components/remold/onboarding-checklist.css"
        }
      ]
    },
    {
      "name": "bulk-select",
      "type": "registry:block",
      "title": "Bulk selection",
      "description": "Rows you select by range, joined into bands, with an action bar whose count rolls and rows that fold away on delete.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "@tanstack/react-table",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/bulk-select.tsx",
          "type": "registry:component",
          "target": "components/remold/bulk-select.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/bulk-select.css",
          "type": "registry:file",
          "target": "components/remold/bulk-select.css"
        }
      ]
    },
    {
      "name": "filter-bar",
      "type": "registry:block",
      "title": "Filter bar",
      "description": "Filtering transactions with segmented tokens, while the list, the count and the total spent move to match.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/filter-bar.tsx",
          "type": "registry:component",
          "target": "components/remold/filter-bar.tsx"
        },
        {
          "path": "components/remold/merchant-logos.ts",
          "type": "registry:component",
          "target": "components/remold/merchant-logos.ts"
        },
        {
          "path": "components/remold/odometer.tsx",
          "type": "registry:component",
          "target": "components/remold/odometer.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        },
        {
          "path": "components/remold/filter-bar.css",
          "type": "registry:file",
          "target": "components/remold/filter-bar.css"
        }
      ]
    },
    {
      "name": "label-picker",
      "type": "registry:block",
      "title": "Label picker",
      "description": "A searchable label picker that drops chips onto an issue and offers to create labels that don't exist yet.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/remold/label-picker.tsx",
          "type": "registry:component",
          "target": "components/remold/label-picker.tsx"
        },
        {
          "path": "components/remold/use-controllable-state.ts",
          "type": "registry:component",
          "target": "components/remold/use-controllable-state.ts"
        },
        {
          "path": "components/remold/use-scene.ts",
          "type": "registry:component",
          "target": "components/remold/use-scene.ts"
        },
        {
          "path": "components/remold/label-picker.css",
          "type": "registry:file",
          "target": "components/remold/label-picker.css"
        },
        {
          "path": "components/remold/portal-container.tsx",
          "type": "registry:component",
          "target": "components/remold/portal-container.tsx"
        }
      ]
    },
    {
      "name": "files",
      "type": "registry:block",
      "title": "Sortable list",
      "description": "A file list that sorts and filters with every row moving to its place.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/files.tsx",
          "type": "registry:component",
          "target": "components/remold/files.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        }
      ]
    },
    {
      "name": "morph",
      "type": "registry:block",
      "title": "Grid and list",
      "description": "People as cards or rows: different markup, matched without keys.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/morph.tsx",
          "type": "registry:component",
          "target": "components/remold/morph.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        }
      ]
    },
    {
      "name": "library-morph",
      "type": "registry:block",
      "title": "Base UI tabs",
      "description": "A pricing card built from Base UI tabs, animated through a ref with useRemoldMorph.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/library-morph.tsx",
          "type": "registry:component",
          "target": "components/remold/library-morph.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/library-morph.css",
          "type": "registry:file",
          "target": "components/remold/library-morph.css"
        }
      ]
    },
    {
      "name": "text",
      "type": "registry:block",
      "title": "Text morph",
      "description": "A status label and a price that change only the letters that differ.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/text.tsx",
          "type": "registry:component",
          "target": "components/remold/text.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        }
      ]
    },
    {
      "name": "icons",
      "type": "registry:block",
      "title": "Icon toggles",
      "description": "Toggle buttons whose icons morph between states.",
      "dependencies": [
        "@base-ui/react",
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/icons.tsx",
          "type": "registry:component",
          "target": "components/remold/icons.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        }
      ]
    },
    {
      "name": "feedback-face",
      "type": "registry:block",
      "title": "Feedback face",
      "description": "A rating whose face morphs part by part: brows, eyes, mouth and cheeks.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/feedback-face.tsx",
          "type": "registry:component",
          "target": "components/remold/feedback-face.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/feedback-face.css",
          "type": "registry:file",
          "target": "components/remold/feedback-face.css"
        }
      ]
    },
    {
      "name": "scene",
      "type": "registry:block",
      "title": "Scene",
      "description": "An isometric canvas scene with layouts and focus.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/scene.tsx",
          "type": "registry:component",
          "target": "components/remold/scene.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        }
      ]
    },
    {
      "name": "story",
      "type": "registry:block",
      "title": "Story",
      "description": "A scene that steps through a story with Back and Next.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/story.tsx",
          "type": "registry:component",
          "target": "components/remold/story.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/scene.tsx",
          "type": "registry:component",
          "target": "components/remold/scene.tsx"
        }
      ]
    },
    {
      "name": "particles",
      "type": "registry:block",
      "title": "Particles",
      "description": "Text and shapes as dots that flow from one to the next.",
      "dependencies": [
        "@base-ui/react",
        "@remold-ui/core",
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/particles.tsx",
          "type": "registry:component",
          "target": "components/remold/particles.tsx"
        },
        {
          "path": "components/remold/frame.tsx",
          "type": "registry:component",
          "target": "components/remold/frame.tsx"
        },
        {
          "path": "components/remold/frame.css",
          "type": "registry:file",
          "target": "components/remold/frame.css"
        },
        {
          "path": "components/remold/particles.css",
          "type": "registry:file",
          "target": "components/remold/particles.css"
        }
      ]
    },
    {
      "name": "match-lines",
      "type": "registry:block",
      "title": "Match lines",
      "description": "Draw what Remold paired: a line from each element to its partner.",
      "dependencies": [
        "@remold-ui/react"
      ],
      "files": [
        {
          "path": "components/remold/match-lines.tsx",
          "type": "registry:component",
          "target": "components/remold/match-lines.tsx"
        },
        {
          "path": "components/remold/match-lines.css",
          "type": "registry:file",
          "target": "components/remold/match-lines.css"
        }
      ]
    }
  ]
}
