{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "watermelon",
  "homepage": "https://ui.watermelon.sh",
  "items": [
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-disclosure-menu",
      "type": "registry:component",
      "title": "Inline Disclosure Menu",
      "description": "An animated inline action menu with contextul Options and a two-step delete confirmation flow.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-disclosure-menu.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport * as React from 'react';\nimport { MoreVertical } from 'lucide-react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  Copy01Icon,\n  Delete02Icon,\n  FavouriteIcon,\n  PencilEdit02Icon,\n  Share01Icon,\n} from '@hugeicons/core-free-icons';\nimport {\n  AnimatePresence,\n  LayoutGroup,\n  motion,\n  type Transition,\n  type Variants,\n} from 'motion/react';\n\nexport interface MenuItemProps {\n  icon: React.ReactNode;\n  label: string;\n  onClick?: () => void;\n  className?: string;\n}\n\nexport interface InlineDisclosureMenuProps {\n  menuItems?: MenuItemProps[];\n  showDelete?: boolean;\n  onDelete?: () => void;\n}\n\nconst spring: Transition = {\n  type: 'spring',\n  bounce: 0,\n  duration: 0.4,\n};\n\nconst menuVariants: Variants = {\n  hidden: { opacity: 0, scale: 0.94 },\n  visible: { opacity: 1, scale: 1, transition: spring },\n};\n\nconst deleteVariants: Variants = {\n  initial: (confirm: boolean) => ({\n    y: confirm ? 60 : -60,\n  }),\n  animate: {\n    y: 0,\n    transition: spring,\n  },\n  exit: (confirm: boolean) => ({\n    y: confirm ? -60 : 60,\n    transition: spring,\n  }),\n};\n\nconst confirmVariants: Variants = {\n  initial: (confirm: boolean) => ({\n    y: confirm ? 60 : -60,\n  }),\n  animate: {\n    y: 0,\n    transition: spring,\n  },\n  exit: (confirm: boolean) => ({\n    y: confirm ? -60 : 60,\n    transition: spring,\n  }),\n};\n\nconst MenuItem: React.FC<MenuItemProps> = ({\n  icon,\n  label,\n  onClick,\n  className = '',\n}) => (\n  <button\n    onClick={onClick}\n    className={`flex w-full items-center gap-3 rounded-xl px-3 py-2 text-left text-[#363538] transition-colors hover:bg-[#F6F5FA] sm:gap-4 dark:text-zinc-200 dark:hover:bg-zinc-800 ${className}`}\n  >\n    <span className=\"text-gray-500 dark:text-zinc-400\">{icon}</span>\n    <span className=\"text-base font-medium tracking-tight sm:text-[18px]\">\n      {label}\n    </span>\n  </button>\n);\n\nexport function InlineDisclosureMenu({\n  menuItems = [\n    {\n      icon: <HugeiconsIcon icon={PencilEdit02Icon} size={24} />,\n      label: 'Edit',\n    },\n    { icon: <HugeiconsIcon icon={Copy01Icon} size={24} />, label: 'Duplicate' },\n    {\n      icon: <HugeiconsIcon icon={FavouriteIcon} size={24} />,\n      label: 'Favourite',\n    },\n    { icon: <HugeiconsIcon icon={Share01Icon} size={24} />, label: 'Share' },\n  ],\n  showDelete = true,\n  onDelete,\n}: InlineDisclosureMenuProps) {\n  const [open, setOpen] = React.useState(false);\n  const [confirm, setConfirm] = React.useState(false);\n  const ref = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (ref.current && !ref.current.contains(e.target as Node)) {\n        setOpen(false);\n        setConfirm(false);\n      }\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  return (\n    <div className=\"relative flex w-full justify-center\">\n      <div ref={ref} className=\"relative\">\n        <motion.button\n          whileTap={{ scale: 0.95 }}\n          onClick={() => setOpen((v) => !v)}\n          className=\"flex h-12 w-12 items-center justify-center rounded-2xl border-2 border-[#EEEEF2] bg-white text-gray-500 sm:h-14 sm:w-14 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-400\"\n        >\n          <MoreVertical className=\"h-5 w-5 sm:h-6 sm:w-6\" />\n        </motion.button>\n\n        <AnimatePresence>\n          {open && (\n            <motion.div\n              variants={menuVariants}\n              initial=\"hidden\"\n              animate=\"visible\"\n              exit=\"hidden\"\n              className=\"absolute top-1/2 left-1/2 z-50 w-[260px] -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-2xl border-2 border-[#EEEEF2] bg-white shadow-xl sm:w-[304px] dark:border-zinc-800 dark:bg-zinc-900\"\n            >\n              <div className=\"border-b-2 border-[#EEEEF2] bg-[#FAFAFC] px-4 py-2 sm:px-6 dark:border-zinc-800 dark:bg-zinc-800/50\">\n                <span className=\"text-sm font-medium text-[#828287] sm:text-[16px] dark:text-zinc-500\">\n                  More Options\n                </span>\n              </div>\n\n              <LayoutGroup>\n                <div className=\"flex flex-col gap-2 px-2 py-2\">\n                  {menuItems.map((item, i) => (\n                    <MenuItem key={i} {...item} />\n                  ))}\n                </div>\n\n                {showDelete && (\n                  <div className=\"relative h-[56px] overflow-hidden border-t-2 border-[#EEEEF2] dark:border-zinc-800\">\n                    <AnimatePresence\n                      custom={confirm}\n                      mode=\"popLayout\"\n                      initial={false}\n                    >\n                      {!confirm ? (\n                        <motion.div\n                          key=\"delete\"\n                          custom={confirm}\n                          variants={deleteVariants}\n                          initial=\"initial\"\n                          animate=\"animate\"\n                          exit=\"exit\"\n                          className=\"absolute inset-0 flex items-center px-2\"\n                        >\n                          <MenuItem\n                            icon={\n                              <HugeiconsIcon\n                                icon={Delete02Icon}\n                                size={24}\n                                color=\"#e94447\"\n                              />\n                            }\n                            label=\"Delete\"\n                            className=\"cursor-pointer text-[#e94447]\"\n                            onClick={() => setConfirm(true)}\n                          />\n                        </motion.div>\n                      ) : (\n                        <motion.div\n                          key=\"confirm\"\n                          custom={confirm}\n                          variants={confirmVariants}\n                          initial=\"initial\"\n                          animate=\"animate\"\n                          exit=\"exit\"\n                          className=\"absolute inset-0 flex items-center gap-2 px-2\"\n                        >\n                          <button\n                            onClick={onDelete}\n                            className=\"h-10 flex-1 cursor-pointer rounded-xl bg-[#F24140] font-semibold text-white\"\n                          >\n                            Yes, Delete\n                          </button>\n\n                          <button\n                            onClick={() => setConfirm(false)}\n                            className=\"h-10 flex-1 cursor-pointer rounded-xl border border-gray-200 text-gray-600 dark:border-zinc-700 dark:text-zinc-300\"\n                          >\n                            Cancel\n                          </button>\n                        </motion.div>\n                      )}\n                    </AnimatePresence>\n                  </div>\n                )}\n              </LayoutGroup>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-disclosure-menu-base",
      "type": "registry:component",
      "title": "Inline Disclosure Menu (base)",
      "description": "Theme-ready base variant of An animated inline action menu with contextul Options and a two-step delete confirmation flow..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-disclosure-menu.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport * as React from 'react';\nimport { MoreVertical } from 'lucide-react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  Copy01Icon,\n  Delete02Icon,\n  FavouriteIcon,\n  PencilEdit02Icon,\n  Share01Icon,\n} from '@hugeicons/core-free-icons';\nimport {\n  AnimatePresence,\n  LayoutGroup,\n  motion,\n  type Transition,\n  type Variants,\n} from 'motion/react';\n\nexport interface MenuItemProps {\n  icon: React.ReactNode;\n  label: string;\n  onClick?: () => void;\n  className?: string;\n}\n\nexport interface InlineDisclosureMenuProps {\n  menuItems?: MenuItemProps[];\n  showDelete?: boolean;\n  onDelete?: () => void;\n}\n\nconst spring: Transition = {\n  type: 'spring',\n  bounce: 0,\n  duration: 0.4,\n};\n\nconst menuVariants: Variants = {\n  hidden: { opacity: 0, scale: 0.94 },\n  visible: { opacity: 1, scale: 1, transition: spring },\n};\n\nconst deleteVariants: Variants = {\n  initial: (confirm: boolean) => ({\n    y: confirm ? 60 : -60,\n  }),\n  animate: {\n    y: 0,\n    transition: spring,\n  },\n  exit: (confirm: boolean) => ({\n    y: confirm ? -60 : 60,\n    transition: spring,\n  }),\n};\n\nconst confirmVariants: Variants = {\n  initial: (confirm: boolean) => ({\n    y: confirm ? 60 : -60,\n  }),\n  animate: {\n    y: 0,\n    transition: spring,\n  },\n  exit: (confirm: boolean) => ({\n    y: confirm ? -60 : 60,\n    transition: spring,\n  }),\n};\n\nconst MenuItem: React.FC<MenuItemProps> = ({\n  icon,\n  label,\n  onClick,\n  className = '',\n}) => (\n  <button\n    onClick={onClick}\n    className={`text-foreground hover:bg-accent/20 flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left transition-colors sm:gap-4 ${className}`}\n  >\n    <span className=\"text-muted-foreground\">{icon}</span>\n    <span className=\"text-base font-medium tracking-tight sm:text-[18px]\">\n      {label}\n    </span>\n  </button>\n);\n\nexport function InlineDisclosureMenu({\n  menuItems = [\n    {\n      icon: <HugeiconsIcon icon={PencilEdit02Icon} size={24} />,\n      label: 'Edit',\n    },\n    { icon: <HugeiconsIcon icon={Copy01Icon} size={24} />, label: 'Duplicate' },\n    {\n      icon: <HugeiconsIcon icon={FavouriteIcon} size={24} />,\n      label: 'Favourite',\n    },\n    { icon: <HugeiconsIcon icon={Share01Icon} size={24} />, label: 'Share' },\n  ],\n  showDelete = true,\n  onDelete,\n}: InlineDisclosureMenuProps) {\n  const [open, setOpen] = React.useState(false);\n  const [confirm, setConfirm] = React.useState(false);\n  const ref = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (ref.current && !ref.current.contains(e.target as Node)) {\n        setOpen(false);\n        setConfirm(false);\n      }\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  return (\n    <div className=\"theme-injected relative flex h-[500px] w-full items-center justify-center \">\n      <div ref={ref} className=\"relative \">\n        <motion.button\n          whileTap={{ scale: 0.95 }}\n          onClick={() => setOpen((v) => !v)}\n          className=\"border-border bg-background text-muted-foreground flex h-12 w-12 items-center justify-center rounded-lg border-2 sm:h-14 sm:w-14\"\n        >\n          <MoreVertical className=\"h-5 w-5 sm:h-6 sm:w-6\" />\n        </motion.button>\n\n        <AnimatePresence>\n          {open && (\n            <motion.div\n              variants={menuVariants}\n              initial=\"hidden\"\n              animate=\"visible\"\n              exit=\"hidden\"\n              className=\"border-border bg-popover absolute top-1/2 left-1/2 z-50 w-[260px] -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border-2 shadow-xl sm:w-[304px]\"\n            >\n              <div className=\"border-border bg-muted/20 border-b-2 px-4 py-2 sm:px-6\">\n                <span className=\"text-muted-foreground text-sm font-medium sm:text-[16px]\">\n                  More Options\n                </span>\n              </div>\n\n              <LayoutGroup>\n                <div className=\"flex flex-col gap-2 px-2 py-2\">\n                  {menuItems.map((item, i) => (\n                    <MenuItem key={i} {...item} />\n                  ))}\n                </div>\n\n                {showDelete && (\n                  <div className=\"border-border relative h-[56px] overflow-hidden border-t-2\">\n                    <AnimatePresence\n                      custom={confirm}\n                      mode=\"popLayout\"\n                      initial={false}\n                    >\n                      {!confirm ? (\n                        <motion.div\n                          key=\"delete\"\n                          custom={confirm}\n                          variants={deleteVariants}\n                          initial=\"initial\"\n                          animate=\"animate\"\n                          exit=\"exit\"\n                          className=\"absolute inset-0 flex items-center px-2\"\n                        >\n                          <MenuItem\n                            icon={\n                              <HugeiconsIcon\n                                icon={Delete02Icon}\n                                size={24}\n                                className=\"text-destructive\"\n                              />\n                            }\n                            label=\"Delete\"\n                            className=\"text-destructive cursor-pointer\"\n                            onClick={() => setConfirm(true)}\n                          />\n                        </motion.div>\n                      ) : (\n                        <motion.div\n                          key=\"confirm\"\n                          custom={confirm}\n                          variants={confirmVariants}\n                          initial=\"initial\"\n                          animate=\"animate\"\n                          exit=\"exit\"\n                          className=\"absolute inset-0 flex items-center gap-2 px-2\"\n                        >\n                          <button\n                            onClick={onDelete}\n                            className=\"bg-destructive text-destructive-foreground h-10 flex-1 cursor-pointer rounded-lg font-semibold\"\n                          >\n                            Yes, Delete\n                          </button>\n\n                          <button\n                            onClick={() => setConfirm(false)}\n                            className=\"border-border text-popover-foreground h-10 flex-1 cursor-pointer rounded-lg border\"\n                          >\n                            Cancel\n                          </button>\n                        </motion.div>\n                      )}\n                    </AnimatePresence>\n                  </div>\n                )}\n              </LayoutGroup>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "aave-swap-component",
      "type": "registry:component",
      "title": "Aave Swap Component",
      "description": "Interactive cryptocurrency exchange interface with animated number inputs and value calculations.",
      "dependencies": [
        "@number-flow/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/aave-swap-component.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { ChevronDown, ArrowUpDown } from 'lucide-react';\nimport NumberFlow from '@number-flow/react';\n\nexport interface TokenConfig {\n  name: string;\n  symbol: string;\n  priceUSD: number;\n  max?: number;\n  logo: string;\n}\n\ninterface AaveSwapComponentProps {\n  from: TokenConfig;\n  to: TokenConfig;\n}\n\nconst MAX_LENGTH = 5;\n\nexport function AaveSwapComponent({ from, to }: AaveSwapComponentProps) {\n  const [inputVal, setInputVal] = useState('0');\n  const [isMax, setIsMax] = useState(false);\n\n  const numericInput = useMemo(() => {\n    const parsed = parseFloat(inputVal);\n    return isNaN(parsed) ? 0 : parsed;\n  }, [inputVal]);\n\n  const usdValue = useMemo(\n    () => numericInput * from.priceUSD,\n    [numericInput, from.priceUSD],\n  );\n\n  const outputValue = useMemo(() => {\n    if (numericInput === 0) return 0;\n    return numericInput * (from.priceUSD / to.priceUSD);\n  }, [numericInput, from.priceUSD, to.priceUSD]);\n\n  const isError = useMemo(\n    () => (from.max ? numericInput > from.max : false),\n    [from.max, numericInput],\n  );\n\n  const handleUseMax = useCallback(() => {\n    if (!from.max) return;\n    setIsMax(true);\n    setInputVal(from.max.toString());\n  }, [from.max]);\n\n  const handleClear = useCallback(() => {\n    setIsMax(false);\n    setInputVal('0');\n  }, []);\n\n  const handleInputChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      const val = e.target.value.replace(/[^0-9.]/g, '');\n      if (val.split('.').length > 2) return;\n\n      if (val.length > MAX_LENGTH) {\n        return;\n      }\n\n      if (val !== from.max?.toString()) setIsMax(false);\n\n      if (val === '') {\n        setInputVal('0');\n      } else if (\n        val.length > 1 &&\n        val.startsWith('0') &&\n        !val.startsWith('0.')\n      ) {\n        setInputVal(val.replace(/^0+/, ''));\n      } else {\n        setInputVal(val);\n      }\n    },\n    [from.max],\n  );\n\n  const characters = useMemo(() => inputVal.split(''), [inputVal]);\n\n  return (\n    <div className=\"flex h-full min-h-150 w-full items-center justify-center bg-transparent p-2 font-sans transition-colors duration-300 select-none sm:p-4\">\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          stiffness: 150,\n          damping: 19,\n          mass: 1.2,\n        }}\n      >\n        <motion.div className=\"w-[95vw] max-w-105 space-y-1\">\n          <motion.div\n            layout\n            className=\"rounded-[28px] border-[1.6px] border-neutral-200 bg-neutral-50 p-4 transition-colors sm:rounded-[32px] sm:p-6 dark:border-[#2b2b2b] dark:bg-[#0e0e0e]\"\n          >\n            <div className=\"mb-4 flex items-center justify-between gap-2\">\n              <div className=\"flex min-w-0 items-center gap-2 sm:gap-3\">\n                <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-[#6D7FF9] sm:h-10 sm:w-10\">\n                  <img\n                    src={from.logo}\n                    className=\"w-5 sm:w-6\"\n                    alt={from.symbol}\n                  />\n                </div>\n                <div className=\"min-w-0\">\n                  <div className=\"truncate text-base font-medium text-neutral-900 sm:text-lg dark:text-white\">\n                    {from.name}\n                  </div>\n                  {from.max && (\n                    <div className=\"truncate text-xs text-neutral-500 sm:text-sm dark:text-[#8e8e8e]\">\n                      <NumberFlow value={from.max} />\n                    </div>\n                  )}\n                </div>\n              </div>\n              <motion.div layout>\n                {from.max && (\n                  <button\n                    type=\"button\"\n                    onClick={handleUseMax}\n                    className={`shrink-0 rounded-full px-3 py-1.5 text-xs font-medium transition-all sm:px-4 sm:text-base ${isMax || isError\n                        ? 'bg-neutral-200 text-neutral-400 dark:bg-[#2b2b2b] dark:text-[#8e8e8e]'\n                        : 'bg-neutral-200 text-neutral-900 hover:bg-neutral-300 dark:bg-[#2b2b2b] dark:text-white dark:hover:bg-[#3b3b3b]'\n                      }`}\n                  >\n                    {isError || isMax ? 'Using Max' : 'Use Max'}\n                  </button>\n                )}\n              </motion.div>\n            </div>\n\n            <div className=\"border-t border-neutral-200 dark:border-[#2b2b2b]\" />\n\n            <div className=\"relative flex flex-col items-center overflow-hidden py-6 sm:py-8\">\n              <div className=\"relative h-20 w-full overflow-hidden\">\n                <input\n                  autoFocus\n                  inputMode=\"decimal\"\n                  value={inputVal === '0' && !isMax ? '' : inputVal}\n                  onChange={handleInputChange}\n                  placeholder=\"0\"\n                  className=\"absolute inset-0 z-20 w-full bg-transparent text-center text-4xl font-medium text-transparent caret-black outline-none sm:text-6xl dark:caret-white\"\n                />\n\n                <div className=\"pointer-events-none absolute inset-0 z-10 flex items-center justify-center text-4xl font-medium tabular-nums sm:text-6xl dark:text-white\">\n                  <AnimatePresence mode=\"popLayout\">\n                    {inputVal === '0' ? (\n                      <motion.span\n                        key=\"placeholder\"\n                        initial={{ opacity: 0, y: 40 }}\n                        animate={{ opacity: 1, y: 0 }}\n                        exit={{ opacity: 0, y: 40 }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 240,\n                          damping: 16,\n                          mass: 0.8,\n                        }}\n                      >\n                        0\n                      </motion.span>\n                    ) : (\n                      characters.map((char, i) => (\n                        <motion.span\n                          key={`${i}-${char}`}\n                          initial={{ opacity: 0, y: 40 }}\n                          animate={{ opacity: 1, y: 0 }}\n                          exit={{ opacity: 0, y: 40 }}\n                          transition={{\n                            type: 'spring',\n                            stiffness: 240,\n                            damping: 16,\n                            mass: 0.8,\n                          }}\n                          className=\"inline-block\"\n                        >\n                          {char}\n                        </motion.span>\n                      ))\n                    )}\n                  </AnimatePresence>\n                </div>\n              </div>\n\n              <div className=\"mt-1 h-6 sm:mt-2 sm:h-8\">\n                <AnimatePresence mode=\"popLayout\">\n                  {isError ? (\n                    <motion.div\n                      key=\"error\"\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{\n                        opacity: 1,\n                        scale: 1,\n                        rotate: [-2, 2, -1, 1, 0],\n                      }}\n                      exit={{ opacity: 0, scale: 0.8 }}\n                      transition={{\n                        opacity: { duration: 0.25 },\n                        duration: 0.25,\n                        delay: 0.15,\n                      }}\n                      className=\"text-sm font-medium text-red-500 sm:text-lg\"\n                    >\n                      Not Enough {from.symbol}\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      key=\"value\"\n                      initial={{ opacity: 0, y: 5 }}\n                      animate={{ opacity: 1, y: 0 }}\n                      exit={{ opacity: 0, y: 5 }}\n                      className=\"flex items-center gap-1 text-lg font-medium text-neutral-500 sm:text-base dark:text-neutral-500\"\n                    >\n                      <motion.span layout>≈</motion.span>\n                      <NumberFlow\n                        value={usdValue}\n                        format={{ style: 'currency', currency: 'USD' }}\n                        transformTiming={{\n                          duration: 750,\n                          easing:\n                            'linear(0 0%, 0.005927 1%, 0.022466 2%, 0.047872 3%, 0.080554 4%, 0.119068 5%, 0.162116 6%, 0.208536 7%, 0.2573 8%, 0.3075 9%, 0.358346 10%, 0.409157 11%, 0.45935 12%, 0.508438 13%, 0.556014 14%, 0.601751 15%, 0.645389 16%, 0.686733 17%, 0.72564 18%, 0.762019 19%, 0.795818 20%, 0.827026 21%, 0.855662 22%, 0.881772 23%, 0.905423 24%, 0.926704 25%, 0.945714 26%, 0.962568 27%, 0.977386 28%, 0.990295 29%, 1.001426 30%, 1.010911 31%, 1.018881 32%, 1.025465 33%, 1.030792 34%, 1.034982 35%, 1.038155 36%, 1.040423 37%, 1.041892 38%, 1.042662 39%, 1.042827 40%, 1.042473 41%, 1.04168 42%, 1.040522 43%, 1.039065 44%, 1.037371 45%, 1.035493 46%, 1.03348 47%, 1.031376 48%, 1.029217 49%, 1.027037 50%, 1.024864 51%, 1.022722 52%, 1.020631 53%, 1.018608 54%, 1.016667 55%, 1.014817 56%, 1.013067 57%, 1.011422 58%, 1.009887 59%, 1.008462 60%, 1.007148 61%, 1.005944 62%, 1.004847 63%, 1.003855 64%, 1.002964 65%, 1.002169 66%, 1.001466 67%, 1.000848 68%, 1.000311 69%, 0.999849 70%, 0.999457 71%, 0.999128 72%, 0.998858 73%, 0.99864 74%, 0.99847 75%, 0.998342 76%, 0.998253 77%, 0.998196 78%, 0.998169 79%, 0.998167 80%, 0.998186 81%, 0.998224 82%, 0.998276 83%, 0.998341 84%, 0.998415 85%, 0.998497 86%, 0.998584 87%, 0.998675 88%, 0.998768 89%, 0.998861 90%, 0.998954 91%, 0.999045 92%, 0.999134 93%, 0.99922 94%, 0.999303 95%, 0.999381 96%, 0.999455 97%, 0.999525 98%, 0.999589 99%, 0.99965 100%)',\n                        }}\n                        spinTiming={{ duration: 0 }}\n                        className=\"flex items-center gap-1\"\n                      />\n                      <ArrowUpDown size={14} className=\"\" />\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </div>\n          </motion.div>\n\n          <div className=\"relative z-10 -my-2 flex h-4 items-center justify-center\">\n            <div className=\"rounded-full border border-neutral-200 bg-white p-1.5 dark:border-[#2b2b2b] dark:bg-[#0c0c0c]\">\n              <ChevronDown size={18} className=\"text-neutral-400\" />\n            </div>\n          </div>\n\n          <div className=\"flex items-center justify-between gap-2 rounded-[28px] border-[1.6px] border-neutral-200 bg-neutral-50 p-4 sm:rounded-[32px] sm:p-6 dark:border-[#2b2b2b] dark:bg-[#0e0e0e]\">\n            <div className=\"flex min-w-0 items-center gap-2 sm:gap-3\">\n              <div className=\"h-9 w-9 shrink-0 overflow-hidden rounded-full border border-neutral-200 bg-white sm:h-10 sm:w-10 dark:border-[#2b2b2b]\">\n                <img\n                  src={to.logo}\n                  className=\"h-full w-full object-cover\"\n                  alt={to.symbol}\n                />\n              </div>\n              <div className=\"min-w-0\">\n                <div className=\"truncate text-base font-medium text-neutral-900 sm:text-lg dark:text-white\">\n                  {to.name}\n                </div>\n                <div className=\"truncate text-xs text-neutral-500 sm:text-sm dark:text-[#8e8e8e]\">\n                  Receive {to.symbol}\n                </div>\n              </div>\n            </div>\n\n            <div className=\"truncate text-right text-lg font-medium text-neutral-900 sm:text-2xl dark:text-white\">\n              <NumberFlow\n                value={outputValue}\n                format={{ maximumFractionDigits: 2 }}\n                spinTiming={{\n                  duration: 600,\n                  easing: 'ease-out',\n                }}\n              />\n            </div>\n          </div>\n\n          <div className=\"pt-2 sm:pt-4\">\n            <motion.button\n              whileTap={{ scale: 0.98 }}\n              onClick={handleClear}\n              className=\"w-full rounded-full border-[1.2px] border-neutral-200 bg-neutral-100 py-3 text-neutral-500 hover:bg-neutral-200 dark:border-[#2b2b2b]/70 dark:bg-[#1b1b1b] dark:text-[#9AADAD]\"\n            >\n              Clear\n            </motion.button>\n          </div>\n        </motion.div>\n      </MotionConfig>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "aave-swap-component-base",
      "type": "registry:component",
      "title": "Aave Swap Component (base)",
      "description": "Theme-ready base variant of Interactive cryptocurrency exchange interface with animated number inputs and value calculations..",
      "dependencies": [
        "@number-flow/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/aave-swap-component.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { ChevronDown, ArrowUpDown } from 'lucide-react';\nimport NumberFlow from '@number-flow/react';\n\nexport interface TokenConfig {\n  name: string;\n  symbol: string;\n  priceUSD: number;\n  max?: number;\n  logo: string;\n}\n\ninterface AaveSwapComponentProps {\n  from: TokenConfig;\n  to: TokenConfig;\n}\n\nconst MAX_LENGTH = 5;\n\nexport function AaveSwapComponent({ from, to }: AaveSwapComponentProps) {\n  const [inputVal, setInputVal] = useState('0');\n  const [isMax, setIsMax] = useState(false);\n\n  const numericInput = useMemo(() => {\n    const parsed = parseFloat(inputVal);\n    return isNaN(parsed) ? 0 : parsed;\n  }, [inputVal]);\n\n  const usdValue = useMemo(\n    () => numericInput * from.priceUSD,\n    [numericInput, from.priceUSD],\n  );\n\n  const outputValue = useMemo(() => {\n    if (numericInput === 0) return 0;\n    return numericInput * (from.priceUSD / to.priceUSD);\n  }, [numericInput, from.priceUSD, to.priceUSD]);\n\n  const isError = useMemo(\n    () => (from.max ? numericInput > from.max : false),\n    [from.max, numericInput],\n  );\n\n  const handleUseMax = useCallback(() => {\n    if (!from.max) return;\n    setIsMax(true);\n    setInputVal(from.max.toString());\n  }, [from.max]);\n\n  const handleClear = useCallback(() => {\n    setIsMax(false);\n    setInputVal('0');\n  }, []);\n\n  const handleInputChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      const val = e.target.value.replace(/[^0-9.]/g, '');\n      if (val.split('.').length > 2) return;\n\n      if (val.length > MAX_LENGTH) {\n        return;\n      }\n\n      if (val !== from.max?.toString()) setIsMax(false);\n\n      if (val === '') {\n        setInputVal('0');\n      } else if (\n        val.length > 1 &&\n        val.startsWith('0') &&\n        !val.startsWith('0.')\n      ) {\n        setInputVal(val.replace(/^0+/, ''));\n      } else {\n        setInputVal(val);\n      }\n    },\n    [from.max],\n  );\n\n  const characters = useMemo(() => inputVal.split(''), [inputVal]);\n\n  return (\n    <div className=\"theme-injected flex h-full min-h-150 w-full select-none items-center justify-center bg-transparent p-2 font-sans transition-colors duration-300 sm:p-4\">\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          stiffness: 150,\n          damping: 19,\n          mass: 1.2,\n        }}\n      >\n        <motion.div className=\"w-[95vw] max-w-105 space-y-1\">\n          <motion.div\n            layout\n            className=\"rounded-2xl border-[1.6px] border-border bg-card p-4 transition-colors sm:rounded-3xl sm:p-6\"\n          >\n            <div className=\"mb-4 flex items-center justify-between gap-2\">\n              <div className=\"flex min-w-0 items-center gap-2 sm:gap-3\">\n                <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-3xl bg-primary sm:h-10 sm:w-10\">\n                  <img\n                    src={from.logo}\n                    className=\"w-5 sm:w-6\"\n                    alt={from.symbol}\n                  />\n                </div>\n                <div className=\"min-w-0\">\n                  <div className=\"truncate font-sans text-base font-medium text-foreground sm:text-lg\">\n                    {from.name}\n                  </div>\n                  {from.max && (\n                    <div className=\"truncate font-sans text-xs text-muted-foreground sm:text-sm\">\n                      <NumberFlow value={from.max} />\n                    </div>\n                  )}\n                </div>\n              </div>\n              <motion.div layout>\n                {from.max && (\n                  <button\n                    type=\"button\"\n                    onClick={handleUseMax}\n                    className={`shrink-0 rounded-3xl px-3 py-1.5 font-sans text-xs font-medium transition-all sm:px-4 sm:text-base ${isMax || isError\n                        ? 'bg-muted text-muted-foreground'\n                        : 'bg-muted text-foreground hover:bg-background'\n                      }`}\n                  >\n                    {isError || isMax ? 'Using Max' : 'Use Max'}\n                  </button>\n                )}\n              </motion.div>\n            </div>\n\n            <div className=\"border-t border-border\" />\n\n            <div className=\"relative flex flex-col items-center overflow-hidden py-6 sm:py-8\">\n              <div className=\"relative h-20 w-full overflow-hidden\">\n                <input\n                  autoFocus\n                  inputMode=\"decimal\"\n                  value={inputVal === '0' && !isMax ? '' : inputVal}\n                  onChange={handleInputChange}\n                  placeholder=\"0\"\n                  className=\"absolute inset-0 z-20 w-full bg-transparent text-center font-sans text-4xl font-medium text-transparent caret-foreground outline-none sm:text-6xl\"\n                />\n\n                <div className=\"pointer-events-none absolute inset-0 z-10 flex items-center justify-center font-sans text-4xl font-medium tabular-nums text-foreground sm:text-6xl\">\n                  <AnimatePresence mode=\"popLayout\">\n                    {inputVal === '0' ? (\n                      <motion.span\n                        key=\"placeholder\"\n                        initial={{ opacity: 0, y: 40 }}\n                        animate={{ opacity: 1, y: 0 }}\n                        exit={{ opacity: 0, y: 40 }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 240,\n                          damping: 16,\n                          mass: 0.8,\n                        }}\n                      >\n                        0\n                      </motion.span>\n                    ) : (\n                      characters.map((char, i) => (\n                        <motion.span\n                          key={`${i}-${char}`}\n                          initial={{ opacity: 0, y: 40 }}\n                          animate={{ opacity: 1, y: 0 }}\n                          exit={{ opacity: 0, y: 40 }}\n                          transition={{\n                            type: 'spring',\n                            stiffness: 240,\n                            damping: 16,\n                            mass: 0.8,\n                          }}\n                          className=\"inline-block\"\n                        >\n                          {char}\n                        </motion.span>\n                      ))\n                    )}\n                  </AnimatePresence>\n                </div>\n              </div>\n\n              <div className=\"mt-1 h-6 sm:mt-2 sm:h-8\">\n                <AnimatePresence mode=\"popLayout\">\n                  {isError ? (\n                    <motion.div\n                      key=\"error\"\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{\n                        opacity: 1,\n                        scale: 1,\n                        rotate: [-2, 2, -1, 1, 0],\n                      }}\n                      exit={{ opacity: 0, scale: 0.8 }}\n                      transition={{\n                        opacity: { duration: 0.25 },\n                        duration: 0.25,\n                        delay: 0.15,\n                      }}\n                      className=\"font-sans text-sm font-medium text-destructive sm:text-lg\"\n                    >\n                      Not Enough {from.symbol}\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      key=\"value\"\n                      initial={{ opacity: 0, y: 5 }}\n                      animate={{ opacity: 1, y: 0 }}\n                      exit={{ opacity: 0, y: 5 }}\n                      className=\"flex items-center gap-1 font-sans text-lg font-medium text-muted-foreground sm:text-base\"\n                    >\n                      <motion.span layout>≈</motion.span>\n                      <NumberFlow\n                        value={usdValue}\n                        format={{ style: 'currency', currency: 'USD' }}\n                        transformTiming={{\n                          duration: 750,\n                          easing:\n                            'linear(0 0%, 0.005927 1%, 0.022466 2%, 0.047872 3%, 0.080554 4%, 0.119068 5%, 0.162116 6%, 0.208536 7%, 0.2573 8%, 0.3075 9%, 0.358346 10%, 0.409157 11%, 0.45935 12%, 0.508438 13%, 0.556014 14%, 0.601751 15%, 0.645389 16%, 0.686733 17%, 0.72564 18%, 0.762019 19%, 0.795818 20%, 0.827026 21%, 0.855662 22%, 0.881772 23%, 0.905423 24%, 0.926704 25%, 0.945714 26%, 0.962568 27%, 0.977386 28%, 0.990295 29%, 1.001426 30%, 1.010911 31%, 1.018881 32%, 1.025465 33%, 1.030792 34%, 1.034982 35%, 1.038155 36%, 1.040423 37%, 1.041892 38%, 1.042662 39%, 1.042827 40%, 1.042473 41%, 1.04168 42%, 1.040522 43%, 1.039065 44%, 1.037371 45%, 1.035493 46%, 1.03348 47%, 1.031376 48%, 1.029217 49%, 1.027037 50%, 1.024864 51%, 1.022722 52%, 1.020631 53%, 1.018608 54%, 1.016667 55%, 1.014817 56%, 1.013067 57%, 1.011422 58%, 1.009887 59%, 1.008462 60%, 1.007148 61%, 1.005944 62%, 1.004847 63%, 1.003855 64%, 1.002964 65%, 1.002169 66%, 1.001466 67%, 1.000848 68%, 1.000311 69%, 0.999849 70%, 0.999457 71%, 0.999128 72%, 0.998858 73%, 0.99864 74%, 0.99847 75%, 0.998342 76%, 0.998253 77%, 0.998196 78%, 0.998169 79%, 0.998167 80%, 0.998186 81%, 0.998224 82%, 0.998276 83%, 0.998341 84%, 0.998415 85%, 0.998497 86%, 0.998584 87%, 0.998675 88%, 0.998768 89%, 0.998861 90%, 0.998954 91%, 0.999045 92%, 0.999134 93%, 0.99922 94%, 0.999303 95%, 0.999381 96%, 0.999455 97%, 0.999525 98%, 0.999589 99%, 0.99965 100%)',\n                        }}\n                        spinTiming={{ duration: 0 }}\n                        className=\"flex items-center gap-1\"\n                      />\n                      <ArrowUpDown size={14} className=\"\" />\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </div>\n          </motion.div>\n\n          <div className=\"relative z-10 -my-2 flex h-4 items-center justify-center\">\n            <div className=\"rounded-3xl border border-border bg-background p-1.5\">\n              <ChevronDown size={18} className=\"text-muted-foreground\" />\n            </div>\n          </div>\n\n          <div className=\"flex items-center justify-between gap-2 rounded-2xl border-[1.6px] border-border bg-card p-4 sm:rounded-3xl sm:p-6\">\n            <div className=\"flex min-w-0 items-center gap-2 sm:gap-3\">\n              <div className=\"h-9 w-9 shrink-0 overflow-hidden rounded-3xl border border-border bg-background sm:h-10 sm:w-10\">\n                <img\n                  src={to.logo}\n                  className=\"h-full w-full object-cover\"\n                  alt={to.symbol}\n                />\n              </div>\n              <div className=\"min-w-0\">\n                <div className=\"truncate font-sans text-base font-medium text-foreground sm:text-lg\">\n                  {to.name}\n                </div>\n                <div className=\"truncate font-sans text-xs text-muted-foreground sm:text-sm\">\n                  Receive {to.symbol}\n                </div>\n              </div>\n            </div>\n\n            <div className=\"truncate text-right font-sans text-lg font-medium text-foreground sm:text-2xl\">\n              <NumberFlow\n                value={outputValue}\n                format={{ maximumFractionDigits: 2 }}\n                spinTiming={{\n                  duration: 600,\n                  easing: 'ease-out',\n                }}\n              />\n            </div>\n          </div>\n\n          <div className=\"pt-2 sm:pt-4\">\n            <motion.button\n              whileTap={{ scale: 0.98 }}\n              onClick={handleClear}\n              className=\"w-full rounded-3xl border-[1.2px] border-border bg-muted py-3 font-sans text-muted-foreground transition-colors hover:bg-background hover:text-foreground\"\n            >\n              Clear\n            </motion.button>\n          </div>\n        </motion.div>\n      </MotionConfig>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "activities-card",
      "type": "registry:component",
      "title": "Activities Card",
      "description": "An expandable activities card with smooth spring animations and a premium 3D header aesthetic.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/activities-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect, type FC, type ReactNode } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { ChevronUpIcon } from 'lucide-react';\n\nexport interface ActivityItemType {\n  icon: ReactNode;\n  title: string;\n  desc: string;\n  time: string;\n}\n\nexport interface ActivitiesCardProps {\n  headerIcon: ReactNode;\n  title: string;\n  subtitle: string;\n  activities: ActivityItemType[];\n}\n\nconst ActivityItem: FC<ActivityItemType> = ({ icon, title, desc, time }) => {\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, x: -10 }}\n      animate={{ opacity: 1, x: 0 }}\n      className=\"flex cursor-pointer items-center gap-3 px-3 py-3 transition-colors hover:bg-neutral-50 sm:gap-4 sm:px-5 dark:hover:bg-neutral-800/50\"\n    >\n      <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl border border-gray-100/50 bg-gradient-to-b from-[#f4f4f7]/90 to-[#E9EAF0]/90 text-gray-400 sm:h-12 sm:w-12 dark:border-neutral-700 dark:from-neutral-800 dark:to-neutral-900 dark:text-neutral-500\">\n        {icon}\n      </div>\n\n      <div className=\"min-w-0 flex-1\">\n        <p className=\"truncate text-[15px] leading-tight font-bold text-[#3E3E43] sm:text-[17px] dark:text-neutral-200\">\n          {title}\n        </p>\n        <p className=\"truncate text-[13px] text-[#909092] sm:text-[15px] dark:text-neutral-500\">\n          {desc}\n        </p>\n      </div>\n\n      <span className=\"pt-1 text-[11px] whitespace-nowrap text-[#9F9FA1] sm:text-[13px] dark:text-neutral-600\">\n        {time}\n      </span>\n    </motion.div>\n  );\n};\n\nexport const ActivitiesCard: FC<ActivitiesCardProps> = ({\n  headerIcon,\n  title,\n  subtitle,\n  activities,\n}) => {\n  const [open, setOpen] = useState(false);\n  const [isMobile, setIsMobile] = useState(false);\n\n  useEffect(() => {\n    const checkMobile = () => setIsMobile(window.innerWidth < 640);\n    checkMobile();\n    window.addEventListener('resize', checkMobile);\n    return () => window.removeEventListener('resize', checkMobile);\n  }, []);\n\n  return (\n    <MotionConfig transition={{ type: 'spring', bounce: 0, duration: 0.6 }}>\n      <motion.div\n        layout\n        className=\"w-xs overflow-hidden rounded-xl border-2 border-[#e7e6e6]/60 bg-[#FEFEFE] shadow-lg sm:w-sm sm:rounded-[20px] dark:border-neutral-800 dark:bg-neutral-900\"\n      >\n        <motion.button\n          onClick={() => setOpen(!open)}\n          className=\"flex w-full items-center justify-between gap-2 px-3 py-2 transition-colors sm:gap-3 sm:px-4 sm:py-3.5\"\n        >\n          <div className=\"flex min-w-0 flex-1 items-center gap-3 text-left sm:gap-4\">\n            <motion.div\n              initial={{\n                width: isMobile ? 48 : 60,\n                height: isMobile ? 48 : 60,\n              }}\n              animate={{\n                width: open ? (isMobile ? 36 : 48) : isMobile ? 48 : 60,\n                height: open ? (isMobile ? 36 : 48) : isMobile ? 48 : 60,\n              }}\n              className=\"relative flex shrink-0 items-center justify-center overflow-hidden rounded-lg border border-gray-100/50 bg-gradient-to-b from-[#f4f4f7] via-[#efeef2] to-[#E9EAF0] shadow-sm sm:rounded-xl dark:border-neutral-700 dark:from-neutral-700 dark:via-neutral-800 dark:to-neutral-900\"\n            >\n              <motion.span className=\"pointer-events-none absolute inset-0 rounded-[inherit] shadow-[inset_1px_1px_2px_rgba(255,255,255,0.8),_inset_-1px_-1px_2px_rgba(165,172,190,0.2)] dark:shadow-[inset_1px_1px_1px_rgba(255,255,255,0.1),inset_-1px_-1px_3px_rgba(0,0,0,0.6)]\" />\n              <motion.div animate={{ scale: open ? 0.7 : 1 }}>\n                {headerIcon}\n              </motion.div>\n            </motion.div>\n\n            <div className=\"flex min-w-0 flex-1 flex-col justify-center\">\n              <motion.p\n                layout\n                className=\"truncate text-[16px] font-bold tracking-tight text-neutral-900 sm:text-[17px] dark:text-neutral-100\"\n              >\n                {title}\n              </motion.p>\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {!open && (\n                  <motion.p\n                    initial={{ opacity: 0 }}\n                    animate={{ opacity: 1 }}\n                    transition={{\n                      duration: 0.3,\n                      ease: 'easeOut',\n                    }}\n                    className=\"truncate text-[14px] tracking-tight text-[#BFBFC2] sm:text-[15px] dark:text-neutral-500\"\n                  >\n                    {subtitle}\n                  </motion.p>\n                )}\n              </AnimatePresence>\n            </div>\n          </div>\n\n          <motion.div\n            animate={{ rotate: open ? 180 : 0 }}\n            className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-[#9C97A8]/70 to-[#7A7596]/70 shadow-xs dark:from-neutral-700 dark:to-neutral-800\"\n          >\n            <ChevronUpIcon className=\"size-5 text-white\" />\n          </motion.div>\n        </motion.button>\n\n        <AnimatePresence>\n          {open && (\n            <motion.div\n              initial={{ opacity: 0, height: 0 }}\n              animate={{ opacity: 1, height: 'auto' }}\n              exit={{ opacity: 0, height: 0 }}\n              className=\"border-t-2 border-[#e7e6e6]/60 dark:border-neutral-800\"\n            >\n              <div className=\"py-2\">\n                {activities.map((item, i) => (\n                  <ActivityItem key={i} {...item} />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "activities-card-base",
      "type": "registry:component",
      "title": "Activities Card (base)",
      "description": "Theme-ready base variant of An expandable activities card with smooth spring animations and a premium 3D header aesthetic..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/activities-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect, type FC, type ReactNode } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { ChevronUpIcon } from 'lucide-react';\n\nexport interface ActivityItemType {\n  icon: ReactNode;\n  title: string;\n  desc: string;\n  time: string;\n}\n\nexport interface ActivitiesCardProps {\n  headerIcon: ReactNode;\n  title: string;\n  subtitle: string;\n  activities: ActivityItemType[];\n}\n\nconst ActivityItem: FC<ActivityItemType> = ({ icon, title, desc, time }) => {\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, x: -10 }}\n      animate={{ opacity: 1, x: 0 }}\n      className=\"flex cursor-pointer items-center gap-3 px-3 py-3 transition-colors hover:bg-accent/40 sm:gap-4 sm:px-5\"\n    >\n      <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-border bg-muted/50 text-muted-foreground sm:h-12 sm:w-12\">\n        {icon}\n      </div>\n\n      <div className=\"min-w-0 flex-1\">\n        <p className=\"truncate text-sm leading-tight font-bold text-foreground sm:text-base\">\n          {title}\n        </p>\n        <p className=\"truncate text-xs text-muted-foreground sm:text-sm\">\n          {desc}\n        </p>\n      </div>\n\n      <span className=\"pt-1 text-xs whitespace-nowrap text-muted-foreground\">\n        {time}\n      </span>\n    </motion.div>\n  );\n};\n\nexport const ActivitiesCard: FC<ActivitiesCardProps> = ({\n  headerIcon,\n  title,\n  subtitle,\n  activities,\n}) => {\n  const [open, setOpen] = useState(false);\n  const [isMobile, setIsMobile] = useState(false);\n\n  useEffect(() => {\n    const checkMobile = () => setIsMobile(window.innerWidth < 640);\n    checkMobile();\n    window.addEventListener('resize', checkMobile);\n    return () => window.removeEventListener('resize', checkMobile);\n  }, []);\n\n  return (\n    <MotionConfig transition={{ type: 'spring', bounce: 0, duration: 0.6 }}>\n      <motion.div\n        layout\n        className=\"theme-injected w-full max-w-xs overflow-hidden rounded-xl border border-border bg-card text-card-foreground shadow-lg font-sans sm:max-w-sm font-sans\"\n      >\n        <motion.button\n          onClick={() => setOpen(!open)}\n          className=\"flex w-full items-center justify-between gap-2 px-3 py-2 transition-colors sm:gap-3 sm:px-4 sm:py-3.5\"\n        >\n          <div className=\"flex min-w-0 flex-1 items-center gap-3 text-left sm:gap-4\">\n            <motion.div\n              initial={{\n                width: isMobile ? 48 : 60,\n                height: isMobile ? 48 : 60,\n              }}\n              animate={{\n                width: open ? (isMobile ? 36 : 48) : isMobile ? 48 : 60,\n                height: open ? (isMobile ? 36 : 48) : isMobile ? 48 : 60,\n              }}\n              className=\"relative flex shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-muted shadow-sm sm:rounded-xl\"\n            >\n              <motion.span className=\"pointer-events-none absolute inset-0 shadow-inner\" />\n              <motion.div animate={{ scale: open ? 0.7 : 1 }}>\n                {headerIcon}\n              </motion.div>\n            </motion.div>\n\n            <div className=\"flex min-w-0 flex-1 flex-col justify-center\">\n              <motion.p\n                layout\n                className=\"truncate text-base font-bold tracking-tight text-foreground sm:text-lg\"\n              >\n                {title}\n              </motion.p>\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {!open && (\n                  <motion.p\n                    initial={{ opacity: 0 }}\n                    animate={{ opacity: 1 }}\n                    transition={{\n                      duration: 0.3,\n                      ease: 'easeOut',\n                    }}\n                    className=\"truncate text-sm tracking-tight text-muted-foreground\"\n                  >\n                    {subtitle}\n                  </motion.p>\n                )}\n              </AnimatePresence>\n            </div>\n          </div>\n\n          <motion.div\n            animate={{ rotate: open ? 180 : 0 }}\n            className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-secondary text-secondary-foreground shadow-xs\"\n          >\n            <ChevronUpIcon className=\"size-5\" />\n          </motion.div>\n        </motion.button>\n\n        <AnimatePresence>\n          {open && (\n            <motion.div\n              initial={{ opacity: 0, height: 0 }}\n              animate={{ opacity: 1, height: 'auto' }}\n              exit={{ opacity: 0, height: 0 }}\n              className=\"border-t border-border\"\n            >\n              <div className=\"py-2\">\n                {activities.map((item, i) => (\n                  <ActivityItem key={i} {...item} />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "adaptive-slider",
      "type": "registry:component",
      "title": "Adaptive Slider",
      "description": "A smooth, color-shifting slider with caloric value tracking.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/adaptive-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useMemo, type FC, type ChangeEvent } from 'react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\n\ninterface AdaptiveSliderProps {\n  value?: number;\n  min?: number;\n  max?: number;\n  step?: number;\n  defaultValue?: number;\n  onChange?: (value: number) => void;\n}\n\ninterface ColorSettings {\n  text: string;\n  gradient: string;\n  thumbBorder: string;\n}\n\nconst DEFAULT_MIN = 50;\nconst DEFAULT_MAX = 350;\nconst DEFAULT_STEP = 25;\nconst DEFAULT_VALUE = 200;\n\nconst getColorSettings = (\n  value: number,\n  min: number,\n  max: number,\n): ColorSettings => {\n  const percentage = (value - min) / (max - min);\n\n  if (percentage < 0.5) {\n    return {\n      text: '#10B981',\n      gradient: 'linear-gradient(to right, #FEB101, #FE7C09)',\n      thumbBorder: '#10B981',\n    };\n  } else if (percentage < 0.7) {\n    return {\n      text: '#FE55B7',\n      gradient: 'linear-gradient(to right, #FE55B74D, #FE55B7)',\n      thumbBorder: '#F97316',\n    };\n  } else {\n    return {\n      text: '#D946EF',\n      gradient: 'linear-gradient(to right, #DAB0FE, #4946FF)',\n      thumbBorder: '#D946EF',\n    };\n  }\n};\n\nexport const AdaptiveSlider: FC<AdaptiveSliderProps> = ({\n  value,\n  min = DEFAULT_MIN,\n  max = DEFAULT_MAX,\n  step = DEFAULT_STEP,\n  defaultValue = DEFAULT_VALUE,\n  onChange,\n}) => {\n  const [internalValue, setInternalValue] = useState<number>(defaultValue);\n\n  const calories = value ?? internalValue;\n\n  const colorSettings = useMemo(\n    () => getColorSettings(calories, min, max),\n    [calories, min, max],\n  );\n\n  const percentage = ((calories - min) / (max - min)) * 100;\n\n  const dots = useMemo(\n    () =>\n      Array.from({ length: 6 }).map((_, i) => (\n        <div\n          key={i}\n          className=\"z-30 h-1.5 w-1.5 rounded-full bg-[#C4B9FA] transition-colors dark:bg-neutral-600\"\n          style={{ opacity: 0.8 }}\n        />\n      )),\n    [],\n  );\n\n  const handleSliderChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const val = Number(e.target.value);\n    setInternalValue(val);\n    onChange?.(val);\n  };\n\n  return (\n    <motion.div className=\"flex h-[60vh] w-xs flex-col items-center justify-center rounded-[36px] bg-[#FEFEFE] p-6 shadow-2xl shadow-black/5 transition-colors select-none sm:w-sm sm:p-12 dark:bg-neutral-900 dark:shadow-none\">\n      <span className=\"mb-2 text-xl font-bold text-[#878787] sm:text-2xl dark:text-neutral-500\">\n        Calories\n      </span>\n\n      <div className=\"mb-8 flex items-baseline gap-2\">\n        <AnimatedText\n          value={calories.toString()}\n          className=\"overflow-hidden text-5xl font-extrabold tracking-tight sm:text-6xl\"\n        />\n        <motion.span\n          layout\n          className=\"text-4xl font-extrabold text-[#010101] transition-colors sm:text-5xl dark:text-neutral-100\"\n        >\n          kCal\n        </motion.span>\n      </div>\n\n      <div className=\"group relative flex h-13 w-full items-center overflow-hidden rounded-full bg-[#f1f3f5] transition-colors dark:bg-neutral-800\">\n        <div className=\"pointer-events-none absolute inset-0 flex items-center justify-between px-4 transition-colors sm:px-8\">\n          {dots}\n        </div>\n\n        <motion.div\n          className=\"pointer-events-none absolute top-0 left-0 h-full rounded-full\"\n          animate={{\n            width: `calc((${percentage} / 100) * (100% - 52px) + 52px)`,\n            background: colorSettings.gradient,\n          }}\n          transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n        />\n\n        <input\n          title=\"range\"\n          type=\"range\"\n          min={min}\n          max={max}\n          step={step}\n          value={calories}\n          onChange={handleSliderChange}\n          className=\"absolute inset-0 z-50 h-13 w-full cursor-pointer opacity-0\"\n        />\n\n        <motion.div\n          className=\"pointer-events-none absolute top-0 z-40 flex size-13 items-center justify-center rounded-full border-none\"\n          animate={{\n            left: `calc((${percentage} / 100) * (100% - 52px))`,\n          }}\n          transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n        >\n          <div className=\"size-10 rounded-full bg-white shadow-[inset_0_2px_4px_rgba(0,0,0,0.06)]\" />\n        </motion.div>\n      </div>\n    </motion.div>\n  );\n};\n\nconst AnimatedText = ({\n  value,\n  className,\n}: {\n  value: string;\n  className?: string;\n}) => {\n  return (\n    <div\n      className={cn(\n        'flex text-lg tracking-tight will-change-transform',\n        className,\n      )}\n    >\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {value.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              initial={{ opacity: 1, y: 0, scale: 1 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  // delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: 0, scale: 1, transition: { duration: 0 } }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "adaptive-slider-base",
      "type": "registry:component",
      "title": "Adaptive Slider (base)",
      "description": "Theme-ready base variant of A smooth, color-shifting slider with caloric value tracking..",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/adaptive-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useMemo, type FC, type ChangeEvent } from 'react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\n\ninterface AdaptiveSliderProps {\n  value?: number;\n  min?: number;\n  max?: number;\n  step?: number;\n  defaultValue?: number;\n  onChange?: (value: number) => void;\n}\n\ninterface ColorSettings {\n  text: string;\n  gradient: string;\n  thumbBorder: string;\n}\n\nconst DEFAULT_MIN = 50;\nconst DEFAULT_MAX = 350;\nconst DEFAULT_STEP = 25;\nconst DEFAULT_VALUE = 200;\n\nconst getColorSettings = (\n  value: number,\n  min: number,\n  max: number,\n): ColorSettings => {\n  const percentage = (value - min) / (max - min);\n\n  if (percentage < 0.5) {\n    return {\n      text: '#10B981',\n      gradient: 'linear-gradient(to right, #FEB101, #FE7C09)',\n      thumbBorder: '#10B981',\n    };\n  } else if (percentage < 0.7) {\n    return {\n      text: '#FE55B7',\n      gradient: 'linear-gradient(to right, #FE55B74D, #FE55B7)',\n      thumbBorder: '#F97316',\n    };\n  } else {\n    return {\n      text: '#D946EF',\n      gradient: 'linear-gradient(to right, #DAB0FE, #4946FF)',\n      thumbBorder: '#D946EF',\n    };\n  }\n};\n\nexport const AdaptiveSlider: FC<AdaptiveSliderProps> = ({\n  value,\n  min = DEFAULT_MIN,\n  max = DEFAULT_MAX,\n  step = DEFAULT_STEP,\n  defaultValue = DEFAULT_VALUE,\n  onChange,\n}) => {\n  const [internalValue, setInternalValue] = useState<number>(defaultValue);\n\n  const calories = value ?? internalValue;\n\n  const colorSettings = useMemo(\n    () => getColorSettings(calories, min, max),\n    [calories, min, max],\n  );\n\n  const percentage = ((calories - min) / (max - min)) * 100;\n\n  const dots = useMemo(\n    () =>\n      Array.from({ length: 6 }).map((_, i) => (\n        <div\n          key={i}\n          className=\"bg-muted z-30 h-1.5 w-1.5 rounded-lg transition-colors\"\n          style={{ opacity: 0.8 }}\n        />\n      )),\n    [],\n  );\n\n  const handleSliderChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const val = Number(e.target.value);\n    setInternalValue(val);\n    onChange?.(val);\n  };\n\n  return (\n    <motion.div className=\"theme-injected bg-background shadow-foreground/5 flex h-[60vh] w-xs flex-col items-center justify-center rounded-lg p-6 shadow-2xl transition-colors select-none sm:w-sm sm:p-12\">\n      <span className=\"text-muted-foreground mb-2 text-xl font-bold sm:text-2xl\">\n        Calories\n      </span>\n\n      <div className=\"mb-8 flex items-baseline gap-2\">\n        <AnimatedText\n          value={calories.toString()}\n          className=\"overflow-hidden text-5xl font-extrabold tracking-tight sm:text-6xl\"\n        />\n        <motion.span\n          layout\n          className=\"text-foreground text-4xl font-extrabold transition-colors sm:text-5xl\"\n        >\n          kCal\n        </motion.span>\n      </div>\n\n      <div className=\"group bg-muted relative flex h-13 w-full items-center overflow-hidden rounded-lg transition-colors\">\n        <div className=\"pointer-events-none absolute inset-0 flex items-center justify-between px-4 transition-colors sm:px-8\">\n          {dots}\n        </div>\n\n        <motion.div\n          className=\"pointer-events-none absolute top-0 left-0 h-full rounded-lg\"\n          animate={{\n            width: `calc((${percentage} / 100) * (100% - 52px) + 52px)`,\n            background: colorSettings.gradient,\n          }}\n          transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n        />\n\n        <input\n          title=\"range\"\n          type=\"range\"\n          min={min}\n          max={max}\n          step={step}\n          value={calories}\n          onChange={handleSliderChange}\n          className=\"absolute inset-0 z-50 h-13 w-full cursor-pointer opacity-0\"\n        />\n\n        <motion.div\n          className=\"pointer-events-none absolute top-0 z-40 flex size-13 items-center justify-center rounded-lg border-none\"\n          animate={{\n            left: `calc((${percentage} / 100) * (100% - 52px))`,\n          }}\n          transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n        >\n          <div className=\"bg-background size-10 rounded-lg shadow-[inset_0_2px_4px_hsl(var(--foreground)/0.06)]\" />\n        </motion.div>\n      </div>\n    </motion.div>\n  );\n};\n\nconst AnimatedText = ({\n  value,\n  className,\n}: {\n  value: string;\n  className?: string;\n}) => {\n  return (\n    <div\n      className={cn(\n        'flex text-lg tracking-tight will-change-transform',\n        className,\n      )}\n    >\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {value.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              initial={{ opacity: 1, y: 0, scale: 1 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                },\n              }}\n              exit={{ opacity: 0, y: 0, scale: 1, transition: { duration: 0 } }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "add-cash-disclosure",
      "type": "registry:component",
      "title": "Add Cash Disclosure",
      "description": "Disclosure panel explaining add-cash details, limits, fees, and confirmation.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/add-cash-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { Plus, X, Wallet, Check } from 'lucide-react';\nimport { MdOutlineAddCard } from 'react-icons/md';\n\nexport interface PaymentCard {\n  id: string;\n  last4: string;\n  brand: 'VISA' | 'MASTERCARD';\n  isDefault?: boolean;\n  hasToggle?: boolean;\n}\n\nexport interface CashDisclosureProps {\n  initialBalance: number;\n  cards: PaymentCard[];\n  presets: number[];\n  onConfirm: (amount: number) => Promise<void>;\n}\n\nexport const AddCashDisclosure: React.FC<CashDisclosureProps> = ({\n  initialBalance,\n  cards,\n  presets,\n  onConfirm,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [selectedCard, setSelectedCard] = useState<string>(cards[0]?.id || '');\n  const [selectedAmount, setSelectedAmount] = useState<number>(presets[1]);\n  const [isProcessing, setIsProcessing] = useState(false);\n  const [isDone, setIsDone] = useState(false);\n  const [displayBalance, setDisplayBalance] = useState(initialBalance);\n\n  useEffect(() => {\n    if (!isProcessing && !isDone) {\n      setTimeout(() => setDisplayBalance(initialBalance), 0);\n    }\n  }, [initialBalance, isProcessing, isDone]);\n\n  const handleOpen = () => setIsOpen(true);\n  const handleClose = () => {\n    setIsOpen(false);\n    setIsProcessing(false);\n    setIsDone(false);\n  };\n\n  const handleConfirm = async () => {\n    setIsProcessing(true);\n    await onConfirm(selectedAmount);\n    setIsDone(true);\n    setTimeout(() => handleClose(), 1500);\n  };\n\n  const formatCurrency = (val: number) => {\n    return new Intl.NumberFormat('en-US', {\n      style: 'currency',\n      currency: 'USD',\n    }).format(val);\n  };\n\n  return (\n    <div className=\"flex min-h-full w-full flex-col items-center justify-center bg-transparent p-2 transition-colors duration-500 sm:p-4\">\n      <MotionConfig transition={{ type: 'spring', bounce: 0, duration: 0.6 }}>\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {!isOpen ? (\n            <motion.div\n              key=\"collapsed\"\n              layoutId=\"add-cash-disclosure\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={{\n                opacity: { duration: 0.3 },\n              }}\n              style={{\n                borderRadius: 24,\n              }}\n              className=\"flex w-xs sm:w-sm items-center justify-between gap-4 sm:gap-10 border border-[#ECECEC] bg-white p-3 dark:border-white/5 dark:bg-[#1C1C1E] overflow-hidden\"\n            >\n              <div className=\"flex items-center gap-2 sm:gap-3\">\n                <motion.div\n                  layoutId=\"wallet-icon\"\n                  className=\"flex h-10 w-10 items-center justify-center rounded-xl border-[1.5px] border-[#ECECEC] bg-linear-to-b from-[#F4F4F4] to-[#E2E3EA]/50 shadow-sm transition-colors sm:h-14 sm:w-14 dark:border-white/10 dark:from-[#2A2A2D] dark:to-[#1C1C1E]\"\n                >\n                  <Wallet\n                    className=\"h-5 w-5 text-[#D1D0D7] sm:h-8 sm:w-8 dark:text-[#4A4A4D]\"\n                    fill=\"currentColor\"\n                    strokeWidth={1.5}\n                  />\n                </motion.div>\n                <div className=\"flex flex-col\">\n                  <motion.span\n                    layoutId=\"wallet-name\"\n                    className=\"text-[10px] font-normal tracking-wider text-gray-400 capitalize sm:text-xs\"\n                  >\n                    Wallet\n                  </motion.span>\n                  <motion.span\n                    layoutId=\"wallet-balance\"\n                    className=\"font-sans text-base font-semibold text-[#010103] sm:text-xl dark:text-white\"\n                  >\n                    {formatCurrency(displayBalance)}\n                  </motion.span>\n                </div>\n              </div>\n              <motion.button\n                layoutId=\"add-cash-button\"\n                onClick={handleOpen}\n                className=\"flex items-center gap-1 rounded-full bg-[#262629] px-3 py-2 text-xs font-semibold text-[#fefefe] transition-colors hover:bg-[#3d3d42] sm:px-4 sm:text-sm dark:bg-white dark:text-black dark:hover:bg-gray-200\"\n              >\n                <Plus className=\"h-3 w-3 sm:h-4 sm:w-4\" strokeWidth={3} />\n                Add Cash\n              </motion.button>\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"expanded\"\n              layoutId=\"add-cash-disclosure\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={{\n                opacity: { duration: 0.3 },\n              }}\n              className=\"flex w-xs sm:w-sm flex-col border border-[#ECECEC] bg-white py-3 dark:border-white/5 dark:bg-[#1C1C1E] overflow-hidden\"\n              style={{\n                borderRadius: 24,\n              }}\n            >\n              <motion.div layout>\n                <div className=\"flex items-center justify-between gap-2 px-4\">\n                  <div className=\"flex items-center gap-2\">\n                    <motion.div\n                      layoutId=\"wallet-icon\"\n                      className=\"flex h-10 w-10 items-center justify-center rounded-xl border-[1.5px] border-[#ECECEC] bg-linear-to-b from-[#F4F4F4] to-[#E2E3EA]/50 shadow-sm sm:h-12 sm:w-12 dark:border-white/10 dark:from-[#2A2A2D] dark:to-[#1C1C1E]\"\n                    >\n                      <Wallet\n                        className=\"h-5 w-5 text-[#D1D0D7] sm:h-7 sm:w-7 dark:text-[#4A4A4D]\"\n                        fill=\"currentColor\"\n                        strokeWidth={1.5}\n                      />\n                    </motion.div>\n                    <div className=\"flex flex-col\">\n                      <motion.span\n                        layoutId=\"wallet-name\"\n                        className=\"text-[9px] font-medium text-[#9C9BA2] sm:text-[10px]\"\n                      >\n                        Wallet\n                      </motion.span>\n                      <motion.span\n                        layoutId=\"wallet-balance\"\n                        className=\"text-sm font-semibold text-[#010101] sm:text-base dark:text-white\"\n                      >\n                        {formatCurrency(displayBalance)}\n                      </motion.span>\n                    </div>\n                  </div>\n                  <button\n                    title=\"close\"\n                    onClick={handleClose}\n                    className=\"flex h-7 w-7 items-center justify-center rounded-full bg-[#F0EFF8] text-[#ACABB7] transition-colors hover:text-[#a09fab] sm:h-8 sm:w-8 dark:bg-white/10 dark:text-gray-400 dark:hover:text-white\"\n                  >\n                    <X className=\"h-4 w-4 sm:h-5 sm:w-5\" strokeWidth={3} />\n                  </button>\n                </div>\n\n                <div className=\"mt-4 h-px w-full bg-[#ECECEC] dark:bg-white/5\" />\n\n                <div className=\"mt-5 flex flex-col gap-2 px-4\">\n                  <div className=\"flex items-center justify-between\">\n                    <span className=\"text-xs font-medium text-[#848488] sm:text-sm\">\n                      Payment Mode\n                    </span>\n                    <button className=\"flex items-center gap-1 rounded-2xl border-[1.5px] border-[#E8E8EE] bg-gray-50 px-2.5 py-1 text-[10px] font-semibold text-[#000000] transition-colors hover:bg-gray-100 sm:text-xs dark:border-white/10 dark:bg-white/5 dark:text-white\">\n                      <MdOutlineAddCard className=\"h-3 w-3 sm:h-4 sm:w-4\" />\n                      Add Card\n                    </button>\n                  </div>\n\n                  <div className=\"space-y-2\">\n                    {cards.map((card) => {\n                      const isSelected = selectedCard === card.id;\n                      return (\n                        <div\n                          key={card.id}\n                          onClick={() => setSelectedCard(card.id)}\n                          className={`flex cursor-pointer items-center justify-between rounded-xl border-[1.5px] p-3 transition-all sm:p-4 ${isSelected\n                              ? 'border-[#010103] ring-1 ring-[#010103] dark:border-white dark:bg-white/5 dark:ring-white'\n                              : 'border-[#ECECEC] bg-[#F6F5FA] hover:border-gray-300 dark:border-white/5 dark:bg-white/2 dark:hover:border-white/20'\n                            }`}\n                        >\n                          <div className=\"flex items-center gap-2 sm:gap-3\">\n                            <div\n                              className={`flex h-4 w-4 items-center justify-center rounded-full border-2 transition-colors sm:h-5 sm:w-5 ${isSelected\n                                  ? 'border-[#010103] dark:border-white'\n                                  : 'border-[#ECECEC] dark:border-white/10'\n                                }`}\n                            >\n                              {isSelected && (\n                                <div className=\"h-2 w-2 rounded-full bg-[#010103] sm:h-2.5 sm:w-2.5 dark:bg-white\" />\n                              )}\n                            </div>\n                            <span className=\"text-xs font-medium text-gray-900 sm:text-sm dark:text-gray-200\">\n                              <span className=\"mr-1 tracking-tighter text-[#000000] dark:text-gray-500\">\n                                ••••\n                              </span>\n                              {card.last4}\n                            </span>\n                          </div>\n                          <span className=\"text-[9px] font-extrabold text-[#000000] italic sm:text-[10px] dark:text-gray-400\">\n                            {card.brand}\n                          </span>\n                        </div>\n                      );\n                    })}\n                  </div>\n                </div>\n                <div className=\"my-4 flex flex-col gap-2 px-4\">\n                  <span className=\"text-xs font-medium text-[#808083] sm:text-sm\">\n                    Amount\n                  </span>\n                  <div className=\"flex gap-2\">\n                    {presets.map((amount) => {\n                      const isSelected = selectedAmount === amount;\n                      return (\n                        <button\n                          key={amount}\n                          onClick={() => setSelectedAmount(amount)}\n                          className={`flex-1 rounded-lg border-[1.5px] py-2 text-[11px] font-semibold transition-all sm:text-sm ${isSelected\n                              ? 'border-[#000000] bg-[#fefefe] text-[#000000] ring-1 ring-[#000000] dark:border-white dark:bg-white dark:text-black'\n                              : 'border-[#ECECEC] bg-[#F6F5FA] text-[#000000] hover:border-[#dedbdb] dark:border-white/10 dark:bg-white/5 dark:text-gray-400 dark:hover:border-white/20'\n                            }`}\n                        >\n                          ${amount}\n                        </button>\n                      );\n                    })}\n                  </div>\n                </div>\n                <div className=\"mt-1 px-4\">\n                  <motion.button\n                    layoutId=\"add-cash-button\"\n                    onClick={handleConfirm}\n                    disabled={isProcessing || isDone}\n                    className={`relative flex h-10 w-full items-center justify-start overflow-hidden rounded-full bg-neutral-900 px-6 font-semibold text-neutral-100 transition-colors sm:w-fit sm:min-w-35 dark:bg-white dark:text-black`}\n                  >\n                    <AnimatePresence mode=\"popLayout\" initial={false}>\n                      {isDone ? (\n                        <motion.div\n                          key=\"done\"\n                          initial={{ scale: 0.8, opacity: 0 }}\n                          animate={{ scale: 1, opacity: 1 }}\n                          className=\"mx-auto flex items-center justify-center gap-2\"\n                        >\n                          <div className=\"flex items-center justify-center rounded-full bg-white p-1 dark:bg-black\">\n                            <Check\n                              className=\"size-3 text-[#262629] dark:text-white\"\n                              strokeWidth={4}\n                            />\n                          </div>\n                          <span className=\"text-sm\">Done</span>\n                        </motion.div>\n                      ) : isProcessing ? (\n                        <motion.div\n                          key=\"processing\"\n                          className=\"absolute inset-0 flex items-center bg-[#AFAEB8] dark:bg-neutral-800\"\n                        >\n                          <motion.div\n                            className=\"h-full bg-[#FEFEFE] dark:bg-white\"\n                            initial={{ width: '0%' }}\n                            animate={{ width: '100%' }}\n                            transition={{ duration: 1.5, ease: 'easeInOut' }}\n                          />\n                        </motion.div>\n                      ) : (\n                        <motion.div\n                          key=\"idle\"\n                          initial={{ opacity: 0 }}\n                          animate={{ opacity: 1 }}\n                          className=\"flex items-center gap-2\"\n                        >\n                          <Plus className=\"h-4 w-4\" strokeWidth={3} />\n                          <span className=\"text-sm\">Add Cash</span>\n                        </motion.div>\n                      )}\n                    </AnimatePresence>\n                  </motion.button>\n                </div>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "add-cash-disclosure-base",
      "type": "registry:component",
      "title": "Add Cash Disclosure (base)",
      "description": "Theme-ready base variant of Disclosure panel explaining add-cash details, limits, fees, and confirmation..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/add-cash-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { Plus, X, Wallet, Check } from 'lucide-react';\nimport { MdOutlineAddCard } from 'react-icons/md';\n\nexport interface PaymentCard {\n  id: string;\n  last4: string;\n  brand: 'VISA' | 'MASTERCARD';\n  isDefault?: boolean;\n  hasToggle?: boolean;\n}\n\nexport interface CashDisclosureProps {\n  initialBalance: number;\n  cards: PaymentCard[];\n  presets: number[];\n  onConfirm: (amount: number) => Promise<void>;\n}\n\nexport const AddCashDisclosure: React.FC<CashDisclosureProps> = ({\n  initialBalance,\n  cards,\n  presets,\n  onConfirm,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [selectedCard, setSelectedCard] = useState<string>(cards[0]?.id || '');\n  const [selectedAmount, setSelectedAmount] = useState<number>(presets[1]);\n  const [isProcessing, setIsProcessing] = useState(false);\n  const [isDone, setIsDone] = useState(false);\n  const [displayBalance, setDisplayBalance] = useState(initialBalance);\n\n  useEffect(() => {\n    if (!isProcessing && !isDone) {\n      setTimeout(() => setDisplayBalance(initialBalance), 0);\n    }\n  }, [initialBalance, isProcessing, isDone]);\n\n  const handleOpen = () => setIsOpen(true);\n  const handleClose = () => {\n    setIsOpen(false);\n    setIsProcessing(false);\n    setIsDone(false);\n  };\n\n  const handleConfirm = async () => {\n    setIsProcessing(true);\n    await onConfirm(selectedAmount);\n    setIsDone(true);\n    setTimeout(() => handleClose(), 1500);\n  };\n\n  const formatCurrency = (val: number) => {\n    return new Intl.NumberFormat('en-US', {\n      style: 'currency',\n      currency: 'USD',\n    }).format(val);\n  };\n\n  return (\n    <div\n      className=\"theme-injected flex min-h-full w-full flex-col items-center justify-center bg-transparent text-foreground font-sans p-2 transition-colors duration-500 sm:p-4\"\n      style={{ fontFamily: 'var(--font-sans)' }}\n    >\n      <MotionConfig transition={{ type: 'spring', bounce: 0, duration: 0.6 }}>\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {!isOpen ? (\n            <motion.div\n              key=\"collapsed\"\n              layoutId=\"add-cash-disclosure\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={{\n                opacity: { duration: 0.3 },\n              }}\n              className=\"flex w-xs sm:w-sm items-center justify-between gap-4 sm:gap-8 border border-border bg-card text-card-foreground p-3 overflow-hidden\"\n              style={{\n                borderRadius: 24,\n              }}\n            >\n              <div className=\"flex items-center gap-2 sm:gap-3\">\n                <motion.div\n                  layoutId=\"wallet-icon\"\n                  className=\"flex h-10 w-10 items-center justify-center rounded-xl border border-border bg-muted shadow-sm transition-colors sm:h-14 sm:w-14\"\n                >\n                  <Wallet\n                    className=\"h-5 w-5 text-muted-foreground sm:h-8 sm:w-8\"\n                    fill=\"currentColor\"\n                    strokeWidth={1.5}\n                  />\n                </motion.div>\n                <div className=\"flex flex-col\">\n                  <motion.span\n                    layoutId=\"wallet-name\"\n                    className=\"text-xs font-normal tracking-wider text-muted-foreground capitalize\"\n                  >\n                    Wallet\n                  </motion.span>\n                  <motion.span\n                    layoutId=\"wallet-balance\"\n                    className=\"text-base font-semibold text-foreground sm:text-xl\"\n                    style={{ fontFamily: 'var(--font-mono)' }}\n                  >\n                    {formatCurrency(displayBalance)}\n                  </motion.span>\n                </div>\n              </div>\n              <motion.button\n                layoutId=\"add-cash-button\"\n                onClick={handleOpen}\n                className=\"flex items-center gap-1 rounded-full bg-foreground px-3 py-2 text-xs font-semibold text-background transition-colors hover:opacity-90 sm:px-4 sm:text-sm\"\n              >\n                <Plus className=\"h-3 w-3 sm:h-4 sm:w-4\" strokeWidth={3} />\n                Add Cash\n              </motion.button>\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"expanded\"\n              layoutId=\"add-cash-disclosure\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={{\n                opacity: { duration: 0.3 },\n              }}\n              className=\"flex w-xs sm:w-sm flex-col border border-border bg-card py-3 overflow-hidden\"\n              style={{\n                borderRadius: 24,\n              }}\n            >\n              <motion.div layout>\n                <div className=\"flex items-center justify-between gap-2 px-4\">\n                  <div className=\"flex items-center gap-2\">\n                    <motion.div\n                      layoutId=\"wallet-icon\"\n                      className=\"flex h-10 w-10 items-center justify-center rounded-xl border border-border bg-muted shadow-sm sm:h-12 sm:w-12\"\n                    >\n                      <Wallet\n                        className=\"h-5 w-5 text-muted-foreground sm:h-7 sm:w-7\"\n                        fill=\"currentColor\"\n                        strokeWidth={1.5}\n                      />\n                    </motion.div>\n                    <div className=\"flex flex-col\">\n                      <motion.span\n                        layoutId=\"wallet-name\"\n                        className=\"text-xs font-medium text-muted-foreground\"\n                      >\n                        Wallet\n                      </motion.span>\n                      <motion.span\n                        layoutId=\"wallet-balance\"\n                        className=\"text-sm font-semibold text-foreground sm:text-base\"\n                        style={{ fontFamily: 'var(--font-mono)' }}\n                      >\n                        {formatCurrency(displayBalance)}\n                      </motion.span>\n                    </div>\n                  </div>\n                  <button\n                    title=\"close\"\n                    onClick={handleClose}\n                    className=\"flex h-7 w-7 items-center justify-center rounded-full bg-muted text-muted-foreground transition-colors hover:text-foreground sm:h-8 sm:w-8\"\n                  >\n                    <X className=\"h-4 w-4 sm:h-5 sm:w-5\" strokeWidth={3} />\n                  </button>\n                </div>\n\n                <div className=\"mt-4 h-px w-full bg-border\" />\n\n                <div className=\"mt-5 flex flex-col gap-2 px-4\">\n                  <div className=\"flex items-center justify-between\">\n                    <span className=\"text-xs font-medium text-muted-foreground sm:text-sm\">\n                      Payment Mode\n                    </span>\n                    <button className=\"flex items-center gap-1 rounded-xl border border-border bg-muted/60 px-2.5 py-1 text-xs font-semibold text-foreground transition-colors hover:bg-accent/60\">\n                      <MdOutlineAddCard className=\"h-3 w-3 sm:h-4 sm:w-4\" />\n                      Add Card\n                    </button>\n                  </div>\n\n                  <div className=\"space-y-2\">\n                    {cards.map((card) => {\n                      const isSelected = selectedCard === card.id;\n                      return (\n                        <div\n                          key={card.id}\n                          onClick={() => setSelectedCard(card.id)}\n                          className={`flex cursor-pointer items-center justify-between rounded-xl border p-3 transition-all sm:p-4 ${isSelected\n                              ? 'border-foreground ring-1 ring-foreground bg-accent/30'\n                              : 'border-border bg-muted/50 hover:border-ring/40'\n                            }`}\n                        >\n                          <div className=\"flex items-center gap-2 sm:gap-3\">\n                            <div\n                              className={`flex h-4 w-4 items-center justify-center rounded-full border-2 transition-colors sm:h-5 sm:w-5 ${isSelected\n                                  ? 'border-foreground'\n                                  : 'border-border'\n                                }`}\n                            >\n                              {isSelected && (\n                                <div className=\"h-2 w-2 rounded-full bg-foreground sm:h-2.5 sm:w-2.5\" />\n                              )}\n                            </div>\n                            <span className=\"text-xs font-medium text-foreground sm:text-sm\">\n                              <span className=\"mr-1 tracking-tighter text-muted-foreground\">\n                                ••••\n                              </span>\n                              {card.last4}\n                            </span>\n                          </div>\n                          <span className=\"text-xs font-extrabold text-foreground italic\">\n                            {card.brand}\n                          </span>\n                        </div>\n                      );\n                    })}\n                  </div>\n                </div>\n                <div className=\"my-4 flex flex-col gap-2 px-4\">\n                  <span className=\"text-xs font-medium text-muted-foreground sm:text-sm\">\n                    Amount\n                  </span>\n                  <div className=\"flex gap-2\">\n                    {presets.map((amount) => {\n                      const isSelected = selectedAmount === amount;\n                      return (\n                        <button\n                          key={amount}\n                          onClick={() => setSelectedAmount(amount)}\n                          className={`flex-1 rounded-lg border py-2 text-xs font-semibold transition-all sm:text-sm ${isSelected\n                              ? 'border-foreground bg-card text-foreground ring-1 ring-foreground'\n                              : 'border-border bg-muted/50 text-foreground hover:border-ring/40'\n                            }`}\n                        >\n                          ${amount}\n                        </button>\n                      );\n                    })}\n                  </div>\n                </div>\n                <div className=\"mt-1 px-4\">\n                  <motion.button\n                    layoutId=\"add-cash-button\"\n                    onClick={handleConfirm}\n                    disabled={isProcessing || isDone}\n                    className=\"relative flex h-10 w-full items-center justify-start overflow-hidden rounded-full bg-foreground px-6 font-semibold text-background transition-colors sm:w-fit sm:min-w-35\"\n                  >\n                    <AnimatePresence mode=\"popLayout\" initial={false}>\n                      {isDone ? (\n                        <motion.div\n                          key=\"done\"\n                          initial={{ scale: 0.8, opacity: 0 }}\n                          animate={{ scale: 1, opacity: 1 }}\n                          className=\"mx-auto flex items-center justify-center gap-2\"\n                        >\n                          <div className=\"flex items-center justify-center rounded-full bg-background p-1\">\n                            <Check\n                              className=\"size-3 text-foreground\"\n                              strokeWidth={4}\n                            />\n                          </div>\n                          <span className=\"text-sm\">Done</span>\n                        </motion.div>\n                      ) : isProcessing ? (\n                        <motion.div\n                          key=\"processing\"\n                          className=\"absolute inset-0 flex items-center bg-muted\"\n                        >\n                          <motion.div\n                            className=\"h-full bg-background\"\n                            initial={{ width: '0%' }}\n                            animate={{ width: '100%' }}\n                            transition={{ duration: 1.5, ease: 'easeInOut' }}\n                          />\n                        </motion.div>\n                      ) : (\n                        <motion.div\n                          key=\"idle\"\n                          initial={{ opacity: 0 }}\n                          animate={{ opacity: 1 }}\n                          className=\"flex items-center gap-2\"\n                        >\n                          <Plus className=\"h-4 w-4\" strokeWidth={3} />\n                          <span className=\"text-sm\">Add Cash</span>\n                        </motion.div>\n                      )}\n                    </AnimatePresence>\n                  </motion.button>\n                </div>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "budget-card",
      "type": "registry:component",
      "title": "Budget Card",
      "description": "Budget overview card tracking spending, limits, and remaining balance.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/budget-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronDown, Check, X } from 'lucide-react';\n\ninterface BreakdownItem {\n  label: string;\n  amount: number;\n  color: string;\n}\n\ninterface BudgetCardProps {\n  month: string;\n  totalBudget: number;\n  spentAmount: number;\n  breakdown: BreakdownItem[];\n  onViewDetails?: () => void;\n  onMonthChange?: (month: string) => void;\n}\n\nconst months = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n];\n\nexport const BudgetCard: React.FC<BudgetCardProps> = ({\n  month: initialMonth,\n  totalBudget,\n  spentAmount,\n  breakdown,\n  onViewDetails,\n  onMonthChange,\n}) => {\n  const [selectedMonth, setSelectedMonth] = useState(initialMonth);\n  const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n  const [isDetailsOpen, setIsDetailsOpen] = useState(false);\n  const dropdownRef = useRef<HTMLDivElement>(null);\n\n  const spentPercentage = Math.round((spentAmount / totalBudget) * 100);\n  const remainingAmount = totalBudget - spentAmount;\n\n  const smoothTransition = { duration: 1.5, ease: [0.19, 1, 0.22, 1] } as const;\n  const cornerClass = 'absolute w-5 h-5 border-black/20 dark:border-white/20';\n\n  // Mock Transactions\n  const transactions = [\n    {\n      id: 1,\n      date: 'Jul 12',\n      name: 'Whole Foods',\n      category: 'Groceries',\n      amount: 84.5,\n    },\n    {\n      id: 2,\n      date: 'Jul 10',\n      name: 'Rent Payment',\n      category: 'Rent',\n      amount: 1600.0,\n    },\n    {\n      id: 3,\n      date: 'Jul 08',\n      name: 'Chevron Gas',\n      category: 'Other',\n      amount: 52.3,\n    },\n    {\n      id: 4,\n      date: 'Jul 05',\n      name: 'Starbucks',\n      category: 'Other',\n      amount: 12.45,\n    },\n    {\n      id: 5,\n      date: 'Jul 02',\n      name: 'Apple Subscription',\n      category: 'Other',\n      amount: 9.99,\n    },\n  ];\n\n  // Click outside logic\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        dropdownRef.current &&\n        !dropdownRef.current.contains(event.target as Node)\n      ) {\n        setIsDropdownOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  const handleMonthSelect = (m: string) => {\n    setSelectedMonth(m);\n    setIsDropdownOpen(false);\n    if (onMonthChange) onMonthChange(m);\n  };\n\n  return (\n    <div className=\"relative mx-auto w-full max-w-130\">\n      <motion.div\n        initial={{ opacity: 0, y: 20, scale: 0.98 }}\n        animate={{ opacity: 1, y: 0, scale: 1 }}\n        transition={{ duration: 0.8, ease: [0.19, 1, 0.22, 1] }}\n      >\n        {/* Corner Borders */}\n        <div\n          className={`${cornerClass} top-0 left-0 z-40 border-t-[1.6px] border-l-[1.6px]`}\n        />\n        <div\n          className={`${cornerClass} top-0 right-0 z-40 border-t-[1.6px] border-r-[1.6px]`}\n        />\n        <div\n          className={`${cornerClass} bottom-0 left-0 z-40 border-b-[1.6px] border-l-[1.6px]`}\n        />\n        <div\n          className={`${cornerClass} right-0 bottom-0 z-40 border-r-[1.6px] border-b-[1.6px]`}\n        />\n\n        <div className=\"relative w-full overflow-visible border-[1.6px] border-black/8 bg-white font-sans text-black shadow-sm dark:border-[#e3d4d4]/10 dark:bg-[#0B0B0B] dark:text-white dark:shadow-2xl\">\n          {/* Top Section */}\n          <div className=\"p-6 pb-4 sm:p-8\">\n            <div className=\"mb-1 flex items-start justify-between\">\n              <p className=\"text-sm font-normal text-zinc-500 sm:text-[18px] dark:text-[#686868]\">\n                Monthly Budget\n              </p>\n\n              {/* --- Month Dropdown --- */}\n              <div className=\"relative\" ref={dropdownRef}>\n                <button\n                  onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n                  className=\"flex min-w-30 items-center justify-between gap-2 border-[1.6px] border-zinc-200 bg-transparent px-3 py-1 text-sm font-normal text-zinc-500 transition-colors hover:bg-zinc-50 sm:gap-4 sm:text-[18px] dark:border-[#1e1d1d] dark:text-[#686868] dark:hover:bg-[#1A1A1A]\"\n                >\n                  {selectedMonth}\n                  <motion.div animate={{ rotate: isDropdownOpen ? 180 : 0 }}>\n                    <ChevronDown\n                      size={16}\n                      className=\"text-zinc-400 dark:text-[#7d7c7c]\"\n                    />\n                  </motion.div>\n                </button>\n\n                <AnimatePresence>\n                  {isDropdownOpen && (\n                    <motion.div\n                      initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                      animate={{ opacity: 1, y: 5, scale: 1 }}\n                      exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                      className=\"absolute top-full right-0 z-100 w-48 overflow-hidden border-[1.6px] border-black/8 bg-white shadow-xl dark:border-[#1e1d1d] dark:bg-[#121212]\"\n                    >\n                      <div className=\"custom-scrollbar max-h-60 overflow-y-auto py-1\">\n                        {months.map((m) => (\n                          <button\n                            key={m}\n                            onClick={() => handleMonthSelect(m)}\n                            className={`flex w-full items-center justify-between px-4 py-2.5 text-left text-sm transition-colors ${\n                              selectedMonth === m\n                                ? 'bg-zinc-100 font-medium text-zinc-900 dark:bg-white/5 dark:text-white'\n                                : 'text-zinc-500 hover:bg-zinc-50 dark:text-zinc-400 dark:hover:bg-white/2'\n                            }`}\n                          >\n                            {m}\n                            {selectedMonth === m && (\n                              <Check\n                                size={14}\n                                className=\"text-zinc-900 dark:text-white\"\n                              />\n                            )}\n                          </button>\n                        ))}\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </div>\n\n            <h2 className=\"mb-6 text-[40px] leading-none font-medium tracking-tight text-zinc-900 sm:mb-10 sm:text-[60px] dark:text-[#F4F4F4]\">\n              ${totalBudget.toLocaleString()}\n            </h2>\n\n            <div className=\"space-y-3\">\n              <p className=\"text-sm font-normal text-zinc-500 sm:text-[18px] dark:text-[#686868]\">\n                Monthly spending limit\n              </p>\n              <div className=\"h-2 w-full overflow-hidden bg-zinc-100 dark:bg-[#222222]\">\n                <motion.div\n                  initial={{ width: 0 }}\n                  animate={{ width: `${spentPercentage}%` }}\n                  transition={smoothTransition}\n                  className=\"h-full bg-linear-to-r from-zinc-400 to-zinc-800 dark:from-[#424243] dark:to-white/90\"\n                />\n              </div>\n              <div className=\"flex items-end justify-between pt-1\">\n                <div className=\"space-y-1.5\">\n                  <span className=\"block text-[12px] font-normal text-zinc-400 capitalize sm:text-[14px] dark:text-[#7e7d7d]\">\n                    Spent\n                  </span>\n                  <div className=\"flex items-center gap-2 sm:gap-4\">\n                    <span className=\"text-[16px] font-normal text-zinc-600 sm:text-[20px] dark:text-[#B3B3B3]\">\n                      ${spentAmount.toLocaleString()}\n                    </span>\n                    <span className=\"border border-black/5 bg-gray-100 px-1.5 py-[1.75px] text-[12px] font-normal text-zinc-500 dark:border-white/10 dark:bg-black dark:bg-linear-to-t dark:from-[#010101]/10 dark:to-white/10 dark:text-[#f1f1f1]/40\">\n                      {spentPercentage}%\n                    </span>\n                  </div>\n                </div>\n                <div className=\"space-y-2 text-right\">\n                  <span className=\"block text-[14px] font-normal text-zinc-400 capitalize sm:text-[16px] dark:text-[#7e7d7d]\">\n                    Remaining\n                  </span>\n                  <span className=\"text-[16px] font-normal text-zinc-600 sm:text-[20px] dark:text-[#B3B3B3]\">\n                    ${remainingAmount.toLocaleString()}\n                  </span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"h-px w-full bg-black/5 dark:bg-white/5\" />\n\n          {/* Bottom Section  */}\n          <div className=\"space-y-6 p-6 pt-7 sm:p-8\">\n            <div className=\"space-y-3\">\n              <p className=\"block text-[14px] font-normal text-zinc-400 capitalize sm:text-[16px] dark:text-[#7e7d7d]\">\n                Spending breakdown\n              </p>\n              <div className=\"flex h-2 gap-2\">\n                {breakdown.map((item, idx) => (\n                  <motion.div\n                    key={idx}\n                    initial={{ scaleX: 0 }}\n                    animate={{ scaleX: 1 }}\n                    transition={{ ...smoothTransition, delay: 0.5 + idx * 0.1 }}\n                    className=\"h-full origin-left\"\n                    style={{ flex: item.amount, background: item.color }}\n                  />\n                ))}\n              </div>\n              <div className=\"grid grid-cols-3 gap-2 sm:gap-4\">\n                {breakdown.map((item, idx) => (\n                  <div className=\"flex flex-col gap-1\" key={idx}>\n                    <p className=\"block truncate text-[12px] font-normal text-zinc-400 capitalize sm:text-[14px] dark:text-[#7e7d7d]\">\n                      {item.label}\n                    </p>\n                    <p className=\"text-[14px] font-normal text-zinc-600 sm:text-[18px] dark:text-[#B3B3B3]\">\n                      ${item.amount.toLocaleString()}\n                    </p>\n                  </div>\n                ))}\n              </div>\n            </div>\n            <button\n              onClick={() => {\n                setIsDetailsOpen(true);\n                if (onViewDetails) onViewDetails();\n              }}\n              className=\"w-full border-[1.6px] border-zinc-200 bg-transparent py-3 text-[14px] font-normal text-zinc-800 transition-colors hover:bg-zinc-50 dark:border-[#1e1d1d]/90 dark:text-[#f1f1f1] dark:hover:bg-white/5\"\n            >\n              View Details\n            </button>\n          </div>\n        </div>\n      </motion.div>\n\n      {/* --- Details Modal --- */}\n      <AnimatePresence>\n        {isDetailsOpen && (\n          <div className=\"absolute inset-0 z-100 flex items-center justify-center p-4\">\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsDetailsOpen(false)}\n              className=\"absolute inset-0 bg-white/60 backdrop-blur-md dark:bg-black/80\"\n            />\n            <motion.div\n              initial={{ y: 20, opacity: 0, scale: 0.95 }}\n              animate={{ y: 0, opacity: 1, scale: 1 }}\n              exit={{ y: 20, opacity: 0, scale: 0.95 }}\n              transition={{ type: 'spring', damping: 25, stiffness: 300 }}\n              className=\"relative flex max-h-[90%] w-full max-w-lg flex-col overflow-hidden border-[1.6px] border-black/8 bg-white shadow-2xl dark:border-white/10 dark:bg-[#0B0B0B]\"\n            >\n              {/* Modal Header */}\n              <div className=\"flex items-center justify-between border-b border-black/5 p-6 dark:border-white/5\">\n                <div>\n                  <h3 className=\"text-lg font-semibold text-zinc-900 dark:text-white\">\n                    Budget Details\n                  </h3>\n                  <p className=\"text-xs text-zinc-500 dark:text-zinc-400\">\n                    Deep dive into your {selectedMonth} spending\n                  </p>\n                </div>\n                <button\n                  onClick={() => setIsDetailsOpen(false)}\n                  className=\"rounded-full p-2 transition-colors hover:bg-zinc-100 dark:hover:bg-white/5\"\n                >\n                  <X size={20} className=\"text-zinc-500 dark:text-zinc-400\" />\n                </button>\n              </div>\n\n              {/* Modal Content */}\n              <div className=\"custom-scrollbar flex-1 space-y-8 overflow-y-auto p-6\">\n                {/* Stats Grid */}\n                <div className=\"grid grid-cols-2 gap-3 sm:gap-4\">\n                  <div className=\"rounded-lg border border-black/5 bg-zinc-50 p-3 transition-colors sm:p-4 dark:border-white/5 dark:bg-white/2\">\n                    <p className=\"mb-1 truncate text-[9px] tracking-wide text-zinc-400 uppercase sm:text-[10px]\">\n                      Total Budget\n                    </p>\n                    <p className=\"text-lg leading-tight font-medium text-zinc-900 sm:text-xl dark:text-white\">\n                      ${totalBudget.toLocaleString()}\n                    </p>\n                  </div>\n                  <div className=\"rounded-lg border border-black/5 bg-zinc-50 p-3 transition-colors sm:p-4 dark:border-white/5 dark:bg-white/2\">\n                    <p className=\"mb-1 truncate text-[9px] tracking-wide text-zinc-400 uppercase sm:text-[10px]\">\n                      Amount Spent\n                    </p>\n                    <p className=\"text-lg leading-tight font-medium text-zinc-600 sm:text-xl dark:text-zinc-300\">\n                      ${spentAmount.toLocaleString()}\n                    </p>\n                  </div>\n                </div>\n\n                {/* Category Breakdown (Detailed) */}\n                <div className=\"space-y-4\">\n                  <h4 className=\"text-xs font-semibold tracking-widest text-zinc-400 uppercase\">\n                    Category Breakdown\n                  </h4>\n                  <div className=\"space-y-4\">\n                    {breakdown.map((item, idx) => {\n                      const percentage = Math.round(\n                        (item.amount / spentAmount) * 100,\n                      );\n                      return (\n                        <div key={idx} className=\"space-y-2\">\n                          <div className=\"flex justify-between text-sm\">\n                            <span className=\"font-medium text-zinc-600 dark:text-zinc-300\">\n                              {item.label}\n                            </span>\n                            <span className=\"text-zinc-400\">{percentage}%</span>\n                          </div>\n                          <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-zinc-100 dark:bg-zinc-900\">\n                            <motion.div\n                              initial={{ width: 0 }}\n                              animate={{ width: `${percentage}%` }}\n                              className=\"h-full rounded-full\"\n                              style={{ background: item.color }}\n                            />\n                          </div>\n                        </div>\n                      );\n                    })}\n                  </div>\n                </div>\n\n                {/* Transactions History */}\n                <div className=\"space-y-4\">\n                  <h4 className=\"text-xs font-semibold tracking-widest text-zinc-400 uppercase\">\n                    Recent Transactions\n                  </h4>\n                  <div className=\"divide-y divide-black/5 border-t border-black/5 dark:divide-white/5 dark:border-white/5\">\n                    {transactions.map((t) => (\n                      <div\n                        key={t.id}\n                        className=\"group -mx-2 flex items-center justify-between gap-2 overflow-hidden rounded-md px-2 py-3 transition-colors hover:bg-zinc-50 sm:gap-4 dark:hover:bg-white/1\"\n                      >\n                        <div className=\"flex min-w-0 flex-1 items-center gap-2 sm:gap-3\">\n                          <div className=\"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-zinc-100 text-[10px] font-bold text-zinc-400 dark:bg-white/5\">\n                            {t.name[0]}\n                          </div>\n                          <div className=\"min-w-0 flex-1\">\n                            <p className=\"truncate text-sm font-medium tracking-tight text-zinc-900 uppercase dark:text-white\">\n                              {t.name}\n                            </p>\n                            <p className=\"truncate text-[10px] text-zinc-500\">\n                              {t.category} • {t.date}\n                            </p>\n                          </div>\n                        </div>\n                        <span className=\"flex-shrink-0 text-sm font-medium text-zinc-900 dark:text-zinc-300\">\n                          -${t.amount.toFixed(2)}\n                        </span>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </div>\n\n              {/* Modal Footer */}\n              <div className=\"border-t border-black/5 p-6 dark:border-white/5\">\n                <button\n                  onClick={() => setIsDetailsOpen(false)}\n                  className=\"w-full bg-zinc-900 py-3 font-medium text-white transition-transform active:scale-[0.98] dark:bg-white dark:text-black\"\n                >\n                  Close Insights\n                </button>\n              </div>\n            </motion.div>\n          </div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "budget-card-base",
      "type": "registry:component",
      "title": "Budget Card (base)",
      "description": "Theme-ready base variant of Budget overview card tracking spending, limits, and remaining balance..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/budget-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronDown, Check, X } from 'lucide-react';\n\ninterface BreakdownItem {\n  label: string;\n  amount: number;\n  color: string;\n}\n\ninterface BudgetCardProps {\n  month: string;\n  totalBudget: number;\n  spentAmount: number;\n  breakdown: BreakdownItem[];\n  onViewDetails?: () => void;\n  onMonthChange?: (month: string) => void;\n}\n\nconst months = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n];\n\nexport const BudgetCard: React.FC<BudgetCardProps> = ({\n  month: initialMonth,\n  totalBudget,\n  spentAmount,\n  breakdown,\n  onViewDetails,\n  onMonthChange,\n}) => {\n  const [selectedMonth, setSelectedMonth] = useState(initialMonth);\n  const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n  const [isDetailsOpen, setIsDetailsOpen] = useState(false);\n  const dropdownRef = useRef<HTMLDivElement>(null);\n\n  const spentPercentage = Math.round((spentAmount / totalBudget) * 100);\n  const remainingAmount = totalBudget - spentAmount;\n\n  const smoothTransition = { duration: 1.5, ease: [0.19, 1, 0.22, 1] } as const;\n  const cornerClass = 'absolute w-5 h-5 border-black/20 dark:border-white/20';\n\n  // Mock Transactions for base view (themed)\n  const transactions = [\n    {\n      id: 1,\n      date: 'Jul 12',\n      name: 'Whole Foods',\n      category: 'Groceries',\n      amount: 84.5,\n    },\n    {\n      id: 2,\n      date: 'Jul 10',\n      name: 'Rent Payment',\n      category: 'Rent',\n      amount: 1600.0,\n    },\n    {\n      id: 3,\n      date: 'Jul 08',\n      name: 'Chevron Gas',\n      category: 'Other',\n      amount: 52.3,\n    },\n  ];\n\n  // Click outside logic\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        dropdownRef.current &&\n        !dropdownRef.current.contains(event.target as Node)\n      ) {\n        setIsDropdownOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  const handleMonthSelect = (m: string) => {\n    setSelectedMonth(m);\n    setIsDropdownOpen(false);\n    if (onMonthChange) onMonthChange(m);\n  };\n\n  return (\n    <div className=\"theme-injected relative mx-auto w-full max-w-lg\">\n      <motion.div\n        initial={{ opacity: 0, y: 20, scale: 0.98 }}\n        animate={{ opacity: 1, y: 0, scale: 1 }}\n        transition={{ duration: 0.8, ease: [0.19, 1, 0.22, 1] }}\n        className=\"relative w-full\"\n      >\n        {/* Corner Borders */}\n        <div\n          className={`${cornerClass} top-0 left-0 z-40 border-t-2 border-l-2`}\n        />\n        <div\n          className={`${cornerClass} top-0 right-0 z-40 border-t-2 border-r-2`}\n        />\n        <div\n          className={`${cornerClass} bottom-0 left-0 z-40 border-b-2 border-l-2`}\n        />\n        <div\n          className={`${cornerClass} right-0 bottom-0 z-40 border-r-2 border-b-2`}\n        />\n\n        <div className=\"bg-card border-border text-foreground relative w-full overflow-visible border font-sans shadow-sm dark:shadow-2xl\">\n          {/* Top Section */}\n          <div className=\"p-6 pb-4 sm:p-8\">\n            <div className=\"mb-1 flex items-start justify-between\">\n              <p className=\"text-muted-foreground text-sm font-normal sm:text-lg\">\n                Monthly Budget\n              </p>\n\n              {/* --- Month Dropdown --- */}\n              <div className=\"relative\" ref={dropdownRef}>\n                <button\n                  onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n                  className=\"border-border text-muted-foreground hover:bg-accent flex min-w-32 items-center justify-between gap-2 border bg-transparent px-3 py-1 text-sm font-normal transition-colors sm:gap-4 sm:text-lg\"\n                >\n                  {selectedMonth}\n                  <motion.div animate={{ rotate: isDropdownOpen ? 180 : 0 }}>\n                    <ChevronDown size={16} className=\"text-muted-foreground\" />\n                  </motion.div>\n                </button>\n\n                <AnimatePresence>\n                  {isDropdownOpen && (\n                    <motion.div\n                      initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                      animate={{ opacity: 1, y: 5, scale: 1 }}\n                      exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                      className=\"bg-popover border-border absolute top-full right-0 z-50 w-48 overflow-hidden border shadow-xl\"\n                    >\n                      <div className=\"custom-scrollbar max-h-60 overflow-y-auto py-1\">\n                        {months.map((m) => (\n                          <button\n                            key={m}\n                            onClick={() => handleMonthSelect(m)}\n                            className={`flex w-full items-center justify-between px-4 py-2.5 text-left text-sm transition-colors ${\n                              selectedMonth === m\n                                ? 'bg-accent text-accent-foreground font-medium'\n                                : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground'\n                            }`}\n                          >\n                            {m}\n                            {selectedMonth === m && (\n                              <Check\n                                size={14}\n                                className=\"text-accent-foreground\"\n                              />\n                            )}\n                          </button>\n                        ))}\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </div>\n\n            <h2 className=\"text-foreground mb-6 text-5xl leading-none font-medium tracking-tight sm:mb-10 sm:text-6xl\">\n              ${totalBudget.toLocaleString()}\n            </h2>\n\n            <div className=\"space-y-3\">\n              <p className=\"text-muted-foreground text-sm font-normal sm:text-lg\">\n                Monthly spending limit\n              </p>\n              <div className=\"bg-secondary h-2 w-full overflow-hidden\">\n                <motion.div\n                  initial={{ width: 0 }}\n                  animate={{ width: `${spentPercentage}%` }}\n                  transition={smoothTransition}\n                  className=\"bg-primary h-full\"\n                />\n              </div>\n              <div className=\"flex items-end justify-between pt-1\">\n                <div className=\"space-y-1.5\">\n                  <span className=\"text-muted-foreground block text-xs font-normal capitalize sm:text-sm\">\n                    Spent\n                  </span>\n                  <div className=\"flex items-center gap-2 sm:gap-4\">\n                    <span className=\"text-foreground text-base font-normal sm:text-xl\">\n                      ${spentAmount.toLocaleString()}\n                    </span>\n                    <span className=\"bg-secondary text-muted-foreground border-border border px-1.5 py-0.5 text-xs font-normal\">\n                      {spentPercentage}%\n                    </span>\n                  </div>\n                </div>\n                <div className=\"space-y-2 text-right\">\n                  <span className=\"text-muted-foreground block text-sm font-normal capitalize sm:text-base\">\n                    Remaining\n                  </span>\n                  <span className=\"text-foreground text-base font-normal sm:text-xl\">\n                    ${remainingAmount.toLocaleString()}\n                  </span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"bg-border h-px w-full\" />\n\n          {/* Bottom Section  */}\n          <div className=\"space-y-6 p-6 pt-7 sm:p-8\">\n            <div className=\"space-y-3\">\n              <p className=\"text-muted-foreground block text-sm font-normal capitalize sm:text-base\">\n                Spending breakdown\n              </p>\n              <div className=\"flex h-2 gap-2\">\n                {breakdown.map((item, idx) => (\n                  <motion.div\n                    key={idx}\n                    initial={{ scaleX: 0 }}\n                    animate={{ scaleX: 1 }}\n                    transition={{ ...smoothTransition, delay: 0.5 + idx * 0.1 }}\n                    className=\"h-full origin-left\"\n                    style={{ flex: item.amount, background: item.color }}\n                  />\n                ))}\n              </div>\n              <div className=\"grid grid-cols-3 gap-2 sm:gap-4\">\n                {breakdown.map((item, idx) => (\n                  <div className=\"flex flex-col gap-1\" key={idx}>\n                    <p className=\"text-muted-foreground block truncate text-xs font-normal capitalize sm:text-sm\">\n                      {item.label}\n                    </p>\n                    <p className=\"text-foreground text-sm font-normal sm:text-lg\">\n                      ${item.amount.toLocaleString()}\n                    </p>\n                  </div>\n                ))}\n              </div>\n            </div>\n            <button\n              onClick={() => {\n                setIsDetailsOpen(true);\n                if (onViewDetails) onViewDetails();\n              }}\n              className=\"border-border text-foreground hover:bg-accent hover:text-accent-foreground w-full border bg-transparent py-3 text-sm font-normal transition-colors\"\n            >\n              View Details\n            </button>\n          </div>\n        </div>\n      </motion.div>\n\n      {/* --- Details Modal (Themed) --- */}\n      <AnimatePresence>\n        {isDetailsOpen && (\n          <div className=\"absolute inset-0 z-50 flex items-center justify-center p-4\">\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsDetailsOpen(false)}\n              className=\"bg-background/60 absolute inset-0 backdrop-blur-md\"\n            />\n            <motion.div\n              initial={{ y: 20, opacity: 0, scale: 0.95 }}\n              animate={{ y: 0, opacity: 1, scale: 1 }}\n              exit={{ y: 20, opacity: 0, scale: 0.95 }}\n              transition={{ type: 'spring', damping: 25, stiffness: 300 }}\n              className=\"bg-card border-border text-foreground relative flex max-h-[90%] w-full max-w-lg flex-col overflow-hidden border font-sans shadow-2xl\"\n            >\n              {/* Modal Header */}\n              <div className=\"border-border flex items-center justify-between border-b p-6\">\n                <div>\n                  <h3 className=\"text-lg font-semibold\">Budget Details</h3>\n                  <p className=\"text-muted-foreground text-xs\">\n                    Deep dive into your {selectedMonth} spending\n                  </p>\n                </div>\n                <button\n                  onClick={() => setIsDetailsOpen(false)}\n                  className=\"hover:bg-accent rounded-full p-2 transition-colors\"\n                >\n                  <X size={20} className=\"text-muted-foreground\" />\n                </button>\n              </div>\n\n              {/* Modal Content */}\n              <div className=\"custom-scrollbar flex-1 space-y-8 overflow-y-auto p-6\">\n                {/* Stats Grid */}\n                <div className=\"grid grid-cols-2 gap-3 sm:gap-4\">\n                  <div className=\"bg-accent/50 border-border rounded-lg border p-3 transition-colors sm:p-4\">\n                    <p className=\"text-muted-foreground mb-1 truncate text-[9px] font-medium tracking-wide uppercase sm:text-[10px]\">\n                      Total Budget\n                    </p>\n                    <p className=\"text-lg leading-tight font-medium sm:text-xl\">\n                      ${totalBudget.toLocaleString()}\n                    </p>\n                  </div>\n                  <div className=\"bg-accent/50 border-border rounded-lg border p-3 transition-colors sm:p-4\">\n                    <p className=\"text-muted-foreground mb-1 truncate text-[9px] font-medium tracking-wide uppercase sm:text-[10px]\">\n                      Amount Spent\n                    </p>\n                    <p className=\"text-lg leading-tight font-medium sm:text-xl\">\n                      ${spentAmount.toLocaleString()}\n                    </p>\n                  </div>\n                </div>\n\n                {/* Category Breakdown */}\n                <div className=\"space-y-4\">\n                  <h4 className=\"text-muted-foreground text-xs font-semibold tracking-widest uppercase\">\n                    Category Breakdown\n                  </h4>\n                  <div className=\"space-y-4\">\n                    {breakdown.map((item, idx) => {\n                      const percentage =\n                        spentAmount > 0\n                          ? Math.round((item.amount / spentAmount) * 100)\n                          : 0;\n                      return (\n                        <div key={idx} className=\"space-y-2\">\n                          <div className=\"flex justify-between text-sm\">\n                            <span className=\"font-medium\">{item.label}</span>\n                            <span className=\"text-muted-foreground\">\n                              {percentage}%\n                            </span>\n                          </div>\n                          <div className=\"bg-secondary h-1.5 w-full overflow-hidden rounded-full\">\n                            <motion.div\n                              initial={{ width: 0 }}\n                              animate={{ width: `${percentage}%` }}\n                              className=\"h-full rounded-full\"\n                              style={{ background: item.color }}\n                            />\n                          </div>\n                        </div>\n                      );\n                    })}\n                  </div>\n                </div>\n\n                {/* Transactions History */}\n                <div className=\"space-y-4\">\n                  <h4 className=\"text-muted-foreground text-xs font-semibold tracking-widest uppercase\">\n                    Recent Transactions\n                  </h4>\n                  <div className=\"border-border divide-border divide-y border-t\">\n                    {transactions.map((t) => (\n                      <div\n                        key={t.id}\n                        className=\"hover:bg-accent/50 group -mx-2 flex items-center justify-between gap-2 overflow-hidden rounded-md px-2 py-3 transition-colors sm:gap-4\"\n                      >\n                        <div className=\"flex min-w-0 flex-1 items-center gap-2 sm:gap-3\">\n                          <div className=\"bg-accent text-muted-foreground flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full text-[10px] font-bold\">\n                            {t.name[0]}\n                          </div>\n                          <div className=\"min-w-0 flex-1\">\n                            <p className=\"truncate text-sm font-medium tracking-tight uppercase\">\n                              {t.name}\n                            </p>\n                            <p className=\"text-muted-foreground truncate text-[10px]\">\n                              {t.category} • {t.date}\n                            </p>\n                          </div>\n                        </div>\n                        <span className=\"flex-shrink-0 text-sm font-medium\">\n                          -${t.amount.toFixed(2)}\n                        </span>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </div>\n\n              {/* Modal Footer */}\n              <div className=\"border-border border-t p-6\">\n                <button\n                  onClick={() => setIsDetailsOpen(false)}\n                  className=\"bg-primary text-primary-foreground w-full py-3 font-medium transition-transform hover:opacity-90 active:scale-[0.98]\"\n                >\n                  Close Insights\n                </button>\n              </div>\n            </motion.div>\n          </div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-widget",
      "type": "registry:component",
      "title": "Calendar Widget",
      "description": "An animated calendar widget featuring progressive blur effects that enhance depth and focus during interaction.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-widget.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, useEffect, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { CalendarDays } from 'lucide-react';\n\nexport interface CalendarEvent {\n  title: string;\n  time: string;\n}\n\nexport interface EventsData {\n  [key: string]: CalendarEvent[];\n}\n\ninterface DateItem {\n  day: number;\n  fullDate: string;\n  month: number;\n  year: number;\n  dateObj: Date;\n  dayOfWeek: number;\n  dayName: string;\n}\n\nexport interface CalendarWidgetProps {\n  events: EventsData;\n  initialSelectedDate: string;\n  currentMonthYear: string;\n}\n\nconst daysOfWeek: string[] = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nexport const CalendarWidget: FC<CalendarWidgetProps> = ({\n  events,\n  initialSelectedDate,\n  currentMonthYear,\n}) => {\n  const [selectedDate, setSelectedDate] = useState<string>(initialSelectedDate);\n\n  const scrollRef = useRef<HTMLDivElement | null>(null);\n  const isDragging = useRef<boolean>(false);\n  const startX = useRef<number>(0);\n  const scrollLeftStart = useRef<number>(0);\n\n  useEffect(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const onMouseDown = (e: MouseEvent) => {\n      isDragging.current = true;\n      startX.current = e.pageX - el.offsetLeft;\n      scrollLeftStart.current = el.scrollLeft;\n      el.style.cursor = 'grabbing';\n    };\n\n    const onMouseLeave = () => {\n      isDragging.current = false;\n      el.style.cursor = 'grab';\n    };\n\n    const onMouseUp = () => {\n      isDragging.current = false;\n      el.style.cursor = 'grab';\n    };\n\n    const onMouseMove = (e: MouseEvent) => {\n      if (!isDragging.current) return;\n      e.preventDefault();\n      const x = e.pageX - el.offsetLeft;\n      const walk = (x - startX.current) * 1;\n      el.scrollLeft = scrollLeftStart.current - walk;\n    };\n\n    el.style.cursor = 'grab';\n    el.addEventListener('mousedown', onMouseDown);\n    el.addEventListener('mouseleave', onMouseLeave);\n    el.addEventListener('mouseup', onMouseUp);\n    el.addEventListener('mousemove', onMouseMove);\n\n    return () => {\n      el.removeEventListener('mousedown', onMouseDown);\n      el.removeEventListener('mouseleave', onMouseLeave);\n      el.removeEventListener('mouseup', onMouseUp);\n      el.removeEventListener('mousemove', onMouseMove);\n    };\n  }, []);\n\n  const dates: DateItem[] = Array.from({ length: 92 }, (_, i) => {\n    const date = new Date(2024, 8, 1 + i);\n    return {\n      day: date.getDate(),\n      fullDate: date.toISOString().split('T')[0],\n      month: date.getMonth(),\n      year: date.getFullYear(),\n      dateObj: date,\n      dayOfWeek: date.getDay(),\n      dayName: daysOfWeek[date.getDay()],\n    };\n  });\n\n  return (\n      <div className=\"flex w-[340px] flex-col rounded-[30px] border border-black/10 bg-[#F6F5FA] shadow-lg transition-colors duration-500 select-none dark:border-white/5 dark:bg-zinc-900\">\n        <div className=\"p-4\">\n          <motion.div\n            key={currentMonthYear}\n            initial={{ opacity: 0, y: -5 }}\n            animate={{ opacity: 1, y: 0 }}\n            className=\"ml-2 text-xl font-semibold dark:text-white\"\n          >\n            {currentMonthYear}\n          </motion.div>\n\n          <div className=\"relative\">\n            <div\n              ref={scrollRef}\n              className=\"scrollbar-hide flex gap-2 overflow-x-auto px-2\"\n              style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n            >\n              {dates.map((date) => {\n                const isSelected = selectedDate === date.fullDate;\n                const hasEvent = events[date.fullDate]?.length > 0;\n\n                return (\n                  <div\n                    key={date.fullDate}\n                    className=\"relative flex min-w-10 flex-col items-center pt-4\"\n                  >\n                    <div\n                      className={`mb-1 text-base font-medium transition-colors duration-300 ${isSelected\n                          ? 'text-black dark:text-white'\n                          : 'text-gray-500 dark:text-zinc-500'\n                        }`}\n                    >\n                      {date.dayName}\n                    </div>\n\n                    <motion.div\n                      className=\"relative flex cursor-pointer flex-col items-center\"\n                      whileTap={{ scale: 0.9 }}\n                      onClick={() => setSelectedDate(date.fullDate)}\n                    >\n                      <div className=\"relative flex h-10 w-10 items-center justify-center\">\n                        {isSelected && (\n                          <motion.div\n                            layoutId=\"selected-date-bg\"\n                            transition={{\n                              type: 'spring',\n                              stiffness: 180,\n                              damping: 22,\n                            }}\n                            className=\"absolute inset-0 rounded-full bg-white shadow-sm dark:bg-zinc-800\"\n                          />\n                        )}\n                        <span\n                          className={`relative z-10 text-base font-medium ${isSelected\n                              ? 'text-black dark:text-white'\n                              : 'text-black/80 dark:text-zinc-400'\n                            }`}\n                        >\n                          {date.day}\n                        </span>\n                      </div>\n                      <AnimatePresence mode=\"popLayout\" initial={false}>\n                        {hasEvent && !isSelected && (\n                          <motion.span\n                            initial={{\n                              opacity: 0,\n                              scale: 0,\n                              filter: 'blur(4px)',\n                            }}\n                            animate={{\n                              opacity: 1,\n                              scale: 1,\n                              filter: 'blur(0px)',\n                            }}\n                            exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                            transition={{\n                              duration: 0.3,\n                            }}\n                            className=\"h-1.5 w-1.5 -translate-y-1/2 rounded-full bg-[#cecdd1] will-change-transform dark:bg-zinc-700\"\n                          />\n                        )}\n                      </AnimatePresence>\n                    </motion.div>\n                  </div>\n                );\n              })}\n            </div>\n          </div>\n        </div>\n\n        <div className=\"relative flex h-52 flex-col overflow-hidden rounded-[28px] border border-black/10 bg-white px-4 pt-2 transition-colors duration-500 dark:border-white/10 dark:bg-zinc-950\">\n          <motion.div className=\"no-scrollbar relative h-full overflow-y-scroll\">\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {events[selectedDate]?.length ? (\n                <motion.div key=\"list\" className=\"pb-8\">\n                  {events[selectedDate].map((event) => (\n                    <motion.div\n                      key={event.title}\n                      initial={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                      animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                      exit={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                      transition={{\n                        duration: 0.3,\n                        ease: 'easeOut',\n                      }}\n                      className=\"flex flex-col border-b border-gray-200 py-2 last:border-b-0 dark:border-zinc-800\"\n                    >\n                      <span className=\"text-base font-medium text-black/70 dark:text-zinc-300\">\n                        {event.title}\n                      </span>\n                      <span className=\"text-base text-gray-500 dark:text-zinc-500\">\n                        {event.time}\n                      </span>\n                    </motion.div>\n                  ))}\n                </motion.div>\n              ) : (\n                <motion.div\n                  key=\"no-events\"\n                  initial={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                  transition={{\n                    duration: 0.3,\n                    ease: 'easeOut',\n                  }}\n                  className=\"flex h-40 flex-col items-center justify-center gap-3\"\n                >\n                  <div className=\"rounded- bg-zinc-100 p-5 dark:bg-zinc-800\">\n                    <CalendarDays className=\"size-8 text-zinc-500 dark:text-zinc-300\" />\n                  </div>\n                  <p className=\"text-sm text-neutral-500 dark:text-zinc-500\">\n                    No Events\n                  </p>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n\n          <div className=\"pointer-events-none absolute right-0 bottom-0 left-0 h-16 rounded-b-[30px] bg-linear-to-t from-white via-white/70 to-transparent dark:from-zinc-950 dark:via-zinc-950/20\" />\n        </div>\n      </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-widget-base",
      "type": "registry:component",
      "title": "Calendar Widget (base)",
      "description": "Theme-ready base variant of An animated calendar widget featuring progressive blur effects that enhance depth and focus during interaction..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-widget.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, useEffect, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { CalendarDays } from 'lucide-react';\n\nexport interface CalendarEvent {\n  title: string;\n  time: string;\n}\n\nexport interface EventsData {\n  [key: string]: CalendarEvent[];\n}\n\ninterface DateItem {\n  day: number;\n  fullDate: string;\n  month: number;\n  year: number;\n  dateObj: Date;\n  dayOfWeek: number;\n  dayName: string;\n}\n\nexport interface CalendarWidgetProps {\n  events: EventsData;\n  initialSelectedDate: string;\n  currentMonthYear: string;\n}\n\nconst daysOfWeek: string[] = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nexport const CalendarWidget: FC<CalendarWidgetProps> = ({\n  events,\n  initialSelectedDate,\n  currentMonthYear,\n}) => {\n  const [selectedDate, setSelectedDate] = useState<string>(initialSelectedDate);\n\n  const scrollRef = useRef<HTMLDivElement | null>(null);\n  const isDragging = useRef<boolean>(false);\n  const startX = useRef<number>(0);\n  const scrollLeftStart = useRef<number>(0);\n\n  useEffect(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const onMouseDown = (e: MouseEvent) => {\n      isDragging.current = true;\n      startX.current = e.pageX - el.offsetLeft;\n      scrollLeftStart.current = el.scrollLeft;\n      el.style.cursor = 'grabbing';\n    };\n\n    const onMouseLeave = () => {\n      isDragging.current = false;\n      el.style.cursor = 'grab';\n    };\n\n    const onMouseUp = () => {\n      isDragging.current = false;\n      el.style.cursor = 'grab';\n    };\n\n    const onMouseMove = (e: MouseEvent) => {\n      if (!isDragging.current) return;\n      e.preventDefault();\n      const x = e.pageX - el.offsetLeft;\n      const walk = (x - startX.current) * 1;\n      el.scrollLeft = scrollLeftStart.current - walk;\n    };\n\n    el.style.cursor = 'grab';\n    el.addEventListener('mousedown', onMouseDown);\n    el.addEventListener('mouseleave', onMouseLeave);\n    el.addEventListener('mouseup', onMouseUp);\n    el.addEventListener('mousemove', onMouseMove);\n\n    return () => {\n      el.removeEventListener('mousedown', onMouseDown);\n      el.removeEventListener('mouseleave', onMouseLeave);\n      el.removeEventListener('mouseup', onMouseUp);\n      el.removeEventListener('mousemove', onMouseMove);\n    };\n  }, []);\n\n  const dates: DateItem[] = Array.from({ length: 92 }, (_, i) => {\n    const date = new Date(2024, 8, 1 + i);\n    return {\n      day: date.getDate(),\n      fullDate: date.toISOString().split('T')[0],\n      month: date.getMonth(),\n      year: date.getFullYear(),\n      dateObj: date,\n      dayOfWeek: date.getDay(),\n      dayName: daysOfWeek[date.getDay()],\n    };\n  });\n\n  return (\n    <div className=\"theme-injected border-border bg-muted flex w-[340px] flex-col rounded-lg border shadow-lg transition-colors duration-500 select-none\">\n      <div className=\"p-4\">\n        <motion.div\n          key={currentMonthYear}\n          initial={{ opacity: 0, y: -5 }}\n          animate={{ opacity: 1, y: 0 }}\n          className=\"text-foreground ml-2 text-xl font-semibold\"\n        >\n          {currentMonthYear}\n        </motion.div>\n\n        <div className=\"relative\">\n          <div\n            ref={scrollRef}\n            className=\"scrollbar-hide flex gap-2 overflow-x-auto px-2\"\n            style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n          >\n            {dates.map((date) => {\n              const isSelected = selectedDate === date.fullDate;\n              const hasEvent = events[date.fullDate]?.length > 0;\n\n              return (\n                <div\n                  key={date.fullDate}\n                  className=\"relative flex min-w-10 flex-col items-center pt-4\"\n                >\n                  <div\n                    className={`mb-1 text-base font-medium transition-colors duration-300 ${\n                      isSelected ? 'text-foreground' : 'text-muted-foreground'\n                    }`}\n                  >\n                    {date.dayName}\n                  </div>\n\n                  <motion.div\n                    className=\"relative flex cursor-pointer flex-col items-center\"\n                    whileTap={{ scale: 0.9 }}\n                    onClick={() => setSelectedDate(date.fullDate)}\n                  >\n                    <div className=\"relative flex h-10 w-10 items-center justify-center\">\n                      {isSelected && (\n                        <motion.div\n                          layoutId=\"selected-date-bg\"\n                          transition={{\n                            type: 'spring',\n                            stiffness: 180,\n                            damping: 22,\n                          }}\n                          className=\"bg-background absolute inset-0 rounded-lg shadow-sm\"\n                        />\n                      )}\n                      <span\n                        className={`relative z-10 text-base font-medium ${\n                          isSelected ? 'text-foreground' : 'text-foreground/80'\n                        }`}\n                      >\n                        {date.day}\n                      </span>\n                    </div>\n                    <AnimatePresence mode=\"popLayout\" initial={false}>\n                      {hasEvent && !isSelected && (\n                        <motion.span\n                          initial={{\n                            opacity: 0,\n                            scale: 0,\n                            filter: 'blur(4px)',\n                          }}\n                          animate={{\n                            opacity: 1,\n                            scale: 1,\n                            filter: 'blur(0px)',\n                          }}\n                          exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                          transition={{\n                            duration: 0.3,\n                          }}\n                          className=\"bg-muted-foreground h-1.5 w-1.5 -translate-y-1/2 rounded-full\"\n                        />\n                      )}\n                    </AnimatePresence>\n                  </motion.div>\n                </div>\n              );\n            })}\n          </div>\n        </div>\n      </div>\n\n      <div className=\"border-border bg-card relative flex h-52 flex-col overflow-hidden rounded-lg border px-4 pt-2 transition-colors duration-500\">\n        <motion.div className=\"no-scrollbar relative h-full overflow-y-scroll\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {events[selectedDate]?.length ? (\n              <motion.div key=\"list\" className=\"pb-8\">\n                {events[selectedDate].map((event) => (\n                  <motion.div\n                    key={event.title}\n                    initial={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                    transition={{\n                      duration: 0.3,\n                      ease: 'easeOut',\n                    }}\n                    className=\"border-border flex flex-col border-b py-2 last:border-b-0\"\n                  >\n                    <span className=\"text-foreground/70 text-base font-medium\">\n                      {event.title}\n                    </span>\n                    <span className=\"text-muted-foreground text-base\">\n                      {event.time}\n                    </span>\n                  </motion.div>\n                ))}\n              </motion.div>\n            ) : (\n              <motion.div\n                key=\"no-events\"\n                initial={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                transition={{\n                  duration: 0.3,\n                  ease: 'easeOut',\n                }}\n                className=\"flex h-40 flex-col items-center justify-center gap-3\"\n              >\n                <div className=\"bg-muted rounded-lg p-5\">\n                  <CalendarDays className=\"text-muted-foreground size-8\" />\n                </div>\n                <p className=\"text-muted-foreground text-sm\">No Events</p>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n        {events[selectedDate]?.length && (\n          <div className=\"from-background via-background/70 pointer-events-none absolute right-0 bottom-0 left-0 h-16 rounded-lg bg-linear-to-t to-transparent\" />\n        )}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-cue",
      "type": "registry:component",
      "title": "Card Cue",
      "description": "Interactive micro-interaction component.",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/card-cue.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useRef, useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, X } from 'lucide-react';\n\nexport default function CardCue() {\n  const [cardNumber, setCardNumber] = useState('');\n  const [expiration, setExpiration] = useState('');\n  const [cvv, setCvv] = useState('');\n  const [isErrorAnimation, setIsErrorAnimation] = useState(false);\n  const [cardNumberFocused, setCardNumberFocused] = useState(false);\n\n  const cardNumberRef = useRef<HTMLInputElement>(null);\n\n  const handleAddCard = () => {\n    if (!cardNumber.trim()) {\n      setIsErrorAnimation(true);\n      setCardNumberFocused(true);\n      cardNumberRef.current?.focus();\n      setTimeout(() => setIsErrorAnimation(false), 200);\n    } else {\n      console.log('Card added', { cardNumber, expiration, cvv });\n    }\n  };\n\n  return (\n    <div className=\"flex h-screen w-full items-center justify-center \">\n      <div className=\"mx-auto flex w-full max-w-sm flex-col gap-6 rounded-3xl bg-white p-6 dark:bg-zinc-950/50 border border-border\">\n        <div className=\"flex items-center justify-between\">\n          <button className=\"flex h-10 w-10 items-center justify-center rounded-full bg-zinc-100 text-zinc-600 transition-colors hover:bg-zinc-200 focus:outline-none dark:bg-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800\">\n            <ChevronLeft className=\"h-5 w-5\" />\n          </button>\n          <h2 className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Add Card\n          </h2>\n          <button className=\"flex h-10 w-10 items-center justify-center rounded-full bg-zinc-100 text-zinc-600 transition-colors hover:bg-zinc-200 focus:outline-none dark:bg-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800\">\n            <X className=\"h-5 w-5\" />\n          </button>\n        </div>\n\n        <div className=\"flex flex-col gap-4\">\n          <motion.div\n            animate={\n              isErrorAnimation\n                ? {\n                    scale: 1.1,\n                  }\n                : { scale: 1 }\n            }\n            transition={{ type: 'spring', bounce: 0.1, duration: 0.4 }}\n            className=\"rounded-2xl\"\n          >\n            <input\n              ref={cardNumberRef}\n              type=\"text\"\n              placeholder=\"Card Number\"\n              value={cardNumber}\n              onChange={(e) => setCardNumber(e.target.value)}\n              onFocus={() => setCardNumberFocused(true)}\n              onBlur={() => setCardNumberFocused(false)}\n              className={`h-14 w-full rounded-2xl bg-zinc-100 px-4 text-base text-zinc-900 ring-3 transition-all outline-none placeholder:text-zinc-400 focus:bg-white dark:bg-zinc-900 dark:text-zinc-100 dark:placeholder:text-zinc-500 dark:focus:bg-zinc-950 ${\n                cardNumberFocused\n                  ? 'ring-zinc-900 dark:ring-zinc-100'\n                  : 'ring-transparent'\n              }`}\n            />\n          </motion.div>\n\n          <div className=\"flex gap-4\">\n            <input\n              type=\"text\"\n              placeholder=\"Expiration\"\n              value={expiration}\n              onChange={(e) => setExpiration(e.target.value)}\n              className=\"h-14 w-full rounded-2xl bg-zinc-100 px-4 text-base text-zinc-900 ring-3 ring-transparent transition-all outline-none placeholder:text-zinc-400 focus:bg-white focus:ring-zinc-900 dark:bg-zinc-900 dark:text-zinc-100 dark:placeholder:text-zinc-500 dark:focus:bg-zinc-950 dark:focus:ring-zinc-100\"\n            />\n            <input\n              type=\"text\"\n              placeholder=\"CVV\"\n              value={cvv}\n              onChange={(e) => setCvv(e.target.value)}\n              className=\"h-14 w-full rounded-2xl bg-zinc-100 px-4 text-base text-zinc-900 ring-3 ring-transparent transition-all outline-none placeholder:text-zinc-400 focus:bg-white focus:ring-zinc-900 dark:bg-zinc-900 dark:text-zinc-100 dark:placeholder:text-zinc-500 dark:focus:bg-zinc-950 dark:focus:ring-zinc-100\"\n            />\n          </div>\n        </div>\n\n        <motion.button\n          whileTap={{ scale: 0.97 }}\n          onClick={handleAddCard}\n          className=\"mt-2 w-full rounded-2xl bg-zinc-900 py-4 text-base font-medium text-white transition-colors hover:bg-zinc-800 focus:outline-none dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200\"\n        >\n          Add Card\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-cue-base",
      "type": "registry:component",
      "title": "Card Cue (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component..",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/card-cue.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useRef, useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, X } from 'lucide-react';\n\nexport default function CardCue() {\n  const [cardNumber, setCardNumber] = useState('');\n  const [expiration, setExpiration] = useState('');\n  const [cvv, setCvv] = useState('');\n  const [isErrorAnimation, setIsErrorAnimation] = useState(false);\n  const [cardNumberFocused, setCardNumberFocused] = useState(false);\n\n  const cardNumberRef = useRef<HTMLInputElement>(null);\n\n  const handleAddCard = () => {\n    if (!cardNumber.trim()) {\n      setIsErrorAnimation(true);\n      setCardNumberFocused(true);\n      cardNumberRef.current?.focus();\n      setTimeout(() => setIsErrorAnimation(false), 200);\n    } else {\n      console.log('Card added', { cardNumber, expiration, cvv });\n    }\n  };\n\n  return (\n    <div className=\"theme-injected  flex h-screen w-full items-center justify-center\">\n      <div className=\"border-border bg-card text-card-foreground mx-auto flex w-full max-w-sm flex-col gap-6 rounded-3xl border p-6\">\n        <div className=\"flex items-center justify-between\">\n          <button className=\"bg-muted text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-10 w-10 items-center justify-center rounded-full transition-colors focus:outline-none\">\n            <ChevronLeft className=\"h-5 w-5\" />\n          </button>\n\n          <h2 className=\"text-foreground text-lg font-semibold\">Add Card</h2>\n\n          <button className=\"bg-muted text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-10 w-10 items-center justify-center rounded-full transition-colors focus:outline-none\">\n            <X className=\"h-5 w-5\" />\n          </button>\n        </div>\n\n        <div className=\"flex flex-col gap-4\">\n          <motion.div\n            animate={\n              isErrorAnimation\n                ? {\n                    scale: 1.1,\n                  }\n                : { scale: 1 }\n            }\n            transition={{ type: 'spring', bounce: 0.1, duration: 0.4 }}\n            className=\"rounded-2xl\"\n          >\n            <input\n              ref={cardNumberRef}\n              type=\"text\"\n              placeholder=\"Card Number\"\n              value={cardNumber}\n              onChange={(e) => setCardNumber(e.target.value)}\n              onFocus={() => setCardNumberFocused(true)}\n              onBlur={() => setCardNumberFocused(false)}\n              className={`bg-muted text-foreground placeholder:text-muted-foreground focus:bg-background h-14 w-full rounded-2xl px-4 text-base ring-3 transition-all outline-none ${\n                cardNumberFocused ? 'ring-ring' : 'ring-transparent'\n              }`}\n            />\n          </motion.div>\n\n          <div className=\"flex gap-4\">\n            <input\n              type=\"text\"\n              placeholder=\"Expiration\"\n              value={expiration}\n              onChange={(e) => setExpiration(e.target.value)}\n              className=\"bg-muted text-foreground placeholder:text-muted-foreground focus:bg-background focus:ring-ring h-14 w-full rounded-2xl px-4 text-base ring-3 ring-transparent transition-all outline-none\"\n            />\n\n            <input\n              type=\"text\"\n              placeholder=\"CVV\"\n              value={cvv}\n              onChange={(e) => setCvv(e.target.value)}\n              className=\"bg-muted text-foreground placeholder:text-muted-foreground focus:bg-background focus:ring-ring h-14 w-full rounded-2xl px-4 text-base ring-3 ring-transparent transition-all outline-none\"\n            />\n          </div>\n        </div>\n\n        <motion.button\n          whileTap={{ scale: 0.97 }}\n          onClick={handleAddCard}\n          className=\"bg-primary text-primary-foreground mt-2 w-full rounded-2xl py-4 text-base font-medium transition-colors hover:opacity-90 focus:outline-none\"\n        >\n          Add Card\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-split-accordian",
      "type": "registry:component",
      "title": "Card Split Accordian",
      "description": "An animated card split accordion that smoothly expands to reveal detailed information.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/card-split-accordian.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type FC } from 'react';\nimport { motion, MotionConfig, type Transition } from 'motion/react';\nimport { ChevronDown, Send } from 'lucide-react';\nimport { HiCursorArrowRipple } from 'react-icons/hi2';\nimport { Layers } from 'lucide-react';\nimport { IoIosTimer } from 'react-icons/io';\nimport { PiHandTap } from 'react-icons/pi';\nimport useMeasure from 'react-use-measure';\n\nexport interface AccordionItemData {\n  id: number;\n  title: string;\n  icon: React.ReactNode;\n  content: string;\n}\n\ninterface AccordionItemProps {\n  item: AccordionItemData;\n\n  setOpenId: (id: number | null) => void;\n  index: number;\n  total: number;\n  openIndex: number;\n}\ninterface AccordionProps {\n  items?: AccordionItemData[];\n}\n\nconst springTransition: Transition = {\n  type: 'spring',\n  stiffness: 600,\n  damping: 50,\n  mass: 1,\n};\n\nconst DEFAULT_ITEMS: AccordionItemData[] = [\n  {\n    id: 1,\n    title: 'What is Interaction Design?',\n    icon: <HiCursorArrowRipple className=\"size-3 -rotate-10 md:size-4\" />,\n    content:\n      'Interaction design focuses on creating engaging interfaces with well-thought-out behaviors and actions.',\n  },\n  {\n    id: 2,\n    title: 'Principles & Patterns',\n    icon: <Layers size={24} />,\n    content:\n      'Fundamental guidelines and repeated solutions that ensure consistency and usability in design.',\n  },\n  {\n    id: 3,\n    title: 'Usability & Accessibility',\n    icon: <PiHandTap size={26} className=\"-rotate-20\" />,\n    content:\n      'Designing experiences that are easy to use and accessible to people of all abilities.',\n  },\n  {\n    id: 4,\n    title: 'Prototyping & Testing',\n    icon: <Send size={24} />,\n    content:\n      'Rapid experimentation and validation of ideas through prototypes and real user testing.',\n  },\n  {\n    id: 5,\n    title: 'UX Optimisation',\n    icon: <IoIosTimer size={26} />,\n    content:\n      'Improving user experience by analyzing behavior and refining interactions over time.',\n  },\n];\n\nconst AccordionItem: FC<AccordionItemProps> = ({\n  item,\n  setOpenId,\n  index,\n  total,\n  openIndex,\n}) => {\n  const [ref, bounds] = useMeasure();\n  const isOpen = index === openIndex;\n\n  const isFirst = index === 0;\n  const isLast = index === total - 1;\n\n  const isBeforeOpen = index === openIndex - 1;\n  const isAfterOpen = index === openIndex + 1;\n\n  const isAlone = (isAfterOpen && isLast) || (isBeforeOpen && isFirst);\n\n  const BORDER_WIDTH = '1px';\n  const BORDER_STYLE = 'solid';\n  const borderTopWidth =\n    isFirst || isAfterOpen || isOpen ? BORDER_WIDTH : '0px';\n  const borderBottomWidth =\n    isLast || isBeforeOpen || isOpen ? BORDER_WIDTH : '0px';\n  const borderLeftWidth = BORDER_WIDTH;\n  const borderRightWidth = BORDER_WIDTH;\n\n  let borderTopLeftRadius = 0;\n  let borderTopRightRadius = 0;\n  let borderBottomLeftRadius = 0;\n  let borderBottomRightRadius = 0;\n\n  if (isOpen || isAlone) {\n    borderTopLeftRadius = 20;\n    borderTopRightRadius = 20;\n    borderBottomLeftRadius = 20;\n    borderBottomRightRadius = 20;\n  } else if (isBeforeOpen) {\n    borderBottomLeftRadius = 20;\n    borderBottomRightRadius = 20;\n  } else if (isAfterOpen) {\n    borderTopLeftRadius = 20;\n    borderTopRightRadius = 20;\n  } else if (isFirst) {\n    borderTopLeftRadius = 20;\n    borderTopRightRadius = 20;\n  } else if (isLast) {\n    borderBottomLeftRadius = 20;\n    borderBottomRightRadius = 20;\n  }\n\n  return (\n    <MotionConfig transition={springTransition}>\n      <motion.li layout>\n        <motion.div\n          animate={{\n            borderTopLeftRadius,\n            borderTopRightRadius,\n            borderBottomLeftRadius,\n            borderBottomRightRadius,\n          }}\n          className=\"overflow-hidden border-solid border-zinc-200 bg-zinc-50 will-change-transform dark:border-zinc-800 dark:bg-zinc-900\"\n          style={{\n            borderTopWidth,\n            borderBottomWidth,\n            borderLeftWidth,\n            borderRightWidth,\n            borderStyle: BORDER_STYLE,\n            marginBlock: isOpen ? '10px' : '0px',\n          }}\n        >\n          <button\n            onClick={() => setOpenId(isOpen ? null : item.id)}\n            className=\"flex w-full cursor-pointer items-center justify-between px-[12px] py-[10px]\"\n          >\n            <div className=\"flex items-center gap-[12px]\">\n              {item.icon}\n\n              <span className=\"text-sm font-bold text-[#272729] md:text-lg dark:text-zinc-100\">\n                {item.title}\n              </span>\n            </div>\n\n            <motion.div animate={{ rotate: isOpen ? 180 : 0 }}>\n              <ChevronDown className=\"size-5 text-neutral-400 md:size-[1.625rem] dark:text-zinc-600\" />\n            </motion.div>\n          </button>\n\n          <motion.div\n            initial={false}\n            animate={{\n              height: isOpen ? bounds.height : 0,\n              opacity: isOpen ? 1 : 0,\n            }}\n            className=\"overflow-hidden will-change-transform\"\n          >\n            <div ref={ref}>\n              <div className=\"px-5 pb-5 text-xs font-medium text-[#545359] md:text-[18px] dark:text-zinc-400\">\n                {item.content}\n              </div>\n            </div>\n          </motion.div>\n        </motion.div>\n      </motion.li>\n    </MotionConfig>\n  );\n};\n\nexport const AccordionApp: FC<AccordionProps> = ({ items }) => {\n  const defaultItems = items ?? DEFAULT_ITEMS;\n\n  const [openId, setOpenId] = useState<number | null>(null);\n\n  const openIndex = defaultItems.findIndex((item) => item.id === openId);\n\n  return (\n    <div className=\"flex w-full flex-col items-center justify-center p-6 transition-colors duration-500\">\n      <ul className=\"w-xs md:w-sm\">\n        {defaultItems.map((item, index) => (\n          <AccordionItem\n            key={item.id}\n            item={item}\n            setOpenId={setOpenId}\n            index={index}\n            total={defaultItems.length}\n            openIndex={openIndex}\n          />\n        ))}\n      </ul>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-split-accordian-base",
      "type": "registry:component",
      "title": "Card Split Accordian (base)",
      "description": "Theme-ready base variant of An animated card split accordion that smoothly expands to reveal detailed information..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/card-split-accordian.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type FC } from 'react';\nimport { motion, MotionConfig, type Transition } from 'motion/react';\nimport { ChevronDown, Send } from 'lucide-react';\nimport { HiCursorArrowRipple } from 'react-icons/hi2';\nimport { Layers } from 'lucide-react';\nimport { IoIosTimer } from 'react-icons/io';\nimport { PiHandTap } from 'react-icons/pi';\nimport useMeasure from 'react-use-measure';\n\nexport interface AccordionItemData {\n  id: number;\n  title: string;\n  icon: React.ReactNode;\n  content: string;\n}\n\ninterface AccordionItemProps {\n  item: AccordionItemData;\n  setOpenId: (id: number | null) => void;\n  index: number;\n  total: number;\n  openIndex: number;\n}\ninterface AccordionProps {\n  items?: AccordionItemData[];\n}\n\nconst springTransition: Transition = {\n  type: 'spring',\n  stiffness: 600,\n  damping: 50,\n  mass: 1,\n};\n\nconst DEFAULT_ITEMS: AccordionItemData[] = [\n  {\n    id: 1,\n    title: 'What is Interaction Design?',\n    icon: <HiCursorArrowRipple size={28} className=\"-rotate-10\" />,\n    content:\n      'Interaction design focuses on creating engaging interfaces with well-thought-out behaviors and actions.',\n  },\n  {\n    id: 2,\n    title: 'Principles & Patterns',\n    icon: <Layers size={24} />,\n    content:\n      'Fundamental guidelines and repeated solutions that ensure consistency and usability in design.',\n  },\n  {\n    id: 3,\n    title: 'Usability & Accessibility',\n    icon: <PiHandTap size={26} className=\"-rotate-20\" />,\n    content:\n      'Designing experiences that are easy to use and accessible to people of all abilities.',\n  },\n  {\n    id: 4,\n    title: 'Prototyping & Testing',\n    icon: <Send size={24} />,\n    content:\n      'Rapid experimentation and validation of ideas through prototypes and real user testing.',\n  },\n  {\n    id: 5,\n    title: 'UX Optimisation',\n    icon: <IoIosTimer size={26} />,\n    content:\n      'Improving user experience by analyzing behavior and refining interactions over time.',\n  },\n];\n\nconst AccordionItem: FC<AccordionItemProps> = ({\n  item,\n  setOpenId,\n  index,\n  total,\n  openIndex,\n}) => {\n  const [ref, bounds] = useMeasure();\n  const isOpen = index === openIndex;\n\n  const isFirst = index === 0;\n  const isLast = index === total - 1;\n\n  const isBeforeOpen = index === openIndex - 1;\n  const isAfterOpen = index === openIndex + 1;\n\n  const isAlone = (isAfterOpen && isLast) || (isBeforeOpen && isFirst);\n\n  const BORDER_WIDTH = '1px';\n  const BORDER_STYLE = 'solid';\n  const borderTopWidth =\n    isFirst || isAfterOpen || isOpen ? BORDER_WIDTH : '0px';\n  const borderBottomWidth =\n    isLast || isBeforeOpen || isOpen ? BORDER_WIDTH : '0px';\n  const borderLeftWidth = BORDER_WIDTH;\n  const borderRightWidth = BORDER_WIDTH;\n\n  let borderTopLeftRadius: number | string = 0;\n  let borderTopRightRadius: number | string = 0;\n  let borderBottomLeftRadius: number | string = 0;\n  let borderBottomRightRadius: number | string = 0;\n\n  const RADIUS = 'var(--radius)';\n\n  if (isOpen || isAlone) {\n    borderTopLeftRadius = RADIUS;\n    borderTopRightRadius = RADIUS;\n    borderBottomLeftRadius = RADIUS;\n    borderBottomRightRadius = RADIUS;\n  } else if (isBeforeOpen) {\n    borderBottomLeftRadius = RADIUS;\n    borderBottomRightRadius = RADIUS;\n  } else if (isAfterOpen) {\n    borderTopLeftRadius = RADIUS;\n    borderTopRightRadius = RADIUS;\n  } else if (isFirst) {\n    borderTopLeftRadius = RADIUS;\n    borderTopRightRadius = RADIUS;\n  } else if (isLast) {\n    borderBottomLeftRadius = RADIUS;\n    borderBottomRightRadius = RADIUS;\n  }\n\n  return (\n    <MotionConfig transition={springTransition}>\n      <motion.li layout>\n        <motion.div\n          animate={{\n            borderTopLeftRadius,\n            borderTopRightRadius,\n            borderBottomLeftRadius,\n            borderBottomRightRadius,\n          }}\n          className=\"border-border bg-card overflow-hidden border-solid will-change-transform\"\n          style={{\n            borderTopWidth,\n            borderBottomWidth,\n            borderLeftWidth,\n            borderRightWidth,\n            borderStyle: BORDER_STYLE,\n            marginBlock: isOpen ? '10px' : '0px',\n          }}\n        >\n          <button\n            onClick={() => setOpenId(isOpen ? null : item.id)}\n            className=\"flex w-full cursor-pointer items-center justify-between px-[12px] py-[10px]\"\n          >\n            <div className=\"text-card-foreground flex items-center gap-[12px]\">\n              {item.icon}\n\n              <span className=\"text-card-foreground text-lg font-bold\">\n                {item.title}\n              </span>\n            </div>\n\n            <motion.div animate={{ rotate: isOpen ? 180 : 0 }}>\n              <ChevronDown className=\"text-muted-foreground\" />\n            </motion.div>\n          </button>\n\n          <motion.div\n            initial={false}\n            animate={{\n              height: isOpen ? bounds.height : 0,\n              opacity: isOpen ? 1 : 0,\n            }}\n            className=\"overflow-hidden will-change-transform\"\n          >\n            <div ref={ref}>\n              <div className=\"text-muted-foreground px-5 pb-5 text-[18px] font-medium\">\n                {item.content}\n              </div>\n            </div>\n          </motion.div>\n        </motion.div>\n      </motion.li>\n    </MotionConfig>\n  );\n};\n\nexport const AccordionApp: FC<AccordionProps> = ({ items }) => {\n  const defaultItems = items ?? DEFAULT_ITEMS;\n\n  const [openId, setOpenId] = useState<number | null>(null);\n\n  const openIndex = defaultItems.findIndex((item) => item.id === openId);\n\n  return (\n    <div className=\"theme-injected flex w-full flex-col items-center justify-center p-6 transition-colors duration-500\">\n      <ul className=\"w-full max-w-[400px]\">\n        {defaultItems.map((item, index) => (\n          <AccordionItem\n            key={item.id}\n            item={item}\n            setOpenId={setOpenId}\n            index={index}\n            total={defaultItems.length}\n            openIndex={openIndex}\n          />\n        ))}\n      </ul>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-swipe",
      "type": "registry:component",
      "title": "Card Swipe",
      "description": "A tactile, gesture-driven card stack that supports velocity-based swiping and smooth pagination.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion",
        "next-themes"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/card-swipe.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect, type ReactNode } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  type PanInfo,\n  type Transition,\n} from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { useTheme } from 'next-themes';\nimport {\n  Book02Icon,\n  Brain02Icon,\n  DropletFreeIcons,\n  RunningShoesIcon,\n  SwimmingIcon,\n} from '@hugeicons/core-free-icons';\nimport { cn } from '@/lib/utils';\n\nexport interface CardItem {\n  id: number;\n  title: string;\n  description: string;\n  icon: (theme: 'light' | 'dark') => ReactNode;\n}\n\ninterface CardCarouselProps {\n  items?: CardItem[];\n}\n\nconst DEFAULT_CARDS: CardItem[] = [\n  {\n    id: 1,\n    title: 'Reading',\n    description: 'Sharpen your mind & escape to new adventures.',\n    icon: (theme) => (\n      <HugeiconsIcon\n        icon={Book02Icon}\n        size={52}\n        color={theme === 'light' ? '#000000' : '#ffffff'}\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 2,\n    title: 'Drink Water',\n    description: 'Stay hydrated & energized. Your body will thank you!',\n    icon: (theme) => (\n      <HugeiconsIcon\n        icon={DropletFreeIcons}\n        size={52}\n        color={theme === 'light' ? '#000000' : '#ffffff'}\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 3,\n    title: 'Running',\n    description: 'Feel the endorphins! Get a quick energy boost.',\n    icon: (theme) => (\n      <HugeiconsIcon\n        icon={RunningShoesIcon}\n        size={52}\n        color={theme === 'light' ? '#000000' : '#ffffff'}\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 4,\n    title: 'Swimming',\n    description: 'Low-impact workout. Refreshing & invigorating.',\n    icon: (theme) => (\n      <HugeiconsIcon\n        icon={SwimmingIcon}\n        size={52}\n        color={theme === 'light' ? '#000000' : '#ffffff'}\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 5,\n    title: 'Meditation',\n    description: 'Find inner peace. Just 5 minutes can de-stress.',\n    icon: (theme) => (\n      <HugeiconsIcon\n        icon={Brain02Icon}\n        size={52}\n        color={theme === 'light' ? '#000000' : '#ffffff'}\n        strokeWidth={1.5}\n      />\n    ),\n  },\n];\n\nconst ITEM_WIDTH = 320;\nconst GAP = 16;\nconst CONTAINER_WIDTH = ITEM_WIDTH + GAP;\nconst DRAG_BUFFER = 50;\nconst VELOCITY_THRESHOLD = 500;\n\nconst SPRING_OPTIONS: Transition = {\n  type: 'spring',\n  stiffness: 330,\n  damping: 30,\n};\n\n\ninterface CarouselCardProps {\n  item: CardItem;\n  index: number;\n  x: ReturnType<typeof useMotionValue<number>>;\n  itemCount: number;\n  currentTheme: 'light' | 'dark';\n}\n\nconst CarouselCard: React.FC<CarouselCardProps> = ({\n  item,\n  index,\n  x,\n  itemCount,\n  currentTheme,\n}) => {\n  const nextIndex = Math.min(index + 1, itemCount - 1);\n  const prevIndex = Math.max(index - 1, 0);\n\n  const range = [\n    (-100 * (index + 1) * CONTAINER_WIDTH) / 100,\n    (-100 * index * CONTAINER_WIDTH) / 100,\n    (-100 * (index - 1) * CONTAINER_WIDTH) / 100,\n  ];\n  const outputRange = [nextIndex ? 90 : 90, 0, prevIndex ? -90 : -90];\n\n  const rotateY = useTransform(x, range, outputRange, { clamp: false });\n\n  return (\n    <motion.div\n      style={{\n        width: ITEM_WIDTH,\n        height: 420,\n        rotateY,\n        flexShrink: 0,\n      }}\n      transition={SPRING_OPTIONS}\n      className=\"flex cursor-grab flex-col items-start rounded-[40px] border-[1.6px] border-[#ECECEC] bg-[#FEFEFE] p-8 transition-colors active:cursor-grabbing sm:p-10 dark:border-zinc-800 dark:bg-zinc-900\"\n    >\n      <div className=\"mb-6 flex h-20 w-20 items-center justify-center rounded-[20px] border-[1.6px] border-[#ECECEC] bg-[#FEFEFE] shadow-[0_6px_20px_rgba(0,0,0,0.08)] transition-colors sm:mb-10 sm:h-24 sm:w-24 sm:rounded-[24px] dark:border-zinc-800 dark:bg-zinc-900\">\n        {item.icon(currentTheme)}\n      </div>\n\n      <h2 className=\"mb-2 text-2xl font-bold text-[#010101] sm:text-[32px] dark:text-zinc-100\">\n        {item.title}\n      </h2>\n\n      <p className=\"mb-5 text-lg text-[#77767B] sm:text-[22px] dark:text-zinc-400\">\n        {item.description}\n      </p>\n\n      <motion.button\n        whileHover={{ scale: 1.02 }}\n        whileTap={{ scale: 0.98 }}\n        className=\"rounded-full bg-[#262626] px-6 py-2.5 text-sm text-[#F2F2F2] shadow-sm sm:px-7 sm:py-3 sm:text-base dark:bg-zinc-100 dark:text-zinc-900\"\n      >\n        Get Started\n      </motion.button>\n    </motion.div>\n  );\n};\n\nexport const CardSwipe: React.FC<CardCarouselProps> = ({\n  items = DEFAULT_CARDS,\n}) => {\n  const [currentIndex, setCurrentIndex] = useState(0);\n  const [mounted, setMounted] = useState(false);\n  const { resolvedTheme } = useTheme();\n\n  const x = useMotionValue(0);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setMounted(true));\n  }, []);\n\n  if (!mounted) return null;\n\n  const currentTheme = resolvedTheme === 'dark' ? 'dark' : 'light';\n\n  const handleDragEnd = (_: unknown, info: PanInfo) => {\n    const offset = info.offset.x;\n    const velocity = info.velocity.x;\n\n    if (offset < -DRAG_BUFFER || velocity < -VELOCITY_THRESHOLD) {\n      setCurrentIndex((prev) => Math.min(prev + 1, items.length - 1));\n    } else if (offset > DRAG_BUFFER || velocity > VELOCITY_THRESHOLD) {\n      setCurrentIndex((prev) => Math.max(prev - 1, 0));\n    }\n  };\n\n  const leftConstraint = -((ITEM_WIDTH + GAP) * (items.length - 1));\n\n  return (\n    <div className=\"flex flex-col items-center justify-center\">\n      <div\n        className=\"relative overflow-hidden\"\n        style={{ width: ITEM_WIDTH, height: 420 }}\n      >\n        <motion.div\n          className=\"flex\"\n          drag=\"x\"\n          dragConstraints={{ left: leftConstraint, right: 0 }}\n          style={{\n            gap: GAP,\n            perspective: 1000,\n            perspectiveOrigin: currentIndex * ITEM_WIDTH + ITEM_WIDTH / 2,\n            x,\n          }}\n          onDragEnd={handleDragEnd}\n          animate={{ x: -(currentIndex * CONTAINER_WIDTH) }}\n          transition={SPRING_OPTIONS}\n        >\n          {items.map((item, index) => (\n            <CarouselCard\n              key={item.id}\n              item={item}\n              index={index}\n              x={x}\n              itemCount={items.length}\n              currentTheme={currentTheme}\n            />\n          ))}\n        </motion.div>\n      </div>\n\n      <div className=\"mt-4 flex gap-3 sm:mt-6\">\n        {items.map((_, i) => (\n          <div\n            key={i}\n            className={cn(\n              'h-2 w-2 cursor-pointer rounded-full bg-zinc-200 transition-colors duration-200',\n              currentIndex === i && 'bg-zinc-400',\n            )}\n            onClick={() => setCurrentIndex(i)}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default CardSwipe;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-swipe-base",
      "type": "registry:component",
      "title": "Card Swipe (base)",
      "description": "Theme-ready base variant of A tactile, gesture-driven card stack that supports velocity-based swiping and smooth pagination..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion",
        "next-themes"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/card-swipe.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type ReactNode } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  type PanInfo,\n  type Transition,\n} from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  Book02Icon,\n  Brain02Icon,\n  DropletFreeIcons,\n  RunningShoesIcon,\n  SwimmingIcon,\n} from '@hugeicons/core-free-icons';\nimport { cn } from '@/lib/utils';\n\nexport interface CardItem {\n  id: number;\n  title: string;\n  description: string;\n  icon: () => ReactNode;\n}\n\ninterface CardCarouselProps {\n  items?: CardItem[];\n}\n\nconst DEFAULT_CARDS: CardItem[] = [\n  {\n    id: 1,\n    title: 'Reading',\n    description: 'Sharpen your mind & escape to new adventures.',\n    icon: () => (\n      <HugeiconsIcon\n        icon={Book02Icon}\n        size={52}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 2,\n    title: 'Drink Water',\n    description: 'Stay hydrated & energized. Your body will thank you!',\n    icon: () => (\n      <HugeiconsIcon\n        icon={DropletFreeIcons}\n        size={52}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 3,\n    title: 'Running',\n    description: 'Feel the endorphins! Get a quick energy boost.',\n    icon: () => (\n      <HugeiconsIcon\n        icon={RunningShoesIcon}\n        size={52}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 4,\n    title: 'Swimming',\n    description: 'Low-impact workout. Refreshing & invigorating.',\n    icon: () => (\n      <HugeiconsIcon\n        icon={SwimmingIcon}\n        size={52}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 5,\n    title: 'Meditation',\n    description: 'Find inner peace. Just 5 minutes can de-stress.',\n    icon: () => (\n      <HugeiconsIcon\n        icon={Brain02Icon}\n        size={52}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n];\n\nconst ITEM_WIDTH = 320;\nconst GAP = 16;\nconst CONTAINER_WIDTH = ITEM_WIDTH + GAP;\nconst DRAG_BUFFER = 50;\nconst VELOCITY_THRESHOLD = 500;\n\nconst SPRING_OPTIONS: Transition = {\n  type: 'spring',\n  stiffness: 330,\n  damping: 30,\n};\n\ninterface CarouselCardProps {\n  item: CardItem;\n  index: number;\n  x: ReturnType<typeof useMotionValue<number>>;\n  itemCount: number;\n}\n\nconst CarouselCard: React.FC<CarouselCardProps> = ({\n  item,\n  index,\n  x,\n  itemCount,\n}) => {\n  const nextIndex = Math.min(index + 1, itemCount - 1);\n  const prevIndex = Math.max(index - 1, 0);\n\n  const range = [\n    (-100 * (index + 1) * CONTAINER_WIDTH) / 100,\n    (-100 * index * CONTAINER_WIDTH) / 100,\n    (-100 * (index - 1) * CONTAINER_WIDTH) / 100,\n  ];\n  const outputRange = [nextIndex ? 90 : 90, 0, prevIndex ? -90 : -90];\n\n  const rotateY = useTransform(x, range, outputRange, { clamp: false });\n\n  return (\n    <motion.div\n      style={{\n        width: ITEM_WIDTH,\n        height: 420,\n        rotateY,\n        flexShrink: 0,\n      }}\n      transition={SPRING_OPTIONS}\n      className=\"border-border bg-card dark:border-border dark:bg-card flex cursor-grab flex-col items-start rounded-4xl border-[1.6px] p-8 transition-colors active:cursor-grabbing sm:p-10\"\n    >\n      <div className=\"border-border bg-card text-foreground dark:border-border dark:bg-card dark:text-foreground mb-6 flex h-20 w-20 items-center justify-center rounded-2xl border-[1.6px] shadow-md transition-colors sm:mb-10 sm:h-24 sm:w-24 sm:rounded-3xl\">\n        {item.icon()}\n      </div>\n\n      <h2 className=\"text-foreground dark:text-foreground mb-2 font-sans text-2xl font-bold sm:text-[32px]\">\n        {item.title}\n      </h2>\n\n      <p className=\"text-muted-foreground dark:text-muted-foreground mb-5 font-sans text-lg sm:text-[22px]\">\n        {item.description}\n      </p>\n\n      <motion.button\n        whileHover={{ scale: 1.02 }}\n        whileTap={{ scale: 0.98 }}\n        className=\"bg-primary text-primary-foreground dark:bg-primary dark:text-primary-foreground rounded-full px-6 py-2.5 font-sans text-sm shadow-sm sm:px-7 sm:py-3 sm:text-base\"\n      >\n        Get Started\n      </motion.button>\n    </motion.div>\n  );\n};\n\nexport const CardSwipe: React.FC<CardCarouselProps> = ({\n  items = DEFAULT_CARDS,\n}) => {\n  const [currentIndex, setCurrentIndex] = useState(0);\n\n  const x = useMotionValue(0);\n\n  const handleDragEnd = (_: unknown, info: PanInfo) => {\n    const offset = info.offset.x;\n    const velocity = info.velocity.x;\n\n    if (offset < -DRAG_BUFFER || velocity < -VELOCITY_THRESHOLD) {\n      setCurrentIndex((prev) => Math.min(prev + 1, items.length - 1));\n    } else if (offset > DRAG_BUFFER || velocity > VELOCITY_THRESHOLD) {\n      setCurrentIndex((prev) => Math.max(prev - 1, 0));\n    }\n  };\n\n  const leftConstraint = -((ITEM_WIDTH + GAP) * (items.length - 1));\n\n  return (\n    <div className=\"theme-injected flex flex-col items-center justify-center\">\n      <div\n        className=\"relative overflow-hidden\"\n        style={{ width: ITEM_WIDTH, height: 420 }}\n      >\n        <motion.div\n          className=\"flex\"\n          drag=\"x\"\n          dragConstraints={{ left: leftConstraint, right: 0 }}\n          style={{\n            gap: GAP,\n            perspective: 1000,\n            perspectiveOrigin: currentIndex * ITEM_WIDTH + ITEM_WIDTH / 2,\n            x,\n          }}\n          onDragEnd={handleDragEnd}\n          animate={{ x: -(currentIndex * CONTAINER_WIDTH) }}\n          transition={SPRING_OPTIONS}\n        >\n          {items.map((item, index) => (\n            <CarouselCard\n              key={item.id}\n              item={item}\n              index={index}\n              x={x}\n              itemCount={items.length}\n            />\n          ))}\n        </motion.div>\n      </div>\n\n      <div className=\"mt-4 flex gap-3 sm:mt-6\">\n        {items.map((_, i) => (\n          <div\n            key={i}\n            className={cn(\n              'bg-secondary h-2 w-2 cursor-pointer rounded-full transition-colors duration-200',\n              currentIndex === i && 'bg-primary',\n            )}\n            onClick={() => setCurrentIndex(i)}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default CardSwipe;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "carousel-navigator",
      "type": "registry:component",
      "title": "Carousel Navigator",
      "description": "A dynamic carousel navigator with theme-adaptive background transitions and progress-syncing indicators.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/carousel-navigator.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { type FC } from 'react';\n\ntype ThemeConfig = {\n  bg: string;\n  button: string;\n  dot: string;\n  progress: string;\n};\n\ninterface CarouselNavigatorProps {\n  totalSlides?: number;\n  autoDelay?: number;\n  themes?: ThemeConfig[];\n  currentIndex: number;\n  onIndexChange: (index: number) => void;\n}\n\nconst DEFAULT_TOTAL_SLIDES = 4;\nconst DEFAULT_AUTO_DELAY = 5000;\n\nconst DEFAULT_THEMES: ThemeConfig[] = [\n  {\n    bg: 'bg-zinc-100',\n    button: 'bg-zinc-900',\n    dot: 'bg-zinc-300',\n    progress: 'bg-zinc-300',\n  },\n  {\n    bg: 'bg-blue-100',\n    button: 'bg-blue-600',\n    dot: 'bg-blue-300',\n    progress: 'bg-blue-300',\n  },\n  {\n    bg: 'bg-green-100',\n    button: 'bg-green-600',\n    dot: 'bg-green-400',\n    progress: 'bg-green-400',\n  },\n  {\n    bg: 'bg-yellow-100',\n    button: 'bg-yellow-400',\n    dot: 'bg-yellow-300',\n    progress: 'bg-yellow-300',\n  },\n];\n\nexport const CarouselNavigator: FC<CarouselNavigatorProps> = ({\n  totalSlides = DEFAULT_TOTAL_SLIDES,\n  autoDelay = DEFAULT_AUTO_DELAY,\n  themes = DEFAULT_THEMES,\n  currentIndex,\n  onIndexChange,\n}) => {\n  const theme = themes[currentIndex];\n\n  const goPrev = () =>\n    onIndexChange((currentIndex - 1 + totalSlides) % totalSlides);\n\n  const goNext = () => onIndexChange((currentIndex + 1) % totalSlides);\n\n  return (\n    <motion.div\n      animate={{\n        backgroundColor: theme.bg.replace('bg-[', '').replace(']', ''),\n      }}\n      className=\"flex items-center justify-center gap-1 rounded-full px-4 py-3 transition-colors duration-300\"\n    >\n      <ArrowButton\n        onClick={goPrev}\n        themeColor={theme.button}\n        disabled={currentIndex === 0}\n      >\n        <ChevronLeft size={24} strokeWidth={3} />\n      </ArrowButton>\n\n      <div className=\"flex items-center gap-2 px-2\">\n        {Array.from({ length: totalSlides }).map((_, i) => (\n          <Indicator\n            key={i}\n            isActive={i === currentIndex}\n            theme={theme}\n            autoDelay={autoDelay}\n            onClick={() => onIndexChange(i)}\n          />\n        ))}\n      </div>\n\n      <ArrowButton onClick={goNext} themeColor={theme.button}>\n        <ChevronRight size={24} strokeWidth={3} />\n      </ArrowButton>\n    </motion.div>\n  );\n};\n\nconst ArrowButton = ({ children, onClick, themeColor, disabled }: any) => {\n  return (\n    <motion.button\n      onClick={onClick}\n      whileTap={{ scale: 0.9 }}\n      className={`flex h-12 w-12 items-center justify-center rounded-full text-white shadow-sm transition-colors cursor-pointer duration-300 ${disabled ? 'bg-gray-300 opacity-50' : themeColor}`}\n    >\n      {children}\n    </motion.button>\n  );\n};\n\nconst Indicator = ({\n  isActive,\n  theme,\n  autoDelay,\n  onClick,\n}: {\n  isActive: boolean;\n  theme: ThemeConfig;\n  autoDelay: number;\n  onClick: () => void;\n}) => {\n  return (\n    <motion.button\n      type=\"button\"\n      onClick={onClick}\n      layout\n      transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n      style={{ borderRadius:24}}\n      className={`relative h-3 cursor-pointer  focus:outline-none ${isActive ? `w-12 ${theme.progress}` : `w-3 ${theme.dot}`} transition-colors duration-300`}\n    >\n      {isActive && (\n        <motion.div\n          initial={{ width: '0%' }}\n          animate={{ width: '100%' }}\n          transition={{ duration: autoDelay / 1000, ease: 'linear' }}\n          className=\"absolute inset-0 rounded-full bg-white shadow-[0_0_8px_rgba(255,255,255,0.5)]\"\n        />\n      )}\n    </motion.button>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "carousel-navigator-base",
      "type": "registry:component",
      "title": "Carousel Navigator (base)",
      "description": "Theme-ready base variant of A dynamic carousel navigator with theme-adaptive background transitions and progress-syncing indicators..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/carousel-navigator.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { type FC } from 'react';\n\ntype ThemeConfig = {\n  button: string;\n  dot: string;\n  progress: string;\n};\n\ninterface CarouselNavigatorProps {\n  totalSlides?: number;\n  autoDelay?: number;\n  themes?: ThemeConfig[];\n  currentIndex: number;\n  onIndexChange: (index: number) => void;\n}\n\nconst DEFAULT_TOTAL_SLIDES = 4;\nconst DEFAULT_AUTO_DELAY = 5000;\n\nconst DEFAULT_THEMES: ThemeConfig[] = [\n  {\n    button: 'bg-primary text-primary-foreground',\n    dot: 'bg-secondary',\n    progress: 'bg-secondary',\n  },\n  {\n    button: 'bg-primary text-primary-foreground',\n    dot: 'bg-secondary',\n    progress: 'bg-secondary',\n  },\n  {\n    button: 'bg-primary text-primary-foreground',\n    dot: 'bg-secondary',\n    progress: 'bg-secondary',\n  },\n  {\n    button: 'bg-primary text-primary-foreground',\n    dot: 'bg-secondary',\n    progress: 'bg-secondary',\n  },\n];\n\nexport const CarouselNavigator: FC<CarouselNavigatorProps> = ({\n  totalSlides = DEFAULT_TOTAL_SLIDES,\n  autoDelay = DEFAULT_AUTO_DELAY,\n  themes = DEFAULT_THEMES,\n  currentIndex,\n  onIndexChange,\n}) => {\n  const theme = themes[currentIndex];\n\n  const goPrev = () =>\n    onIndexChange((currentIndex - 1 + totalSlides) % totalSlides);\n\n  const goNext = () => onIndexChange((currentIndex + 1) % totalSlides);\n\n  return (\n    <motion.div\n      className=\"theme-injected flex items-center justify-center gap-1 rounded-4xl border border-border bg-card px-4 py-3 font-sans transition-colors duration-300\"\n    >\n      <ArrowButton\n        onClick={goPrev}\n        themeColor={theme.button}\n        disabled={currentIndex === 0}\n      >\n        <ChevronLeft size={24} strokeWidth={3} />\n      </ArrowButton>\n\n      <div className=\"flex items-center gap-2 px-2\">\n        {Array.from({ length: totalSlides }).map((_, i) => (\n          <Indicator\n            key={i}\n            isActive={i === currentIndex}\n            theme={theme}\n            autoDelay={autoDelay}\n            onClick={() => onIndexChange(i)}\n          />\n        ))}\n      </div>\n\n      <ArrowButton onClick={goNext} themeColor={theme.button}>\n        <ChevronRight size={24} strokeWidth={3} />\n      </ArrowButton>\n    </motion.div>\n  );\n};\n\nconst ArrowButton = ({ children, onClick, themeColor, disabled }: any) => {\n  return (\n    <motion.button\n      onClick={onClick}\n      whileTap={{ scale: 0.9 }}\n      disabled={disabled}\n      className={`flex h-12 w-12 cursor-pointer items-center justify-center rounded-4xl font-sans shadow-sm transition-colors duration-300 ${disabled ? 'cursor-not-allowed bg-input text-muted-foreground opacity-60' : `${themeColor} hover:brightness-95`}`}\n    >\n      {children}\n    </motion.button>\n  );\n};\n\nconst Indicator = ({\n  isActive,\n  theme,\n  autoDelay,\n  onClick,\n}: {\n  isActive: boolean;\n  theme: ThemeConfig;\n  autoDelay: number;\n  onClick: () => void;\n}) => {\n  return (\n    <motion.button\n      type=\"button\"\n      onClick={onClick}\n      layout\n      transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n      style={{ borderRadius: 24 }}\n      className={`relative h-3 cursor-pointer focus:outline-none ${isActive ? `w-12 ${theme.progress}` : `w-3 ${theme.dot}`} transition-colors duration-300`}\n    >\n      {isActive && (\n        <motion.div\n          initial={{ width: '0%' }}\n          animate={{ width: '100%' }}\n          transition={{ duration: autoDelay / 1000, ease: 'linear' }}\n          className=\"absolute inset-0 rounded-4xl bg-primary shadow-[0_0_8px_hsl(var(--primary)/0.4)]\"\n        />\n      )}\n    </motion.button>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "carousel-slider",
      "type": "registry:component",
      "title": "Carousel Slider",
      "description": "A playful, gesture-driven card carousel with spring-based rotation and smooth scaling.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/carousel-slider.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n  motion,\n  AnimatePresence,\n  useMotionValue,\n  useTransform,\n  type PanInfo,\n  type Variants,\n} from \"motion/react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { FavouriteIcon } from \"@hugeicons/core-free-icons\";\n\n/* ---------------- Types ---------------- */\n\nexport interface Slide {\n  id: number;\n  img: string;\n}\n\ntype IconRenderer = (props?: any) => React.ReactNode;\n\ninterface CarouselSliderProps {\n  slides?: Slide[];\n  favouriteIcon?: IconRenderer;\n}\n\n/* ---------------- Defaults ---------------- */\n\nconst DEFAULT_SLIDES: Slide[] = [\n  { id: 1, img: \"https://prourls.link/ORXBVr\" },\n  {\n    id: 2,\n    img: \"https://images.unsplash.com/photo-1518780664697-55e3ad937233?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 3,\n    img: \"https://images.unsplash.com/photo-1470770841072-f978cf4d019e?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 4,\n    img: \"https://images.unsplash.com/photo-1500382017468-9049fed747ef?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 5,\n    img: \"https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 6,\n    img: \"https://images.unsplash.com/photo-1501785888041-af3ef285b470?q=80&w=500&auto=format&fit=crop\",\n  },\n];\n\n/* ---------------- Animation Variants ---------------- */\n\nconst variants: Variants = {\n  enter: (direction: number) => ({\n    x: direction > 0 ? 200 : -200,\n    filter: 'brightness(2)',\n    scale: 0.75,\n    opacity: 0,\n    rotate: direction > 0 ? 30 : -30,\n  }),\n  center: {\n    x: 0,\n    filter: 'brightness(1)',\n    scale: 1,\n    opacity: 1,\n    rotate: -3,\n    zIndex: 1,\n  },\n  exit: (direction: number) => ({\n    x: direction > 0 ? -200 : 200,\n    filter: 'brightness(2)',\n    scale: 0.75,\n    opacity: 0,\n    rotate: direction > 0 ? -30 : 30,\n    zIndex: 0,\n  }),\n};\n\n/* ---------------- Component ---------------- */\n\nexport const CarouselSlider: React.FC<CarouselSliderProps> = ({\n  slides = DEFAULT_SLIDES,\n  favouriteIcon = (props) => (\n    <HugeiconsIcon\n      icon={FavouriteIcon}\n      size={26}\n      strokeWidth={1.5}\n      {...props}\n    />\n  ),\n}) => {\n  const [index, setIndex] = useState(0);\n  const [direction, setDirection] = useState(1);\n\n  const dragX = useMotionValue(0);\n  const rotate = useTransform(dragX, [-200, 200], [-18, 18]);\n\n  const paginate = (newDirection: number) => {\n    setDirection(newDirection);\n    setIndex((prev) => (prev + newDirection + slides.length) % slides.length);\n  };\n\n  const handleDragEnd = (_: any, info: PanInfo) => {\n    if (info.offset.x < -120) paginate(1);\n    else if (info.offset.x > 120) paginate(-1);\n  };\n\n  return (\n    <div className=\"flex flex-col items-center justify-center\">\n      {/* Slider */}\n      <div className=\"relative w-40 sm:w-3xs aspect-square flex items-center justify-center -rotate-[6deg]\">\n        <AnimatePresence custom={direction} mode=\"wait\">\n          <motion.div\n            key={index}\n            custom={direction}\n            variants={variants}\n            initial=\"enter\"\n            animate=\"center\"\n            exit=\"exit\"\n            transition={{\n              x: { type: \"spring\", bounce: 0.2, duration: 0.5 },\n              scale: { duration: 0.35 },\n              opacity: { duration: 0.25 },\n            }}\n            drag=\"x\"\n            dragConstraints={{ left: 0, right: 0 }}\n            style={{ rotate, x: dragX }}\n            onDragEnd={handleDragEnd}\n            className=\"absolute w-full h-full bg-[#FDFDFD] dark:bg-zinc-900 rounded-[40px] p-2 shadow-md border-[1.2px] border-[#E6E6EA] dark:border-zinc-800 overflow-hidden\"\n          >\n            <div className=\"w-full h-full rounded-[32px] overflow-hidden bg-zinc-100 relative\">\n              <img\n                src={slides[index].img}\n                alt=\"\"\n                className=\"object-cover w-full h-full pointer-events-none\"\n              />\n\n              {/* Favourite Button */}\n              <button\n                type=\"button\"\n                title=\"Favourite\"\n                className=\"absolute top-4 right-4 w-10 h-10 bg-[#EDEDED] dark:bg-zinc-900/90 backdrop-blur-md rounded-full flex items-center justify-center shadow-md border border-white/20\"\n              >\n                {favouriteIcon({\n                  className: \"text-[#2b2b2b] dark:text-white/90\",\n                })}\n              </button>\n            </div>\n          </motion.div>\n        </AnimatePresence>\n\n        {/* Background Card */}\n        <div className=\"absolute -z-10 w-[95%] h-[95%] bg-white dark:bg-zinc-900 rounded-[40px] border-[6px] border-white dark:border-zinc-800 scale-95 opacity-50\" />\n      </div>\n\n      {/* Pagination */}\n      <div className=\"flex gap-2.5 mt-8 pl-8 -rotate-[6deg]\">\n        {slides.map((_, i) => (\n          <motion.div\n            key={i}\n            animate={{\n              scale: i === index ? 1.2 : 1,\n              opacity: i === index ? 1 : 0.4,\n            }}\n            transition={{\n              type: \"spring\",\n              stiffness: 300,\n              damping: 20,\n            }}\n            className=\"w-2.5 h-2.5 rounded-full bg-[#CCC7B8] cursor-pointer\"\n            onClick={() => {\n              setDirection(i > index ? 1 : -1);\n              setIndex(i);\n            }}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "carousel-slider-base",
      "type": "registry:component",
      "title": "Carousel Slider (base)",
      "description": "Theme-ready base variant of A playful, gesture-driven card carousel with spring-based rotation and smooth scaling..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/carousel-slider.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n  motion,\n  AnimatePresence,\n  useMotionValue,\n  useTransform,\n  type PanInfo,\n  type Variants,\n} from \"motion/react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { FavouriteIcon } from \"@hugeicons/core-free-icons\";\n\n/* ---------------- Types ---------------- */\n\nexport interface Slide {\n  id: number;\n  img: string;\n}\n\ntype IconRenderer = (props?: any) => React.ReactNode;\n\ninterface CarouselSliderProps {\n  slides?: Slide[];\n  favouriteIcon?: IconRenderer;\n}\n\n/* ---------------- Defaults ---------------- */\n\nconst DEFAULT_SLIDES: Slide[] = [\n  { id: 1, img: \"https://prourls.link/ORXBVr\" },\n  {\n    id: 2,\n    img: \"https://images.unsplash.com/photo-1518780664697-55e3ad937233?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 3,\n    img: \"https://images.unsplash.com/photo-1470770841072-f978cf4d019e?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 4,\n    img: \"https://images.unsplash.com/photo-1500382017468-9049fed747ef?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 5,\n    img: \"https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?q=80&w=500&auto=format&fit=crop\",\n  },\n  {\n    id: 6,\n    img: \"https://images.unsplash.com/photo-1501785888041-af3ef285b470?q=80&w=500&auto=format&fit=crop\",\n  },\n];\n\n/* ---------------- Animation Variants ---------------- */\n\nconst variants: Variants = {\n  enter: (direction: number) => ({\n    x: direction > 0 ? 200 : -200,\n    filter: 'brightness(2)',\n    scale: 0.75,\n    opacity: 0,\n    rotate: direction > 0 ? 30 : -30,\n  }),\n  center: {\n    x: 0,\n    filter: 'brightness(1)',\n    scale: 1,\n    opacity: 1,\n    rotate: -3,\n    zIndex: 1,\n  },\n  exit: (direction: number) => ({\n    x: direction > 0 ? -200 : 200,\n    filter: 'brightness(2)',\n    scale: 0.75,\n    opacity: 0,\n    rotate: direction > 0 ? -30 : 30,\n    zIndex: 0,\n  }),\n};\n\n/* ---------------- Component ---------------- */\n\nexport const CarouselSlider: React.FC<CarouselSliderProps> = ({\n  slides = DEFAULT_SLIDES,\n  favouriteIcon = (props) => (\n    <HugeiconsIcon\n      icon={FavouriteIcon}\n      size={26}\n      strokeWidth={1.5}\n      {...props}\n    />\n  ),\n}) => {\n  const [index, setIndex] = useState(0);\n  const [direction, setDirection] = useState(1);\n\n  const dragX = useMotionValue(0);\n  const rotate = useTransform(dragX, [-200, 200], [-18, 18]);\n\n  const paginate = (newDirection: number) => {\n    setDirection(newDirection);\n    setIndex((prev) => (prev + newDirection + slides.length) % slides.length);\n  };\n\n  const handleDragEnd = (_: any, info: PanInfo) => {\n    if (info.offset.x < -120) paginate(1);\n    else if (info.offset.x > 120) paginate(-1);\n  };\n\n  return (\n    <div className=\"flex flex-col items-center justify-center theme-injected\">\n      {/* Slider */}\n      <div className=\"relative flex aspect-square w-40 items-center justify-center -rotate-6 sm:w-3xs\">\n        <AnimatePresence custom={direction} mode=\"wait\">\n          <motion.div\n            key={index}\n            custom={direction}\n            variants={variants}\n            initial=\"enter\"\n            animate=\"center\"\n            exit=\"exit\"\n            transition={{\n              x: { type: \"spring\", bounce: 0.2, duration: 0.5 },\n              scale: { duration: 0.35 },\n              opacity: { duration: 0.25 },\n            }}\n            drag=\"x\"\n            dragConstraints={{ left: 0, right: 0 }}\n            style={{ rotate, x: dragX }}\n            onDragEnd={handleDragEnd}\n            className=\"absolute h-full w-full overflow-hidden rounded-4xl border-[1.2px] border-border bg-card p-2 shadow-md dark:border-border dark:bg-card\"\n          >\n            <div className=\"relative h-full w-full overflow-hidden rounded-3xl bg-muted\">\n              <img\n                src={slides[index].img}\n                alt=\"\"\n                className=\"object-cover w-full h-full pointer-events-none\"\n              />\n\n              {/* Favourite Button */}\n              <button\n                type=\"button\"\n                title=\"Favourite\"\n                className=\"absolute top-4 right-4 flex h-10 w-10 items-center justify-center rounded-full border border-border/30 bg-card/90 shadow-md backdrop-blur-md dark:border-border/30 dark:bg-card/90\"\n              >\n                {favouriteIcon({\n                  className: \"text-foreground dark:text-foreground\",\n                })}\n              </button>\n            </div>\n          </motion.div>\n        </AnimatePresence>\n\n        {/* Background Card */}\n        <div className=\"absolute -z-10 h-[95%] w-[95%] scale-95 rounded-4xl border-[6px] border-card bg-card opacity-50 dark:border-card dark:bg-card\" />\n      </div>\n\n      {/* Pagination */}\n      <div className=\"mt-8 flex -rotate-6 gap-2.5 pl-8\">\n        {slides.map((_, i) => (\n          <motion.div\n            key={i}\n            animate={{\n              scale: i === index ? 1.2 : 1,\n              opacity: i === index ? 1 : 0.4,\n            }}\n            transition={{\n              type: \"spring\",\n              stiffness: 300,\n              damping: 20,\n            }}\n            className={`h-2.5 w-2.5 cursor-pointer rounded-full ${\n              i === index ? \"bg-primary\" : \"bg-secondary\"\n            }`}\n            onClick={() => {\n              setDirection(i > index ? 1 : -1);\n              setIndex(i);\n            }}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "changeable-pricing-section",
      "type": "registry:component",
      "title": "Changeable Pricing Section",
      "description": "A premium interactive pricing selector with animated billing toggle, expandable plan details, and smooth spring-driven transitions for modern SaaS checkout flows.",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/changeable-pricing-section.tsx",
          "type": "registry:component",
          "content": "import { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Check, Info } from \"lucide-react\";\n\nexport type PlanId = string;\n\nexport interface Feature {\n  text: string;\n  hasInfo?: boolean;\n}\n\nexport interface Plan {\n  id: PlanId;\n  name: string;\n  description: string;\n  priceMonthly: string;\n  priceYearly: string;\n  badge?: string;\n  featuresLabel?: string;\n  features: Feature[];\n}\n\nexport interface ChangeablePricingSectionProps {\n  /** The main title of the section */\n  title?: string;\n  /** Array of pricing plans to display */\n  plans: Plan[];\n  /** Optional ID of the default selected plan */\n  defaultPlanId?: PlanId;\n  /** Default billing cycle */\n  defaultBillingCycle?: \"monthly\" | \"yearly\";\n  /** Custom label for monthly toggle */\n  monthlyLabel?: string;\n  /** Custom label for yearly toggle */\n  yearlyLabel?: string;\n  /** Footer text below plans */\n  footerText?: string;\n  /** CTA button text */\n  buttonText?: string;\n  /** Callback fired when continue button is clicked */\n  onContinue?: (planId: PlanId, billingCycle: \"monthly\" | \"yearly\") => void;\n}\n\nexport default function ChangeablePricingSection({\n  title = \"Select a plan\",\n  plans,\n  defaultPlanId,\n  defaultBillingCycle = \"monthly\",\n  monthlyLabel = \"Monthly\",\n  yearlyLabel = \"Yearly\",\n  footerText = \"Cancel anytime. No long-term contract.\",\n  buttonText = \"Continue\",\n  onContinue,\n}: ChangeablePricingSectionProps) {\n  const [selectedPlan, setSelectedPlan] = useState<PlanId>(\n    defaultPlanId || (plans.length > 0 ? plans[0].id : \"\"),\n  );\n  const [billingCycle, setBillingCycle] = useState<\"monthly\" | \"yearly\">(\n    defaultBillingCycle,\n  );\n\n  return (\n      <div className=\"w-full max-w-[460px] bg-neutral-100 dark:bg-neutral-950 rounded-[24px] p-1.5 shadow-sm ring-1 ring-neutral-200/50 dark:ring-neutral-800/50\">\n        {/* Header */}\n        <div className=\"flex items-center justify-between px-3 py-4\">\n          <h2 className=\"text-[17px] font-medium text-neutral-800 dark:text-neutral-100 tracking-tighter\">\n            {title}\n          </h2>\n          <div className=\"flex items-center bg-neutral-200 dark:bg-neutral-950 p-1 rounded-full relative z-0 ring-1 ring-transparent dark:ring-neutral-600/50\">\n            <motion.div\n              className=\"absolute top-1 bottom-1 w-[calc(50%-4px)] bg-white dark:bg-orange-500/15 rounded-full shadow-sm dark:shadow-none -z-10\"\n              animate={{\n                x: billingCycle === \"monthly\" ? 0 : \"100%\",\n              }}\n              transition={{ type: \"spring\", bounce: 0.4, duration: 0.7 }}\n              style={{ left: 4 }}\n            />\n            <button\n              onClick={() => setBillingCycle(\"monthly\")}\n              className={`jet w-[72px] py-1.5 rounded-full text-[10px] font-bold tracking-widest uppercase transition-colors z-10 ${billingCycle === \"monthly\" ? \"text-neutral-800 dark:text-orange-500\" : \"text-neutral-400 dark:text-neutral-500\"}`}\n            >\n              {monthlyLabel}\n            </button>\n            <button\n              onClick={() => setBillingCycle(\"yearly\")}\n              className={`jet w-[72px] py-1.5 rounded-full text-[10px] font-bold tracking-widest uppercase transition-colors z-10 ${billingCycle === \"yearly\" ? \"text-neutral-800 dark:text-orange-500\" : \"text-neutral-400 dark:text-neutral-500\"}`}\n            >\n              {yearlyLabel}\n            </button>\n          </div>\n        </div>\n\n        {/* Plans */}\n        <div className=\"flex flex-col gap-1\">\n          {plans.map((plan) => {\n            const isSelected = selectedPlan === plan.id;\n\n            return (\n              <motion.div\n                layout\n                key={plan.id}\n                onClick={() => setSelectedPlan(plan.id)}\n                transition={{ type: \"spring\", bounce: 0.45, duration: 0.7 }}\n                className={`relative overflow-hidden cursor-pointer rounded-[18px] transition-colors duration-300 bg-white dark:bg-neutral-800/50 ${\n                  isSelected\n                    ? \"ring-[1px] ring-orange-500 dark:ring-orange-500 shadow-[0_4px_16px_rgba(249,115,22,0.06)] dark:shadow-none\"\n                    : \"ring-1 ring-neutral-200/80 dark:ring-neutral-800 shadow-sm dark:shadow-none hover:ring-neutral-300 dark:hover:ring-neutral-700\"\n                }`}\n              >\n                <div className=\"px-4 py-3.5 sm:px-5 sm:py-4\">\n                  {/* Top row */}\n                  <div className=\"flex justify-between items-start gap-3\">\n                    <div className=\"flex flex-1 gap-3\">\n                      {/* Radio button */}\n                      <div className=\"mt-0.5 shrink-0\">\n                        <div\n                          className={`w-[18px] h-[18px] rounded-full flex items-center justify-center border transition-colors ${\n                            isSelected\n                              ? \"border-orange-500 bg-orange-500\"\n                              : \"border-neutral-300 dark:border-neutral-700 bg-white dark:bg-transparent\"\n                          }`}\n                        >\n                          {isSelected && (\n                            <Check\n                              size={11}\n                              strokeWidth={3.5}\n                              className=\"text-white\"\n                            />\n                          )}\n                        </div>\n                      </div>\n\n                      {/* Plan Info */}\n                      <div className=\"flex flex-1 flex-col\">\n                        <div className=\"flex flex-wrap items-center gap-2\">\n                          <span className=\"text-[16px] font-medium text-neutral-800 dark:text-neutral-100 leading-none\">\n                            {plan.name}\n                          </span>\n                          {plan.badge && (\n                            <span className=\"bg-green-100 dark:bg-green-500/10 text-green-600 text-[9px] font-bold px-2 py-0.5 rounded-full uppercase tracking-wider leading-none\">\n                              {plan.badge}\n                            </span>\n                          )}\n                        </div>\n                        <span className=\"text-[11px] text-neutral-500 dark:text-neutral-400 mt-1.5 leading-snug sm:leading-none\">\n                          {plan.description}\n                        </span>\n                      </div>\n                    </div>\n\n                    {/* Price Info */}\n                    <div className=\"flex flex-col items-end shrink-0\">\n                      <div className=\"flex items-center justify-end text-[15px] sm:text-[16px] font-medium text-neutral-800 dark:text-neutral-100 leading-none overflow-hidden h-[18px]\">\n                        <AnimatePresence mode=\"popLayout\" initial={false}>\n                          <motion.span\n                            key={billingCycle}\n                            initial={{\n                              y: billingCycle === \"yearly\" ? 20 : -20,\n                              opacity: 0,\n                              filter: \"blur(4px)\",\n                            }}\n                            animate={{ y: 0, opacity: 1, filter: \"blur(0px)\" }}\n                            exit={{\n                              y: billingCycle === \"monthly\" ? -20 : 20,\n                              opacity: 0,\n                              filter: \"blur(4px)\",\n                            }}\n                            transition={{\n                              type: \"spring\",\n                              bounce: 0,\n                              duration: 0.4,\n                            }}\n                            className=\"inline-block whitespace-nowrap\"\n                          >\n                            {billingCycle === \"monthly\"\n                              ? plan.priceMonthly\n                              : plan.priceYearly}\n                          </motion.span>\n                        </AnimatePresence>\n                      </div>\n                      <span className=\"jet text-[10px] text-neutral-400 font-bold tracking-widest uppercase mt-1.5 leading-none\">\n                        per user/month\n                      </span>\n                    </div>\n                  </div>\n\n                  {/* Expandable Features */}\n                  <AnimatePresence initial={false}>\n                    {isSelected && (\n                      <motion.div\n                        key=\"features\"\n                        initial={{ height: 0, opacity: 0 }}\n                        animate={{ height: \"auto\", opacity: 1 }}\n                        exit={{ height: 0, opacity: 0 }}\n                        transition={{\n                          opacity: { duration: 0.2 },\n                          height: { duration: 0.3, ease: \"easeOut\" },\n                        }}\n                        className=\"overflow-hidden\"\n                      >\n                        <div className=\"pt-3.5 mt-3.5 sm:pt-4 sm:mt-4 mb-1 border-t border-dashed border-neutral-200 dark:border-neutral-800\">\n                          {plan.featuresLabel && (\n                            <p className=\"jet text-[10px] font-bold text-neutral-400 tracking-widest uppercase mb-3\">\n                              {plan.featuresLabel}\n                            </p>\n                          )}\n                          <div className=\"flex flex-col gap-2.5\">\n                            {plan.features.map((feature, idx) => (\n                              <div\n                                key={idx}\n                                className=\"flex items-center gap-2.5\"\n                              >\n                                <Check\n                                  size={14}\n                                  strokeWidth={3}\n                                  className=\"text-green-500 shrink-0\"\n                                />\n                                <span className=\"text-[12px] text-neutral-600 dark:text-neutral-300 leading-tight\">\n                                  {feature.text}\n                                </span>\n                                {feature.hasInfo && (\n                                  <Info\n                                    size={13}\n                                    className=\"text-neutral-300 dark:text-neutral-600 ml-0.5\"\n                                  />\n                                )}\n                              </div>\n                            ))}\n                          </div>\n                        </div>\n                      </motion.div>\n                    )}\n                  </AnimatePresence>\n                </div>\n              </motion.div>\n            );\n          })}\n        </div>\n\n        {/* Footer info & CTA */}\n        <div className=\"flex flex-col gap-4 items-center sm:flex-row sm:justify-between mt-5 px-3 pb-2\">\n          <span className=\"jet text-[10px] text-neutral-400 uppercase tracking-[0.05em] leading-relaxed text-center sm:text-left\">\n            {footerText}\n          </span>\n          <button\n            onClick={() => onContinue?.(selectedPlan, billingCycle)}\n            className=\"w-full sm:w-auto bg-orange-500 text-white px-8 py-2.5 rounded-full text-[13px] font-medium hover:bg-orange-600 active:scale-95 transition-all outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-orange-500\"\n          >\n            {buttonText}\n          </button>\n        </div>\n      </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "changeable-pricing-section-base",
      "type": "registry:component",
      "title": "Changeable Pricing Section (base)",
      "description": "Theme-ready base variant of A premium interactive pricing selector with animated billing toggle, expandable plan details, and smooth spring-driven transitions for modern SaaS checkout flows..",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/changeable-pricing-section.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Check, Info } from \"lucide-react\";\n\nexport type PlanId = string;\n\nexport interface Feature {\n  text: string;\n  hasInfo?: boolean;\n}\n\nexport interface Plan {\n  id: PlanId;\n  name: string;\n  description: string;\n  priceMonthly: string;\n  priceYearly: string;\n  badge?: string;\n  featuresLabel?: string;\n  features: Feature[];\n}\n\nexport interface ChangeablePricingSectionProps {\n  title?: string;\n  plans: Plan[];\n  defaultPlanId?: PlanId;\n  defaultBillingCycle?: \"monthly\" | \"yearly\";\n  monthlyLabel?: string;\n  yearlyLabel?: string;\n  footerText?: string;\n  buttonText?: string;\n  onContinue?: (planId: PlanId, billingCycle: \"monthly\" | \"yearly\") => void;\n}\n\nexport default function ChangeablePricingSection({\n  title = \"Select a plan\",\n  plans,\n  defaultPlanId,\n  defaultBillingCycle = \"monthly\",\n  monthlyLabel = \"Monthly\",\n  yearlyLabel = \"Yearly\",\n  footerText = \"Cancel anytime. No long-term contract.\",\n  buttonText = \"Continue\",\n  onContinue,\n}: ChangeablePricingSectionProps) {\n  const [selectedPlan, setSelectedPlan] = useState<PlanId>(\n    defaultPlanId || (plans.length > 0 ? plans[0].id : \"\"),\n  );\n  const [billingCycle, setBillingCycle] = useState<\"monthly\" | \"yearly\">(\n    defaultBillingCycle,\n  );\n\n  return (\n    <div className=\"theme-injected flex items-center justify-center min-h-[600px] p-4 \">\n      <div className=\"w-full max-w-[460px] bg-muted rounded-lg p-1.5 shadow-sm ring-1 ring-border\">\n        {/* Header */}\n        <div className=\"flex items-center justify-between px-3 py-4\">\n          <h2 className=\"text-[17px] font-medium text-foreground tracking-tighter\">\n            {title}\n          </h2>\n          <div className=\"flex items-center bg-background p-1 rounded-lg relative z-0\">\n            <motion.div\n              className=\"absolute top-1 bottom-1 w-[calc(50%-4px)] bg-accent rounded-lg shadow-sm -z-10\"\n              animate={{\n                x: billingCycle === \"monthly\" ? 0 : \"100%\",\n              }}\n              transition={{ type: \"spring\", bounce: 0.4, duration: 0.7 }}\n              style={{ left: 4 }}\n            />\n            <button\n              onClick={() => setBillingCycle(\"monthly\")}\n              className={`jet w-[72px] py-1.5 rounded-lg text-[10px] font-bold tracking-widest uppercase transition-colors z-10 ${\n                billingCycle === \"monthly\"\n                  ? \"text-foreground\"\n                  : \"text-muted-foreground\"\n              }`}\n            >\n              {monthlyLabel}\n            </button>\n            <button\n              onClick={() => setBillingCycle(\"yearly\")}\n              className={`jet w-[72px] py-1.5 rounded-lg text-[10px] font-bold tracking-widest uppercase transition-colors z-10 ${\n                billingCycle === \"yearly\"\n                  ? \"text-foreground\"\n                  : \"text-muted-foreground\"\n              }`}\n            >\n              {yearlyLabel}\n            </button>\n          </div>\n        </div>\n\n        {/* Plans */}\n        <div className=\"flex flex-col gap-1\">\n          {plans.map((plan) => {\n            const isSelected = selectedPlan === plan.id;\n\n            return (\n              <motion.div\n                layout\n                key={plan.id}\n                onClick={() => setSelectedPlan(plan.id)}\n                transition={{ type: \"spring\", bounce: 0.45, duration: 0.7 }}\n                className={`relative overflow-hidden cursor-pointer rounded-lg transition-colors duration-300 bg-background ${\n                  isSelected\n                    ? \"ring-1 ring-primary shadow-[0_4px_16px_hsl(var(--foreground)/0.08)]\"\n                    : \"ring-1 ring-border shadow-sm hover:ring-border\"\n                }`}\n              >\n                <div className=\"px-4 py-3.5 sm:px-5 sm:py-4\">\n                  <div className=\"flex justify-between items-start gap-3\">\n                    <div className=\"flex flex-1 gap-3\">\n                      <div className=\"mt-0.5 shrink-0\">\n                        <div\n                          className={`w-[18px] h-[18px] rounded-lg flex items-center justify-center border transition-colors ${\n                            isSelected\n                              ? \"border-primary bg-primary\"\n                              : \"border-border bg-background\"\n                          }`}\n                        >\n                          {isSelected && (\n                            <Check\n                              size={11}\n                              strokeWidth={3.5}\n                              className=\"text-primary-foreground\"\n                            />\n                          )}\n                        </div>\n                      </div>\n\n                      <div className=\"flex flex-1 flex-col\">\n                        <div className=\"flex flex-wrap items-center gap-2\">\n                          <span className=\"text-[16px] font-medium text-foreground leading-none\">\n                            {plan.name}\n                          </span>\n                          {plan.badge && (\n                            <span className=\"bg-accent text-accent-foreground text-[9px] font-bold px-2 py-0.5 rounded-lg uppercase tracking-wider leading-none\">\n                              {plan.badge}\n                            </span>\n                          )}\n                        </div>\n                        <span className=\"text-[11px] text-muted-foreground mt-1.5 leading-snug sm:leading-none\">\n                          {plan.description}\n                        </span>\n                      </div>\n                    </div>\n\n                    <div className=\"flex flex-col items-end shrink-0\">\n                      <div className=\"flex items-center justify-end text-[15px] sm:text-[16px] font-medium text-foreground leading-none overflow-hidden h-[18px]\">\n                        <AnimatePresence mode=\"popLayout\" initial={false}>\n                          <motion.span\n                            key={billingCycle}\n                            initial={{\n                              y: billingCycle === \"yearly\" ? 20 : -20,\n                              opacity: 0,\n                              filter: \"blur(4px)\",\n                            }}\n                            animate={{ y: 0, opacity: 1, filter: \"blur(0px)\" }}\n                            exit={{\n                              y: billingCycle === \"monthly\" ? -20 : 20,\n                              opacity: 0,\n                              filter: \"blur(4px)\",\n                            }}\n                            transition={{\n                              type: \"spring\",\n                              bounce: 0,\n                              duration: 0.4,\n                            }}\n                            className=\"inline-block whitespace-nowrap\"\n                          >\n                            {billingCycle === \"monthly\"\n                              ? plan.priceMonthly\n                              : plan.priceYearly}\n                          </motion.span>\n                        </AnimatePresence>\n                      </div>\n                      <span className=\"jet text-[10px] text-muted-foreground font-bold tracking-widest uppercase mt-1.5 leading-none\">\n                        per user/month\n                      </span>\n                    </div>\n                  </div>\n\n                  <AnimatePresence initial={false}>\n                    {isSelected && (\n                      <motion.div\n                        key=\"features\"\n                        initial={{ height: 0, opacity: 0 }}\n                        animate={{ height: \"auto\", opacity: 1 }}\n                        exit={{ height: 0, opacity: 0 }}\n                        transition={{\n                          opacity: { duration: 0.2 },\n                          height: { duration: 0.3, ease: \"easeOut\" },\n                        }}\n                        className=\"overflow-hidden\"\n                      >\n                        <div className=\"pt-3.5 mt-3.5 sm:pt-4 sm:mt-4 mb-1 border-t border-border\">\n                          {plan.featuresLabel && (\n                            <p className=\"jet text-[10px] font-bold text-muted-foreground tracking-widest uppercase mb-3\">\n                              {plan.featuresLabel}\n                            </p>\n                          )}\n                          <div className=\"flex flex-col gap-2.5\">\n                            {plan.features.map((feature, idx) => (\n                              <div\n                                key={idx}\n                                className=\"flex items-center gap-2.5\"\n                              >\n                                <Check\n                                  size={14}\n                                  strokeWidth={3}\n                                  className=\"text-primary shrink-0\"\n                                />\n                                <span className=\"text-[12px] text-muted-foreground leading-tight\">\n                                  {feature.text}\n                                </span>\n                                {feature.hasInfo && (\n                                  <Info\n                                    size={13}\n                                    className=\"text-muted-foreground ml-0.5\"\n                                  />\n                                )}\n                              </div>\n                            ))}\n                          </div>\n                        </div>\n                      </motion.div>\n                    )}\n                  </AnimatePresence>\n                </div>\n              </motion.div>\n            );\n          })}\n        </div>\n\n        {/* Footer */}\n        <div className=\"flex flex-col gap-4 items-center sm:flex-row sm:justify-between mt-5 px-3 pb-2\">\n          <span className=\"jet text-[10px] text-muted-foreground uppercase tracking-[0.05em] leading-relaxed text-center sm:text-left\">\n            {footerText}\n          </span>\n          <button\n            onClick={() => onContinue?.(selectedPlan, billingCycle)}\n            className=\"w-full sm:w-auto bg-primary text-primary-foreground px-8 py-2.5 rounded-lg text-[13px] font-medium active:scale-95 transition-all outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n          >\n            {buttonText}\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collection-grid-disclosure",
      "type": "registry:component",
      "title": "Collection Grid Disclosure",
      "description": "An animated collection grid that smoothly expands to reveal additional content on interaction.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/collection-grid-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { ChevronRight, X, Coffee } from 'lucide-react';\nimport { FaCarrot, FaGraduationCap, FaPills, FaPlug } from 'react-icons/fa';\nimport { TbHomeFilled, TbPlayerPlayFilled } from 'react-icons/tb';\nimport { FaBottleWater } from 'react-icons/fa6';\nimport { MdWifi } from 'react-icons/md';\nimport { BsFillMouse2Fill } from 'react-icons/bs';\nimport { IoGameController } from 'react-icons/io5';\nimport useMeasure from 'react-use-measure';\nimport type { IconType } from 'react-icons';\n\nexport interface CollectionItem {\n  id: string;\n  name: string;\n  price: number;\n  icon: IconType;\n}\n\nexport interface Collection {\n  id: string;\n  name: string;\n  items: CollectionItem[];\n}\n\ninterface DisclosureCardProps {\n  collections?: Collection[];\n}\n\nconst DEFAULT_COLLECTIONS: Collection[] = [\n  {\n    id: 'utilities',\n    name: 'Utilities',\n    items: [\n      {\n        id: 'u-1',\n        name: 'Electricity',\n        price: 150,\n        icon: FaPlug,\n      },\n      {\n        id: 'u-2',\n        name: 'Water',\n        price: 50,\n        icon: FaBottleWater,\n      },\n      {\n        id: 'u-3',\n        name: 'Internet',\n        price: 100,\n        icon: MdWifi,\n      },\n    ],\n  },\n  {\n    id: 'subscriptions',\n    name: 'Subscriptions',\n    items: [\n      {\n        id: 's-1',\n        name: 'Streaming',\n        price: 80,\n        icon: TbPlayerPlayFilled,\n      },\n      {\n        id: 's-2',\n        name: 'Courses',\n        price: 100,\n        icon: FaGraduationCap,\n      },\n      {\n        id: 's-3',\n        name: 'Software & Apps',\n        price: 120,\n        icon: BsFillMouse2Fill,\n      },\n      {\n        id: 's-4',\n        name: 'Games',\n        price: 50,\n        icon: IoGameController,\n      },\n    ],\n  },\n  {\n    id: 'daily-needs',\n    name: 'Daily Needs',\n    items: [\n      {\n        id: 'dn-1',\n        name: 'Groceries',\n        price: 500.56,\n        icon: FaCarrot,\n      },\n      {\n        id: 'dn-2',\n        name: 'Snacks',\n        price: 45.2,\n        icon: Coffee,\n      },\n      {\n        id: 'dn-3',\n        name: 'Essentials',\n        price: 120.34,\n        icon: TbHomeFilled,\n      },\n      {\n        id: 'dn-4',\n        name: 'Health',\n        price: 75.8,\n        icon: FaPills,\n      },\n    ],\n  },\n];\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 200,\n  damping: 20,\n  mass: 1.1,\n};\n\nexport const DisclosureCard: FC<DisclosureCardProps> = ({\n  collections = DEFAULT_COLLECTIONS,\n}) => {\n  return (\n    <div className=\"flex w-full items-center justify-center\">\n      <motion.div\n        className=\"flex flex-col gap-2 will-change-transform\"\n        layout=\"position\"\n        transition={springConfig}\n      >\n        {collections.map((collection) => (\n          <GridContainer\n            key={collection.id}\n            title={collection.name}\n            items={collection.items}\n          />\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n\nconst GridContainer = ({\n  items,\n  title,\n}: {\n  items: CollectionItem[];\n  title: string;\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <motion.div\n        className=\"w-[300px] cursor-pointer overflow-hidden rounded-lg border border-gray-200 bg-zinc-100 dark:border-zinc-700 dark:bg-zinc-800\"\n        animate={{\n          height: bounds.height > 0 ? bounds.height : \"auto\"\n        }}\n      >\n        <div className=\"p-2\" ref={ref}>\n          <AnimatePresence\n            mode=\"popLayout\"\n            key={isExpanded ? 'expanded' : 'collapsed'}\n            propagate\n          >\n            {!isExpanded ? (\n              <motion.div\n                key={'collapsed'}\n                className=\"flex w-full items-center space-x-2\"\n                onClick={() => setIsExpanded(true)}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.1, ease: 'easeOut' }}\n              >\n                <div className=\"grid grid-cols-2 gap-1\">\n                  {items.map((item, index) => (\n                    <motion.div\n                      className=\"relative flex size-6 items-center justify-center rounded-full bg-zinc-300 p-1 dark:bg-white\"\n                      key={`${item.name}-${index}`}\n                      layoutId={`${item.name}`}\n                      transition={{ ...springConfig, delay: 0.01 }}\n                    >\n                      <item.icon className=\"size-4 fill-white dark:fill-black\" />\n                    </motion.div>\n                  ))}\n                </div>\n\n                <div className=\"ml-2 flex flex-1 flex-col items-start justify-center\">\n                  <motion.span\n                    layoutId={`title-${title}`}\n                    layout=\"position\"\n                    className=\"text-lg text-zinc-900 dark:text-zinc-100\"\n                  >\n                    {title}\n                  </motion.span>\n                  <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">\n                    {items.length} Items\n                  </span>\n                </div>\n\n                <div>\n                  <ChevronRight className=\"size-6 text-zinc-500 dark:text-zinc-400\" />\n                </div>\n              </motion.div>\n            ) : (\n              <motion.div\n                key={'expanded'}\n                className=\"flex w-full flex-col gap-3\"\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.01, ease: 'easeOut' }}\n              >\n                <motion.div className=\"flex items-center px-1\" layout>\n                  <motion.span\n                    className=\"flex-1 text-lg text-zinc-900 dark:text-zinc-100\"\n                    layoutId={`title-${title}`}\n                    layout=\"position\"\n                  >\n                    {title}\n                  </motion.span>\n                  <div\n                    className=\"flex items-center justify-center rounded-full bg-zinc-400 p-1 dark:bg-white\"\n                    onClick={() => setIsExpanded(false)}\n                  >\n                    <X className=\"size-4 text-white dark:text-black\" />\n                  </div>\n                </motion.div>\n\n                <div className=\"flex flex-col gap-3\">\n                  <AnimatePresence mode=\"popLayout\">\n                    {items.map((item) => (\n                      <div\n                        className=\"flex items-center justify-center gap-2\"\n                        key={item.id}\n                      >\n                        <motion.div\n                          className=\"flex size-10 items-center justify-center rounded-full bg-black\"\n                          layoutId={`${item.name}`}\n                        >\n                          <item.icon className=\"size-6 fill-white\" />\n                        </motion.div>\n                        <motion.div\n                          className=\"mt-2 flex flex-1 flex-col items-start justify-center gap-2 leading-0\"\n                          initial={{ opacity: 0 }}\n                          animate={{ opacity: 1 }}\n                        >\n                          <motion.p className=\"text-md text-zinc-800 dark:text-zinc-100\">\n                            {item.name}\n                          </motion.p>\n                          <div className=\"flex gap-1 text-zinc-400 dark:text-zinc-500\">\n                            <div className=\"flex items-start justify-center gap-1\">\n                              <p className=\"text-sm\">${item.price}</p>\n                            </div>\n                          </div>\n                        </motion.div>\n                        <div>\n                          <ChevronRight className=\"mr-1 size-6 text-zinc-400 dark:text-zinc-500\" />\n                        </div>\n                      </div>\n                    ))}\n                  </AnimatePresence>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collection-grid-disclosure-base",
      "type": "registry:component",
      "title": "Collection Grid Disclosure (base)",
      "description": "Theme-ready base variant of An animated collection grid that smoothly expands to reveal additional content on interaction..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/collection-grid-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { ChevronRight, X, Coffee } from 'lucide-react';\nimport { FaCarrot, FaGraduationCap, FaPills, FaPlug } from 'react-icons/fa';\nimport { TbHomeFilled, TbPlayerPlayFilled } from 'react-icons/tb';\nimport { FaBottleWater } from 'react-icons/fa6';\nimport { MdWifi } from 'react-icons/md';\nimport { BsFillMouse2Fill } from 'react-icons/bs';\nimport { IoGameController } from 'react-icons/io5';\nimport useMeasure from 'react-use-measure';\nimport type { IconType } from 'react-icons';\n\nexport interface CollectionItem {\n  id: string;\n  name: string;\n  price: number;\n  icon: IconType;\n}\n\nexport interface Collection {\n  id: string;\n  name: string;\n  items: CollectionItem[];\n}\n\ninterface DisclosureCardProps {\n  collections?: Collection[];\n}\n\nconst DEFAULT_COLLECTIONS: Collection[] = [\n  {\n    id: 'utilities',\n    name: 'Utilities',\n    items: [\n      {\n        id: 'u-1',\n        name: 'Electricity',\n        price: 150,\n        icon: FaPlug,\n      },\n      {\n        id: 'u-2',\n        name: 'Water',\n        price: 50,\n        icon: FaBottleWater,\n      },\n      {\n        id: 'u-3',\n        name: 'Internet',\n        price: 100,\n        icon: MdWifi,\n      },\n    ],\n  },\n  {\n    id: 'subscriptions',\n    name: 'Subscriptions',\n    items: [\n      {\n        id: 's-1',\n        name: 'Streaming',\n        price: 80,\n        icon: TbPlayerPlayFilled,\n      },\n      {\n        id: 's-2',\n        name: 'Courses',\n        price: 100,\n        icon: FaGraduationCap,\n      },\n      {\n        id: 's-3',\n        name: 'Software & Apps',\n        price: 120,\n        icon: BsFillMouse2Fill,\n      },\n      {\n        id: 's-4',\n        name: 'Games',\n        price: 50,\n        icon: IoGameController,\n      },\n    ],\n  },\n  {\n    id: 'daily-needs',\n    name: 'Daily Needs',\n    items: [\n      {\n        id: 'dn-1',\n        name: 'Groceries',\n        price: 500.56,\n        icon: FaCarrot,\n      },\n      {\n        id: 'dn-2',\n        name: 'Snacks',\n        price: 45.2,\n        icon: Coffee,\n      },\n      {\n        id: 'dn-3',\n        name: 'Essentials',\n        price: 120.34,\n        icon: TbHomeFilled,\n      },\n      {\n        id: 'dn-4',\n        name: 'Health',\n        price: 75.8,\n        icon: FaPills,\n      },\n    ],\n  },\n];\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 200,\n  damping: 20,\n  mass: 1.1,\n};\n\nexport const DisclosureCard: FC<DisclosureCardProps> = ({\n  collections = DEFAULT_COLLECTIONS,\n}) => {\n  return (\n    <div className=\"theme-injected flex w-full items-center justify-center font-sans\">\n      <motion.div\n        className=\"flex flex-col gap-2 will-change-transform\"\n        layout=\"position\"\n        transition={springConfig}\n      >\n        {collections.map((collection) => (\n          <GridContainer\n            key={collection.id}\n            title={collection.name}\n            items={collection.items}\n          />\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n\nconst GridContainer = ({\n  items,\n  title,\n}: {\n  items: CollectionItem[];\n  title: string;\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <motion.div\n        className=\"w-75 cursor-pointer overflow-hidden rounded-lg border border-border bg-card\"\n        animate={{\n          height: bounds.height > 0 ? bounds.height : 'auto',\n        }}\n      >\n        <div className=\"p-2\" ref={ref}>\n          <AnimatePresence\n            mode=\"popLayout\"\n            key={isExpanded ? 'expanded' : 'collapsed'}\n            propagate\n          >\n            {!isExpanded ? (\n              <motion.div\n                key={'collapsed'}\n                className=\"flex w-full items-center space-x-2\"\n                onClick={() => setIsExpanded(true)}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.1, ease: 'easeOut' }}\n              >\n                <div className=\"grid grid-cols-2 gap-1\">\n                  {items.map((item, index) => (\n                    <motion.div\n                      className=\"relative flex size-6 items-center justify-center rounded-4xl bg-primary p-1\"\n                      key={`${item.name}-${index}`}\n                      layoutId={`${item.name}`}\n                      transition={{ ...springConfig, delay: 0.01 }}\n                    >\n                      <item.icon className=\"size-4 fill-current text-primary-foreground\" />\n                    </motion.div>\n                  ))}\n                </div>\n\n                <div className=\"ml-2 flex flex-1 flex-col items-start justify-center\">\n                  <motion.span\n                    layoutId={`title-${title}`}\n                    layout=\"position\"\n                    className=\"font-sans text-lg text-foreground\"\n                  >\n                    {title}\n                  </motion.span>\n                  <span className=\"font-sans text-sm text-muted-foreground\">\n                    {items.length} Items\n                  </span>\n                </div>\n\n                <div>\n                  <ChevronRight className=\"size-6 text-muted-foreground\" />\n                </div>\n              </motion.div>\n            ) : (\n              <motion.div\n                key={'expanded'}\n                className=\"flex w-full flex-col gap-3\"\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.01, ease: 'easeOut' }}\n              >\n                <motion.div className=\"flex items-center px-1\" layout>\n                  <motion.span\n                    className=\"flex-1 font-sans text-lg text-foreground\"\n                    layoutId={`title-${title}`}\n                    layout=\"position\"\n                  >\n                    {title}\n                  </motion.span>\n                  <div\n                    className=\"flex items-center justify-center rounded-4xl bg-input p-1 text-muted-foreground transition-colors hover:text-foreground\"\n                    onClick={() => setIsExpanded(false)}\n                  >\n                    <X className=\"size-4 text-current\" />\n                  </div>\n                </motion.div>\n\n                <div className=\"flex flex-col gap-3\">\n                  <AnimatePresence mode=\"popLayout\">\n                    {items.map((item) => (\n                      <div\n                        className=\"flex items-center justify-center gap-2\"\n                        key={item.id}\n                      >\n                        <motion.div\n                          className=\"flex size-10 items-center justify-center rounded-4xl bg-primary\"\n                          layoutId={`${item.name}`}\n                        >\n                          <item.icon className=\"size-6 fill-current text-primary-foreground\" />\n                        </motion.div>\n                        <motion.div\n                          className=\"mt-2 flex flex-1 flex-col items-start justify-center gap-2 leading-0\"\n                          initial={{ opacity: 0 }}\n                          animate={{ opacity: 1 }}\n                        >\n                          <motion.p className=\"font-sans text-md text-foreground\">\n                            {item.name}\n                          </motion.p>\n                          <div className=\"flex gap-1 text-muted-foreground\">\n                            <div className=\"flex items-start justify-center gap-1\">\n                              <p className=\"font-sans text-sm\">${item.price}</p>\n                            </div>\n                          </div>\n                        </motion.div>\n                        <div>\n                          <ChevronRight className=\"mr-1 size-6 text-muted-foreground\" />\n                        </div>\n                      </div>\n                    ))}\n                  </AnimatePresence>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command-search",
      "type": "registry:component",
      "title": "Command Search",
      "description": "A premium command palette with sectioned results, keyboard navigation, and smooth animations.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/command-search.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useMemo,\n  useEffect,\n  useRef,\n  type KeyboardEvent,\n  type FC,\n} from 'react';\nimport type { ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  Search,\n  User,\n  Bell,\n  HelpCircle,\n  MessageSquare,\n  ArrowRight,\n} from 'lucide-react';\n\nexport interface CommandItem {\n  id: string;\n  title: string;\n  section: 'Suggestions' | 'Settings' | 'Help';\n  icon: ReactNode;\n  shortcut?: string;\n  action: () => void;\n}\n\n/*  DEFAULT DATA */\nconst DEFAULT_ITEMS: CommandItem[] = [\n  {\n    id: '1',\n    title: 'Calendar',\n    section: 'Suggestions',\n    icon: <ArrowRight size={16} />,\n    action: () => console.log('Calendar'),\n  },\n  {\n    id: '2',\n    title: 'Search Emoji',\n    section: 'Suggestions',\n    icon: <ArrowRight size={16} />,\n    action: () => console.log('Emoji'),\n  },\n  {\n    id: '3',\n    title: 'Calculator',\n    section: 'Suggestions',\n    icon: <ArrowRight size={16} />,\n    action: () => console.log('Calculator'),\n  },\n\n  {\n    id: '4',\n    title: 'Profile',\n    section: 'Settings',\n    icon: <User size={16} />,\n    shortcut: '⌘ P',\n    action: () => console.log('Profile'),\n  },\n  {\n    id: '5',\n    title: 'Notifications',\n    section: 'Settings',\n    icon: <Bell size={16} />,\n    shortcut: '⌘ N',\n    action: () => console.log('Notifications'),\n  },\n\n  {\n    id: '6',\n    title: 'FAQ',\n    section: 'Help',\n    icon: <HelpCircle size={16} />,\n    action: () => console.log('FAQ'),\n  },\n  {\n    id: '7',\n    title: 'Messages',\n    section: 'Help',\n    icon: <MessageSquare size={16} />,\n    action: () => console.log('Messages'),\n  },\n];\n\ninterface Props {\n  items?: CommandItem[];\n}\n\nexport const CommandSearch: FC<Props> = ({ items = DEFAULT_ITEMS }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [query, setQuery] = useState('');\n  const [activeIndex, setActiveIndex] = useState(0);\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (isOpen) {\n      const timeout = setTimeout(() => {\n        inputRef.current?.focus();\n      }, 100);\n      return () => clearTimeout(timeout);\n    }\n  }, [isOpen]);\n\n  useEffect(() => {\n    const handleKeyDown = (e: any) => {\n      if (\n        e.key.toLowerCase() === 'f' &&\n        !isOpen &&\n        document.activeElement?.tagName !== 'INPUT' &&\n        document.activeElement?.tagName !== 'TEXTAREA'\n      ) {\n        e.preventDefault();\n        setIsOpen(true);\n      }\n      if (e.key === 'Escape' && isOpen) {\n        e.preventDefault();\n        e.stopPropagation();\n        setIsOpen(false);\n      }\n    };\n    // Use capture to catch the event before other listeners\n    window.addEventListener('keydown', handleKeyDown, true);\n    return () => window.removeEventListener('keydown', handleKeyDown, true);\n  }, [isOpen]);\n\n  const filteredItems = useMemo(() => {\n    return items.filter((item) =>\n      item.title.toLowerCase().includes(query.toLowerCase()),\n    );\n  }, [query, items]);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setActiveIndex(0));\n  }, [query]);\n\n  const sections = useMemo(() => {\n    const groups: { [key: string]: CommandItem[] } = {};\n    filteredItems.forEach((item) => {\n      if (!groups[item.section]) groups[item.section] = [];\n      groups[item.section].push(item);\n    });\n\n    return Object.entries(groups).map(([name, items]) => ({\n      name,\n      items,\n    }));\n  }, [filteredItems]);\n\n  const handleKeyDown = (e: KeyboardEvent) => {\n    if (e.key === 'ArrowDown') {\n      e.preventDefault();\n      setActiveIndex((prev) => (prev + 1) % filteredItems.length);\n    } else if (e.key === 'ArrowUp') {\n      e.preventDefault();\n      setActiveIndex(\n        (prev) => (prev - 1 + filteredItems.length) % filteredItems.length,\n      );\n    } else if (e.key === 'Enter') {\n      const selectedItem = filteredItems[activeIndex];\n      if (selectedItem) {\n        selectedItem.action();\n        setIsOpen(false);\n      }\n    }\n  };\n\n  const sharedTransition = {\n    type: 'tween' as const,\n    ease: 'easeOut' as const,\n    duration: 0.15,\n  };\n\n  return (\n    <>\n      <AnimatePresence mode=\"popLayout\">\n        {isOpen && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"fixed inset-0 z-40 bg-zinc-950/10 backdrop-blur-[2px] dark:bg-black/40\"\n              onClick={() => setIsOpen(false)}\n            />\n        )}\n      </AnimatePresence>\n\n      <div className=\"relative z-50 h-10 w-full max-w-[280px] md:w-64\">\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen ? (\n            <motion.button\n              key=\"trigger\"\n              layoutId=\"command-pallete\"\n              onClick={() => setIsOpen(true)}\n              className=\"group absolute top-0 left-0 flex h-10 w-full items-center gap-3 overflow-hidden rounded-lg border border-zinc-200 bg-white px-4 py-2 text-zinc-500 shadow-sm hover:text-zinc-900 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-400 dark:shadow-none dark:hover:text-white\"\n              transition={sharedTransition}\n            >\n              <motion.div layoutId=\"search-icon\" transition={sharedTransition}>\n                <Search size={16} className=\"opacity-40\" />\n              </motion.div>\n              <motion.span\n                layoutId=\"search-text\"\n                transition={sharedTransition}\n                className=\"pr-8 text-sm font-medium\"\n              >\n                Find...\n              </motion.span>\n              <motion.kbd\n                layoutId=\"search-shortcut\"\n                transition={sharedTransition}\n                className=\"absolute right-2 rounded border border-zinc-200 bg-zinc-50 px-2 py-0.5 text-[14px] font-bold text-zinc-400 group-hover:text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-500 dark:group-hover:text-zinc-300\"\n              >\n                F\n              </motion.kbd>\n            </motion.button>\n          ) : (\n            <motion.div\n              layoutId=\"command-pallete\"\n              transition={sharedTransition}\n              className=\"absolute -top-2 -left-2 z-50 flex h-80 w-xs flex-col overflow-hidden rounded-2xl border-[1.4px] border-zinc-200 bg-white shadow-[0_32px_64px_-15px_rgba(0,0,0,0.1)] md:w-[400px] dark:border-zinc-800 dark:bg-zinc-950 dark:shadow-black\"\n              onClick={(e) => e.stopPropagation()}\n            >\n              {/* Search Header */}\n              <div className=\"flex items-center border-b-[1.4px] border-zinc-100 px-4 py-3.5 dark:border-zinc-800/50\">\n                <motion.div\n                  layoutId=\"search-icon\"\n                  transition={sharedTransition}\n                >\n                  <Search\n                    size={18}\n                    className=\"mr-3 text-zinc-400 dark:text-zinc-500\"\n                    strokeWidth={2.5}\n                  />\n                </motion.div>\n                <div className=\"relative flex flex-1 items-center\">\n                  <input\n                    ref={inputRef}\n                    type=\"text\"\n                    className=\"w-full bg-transparent text-base font-medium text-zinc-900 outline-none md:text-[15px] dark:text-white\"\n                    value={query}\n                    onChange={(e) => setQuery(e.target.value)}\n                    onKeyDown={handleKeyDown}\n                  />\n                  {!query && (\n                    <motion.span\n                      layoutId=\"search-text\"\n                      transition={sharedTransition}\n                      className=\"pointer-events-none absolute left-0 text-[15px] font-medium text-zinc-400 dark:text-zinc-600\"\n                    >\n                      Find...\n                    </motion.span>\n                  )}\n                </div>\n                <div className=\"ml-2 flex items-center gap-1.5\">\n                  <motion.span\n                    layoutId=\"search-shortcut\"\n                    transition={sharedTransition}\n                    className=\"rounded-[2px] border border-zinc-200 bg-zinc-50 p-0.5 px-1 text-[11px] font-bold text-zinc-400 dark:border-zinc-800 dark:bg-zinc-900/50 dark:text-zinc-500\"\n                  >\n                    Esc\n                  </motion.span>\n                </div>\n              </div>\n\n              {/* Results Body */}\n              <div className=\"custom-scrollbar flex-1 overflow-y-auto p-1.5 md:max-h-[380px]\">\n                {filteredItems.length === 0 ? (\n                  <div className=\"py-12 text-center text-sm text-zinc-500\">\n                    No results found for \"{query}\"\n                  </div>\n                ) : (\n                  <div className=\"space-y-4 py-1\">\n                    {sections.map((section) => (\n                      <div key={section.name} className=\"space-y-1\">\n                        <h3 className=\"px-3 py-1 text-[11px] font-semibold tracking-wider text-zinc-400 uppercase dark:text-zinc-500\">\n                          {section.name}\n                        </h3>\n                        <div className=\"space-y-0.5\">\n                          {section.items.map((item) => {\n                            const globalIndex = filteredItems.findIndex(\n                              (fi) => fi.id === item.id,\n                            );\n                            const isActive = globalIndex === activeIndex;\n\n                            return (\n                              <button\n                                key={item.id}\n                                className={`group flex w-full items-center justify-between rounded-md px-3 py-2.5 text-left ${isActive ? 'bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-white' : 'text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-200'} `}\n                                onMouseEnter={() => setActiveIndex(globalIndex)}\n                                onClick={() => {\n                                  item.action();\n                                  setIsOpen(false);\n                                }}\n                              >\n                                <div className=\"flex items-center gap-3\">\n                                  <span\n                                    className={`${isActive ? 'text-zinc-900 dark:text-white' : 'text-zinc-400 group-hover:text-zinc-600 dark:text-zinc-500 dark:group-hover:text-zinc-300'}`}\n                                  >\n                                    {item.icon}\n                                  </span>\n                                  <span className=\"text-[14px] leading-none font-medium\">\n                                    {item.title}\n                                  </span>\n                                </div>\n\n                                {item.shortcut && (\n                                  <kbd\n                                    className={`rounded border px-1.5 py-0.5 text-[10px] font-bold ${isActive ? 'border-zinc-300 bg-white text-zinc-500 dark:border-zinc-600 dark:bg-zinc-700/50 dark:text-zinc-300' : 'border-transparent bg-transparent text-zinc-400 group-hover:text-zinc-500 dark:text-zinc-600'} `}\n                                  >\n                                    {item.shortcut}\n                                  </kbd>\n                                )}\n                              </button>\n                            );\n                          })}\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                )}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command-search-base",
      "type": "registry:component",
      "title": "Command Search (base)",
      "description": "Theme-ready base variant of A premium command palette with sectioned results, keyboard navigation, and smooth animations..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/command-search.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useMemo,\n  useEffect,\n  useRef,\n  type KeyboardEvent,\n  type FC,\n} from 'react';\nimport type { ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  Search,\n  User,\n  Bell,\n  HelpCircle,\n  MessageSquare,\n  ArrowRight,\n} from 'lucide-react';\n\nexport interface CommandItem {\n  id: string;\n  title: string;\n  section: 'Suggestions' | 'Settings' | 'Help';\n  icon: ReactNode;\n  shortcut?: string;\n  action: () => void;\n}\n\n/*  DEFAULT DATA */\nconst DEFAULT_ITEMS: CommandItem[] = [\n  {\n    id: '1',\n    title: 'Calendar',\n    section: 'Suggestions',\n    icon: <ArrowRight size={16} />,\n    action: () => console.log('Calendar'),\n  },\n  {\n    id: '2',\n    title: 'Search Emoji',\n    section: 'Suggestions',\n    icon: <ArrowRight size={16} />,\n    action: () => console.log('Emoji'),\n  },\n  {\n    id: '3',\n    title: 'Calculator',\n    section: 'Suggestions',\n    icon: <ArrowRight size={16} />,\n    action: () => console.log('Calculator'),\n  },\n\n  {\n    id: '4',\n    title: 'Profile',\n    section: 'Settings',\n    icon: <User size={16} />,\n    shortcut: '⌘ P',\n    action: () => console.log('Profile'),\n  },\n  {\n    id: '5',\n    title: 'Notifications',\n    section: 'Settings',\n    icon: <Bell size={16} />,\n    shortcut: '⌘ N',\n    action: () => console.log('Notifications'),\n  },\n\n  {\n    id: '6',\n    title: 'FAQ',\n    section: 'Help',\n    icon: <HelpCircle size={16} />,\n    action: () => console.log('FAQ'),\n  },\n  {\n    id: '7',\n    title: 'Messages',\n    section: 'Help',\n    icon: <MessageSquare size={16} />,\n    action: () => console.log('Messages'),\n  },\n];\n\ninterface Props {\n  items?: CommandItem[];\n}\n\nexport const CommandSearch: FC<Props> = ({ items = DEFAULT_ITEMS }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [query, setQuery] = useState('');\n  const [activeIndex, setActiveIndex] = useState(0);\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (isOpen) {\n      const timeout = setTimeout(() => {\n        inputRef.current?.focus();\n      }, 100);\n      return () => clearTimeout(timeout);\n    }\n  }, [isOpen]);\n\n  useEffect(() => {\n    const handleKeyDown = (e: any) => {\n      if (\n        e.key.toLowerCase() === 'f' &&\n        !isOpen &&\n        document.activeElement?.tagName !== 'INPUT' &&\n        document.activeElement?.tagName !== 'TEXTAREA'\n      ) {\n        e.preventDefault();\n        setIsOpen(true);\n      }\n      if (e.key === 'Escape' && isOpen) {\n        e.preventDefault();\n        e.stopPropagation();\n        setIsOpen(false);\n      }\n    };\n    window.addEventListener('keydown', handleKeyDown, true);\n    return () => window.removeEventListener('keydown', handleKeyDown, true);\n  }, [isOpen]);\n\n  const filteredItems = useMemo(() => {\n    return items.filter((item) =>\n      item.title.toLowerCase().includes(query.toLowerCase()),\n    );\n  }, [query, items]);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setActiveIndex(0));\n  }, [query]);\n\n  const sections = useMemo(() => {\n    const groups: { [key: string]: CommandItem[] } = {};\n    filteredItems.forEach((item) => {\n      if (!groups[item.section]) groups[item.section] = [];\n      groups[item.section].push(item);\n    });\n\n    return Object.entries(groups).map(([name, items]) => ({\n      name,\n      items,\n    }));\n  }, [filteredItems]);\n\n  const handleKeyDown = (e: KeyboardEvent) => {\n    if (e.key === 'ArrowDown') {\n      e.preventDefault();\n      setActiveIndex((prev) => (prev + 1) % filteredItems.length);\n    } else if (e.key === 'ArrowUp') {\n      e.preventDefault();\n      setActiveIndex(\n        (prev) => (prev - 1 + filteredItems.length) % filteredItems.length,\n      );\n    } else if (e.key === 'Enter') {\n      const selectedItem = filteredItems[activeIndex];\n      if (selectedItem) {\n        selectedItem.action();\n        setIsOpen(false);\n      }\n    }\n  };\n\n  const sharedTransition = {\n    type: 'tween' as const,\n    ease: 'easeOut' as const,\n    duration: 0.15,\n  };\n\n  return (\n    <>\n      <AnimatePresence mode=\"popLayout\">\n        {isOpen && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"fixed inset-0 z-40 bg-zinc-950/10 backdrop-blur-[2px] dark:bg-black/40\"\n              onClick={() => setIsOpen(false)}\n            />\n        )}\n      </AnimatePresence>\n\n      <div className=\"theme-injected relative z-50 h-10 w-full max-w-[280px] md:w-64\">\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen ? (\n            <motion.button\n              key=\"trigger\"\n              layoutId=\"command-pallete\"\n              onClick={() => setIsOpen(true)}\n              className=\"group border-border bg-background text-muted-foreground hover:text-foreground absolute top-0 left-0 flex h-10 w-full items-center gap-3 overflow-hidden rounded-lg border px-4 py-2 shadow-sm\"\n              transition={sharedTransition}\n            >\n              <motion.div layoutId=\"search-icon\" transition={sharedTransition}>\n                <Search size={16} className=\"opacity-40\" />\n              </motion.div>\n              <motion.span\n                layoutId=\"search-text\"\n                transition={sharedTransition}\n                className=\"pr-8 text-sm font-medium\"\n              >\n                Find...\n              </motion.span>\n              <motion.kbd\n                layoutId=\"search-shortcut\"\n                transition={sharedTransition}\n                className=\"border-border bg-muted text-muted-foreground group-hover:text-foreground absolute right-2 rounded-lg border px-2 py-0.5 text-[14px] font-bold\"\n              >\n                F\n              </motion.kbd>\n            </motion.button>\n          ) : (\n            <motion.div\n              layoutId=\"command-pallete\"\n              transition={sharedTransition}\n              className=\"border-border bg-popover absolute -top-2 -left-2 z-50 flex h-80 w-xs flex-col overflow-hidden rounded-lg border shadow-[0_32px_64px_-15px_hsl(var(--foreground)/0.1)] md:w-[400px]\"\n              onClick={(e) => e.stopPropagation()}\n            >\n              <div className=\"border-border flex items-center border-b px-4 py-3.5\">\n                <motion.div\n                  layoutId=\"search-icon\"\n                  transition={sharedTransition}\n                >\n                  <Search\n                    size={18}\n                    className=\"text-muted-foreground mr-3\"\n                    strokeWidth={2.5}\n                  />\n                </motion.div>\n                <div className=\"relative flex flex-1 items-center\">\n                  <input\n                    ref={inputRef}\n                    type=\"text\"\n                    className=\"text-foreground w-full bg-transparent text-base font-medium outline-none md:text-[15px]\"\n                    value={query}\n                    onChange={(e) => setQuery(e.target.value)}\n                    onKeyDown={handleKeyDown}\n                  />\n                  {!query && (\n                    <motion.span\n                      layoutId=\"search-text\"\n                      transition={sharedTransition}\n                      className=\"text-muted-foreground pointer-events-none absolute left-0 text-[15px] font-medium\"\n                    >\n                      Find...\n                    </motion.span>\n                  )}\n                </div>\n                <div className=\"ml-2 flex items-center gap-1.5\">\n                  <motion.span\n                    layoutId=\"search-shortcut\"\n                    transition={sharedTransition}\n                    className=\"border-border bg-muted text-muted-foreground rounded-lg border p-0.5 px-1 text-[11px] font-bold\"\n                  >\n                    Esc\n                  </motion.span>\n                </div>\n              </div>\n\n              <div className=\"custom-scrollbar flex-1 overflow-y-auto p-1.5 md:max-h-[380px]\">\n                {filteredItems.length === 0 ? (\n                  <div className=\"text-muted-foreground py-12 text-center text-sm\">\n                    No results found for \"{query}\"\n                  </div>\n                ) : (\n                  <div className=\"space-y-4 py-1\">\n                    {sections.map((section) => (\n                      <div key={section.name} className=\"space-y-1\">\n                        <h3 className=\"text-muted-foreground px-3 py-1 text-[11px] font-semibold tracking-wider uppercase\">\n                          {section.name}\n                        </h3>\n                        <div className=\"space-y-0.5\">\n                          {section.items.map((item) => {\n                            const globalIndex = filteredItems.findIndex(\n                              (fi) => fi.id === item.id,\n                            );\n                            const isActive = globalIndex === activeIndex;\n\n                            return (\n                              <button\n                                key={item.id}\n                                className={`group flex w-full items-center justify-between rounded-lg px-3 py-2.5 text-left ${isActive ? 'bg-accent text-accent-foreground' : 'text-muted-foreground hover:text-foreground'} `}\n                                onMouseEnter={() => setActiveIndex(globalIndex)}\n                                onClick={() => {\n                                  item.action();\n                                  setIsOpen(false);\n                                }}\n                              >\n                                <div className=\"flex items-center gap-3\">\n                                  <span\n                                    className={`${isActive ? 'text-accent-foreground' : 'text-muted-foreground group-hover:text-foreground'}`}\n                                  >\n                                    {item.icon}\n                                  </span>\n                                  <span className=\"text-[14px] leading-none font-medium\">\n                                    {item.title}\n                                  </span>\n                                </div>\n\n                                {item.shortcut && (\n                                  <kbd\n                                    className={`rounded-lg border px-1.5 py-0.5 text-[10px] font-bold ${isActive ? 'border-border bg-background text-muted-foreground' : 'text-muted-foreground group-hover:text-foreground border-transparent bg-transparent'} `}\n                                  >\n                                    {item.shortcut}\n                                  </kbd>\n                                )}\n                              </button>\n                            );\n                          })}\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                )}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "compose-email-card",
      "type": "registry:component",
      "title": "Compose Email Card",
      "description": "Compact card interface for composing emails with recipient, subject, actions.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/compose-email-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, useEffect, useLayoutEffect, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  X,\n  Minus,\n  Maximize2,\n  Mail,\n  ChevronDown,\n  Smile,\n  Paperclip,\n  Link2,\n  Sparkles,\n  MoreHorizontal,\n  Bold,\n  Italic,\n  Calendar,\n  Upload,\n  Check,\n} from 'lucide-react';\nimport { LuSend } from 'react-icons/lu';\n\n// --- Types ---\nexport interface Attachment {\n  id: string;\n  name: string;\n  type: string;\n  size: string;\n  icon: 'PDF' | 'IMAGE' | 'DOC';\n}\n\nexport interface Recipient {\n  id: string;\n  name: string;\n  avatar: string;\n  email: string;\n}\n\nexport interface EmailData {\n  from: Recipient;\n  to: Recipient[];\n  subject: string;\n  body: string;\n  attachments: Attachment[];\n}\n\ninterface ComposeEmailCardProps {\n  data: EmailData;\n  onSend?: (data: EmailData) => void;\n  onClose?: () => void;\n}\n\ntype ActivePopover =\n  | 'more'\n  | 'emoji'\n  | 'attach'\n  | 'link'\n  | 'ai'\n  | 'schedule'\n  | null;\n\nconst EMOJIS = [\n  '😊',\n  '👍',\n  '🙌',\n  '🔥',\n  '💡',\n  '✅',\n  '🚀',\n  '💼',\n  '📊',\n  '🎯',\n  '💬',\n  '🤝',\n  '⭐',\n  '📌',\n  '🎉',\n  '💪',\n  '🌟',\n  '📈',\n  '🔑',\n  '⚡',\n];\n\nconst AI_SUGGESTIONS = [\n  \"I'd love to schedule a quick call this week to discuss further.\",\n  'Please let me know if you have any questions — happy to help!',\n  'Looking forward to your feedback on this.',\n];\n\nconst SCHEDULE_OPTIONS = [\n  { label: 'Tomorrow 9:00 AM', value: 'tom-9am' },\n  { label: 'Tomorrow 2:00 PM', value: 'tom-2pm' },\n  { label: 'Monday 10:00 AM', value: 'mon-10am' },\n  { label: 'Monday 3:00 PM', value: 'mon-3pm' },\n];\n\nexport const ComposeEmailCard: FC<ComposeEmailCardProps> = ({\n  data,\n  onSend,\n  onClose,\n}) => {\n  const [showToolbar, setShowToolbar] = useState(false);\n  const [toolbarPos, setToolbarPos] = useState({ x: 0, y: 0 });\n  const [activePopover, setActivePopover] = useState<ActivePopover>(null);\n  const [linkUrl, setLinkUrl] = useState('');\n  const [linkText, setLinkText] = useState('');\n  const [linkInserted, setLinkInserted] = useState(false);\n  const [scheduledTime, setScheduledTime] = useState<string | null>(null);\n  const [attachedFiles, setAttachedFiles] = useState<string[]>([]);\n  const [isDraggingOver, setIsDraggingOver] = useState(false);\n  const [fromOpen, setFromOpen] = useState(false);\n  const [selectedFrom, setSelectedFrom] = useState(data.from);\n  const [safeX, setSafeX] = useState(0);\n\n  const bodyRef = useRef<HTMLDivElement>(null);\n  const toolbarRef = useRef<HTMLDivElement>(null);\n  const popoverRef = useRef<HTMLDivElement>(null);\n  const fromRef = useRef<HTMLDivElement>(null);\n\n  const springConfig = {\n    type: 'spring',\n    stiffness: 450,\n    damping: 32,\n    mass: 1,\n  } as const;\n  const popoverAnim = {\n    initial: { opacity: 0, y: 8, scale: 0.96 },\n    animate: { opacity: 1, y: 0, scale: 1 },\n    exit: { opacity: 0, y: 8, scale: 0.96 },\n    transition: { type: 'spring' as const, damping: 22, stiffness: 300 },\n  } as const;\n\n  const handleSelection = () => {\n    const selection = window.getSelection();\n    if (selection && selection.toString().length > 0 && bodyRef.current) {\n      const range = selection.getRangeAt(0);\n      const rect = range.getBoundingClientRect();\n      const parentRect = bodyRef.current.getBoundingClientRect();\n      setToolbarPos({\n        x: rect.left + rect.width / 2 - parentRect.left,\n        y: rect.top - parentRect.top - 60,\n      });\n      setShowToolbar(true);\n    } else {\n      setShowToolbar(false);\n    }\n  };\n\n  const getSafeToolbarX = (rawX: number) => {\n    if (!toolbarRef.current || !bodyRef.current) return rawX;\n    const toolbarWidth = toolbarRef.current.offsetWidth;\n    const containerWidth = bodyRef.current.offsetWidth;\n    const padding = 12;\n    const minX = padding;\n    const maxX = containerWidth - toolbarWidth - padding;\n    return Math.min(Math.max(rawX - toolbarWidth / 2, minX), maxX);\n  };\n\n  useLayoutEffect(() => {\n    if (showToolbar) {\n      // eslint-disable-next-line react-hooks/set-state-in-effect\n      setSafeX(getSafeToolbarX(toolbarPos.x));\n    }\n  }, [toolbarPos, showToolbar]);\n\n  const togglePopover = (name: ActivePopover) => {\n    setActivePopover((prev) => (prev === name ? null : name));\n  };\n\n  // Close popover on outside click\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (\n        popoverRef.current &&\n        !popoverRef.current.contains(e.target as Node)\n      ) {\n        setActivePopover(null);\n      }\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  const insertEmoji = (emoji: string) => {\n    if (bodyRef.current) {\n      const sel = window.getSelection();\n      if (sel && sel.rangeCount > 0) {\n        const range = sel.getRangeAt(0);\n        if (bodyRef.current.contains(range.commonAncestorContainer)) {\n          range.deleteContents();\n          range.insertNode(document.createTextNode(emoji));\n          range.collapse(false);\n          sel.removeAllRanges();\n          sel.addRange(range);\n          return;\n        }\n      }\n      // fallback: append at end\n      bodyRef.current.innerText += emoji;\n    }\n    setActivePopover(null);\n  };\n\n  const insertLink = () => {\n    if (!linkUrl) return;\n    const display = linkText || linkUrl;\n    if (bodyRef.current) {\n      const a = document.createElement('a');\n      a.href = linkUrl.startsWith('http') ? linkUrl : `https://${linkUrl}`;\n      a.textContent = display;\n      a.style.color = '#6366F1';\n      a.style.textDecoration = 'underline';\n      bodyRef.current.appendChild(document.createTextNode(' '));\n      bodyRef.current.appendChild(a);\n      bodyRef.current.appendChild(document.createTextNode(' '));\n    }\n    setLinkInserted(true);\n    setTimeout(() => {\n      setLinkInserted(false);\n      setLinkUrl('');\n      setLinkText('');\n      setActivePopover(null);\n    }, 1000);\n  };\n\n  const insertAISuggestion = (text: string) => {\n    if (bodyRef.current) {\n      bodyRef.current.innerText =\n        (bodyRef.current.innerText || '').trimEnd() + '\\n\\n' + text;\n    }\n    setActivePopover(null);\n  };\n\n  const handleSchedule = (label: string) => {\n    setScheduledTime(label);\n    setActivePopover(null);\n  };\n\n  const handleFakeAttach = () => {\n    const names = [\n      'proposal.pdf',\n      'design-v2.png',\n      'notes.docx',\n      'report.xlsx',\n    ];\n    const random = names[Math.floor(Math.random() * names.length)];\n    if (!attachedFiles.includes(random))\n      setAttachedFiles((p) => [...p, random]);\n    setActivePopover(null);\n  };\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (fromRef.current && !fromRef.current.contains(e.target as Node))\n        setFromOpen(false);\n      if (popoverRef.current && !popoverRef.current.contains(e.target as Node))\n        setActivePopover(null);\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 40, scale: 0.98 }}\n      animate={{ opacity: 1, y: 0, scale: 1 }}\n      transition={{ ...springConfig, damping: 38 }}\n      className=\"z-10 flex max-h-[95vh] w-full flex-col overflow-hidden rounded-4xl border border-gray-200/60 bg-[#F5F5F7] text-[#374151] antialiased shadow-lg sm:max-h-[92vh] sm:rounded-[24px] lg:max-w-145 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-300\"\n    >\n      {/* Header */}\n      <div className=\"flex flex-none items-center justify-between bg-[#F5F5F7] py-3 pr-3 pl-4 sm:py-4 sm:pr-4 sm:pl-5 dark:bg-zinc-900\">\n        <div className=\"flex items-center gap-2 sm:gap-3\">\n          <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-[#6B5FF5] text-white sm:h-10 sm:w-10 sm:rounded-xl\">\n            <Mail size={18} className=\"sm:w-5.5\" strokeWidth={1.5} />\n          </div>\n          <span className=\"text-[14px] font-semibold tracking-tight text-[#29292B] sm:text-[15px] dark:text-zinc-100\">\n            Compose email\n          </span>\n        </div>\n        <div className=\"flex items-center gap-0.5\">\n          <button\n            title=\"minimize\"\n            className=\"rounded-lg p-1.5 text-gray-400 transition-colors hover:text-black/70 sm:p-2 dark:hover:text-white/70\"\n          >\n            <Minus size={16} />\n          </button>\n          <button\n            title=\"Maximize\"\n            className=\"hidden rounded-lg p-2 text-gray-400 transition-colors hover:text-black/70 sm:block dark:hover:text-white/70\"\n          >\n            <Maximize2 size={15} />\n          </button>\n          <button\n            title=\"close\"\n            onClick={onClose}\n            className=\"rounded-lg p-1.5 text-gray-400 transition-colors hover:text-black/70 sm:p-2 dark:hover:text-white/70\"\n          >\n            <X size={18} />\n          </button>\n        </div>\n      </div>\n\n      {/* Scrollable Body */}\n      <div className=\"custom-scrollbar flex-1 overflow-y-auto rounded-[18px] border border-[#E5E5E5] bg-white sm:rounded-4xl dark:border-zinc-800 dark:bg-zinc-950\">\n        <div className=\"space-y-2 px-4 pt-4 pb-2 sm:px-8 sm:pt-6\">\n          {/* From Section */}\n          <div className=\"flex items-center text-[13px]\">\n            <span className=\"w-12 text-gray-400 sm:w-14\">From</span>\n            <div ref={fromRef} className=\"relative\">\n              <button\n                onClick={() => setFromOpen((v) => !v)}\n                className=\"flex max-w-50 cursor-pointer items-center gap-2 rounded-full border border-gray-200 bg-white px-2 py-0.5 shadow-sm transition-all hover:border-gray-300 sm:max-w-none sm:px-2.5 sm:py-1 dark:border-zinc-800 dark:bg-zinc-900\"\n              >\n                <img\n                  src={selectedFrom.avatar}\n                  alt=\"\"\n                  className=\"h-4 w-4 shrink-0 rounded-full object-cover sm:h-5 sm:w-5\"\n                />\n                <span className=\"truncate font-medium text-gray-700 dark:text-zinc-200\">\n                  {selectedFrom.name}\n                </span>\n                <ChevronDown\n                  size={14}\n                  className={`shrink-0 text-gray-400 transition-transform ${fromOpen ? 'rotate-180' : ''}`}\n                />\n              </button>\n              <AnimatePresence>\n                {fromOpen && (\n                  <motion.div\n                    {...popoverAnim}\n                    className=\"absolute top-full left-0 z-50 mt-2 w-52 overflow-hidden rounded-2xl border border-gray-200 bg-white py-1.5 shadow-2xl dark:border-zinc-700 dark:bg-zinc-900\"\n                  >\n                    <p className=\"px-4 pt-1.5 pb-1 text-[10px] font-semibold tracking-wider text-gray-400 uppercase\">\n                      Switch account\n                    </p>\n                    {[\n                      {\n                        id: data.from.id,\n                        name: data.from.name,\n                        email: data.from.email ?? 'me@example.com',\n                        avatar: data.from.avatar,\n                      },\n                      {\n                        id: 'work',\n                        name: 'Work',\n                        email: 'work@company.com',\n                        avatar: data.from.avatar,\n                      },\n                      {\n                        id: 'personal',\n                        name: 'Personal',\n                        email: 'personal@gmail.com',\n                        avatar: data.from.avatar,\n                      },\n                    ].map((acc) => (\n                      <button\n                        key={acc.email}\n                        onClick={() => {\n                          setSelectedFrom(acc);\n                          setFromOpen(false);\n                        }}\n                        className={`flex w-full items-center gap-2.5 px-4 py-2.5 text-left transition-colors hover:bg-gray-50 dark:hover:bg-zinc-800 ${selectedFrom.name === acc.name ? 'text-[#6366F1]' : 'text-gray-700 dark:text-zinc-300'}`}\n                      >\n                        <img\n                          src={acc.avatar}\n                          alt=\"\"\n                          className=\"h-5 w-5 shrink-0 rounded-full object-cover\"\n                        />\n                        <div className=\"min-w-0\">\n                          <p className=\"truncate text-xs font-medium\">\n                            {acc.name}\n                          </p>\n                          <p className=\"truncate text-[10px] text-gray-400 dark:text-zinc-500\">\n                            {acc.email}\n                          </p>\n                        </div>\n                        {selectedFrom.name === acc.name && (\n                          <Check size={13} className=\"ml-auto shrink-0\" />\n                        )}\n                      </button>\n                    ))}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </div>\n\n          {/* To Section */}\n          <div className=\"flex items-start border-b border-gray-100 py-2 text-[13px] dark:border-zinc-800\">\n            <span className=\"mt-2 w-12 text-gray-400 sm:w-14\">To</span>\n            <div className=\"flex flex-1 flex-wrap gap-1.5 sm:gap-2\">\n              {data.to.map((recipient) => (\n                <div\n                  key={recipient.id}\n                  className=\"flex items-center gap-1.5 rounded-full border border-gray-200 bg-white px-2 py-0.5 shadow-sm sm:gap-2 sm:px-2.5 sm:py-1 dark:border-zinc-800 dark:bg-zinc-900\"\n                >\n                  <img\n                    src={recipient.avatar}\n                    alt=\"\"\n                    className=\"h-4 w-4 rounded-full object-cover sm:h-5 sm:w-5\"\n                  />\n                  <span className=\"font-medium text-gray-700 dark:text-zinc-200\">\n                    {recipient.name}\n                  </span>\n                </div>\n              ))}\n            </div>\n            <div className=\"mt-2.5 ml-2 flex gap-2 text-[10px] font-medium text-gray-400 sm:ml-4 sm:gap-3 sm:text-[11px]\">\n              <button className=\"transition-colors hover:text-[#6366F1]\">\n                CC\n              </button>\n              <button className=\"transition-colors hover:text-[#6366F1]\">\n                BCC\n              </button>\n            </div>\n          </div>\n\n          {/* Subject Section */}\n          <div className=\"flex items-center gap-2 border-b border-gray-100 py-2 sm:gap-4 dark:border-zinc-800\">\n            <span className=\"w-12 text-[13px] text-gray-400 sm:w-14\">\n              Subject\n            </span>\n            <input\n              title=\"subject\"\n              type=\"text\"\n              defaultValue={data.subject}\n              className=\"flex-1 bg-transparent text-[14px] font-medium text-gray-800 outline-none sm:text-[15px] dark:text-zinc-100\"\n            />\n          </div>\n        </div>\n\n        {/* Editor Area */}\n        <div className=\"relative min-h-37.5 px-4 py-2 sm:min-h-50 sm:px-8\">\n          <AnimatePresence>\n            {showToolbar && (\n              <motion.div\n                ref={toolbarRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{\n                  opacity: 1,\n                  y: 0,\n                  scale: 1,\n                  left: safeX,\n                }}\n                exit={{ opacity: 0, scale: 0.95 }}\n                transition={springConfig}\n                className=\"absolute z-60 flex origin-bottom scale-90 items-center gap-1 rounded-xl border border-gray-200 bg-white p-1 shadow-xl sm:scale-100 dark:border-zinc-800 dark:bg-zinc-900\"\n                style={{ top: toolbarPos.y }}\n              >\n                <button className=\"flex items-center gap-2 rounded-xl bg-gray-50 px-2 py-1.5 whitespace-nowrap transition-colors hover:bg-gray-100 sm:px-3 dark:bg-zinc-800 dark:hover:bg-zinc-700\">\n                  <Sparkles size={14} className=\"text-[#6366F1]\" />\n                  <span className=\"text-[12px] font-semibold text-gray-700 sm:text-[13px] dark:text-zinc-200\">\n                    Ask AI\n                  </span>\n                </button>\n                <div className=\"mx-1 h-4 w-px bg-gray-200 dark:bg-zinc-700\" />\n                <button\n                  title=\"bold\"\n                  className=\"rounded-lg p-1.5 text-gray-500 hover:bg-gray-50 sm:p-2 dark:hover:bg-zinc-800\"\n                >\n                  <Bold size={14} />\n                </button>\n                <button\n                  title=\"italic\"\n                  className=\"rounded-lg p-1.5 text-gray-500 hover:bg-gray-50 sm:p-2 dark:hover:bg-zinc-800\"\n                >\n                  <Italic size={14} />\n                </button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <div\n            ref={bodyRef}\n            contentEditable\n            onMouseUp={handleSelection}\n            onKeyUp={handleSelection}\n            className=\"min-h-37.5 text-[14px] leading-relaxed whitespace-pre-wrap text-gray-700 outline-none sm:text-[15px] dark:text-zinc-300\"\n            dangerouslySetInnerHTML={{ __html: data.body }}\n          />\n\n          {/* Attachments Section */}\n          <div className=\"mt-6 pb-4 sm:mt-8\">\n            <h4 className=\"mb-3 text-[11px] font-medium tracking-widest text-[#A7A7A9] capitalize sm:mb-4 sm:text-[12px]\">\n              Attachments\n            </h4>\n            <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n              {data.attachments.map((file) => (\n                <motion.div\n                  key={file.id}\n                  whileHover={{ y: -2 }}\n                  className=\"group flex cursor-pointer items-center gap-3 rounded-2xl border-[1.5px] border-[#F1F2F8] bg-white p-2 transition-all hover:border-[#6366F1]/30 sm:rounded-[14px] dark:border-zinc-800 dark:bg-zinc-900\"\n                >\n                  <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-gray-100 text-[9px] font-bold text-gray-400 transition-colors group-hover:bg-[#F5F3FF] group-hover:text-[#6366F1] sm:h-11 sm:w-11 sm:text-[10px] dark:bg-zinc-800 dark:group-hover:bg-[#6366F1]/10\">\n                    {file.icon}\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <p className=\"truncate text-[13px] font-bold text-gray-800 sm:text-[14px] dark:text-zinc-200\">\n                      {file.name}\n                    </p>\n                    <p className=\"text-[10px] font-normal text-gray-400 uppercase sm:text-[11px]\">\n                      {file.type} · {file.size}\n                    </p>\n                  </div>\n                </motion.div>\n              ))}\n              {/* Dynamically added attachments */}\n              {attachedFiles.map((fname) => (\n                <motion.div\n                  key={fname}\n                  initial={{ opacity: 0, y: 4 }}\n                  animate={{ opacity: 1, y: 0 }}\n                  whileHover={{ y: -2 }}\n                  className=\"group flex cursor-pointer items-center gap-3 rounded-2xl border-[1.5px] border-[#6366F1]/20 bg-white p-2 transition-all hover:border-[#6366F1]/40 sm:rounded-[14px] dark:bg-zinc-900\"\n                >\n                  <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-[#F5F3FF] text-[9px] font-bold text-[#6366F1] sm:h-11 sm:w-11 sm:text-[10px] dark:bg-[#6366F1]/10\">\n                    {fname.split('.').pop()?.toUpperCase()}\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <p className=\"truncate text-[13px] font-bold text-gray-800 sm:text-[14px] dark:text-zinc-200\">\n                      {fname}\n                    </p>\n                    <p className=\"text-[10px] font-normal text-[#6366F1] sm:text-[11px]\">\n                      Just added\n                    </p>\n                  </div>\n                  <button\n                    onClick={() =>\n                      setAttachedFiles((p) => p.filter((f) => f !== fname))\n                    }\n                    className=\"rounded-full p-1 text-gray-400 transition-colors hover:bg-gray-100 dark:hover:bg-zinc-800\"\n                  >\n                    <X size={12} />\n                  </button>\n                </motion.div>\n              ))}\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Footer */}\n      <div className=\"flex flex-none flex-col justify-between gap-4 border-gray-100 bg-[#F5F5F7] px-4 py-3 sm:flex-row sm:items-center sm:px-6 sm:py-4 dark:border-zinc-800 dark:bg-zinc-900\">\n        {/* Icon Toolbar with popovers */}\n        <div\n          ref={popoverRef}\n          className=\"relative flex items-center gap-0.5 text-gray-400 sm:gap-1\"\n        >\n          {/* More */}\n          <div className=\"relative\">\n            <button\n              title=\"more\"\n              onClick={() => togglePopover('more')}\n              className=\"rounded-lg p-2 transition-all hover:text-gray-600 dark:hover:text-zinc-200\"\n            >\n              <MoreHorizontal size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'more' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"absolute bottom-full left-0 z-50 mb-2 w-48 overflow-hidden rounded-2xl border border-gray-200 bg-white py-1.5 shadow-2xl dark:border-zinc-700 dark:bg-zinc-900\"\n                >\n                  {[\n                    { label: 'Discard draft', danger: true },\n                    { label: 'Print', danger: false },\n                    { label: 'Save as template', danger: false },\n                    { label: 'Spell check', danger: false },\n                  ].map((opt) => (\n                    <button\n                      key={opt.label}\n                      onClick={() => setActivePopover(null)}\n                      className={`w-full px-4 py-2 text-left text-[13px] transition-colors ${\n                        opt.danger\n                          ? 'text-red-500 hover:bg-red-50 dark:hover:bg-red-500/10'\n                          : 'text-gray-700 hover:bg-gray-50 dark:text-zinc-300 dark:hover:bg-zinc-800'\n                      }`}\n                    >\n                      {opt.label}\n                    </button>\n                  ))}\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* Emoji */}\n          <div className=\"relative\">\n            <button\n              title=\"emoji\"\n              onClick={() => togglePopover('emoji')}\n              className=\"rounded-lg p-2 transition-all hover:text-gray-600 dark:hover:text-zinc-200\"\n            >\n              <Smile size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'emoji' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"absolute bottom-full left-0 z-50 mb-2 w-52 rounded-2xl border border-gray-200 bg-white p-3 shadow-2xl dark:border-zinc-700 dark:bg-zinc-900\"\n                >\n                  <p className=\"mb-2 text-[11px] font-semibold tracking-wider text-gray-400 uppercase\">\n                    Emoji\n                  </p>\n                  <div className=\"grid grid-cols-5 gap-1\">\n                    {EMOJIS.map((e) => (\n                      <button\n                        key={e}\n                        onClick={() => insertEmoji(e)}\n                        className=\"rounded-lg p-1 text-xl transition-colors hover:bg-gray-100 dark:hover:bg-zinc-800\"\n                      >\n                        {e}\n                      </button>\n                    ))}\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* Attach */}\n          <div className=\"relative\">\n            <button\n              title=\"attach\"\n              onClick={() => togglePopover('attach')}\n              className=\"rounded-lg p-2 transition-all hover:text-gray-600 dark:hover:text-zinc-200\"\n            >\n              <Paperclip size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'attach' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"absolute bottom-full left-0 z-50 mb-2 w-52 -translate-x-6 rounded-2xl border border-gray-200 bg-white p-4 shadow-2xl sm:w-56 sm:translate-x-0 dark:border-zinc-700 dark:bg-zinc-900\"\n                >\n                  <p className=\"mb-3 text-[11px] font-semibold tracking-wider text-gray-400 uppercase\">\n                    Attach File\n                  </p>\n                  <div\n                    onDragOver={(e) => {\n                      e.preventDefault();\n                      setIsDraggingOver(true);\n                    }}\n                    onDragLeave={() => setIsDraggingOver(false)}\n                    onDrop={(e) => {\n                      e.preventDefault();\n                      setIsDraggingOver(false);\n                      handleFakeAttach();\n                    }}\n                    onClick={handleFakeAttach}\n                    className={`flex cursor-pointer flex-col items-center gap-2 rounded-xl border-2 border-dashed p-4 transition-all ${isDraggingOver ? 'border-[#6366F1] bg-[#F5F3FF] dark:bg-[#6366F1]/10' : 'border-gray-200 hover:border-[#6366F1]/50 hover:bg-gray-50 dark:border-zinc-700 dark:hover:bg-zinc-800'}`}\n                  >\n                    <Upload size={20} className=\"text-gray-400\" />\n                    <p className=\"text-center text-[12px] text-gray-500 dark:text-zinc-400\">\n                      Click or drag files here\n                    </p>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* Link */}\n          <div className=\"relative\">\n            <button\n              title=\"link\"\n              onClick={() => togglePopover('link')}\n              className=\"rounded-lg p-2 transition-all hover:text-gray-600 dark:hover:text-zinc-200\"\n            >\n              <Link2 size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'link' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"absolute bottom-full left-0 z-50 mb-2 w-56 -translate-x-16 rounded-2xl border border-gray-200 bg-white p-4 shadow-2xl sm:w-64 sm:translate-x-0 dark:border-zinc-700 dark:bg-zinc-900\"\n                >\n                  <p className=\"mb-3 text-[11px] font-semibold tracking-wider text-gray-400 uppercase\">\n                    Insert Link\n                  </p>\n                  <div className=\"space-y-2\">\n                    <input\n                      type=\"text\"\n                      placeholder=\"URL (e.g. https://...)\"\n                      value={linkUrl}\n                      onChange={(e) => setLinkUrl(e.target.value)}\n                      className=\"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 text-[13px] text-gray-800 transition-colors outline-none focus:border-[#6366F1] dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-200\"\n                    />\n                    <input\n                      type=\"text\"\n                      placeholder=\"Display text (optional)\"\n                      value={linkText}\n                      onChange={(e) => setLinkText(e.target.value)}\n                      className=\"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 text-[13px] text-gray-800 transition-colors outline-none focus:border-[#6366F1] dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-200\"\n                    />\n                    <button\n                      onClick={insertLink}\n                      disabled={!linkUrl}\n                      className=\"flex w-full items-center justify-center gap-2 rounded-lg bg-[#6366F1] py-2 text-[13px] font-medium text-white transition-colors hover:bg-[#5558E8] disabled:cursor-not-allowed disabled:opacity-40\"\n                    >\n                      {linkInserted ? (\n                        <>\n                          <Check size={14} /> Inserted!\n                        </>\n                      ) : (\n                        'Insert Link'\n                      )}\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* AI Suggestions */}\n          <div className=\"relative\">\n            <button\n              title=\"ai\"\n              onClick={() => togglePopover('ai')}\n              className=\"rounded-lg p-2 transition-all hover:text-[#6366F1]\"\n            >\n              <Sparkles size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'ai' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"absolute bottom-full left-0 z-50 mb-2 w-56 -translate-x-24 rounded-2xl border border-gray-200 bg-white p-4 shadow-2xl sm:w-72 sm:translate-x-0 dark:border-zinc-700 dark:bg-zinc-900\"\n                >\n                  <div className=\"mb-3 flex items-center gap-2\">\n                    <Sparkles size={14} className=\"text-[#6366F1]\" />\n                    <p className=\"text-[11px] font-semibold tracking-wider text-gray-400 uppercase\">\n                      AI Suggestions\n                    </p>\n                  </div>\n                  <div className=\"space-y-2\">\n                    {AI_SUGGESTIONS.map((s, i) => (\n                      <button\n                        key={i}\n                        onClick={() => insertAISuggestion(s)}\n                        className=\"w-full rounded-xl bg-gray-50 px-3 py-2.5 text-left text-[13px] leading-relaxed text-gray-700 transition-colors hover:bg-[#F5F3FF] hover:text-[#6366F1] dark:bg-zinc-800 dark:text-zinc-300 dark:hover:bg-[#6366F1]/10\"\n                      >\n                        {s}\n                      </button>\n                    ))}\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          <div className=\"mx-2 hidden h-5 w-px bg-gray-200 sm:block dark:bg-zinc-800\" />\n        </div>\n\n        {/* Action Buttons */}\n        <div className=\"flex min-w-0 items-center justify-between gap-2 border-t border-gray-200 pt-3 sm:justify-end sm:gap-3 sm:border-t-0 sm:pt-0 dark:border-zinc-800\">\n          <span className=\"max-w-[140px] min-w-0 truncate text-[11px] font-medium text-[#C6C5CA] sm:max-w-[180px]\">\n            {scheduledTime ? `📅 ${scheduledTime}` : 'Draft saved'}\n          </span>\n          <div className=\"flex flex-shrink-0 items-center gap-2\">\n            {/* Schedule */}\n            <div className=\"relative\">\n              <button\n                onClick={() => togglePopover('schedule')}\n                className={`flex items-center justify-center gap-1.5 rounded-full border px-2.5 py-1.5 text-[13px] font-normal transition-all ${scheduledTime ? 'border-[#6366F1]/40 bg-[#F5F3FF] text-[#6366F1] dark:bg-[#6366F1]/10' : 'border-gray-200 text-[#535355] hover:bg-gray-50 dark:border-zinc-700 dark:text-zinc-400 dark:hover:bg-zinc-800'}`}\n              >\n                <Calendar size={15} strokeWidth={2.5} />\n                {!scheduledTime && (\n                  <span className=\"hidden sm:inline\">Schedule</span>\n                )}\n              </button>\n              <AnimatePresence>\n                {activePopover === 'schedule' && (\n                  <motion.div\n                    {...popoverAnim}\n                    className=\"absolute right-0 bottom-full z-50 mb-2 w-56 rounded-2xl border border-gray-200 bg-white p-4 shadow-2xl dark:border-zinc-700 dark:bg-zinc-900\"\n                  >\n                    <p className=\"mb-3 text-[11px] font-semibold tracking-wider text-gray-400 uppercase\">\n                      Schedule Send\n                    </p>\n                    <div className=\"space-y-1.5\">\n                      {SCHEDULE_OPTIONS.map((opt) => (\n                        <button\n                          key={opt.value}\n                          onClick={() => handleSchedule(opt.label)}\n                          className={`flex w-full items-center justify-between rounded-xl px-3 py-2.5 text-left text-[13px] transition-colors ${scheduledTime === opt.label ? 'bg-[#F5F3FF] text-[#6366F1] dark:bg-[#6366F1]/10' : 'text-gray-700 hover:bg-gray-50 dark:text-zinc-300 dark:hover:bg-zinc-800'}`}\n                        >\n                          {opt.label}\n                          {scheduledTime === opt.label && <Check size={14} />}\n                        </button>\n                      ))}\n                    </div>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n\n            <motion.button\n              whileHover={{ scale: 1.02 }}\n              whileTap={{ scale: 0.98 }}\n              onClick={() => onSend?.(data)}\n              className=\"flex items-center gap-1.5 rounded-full bg-[#0F0F0F] px-4 py-1.5 text-[13px] font-medium whitespace-nowrap text-white shadow-md transition-all hover:opacity-90 sm:px-5 sm:py-2 sm:text-[14px] dark:bg-white dark:text-black\"\n            >\n              <LuSend size={14} /> {scheduledTime ? 'Confirm' : 'Send'}\n            </motion.button>\n          </div>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\nexport default ComposeEmailCard;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "compose-email-card-base",
      "type": "registry:component",
      "title": "Compose Email Card (base)",
      "description": "Theme-ready base variant of Compact card interface for composing emails with recipient, subject, actions..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/compose-email-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, useEffect, useLayoutEffect, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  X,\n  Minus,\n  Maximize2,\n  Mail,\n  ChevronDown,\n  Smile,\n  Paperclip,\n  Link2,\n  Sparkles,\n  MoreHorizontal,\n  Bold,\n  Italic,\n  Calendar,\n  Upload,\n  Check,\n} from 'lucide-react';\nimport { LuSend } from 'react-icons/lu';\n\n// --- Types ---\nexport interface Attachment {\n  id: string;\n  name: string;\n  type: string;\n  size: string;\n  icon: 'PDF' | 'IMAGE' | 'DOC';\n}\n\nexport interface Recipient {\n  id: string;\n  name: string;\n  avatar: string;\n  email: string;\n}\n\nexport interface EmailData {\n  from: Recipient;\n  to: Recipient[];\n  subject: string;\n  body: string;\n  attachments: Attachment[];\n}\n\ninterface ComposeEmailCardProps {\n  data: EmailData;\n  onSend?: (data: EmailData) => void;\n  onClose?: () => void;\n}\n\ntype ActivePopover =\n  | 'more'\n  | 'emoji'\n  | 'attach'\n  | 'link'\n  | 'ai'\n  | 'schedule'\n  | null;\n\nconst EMOJIS = [\n  '😊',\n  '👍',\n  '🙌',\n  '🔥',\n  '💡',\n  '✅',\n  '🚀',\n  '💼',\n  '📊',\n  '🎯',\n  '💬',\n  '🤝',\n  '⭐',\n  '📌',\n  '🎉',\n  '💪',\n  '🌟',\n  '📈',\n  '🔑',\n  '⚡',\n];\n\nconst AI_SUGGESTIONS = [\n  \"I'd love to schedule a quick call this week to discuss further.\",\n  'Please let me know if you have any questions — happy to help!',\n  'Looking forward to your feedback on this.',\n];\n\nconst SCHEDULE_OPTIONS = [\n  { label: 'Tomorrow 9:00 AM', value: 'tom-9am' },\n  { label: 'Tomorrow 2:00 PM', value: 'tom-2pm' },\n  { label: 'Monday 10:00 AM', value: 'mon-10am' },\n  { label: 'Monday 3:00 PM', value: 'mon-3pm' },\n];\n\nexport const ComposeEmailCard: FC<ComposeEmailCardProps> = ({\n  data,\n  onSend,\n  onClose,\n}) => {\n  const [showToolbar, setShowToolbar] = useState(false);\n  const [toolbarPos, setToolbarPos] = useState({ x: 0, y: 0 });\n  const [activePopover, setActivePopover] = useState<ActivePopover>(null);\n  const [linkUrl, setLinkUrl] = useState('');\n  const [linkText, setLinkText] = useState('');\n  const [linkInserted, setLinkInserted] = useState(false);\n  const [scheduledTime, setScheduledTime] = useState<string | null>(null);\n  const [attachedFiles, setAttachedFiles] = useState<string[]>([]);\n  const [isDraggingOver, setIsDraggingOver] = useState(false);\n  const [fromOpen, setFromOpen] = useState(false);\n  const [selectedFrom, setSelectedFrom] = useState(data.from);\n  const [safeX, setSafeX] = useState(0);\n\n  const bodyRef = useRef<HTMLDivElement>(null);\n  const toolbarRef = useRef<HTMLDivElement>(null);\n  const popoverRef = useRef<HTMLDivElement>(null);\n  const fromRef = useRef<HTMLDivElement>(null);\n\n  const springConfig = {\n    type: 'spring',\n    stiffness: 450,\n    damping: 32,\n    mass: 1,\n  } as const;\n  const popoverAnim = {\n    initial: { opacity: 0, y: 8, scale: 0.96 },\n    animate: { opacity: 1, y: 0, scale: 1 },\n    exit: { opacity: 0, y: 8, scale: 0.96 },\n    transition: { type: 'spring' as const, damping: 22, stiffness: 300 },\n  } as const;\n\n  const handleSelection = () => {\n    const selection = window.getSelection();\n    if (selection && selection.toString().length > 0 && bodyRef.current) {\n      const range = selection.getRangeAt(0);\n      const rect = range.getBoundingClientRect();\n      const parentRect = bodyRef.current.getBoundingClientRect();\n      setToolbarPos({\n        x: rect.left + rect.width / 2 - parentRect.left,\n        y: rect.top - parentRect.top - 60,\n      });\n      setShowToolbar(true);\n    } else {\n      setShowToolbar(false);\n    }\n  };\n\n  const getSafeToolbarX = (rawX: number) => {\n    if (!toolbarRef.current || !bodyRef.current) return rawX;\n    const toolbarWidth = toolbarRef.current.offsetWidth;\n    const containerWidth = bodyRef.current.offsetWidth;\n    const padding = 12;\n    const minX = padding;\n    const maxX = containerWidth - toolbarWidth - padding;\n    return Math.min(Math.max(rawX - toolbarWidth / 2, minX), maxX);\n  };\n\n  useLayoutEffect(() => {\n    if (showToolbar) {\n      // eslint-disable-next-line react-hooks/set-state-in-effect\n      setSafeX(getSafeToolbarX(toolbarPos.x));\n    }\n  }, [toolbarPos, showToolbar]);\n\n  const togglePopover = (name: ActivePopover) => {\n    setActivePopover((prev) => (prev === name ? null : name));\n  };\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (\n        popoverRef.current &&\n        !popoverRef.current.contains(e.target as Node)\n      ) {\n        setActivePopover(null);\n      }\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  const insertEmoji = (emoji: string) => {\n    if (bodyRef.current) {\n      const sel = window.getSelection();\n      if (sel && sel.rangeCount > 0) {\n        const range = sel.getRangeAt(0);\n        if (bodyRef.current.contains(range.commonAncestorContainer)) {\n          range.deleteContents();\n          range.insertNode(document.createTextNode(emoji));\n          range.collapse(false);\n          sel.removeAllRanges();\n          sel.addRange(range);\n          return;\n        }\n      }\n      bodyRef.current.innerText += emoji;\n    }\n    setActivePopover(null);\n  };\n\n  const insertLink = () => {\n    if (!linkUrl) return;\n    const display = linkText || linkUrl;\n    if (bodyRef.current) {\n      const a = document.createElement('a');\n      a.href = linkUrl.startsWith('http') ? linkUrl : `https://${linkUrl}`;\n      a.textContent = display;\n      a.className = 'text-primary underline underline-offset-2';\n      bodyRef.current.appendChild(document.createTextNode(' '));\n      bodyRef.current.appendChild(a);\n      bodyRef.current.appendChild(document.createTextNode(' '));\n    }\n    setLinkInserted(true);\n    setTimeout(() => {\n      setLinkInserted(false);\n      setLinkUrl('');\n      setLinkText('');\n      setActivePopover(null);\n    }, 1000);\n  };\n\n  const insertAISuggestion = (text: string) => {\n    if (bodyRef.current) {\n      bodyRef.current.innerText =\n        (bodyRef.current.innerText || '').trimEnd() + '\\n\\n' + text;\n    }\n    setActivePopover(null);\n  };\n\n  const handleSchedule = (label: string) => {\n    setScheduledTime(label);\n    setActivePopover(null);\n  };\n\n  const handleFakeAttach = () => {\n    const names = [\n      'proposal.pdf',\n      'design-v2.png',\n      'notes.docx',\n      'report.xlsx',\n    ];\n    const random = names[Math.floor(Math.random() * names.length)];\n    if (!attachedFiles.includes(random))\n      setAttachedFiles((p) => [...p, random]);\n    setActivePopover(null);\n  };\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (fromRef.current && !fromRef.current.contains(e.target as Node))\n        setFromOpen(false);\n      if (popoverRef.current && !popoverRef.current.contains(e.target as Node))\n        setActivePopover(null);\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 40, scale: 0.98 }}\n      animate={{ opacity: 1, y: 0, scale: 1 }}\n      transition={{ ...springConfig, damping: 38 }}\n      className=\"bg-card border-border text-foreground theme-injected z-10 flex max-h-screen w-full flex-col overflow-hidden rounded-4xl border antialiased shadow-lg sm:rounded-3xl lg:max-w-145\"\n    >\n      {/* Header */}\n      <div className=\"bg-card flex flex-none items-center justify-between py-3 pr-3 pl-4 sm:py-4 sm:pr-4 sm:pl-5\">\n        <div className=\"flex items-center gap-2 sm:gap-3\">\n          <div className=\"bg-primary text-primary-foreground flex h-8 w-8 items-center justify-center rounded-lg sm:h-10 sm:w-10 sm:rounded-xl\">\n            <Mail size={18} className=\"sm:w-5\" strokeWidth={1.5} />\n          </div>\n          <span className=\"text-foreground text-sm font-semibold tracking-tight sm:text-base\">\n            Compose email\n          </span>\n        </div>\n        <div className=\"flex items-center gap-0.5\">\n          <button\n            title=\"minimize\"\n            className=\"text-muted-foreground hover:text-foreground/70 rounded-lg p-1.5 transition-colors sm:p-2\"\n          >\n            <Minus size={16} />\n          </button>\n          <button\n            title=\"Maximize\"\n            className=\"text-muted-foreground hover:text-foreground/70 hidden rounded-lg p-2 transition-colors sm:block\"\n          >\n            <Maximize2 size={15} />\n          </button>\n          <button\n            title=\"close\"\n            onClick={onClose}\n            className=\"hover:text-foreground/70 text-muted-foreground rounded-lg p-1.5 transition-colors sm:p-2\"\n          >\n            <X size={18} />\n          </button>\n        </div>\n      </div>\n\n      {/* Scrollable Body */}\n      <div className=\"custom-scrollbar bg-background border-border flex-1 overflow-y-auto rounded-2xl border sm:rounded-4xl\">\n        <div className=\"space-y-2 px-4 pt-4 pb-2 sm:px-8 sm:pt-6\">\n          {/* From */}\n          <div className=\"flex items-center text-sm\">\n            <span className=\"text-muted-foreground w-12 sm:w-14\">From</span>\n            <div ref={fromRef} className=\"relative\">\n              <button\n                onClick={() => setFromOpen((v) => !v)}\n                className=\"bg-card border-border hover:border-ring flex max-w-52 cursor-pointer items-center gap-2 rounded-full border px-2 py-0.5 shadow-sm transition-all sm:max-w-none sm:px-2.5 sm:py-1\"\n              >\n                <img\n                  src={selectedFrom.avatar}\n                  alt=\"\"\n                  className=\"h-4 w-4 shrink-0 rounded-full object-cover sm:h-5 sm:w-5\"\n                />\n                <span className=\"text-foreground truncate font-medium\">\n                  {selectedFrom.name}\n                </span>\n                <ChevronDown\n                  size={14}\n                  className={`text-muted-foreground shrink-0 transition-transform ${fromOpen ? 'rotate-180' : ''}`}\n                />\n              </button>\n              <AnimatePresence>\n                {fromOpen && (\n                  <motion.div\n                    {...popoverAnim}\n                    className=\"bg-popover border-border absolute top-full left-0 z-50 mt-2 w-52 overflow-hidden rounded-2xl border py-1.5 shadow-2xl\"\n                  >\n                    <p className=\"text-muted-foreground px-4 pt-1.5 pb-1 text-[10px] font-semibold tracking-wider uppercase\">\n                      Switch account\n                    </p>\n                    {[\n                      {\n                        id: data.from.id,\n                        name: data.from.name,\n                        email: data.from.email ?? 'me@example.com',\n                        avatar: data.from.avatar,\n                      },\n                      {\n                        id: 'work',\n                        name: 'Work',\n                        email: 'work@company.com',\n                        avatar: data.from.avatar,\n                      },\n                      {\n                        id: 'personal',\n                        name: 'Personal',\n                        email: 'personal@gmail.com',\n                        avatar: data.from.avatar,\n                      },\n                    ].map((acc) => (\n                      <button\n                        key={acc.email}\n                        onClick={() => {\n                          setSelectedFrom(acc);\n                          setFromOpen(false);\n                        }}\n                        className={`hover:bg-accent flex w-full items-center gap-2.5 px-4 py-2.5 text-left transition-colors ${selectedFrom.name === acc.name ? 'text-primary' : 'text-foreground'}`}\n                      >\n                        <img\n                          src={acc.avatar}\n                          alt=\"\"\n                          className=\"h-5 w-5 shrink-0 rounded-full object-cover\"\n                        />\n                        <div className=\"min-w-0\">\n                          <p className=\"truncate text-xs font-medium\">\n                            {acc.name}\n                          </p>\n                          <p className=\"text-muted-foreground truncate text-[10px]\">\n                            {acc.email}\n                          </p>\n                        </div>\n                        {selectedFrom.name === acc.name && (\n                          <Check size={13} className=\"ml-auto shrink-0\" />\n                        )}\n                      </button>\n                    ))}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </div>\n\n          {/* To */}\n          <div className=\"border-border flex items-start border-b py-2 text-sm\">\n            <span className=\"text-muted-foreground mt-2 w-12 sm:w-14\">To</span>\n            <div className=\"flex flex-1 flex-wrap gap-1.5 sm:gap-2\">\n              {data.to.map((recipient) => (\n                <div\n                  key={recipient.id}\n                  className=\"bg-card border-border flex items-center gap-1.5 rounded-full border px-2 py-0.5 shadow-sm sm:gap-2 sm:px-2.5 sm:py-1\"\n                >\n                  <img\n                    src={recipient.avatar}\n                    alt=\"\"\n                    className=\"h-4 w-4 rounded-full object-cover sm:h-5 sm:w-5\"\n                  />\n                  <span className=\"text-foreground font-medium\">\n                    {recipient.name}\n                  </span>\n                </div>\n              ))}\n            </div>\n            <div className=\"text-muted-foreground mt-2.5 ml-2 flex gap-2 text-xs font-medium sm:ml-4 sm:gap-3\">\n              <button className=\"hover:text-primary transition-colors\">\n                CC\n              </button>\n              <button className=\"hover:text-primary transition-colors\">\n                BCC\n              </button>\n            </div>\n          </div>\n\n          {/* Subject */}\n          <div className=\"border-border flex items-center gap-2 border-b py-2 sm:gap-4\">\n            <span className=\"text-muted-foreground w-12 text-sm sm:w-14\">\n              Subject\n            </span>\n            <input\n              title=\"subject\"\n              type=\"text\"\n              defaultValue={data.subject}\n              className=\"text-foreground flex-1 bg-transparent text-sm font-medium outline-none sm:text-base\"\n            />\n          </div>\n        </div>\n\n        {/* Editor Area */}\n        <div className=\"relative min-h-40 px-4 py-2 sm:min-h-52 sm:px-8\">\n          <AnimatePresence>\n            {showToolbar && (\n              <motion.div\n                ref={toolbarRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{\n                  opacity: 1,\n                  y: 0,\n                  scale: 1,\n                  left: safeX,\n                }}\n                exit={{ opacity: 0, scale: 0.95 }}\n                transition={springConfig}\n                className=\"bg-popover border-border absolute z-50 flex origin-bottom scale-90 items-center gap-1 rounded-xl border p-1 shadow-xl sm:scale-100\"\n                style={{ top: toolbarPos.y }}\n              >\n                <button className=\"bg-secondary hover:bg-accent flex items-center gap-2 rounded-xl px-2 py-1.5 whitespace-nowrap transition-colors sm:px-3\">\n                  <Sparkles size={14} className=\"text-primary\" />\n                  <span className=\"text-foreground text-xs font-semibold sm:text-sm\">\n                    Ask AI\n                  </span>\n                </button>\n                <div className=\"bg-border mx-1 h-4 w-px\" />\n                <button\n                  title=\"bold\"\n                  className=\"hover:bg-accent text-muted-foreground rounded-lg p-1.5 sm:p-2\"\n                >\n                  <Bold size={14} />\n                </button>\n                <button\n                  title=\"italic\"\n                  className=\"hover:bg-accent text-muted-foreground rounded-lg p-1.5 sm:p-2\"\n                >\n                  <Italic size={14} />\n                </button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <div\n            ref={bodyRef}\n            contentEditable\n            onMouseUp={handleSelection}\n            onKeyUp={handleSelection}\n            className=\"text-foreground min-h-40 text-sm leading-relaxed whitespace-pre-wrap outline-none sm:text-base\"\n            dangerouslySetInnerHTML={{ __html: data.body }}\n          />\n\n          {/* Attachments */}\n          <div className=\"mt-6 pb-4 sm:mt-8\">\n            <h4 className=\"text-muted-foreground mb-3 text-xs font-medium tracking-widest capitalize sm:mb-4\">\n              Attachments\n            </h4>\n            <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n              {data.attachments.map((file) => (\n                <motion.div\n                  key={file.id}\n                  whileHover={{ y: -2 }}\n                  className=\"group bg-card border-border hover:border-primary/30 flex cursor-pointer items-center gap-3 rounded-2xl border p-2 transition-all sm:rounded-xl\"\n                >\n                  <div className=\"bg-muted/40 text-muted-foreground group-hover:bg-accent group-hover:text-primary flex h-9 w-9 items-center justify-center rounded-lg text-xs font-bold transition-colors sm:h-11 sm:w-11\">\n                    {file.icon}\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <p className=\"text-foreground truncate text-sm font-bold\">\n                      {file.name}\n                    </p>\n                    <p className=\"text-muted-foreground text-xs font-normal uppercase\">\n                      {file.type} · {file.size}\n                    </p>\n                  </div>\n                </motion.div>\n              ))}\n              {attachedFiles.map((fname) => (\n                <motion.div\n                  key={fname}\n                  initial={{ opacity: 0, y: 4 }}\n                  animate={{ opacity: 1, y: 0 }}\n                  whileHover={{ y: -2 }}\n                  className=\"group bg-card border-primary/20 hover:border-primary/40 flex cursor-pointer items-center gap-3 rounded-2xl border p-2 transition-all sm:rounded-xl\"\n                >\n                  <div className=\"bg-accent text-primary flex h-9 w-9 items-center justify-center rounded-lg text-xs font-bold sm:h-11 sm:w-11\">\n                    {fname.split('.').pop()?.toUpperCase()}\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <p className=\"text-foreground truncate text-sm font-bold\">\n                      {fname}\n                    </p>\n                    <p className=\"text-primary text-xs font-normal\">\n                      Just added\n                    </p>\n                  </div>\n                  <button\n                    onClick={() =>\n                      setAttachedFiles((p) => p.filter((f) => f !== fname))\n                    }\n                    className=\"hover:bg-accent text-muted-foreground rounded-full p-1 transition-colors\"\n                  >\n                    <X size={12} />\n                  </button>\n                </motion.div>\n              ))}\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Footer */}\n      <div className=\"border-border bg-card flex flex-none flex-col justify-between gap-4 px-4 py-3 sm:flex-row sm:items-center sm:px-6 sm:py-4\">\n        <div\n          ref={popoverRef}\n          className=\"text-muted-foreground relative flex items-center gap-0.5 sm:gap-1\"\n        >\n          {/* More */}\n          <div className=\"relative\">\n            <button\n              title=\"more\"\n              onClick={() => togglePopover('more')}\n              className=\"hover:text-foreground rounded-lg p-2 transition-all\"\n            >\n              <MoreHorizontal size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'more' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"bg-popover border-border absolute bottom-full left-0 z-50 mb-2 w-48 overflow-hidden rounded-2xl border py-1.5 shadow-2xl\"\n                >\n                  {[\n                    { label: 'Discard draft', danger: true },\n                    { label: 'Print', danger: false },\n                    { label: 'Save as template', danger: false },\n                    { label: 'Spell check', danger: false },\n                  ].map((opt) => (\n                    <button\n                      key={opt.label}\n                      onClick={() => setActivePopover(null)}\n                      className={`w-full px-4 py-2 text-left text-sm transition-colors ${\n                        opt.danger\n                          ? 'text-red-500 hover:bg-red-500/10'\n                          : 'text-foreground hover:bg-accent'\n                      }`}\n                    >\n                      {opt.label}\n                    </button>\n                  ))}\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* Emoji */}\n          <div className=\"relative\">\n            <button\n              title=\"emoji\"\n              onClick={() => togglePopover('emoji')}\n              className=\"hover:text-foreground rounded-lg p-2 transition-all\"\n            >\n              <Smile size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'emoji' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"bg-popover border-border absolute bottom-full left-0 z-50 mb-2 w-52 rounded-2xl border p-3 shadow-2xl\"\n                >\n                  <p className=\"text-muted-foreground mb-2 text-[11px] font-semibold tracking-wider uppercase\">\n                    Emoji\n                  </p>\n                  <div className=\"grid grid-cols-5 gap-1\">\n                    {EMOJIS.map((e) => (\n                      <button\n                        key={e}\n                        onClick={() => insertEmoji(e)}\n                        className=\"hover:bg-accent rounded-lg p-1 text-xl transition-colors\"\n                      >\n                        {e}\n                      </button>\n                    ))}\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* Attach */}\n          <div className=\"relative\">\n            <button\n              title=\"attach\"\n              onClick={() => togglePopover('attach')}\n              className=\"hover:text-foreground rounded-lg p-2 transition-all\"\n            >\n              <Paperclip size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'attach' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"bg-popover border-border absolute bottom-full left-0 z-50 mb-2 w-52 -translate-x-6 rounded-2xl border p-4 shadow-2xl sm:w-56 sm:translate-x-0\"\n                >\n                  <p className=\"text-muted-foreground mb-3 text-[11px] font-semibold tracking-wider uppercase\">\n                    Attach File\n                  </p>\n                  <div\n                    onDragOver={(e) => {\n                      e.preventDefault();\n                      setIsDraggingOver(true);\n                    }}\n                    onDragLeave={() => setIsDraggingOver(false)}\n                    onDrop={(e) => {\n                      e.preventDefault();\n                      setIsDraggingOver(false);\n                      handleFakeAttach();\n                    }}\n                    onClick={handleFakeAttach}\n                    className={`flex cursor-pointer flex-col items-center gap-2 rounded-xl border-2 border-dashed p-4 transition-all ${isDraggingOver ? 'border-primary bg-accent' : 'border-border hover:border-primary/50 hover:bg-accent/50'}`}\n                  >\n                    <Upload size={20} className=\"text-muted-foreground\" />\n                    <p className=\"text-muted-foreground text-center text-xs\">\n                      Click or drag files here\n                    </p>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* Link */}\n          <div className=\"relative\">\n            <button\n              title=\"link\"\n              onClick={() => togglePopover('link')}\n              className=\"hover:text-foreground rounded-lg p-2 transition-all\"\n            >\n              <Link2 size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'link' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"bg-popover border-border absolute bottom-full left-0 z-50 mb-2 w-56 -translate-x-16 rounded-2xl border p-4 shadow-2xl sm:w-64 sm:translate-x-0\"\n                >\n                  <p className=\"text-muted-foreground mb-3 text-[11px] font-semibold tracking-wider uppercase\">\n                    Insert Link\n                  </p>\n                  <div className=\"space-y-2\">\n                    <input\n                      type=\"text\"\n                      placeholder=\"URL (e.g. https://...)\"\n                      value={linkUrl}\n                      onChange={(e) => setLinkUrl(e.target.value)}\n                      className=\"bg-background border-border focus:border-primary text-foreground placeholder:text-muted-foreground w-full rounded-lg border px-3 py-2 text-sm transition-colors outline-none\"\n                    />\n                    <input\n                      type=\"text\"\n                      placeholder=\"Display text (optional)\"\n                      value={linkText}\n                      onChange={(e) => setLinkText(e.target.value)}\n                      className=\"bg-background border-border focus:border-primary text-foreground placeholder:text-muted-foreground w-full rounded-lg border px-3 py-2 text-sm transition-colors outline-none\"\n                    />\n                    <button\n                      onClick={insertLink}\n                      disabled={!linkUrl}\n                      className=\"bg-primary text-primary-foreground flex w-full items-center justify-center gap-2 rounded-lg py-2 text-sm font-medium transition-all hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40\"\n                    >\n                      {linkInserted ? (\n                        <>\n                          <Check size={14} /> Inserted!\n                        </>\n                      ) : (\n                        'Insert Link'\n                      )}\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          {/* AI */}\n          <div className=\"relative\">\n            <button\n              title=\"ai\"\n              onClick={() => togglePopover('ai')}\n              className=\"hover:text-primary rounded-lg p-2 transition-all\"\n            >\n              <Sparkles size={18} />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'ai' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"bg-popover border-border absolute bottom-full left-0 z-50 mb-2 w-56 -translate-x-24 rounded-2xl border p-4 shadow-2xl sm:w-72 sm:translate-x-0\"\n                >\n                  <div className=\"mb-3 flex items-center gap-2\">\n                    <Sparkles size={14} className=\"text-primary\" />\n                    <p className=\"text-muted-foreground text-[11px] font-semibold tracking-wider uppercase\">\n                      AI Suggestions\n                    </p>\n                  </div>\n                  <div className=\"space-y-2\">\n                    {AI_SUGGESTIONS.map((s, i) => (\n                      <button\n                        key={i}\n                        onClick={() => insertAISuggestion(s)}\n                        className=\"text-foreground bg-muted/40 hover:bg-accent hover:text-primary w-full rounded-xl px-3 py-2.5 text-left text-sm leading-relaxed transition-colors\"\n                      >\n                        {s}\n                      </button>\n                    ))}\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n\n          <div className=\"bg-border mx-2 hidden h-5 w-px sm:block\" />\n        </div>\n\n        {/* Action Buttons */}\n        <div className=\"border-border flex min-w-0 items-center justify-between gap-2 border-t pt-3 sm:justify-end sm:gap-3 sm:border-t-0 sm:pt-0\">\n          <span className=\"text-muted-foreground max-w-[140px] min-w-0 truncate text-xs font-medium sm:max-w-[180px]\">\n            {scheduledTime ? `📅 ${scheduledTime}` : 'Draft saved'}\n          </span>\n          <div className=\"flex flex-shrink-0 items-center gap-2\">\n            {/* Schedule */}\n            <div className=\"relative\">\n              <button\n                onClick={() => togglePopover('schedule')}\n                className={`flex items-center justify-center gap-1.5 rounded-full border px-2.5 py-1.5 text-sm font-normal transition-all ${scheduledTime ? 'border-primary/40 text-primary bg-accent' : 'border-border text-muted-foreground hover:bg-accent'}`}\n              >\n                <Calendar size={15} strokeWidth={2.5} />\n                {!scheduledTime && (\n                  <span className=\"hidden sm:inline\">Schedule</span>\n                )}\n              </button>\n              <AnimatePresence>\n                {activePopover === 'schedule' && (\n                  <motion.div\n                    {...popoverAnim}\n                    className=\"bg-popover border-border absolute right-0 bottom-full z-50 mb-2 w-56 rounded-2xl border p-4 shadow-2xl\"\n                  >\n                    <p className=\"text-muted-foreground mb-3 text-[11px] font-semibold tracking-wider uppercase\">\n                      Schedule Send\n                    </p>\n                    <div className=\"space-y-1.5\">\n                      {SCHEDULE_OPTIONS.map((opt) => (\n                        <button\n                          key={opt.value}\n                          onClick={() => handleSchedule(opt.label)}\n                          className={`flex w-full items-center justify-between rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${scheduledTime === opt.label ? 'bg-accent text-primary' : 'text-foreground hover:bg-accent/50'}`}\n                        >\n                          {opt.label}\n                          {scheduledTime === opt.label && <Check size={14} />}\n                        </button>\n                      ))}\n                    </div>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n\n            <motion.button\n              whileHover={{ scale: 1.02 }}\n              whileTap={{ scale: 0.98 }}\n              onClick={() => onSend?.(data)}\n              className=\"bg-primary text-primary-foreground flex items-center gap-1.5 rounded-full px-4 py-1.5 text-sm font-medium whitespace-nowrap shadow-md transition-all hover:opacity-90 sm:px-5 sm:py-2\"\n            >\n              <LuSend size={14} /> {scheduledTime ? 'Confirm' : 'Send'}\n            </motion.button>\n          </div>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\nexport default ComposeEmailCard;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "contextual-ai-bar",
      "type": "registry:component",
      "title": "Contextual AI Bar",
      "description": "A sleek, adaptive action bar that toggles between tool icons and an AI-powered input field with smooth morphing transitions.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/contextual-ai-bar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ArrowRight } from 'lucide-react';\n\nexport interface ContextualAIBarProps {\n  defaultExpanded?: boolean;\n  placeholder?: string;\n  tools?: React.ReactNode[];\n  musicIcon: React.ReactNode;\n  sparkleIcon: React.ReactNode;\n}\n\nexport const ContextualAIBar: React.FC<ContextualAIBarProps> = ({\n  defaultExpanded = false,\n  placeholder = 'Refine with AI',\n  tools = [],\n  musicIcon,\n  sparkleIcon,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n  const spring = {\n    type: 'spring',\n    stiffness: 220,\n    damping: 16,\n    mass: 1.2,\n  } as const;\n\n  return (\n    <motion.div\n      layout\n      transition={spring}\n      className=\"relative flex w-full max-w-[calc(100vw-32px)] items-center justify-between overflow-hidden rounded-full border border-[#e8e8e9]/30 bg-neutral-100 p-1 shadow-sm sm:max-w-md dark:border-neutral-800/30 dark:bg-neutral-900/60\"\n    >\n      <motion.div\n        layout\n        className=\"flex shrink-0 items-center gap-1 rounded-full bg-white p-1 shadow-md dark:bg-neutral-800\"\n      >\n        <motion.button\n          onClick={() => setIsExpanded(false)}\n          whileTap={{ scale: 0.9 }}\n          className=\"relative rounded-full p-2.5 outline-none\"\n        >\n          {!isExpanded && (\n            <motion.div\n              layoutId=\"active-pill\"\n              transition={spring}\n              className=\"absolute inset-0 rounded-full bg-neutral-200 dark:bg-neutral-700\"\n            />\n          )}\n\n          <div className=\"relative z-10\">{musicIcon}</div>\n        </motion.button>\n\n        <motion.button\n          onClick={() => setIsExpanded(true)}\n          whileTap={{ scale: 0.9 }}\n          className=\"relative rounded-full p-2.5 outline-none\"\n        >\n          {isExpanded && (\n            <motion.div\n              layoutId=\"active-pill\"\n              transition={spring}\n              className=\"absolute inset-0 rounded-full bg-neutral-200 dark:bg-neutral-700\"\n            />\n          )}\n\n          <div className=\"relative z-10\">{sparkleIcon}</div>\n        </motion.button>\n      </motion.div>\n\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {!isExpanded ? (\n          <motion.div\n            key=\"tools\"\n            initial={{ opacity: 0, filter: 'blur(4px)', x: 22 }}\n            animate={{ opacity: 1, filter: 'blur(0px)', x: 0 }}\n            exit={{ opacity: 0, filter: 'blur(4px)', x: 30 }}\n            transition={spring}\n            className=\"flex flex-1 items-center justify-end gap-3 px-4 sm:gap-5\"\n          >\n            {tools.map((tool, index) => (\n              <ToolIcon key={index}>{tool}</ToolIcon>\n            ))}\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"input\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={spring}\n            className=\"flex flex-1 items-center gap-1 pl-2 sm:gap-2 sm:pl-4\"\n          >\n            <input\n              autoFocus\n              type=\"text\"\n              placeholder={placeholder}\n              className=\"w-full flex-1 border-none bg-transparent text-lg text-gray-800 placeholder-gray-400 outline-none sm:text-xl dark:text-neutral-100 dark:placeholder-neutral-500\"\n            />\n\n            <motion.button\n              whileHover={{ scale: 1.05 }}\n              whileTap={{ scale: 0.92 }}\n              transition={spring}\n              className=\"shrink-0 rounded-full border border-gray-100 bg-[#fcfcfc] p-2.5 text-black shadow-md hover:bg-gray-50 sm:p-3 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:hover:bg-neutral-700\"\n            >\n              <ArrowRight\n                size={20}\n                className=\"sm:h-[22px] sm:w-[22px]\"\n                strokeWidth={2.5}\n              />\n            </motion.button>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </motion.div>\n  );\n};\n\nconst ToolIcon = ({ children }: { children: React.ReactNode }) => (\n  <motion.div\n    whileHover={{ scale: 1.05 }}\n    whileTap={{ scale: 0.92 }}\n    transition={{\n      type: 'spring',\n      stiffness: 300,\n      damping: 26,\n      mass: 1.1,\n    }}\n    className=\"cursor-pointer text-[#040404] dark:text-neutral-100\"\n  >\n    {children}\n  </motion.div>\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "contextual-ai-bar-base",
      "type": "registry:component",
      "title": "Contextual AI Bar (base)",
      "description": "Theme-ready base variant of A sleek, adaptive action bar that toggles between tool icons and an AI-powered input field with smooth morphing transitions..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/contextual-ai-bar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ArrowRight } from 'lucide-react';\n\nexport interface ContextualAIBarProps {\n  defaultExpanded?: boolean;\n  placeholder?: string;\n  tools?: React.ReactNode[];\n  musicIcon: React.ReactNode;\n  sparkleIcon: React.ReactNode;\n}\n\nexport const ContextualAIBar: React.FC<ContextualAIBarProps> = ({\n  defaultExpanded = false,\n  placeholder = 'Refine with AI',\n  tools = [],\n  musicIcon,\n  sparkleIcon,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n  const spring = {\n    type: 'spring',\n    stiffness: 220,\n    damping: 16,\n    mass: 1.2,\n  } as const;\n\n  return (\n    <motion.div\n      layout\n      transition={spring}\n      className=\"theme-injected relative flex w-full max-w-[calc(100vw-32px)] sm:max-w-md items-center justify-between overflow-hidden rounded-4xl border border-border bg-card p-1 font-sans shadow-sm\"\n    >\n      <motion.div\n        layout\n        className=\"flex shrink-0 items-center gap-1 rounded-4xl bg-background p-1 shadow-md\"\n      >\n        <motion.button\n          onClick={() => setIsExpanded(false)}\n          whileTap={{ scale: 0.9 }}\n          className=\"relative rounded-4xl p-2.5 outline-none\"\n        >\n          {!isExpanded && (\n            <motion.div\n              layoutId=\"active-pill\"\n              transition={spring}\n              className=\"absolute inset-0 rounded-4xl bg-muted\"\n            />\n          )}\n\n          <div className=\"relative z-10\">{musicIcon}</div>\n        </motion.button>\n\n        <motion.button\n          onClick={() => setIsExpanded(true)}\n          whileTap={{ scale: 0.9 }}\n          className=\"relative rounded-4xl p-2.5 outline-none\"\n        >\n          {isExpanded && (\n            <motion.div\n              layoutId=\"active-pill\"\n              transition={spring}\n              className=\"absolute inset-0 rounded-4xl bg-muted\"\n            />\n          )}\n\n          <div className=\"relative z-10\">{sparkleIcon}</div>\n        </motion.button>\n      </motion.div>\n\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {!isExpanded ? (\n          <motion.div\n            key=\"tools\"\n            initial={{ opacity: 0, filter: 'blur(4px)', x: 22 }}\n            animate={{ opacity: 1, filter: 'blur(0px)', x: 0 }}\n            exit={{ opacity: 0, filter: 'blur(4px)', x: 30 }}\n            transition={spring}\n            className=\"flex flex-1 items-center justify-end gap-3 sm:gap-5 px-4\"\n          >\n            {tools.map((tool, index) => (\n              <ToolIcon key={index}>{tool}</ToolIcon>\n            ))}\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"input\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={spring}\n            className=\"flex flex-1 items-center gap-1 sm:gap-2 pl-2 sm:pl-4\"\n          >\n            <input\n              autoFocus\n              type=\"text\"\n              placeholder={placeholder}\n              className=\"w-full flex-1 border-none bg-transparent font-sans text-lg sm:text-xl text-foreground placeholder:text-muted-foreground outline-none\"\n            />\n\n            <motion.button\n              whileHover={{ scale: 1.05 }}\n              whileTap={{ scale: 0.92 }}\n              transition={spring}\n              className=\"shrink-0 rounded-4xl border border-border bg-background p-2.5 sm:p-3 text-foreground shadow-md transition-colors hover:bg-muted\"\n            >\n              <ArrowRight size={20} className=\"sm:w-[22px] sm:h-[22px]\" strokeWidth={2.5} />\n            </motion.button>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </motion.div>\n  );\n};\n\nconst ToolIcon = ({ children }: { children: React.ReactNode }) => (\n  <motion.div\n    whileHover={{ scale: 1.05 }}\n    whileTap={{ scale: 0.92 }}\n    transition={{\n      type: 'spring',\n      stiffness: 300,\n      damping: 26,\n      mass: 1.1,\n    }}\n    className=\"cursor-pointer text-foreground\"\n  >\n    {children}\n  </motion.div>\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "continuous-pagination",
      "type": "registry:component",
      "title": "Continuous Pagination",
      "description": "A premium, fully responsive pagination component featuring spring animations and a 3D-styled active state with a dynamic shimmer effect.",
      "dependencies": [
        "lucide-react",
        "motion",
        "next-themes"
      ],
      "files": [
        {
          "path": "components/watermelon/continuous-pagination.tsx",
          "type": "registry:component",
          "content": "import { useState, type FC, type ReactNode } from \"react\";\nimport { motion, AnimatePresence } from \"motion/react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\n\n/* --- Types --- */\n\nexport interface ContinuousPaginationProps {\n    totalPages?: number;\n    defaultPage?: number;\n}\n\n/* --- Sub-Components --- */\n\ninterface PageButtonProps {\n    children: ReactNode;\n    onClick: () => void;\n}\n\nconst PageButton: FC<PageButtonProps> = ({ children, onClick }) => {\n    return (\n        <motion.button\n            onClick={onClick}\n            className=\"h-10 w-10 sm:h-16 sm:w-16 rounded-lg sm:rounded-xl flex items-center justify-center text-[#706F78] dark:text-zinc-500 hover:text-[#65656c] dark:hover:text-zinc-300 border border-slate-500/20 dark:border-zinc-800 bg-white dark:bg-zinc-900 shadow-[0_4px_10px_rgba(0,0,0,0.12)]\"\n            whileHover={{\n                scale: 1.08,\n                y: -6,\n                boxShadow: \"0 6px 10px rgba(0,0,0,0.12)\",\n            }}\n            whileTap={{ scale: 0.92 }}\n            transition={{ type: \"spring\", stiffness: 400, damping: 20 }}\n        >\n            {children}\n        </motion.button>\n    );\n};\n\n/* --- Main Component --- */\n\nexport const ContinuousPagination: FC<ContinuousPaginationProps> = ({\n    totalPages = 5,\n    defaultPage = 1,\n}) => {\n    const [active, setActive] = useState<number>(defaultPage);\n    const { resolvedTheme } = useTheme();\n\n    const isDark = resolvedTheme === \"dark\";\n\n    const paginate = (page: number) => {\n        if (page < 1 || page > totalPages) return;\n        setActive(page);\n    };\n\n    return (\n        <div className=\"flex items-center justify-center gap-1.5 sm:gap-3 text-sm\">\n            {/* Prev */}\n            <PageButton onClick={() => paginate(active - 1)}>\n                <ChevronLeft className=\"w-5 h-5 sm:w-7 sm:h-7\" />\n            </PageButton>\n\n            {/* Pages */}\n            <div className=\"relative flex gap-1.5 sm:gap-3\">\n                {Array.from({ length: totalPages }).map((_, i) => {\n                    const page = i + 1;\n                    const isActive = page === active;\n\n                    return (\n                        <motion.button\n                            key={page}\n                            onClick={() => paginate(page)}\n                            className={`relative z-10 h-10 w-10 sm:h-16 sm:w-16 rounded-lg sm:rounded-xl flex items-center justify-center text-sm font-medium transition-colors duration-300 border border-slate-500/20 dark:border-zinc-800 shadow-[0_4px_10px_rgba(0,0,0,0.12)]\n                ${isActive\n                                    ? \"text-white\"\n                                    : \"text-gray-500 dark:text-zinc-500 hover:text-gray-800 dark:hover:text-zinc-300 bg-white dark:bg-zinc-900\"\n                                }`}\n                            whileHover={\n                                !isActive\n                                    ? {\n                                        y: -6,\n                                        boxShadow: isDark\n                                            ? \"0 10px 20px rgba(0,0,0,0.4)\"\n                                            : \"0 6px 10px rgba(0,0,0,0.12)\",\n                                    }\n                                    : {}\n                            }\n                            whileTap={{ scale: 0.92 }}\n                            transition={{ type: \"spring\", stiffness: 260, damping: 18 }}\n                        >\n                            {/* Active background */}\n                            <AnimatePresence>\n                                {isActive && (\n                                    <motion.div\n                                        layoutId=\"active-bg\"\n                                        className=\"absolute inset-0 rounded-lg sm:rounded-xl overflow-hidden\"\n                                        initial={{ scale: 0.9, opacity: 0 }}\n                                        animate={{ scale: 1, opacity: 1 }}\n                                        exit={{ scale: 0.9, opacity: 0 }}\n                                        transition={{ type: \"spring\", stiffness: 220, damping: 24, mass: 0.8 }}\n                                    >\n                                        <div\n                                            className=\"absolute inset-0 rounded-lg sm:rounded-xl\"\n                                            style={{\n                                                background: `linear-gradient(135deg, #2a2a2e 0%, #1a1a1c 50%, #0a0a0c 100%)`,\n                                                border: `1px solid #3a3a3e`,\n                                                boxShadow: `\n                            0 8px 16px -4px rgba(0,0,0,0.7),\n                            inset 0 1px 1px 0 rgba(255, 255, 255, 0.15)\n                          `,\n                                            }}\n                                        />\n                                        <motion.div\n                                            className=\"absolute -inset-full bg-linear-to-tr from-transparent via-white/10 to-transparent skew-x-12\"\n                                            animate={{ x: [\"-100%\", \"200%\"] }}\n                                            transition={{\n                                                duration: 3,\n                                                repeat: Infinity,\n                                                repeatDelay: 5,\n                                                ease: \"easeInOut\",\n                                            }}\n                                        />\n                                        <span\n                                            className=\"absolute inset-0 rounded-[inherit] pointer-events-none\"\n                                            style={{\n                                                boxShadow: \"inset 0 -4px 8px 0 rgba(0, 0, 0, 0.6)\",\n                                            }}\n                                        />\n                                    </motion.div>\n                                )}\n                            </AnimatePresence>\n\n                            <span className=\"relative z-10 text-lg sm:text-xl font-semibold\">{page}</span>\n                        </motion.button>\n                    );\n                })}\n            </div>\n\n            {/* Next */}\n            <PageButton onClick={() => paginate(active + 1)}>\n                <ChevronRight className=\"w-5 h-5 sm:w-7 sm:h-7\" />\n            </PageButton>\n        </div>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "continuous-pagination-base",
      "type": "registry:component",
      "title": "Continuous Pagination (base)",
      "description": "Theme-ready base variant of A premium, fully responsive pagination component featuring spring animations and a 3D-styled active state with a dynamic shimmer effect..",
      "dependencies": [
        "lucide-react",
        "motion",
        "next-themes"
      ],
      "files": [
        {
          "path": "components/watermelon/continuous-pagination.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC, type ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useTheme } from 'next-themes';\n\n/* --- Types --- */\n\nexport interface ContinuousPaginationProps {\n  totalPages?: number;\n  defaultPage?: number;\n}\n\n/* --- Sub-Components --- */\n\ninterface PageButtonProps {\n  children: ReactNode;\n  onClick: () => void;\n}\n\nconst PageButton: FC<PageButtonProps> = ({ children, onClick }) => {\n  return (\n    <motion.button\n      onClick={onClick}\n      className=\"text-muted-foreground hover:text-foreground border-border bg-background flex h-10 w-10 items-center justify-center rounded-lg border shadow-[0_4px_10px_hsl(var(--foreground)/0.1)] sm:h-16 sm:w-16\"\n      whileHover={{\n        scale: 1.08,\n        y: -6,\n        boxShadow: '0 6px 10px hsl(var(--foreground)/0.12)',\n      }}\n      whileTap={{ scale: 0.92 }}\n      transition={{ type: 'spring', stiffness: 400, damping: 20 }}\n    >\n      {children}\n    </motion.button>\n  );\n};\n\n/* --- Main Component --- */\n\nexport const ContinuousPagination: FC<ContinuousPaginationProps> = ({\n  totalPages = 5,\n  defaultPage = 1,\n}) => {\n  const [active, setActive] = useState<number>(defaultPage);\n  const { resolvedTheme } = useTheme();\n\n  const isDark = resolvedTheme === 'dark';\n\n  const paginate = (page: number) => {\n    if (page < 1 || page > totalPages) return;\n    setActive(page);\n  };\n\n  return (\n    <div className=\"theme-injected flex items-center justify-center gap-1.5 text-sm sm:gap-3\">\n      {/* Prev */}\n      <PageButton onClick={() => paginate(active - 1)}>\n        <ChevronLeft className=\"h-5 w-5 sm:h-7 sm:w-7\" />\n      </PageButton>\n\n      {/* Pages */}\n      <div className=\"relative flex gap-1.5 sm:gap-3\">\n        {Array.from({ length: totalPages }).map((_, i) => {\n          const page = i + 1;\n          const isActive = page === active;\n\n          return (\n            <motion.button\n              key={page}\n              onClick={() => paginate(page)}\n              className={`border-border relative z-10 flex h-10 w-10 items-center justify-center rounded-lg border text-sm font-medium shadow-[0_4px_10px_hsl(var(--foreground)/0.1)] transition-colors duration-300 sm:h-16 sm:w-16 ${\n                isActive\n                  ? 'text-primary-foreground'\n                  : 'text-muted-foreground hover:text-foreground bg-background'\n              }`}\n              whileHover={\n                !isActive\n                  ? {\n                      y: -6,\n                      boxShadow: isDark\n                        ? '0 10px 20px hsl(var(--foreground)/0.4)'\n                        : '0 6px 10px hsl(var(--foreground)/0.12)',\n                    }\n                  : {}\n              }\n              whileTap={{ scale: 0.92 }}\n              transition={{ type: 'spring', stiffness: 260, damping: 18 }}\n            >\n              {/* Active background */}\n              <AnimatePresence>\n                {isActive && (\n                  <motion.div\n                    layoutId=\"active-bg\"\n                    className=\"absolute inset-0 overflow-hidden rounded-lg\"\n                    initial={{ scale: 0.9, opacity: 0 }}\n                    animate={{ scale: 1, opacity: 1 }}\n                    exit={{ scale: 0.9, opacity: 0 }}\n                    transition={{\n                      type: 'spring',\n                      stiffness: 220,\n                      damping: 24,\n                      mass: 0.8,\n                    }}\n                  >\n                    <div className=\"bg-primary border-border absolute inset-0 rounded-lg border shadow-[0_8px_16px_-4px_hsl(var(--foreground)/0.7),inset_0_1px_1px_0_hsl(var(--background)/0.15)]\" />\n                    <motion.div\n                      className=\"via-background/10 absolute -inset-full skew-x-12 bg-linear-to-tr from-transparent to-transparent\"\n                      animate={{ x: ['-100%', '200%'] }}\n                      transition={{\n                        duration: 3,\n                        repeat: Infinity,\n                        repeatDelay: 5,\n                        ease: 'easeInOut',\n                      }}\n                    />\n                    <span\n                      className=\"pointer-events-none absolute inset-0 rounded-[inherit]\"\n                      style={{\n                        boxShadow:\n                          'inset 0 -4px 8px 0 hsl(var(--foreground)/0.6)',\n                      }}\n                    />\n                  </motion.div>\n                )}\n              </AnimatePresence>\n\n              <span className=\"relative z-10 text-lg font-semibold sm:text-xl\">\n                {page}\n              </span>\n            </motion.button>\n          );\n        })}\n      </div>\n\n      {/* Next */}\n      <PageButton onClick={() => paginate(active + 1)}>\n        <ChevronRight className=\"h-5 w-5 sm:h-7 sm:w-7\" />\n      </PageButton>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "continuous-tabs",
      "type": "registry:component",
      "title": "Continuous Tabs",
      "description": "Button-like tabs with a smooth sliding background pill.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/continuous-tabs.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport { useState, useEffect, type FC } from \"react\";\nimport { motion, LayoutGroup } from \"motion/react\";\n\n/* ---------- Types ---------- */\ninterface TabItem {\n    id: string;\n    label: string;\n}\n\ninterface ContinuousTabsProps {\n    tabs?: TabItem[];\n    defaultActiveId?: string;\n    onChange?: (id: string) => void;\n}\n\n/* ---------- Defaults ---------- */\nconst DEFAULT_TABS: TabItem[] = [\n    { id: \"home\", label: \"Home\" },\n    { id: \"interactions\", label: \"Interactions\" },\n    { id: \"resources\", label: \"Resources\" },\n    { id: \"docs\", label: \"Docs\" },\n];\n\nexport const ContinuousTabs: FC<ContinuousTabsProps> = ({\n    tabs = DEFAULT_TABS,\n    defaultActiveId = \"home\",\n    onChange,\n}) => {\n    const [active, setActive] = useState<string>(defaultActiveId);\n    const [isMounted, setIsMounted] = useState<boolean>(false);\n\n    useEffect(() => {\n        requestAnimationFrame(() => setIsMounted(true));\n    }, []);\n\n    const handleChange = (id: string) => {\n        setActive(id);\n        onChange?.(id);\n    };\n\n    if (!isMounted) return null;\n\n    return (\n        <LayoutGroup>\n            <nav\n                className=\"\n          relative flex items-center gap-0.5 sm:gap-1 p-1 sm:p-1.5\n            rounded-full\n            border border-[#E5E5E9] dark:border-zinc-800\n            bg-linear-to-b from-[#ffffff] to-[#e9e9f2]\n            dark:from-zinc-900 dark:to-zinc-950\n            shadow-[inset_0_-2px_4px_rgba(0,0,0,0.08),\n                    inset_0_1px_0_rgba(255,255,255,0.9),\n                    0_4px_12px_rgba(0,0,0,0.03)]\n            dark:shadow-[inset_0_-2px_4px_rgba(0,0,0,0.5),\n                    inset_0_1px_0_rgba(255,255,255,0.05),\n                    0_10px_20px_rgba(0,0,0,0.4)]\n            transition-all duration-300\n          \"\n            >\n                {tabs.map((tab) => {\n                    const isActive = active === tab.id;\n\n                    return (\n                        <button\n                            key={tab.id}\n                            onClick={() => handleChange(tab.id)}\n                            className=\"relative px-4 py-2 sm:px-6 sm:py-3 rounded-full outline-none\"\n                        >\n                            {/* Active pill */}\n                            {isActive && (\n                                <motion.div\n                                    layoutId=\"active-pill\"\n                                    transition={{\n                                        type: \"spring\",\n                                        stiffness: 380,\n                                        damping: 30,\n                                        mass: 0.9,\n                                    }}\n                                    className=\"\n                      absolute inset-0 rounded-full\n                      bg-[#252528] dark:bg-zinc-100\n                      shadow-xs\n                    \"\n                                />\n                            )}\n\n                            {/* Text */}\n                            <motion.span\n                                layout=\"position\"\n                                className={`relative z-10 text-sm sm:text-base font-semibold transition-colors duration-200\n                    ${isActive\n                                        ? \"text-[#EDEDEC] dark:text-zinc-950\"\n                                        : \"text-[#343437] dark:text-zinc-500 hover:text-[#62625D] dark:hover:text-zinc-300\"\n                                    }\n                  `}\n                            >\n                                {tab.label}\n                            </motion.span>\n                        </button>\n                    );\n                })}\n            </nav>\n        </LayoutGroup>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "continuous-tabs-base",
      "type": "registry:component",
      "title": "Continuous Tabs (base)",
      "description": "Theme-ready base variant of Button-like tabs with a smooth sliding background pill..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/continuous-tabs.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect, type FC } from 'react';\nimport { motion, LayoutGroup } from 'motion/react';\n\ninterface TabItem {\n  id: string;\n  label: string;\n}\n\ninterface ContinuousTabsProps {\n  tabs?: TabItem[];\n  defaultActiveId?: string;\n  onChange?: (id: string) => void;\n}\n\nconst DEFAULT_TABS: TabItem[] = [\n  { id: 'home', label: 'Home' },\n  { id: 'interactions', label: 'Interactions' },\n  { id: 'resources', label: 'Resources' },\n  { id: 'docs', label: 'Docs' },\n];\n\nexport const ContinuousTabs: FC<ContinuousTabsProps> = ({\n  tabs = DEFAULT_TABS,\n  defaultActiveId = 'home',\n  onChange,\n}) => {\n  const [active, setActive] = useState<string>(defaultActiveId);\n  const [isMounted, setIsMounted] = useState<boolean>(false);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setIsMounted(true));\n  }, []);\n\n  const handleChange = (id: string) => {\n    setActive(id);\n    onChange?.(id);\n  };\n\n  if (!isMounted) return null;\n\n  return (\n    <LayoutGroup>\n      <nav className=\"theme-injected border-2 border-border bg-background shadow-[inset_0_-2px_4px_hsl(var(--foreground)/0.08), inset_0_1px_0_hsl(var(--background)/0.9), 0_4px_12px_hsl(var(--foreground)/0.03)] relative flex items-center gap-0.5 rounded-lg border p-1 transition-all duration-300 sm:gap-1 sm:p-1.5\">\n        {tabs.map((tab) => {\n          const isActive = active === tab.id;\n\n          return (\n            <button\n              key={tab.id}\n              onClick={() => handleChange(tab.id)}\n              className=\"relative rounded-lg px-4 py-2 outline-none sm:px-6 sm:py-3\"\n            >\n              {isActive && (\n                <motion.div\n                  layoutId=\"active-pill\"\n                  transition={{\n                    type: 'spring',\n                    stiffness: 380,\n                    damping: 30,\n                    mass: 0.9,\n                  }}\n                  className=\"bg-foreground absolute inset-0 rounded-lg shadow-xs\"\n                />\n              )}\n\n              <motion.span\n                layout=\"position\"\n                className={`relative z-10 text-sm font-semibold transition-colors duration-200 sm:text-base ${\n                  isActive\n                    ? 'text-background'\n                    : 'text-muted-foreground hover:text-foreground'\n                } `}\n              >\n                {tab.label}\n              </motion.span>\n            </button>\n          );\n        })}\n      </nav>\n    </LayoutGroup>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "copy-confirm",
      "type": "registry:component",
      "title": "Copy Confirm",
      "description": "Interactive micro-interaction component for copy confirm.",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/copy-confirm.tsx",
          "type": "registry:component",
          "content": "import {\n  Boxes,\n  CheckIcon,\n  CopyIcon,\n  Settings2,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { type ReactNode, useState } from 'react';\n\ninterface SkillCardProps {\n  title?: string;\n  icon?: ReactNode;\n  valueToCopy?: string;\n\n  copiedText?: string;\n  copyText?: string;\n\n  showSettings?: boolean;\n  loading?: boolean;\n\n  onSettingsClick?: () => void;\n}\n\nexport default function CopyConfirm({\n  title = 'Clay Skill',\n  icon = <Boxes size={16} />,\n  valueToCopy = 'Clay Skill',\n\n  copiedText = 'Copied',\n  copyText = 'Copy',\n\n  showSettings = true,\n  loading = false,\n\n  onSettingsClick = () => {},\n}: SkillCardProps) {\n  const [copied, setCopied] = useState(false);\n\n  async function handleCopy() {\n    await navigator.clipboard.writeText(valueToCopy);\n\n    setCopied(true);\n\n    setTimeout(() => {\n      setCopied(false);\n    }, 1800);\n  }\n\n  return (\n    <div className=\"flex h-screen w-full items-center justify-center\">\n      <div className=\"flex items-center gap-2\">\n        <div className=\"flex gap-0.5 rounded-full\">\n          <div className=\"border-border/20 flex items-center gap-1.5 rounded-l-full border bg-zinc-100 p-3\">\n            <div className=\"text-zinc-500\">{icon}</div>\n\n            <span className=\"text-sm font-semibold text-zinc-800\">\n              {title}\n            </span>\n          </div>\n\n          {showSettings && (\n            <button\n              onClick={onSettingsClick}\n              className=\"flex items-center justify-center rounded-r-full bg-zinc-100 px-3 transition\"\n            >\n              <Settings2 size={20} className=\"text-zinc-700\" />\n            </button>\n          )}\n        </div>\n\n        <motion.button\n          whileHover={{ scale: 1.02 }}\n          whileTap={{ scale: 0.97 }}\n          disabled={loading}\n          animate={{\n            backgroundColor: copied ? '#15803d' : '#000000', // green-500 : black\n          }}\n          onClick={handleCopy}\n          className=\"relative flex  items-center justify-center gap-2 overflow-hidden rounded-full bg-[#0C3415] py-2 px-4 text-white\"\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div\n              key={copied ? 'check' : 'copy'}\n              initial={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n              transition={{\n                type: 'spring',\n                duration: 0.3,\n                bounce: 0,\n              }}\n                          className='text-sm'\n            >\n              {copied ? (\n                <CheckIcon className=\"stoke-2 size-4\" />\n              ) : (\n                <CopyIcon className=\"stroke-2 size-4\" />\n              )}\n            </motion.div>\n          </AnimatePresence>\n          <AnimatedText from={copyText} to={copiedText} isCopied={copied} />\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n\nconst AnimatedText = ({\n  from,\n  to,\n  isCopied,\n}: {\n  from: string;\n  to: string;\n  isCopied: boolean;\n}) => {\n  const activeText = isCopied ? to : from;\n\n  return (\n    <div className=\"flex text-lg tracking-tight will-change-transform\">\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {activeText.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              layout\n              initial={{ opacity: 0, y: 5, scale: 0.7 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: -5, scale: 0.7 }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "copy-confirm-base",
      "type": "registry:component",
      "title": "Copy Confirm (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component for copy confirm..",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/copy-confirm.tsx",
          "type": "registry:component",
          "content": "import { Boxes, CheckIcon, CopyIcon, Settings2 } from 'lucide-react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { type ReactNode, useState } from 'react';\n\ninterface SkillCardProps {\n  title?: string;\n  icon?: ReactNode;\n  valueToCopy?: string;\n\n  copiedText?: string;\n  copyText?: string;\n\n  showSettings?: boolean;\n  loading?: boolean;\n\n  onSettingsClick?: () => void;\n}\n\nexport default function CopyConfirm({\n  title = 'Clay Skill',\n  icon = <Boxes size={16} />,\n  valueToCopy = 'Clay Skill',\n\n  copiedText = 'Copied',\n  copyText = 'Copy',\n\n  showSettings = true,\n  loading = false,\n\n  onSettingsClick = () => {},\n}: SkillCardProps) {\n  const [copied, setCopied] = useState(false);\n\n  async function handleCopy() {\n    await navigator.clipboard.writeText(valueToCopy);\n\n    setCopied(true);\n\n    setTimeout(() => {\n      setCopied(false);\n    }, 1800);\n  }\n\n  return (\n    <div className=\"theme-injected  flex h-screen w-full items-center justify-center\">\n      <div className=\"flex items-center gap-2\">\n        <div className=\"flex gap-0.5 rounded-full\">\n          <div className=\"border-border bg-card flex items-center gap-1.5 rounded-l-full border p-3\">\n            <div className=\"text-muted-foreground\">{icon}</div>\n\n            <span className=\"text-card-foreground text-sm font-semibold\">\n              {title}\n            </span>\n          </div>\n\n          {showSettings && (\n            <button\n              onClick={onSettingsClick}\n              className=\"border-border bg-card hover:bg-accent flex items-center justify-center rounded-r-full border px-3 transition-colors\"\n            >\n              <Settings2 size={20} className=\"text-muted-foreground\" />\n            </button>\n          )}\n        </div>\n\n        <motion.button\n          whileHover={{ scale: 1.02 }}\n          whileTap={{ scale: 0.97 }}\n          disabled={loading}\n          animate={{\n            backgroundColor: copied ? '#15803d' : 'var(--primary)',\n          }}\n          onClick={handleCopy}\n          className=\"text-primary-foreground relative flex items-center justify-center gap-2 overflow-hidden rounded-full px-4 py-2\"\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div\n              key={copied ? 'check' : 'copy'}\n              initial={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n              transition={{\n                type: 'spring',\n                duration: 0.3,\n                bounce: 0,\n              }}\n              className=\"text-sm\"\n            >\n              {copied ? (\n                <CheckIcon className=\"size-4 stroke-2\" />\n              ) : (\n                <CopyIcon className=\"size-4 stroke-2\" />\n              )}\n            </motion.div>\n          </AnimatePresence>\n\n          <AnimatedText from={copyText} to={copiedText} isCopied={copied} />\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n\nconst AnimatedText = ({\n  from,\n  to,\n  isCopied,\n}: {\n  from: string;\n  to: string;\n  isCopied: boolean;\n}) => {\n  const activeText = isCopied ? to : from;\n\n  return (\n    <div className=\"flex text-lg tracking-tight will-change-transform\">\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {activeText.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              layout\n              initial={{ opacity: 0, y: 5, scale: 0.7 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: -5, scale: 0.7 }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "create-community",
      "type": "registry:component",
      "title": "Create Community",
      "description": "Dialog for creating communities with name, description, and settings.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/create-community.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Info } from 'lucide-react';\n\ninterface CommunityData {\n  communityName: string;\n  pricing: string;\n  isApplicationRequired: boolean;\n}\n\ninterface CreateCommunityProps {\n  isOpen: boolean;\n  onClose: () => void;\n  onCreate: (data: CommunityData) => void;\n  initialData?: Partial<CommunityData>;\n}\n\nexport const CreateCommunity: React.FC<CreateCommunityProps> = ({\n  isOpen,\n  onClose,\n  onCreate,\n  initialData\n}) => {\n  const [communityName, setCommunityName] = useState(initialData?.communityName || 'Clipping Course');\n  const [pricing, setPricing] = useState(initialData?.pricing || 'FREE');\n  const [isApplicationRequired, setIsApplicationRequired] = useState(initialData?.isApplicationRequired || false);\n\n  useEffect(() => {\n    if (initialData) {\n      requestAnimationFrame(() => {\n        if (initialData.communityName) setCommunityName(initialData.communityName);\n        if (initialData.pricing) setPricing(initialData.pricing);\n        if (initialData.isApplicationRequired !== undefined) setIsApplicationRequired(initialData.isApplicationRequired);\n      });\n    }\n  }, [initialData]);\n\n  const pricingOptions = ['FREE', 'ONE-TIME', 'MONTHLY'];\n\n  return (\n    <AnimatePresence mode=\"wait\">\n      {isOpen && (\n        <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6 overflow-y-auto overflow-x-hidden\">\n\n          {/* BG Overlay Animation */}\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: 0.5, ease: [0.22, 1, 0.36, 1] }}\n            onClick={onClose}\n            className=\"fixed inset-0 bg-black/20 backdrop-blur-sm dark:bg-[#0a0a0a] dark:backdrop-blur-none\"\n          >\n            {/* Glow Effects */}\n            <div\n              className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[140%] h-75 bg-white/30 blur-[80px] rotate-[-15deg] hidden dark:block\"\n              style={{ borderRadius: '50%' }}\n            />\n            <div className=\"absolute inset-0 bg-[radial-gradient(circle_at_center,transparent_0%,#000_80%)] hidden dark:block\" />\n          </motion.div>\n\n          {/* Modal Container */}\n          <motion.div\n            initial={{ opacity: 0, scale: 0.92, y: 30 }}\n            animate={{ opacity: 1, scale: 1, y: 0 }}\n            exit={{ opacity: 0, scale: 0.92, y: 30 }}\n            transition={{\n              duration: 0.6,\n              ease: [0.16, 1, 0.3, 1],\n              opacity: { duration: 0.4 }\n            }}\n            className=\"relative w-full max-w-135 backdrop-blur-2xl rounded-[32px] p-5 sm:p-6 shadow-2xl z-50 my-auto\n                       bg-white border-[6px] sm:border-12 border-[#F2F2F2]\n                       dark:bg-[#131313]/80 dark:border-[#232323]\"\n          >\n            {/* Header */}\n            <div className=\"flex justify-between items-start mb-4\">\n              <div>\n                <h2 className=\"text-xl sm:text-2xl font-medium tracking-tight text-gray-900 dark:text-white\">Create community</h2>\n                <p className=\"text-[13px] sm:text-[14px] mt-3 sm:mt-4 leading-relaxed max-w-full text-gray-500 dark:text-[#696969]\">\n                  Enter your community name and choose how people can join. You can make it free, charge a fee, or require an application.\n                </p>\n              </div>\n              <button title='close'\n                onClick={onClose}\n                className=\"transition-colors p-1 text-gray-400 hover:text-gray-600 dark:text-[#888888] dark:hover:text-white\"\n              >\n                <X size={20} />\n              </button>\n            </div>\n\n            {/* Input Section */}\n            <div className=\"space-y-4\">\n              <div className=\"space-y-2\">\n                <label className=\"text-[14px] ml-1 text-gray-500 dark:text-[#8A8A8A]\">Community name</label>\n                <div className=\"relative group\">\n                  <input title='name'\n                    type=\"text\"\n                    value={communityName}\n                    onChange={(e) => setCommunityName(e.target.value)}\n                    className=\"w-full rounded-[18px] mt-2.5 px-5 py-3.5 outline-none transition-all\n                             bg-gray-50 border border-gray-200 text-gray-900 focus:border-gray-300\n                             dark:bg-[#1c1c1c]/50 dark:border-white/10 dark:text-white dark:focus:border-[#EDEDED]/60\"\n                  />\n                </div>\n              </div>\n\n              {/* Pricing Tabs */}\n              <div className=\"space-y-2\">\n                <label className=\"text-[14px] ml-1 text-gray-500 dark:text-[#8A8A8A]\">Pricing & Access</label>\n                <div className=\"grid grid-cols-3 mt-2.5 rounded-full p-1 relative\n                              bg-gray-100 border border-gray-200\n                              dark:bg-[#0A0A0A] dark:border-white/5\">\n                  {pricingOptions.map((option) => (\n                    <button\n                      key={option}\n                      onClick={() => setPricing(option)}\n                      className={`relative z-10 py-3.5 text-[11px] sm:text-[12px] font-normal tracking-widest transition-colors duration-300 ${pricing === option\n                        ? 'text-gray-900 dark:text-[#EDEDED]'\n                        : 'text-gray-400 dark:text-[#EDEDED]/80'\n                        }`}\n                    >\n                      {option}\n                      {pricing === option && (\n                        <motion.div\n                          layoutId=\"activeTab\"\n                          className=\"absolute inset-0 rounded-full -z-10\n                                   bg-white border border-gray-200 shadow-sm\n                                   dark:bg-[#272727] dark:border-white/10\"\n                          transition={{ type: \"spring\", bounce: 0.15, duration: 0.5 }}\n                        />\n                      )}\n                    </button>\n                  ))}\n                </div>\n              </div>\n\n              {/* Toggle Section */}\n              <div className=\"flex items-center justify-between rounded-[18px] px-4 py-4\n                            bg-gray-50 border border-gray-200\n                            dark:bg-[#1C1C1C] dark:border-white/10\">\n                <div className=\"flex items-center gap-2\">\n                  <span className=\"text-[15px] sm:text-[16px] text-gray-500 dark:text-[#BCBCBC]\">Application required</span>\n                  <Info size={16} className=\"cursor-help text-gray-400 dark:text-[#666666]\" />\n                </div>\n                <button title='switch'\n                  onClick={() => setIsApplicationRequired(!isApplicationRequired)}\n                  className={`w-10 h-6 rounded-full transition-colors duration-300 relative ${isApplicationRequired\n                    ? 'bg-black dark:bg-white/80'\n                    : 'bg-gray-200 dark:bg-[#333333]'\n                    }`}\n                >\n                  <motion.div\n                    animate={{ x: isApplicationRequired ? 19 : 2 }}\n                    transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\n                    className={`absolute top-0.5 w-5 h-5 rounded-full transition-colors ${isApplicationRequired\n                      ? 'bg-white dark:bg-[#333333]'\n                      : 'bg-white'\n                      }`}\n                  />\n                </button>\n              </div>\n\n              <p className=\"text-center text-[13px] sm:text-[14px] pt-2 text-gray-400 dark:text-[#666666]\">\n                By creating a community, you agree to Payper's{' '}\n                <span className=\"underline cursor-pointer text-gray-500 dark:text-[#888888]\">Community Guidelines</span>\n              </p>\n            </div>\n\n            {/* Footer Buttons */}\n            <div className=\"flex flex-col-reverse sm:flex-row items-center justify-end gap-3 mt-8 sm:mt-10\">\n              <button\n                onClick={onClose}\n                className=\"w-full sm:w-auto px-8 py-3 rounded-full text-[14px] font-medium transition-colors\n                         border border-gray-200 text-gray-600 hover:bg-gray-50\n                         dark:border-white/40 dark:text-white dark:hover:bg-white/5\"\n              >\n                Cancel\n              </button>\n              <button\n                onClick={() => onCreate({ communityName, pricing, isApplicationRequired })}\n                className=\"w-full sm:w-auto px-8 py-3 rounded-full text-[14px] font-bold transition-all active:scale-95\n                         bg-black text-white hover:bg-gray-800\n                         dark:bg-white dark:text-black dark:hover:bg-[#eeeeee]\"\n              >\n                Create community\n              </button>\n            </div>\n          </motion.div>\n        </div>\n      )}\n    </AnimatePresence>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "create-community-base",
      "type": "registry:component",
      "title": "Create Community (base)",
      "description": "Theme-ready base variant of Dialog for creating communities with name, description, and settings..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/create-community.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Info } from 'lucide-react';\n\ninterface CommunityData {\n  communityName: string;\n  pricing: string;\n  isApplicationRequired: boolean;\n}\n\ninterface CreateCommunityProps {\n  isOpen: boolean;\n  onClose: () => void;\n  onCreate: (data: CommunityData) => void;\n  initialData?: Partial<CommunityData>;\n}\n\nexport const CreateCommunity: React.FC<CreateCommunityProps> = ({\n  isOpen,\n  onClose,\n  onCreate,\n  initialData\n}) => {\n  const [communityName, setCommunityName] = useState(initialData?.communityName || 'Clipping Course');\n  const [pricing, setPricing] = useState(initialData?.pricing || 'FREE');\n  const [isApplicationRequired, setIsApplicationRequired] = useState(initialData?.isApplicationRequired || false);\n\n  useEffect(() => {\n    if (initialData) {\n      requestAnimationFrame(() => {\n        if (initialData.communityName) setCommunityName(initialData.communityName);\n        if (initialData.pricing) setPricing(initialData.pricing);\n        if (initialData.isApplicationRequired !== undefined) setIsApplicationRequired(initialData.isApplicationRequired);\n      });\n    }\n  }, [initialData]);\n\n  const pricingOptions = ['FREE', 'ONE-TIME', 'MONTHLY'];\n\n  return (\n    <AnimatePresence mode=\"wait\">\n      {isOpen && (\n        <div className=\"theme-injected font-sans fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6 overflow-y-auto overflow-x-hidden\">\n\n          {/* BG Overlay Animation */}\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: 0.5, ease: [0.22, 1, 0.36, 1] }}\n            onClick={onClose}\n            className=\"fixed inset-0 bg-background/70 backdrop-blur-sm\"\n          >\n            {/* Glow Effects */}\n            <div\n              className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[140%] h-72 bg-primary/10 blur-[80px] rotate-[-15deg] rounded-full\"\n            />\n            <div className=\"absolute inset-0 bg-background/60\" />\n          </motion.div>\n\n          {/* Modal Container */}\n          <motion.div\n            initial={{ opacity: 0, scale: 0.92, y: 30 }}\n            animate={{ opacity: 1, scale: 1, y: 0 }}\n            exit={{ opacity: 0, scale: 0.92, y: 30 }}\n            transition={{\n              duration: 0.6,\n              ease: [0.16, 1, 0.3, 1],\n              opacity: { duration: 0.4 }\n            }}\n            className=\"relative w-full max-w-135 backdrop-blur-2xl rounded-2xl p-6 sm:p-7 shadow-2xl z-50 my-auto\n                       bg-card border-4 sm:border-8 border-border\"\n          >\n            {/* Header */}\n            <div className=\"flex justify-between items-start mb-4\">\n              <div>\n                <h2 className=\"text-xl sm:text-2xl font-medium tracking-tight text-foreground\">Create community</h2>\n                <p className=\"text-sm mt-3 sm:mt-4 leading-relaxed max-w-full text-muted-foreground\">\n                  Enter your community name and choose how people can join. You can make it free, charge a fee, or require an application.\n                </p>\n              </div>\n              <button title='close'\n                onClick={onClose}\n                className=\"transition-colors p-1 text-muted-foreground hover:text-foreground\"\n              >\n                <X size={20} />\n              </button>\n            </div>\n\n            {/* Input Section */}\n            <div className=\"space-y-4\">\n              <div className=\"space-y-2\">\n                <label className=\"text-sm ml-1 text-muted-foreground\">Community name</label>\n                <div className=\"relative group\">\n                  <input title='name'\n                    type=\"text\"\n                    value={communityName}\n                    onChange={(e) => setCommunityName(e.target.value)}\n                    className=\"w-full rounded-xl mt-3 px-5 py-3 outline-none transition-all\n                             bg-background border border-input text-foreground focus:border-ring\"\n                  />\n                </div>\n              </div>\n\n              {/* Pricing Tabs */}\n              <div className=\"space-y-2\">\n                <label className=\"text-sm ml-1 text-muted-foreground\">Pricing & Access</label>\n                <div className=\"grid grid-cols-3 mt-2.5 rounded-full p-1 relative\n                              bg-muted border border-border\">\n                  {pricingOptions.map((option) => (\n                    <button\n                      key={option}\n                      onClick={() => setPricing(option)}\n                      className={`relative z-10 py-3 text-xs font-normal tracking-widest transition-colors duration-300 ${pricing === option\n                        ? 'text-foreground'\n                        : 'text-muted-foreground'\n                        }`}\n                    >\n                      {option}\n                      {pricing === option && (\n                        <motion.div\n                          layoutId=\"activeTab\"\n                          className=\"absolute inset-0 rounded-full -z-10\n                                   bg-card border border-border shadow-sm\"\n                          transition={{ type: \"spring\", bounce: 0.15, duration: 0.5 }}\n                        />\n                      )}\n                    </button>\n                  ))}\n                </div>\n              </div>\n\n              {/* Toggle Section */}\n              <div className=\"flex items-center justify-between rounded-xl px-4 py-4\n                            bg-background border border-border\">\n                <div className=\"flex items-center gap-2\">\n                  <span className=\"text-base text-muted-foreground\">Application required</span>\n                  <Info size={16} className=\"cursor-help text-muted-foreground\" />\n                </div>\n                <button title='switch'\n                  onClick={() => setIsApplicationRequired(!isApplicationRequired)}\n                  className={`w-10 h-6 rounded-full transition-colors duration-300 relative ${isApplicationRequired\n                    ? 'bg-primary'\n                    : 'bg-muted'\n                    }`}\n                >\n                  <motion.div\n                    animate={{ x: isApplicationRequired ? 19 : 2 }}\n                    transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\n                    className={`absolute top-0.5 w-5 h-5 rounded-full transition-colors ${isApplicationRequired\n                      ? 'bg-primary-foreground'\n                      : 'bg-card'\n                      }`}\n                  />\n                </button>\n              </div>\n\n              <p className=\"text-center text-sm pt-2 text-muted-foreground\">\n                By creating a community, you agree to Payper's{' '}\n                <span className=\"underline cursor-pointer text-foreground\">Community Guidelines</span>\n              </p>\n            </div>\n\n            {/* Footer Buttons */}\n            <div className=\"flex flex-col-reverse sm:flex-row items-center justify-end gap-3 mt-8 sm:mt-10\">\n              <button\n                onClick={onClose}\n                className=\"w-full sm:w-auto px-8 py-3 rounded-full text-sm font-medium transition-colors\n                         border border-border text-foreground hover:bg-muted\"\n              >\n                Cancel\n              </button>\n              <button\n                onClick={() => onCreate({ communityName, pricing, isApplicationRequired })}\n                className=\"w-full sm:w-auto px-8 py-3 rounded-full text-sm font-bold transition-all active:scale-95\n                         bg-primary text-primary-foreground hover:bg-primary/90\"\n              >\n                Create community\n              </button>\n            </div>\n          </motion.div>\n        </div>\n      )}\n    </AnimatePresence>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "create-new-disclosure",
      "type": "registry:component",
      "title": "Create New Disclosure",
      "description": "A stylish \"Create New\" disclosure component that expands from a pill-shaped button into a rich grid of actions.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/create-new-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC, type ReactNode } from 'react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  Add01Icon,\n  Cancel01Icon,\n  Folder01Icon,\n  TaskEdit01Icon,\n  NoteIcon,\n  Award01Icon,\n  Flag02Icon,\n  Calendar04Icon,\n} from '@hugeicons/core-free-icons';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface DisclosureItem {\n  icon: ReactNode;\n  label: string;\n}\n\nexport interface CreateNewDisclosureProps {\n  items?: DisclosureItem[];\n  initialOpen?: boolean;\n}\n\ninterface GridItemProps {\n  icon: ReactNode;\n  label: string;\n}\n\nconst GridItem: FC<GridItemProps> = ({ icon, label }) => {\n  return (\n    <motion.button className=\"group flex flex-col items-center justify-center gap-1 sm:gap-1.5 rounded-[20px] sm:rounded-[24px] px-1 py-3 sm:py-4 transition-all duration-200 hover:bg-[#F4F2EA] dark:hover:bg-neutral-800/50\">\n      <div className=\"text-[#8B8B8B] transition-colors group-hover:text-[#4A4A4A] dark:text-neutral-500 dark:group-hover:text-neutral-300 [&>svg]:size-5 sm:[&>svg]:size-7\">\n        {icon}\n      </div>\n      <span className=\"text-[12px] sm:text-[14px] font-medium tracking-tight text-[#4A4A4A] dark:text-neutral-400\">\n        {label}\n      </span>\n    </motion.button>\n  );\n};\n\nexport const CreateNewDisclosure: FC<CreateNewDisclosureProps> = ({\n  items,\n  initialOpen = false,\n}) => {\n  const [open, setOpen] = useState<boolean>(initialOpen);\n\n  const defaultItems: DisclosureItem[] = [\n    {\n      icon: <HugeiconsIcon icon={Folder01Icon} strokeWidth={1.5} />,\n      label: 'Project',\n    },\n    {\n      icon: <HugeiconsIcon icon={TaskEdit01Icon} strokeWidth={1.5} />,\n      label: 'Task',\n    },\n    {\n      icon: <HugeiconsIcon icon={NoteIcon} strokeWidth={1.5} />,\n      label: 'Note',\n    },\n    {\n      icon: <HugeiconsIcon icon={Award01Icon} strokeWidth={1.5} />,\n      label: 'Goal',\n    },\n    {\n      icon: <HugeiconsIcon icon={Flag02Icon} strokeWidth={1.5} />,\n      label: 'Milestone',\n    },\n    {\n      icon: <HugeiconsIcon icon={Calendar04Icon} strokeWidth={1.5} />,\n      label: 'Reminder',\n    },\n  ];\n\n  const disclosureItems = items || defaultItems;\n\n  return (\n    <AnimatePresence mode=\"popLayout\" initial={false}>\n      {!open ? (\n        <motion.button\n          key=\"collapsed\"\n          layoutId=\"shared-container\"\n          onClick={() => setOpen(true)}\n          exit={{ opacity: 0, transition: { duration: 0.1 } }}\n          style={{\n            borderRadius: 32,\n          }}\n          transition={{ type: 'spring', bounce: 0.1, duration: 0.4 }}\n          className=\"flex cursor-pointer items-center gap-2 bg-[#FAFBF8] px-6 py-3.5 sm:px-8 sm:py-4 text-base sm:text-lg font-medium whitespace-nowrap text-[#626360] dark:bg-neutral-900 dark:text-neutral-400\"\n        >\n          <motion.div layoutId=\"label\" className=\"flex items-center gap-2\">\n            <HugeiconsIcon\n              icon={Add01Icon}\n              size={24}\n              className=\"text-[#626360] dark:text-neutral-400 sm:size-[26px]\"\n              strokeWidth={1.5}\n            />\n            Create New\n          </motion.div>\n        </motion.button>\n      ) : (\n        <motion.div\n          key=\"expanded\"\n          layoutId=\"shared-container\"\n          initial={{ opacity: 0 }}\n          animate={{ opacity: 1 }}\n          exit={{\n            opacity: 0,\n            transition: { duration: 0.1 },\n          }}\n          style={{\n            borderRadius: 22,\n          }}\n          transition={{ type: 'spring', bounce: 0.1, duration: 0.4 }}\n          className=\"h-full w-[calc(100vw-32px)] sm:w-sm bg-[#F7F5EE] p-1 dark:bg-neutral-900\"\n        >\n          <div className=\"flex items-center justify-between px-4 py-3.5\">\n            <motion.p\n              layoutId=\"label\"\n              className=\"text-[15px] sm:text-[16px] font-semibold text-[#5C5A56] dark:text-neutral-400\"\n            >\n              Create New\n            </motion.p>\n            <motion.button\n              onClick={() => setOpen(false)}\n              whileTap={{ scale: 0.95 }}\n              className=\"flex h-6 w-6 cursor-pointer items-center justify-center rounded-full bg-[#B8B5B0] dark:bg-neutral-700\"\n            >\n              <HugeiconsIcon\n                icon={Cancel01Icon}\n                size={16}\n                color=\"#ffffff\"\n                strokeWidth={2.5}\n              />\n            </motion.button>\n          </div>\n\n          <div className=\"grid grid-cols-3 gap-1 rounded-t-[20px] rounded-b-[20px] bg-white p-3 sm:p-4 shadow-sm dark:bg-neutral-950\">\n            {disclosureItems.map((item, index) => (\n              <GridItem key={index} icon={item.icon} label={item.label} />\n            ))}\n          </div>\n        </motion.div>\n      )}\n    </AnimatePresence>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "create-new-disclosure-base",
      "type": "registry:component",
      "title": "Create New Disclosure (base)",
      "description": "Theme-ready base variant of A stylish \"Create New\" disclosure component that expands from a pill-shaped button into a rich grid of actions..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/create-new-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC, type ReactNode } from 'react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  Add01Icon,\n  Cancel01Icon,\n  Folder01Icon,\n  TaskEdit01Icon,\n  NoteIcon,\n  Award01Icon,\n  Flag02Icon,\n  Calendar04Icon,\n} from '@hugeicons/core-free-icons';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface DisclosureItem {\n  icon: ReactNode;\n  label: string;\n}\n\nexport interface CreateNewDisclosureProps {\n  items?: DisclosureItem[];\n  initialOpen?: boolean;\n}\n\ninterface GridItemProps {\n  icon: ReactNode;\n  label: string;\n}\n\nconst GridItem: FC<GridItemProps> = ({ icon, label }) => {\n  return (\n    <motion.button className=\"group flex flex-col items-center justify-center gap-1 sm:gap-2 rounded-xl px-1 py-3 sm:py-4 transition-all duration-200 hover:bg-accent/40\">\n      <div className=\"text-muted-foreground transition-colors group-hover:text-foreground [&>svg]:size-5 sm:[&>svg]:size-7\">\n        {icon}\n      </div>\n      <span className=\"text-[12px] sm:text-sm font-medium tracking-tight text-foreground\">\n        {label}\n      </span>\n    </motion.button>\n  );\n};\n\nexport const CreateNewDisclosure: FC<CreateNewDisclosureProps> = ({\n  items,\n  initialOpen = false,\n}) => {\n  const [open, setOpen] = useState<boolean>(initialOpen);\n\n  const defaultItems: DisclosureItem[] = [\n    {\n      icon: <HugeiconsIcon icon={Folder01Icon} strokeWidth={1.5} />,\n      label: 'Project',\n    },\n    {\n      icon: <HugeiconsIcon icon={TaskEdit01Icon} strokeWidth={1.5} />,\n      label: 'Task',\n    },\n    {\n      icon: <HugeiconsIcon icon={NoteIcon} strokeWidth={1.5} />,\n      label: 'Note',\n    },\n    {\n      icon: <HugeiconsIcon icon={Award01Icon} strokeWidth={1.5} />,\n      label: 'Goal',\n    },\n    {\n      icon: <HugeiconsIcon icon={Flag02Icon} strokeWidth={1.5} />,\n      label: 'Milestone',\n    },\n    {\n      icon: <HugeiconsIcon icon={Calendar04Icon} strokeWidth={1.5} />,\n      label: 'Reminder',\n    },\n  ];\n\n  const disclosureItems = items || defaultItems;\n\n  return (\n    <div\n      className=\"theme-injected bg-transparent text-foreground font-sans px-4 sm:px-0\"\n      style={{ fontFamily: 'var(--font-sans)' }}\n    >\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {!open ? (\n          <motion.button\n            key=\"collapsed\"\n            layoutId=\"shared-container\"\n            onClick={() => setOpen(true)}\n            exit={{ opacity: 0, transition: { duration: 0.1 } }}\n            transition={{ type: 'spring', bounce: 0.1, duration: 0.4 }}\n            style={{\n              borderRadius:32,\n            }}\n            className=\"flex cursor-pointer items-center gap-2 border border-border bg-card px-6 py-3 sm:px-8 sm:py-4 text-base sm:text-lg font-medium whitespace-nowrap text-foreground shadow-sm\"\n          >\n            <motion.div layoutId=\"label\" className=\"flex items-center gap-2\">\n              <HugeiconsIcon\n                icon={Add01Icon}\n                size={24}\n                className=\"text-muted-foreground sm:size-[26px]\"\n                strokeWidth={1.5}\n              />\n              Create New\n            </motion.div>\n          </motion.button>\n        ) : (\n          <motion.div\n            key=\"expanded\"\n            layoutId=\"shared-container\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{\n              opacity: 0,\n              transition: { duration: 0.1 },\n            }}\n            style={{\n              borderRadius:32, \n            }}\n            transition={{ type: 'spring', bounce: 0.1, duration: 0.4 }}\n            className=\"h-full w-[calc(100vw-32px)] sm:w-96 rounded-2xl border border-border bg-muted/40 p-1\"\n          >\n            <div className=\"flex items-center justify-between px-4 py-3\">\n              <motion.p\n                layoutId=\"label\"\n                className=\"text-sm sm:text-base font-semibold text-foreground\"\n              >\n                Create New\n              </motion.p>\n              <motion.button\n                onClick={() => setOpen(false)}\n                whileTap={{ scale: 0.95 }}\n                className=\"flex h-6 w-6 cursor-pointer items-center justify-center rounded-full bg-secondary text-secondary-foreground\"\n              >\n                <HugeiconsIcon\n                  icon={Cancel01Icon}\n                  size={16}\n                  className=\"text-secondary-foreground\"\n                  strokeWidth={2.5}\n                />\n              </motion.button>\n            </div>\n\n            <div className=\"grid grid-cols-3 gap-1 rounded-4xl bg-card p-3 sm:p-4 shadow-sm\">\n              {disclosureItems.map((item, index) => (\n                <GridItem key={index} icon={item.icon} label={item.label} />\n              ))}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "credit-usage-card",
      "type": "registry:component",
      "title": "Credit Usage Card",
      "description": "Displays credit consumption progress with clear limits and usage breakdown.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/credit-usage-card.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  MoreVertical,\n  Download,\n  ChevronDown,\n  Check,\n  Printer,\n  Share2,\n  RefreshCw,\n} from 'lucide-react';\n\ninterface UsageHistoryItem {\n  date: string;\n  model: string;\n  credits: string;\n  cost: string;\n}\n\ninterface CreditUsageCardProps {\n  usedCreditsPercent?: number;\n  totalCreditsLabel?: string;\n  creditsUsedLabel?: string;\n  creditsLeftLabel?: string;\n  usageHistory?: UsageHistoryItem[];\n  onAutoSwitchChange?: (enabled: boolean) => void;\n  onManagePlan?: () => void;\n  onViewAll?: () => void;\n}\n\nconst PERIOD_OPTIONS = ['7 Days', '14 Days', '30 Days', '90 Days', '12 Months'];\n\nconst popoverAnim = {\n  initial: { opacity: 0, y: 6, scale: 0.97 },\n  animate: { opacity: 1, y: 0, scale: 1 },\n  exit: { opacity: 0, y: 6, scale: 0.97 },\n  transition: { type: 'spring' as const, stiffness: 400, damping: 28 },\n} as const;\n\nexport const CreditUsageCard: React.FC<CreditUsageCardProps> = ({\n  usedCreditsPercent = 56.4,\n  totalCreditsLabel = '100M CREDITS',\n  creditsUsedLabel = '56.4M',\n  creditsLeftLabel = '43.6M',\n  usageHistory = [],\n  onAutoSwitchChange,\n  onManagePlan,\n  onViewAll,\n}) => {\n  const [autoSwitch, setAutoSwitch] = useState(true);\n  const [activePopover, setActivePopover] = useState<'more' | 'period' | null>(\n    null,\n  );\n  const [selectedPeriod, setSelectedPeriod] = useState('30 Days');\n  const [downloadDone, setDownloadDone] = useState(false);\n  const segments = 75;\n\n  const moreRef = useRef<HTMLDivElement>(null);\n  const periodRef = useRef<HTMLDivElement>(null);\n\n  const handleToggleAutoSwitch = () => {\n    const newState = !autoSwitch;\n    setAutoSwitch(newState);\n    onAutoSwitchChange?.(newState);\n  };\n\n  const handleDownload = () => {\n    // Simulate CSV export\n    const headers = ['Date', 'Model', 'Credits', 'Cost'];\n    const rows = usageHistory.map((r) => [r.date, r.model, r.credits, r.cost]);\n    const csv = [headers, ...rows].map((r) => r.join(',')).join('\\n');\n    const blob = new Blob([csv], { type: 'text/csv' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = 'credit-usage.csv';\n    a.click();\n    URL.revokeObjectURL(url);\n    setDownloadDone(true);\n    setTimeout(() => setDownloadDone(false), 2000);\n  };\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (moreRef.current && !moreRef.current.contains(e.target as Node)) {\n        setActivePopover((prev) => (prev === 'more' ? null : prev));\n      }\n      if (periodRef.current && !periodRef.current.contains(e.target as Node)) {\n        setActivePopover((prev) => (prev === 'period' ? null : prev));\n      }\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  return (\n    <div className=\"flex w-full flex-col items-center justify-center bg-transparent p-4 font-sans transition-colors duration-500 sm:p-8 md:p-12\">\n      <div className=\"w-full max-w-135 overflow-hidden rounded-4xl border border-[#DDD] bg-white font-mono text-slate-700 shadow-xl transition-all duration-500 select-none dark:border-[#222] dark:bg-[#101010] dark:text-[#d4d4d4]\">\n        {/* Top Header */}\n        <div className=\"flex flex-col items-start justify-between gap-4 bg-gray-50/50 px-4 py-5 sm:flex-row sm:items-center sm:px-6 md:px-8 dark:bg-[#171717]\">\n          <div>\n            <h3 className=\"mb-1 text-[9px] font-bold tracking-[0.2em] text-[#7E7E7E] uppercase\">\n              Credits Used\n            </h3>\n            <span className=\"inter text-2xl font-medium text-slate-900 sm:text-3xl dark:text-[#F2F2F2]\">\n              {usedCreditsPercent}%\n            </span>\n          </div>\n\n          <div className=\"mt-1 flex items-center gap-2 self-end sm:self-auto\">\n            <span className=\"max-w-37.5 text-right text-[9px] leading-tight font-bold tracking-wider text-[#787777] uppercase sm:text-[10px]\">\n              Auto-switch to cheaper model at limit\n            </span>\n            <button\n              title=\"toggle\"\n              onClick={handleToggleAutoSwitch}\n              className={`relative flex h-4.75 w-10 shrink-0 items-center rounded-full border-[1.4px] p-0.5 transition-colors duration-200 ${\n                autoSwitch\n                  ? 'border-green-500/40 bg-[#E8F5E9] dark:border-green-400/40 dark:bg-[#182D1A]'\n                  : 'border-gray-300 bg-gray-200 dark:border-[#404040] dark:bg-[#333]'\n              }`}\n            >\n              <motion.div\n                animate={{ x: autoSwitch ? 17 : 0 }}\n                transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n                className={`h-3 w-4 ${autoSwitch ? 'bg-green-500 dark:bg-[#2FD340]' : 'bg-gray-400 dark:bg-[#595353]'} rounded-full shadow-sm`}\n              />\n            </button>\n          </div>\n        </div>\n\n        {/* Progress Bar */}\n        <div className=\"flex h-3 gap-px bg-gray-50/50 px-4 sm:gap-1 sm:px-6 md:px-8 dark:bg-[#171717]\">\n          {[...Array(segments)].map((_, i) => {\n            const isFilled = i < (usedCreditsPercent / 100) * segments;\n            return (\n              <div\n                key={i}\n                className={`flex-1 rounded-full transition-all duration-700 ${\n                  isFilled ? 'bg-[#FF7A3F]' : 'bg-gray-200 dark:bg-[#222]'\n                }`}\n                style={{ opacity: isFilled ? 1 - i * 0.004 : 1 }}\n              />\n            );\n          })}\n        </div>\n\n        <div className=\"flex items-center justify-between bg-gray-50/50 px-4 py-4 text-[9px] font-bold sm:px-6 sm:text-[10px] md:px-8 dark:bg-[#171717]\">\n          <span className=\"text-slate-500 dark:text-[#BEBEBE]\">\n            {creditsUsedLabel}{' '}\n            <span className=\"text-slate-400 dark:text-[#717171]\">\n              / {totalCreditsLabel}\n            </span>\n          </span>\n          <span className=\"text-slate-500 dark:text-[#BEBEBE]\">\n            {creditsLeftLabel}{' '}\n            <span className=\"xs:inline hidden text-slate-400 dark:text-[#717171]\">\n              CREDITS LEFT\n            </span>\n          </span>\n        </div>\n\n        <div className=\"h-px w-full border-b-2 border-dashed border-black/5 dark:border-white/10\" />\n\n        {/* History Header */}\n        <div className=\"flex flex-row flex-wrap items-center justify-between gap-2 bg-gray-50/50 px-4 pt-4 pb-4 sm:flex-nowrap sm:px-6 md:px-8 dark:bg-[#171717]\">\n          <div className=\"flex flex-shrink-0 items-center gap-2\">\n            <h4 className=\"inter text-sm font-medium whitespace-nowrap text-slate-800 sm:text-base dark:text-[#E8E8E8]\">\n              Usage History\n            </h4>\n            <button\n              onClick={onViewAll}\n              title=\"view all\"\n              className=\"flex-shrink-0 rounded-full border border-gray-300 px-2 py-0.5 text-center text-[9px] whitespace-nowrap text-gray-500 transition-colors hover:bg-gray-100 active:scale-95 dark:border-[#909090]/65 dark:text-[#909090] dark:hover:bg-[#1a1a1a]\"\n            >\n              View all\n            </button>\n          </div>\n\n          {/* Period selector */}\n          <div ref={periodRef} className=\"relative flex-shrink-0\">\n            <button\n              title=\"period\"\n              onClick={() =>\n                setActivePopover((prev) =>\n                  prev === 'period' ? null : 'period',\n                )\n              }\n              className=\"flex items-center gap-1 rounded-xl border border-gray-300 px-2 py-1 text-[9px] whitespace-nowrap text-gray-500 transition-colors hover:bg-gray-100 sm:gap-2 dark:border-[#909090]/65 dark:text-[#909090] dark:hover:bg-[#1a1a1a]\"\n            >\n              {selectedPeriod}{' '}\n              <ChevronDown\n                size={10}\n                className={`transition-transform ${activePopover === 'period' ? 'rotate-180' : ''}`}\n              />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'period' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"absolute top-full right-0 z-50 mt-2 w-36 overflow-hidden rounded-2xl border border-gray-200 bg-white py-1.5 shadow-2xl dark:border-[#303030] dark:bg-[#1a1a1a]\"\n                >\n                  {PERIOD_OPTIONS.map((opt) => (\n                    <button\n                      key={opt}\n                      onClick={() => {\n                        setSelectedPeriod(opt);\n                        setActivePopover(null);\n                      }}\n                      className={`flex w-full items-center justify-between px-4 py-2 text-left text-[11px] transition-colors ${selectedPeriod === opt ? 'text-[#FF7A3F]' : 'text-gray-600 hover:bg-gray-50 dark:text-[#aaa] dark:hover:bg-[#222]'}`}\n                    >\n                      {opt}\n                      {selectedPeriod === opt && <Check size={11} />}\n                    </button>\n                  ))}\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </div>\n\n        {/* Table Wrapper */}\n        <div className=\"no-scrollbar overflow-x-auto bg-gray-50/50 dark:bg-[#171717]\">\n          <div className=\"min-w-120 space-y-0.5 border-b-[1.4px] border-gray-200 px-4 py-2 sm:px-6 md:px-8 dark:border-[#303030]/60\">\n            <div className=\"grid grid-cols-4 px-1 pb-2 text-[10px] font-bold tracking-[0.15em] text-slate-400 uppercase dark:text-[#737373]\">\n              <span>Date</span>\n              <span>Model</span>\n              <span className=\"text-right\">Credits</span>\n              <span className=\"text-right\">Cost</span>\n            </div>\n            {usageHistory.map((row, idx) => (\n              <div\n                key={idx}\n                className=\"group grid grid-cols-4 border-t-[1.5px] border-gray-100 px-1 py-2 text-[10.5px] text-slate-500 transition-colors hover:bg-white dark:border-[#222222] dark:text-[#999] dark:hover:bg-[#161616]\"\n              >\n                <span className=\"group-hover:text-slate-900 dark:group-hover:text-white/80\">\n                  {row.date}\n                </span>\n                <span className=\"truncate pr-2 font-medium group-hover:text-slate-900 dark:group-hover:text-white/80\">\n                  {row.model}\n                </span>\n                <span className=\"text-right group-hover:text-slate-900 dark:group-hover:text-white/80\">\n                  {row.credits}\n                </span>\n                <span className=\"text-right font-bold group-hover:text-slate-900 dark:group-hover:text-white/80\">\n                  {row.cost}\n                </span>\n              </div>\n            ))}\n          </div>\n        </div>\n\n        {/* Footer*/}\n        <div className=\"flex flex-col items-center justify-between gap-4 bg-white px-4 pt-4 pb-4 sm:flex-row sm:px-6 md:px-8 dark:bg-[#101010]\">\n          <div className=\"flex items-center gap-3 self-start text-slate-400 sm:self-auto dark:text-[#888888]\">\n            {/* More Options */}\n            <div ref={moreRef} className=\"relative flex items-center\">\n              <button\n                title=\"more\"\n                onClick={() =>\n                  setActivePopover((prev) => (prev === 'more' ? null : 'more'))\n                }\n                className=\"flex items-center justify-center\"\n              >\n                <MoreVertical\n                  size={16}\n                  className=\"cursor-pointer transition-colors hover:text-slate-900 dark:hover:text-white\"\n                />\n              </button>\n              <AnimatePresence>\n                {activePopover === 'more' && (\n                  <motion.div\n                    {...popoverAnim}\n                    className=\"absolute bottom-full left-0 z-50 mb-2 w-44 overflow-hidden rounded-2xl border border-gray-200 bg-white py-1.5 shadow-2xl dark:border-[#303030] dark:bg-[#1a1a1a]\"\n                  >\n                    {[\n                      {\n                        label: 'Export CSV',\n                        icon: <Download size={12} />,\n                        action: handleDownload,\n                      },\n                      {\n                        label: 'Print',\n                        icon: <Printer size={12} />,\n                        action: () => {\n                          window.print();\n                          setActivePopover(null);\n                        },\n                      },\n                      {\n                        label: 'Share report',\n                        icon: <Share2 size={12} />,\n                        action: () => setActivePopover(null),\n                      },\n                      {\n                        label: 'Refresh data',\n                        icon: <RefreshCw size={12} />,\n                        action: () => setActivePopover(null),\n                      },\n                    ].map((opt) => (\n                      <button\n                        key={opt.label}\n                        onClick={opt.action}\n                        className=\"flex w-full items-center gap-2.5 px-4 py-2.5 text-left text-[12px] text-gray-600 transition-colors hover:bg-gray-50 dark:text-[#aaa] dark:hover:bg-[#222]\"\n                      >\n                        <span className=\"text-gray-400 dark:text-[#666]\">\n                          {opt.icon}\n                        </span>\n                        {opt.label}\n                      </button>\n                    ))}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n\n            <div className=\"h-4 w-px bg-gray-200 dark:bg-[#242424]\" />\n\n            {/* Download CSV */}\n            <button\n              title=\"download\"\n              onClick={handleDownload}\n              className=\"relative flex items-center justify-center\"\n            >\n              <motion.div\n                animate={{ scale: downloadDone ? 1.15 : 1 }}\n                transition={{ type: 'spring', stiffness: 400, damping: 20 }}\n                className=\"flex items-center justify-center\"\n              >\n                <Download\n                  size={16}\n                  className={`cursor-pointer transition-colors ${downloadDone ? 'text-green-500 dark:text-[#2FD340]' : 'hover:text-slate-900 dark:hover:text-white'}`}\n                />\n              </motion.div>\n            </button>\n          </div>\n\n          <div className=\"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end\">\n            <div className=\"flex items-center gap-1.5 py-1\">\n              <div className=\"flex h-4 w-4 items-center justify-center rounded-full bg-[#6772E7] text-[10px] font-semibold text-white\">\n                S\n              </div>\n              <span className=\"text-[9px] font-bold tracking-tighter text-slate-400 uppercase dark:text-[#7f7d7d]\">\n                Billing via Stripe\n              </span>\n            </div>\n            <button\n              title=\"plans\"\n              onClick={onManagePlan}\n              className=\"inter rounded-full border border-gray-200 px-3 py-1.5 text-[10px] font-normal whitespace-nowrap text-slate-600 transition-all hover:bg-slate-900 hover:text-white sm:text-[11px] dark:border-[#222] dark:text-white/70 dark:hover:bg-white dark:hover:text-black\"\n            >\n              Manage plan\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <style>{`\n        .no-scrollbar::-webkit-scrollbar { display: none; }\n        .no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }\n      `}</style>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "credit-usage-card-base",
      "type": "registry:component",
      "title": "Credit Usage Card (base)",
      "description": "Theme-ready base variant of Displays credit consumption progress with clear limits and usage breakdown..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/credit-usage-card.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  MoreVertical,\n  Download,\n  ChevronDown,\n  Check,\n  Printer,\n  Share2,\n  RefreshCw,\n} from 'lucide-react';\n\ninterface UsageHistoryItem {\n  date: string;\n  model: string;\n  credits: string;\n  cost: string;\n}\n\ninterface CreditUsageCardProps {\n  usedCreditsPercent?: number;\n  totalCreditsLabel?: string;\n  creditsUsedLabel?: string;\n  creditsLeftLabel?: string;\n  usageHistory?: UsageHistoryItem[];\n  onAutoSwitchChange?: (enabled: boolean) => void;\n  onManagePlan?: () => void;\n  onViewAll?: () => void;\n}\n\nconst PERIOD_OPTIONS = ['7 Days', '14 Days', '30 Days', '90 Days', '12 Months'];\n\nconst popoverAnim = {\n  initial: { opacity: 0, y: 4, scale: 0.98 },\n  animate: { opacity: 1, y: 0, scale: 1 },\n  exit: { opacity: 0, y: 4, scale: 0.98 },\n  transition: { type: 'spring' as const, stiffness: 450, damping: 25 },\n} as const;\n\nexport const CreditUsageCard: React.FC<CreditUsageCardProps> = ({\n  usedCreditsPercent = 56.4,\n  totalCreditsLabel = '100M CREDITS',\n  creditsUsedLabel = '56.4M',\n  creditsLeftLabel = '43.6M',\n  usageHistory = [],\n  onAutoSwitchChange,\n  onManagePlan,\n  onViewAll,\n}) => {\n  const [autoSwitch, setAutoSwitch] = useState(true);\n  const [activePopover, setActivePopover] = useState<'more' | 'period' | null>(\n    null,\n  );\n  const [selectedPeriod, setSelectedPeriod] = useState('30 Days');\n  const [downloadDone, setDownloadDone] = useState(false);\n  const segments = 75;\n\n  const moreRef = useRef<HTMLDivElement>(null);\n  const periodRef = useRef<HTMLDivElement>(null);\n\n  const handleToggleAutoSwitch = () => {\n    const newState = !autoSwitch;\n    setAutoSwitch(newState);\n    onAutoSwitchChange?.(newState);\n  };\n\n  const handleDownload = () => {\n    // Simulate CSV export\n    const headers = ['Date', 'Model', 'Credits', 'Cost'];\n    const rows = usageHistory.map((r) => [r.date, r.model, r.credits, r.cost]);\n    const csv = [headers, ...rows].map((r) => r.join(',')).join('\\n');\n    const blob = new Blob([csv], { type: 'text/csv' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = 'usage-history.csv';\n    a.click();\n    URL.revokeObjectURL(url);\n    setDownloadDone(true);\n    setTimeout(() => setDownloadDone(false), 2000);\n  };\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (moreRef.current && !moreRef.current.contains(e.target as Node)) {\n        setActivePopover((prev) => (prev === 'more' ? null : prev));\n      }\n      if (periodRef.current && !periodRef.current.contains(e.target as Node)) {\n        setActivePopover((prev) => (prev === 'period' ? null : prev));\n      }\n    };\n    document.addEventListener('mousedown', handler);\n    return () => document.removeEventListener('mousedown', handler);\n  }, []);\n\n  return (\n    <div className=\"theme-injected flex w-full flex-col items-center justify-center bg-transparent p-4 font-sans transition-colors duration-500 sm:p-8 md:p-12\">\n      <div className=\"bg-card border-border text-foreground w-full max-w-135 overflow-hidden rounded-xl border font-sans shadow-lg transition-all duration-500 select-none\">\n        {/* Top Header */}\n        <div className=\"bg-muted/50 flex flex-col items-start justify-between gap-4 px-4 py-5 sm:flex-row sm:items-center sm:px-6 md:px-8\">\n          <div>\n            <h3 className=\"text-muted-foreground mb-1 text-[10px] font-bold tracking-[0.2em] uppercase\">\n              Credits Used\n            </h3>\n            <span className=\"text-foreground font-sans text-2xl font-medium sm:text-3xl\">\n              {usedCreditsPercent}%\n            </span>\n          </div>\n\n          <div className=\"mt-1 flex items-center gap-2 self-end sm:self-auto\">\n            <span className=\"text-muted-foreground max-w-40 text-right text-[10px] leading-tight font-bold tracking-wider uppercase\">\n              Auto-switch to cheaper model at limit\n            </span>\n            <button\n              title=\"toggle\"\n              onClick={handleToggleAutoSwitch}\n              className={`relative flex h-5 w-10 shrink-0 items-center rounded-full border p-0.5 transition-colors duration-200 ${\n                autoSwitch\n                  ? 'bg-primary/15 border-primary/40'\n                  : 'bg-muted border-border'\n              }`}\n            >\n              <motion.div\n                animate={{ x: autoSwitch ? 18.5 : 0 }}\n                transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n                className={`h-3.5 w-4 ${autoSwitch ? 'bg-primary' : 'bg-muted-foreground'} rounded-full shadow-xs`}\n              />\n            </button>\n          </div>\n        </div>\n\n        {/* Progress Bar */}\n        <div className=\"bg-muted/50 flex h-3 gap-px px-4 sm:gap-1 sm:px-6 md:px-8\">\n          {[...Array(segments)].map((_, i) => {\n            const isFilled = i < (usedCreditsPercent / 100) * segments;\n            return (\n              <div\n                key={i}\n                className={`flex-1 rounded-sm transition-all duration-700 ${\n                  isFilled ? 'bg-primary' : 'bg-muted'\n                }`}\n                style={{ opacity: isFilled ? 1 - i * 0.004 : 1 }}\n              />\n            );\n          })}\n        </div>\n\n        <div className=\"bg-muted/50 flex items-center justify-between px-4 py-4 text-xs font-bold sm:px-6 md:px-8\">\n          <span className=\"text-muted-foreground\">\n            {creditsUsedLabel}{' '}\n            <span className=\"text-muted-foreground/70\">\n              / {totalCreditsLabel}\n            </span>\n          </span>\n          <span className=\"text-muted-foreground\">\n            {creditsLeftLabel}{' '}\n            <span className=\"text-muted-foreground/70 xs:inline hidden\">\n              CREDITS LEFT\n            </span>\n          </span>\n        </div>\n\n        <div className=\"border-border h-px w-full border-b border-dashed\" />\n\n        {/* History Header */}\n        <div className=\"bg-muted/50 flex flex-row flex-wrap items-center justify-between gap-2 px-4 pt-4 pb-4 sm:flex-nowrap sm:px-6 md:px-8\">\n          <div className=\"flex flex-shrink-0 items-center gap-2\">\n            <h4 className=\"text-foreground font-sans text-sm font-medium whitespace-nowrap sm:text-base\">\n              Usage History\n            </h4>\n            <button\n              onClick={onViewAll}\n              title=\"view all\"\n              className=\"border-border text-muted-foreground hover:bg-accent hover:text-accent-foreground shrink-0 rounded-md border px-2 py-1 text-center text-[9px] whitespace-nowrap transition-colors active:scale-95\"\n            >\n              View all\n            </button>\n          </div>\n\n          {/* Period selector */}\n          <div ref={periodRef} className=\"relative flex-shrink-0\">\n            <button\n              title=\"period\"\n              onClick={() =>\n                setActivePopover((prev) =>\n                  prev === 'period' ? null : 'period',\n                )\n              }\n              className=\"border-border text-muted-foreground hover:bg-accent hover:text-accent-foreground flex items-center gap-1 rounded-md border px-2 py-1 text-[9px] whitespace-nowrap transition-all sm:gap-2\"\n            >\n              {selectedPeriod}{' '}\n              <ChevronDown\n                size={10}\n                className={`transition-transform duration-200 ${activePopover === 'period' ? 'rotate-180' : ''}`}\n              />\n            </button>\n            <AnimatePresence>\n              {activePopover === 'period' && (\n                <motion.div\n                  {...popoverAnim}\n                  className=\"bg-popover text-popover-foreground border-border absolute top-full right-0 z-50 mt-2 w-36 overflow-hidden rounded-lg border py-1 shadow-xl\"\n                >\n                  {PERIOD_OPTIONS.map((opt) => (\n                    <button\n                      key={opt}\n                      onClick={() => {\n                        setSelectedPeriod(opt);\n                        setActivePopover(null);\n                      }}\n                      className={`flex w-full items-center justify-between px-3 py-2 text-left text-xs transition-colors ${selectedPeriod === opt ? 'bg-primary/10 text-primary' : 'hover:bg-accent'}`}\n                    >\n                      {opt}\n                      {selectedPeriod === opt && <Check size={12} />}\n                    </button>\n                  ))}\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </div>\n\n        {/* Table Wrapper */}\n        <div className=\"no-scrollbar bg-muted/50 overflow-x-auto\">\n          <div className=\"border-border min-w-[500px] space-y-0.5 border-b px-4 py-2 sm:px-6 md:px-8\">\n            <div className=\"text-muted-foreground grid grid-cols-4 px-1 pb-2 text-[10px] font-bold tracking-wider uppercase\">\n              <span>Date</span>\n              <span>Model</span>\n              <span className=\"text-right\">Credits</span>\n              <span className=\"text-right\">Cost</span>\n            </div>\n            {usageHistory.length > 0 ? (\n              usageHistory.map((row, idx) => (\n                <div\n                  key={idx}\n                  className=\"border-border/50 text-muted-foreground hover:bg-accent/30 group grid grid-cols-4 border-t px-1 py-2.5 text-[10.5px] transition-colors\"\n                >\n                  <span className=\"group-hover:text-foreground\">\n                    {row.date}\n                  </span>\n                  <span className=\"group-hover:text-foreground truncate pr-2 font-medium\">\n                    {row.model}\n                  </span>\n                  <span className=\"group-hover:text-foreground text-right\">\n                    {row.credits}\n                  </span>\n                  <span className=\"group-hover:text-foreground text-right font-bold\">\n                    {row.cost}\n                  </span>\n                </div>\n              ))\n            ) : (\n              <div className=\"text-muted-foreground border-border/50 border-t py-8 text-center text-xs\">\n                No usage history available\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Footer*/}\n        <div className=\"bg-card flex flex-col items-center justify-between gap-4 px-4 pt-4 pb-4 sm:flex-row sm:px-6 md:px-8\">\n          <div className=\"text-muted-foreground flex items-center gap-3 self-start sm:self-auto\">\n            {/* More Options */}\n            <div ref={moreRef} className=\"relative flex items-center\">\n              <button\n                title=\"more\"\n                onClick={() =>\n                  setActivePopover((prev) => (prev === 'more' ? null : 'more'))\n                }\n                className=\"flex items-center justify-center\"\n              >\n                <MoreVertical\n                  size={16}\n                  className=\"hover:text-foreground cursor-pointer transition-colors\"\n                />\n              </button>\n              <AnimatePresence>\n                {activePopover === 'more' && (\n                  <motion.div\n                    {...popoverAnim}\n                    className=\"bg-popover text-popover-foreground border-border absolute bottom-full left-0 z-50 mb-2 w-44 overflow-hidden rounded-lg border py-1 shadow-xl\"\n                  >\n                    {[\n                      {\n                        label: 'Export CSV',\n                        icon: <Download size={14} />,\n                        action: handleDownload,\n                      },\n                      {\n                        label: 'Print history',\n                        icon: <Printer size={14} />,\n                        action: () => {\n                          window.print();\n                          setActivePopover(null);\n                        },\n                      },\n                      {\n                        label: 'Share report',\n                        icon: <Share2 size={14} />,\n                        action: () => setActivePopover(null),\n                      },\n                      {\n                        label: 'Refresh data',\n                        icon: <RefreshCw size={14} />,\n                        action: () => setActivePopover(null),\n                      },\n                    ].map((opt) => (\n                      <button\n                        key={opt.label}\n                        onClick={opt.action}\n                        className=\"hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-3 px-3 py-2.5 text-left text-xs transition-colors\"\n                      >\n                        <span className=\"text-muted-foreground/70\">\n                          {opt.icon}\n                        </span>\n                        {opt.label}\n                      </button>\n                    ))}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n\n            <div className=\"bg-border h-4 w-px\" />\n\n            {/* Download Button */}\n            <button\n              title=\"download\"\n              onClick={handleDownload}\n              className=\"group relative flex items-center justify-center\"\n            >\n              <motion.div\n                animate={\n                  downloadDone\n                    ? { scale: [1, 1.25, 1], rotate: [0, 5, -5, 0] }\n                    : {}\n                }\n                className={`flex items-center justify-center transition-colors ${downloadDone ? 'text-green-500' : 'hover:text-foreground'}`}\n              >\n                <Download size={16} />\n              </motion.div>\n            </button>\n          </div>\n\n          <div className=\"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end\">\n            <div className=\"flex items-center gap-1.5 py-1\">\n              <div className=\"bg-primary text-primary-foreground flex h-4 w-4 items-center justify-center rounded-sm text-[10px] font-semibold\">\n                S\n              </div>\n              <span className=\"text-muted-foreground text-[9px] font-bold tracking-tighter uppercase\">\n                Billing via Stripe\n              </span>\n            </div>\n            <button\n              title=\"plans\"\n              onClick={onManagePlan}\n              className=\"border-border text-foreground hover:bg-foreground hover:text-background rounded-md border px-3 py-2 font-sans text-xs font-normal whitespace-nowrap transition-all active:scale-95\"\n            >\n              Manage plan\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <style>{`\n        .no-scrollbar::-webkit-scrollbar { display: none; }\n        .no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }\n      `}</style>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "deployment-card",
      "type": "registry:component",
      "title": "Deployment Card",
      "description": "Deployment card showing environment, progress, logs, duration, and commit details.",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/deployment-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n  Maximize2,\n  X,\n  Globe,\n  GitBranch,\n  GitCommit,\n  Play,\n  CheckCircle2,\n  MoreVertical,\n  Terminal,\n  Search,\n  Box,\n  RotateCw,\n  Copy,\n  History,\n  Settings,\n  ShieldCheck,\n  AlertCircle,\n} from 'lucide-react';\nimport { PiShareFatLight, PiCheckBold } from 'react-icons/pi';\nimport { LuClock } from 'react-icons/lu';\nimport { TbArrowUpRight, TbCircleDashed } from 'react-icons/tb';\nimport { BsCalendar4Week } from 'react-icons/bs';\nimport { HiMiniCalendar } from 'react-icons/hi2';\nimport { cn } from '@/lib/utils';\n\n// --- Interfaces  ---\nexport interface DeploymentStep {\n  id: string;\n  label: string;\n  status: 'success' | 'warning' | 'error' | 'loading' | 'pending';\n  progress: number;\n  duration: string;\n  metrics?: { files: number; functions: number; assets: number; size: string };\n  errors?: number;\n  warnings?: number;\n}\n\nexport interface DeploymentData {\n  id: string;\n  environment: string;\n  status: 'Ready' | 'Building' | 'Error';\n  createdTime: string;\n  createdBy: { name: string; avatar: string };\n  duration: string;\n  lastActive: string;\n  domains: string[];\n  branch: string;\n  commitMessage: string;\n  commitHash: string;\n  steps: DeploymentStep[];\n}\n\n// --- Components ---\n\nconst SegmentedProgress = ({\n  progress,\n  status,\n  count = 22,\n}: {\n  progress: number;\n  status: string;\n  count?: number;\n}) => {\n  const activeSegments = Math.floor(progress * count);\n  return (\n    <div className=\"flex gap-0.5\">\n      {Array.from({ length: count }).map((_, i) => {\n        const isActive = i < activeSegments;\n        let color = 'bg-neutral-200 dark:bg-[#1e1e1f]';\n        if (isActive) {\n          color =\n            status === 'error'\n              ? 'bg-red-500'\n              : status === 'warning'\n                ? 'bg-amber-500'\n                : 'bg-[#22c55e]';\n        }\n        return (\n          <div\n            key={i}\n            className={cn(\n              'h-2.5 w-1 rounded-[1px] transition-colors duration-150',\n              color,\n            )}\n          />\n        );\n      })}\n    </div>\n  );\n};\n\nconst MetricTag = ({\n  label,\n  value,\n}: {\n  label: string;\n  value: string | number;\n}) => (\n  <div className=\"flex items-center gap-1.5 rounded-md border border-neutral-200 bg-neutral-100 px-2 py-0.5 dark:border-[#2a2a2c] dark:bg-[#161617]\">\n    <span className=\"flex h-3.5 w-3.5 items-center justify-center rounded-[2px] border border-neutral-300 text-[9px] font-black text-neutral-400 uppercase dark:border-[#333] dark:text-[#555]\">\n      {label}\n    </span>\n    <span className=\"text-[10px] font-bold text-neutral-600 dark:text-[#999]\">\n      {value}\n    </span>\n  </div>\n);\n\n// --- Helper ---\nconst formatDuration = (seconds: number) => {\n  const m = Math.floor(seconds / 60);\n  const s = seconds % 60;\n  return `${m}m ${s}s`;\n};\n\nexport const DeploymentCard: React.FC<{ data: DeploymentData }> = ({\n  data: initialData,\n}) => {\n  const [data, setData] = useState(initialData);\n  const [isCopied, setIsCopied] = useState(false);\n  const [elapsedSeconds, setElapsedSeconds] = useState(0);\n  const [activePopover, setActivePopover] = useState<\n    'more' | 'terminal' | 'search' | null\n  >(null);\n  const [isInvestigating, setIsInvestigating] = useState(false);\n  const [searchQuery, setSearchQuery] = useState('');\n\n  const moreRef = useRef<HTMLDivElement>(null);\n  const terminalRef = useRef<HTMLDivElement>(null);\n  const searchRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      const isOutsideMore =\n        moreRef.current && !moreRef.current.contains(event.target as Node);\n      const isOutsideTerminal =\n        terminalRef.current &&\n        !terminalRef.current.contains(event.target as Node);\n      const isOutsideSearch =\n        searchRef.current && !searchRef.current.contains(event.target as Node);\n\n      if (isOutsideMore && isOutsideTerminal && isOutsideSearch) {\n        setActivePopover(null);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  useEffect(() => {\n    if (data.status !== 'Building') return;\n\n    const interval = setInterval(() => {\n      setElapsedSeconds((prev) => prev + 1);\n\n      setData((prevData) => {\n        const newSteps = [...prevData.steps];\n        const activeStepIndex = newSteps.findIndex(\n          (s) =>\n            s.status === 'loading' || (s.status === 'pending' && !s.metrics),\n        );\n\n        if (activeStepIndex !== -1) {\n          const step = { ...newSteps[activeStepIndex] };\n          if (step.progress < 1) {\n            step.status = 'loading';\n            step.progress += 0.05;\n            step.duration = `${Math.floor(step.progress * 10)}s`;\n          } else {\n            step.progress = 1;\n            step.status = 'success';\n          }\n          newSteps[activeStepIndex] = step;\n\n          const allDone = newSteps.every(\n            (s) => s.status === 'success' || s.metrics,\n          );\n\n          return {\n            ...prevData,\n            steps: newSteps,\n            duration: formatDuration(elapsedSeconds),\n            status: allDone ? 'Ready' : 'Building',\n          };\n        }\n        return prevData;\n      });\n    }, 200);\n\n    return () => clearInterval(interval);\n  }, [data.status, elapsedSeconds]);\n\n  const handleShare = () => {\n    navigator.clipboard.writeText(window.location.href);\n    setIsCopied(true);\n    setTimeout(() => setIsCopied(false), 2000);\n  };\n\n  const handleVisit = () => {\n    window.open(`https://${data.domains[0]}`, '_blank');\n  };\n\n  const resetSimulation = () => {\n    setData(initialData);\n    setElapsedSeconds(0);\n  };\n\n  const handleInvestigate = () => {\n    setIsInvestigating(true);\n    setTimeout(() => {\n      setIsInvestigating(false);\n      setData((prev) => ({\n        ...prev,\n        steps: prev.steps.map((s) => ({\n          ...s,\n          status: s.status === 'error' ? 'success' : s.status,\n        })),\n      }));\n    }, 3000);\n  };\n\n  const handleRunSummary = (_id: string) => {\n    // Functional placeholder\n  };\n\n  return (\n    <div className=\"relative px-2 sm:px-0\">\n      <motion.div\n        initial={{ opacity: 0, y: 10 }}\n        animate={{ opacity: 1, y: 0 }}\n        className=\"mx-auto w-full overflow-hidden rounded-[24px] border border-neutral-200 bg-gray-50 font-sans antialiased shadow-xl sm:max-w-140 dark:border-[#1F1F21] dark:bg-[#0F0F10]\"\n      >\n        {/* Header */}\n        <div className=\"flex items-center justify-between border-b border-neutral-100 px-4 py-3 sm:px-5 dark:border-[#1e1e1f]\">\n          <span className=\"text-[11px] font-bold tracking-tight text-neutral-400 uppercase dark:text-[#888]\">\n            Deployment Card\n          </span>\n          <div className=\"flex items-center gap-3 text-neutral-300 dark:text-[#555]\">\n            <RotateCw\n              size={13}\n              onClick={resetSimulation}\n              className=\"cursor-pointer transition-colors duration-500 hover:text-neutral-900 active:rotate-180 dark:hover:text-white\"\n            />\n            <Maximize2\n              size={13}\n              className=\"cursor-pointer transition-colors hover:text-neutral-900 dark:hover:text-white\"\n            />\n            <X\n              size={14}\n              className=\"cursor-pointer transition-colors hover:text-neutral-900 dark:hover:text-white\"\n            />\n          </div>\n        </div>\n\n        <div className=\"space-y-6 p-4 sm:p-6\">\n          {/* Title Area */}\n          <div className=\"flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center sm:gap-0\">\n            <h1 className=\"text-3xl font-medium tracking-tight break-all text-neutral-900 dark:text-white\">\n              {data.id}\n            </h1>\n            <div className=\"flex w-full gap-2 sm:w-auto\">\n              {/* Functional: Share Button */}\n              <button\n                onClick={handleShare}\n                className=\"flex flex-1 items-center justify-center gap-2 rounded-full border border-neutral-200 px-3 py-2 text-[12px] text-neutral-500 transition-all hover:bg-neutral-50 hover:text-neutral-900 active:scale-95 sm:flex-none dark:border-[#2a2a2c] dark:text-[#888] dark:hover:bg-neutral-900 dark:hover:text-white\"\n              >\n                {isCopied ? (\n                  <PiCheckBold size={16} className=\"text-green-500\" />\n                ) : (\n                  <PiShareFatLight size={16} />\n                )}\n                {isCopied ? 'Copied' : 'Share'}\n              </button>\n              <button\n                onClick={handleVisit}\n                className=\"flex flex-1 items-center justify-center gap-1 rounded-full bg-[#FA692E] px-3 py-2 text-[12px] font-semibold text-white transition-transform hover:bg-[#f3703c] active:scale-95 sm:flex-none dark:text-black\"\n              >\n                <TbArrowUpRight size={16} /> Visit\n              </button>\n            </div>\n          </div>\n\n          {/* Info Grid */}\n          <div className=\"flex flex-col gap-6 sm:gap-8 md:flex-row\">\n            <div className=\"group relative aspect-16/10 w-full cursor-crosshair overflow-hidden rounded-xl border border-neutral-200 bg-neutral-100 md:w-64 dark:border-[#2a2a2c] dark:bg-black\">\n              <img\n                title=\"site preview\"\n                src=\"https://images.unsplash.com/photo-1614850523296-d8c1af93d400?q=80&w=400\"\n                className=\"h-full w-full object-cover opacity-60 grayscale transition-all duration-700 group-hover:opacity-100 group-hover:grayscale-0\"\n              />\n              <div className=\"absolute inset-0 flex flex-col justify-end bg-linear-to-t from-black/60 to-transparent p-4 sm:justify-center sm:from-transparent\">\n                <div\n                  className={cn(\n                    'mb-1 h-1 w-8 rounded-full transition-colors duration-500',\n                    data.status === 'Ready'\n                      ? 'bg-[#22c55e]'\n                      : 'animate-pulse bg-amber-500',\n                  )}\n                />\n                <div className=\"text-sm leading-tight font-bold text-white\">\n                  The Coordination\n                  <br />\n                  Layer On All Chains\n                </div>\n              </div>\n            </div>\n\n            <div className=\"grid flex-1 grid-cols-[85px_1fr] items-center gap-y-3 text-[11px] sm:grid-cols-[100px_1fr]\">\n              <span className=\"flex items-center gap-1.5 text-[12px] font-medium tracking-wider text-neutral-400 dark:text-[#555]\">\n                <HiMiniCalendar /> Env\n              </span>\n              <span className=\"ml-2 font-medium text-neutral-700 dark:text-white/70\">\n                {data.environment}\n              </span>\n\n              <span className=\"flex items-center gap-1.5 text-[12px] font-medium tracking-wider text-neutral-400 dark:text-[#555]\">\n                <TbCircleDashed /> Status\n              </span>\n              <div className=\"ml-2 flex items-center gap-2\">\n                <span\n                  className={cn(\n                    'flex items-center gap-2 rounded-full border px-2 py-0.5 font-bold transition-colors duration-300',\n                    data.status === 'Ready'\n                      ? 'border-[#16A821]/30 bg-green-50 text-[#16A821] dark:bg-[#162C19]'\n                      : 'border-amber-500/30 bg-amber-50 text-amber-500 dark:bg-[#2C1F16]',\n                  )}\n                >\n                  <div\n                    className={cn(\n                      'h-1.5 w-1.5 animate-pulse rounded-full',\n                      data.status === 'Ready' ? 'bg-[#16A821]' : 'bg-amber-500',\n                    )}\n                  />\n                  {data.status}\n                </span>\n              </div>\n\n              <span className=\"flex items-center gap-1.5 text-[12px] font-medium tracking-wider text-neutral-400 dark:text-[#555]\">\n                <BsCalendar4Week /> Created\n              </span>\n              <span className=\"ml-2 flex flex-wrap items-center gap-1 text-neutral-500 dark:text-[#878787]\">\n                {data.createdTime} by\n                <span className=\"rounded-full border border-neutral-300 bg-neutral-100 px-1.5 py-0.5 text-[9px] font-black text-nowrap text-neutral-600 uppercase dark:border-[#5C5C5C] dark:bg-[#1A1A1C] dark:text-[#5C5C5C]\">\n                  {data.createdBy.name}\n                </span>\n              </span>\n\n              <span className=\"flex items-center gap-1.5 text-[12px] font-medium tracking-wider text-neutral-400 dark:text-[#555]\">\n                <LuClock /> Duration\n              </span>\n              <div className=\"ml-2 flex flex-wrap items-center gap-3\">\n                <span className=\"font-mono text-neutral-500 dark:text-[#878787]\">\n                  {data.duration}\n                </span>\n                <span className=\"rounded-full border border-neutral-300 bg-neutral-100 px-1.5 py-0.5 text-[9px] font-black text-neutral-600 uppercase dark:border-[#5C5C5C] dark:bg-[#1A1A1C] dark:text-[#5C5C5C]\">\n                  {data.lastActive}\n                </span>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"my-2 border-t-[1.6px] border-dashed border-neutral-200 dark:border-[#222]\" />\n\n          {/* Domain & Source Section  */}\n          <div className=\"grid grid-cols-1 gap-4\">\n            <div className=\"flex items-start justify-between gap-2 sm:items-center\">\n              <div className=\"flex flex-wrap items-center gap-2 text-[11px]\">\n                <span className=\"w-14 shrink-0 font-bold text-neutral-400 uppercase dark:text-[#555]\">\n                  Domains\n                </span>\n                <div\n                  className=\"flex cursor-pointer items-center gap-2 rounded-full border border-neutral-200 bg-neutral-50 px-3 py-1 text-neutral-600 transition-colors hover:bg-neutral-100 active:scale-95 dark:border-[#2a2a2c] dark:bg-[#161617] dark:text-[#999] dark:hover:bg-[#1f1f20]\"\n                  onClick={() =>\n                    window.open(`https://${data.domains[0]}`, '_blank')\n                  }\n                >\n                  <Globe size={12} /> {data.domains[0]}{' '}\n                  <span className=\"text-neutral-300 dark:text-[#444]\">+33</span>\n                </div>\n                <div className=\"hidden rounded-full border border-neutral-200 bg-neutral-50 px-3 py-1 font-mono text-neutral-400 sm:block dark:border-[#2a2a2c] dark:bg-[#161617] dark:text-[#444]\">\n                  main-as..8z\n                </div>\n              </div>\n              <CheckCircle2\n                size={16}\n                className=\"mt-1 shrink-0 text-[#22c55e] sm:mt-0\"\n              />\n            </div>\n\n            <div className=\"flex items-start justify-between gap-2 sm:items-center\">\n              <div className=\"flex flex-wrap items-center gap-2 text-[11px]\">\n                <span className=\"w-14 shrink-0 font-bold text-neutral-400 uppercase dark:text-[#555]\">\n                  Source\n                </span>\n                <div className=\"flex cursor-pointer items-center gap-1.5 rounded border border-neutral-700 bg-neutral-900 px-2 py-0.5 text-[10px] font-bold text-white hover:opacity-80 active:scale-95 dark:border-[#2a2a2c] dark:bg-[#161617]\">\n                  <GitBranch size={12} /> {data.branch}\n                </div>\n                <div className=\"flex items-center gap-3 text-neutral-400 sm:ml-2 dark:text-[#555]\">\n                  <span className=\"flex items-center gap-1\">\n                    <GitCommit size={14} /> 388\n                  </span>\n                  <span className=\"flex items-center gap-1\">\n                    <Box size={14} /> 90\n                  </span>\n                  <span className=\"cursor-help font-black tracking-tighter\">\n                    ...\n                  </span>\n                </div>\n              </div>\n              <CheckCircle2\n                size={16}\n                className=\"mt-1 shrink-0 text-[#22c55e] sm:mt-0\"\n              />\n            </div>\n          </div>\n\n          {/* Status List */}\n          <div className=\"space-y-3\">\n            <h3 className=\"text-sm font-medium text-neutral-900 dark:text-white\">\n              Deployment Status\n            </h3>\n            {data.steps.map((step) => (\n              <div\n                key={step.id}\n                className=\"flex flex-col justify-between gap-3 rounded-xl border border-neutral-200 bg-neutral-50 p-3 sm:flex-row sm:items-center sm:gap-0 sm:p-2 dark:border-[#1e1e1f] dark:bg-[#121213]\"\n              >\n                <div className=\"flex w-full items-center justify-between sm:w-auto\">\n                  <span\n                    className={cn(\n                      'w-auto shrink-0 text-[12px] font-medium transition-colors sm:w-32',\n                      step.status === 'loading'\n                        ? 'text-neutral-900 dark:text-white'\n                        : 'text-neutral-500 dark:text-[#999]',\n                    )}\n                  >\n                    {step.label}\n                  </span>\n                  <div className=\"flex items-center gap-3 sm:hidden\">\n                    <span className=\"text-[11px] text-neutral-400 dark:text-[#555]\">\n                      {step.duration}\n                    </span>\n                    <CheckCircle2\n                      size={16}\n                      className={cn(\n                        step.status === 'error'\n                          ? 'text-red-500'\n                          : step.status === 'success'\n                            ? 'text-[#22c55e]'\n                            : 'text-neutral-300 dark:text-neutral-700',\n                      )}\n                    />\n                  </div>\n                </div>\n\n                <div className=\"flex w-full flex-1 items-center gap-4 sm:ml-1 sm:w-auto\">\n                  {step.metrics ? (\n                    <div className=\"flex w-full gap-2 sm:w-auto\">\n                      <MetricTag label=\"F\" value={step.metrics.files} />\n                      <MetricTag label=\"S\" value={step.metrics.size} />\n                    </div>\n                  ) : (\n                    <div className=\"flex w-full items-center gap-3 sm:w-auto\">\n                      <SegmentedProgress\n                        progress={step.progress}\n                        status={step.status}\n                      />\n                      {step.id === 'build' && (\n                        <button\n                          onClick={() => handleRunSummary(step.id)}\n                          className=\"ml-auto flex items-center gap-1 rounded-md border border-neutral-300 px-2 py-0.5 text-[9px] font-bold text-neutral-400 transition-colors hover:bg-white active:scale-95 sm:ml-0 dark:border-[#2a2a2c] dark:text-[#555] dark:hover:bg-black\"\n                        >\n                          <Play size={8} fill=\"currentColor\" />{' '}\n                          <span className=\"xs:inline hidden\">RUN SUMMARY</span>\n                        </button>\n                      )}\n                    </div>\n                  )}\n                </div>\n\n                <div className=\"ml-4 hidden shrink-0 items-center gap-3 sm:flex\">\n                  <span className=\"text-[11px] text-neutral-400 dark:text-[#555]\">\n                    {step.duration}\n                  </span>\n                  <CheckCircle2\n                    size={16}\n                    className={cn(\n                      step.status === 'error'\n                        ? 'text-red-500'\n                        : step.status === 'success'\n                          ? 'text-[#22c55e]'\n                          : step.status === 'loading'\n                            ? 'animate-pulse text-amber-500'\n                            : 'text-neutral-300 dark:text-[#333]',\n                    )}\n                  />\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n\n        {/* Footer */}\n        <div className=\"relative flex flex-col items-center justify-between gap-4 border-t border-neutral-200 bg-neutral-50 px-4 py-4 sm:flex-row sm:px-6 dark:border-[#1F1F21] dark:bg-[#0D0D0E]\">\n          <div className=\"flex w-full justify-center gap-4 text-neutral-300 sm:w-auto sm:justify-start dark:text-[#444]\">\n            <MoreVertical\n              size={16}\n              className={cn(\n                'cursor-pointer transition-colors hover:text-neutral-900 active:scale-90 dark:hover:text-white',\n                activePopover === 'more' ? 'text-[#FA692E]' : '',\n              )}\n              onClick={() =>\n                setActivePopover(activePopover === 'more' ? null : 'more')\n              }\n            />\n            <Terminal\n              size={15}\n              className={cn(\n                'cursor-pointer transition-colors hover:text-neutral-900 active:scale-90 dark:hover:text-white',\n                activePopover === 'terminal' ? 'text-[#FA692E]' : '',\n              )}\n              onClick={() =>\n                setActivePopover(\n                  activePopover === 'terminal' ? null : 'terminal',\n                )\n              }\n            />\n            <Search\n              size={15}\n              className={cn(\n                'cursor-pointer transition-colors hover:text-neutral-900 active:scale-90 dark:hover:text-white',\n                activePopover === 'search' ? 'text-[#FA692E]' : '',\n              )}\n              onClick={() =>\n                setActivePopover(activePopover === 'search' ? null : 'search')\n              }\n            />\n          </div>\n\n          <div className=\"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row sm:gap-5\">\n            {data.steps.some(\n              (s) => s.status === 'error' || s.status === 'warning',\n            ) && (\n              <div className=\"flex items-center gap-1 text-center text-[9px] font-bold tracking-widest uppercase sm:text-left\">\n                <span className=\"text-red-500 underline decoration-red-500/30\">\n                  1\n                </span>{' '}\n                <span className=\"font-medium text-neutral-400 dark:text-white/40\">\n                  Error,{' '}\n                </span>\n                <span className=\"text-amber-500 underline decoration-amber-500/30\">\n                  {' '}\n                  3\n                </span>{' '}\n                <span className=\"font-medium text-neutral-400 dark:text-white/40\">\n                  Warnings detected\n                </span>\n                <AlertCircle\n                  size={10}\n                  className=\"ml-1 animate-pulse text-red-500\"\n                />\n              </div>\n            )}\n            <button\n              onClick={handleInvestigate}\n              disabled={isInvestigating}\n              className={cn(\n                'relative w-full overflow-hidden rounded-full border border-neutral-200 px-5 py-2 text-[11px] font-bold text-neutral-900 transition-all active:scale-95 disabled:opacity-70 sm:w-auto dark:border-[#222] dark:text-neutral-100',\n                isInvestigating\n                  ? 'bg-neutral-100 dark:bg-[#1A1A1B]'\n                  : 'bg-white dark:bg-[#121213]',\n              )}\n            >\n              <AnimatePresence mode=\"wait\">\n                {isInvestigating ? (\n                  <motion.div\n                    key=\"inv\"\n                    initial={{ y: 20 }}\n                    animate={{ y: 0 }}\n                    exit={{ y: -20 }}\n                    className=\"flex items-center gap-2\"\n                  >\n                    <RotateCw size={12} className=\"animate-spin\" /> Analyzing...\n                  </motion.div>\n                ) : (\n                  <motion.span\n                    key=\"invest\"\n                    initial={{ y: 20 }}\n                    animate={{ y: 0 }}\n                    exit={{ y: -20 }}\n                  >\n                    Investigate\n                  </motion.span>\n                )}\n              </AnimatePresence>\n              {isInvestigating && (\n                <motion.div\n                  initial={{ x: '-100%' }}\n                  animate={{ x: '100%' }}\n                  transition={{ repeat: Infinity, duration: 1, ease: 'linear' }}\n                  className=\"bg-primary/5 absolute inset-0\"\n                />\n              )}\n            </button>\n          </div>\n\n          {/* Global Popover Container (Mobile-Optimized) */}\n          <AnimatePresence>\n            {activePopover === 'more' && (\n              <motion.div\n                ref={moreRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: -10 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute right-4 bottom-full left-4 z-50 mb-2 w-auto overflow-hidden rounded-2xl border border-neutral-200 bg-white p-1 shadow-2xl sm:right-auto sm:left-6 sm:w-48 dark:border-[#222] dark:bg-[#121213]\"\n              >\n                {[\n                  {\n                    icon: Copy,\n                    label: 'Copy Deployment ID',\n                    action: () => {\n                      /* no-op */\n                    },\n                  },\n                  {\n                    icon: History,\n                    label: 'View History',\n                    action: () => {\n                      /* no-op */\n                    },\n                  },\n                  {\n                    icon: ShieldCheck,\n                    label: 'Security Audit',\n                    action: () => {\n                      /* no-op */\n                    },\n                  },\n                  {\n                    icon: Settings,\n                    label: 'Configure',\n                    action: () => {\n                      /* no-op */\n                    },\n                  },\n                ].map((item, i) => (\n                  <button\n                    key={i}\n                    onClick={() => {\n                      item.action();\n                      setActivePopover(null);\n                    }}\n                    className=\"flex w-full items-center gap-2 rounded-xl px-3 py-2 text-left text-[11px] text-neutral-500 transition-colors hover:bg-neutral-50 hover:text-neutral-900 dark:text-neutral-400 dark:hover:bg-white/5 dark:hover:text-neutral-100\"\n                  >\n                    <item.icon size={13} /> {item.label}\n                  </button>\n                ))}\n              </motion.div>\n            )}\n\n            {activePopover === 'terminal' && (\n              <motion.div\n                ref={terminalRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: -10 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute right-4 bottom-full left-4 z-50 mb-2 w-auto overflow-hidden rounded-2xl border border-neutral-200 bg-white shadow-2xl transition-colors duration-300 sm:right-auto sm:left-6 sm:w-80 dark:border-white/10 dark:bg-[#0D0D0E]\"\n              >\n                <div className=\"flex items-center justify-between border-b border-neutral-100 bg-neutral-50/50 px-3 py-2 dark:border-white/5 dark:bg-white/5\">\n                  <span className=\"flex items-center gap-2 text-[10px] font-bold tracking-widest text-neutral-400 uppercase dark:text-neutral-500\">\n                    <Play\n                      size={10}\n                      className=\"fill-[#FA692E]/10 text-[#FA692E]\"\n                    />{' '}\n                    Live Build Logs\n                  </span>\n                  <div className=\"flex gap-1.5\">\n                    <div className=\"h-1.5 w-1.5 rounded-full bg-neutral-200 dark:bg-neutral-800\" />\n                    <div className=\"h-1.5 w-1.5 rounded-full bg-neutral-200 dark:bg-neutral-800\" />\n                    <div className=\"h-1.5 w-1.5 rounded-full bg-neutral-200 dark:bg-neutral-800\" />\n                  </div>\n                </div>\n                <div className=\"no-scrollbar h-44 space-y-2 overflow-y-auto p-3 font-mono text-[10px]\">\n                  <p className=\"text-neutral-400 dark:text-neutral-600\">\n                    [{new Date().toLocaleTimeString()}] Fetching deployment\n                    metadata...\n                  </p>\n                  <p className=\"font-medium text-[#16A821] dark:text-green-400\">\n                    ✔ Repository initialized\n                  </p>\n                  <p className=\"font-medium text-[#16A821] dark:text-green-400\">\n                    ✔ Environment variables decrypted\n                  </p>\n                  <p className=\"text-neutral-400 dark:text-neutral-600\">\n                    [{new Date().toLocaleTimeString()}] Running build script...\n                  </p>\n                  <p className=\"animate-pulse text-neutral-700 italic dark:text-neutral-300\">\n                    Building optimized production bundle...\n                  </p>\n                  <p className=\"rounded-sm bg-amber-500/10 px-1 text-amber-600 dark:text-amber-400\">\n                    Warning: Large assets detected in /public\n                  </p>\n                  <p className=\"font-medium text-[#16A821] dark:text-green-400\">\n                    ✔ Static components pre-rendered\n                  </p>\n                  <p className=\"font-bold text-[#FA692E]\">\n                    Ready for deployment at axiom.xyz\n                  </p>\n                </div>\n              </motion.div>\n            )}\n\n            {activePopover === 'search' && (\n              <motion.div\n                ref={searchRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: -10 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute right-4 bottom-full left-4 z-50 mb-2 flex w-auto items-center gap-2 rounded-2xl border border-neutral-200 bg-white p-2 shadow-2xl sm:right-auto sm:left-24 sm:w-64 dark:border-[#222] dark:bg-[#121213]\"\n              >\n                <div className=\"p-2 text-neutral-400 dark:text-[#555]\">\n                  <Search size={14} />\n                </div>\n                <input\n                  type=\"text\"\n                  autoFocus\n                  placeholder=\"Search deployment context...\"\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  className=\"flex-1 border-none bg-transparent pr-4 text-[11px] text-neutral-900 outline-none placeholder:text-neutral-400 dark:text-white\"\n                  onKeyDown={(e) => e.key === 'Enter' && setActivePopover(null)}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "deployment-card-base",
      "type": "registry:component",
      "title": "Deployment Card (base)",
      "description": "Theme-ready base variant of Deployment card showing environment, progress, logs, duration, and commit details..",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/deployment-card.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { \n  Maximize2, X, Globe, GitBranch, GitCommit, Play, \n  CheckCircle2, MoreVertical, Terminal, Search, Box, RotateCw,\n  Copy, History, Settings, ShieldCheck, AlertCircle\n} from 'lucide-react';\nimport { PiShareFatLight, PiCheckBold } from 'react-icons/pi'; \nimport { LuClock } from 'react-icons/lu';\nimport { TbArrowUpRight, TbCircleDashed } from 'react-icons/tb';\nimport { BsCalendar4Week } from 'react-icons/bs';\nimport { HiMiniCalendar } from 'react-icons/hi2';\nimport { cn } from \"@/lib/utils\";\n\n// --- Interfaces  ---\nexport interface DeploymentStep {\n  id: string;\n  label: string;\n  status: 'success' | 'warning' | 'error' | 'loading' | 'pending';\n  progress: number;\n  duration: string;\n  metrics?: { files: number; functions: number; assets: number; size: string; };\n  errors?: number;\n  warnings?: number;\n}\n\nexport interface DeploymentData {\n  id: string;\n  environment: string;\n  status: 'Ready' | 'Building' | 'Error';\n  createdTime: string;\n  createdBy: { name: string; avatar: string; };\n  duration: string;\n  lastActive: string;\n  domains: string[];\n  branch: string;\n  commitMessage: string;\n  commitHash: string;\n  steps: DeploymentStep[];\n}\n\n// --- Components ---\n\nconst SegmentedProgress = ({ progress, status, count = 22 }: { progress: number, status: string, count?: number }) => {\n  const activeSegments = Math.floor(progress * count);\n  return (\n    <div className=\"flex gap-0.5\">\n      {Array.from({ length: count }).map((_, i) => {\n        const isActive = i < activeSegments;\n        let color = 'bg-muted/80'; \n        if (isActive) {\n          color = status === 'error' ? 'bg-destructive' : status === 'warning' ? 'bg-chart-1' : 'bg-primary';\n        }\n        return <div key={i} className={cn(\"w-1 h-2.5 rounded-[1px] transition-colors duration-150\", color)} />;\n      })}\n    </div>\n  );\n};\n\nconst MetricTag = ({ label, value }: { label: string, value: string | number }) => (\n  <div className=\"flex items-center gap-2 bg-muted/60 border border-border px-2 py-1 rounded-md\">\n    <span className=\"text-muted-foreground font-black text-[9px] uppercase border border-border w-4 h-4 flex items-center justify-center rounded-sm\">{label}</span>\n    <span className=\"text-foreground font-bold text-[10px]\">{value}</span>\n  </div>\n);\n\n// --- Helper ---\nconst formatDuration = (seconds: number) => {\n  const m = Math.floor(seconds / 60);\n  const s = seconds % 60;\n  return `${m}m ${s}s`;\n};\n\nexport const DeploymentCard: React.FC<{ data: DeploymentData }> = ({ data: initialData }) => {\n\n  const [data, setData] = useState(initialData);\n  const [isCopied, setIsCopied] = useState(false);\n  const [elapsedSeconds, setElapsedSeconds] = useState(0); \n  const [activePopover, setActivePopover] = useState<'more' | 'terminal' | 'search' | null>(null);\n  const [isInvestigating, setIsInvestigating] = useState(false);\n  const [searchQuery, setSearchQuery] = useState(\"\");\n  \n  const moreRef = useRef<HTMLDivElement>(null);\n  const terminalRef = useRef<HTMLDivElement>(null);\n  const searchRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      const isOutsideMore = moreRef.current && !moreRef.current.contains(event.target as Node);\n      const isOutsideTerminal = terminalRef.current && !terminalRef.current.contains(event.target as Node);\n      const isOutsideSearch = searchRef.current && !searchRef.current.contains(event.target as Node);\n\n      if (isOutsideMore && isOutsideTerminal && isOutsideSearch) {\n        setActivePopover(null);\n      }\n    };\n    document.addEventListener(\"mousedown\", handleClickOutside);\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n  }, []);\n\n  useEffect(() => {\n    if (data.status !== 'Building') return;\n\n    const interval = setInterval(() => {\n      setElapsedSeconds(prev => prev + 1);\n\n      setData(prevData => {\n        const newSteps = [...prevData.steps];\n        const activeStepIndex = newSteps.findIndex(s => s.status === 'loading' || (s.status === 'pending' && !s.metrics));\n\n        if (activeStepIndex !== -1) {\n          const step = { ...newSteps[activeStepIndex] };\n          if (step.progress < 1) {\n            step.status = 'loading';\n            step.progress += 0.05;\n            step.duration = `${Math.floor(step.progress * 10)}s`; \n          } else {\n            step.progress = 1;\n            step.status = 'success';\n          }\n          newSteps[activeStepIndex] = step;\n\n          const allDone = newSteps.every(s => s.status === 'success' || s.metrics);\n          \n          return {\n            ...prevData,\n            steps: newSteps,\n            duration: formatDuration(elapsedSeconds),\n            status: allDone ? 'Ready' : 'Building'\n          };\n        }\n        return prevData;\n      });\n    }, 200); \n\n    return () => clearInterval(interval);\n  }, [data.status, elapsedSeconds]);\n\n  const handleShare = () => {\n    navigator.clipboard.writeText(window.location.href);\n    setIsCopied(true);\n    setTimeout(() => setIsCopied(false), 2000);\n  };\n\n  const handleVisit = () => {\n    window.open(`https://${data.domains[0]}`, '_blank');\n  };\n\n  const resetSimulation = () => {\n     setData(initialData);\n     setElapsedSeconds(0);\n  };\n\n  const handleInvestigate = () => {\n    setIsInvestigating(true);\n    setTimeout(() => {\n      setIsInvestigating(false);\n      setData(prev => ({\n        ...prev,\n        steps: prev.steps.map(s => ({ ...s, status: s.status === 'error' ? 'success' : s.status }))\n      }));\n    }, 3000);\n  };\n\n  const handleRunSummary = (_id: string) => {\n     // Functional placeholder\n  };\n\n  return (\n    <div className=\"relative px-2 sm:px-0\">\n      <motion.div \n        initial={{ opacity: 0, y: 10 }}\n        animate={{ opacity: 1, y: 0 }}\n        className=\"theme-injected w-full sm:max-w-140 mx-auto bg-card rounded-xl border border-border overflow-hidden shadow-lg font-sans antialiased\"\n      >\n        {/* Header */}\n        <div className=\"flex justify-between items-center px-4 sm:px-5 py-3 border-b border-border\">\n          <span className=\"text-muted-foreground text-[11px] font-bold tracking-tight uppercase\">Deployment Card</span>\n          <div className=\"flex items-center gap-3 text-muted-foreground\">\n            <RotateCw size={13} onClick={resetSimulation} className=\"hover:text-foreground cursor-pointer transition-colors active:rotate-180 duration-500\"/>\n            <Maximize2 size={13} className=\"hover:text-foreground cursor-pointer transition-colors\" />\n            <X size={14} className=\"hover:text-foreground cursor-pointer transition-colors\" />\n          </div>\n        </div>\n\n        <div className=\"p-4 sm:p-6 space-y-6\">\n          {/* Title Area */}\n          <div className=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 sm:gap-0\">\n            <h1 className=\"text-foreground text-3xl font-medium tracking-tight break-all\">{data.id}</h1>\n            <div className=\"flex gap-2 w-full sm:w-auto\">\n              {/* Functional: Share Button */}\n              <button \n                onClick={handleShare}\n                className=\"flex-1 sm:flex-none justify-center py-2 gap-2 px-3 text-[12px] rounded-md flex items-center border border-border text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all active:scale-95\"\n              >\n                {isCopied ? <PiCheckBold size={16} className=\"text-primary\"/> : <PiShareFatLight size={16} />}\n                {isCopied ? \"Copied\" : \"Share\"}\n              </button>\n              <button \n                onClick={handleVisit}\n                className=\"flex-1 sm:flex-none justify-center flex items-center py-2 gap-1 px-3 text-[12px] rounded-md bg-primary hover:opacity-90 text-primary-foreground font-semibold transition-transform active:scale-95\"\n              >\n                <TbArrowUpRight size={16} /> Visit\n              </button>\n            </div>\n          </div>\n\n          {/* Info Grid */}\n          <div className=\"flex flex-col md:flex-row gap-6 sm:gap-8\">\n            <div className=\"relative w-full md:w-64 aspect-16/10 rounded-lg border border-border overflow-hidden bg-muted group cursor-crosshair\">\n              <img title='site preview' src=\"https://images.unsplash.com/photo-1614850523296-d8c1af93d400?q=80&w=400\" className=\"w-full h-full object-cover opacity-60 grayscale group-hover:grayscale-0 group-hover:opacity-100 transition-all duration-700\" />\n              <div className=\"absolute inset-0 p-4 flex flex-col justify-end sm:justify-center bg-linear-to-t from-black/60 to-transparent sm:from-transparent\">\n                 <div className={cn(\"w-8 h-1 mb-1 rounded-md transition-colors duration-500\", data.status === 'Ready' ? 'bg-primary' : 'bg-chart-1 animate-pulse')} />\n                 <div className=\"text-white font-bold text-sm leading-tight\">The Coordination<br/>Layer On All Chains</div>\n              </div>\n            </div>\n\n            <div className=\"flex-1 grid grid-cols-2 gap-x-4 gap-y-3 text-[11px] items-center\">\n              <span className=\"text-muted-foreground text-[12px] font-medium tracking-wider flex items-center gap-2\"><HiMiniCalendar/> Env</span>\n              <span className=\"text-foreground font-medium ml-2\">{data.environment}</span>\n              \n              <span className=\"text-muted-foreground text-[12px] font-medium tracking-wider flex items-center gap-2\"><TbCircleDashed/> Status</span>\n              <div className=\"flex items-center gap-2 ml-2\">\n                {/* Dynamic Status Display */}\n                <span className={cn(\n                  \"font-bold px-2 py-1 rounded-md flex items-center gap-2 border transition-colors duration-300\",\n                  data.status === 'Ready' \n                    ? \"text-primary bg-primary/10 border-primary/30\" \n                    : \"text-chart-1 bg-chart-1/10 border-chart-1/30\"\n                )}>\n                  <div className={cn(\"w-2 h-2 rounded-full animate-pulse\", data.status === 'Ready' ? \"bg-primary\" : \"bg-chart-1\")} />\n                  {data.status}\n                </span>\n              </div>\n\n              <span className=\"text-muted-foreground text-[12px] font-medium tracking-wider flex items-center gap-2\"><BsCalendar4Week/> Created</span>\n              <span className=\"text-muted-foreground ml-2 flex flex-wrap items-center gap-1\">\n                {data.createdTime} by \n                <span className=\"bg-muted px-2 py-1 border-border border rounded-md text-[9px] text-muted-foreground font-black text-nowrap uppercase\">{data.createdBy.name}</span>\n              </span>\n\n              <span className=\"text-muted-foreground text-[12px] font-medium tracking-wider flex items-center gap-2\"><LuClock/> Duration</span>\n              <div className=\"flex flex-wrap items-center gap-3 ml-2\">\n                {/* Dynamic Duration */}\n                <span className=\"text-muted-foreground font-mono\">{data.duration}</span>\n                <span className=\"bg-muted px-2 py-1 border-border border rounded-md text-[9px] text-muted-foreground font-black uppercase\">{data.lastActive}</span>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"border-t border-dashed border-border my-2\" />\n\n          {/* Domain & Source Section  */}\n          <div className=\"grid grid-cols-1 gap-4\">\n            <div className=\"flex items-start sm:items-center justify-between gap-2\">\n              <div className=\"flex flex-wrap items-center gap-2 text-[11px]\">\n                <span className=\"text-muted-foreground font-bold uppercase w-14 shrink-0\">Domains</span>\n                <div className=\"flex items-center gap-2 px-3 py-1 bg-muted/40 border border-border rounded-md text-foreground hover:bg-accent cursor-pointer transition-colors active:scale-95\" onClick={() => window.open(`https://${data.domains[0]}`, '_blank')}>\n                  <Globe size={12} /> {data.domains[0]} <span className=\"text-muted-foreground\">+33</span>\n                </div>\n                <div className=\"hidden sm:block px-3 py-1 bg-muted/40 border border-border rounded-md text-muted-foreground font-mono\">main-as..8z</div>\n              </div>\n              <CheckCircle2 size={16} className=\"text-primary shrink-0 mt-1 sm:mt-0\" />\n            </div>\n\n            <div className=\"flex items-start sm:items-center justify-between gap-2\">\n              <div className=\"flex flex-wrap items-center gap-2 text-[11px]\">\n                <span className=\"text-muted-foreground font-bold uppercase w-14 shrink-0\">Source</span>\n                <div className=\"flex items-center gap-2 px-2 py-1 bg-foreground border border-border rounded-md text-background font-bold text-[10px] cursor-pointer hover:opacity-80 active:scale-95\">\n                  <GitBranch size={12} /> {data.branch}\n                </div>\n                <div className=\"flex items-center gap-3 sm:ml-2 text-muted-foreground\">\n                  <span className=\"flex items-center gap-1\"><GitCommit size={14} /> 388</span>\n                  <span className=\"flex items-center gap-1\"><Box size={14} /> 90</span>\n                  <span className=\"font-black tracking-tighter cursor-help\">...</span>\n                </div>\n              </div>\n              <CheckCircle2 size={16} className=\"text-primary shrink-0 mt-1 sm:mt-0\" />\n            </div>\n          </div>\n\n          {/* Status List */}\n          <div className=\"space-y-3\">\n            <h3 className=\"text-foreground text-sm font-medium\">Deployment Status</h3>\n            {data.steps.map((step) => (\n              <div key={step.id} className=\"flex flex-col sm:flex-row sm:items-center justify-between p-3 sm:p-2 bg-muted/40 border border-border rounded-lg gap-3 sm:gap-0\">\n                \n                <div className=\"flex justify-between items-center w-full sm:w-auto\">\n                  <span className={cn(\"text-[12px] font-medium w-auto sm:w-32 shrink-0 transition-colors\", step.status === 'loading' ? 'text-foreground' : 'text-muted-foreground')}>{step.label}</span>\n                  <div className=\"flex sm:hidden items-center gap-3\">\n                      <span className=\"text-muted-foreground text-[11px]\">{step.duration}</span>\n                      <CheckCircle2 size={16} className={cn(step.status === 'error' ? 'text-destructive' : step.status === 'success' ? 'text-primary' : 'text-muted-foreground')} />\n                  </div>\n                </div>\n\n                <div className=\"flex-1 flex items-center gap-4 sm:ml-1 w-full sm:w-auto\">\n                  {step.metrics ? (\n                    <div className=\"flex gap-2 w-full sm:w-auto\">\n                      <MetricTag label=\"F\" value={step.metrics.files} />\n                      <MetricTag label=\"S\" value={step.metrics.size} />\n                    </div>\n                  ) : (\n                    <div className=\"flex items-center gap-3 w-full sm:w-auto\">\n                      <SegmentedProgress progress={step.progress} status={step.status} />\n                      {step.id === 'build' && (\n                        <button \n                          onClick={() => handleRunSummary(step.id)}\n                          className=\"text-[9px] font-bold text-muted-foreground border border-border px-2 py-1 rounded-md flex items-center gap-1 hover:bg-accent transition-colors ml-auto sm:ml-0 active:scale-95\"\n                        >\n                          <Play size={8} fill=\"currentColor\"/> <span className=\"hidden xs:inline\">RUN SUMMARY</span>\n                        </button>\n                      )}\n                    </div>\n                  )}\n                </div>\n                \n                <div className=\"hidden sm:flex items-center gap-3 shrink-0 ml-4\">\n                  <span className=\"text-muted-foreground text-[11px]\">{step.duration}</span>\n                  <CheckCircle2 size={16} className={cn(\n                    step.status === 'error' ? 'text-destructive' : \n                    step.status === 'success' ? 'text-primary' : \n                    step.status === 'loading' ? 'text-chart-1 animate-pulse' :\n                    'text-muted-foreground'\n                  )} />\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n\n        {/* Footer */}\n        <div className=\"bg-muted/40 px-4 sm:px-6 py-4 border-t border-border flex flex-col sm:flex-row justify-between items-center gap-4 relative\">\n          <div className=\"flex gap-4 text-muted-foreground w-full sm:w-auto justify-center sm:justify-start\">\n            <MoreVertical \n              size={16} \n              className={cn(\"hover:text-foreground cursor-pointer transition-colors active:scale-90\", activePopover === 'more' ? \"text-primary\" : \"\")} \n              onClick={() => setActivePopover(activePopover === 'more' ? null : 'more')}\n            />\n            <Terminal \n              size={15} \n              className={cn(\"hover:text-foreground cursor-pointer transition-colors active:scale-90\", activePopover === 'terminal' ? \"text-primary\" : \"\")} \n              onClick={() => setActivePopover(activePopover === 'terminal' ? null : 'terminal')}\n            />\n            <Search \n              size={15} \n              className={cn(\"hover:text-foreground cursor-pointer transition-colors active:scale-90\", activePopover === 'search' ? \"text-primary\" : \"\")} \n              onClick={() => setActivePopover(activePopover === 'search' ? null : 'search')}\n            />\n          </div>\n\n          <div className=\"flex flex-col sm:flex-row items-center gap-3 sm:gap-5 w-full sm:w-auto\">\n            {(data.steps.some(s => s.status === 'error' || s.status === 'warning')) && (\n              <div className=\"text-[9px] font-bold tracking-widest uppercase text-center sm:text-left flex items-center gap-1\">\n                <span className=\"text-destructive underline decoration-destructive/30\">1</span>\n                <span className=\"text-muted-foreground font-medium\"> Error, </span>\n                <span className=\"text-chart-1 underline decoration-chart-1/30\">3</span>\n                <span className=\"text-muted-foreground font-medium\"> Warnings detected</span>\n                <AlertCircle size={10} className=\"text-destructive animate-pulse ml-1\" />\n              </div>\n            )}\n            <button\n              onClick={handleInvestigate}\n              disabled={isInvestigating}\n              className={cn(\n                \"w-full sm:w-auto px-4 py-2 rounded-md border border-border text-background text-[11px] font-medium transition-all relative overflow-hidden active:scale-95 disabled:opacity-70\",\n                isInvestigating ? \"bg-muted-foreground\" : \"bg-foreground\"\n              )}\n            >\n              <AnimatePresence mode=\"wait\">\n                {isInvestigating ? (\n                  <motion.div key=\"inv\" initial={{ y: 20 }} animate={{ y: 0 }} exit={{ y: -20 }} className=\"flex items-center gap-2\">\n                    <RotateCw size={12} className=\"animate-spin\" /> Analyzing...\n                  </motion.div>\n                ) : (\n                  <motion.span key=\"invest\" initial={{ y: 20 }} animate={{ y: 0 }} exit={{ y: -20 }}>\n                    Investigate\n                  </motion.span>\n                )}\n              </AnimatePresence>\n              {isInvestigating && (\n                <motion.div \n                  initial={{ x: \"-100%\" }}\n                  animate={{ x: \"100%\" }}\n                  transition={{ repeat: Infinity, duration: 1, ease: \"linear\" }}\n                  className=\"absolute inset-0 bg-white/10\"\n                />\n              )}\n            </button>\n          </div>\n\n          {/* Global Popover Container (Mobile-Optimized) */}\n          <AnimatePresence>\n            {activePopover === 'more' && (\n              <motion.div \n                ref={moreRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: -10 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute bottom-full left-4 right-4 sm:left-6 sm:right-auto mb-2 w-auto sm:w-48 bg-card border border-border rounded-xl shadow-2xl p-1 z-50 overflow-hidden\"\n              >\n                {[\n                  { icon: Copy, label: \"Copy Deployment ID\", action: () => { /* no-op */ } },\n                  { icon: History, label: \"View History\", action: () => { /* no-op */ } },\n                  { icon: ShieldCheck, label: \"Security Audit\", action: () => { /* no-op */ } },\n                  { icon: Settings, label: \"Configure\", action: () => { /* no-op */ } },\n                ].map((item, i) => (\n                  <button \n                    key={i}\n                    onClick={() => { item.action(); setActivePopover(null); }}\n                    className=\"w-full flex items-center gap-2 px-3 py-2 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg transition-colors\"\n                  >\n                    <item.icon size={12} /> {item.label}\n                  </button>\n                ))}\n              </motion.div>\n            )}\n\n            {activePopover === 'terminal' && (\n              <motion.div \n                ref={terminalRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: -10 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute bottom-full left-4 right-4 sm:left-6 sm:right-auto mb-2 w-auto sm:w-80 bg-white dark:bg-[#0D0D0E] border border-border dark:border-white/10 rounded-xl shadow-2xl z-50 overflow-hidden transition-colors duration-300\"\n              >\n                <div className=\"flex items-center justify-between px-3 py-2 border-b border-border bg-muted/30 dark:bg-white/5\">\n                   <span className=\"text-[10px] font-bold text-muted-foreground uppercase tracking-widest flex items-center gap-2\">\n                     <Play size={10} className=\"text-primary fill-primary/20\"/> Live Build Logs\n                   </span>\n                   <div className=\"flex gap-1.5\">\n                     <div className=\"w-1.5 h-1.5 rounded-full bg-border dark:bg-white/10\" />\n                     <div className=\"w-1.5 h-1.5 rounded-full bg-border dark:bg-white/10\" />\n                     <div className=\"w-1.5 h-1.5 rounded-full bg-border dark:bg-white/10\" />\n                   </div>\n                </div>\n                <div className=\"p-3 font-mono text-[10px] space-y-2 h-44 overflow-y-auto no-scrollbar\">\n                   <p className=\"text-muted-foreground/60\">[{new Date().toLocaleTimeString()}] Fetching deployment metadata...</p>\n                   <p className=\"text-emerald-600 dark:text-emerald-400 font-medium\">✔ Repository initialized</p>\n                   <p className=\"text-emerald-600 dark:text-emerald-400 font-medium\">✔ Environment variables decrypted</p>\n                   <p className=\"text-muted-foreground/60\">[{new Date().toLocaleTimeString()}] Running build script...</p>\n                   <p className=\"text-foreground/80 italic animate-pulse\">Building optimized production bundle...</p>\n                   <p className=\"text-amber-600 dark:text-amber-400 bg-amber-500/10 px-1 rounded-sm\">Warning: Large assets detected in /public</p>\n                   <p className=\"text-emerald-600 dark:text-emerald-400 font-medium\">✔ Static components pre-rendered</p>\n                   <p className=\"text-primary font-bold\">Ready for deployment at axiom.xyz</p>\n                </div>\n              </motion.div>\n            )}\n\n            {activePopover === 'search' && (\n              <motion.div \n                ref={searchRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: -10 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute bottom-full left-4 right-4 sm:left-24 sm:right-auto mb-2 w-auto sm:w-64 bg-card border border-border rounded-xl shadow-2xl p-2 z-50 flex items-center gap-2\"\n              >\n                <div className=\"p-1 text-muted-foreground\"><Search size={14}/></div>\n                <input \n                  type=\"text\"\n                  autoFocus\n                  placeholder=\"Search deployment context...\"\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  className=\"bg-transparent border-none outline-none text-[11px] text-foreground placeholder:text-muted-foreground flex-1 pr-4\"\n                  onKeyDown={(e) => e.key === 'Enter' && (setActivePopover(null))}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-stack",
      "type": "registry:component",
      "title": "Dialog Stack",
      "description": "A layered modal component that stacks multiple dialogs with smooth spring-weighted transitions.",
      "dependencies": [
        "@hugeicons/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-stack.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, ArrowRight, ThumbsUp } from 'lucide-react';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nexport interface StackItem {\n  id: string;\n  title: string;\n  type: 'form' | 'steps';\n  steps?: { icon: any; text: string }[];\n  buttonText?: string;\n}\n\ninterface DialogStackProps {\n  stack: StackItem[];\n  trigger: {\n    label: string;\n    icon: any;\n  };\n}\n\nexport const DialogStack: React.FC<DialogStackProps> = ({ stack, trigger }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [activeIndex, setActiveIndex] = useState(0);\n\n  const handleNext = () => {\n    if (activeIndex < stack.length - 1) setActiveIndex((prev) => prev + 1);\n  };\n\n  const handleBack = () => {\n    if (activeIndex > 0) setActiveIndex((prev) => prev - 1);\n  };\n\n  const resetAndClose = () => {\n    setIsOpen(false);\n    setTimeout(() => setActiveIndex(0), 300);\n  };\n\n  const handleHeaderClose = () => {\n    if (activeIndex > 0) {\n      handleBack();\n    } else {\n      resetAndClose();\n    }\n  };\n\n  return (\n    <div className=\"relative flex min-h-[450px] flex-col items-center justify-center sm:min-h-[600px]\">\n      <motion.button\n        onClick={() => setIsOpen(true)}\n        whileTap={{ scale: 0.96 }}\n        transition={{ ease: [0.25, 0.1, 0.25, 1], duration: 0.3 }}\n        className={`flex transform items-center gap-2 rounded-full border-[1.7px] border-neutral-200 bg-white px-6 py-3 text-lg font-semibold text-neutral-950 shadow-lg transition-all hover:translate-y-[-10px] sm:gap-3 sm:px-8 sm:py-4 sm:text-[20px] dark:border-neutral-800 dark:bg-neutral-900 dark:text-white ${isOpen ? 'translate-y-[-10px]' : ''}`}\n      >\n        <div className=\"text-neutral-950 dark:text-neutral-100\">\n          <HugeiconsIcon\n            icon={trigger.icon}\n            size={\n              typeof window !== 'undefined' && window.innerWidth < 640 ? 24 : 28\n            }\n            strokeWidth={1.5}\n          />\n        </div>\n        <span>{trigger.label}</span>\n      </motion.button>\n\n      <AnimatePresence>\n        {isOpen && (\n          <motion.div\n            initial={{ opacity: 1, y: 100 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: 100 }}\n            transition={{ ease: 'easeOut', duration: 0.25 }}\n            className=\"absolute top-1/2 left-1/2 z-50 flex w-160 -translate-x-1/2 -translate-y-1/2 items-center justify-center p-4\"\n          >\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={resetAndClose}\n              className=\"absolute inset-0 backdrop-blur-[2px] \"\n            />\n\n            <div className=\"relative flex min-h-[450px] w-xs items-center justify-center sm:min-h-[500px] sm:w-sm\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {stack.map((item, index) => {\n                  const isUnder = index < activeIndex;\n                  if (index > activeIndex) return null;\n\n                  return (\n                    <motion.div\n                      key={item.id}\n                      initial={{ y: 50, opacity: 0, scale: 0.95 }}\n                      animate={{\n                        y: isUnder ? -35 : 0,\n                        scale: isUnder ? 0.94 : 1,\n                        opacity: isUnder ? 0.5 : 1,\n                        zIndex: index,\n                      }}\n                      exit={{ y: 50, opacity: 0, scale: 0.95 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 300,\n                        damping: 28,\n                      }}\n                      className=\"absolute inset-x-0 top-0 flex h-fit flex-col overflow-hidden rounded-[20px] border-[1.6px] border-neutral-200 bg-white shadow-2xl transition-colors sm:rounded-[24px] dark:border-neutral-800 dark:bg-neutral-900\"\n                    >\n                      {/* Header */}\n                      <div className=\"flex items-center justify-between border-b-[1.5px] border-neutral-200 bg-neutral-50 px-4 py-2.5 transition-colors sm:px-5 sm:py-3 dark:border-neutral-700 dark:bg-neutral-800\">\n                        <h3 className=\"text-base font-medium text-neutral-500 sm:text-lg dark:text-neutral-400\">\n                          {item.title}\n                        </h3>\n                        <button\n                          title=\"close\"\n                          onClick={handleHeaderClose}\n                          className=\"rounded-full p-1 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-700\"\n                        >\n                          <X\n                            size={20}\n                            className=\"text-neutral-500 sm:size-[22px] dark:text-neutral-400\"\n                          />\n                        </button>\n                      </div>\n\n                      {/* Content */}\n                      <div className=\"flex-1 px-5 pt-4 pb-8 sm:px-6 sm:pt-6 sm:pb-10\">\n                        {item.type === 'form' ? (\n                          <div className=\"space-y-4 sm:space-y-5\">\n                            <div className=\"space-y-2.5 sm:space-y-3\">\n                              <label className=\"block text-sm font-normal text-neutral-600 sm:text-base dark:text-neutral-400\">\n                                Email Address\n                              </label>\n                              <input\n                                title=\"email\"\n                                type=\"text\"\n                                className=\"w-full rounded-lg border-[1.5px] border-neutral-200 bg-white p-3 py-2.5 text-black transition-colors focus:outline-none sm:rounded-xl sm:p-4 sm:py-3 dark:border-neutral-700 dark:bg-neutral-800 dark:text-white\"\n                              />\n                              <p className=\"text-[12px] text-neutral-400 sm:text-[14px]\">\n                                Use commas to add multiple emails.\n                              </p>\n                            </div>\n\n                            <div className=\"space-y-2.5 sm:space-y-3\">\n                              <label className=\"block text-sm font-normal text-neutral-600 sm:text-base dark:text-neutral-400\">\n                                Message\n                              </label>\n                              <textarea\n                                title=\"message\"\n                                rows={\n                                  typeof window !== 'undefined' &&\n                                  window.innerWidth < 640\n                                    ? 3\n                                    : 4\n                                }\n                                className=\"w-full rounded-lg border-[1.5px] border-neutral-200 bg-white p-3 py-2.5 text-black transition-colors focus:outline-none sm:rounded-xl sm:p-4 sm:py-3 dark:border-neutral-700 dark:bg-neutral-800 dark:text-white\"\n                              />\n                            </div>\n\n                            <button className=\"flex w-full items-center justify-center gap-2 rounded-xl bg-black py-3.5 font-semibold text-white transition-colors active:scale-[0.98] sm:rounded-2xl sm:py-4 dark:bg-white dark:text-black\">\n                              {item.buttonText || 'Send'}{' '}\n                              <ArrowRight size={18} />\n                            </button>\n\n                            <button\n                              onClick={handleNext}\n                              className=\"w-full text-[14px] font-medium text-neutral-600 transition-colors hover:text-black sm:text-[15px] dark:text-neutral-500 dark:hover:text-white\"\n                            >\n                              How it works?\n                            </button>\n                          </div>\n                        ) : (\n                          <div className=\"space-y-6 sm:space-y-8\">\n                            <h4 className=\"text-xl font-bold text-neutral-900 sm:text-2xl dark:text-neutral-100\">\n                              3 easy steps\n                            </h4>\n\n                            <div className=\"space-y-5 sm:space-y-6\">\n                              {item.steps?.map((step, i) => (\n                                <div\n                                  key={i}\n                                  className=\"group flex items-start gap-3 sm:gap-4\"\n                                >\n                                  <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-neutral-200 bg-neutral-100 text-neutral-800 transition-colors sm:h-12 sm:w-12 sm:rounded-xl dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200\">\n                                    <HugeiconsIcon\n                                      icon={step.icon}\n                                      size={\n                                        typeof window !== 'undefined' &&\n                                        window.innerWidth < 640\n                                          ? 22\n                                          : 27\n                                      }\n                                      strokeWidth={1.5}\n                                    />\n                                  </div>\n                                  <p className=\"pt-0.5 text-sm leading-snug text-neutral-700 sm:pt-1 sm:text-base dark:text-neutral-300\">\n                                    {step.text}\n                                  </p>\n                                </div>\n                              ))}\n                            </div>\n\n                            <button\n                              onClick={handleBack}\n                              className=\"flex w-full items-center justify-center gap-3 rounded-xl bg-black py-3.5 text-base font-medium text-white transition-all active:scale-[0.98] sm:gap-4 sm:rounded-2xl sm:py-4 sm:text-lg dark:bg-white dark:text-black\"\n                            >\n                              Got It{' '}\n                              <ThumbsUp size={20} className=\"sm:size-[22px]\" />\n                            </button>\n                          </div>\n                        )}\n                      </div>\n                    </motion.div>\n                  );\n                })}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-stack-base",
      "type": "registry:component",
      "title": "Dialog Stack (base)",
      "description": "Theme-ready base variant of A layered modal component that stacks multiple dialogs with smooth spring-weighted transitions..",
      "dependencies": [
        "@hugeicons/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-stack.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, ArrowRight, ThumbsUp } from 'lucide-react';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nexport interface StackItem {\n  id: string;\n  title: string;\n  type: 'form' | 'steps';\n  steps?: { icon: any; text: string }[];\n  buttonText?: string;\n}\n\ninterface DialogStackProps {\n  stack: StackItem[];\n  trigger: {\n    label: string;\n    icon: any;\n  };\n}\n\nexport const DialogStack: React.FC<DialogStackProps> = ({ stack, trigger }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [activeIndex, setActiveIndex] = useState(0);\n\n  const handleNext = () => {\n    if (activeIndex < stack.length - 1) setActiveIndex((prev) => prev + 1);\n  };\n\n  const handleBack = () => {\n    if (activeIndex > 0) setActiveIndex((prev) => prev - 1);\n  };\n\n  const resetAndClose = () => {\n    setIsOpen(false);\n    setTimeout(() => setActiveIndex(0), 300);\n  };\n\n  const handleHeaderClose = () => {\n    if (activeIndex > 0) {\n      handleBack();\n    } else {\n      resetAndClose();\n    }\n  };\n\n  return (\n    <div className=\"theme-injected font-sans relative flex min-h-[450px] flex-col items-center justify-center sm:min-h-[600px]\">\n      <motion.button\n        onClick={() => setIsOpen(true)}\n        whileTap={{ scale: 0.96 }}\n        transition={{ ease: [0.25, 0.1, 0.25, 1], duration: 0.3 }}\n        className={`flex transform items-center gap-2 rounded-4xl border-2 border-border bg-card px-6 py-3 text-lg font-semibold text-foreground shadow-lg transition-all hover:-translate-y-2.5 sm:gap-3 sm:px-8 sm:py-4 sm:text-xl ${isOpen ? '-translate-y-2.5' : ''}`}\n      >\n        <div className=\"text-foreground\">\n          <HugeiconsIcon\n            icon={trigger.icon}\n            size={\n              typeof window !== 'undefined' && window.innerWidth < 640 ? 24 : 28\n            }\n            strokeWidth={1.5}\n          />\n        </div>\n        <span>{trigger.label}</span>\n      </motion.button>\n\n      <AnimatePresence>\n        {isOpen && (\n          <motion.div\n            initial={{ opacity: 1, y: 100 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: 100 }}\n            transition={{ ease: 'easeOut', duration: 0.25 }}\n            className=\"absolute top-1/2 left-1/2 z-50 flex w-160 -translate-x-1/2 -translate-y-1/2 items-center justify-center p-4\"\n          >\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={resetAndClose}\n              className=\"absolute inset-0 backdrop-blur-sm\"\n            />\n\n            <div className=\"relative flex min-h-[450px] w-xs items-center justify-center sm:min-h-[600px] sm:w-sm\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {stack.map((item, index) => {\n                  const isUnder = index < activeIndex;\n                  if (index > activeIndex) return null;\n\n                  return (\n                    <motion.div\n                      key={item.id}\n                      initial={{ y: 50, opacity: 0, scale: 0.95 }}\n                      animate={{\n                        y: isUnder ? -35 : 0,\n                        scale: isUnder ? 0.94 : 1,\n                        opacity: isUnder ? 0.5 : 1,\n                        zIndex: index,\n                      }}\n                      exit={{ y: 50, opacity: 0, scale: 0.95 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 300,\n                        damping: 28,\n                      }}\n                      className=\"absolute inset-x-0 top-0 flex h-fit flex-col overflow-hidden rounded-xl border-2 border-border bg-card shadow-2xl transition-colors sm:rounded-2xl\"\n                    >\n                      {/* Header */}\n                      <div className=\"flex items-center justify-between border-b border-border bg-muted/60 px-4 py-3 transition-colors sm:px-5 sm:py-3\">\n                        <h3 className=\"text-base font-medium text-muted-foreground sm:text-lg\">\n                          {item.title}\n                        </h3>\n                        <button\n                          title=\"close\"\n                          onClick={handleHeaderClose}\n                          className=\"rounded-full p-1 transition-colors hover:bg-muted\"\n                        >\n                          <X\n                            size={20}\n                            className=\"text-muted-foreground sm:size-5.5\"\n                          />\n                        </button>\n                      </div>\n\n                      {/* Content */}\n                      <div className=\"flex-1 px-5 pt-4 pb-8 sm:px-6 sm:pt-6 sm:pb-10\">\n                        {item.type === 'form' ? (\n                          <div className=\"space-y-4 sm:space-y-5\">\n                            <div className=\"space-y-3\">\n                              <label className=\"block text-sm font-normal text-muted-foreground sm:text-base\">\n                                Email Address\n                              </label>\n                              <input\n                                title=\"email\"\n                                type=\"text\"\n                                className=\"w-full rounded-lg border border-input bg-background px-3 py-3 text-foreground transition-colors focus:outline-none focus:border-ring sm:rounded-xl sm:px-4 sm:py-3\"\n                              />\n                              <p className=\"text-xs text-muted-foreground sm:text-sm\">\n                                Use commas to add multiple emails.\n                              </p>\n                            </div>\n\n                            <div className=\"space-y-3\">\n                              <label className=\"block text-sm font-normal text-muted-foreground sm:text-base\">\n                                Message\n                              </label>\n                              <textarea\n                                title=\"message\"\n                                rows={\n                                  typeof window !== 'undefined' &&\n                                  window.innerWidth < 640\n                                    ? 3\n                                    : 4\n                                }\n                                className=\"w-full rounded-lg border border-input bg-background px-3 py-3 text-foreground transition-colors focus:outline-none focus:border-ring sm:rounded-xl sm:px-4 sm:py-3\"\n                              />\n                            </div>\n\n                            <button className=\"flex w-full items-center justify-center gap-2 rounded-xl bg-primary py-3 font-semibold text-primary-foreground transition-colors active:scale-[0.98] sm:rounded-2xl sm:py-4 hover:bg-primary/90\">\n                              {item.buttonText || 'Send'}{' '}\n                              <ArrowRight size={18} />\n                            </button>\n\n                            <button\n                              onClick={handleNext}\n                              className=\"w-full text-sm font-medium text-muted-foreground transition-colors hover:text-foreground\"\n                            >\n                              How it works?\n                            </button>\n                          </div>\n                        ) : (\n                          <div className=\"space-y-6 sm:space-y-8\">\n                            <h4 className=\"text-xl font-bold text-foreground sm:text-2xl\">\n                              3 easy steps\n                            </h4>\n\n                            <div className=\"space-y-5 sm:space-y-6\">\n                              {item.steps?.map((step, i) => (\n                                <div\n                                  key={i}\n                                  className=\"group flex items-start gap-3 sm:gap-4\"\n                                >\n                                  <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-border bg-muted text-foreground transition-colors sm:h-12 sm:w-12 sm:rounded-xl\">\n                                    <HugeiconsIcon\n                                      icon={step.icon}\n                                      size={\n                                        typeof window !== 'undefined' &&\n                                        window.innerWidth < 640\n                                          ? 22\n                                          : 27\n                                      }\n                                      strokeWidth={1.5}\n                                    />\n                                  </div>\n                                  <p className=\"pt-1 text-sm leading-snug text-muted-foreground sm:text-base\">\n                                    {step.text}\n                                  </p>\n                                </div>\n                              ))}\n                            </div>\n\n                            <button\n                              onClick={handleBack}\n                              className=\"flex w-full items-center justify-center gap-3 rounded-xl bg-primary py-3 text-base font-medium text-primary-foreground transition-all active:scale-[0.98] sm:gap-4 sm:rounded-2xl sm:py-4 sm:text-lg hover:bg-primary/90\"\n                            >\n                              Got It{' '}\n                              <ThumbsUp size={20} className=\"sm:size-5.5\" />\n                            </button>\n                          </div>\n                        )}\n                      </div>\n                    </motion.div>\n                  );\n                })}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "discrete-tabs",
      "type": "registry:component",
      "title": "Discrete Tabs",
      "description": "Animated tabs component with smooth morphing transitions between active states.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/discrete-tabs.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useState, type FC, type ReactNode } from 'react';\n\nimport { AnimatePresence, motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\n\ninterface TabItem {\n  id: string;\n  icon: ReactNode;\n  label: string;\n  activeColor: string;\n}\n\ninterface DiscreteTabsProps {\n  tabs: TabItem[];\n  onTabChange?: (tabId: string) => void;\n  defaultTab?: string;\n}\n\nexport const DiscreteTabs: FC<DiscreteTabsProps> = ({\n  tabs,\n  onTabChange,\n  defaultTab,\n}) => {\n  const [activeTab, setActiveTab] = useState<string>(defaultTab || tabs[0]?.id);\n  const [shine, setShine] = useState<boolean>(false);\n\n  const handleTabClick = (tabId: string) => {\n    setActiveTab(tabId);\n    if (onTabChange) onTabChange(tabId);\n  };\n\n  useEffect(() => {\n    const timer = setTimeout(() => setShine(true), 600);\n    return () => {\n      clearTimeout(timer);\n      setShine(false);\n    };\n  }, [activeTab]);\n\n  return (\n    <motion.div\n      layout\n      className=\"mx-auto flex w-fit items-center justify-center gap-2 overflow-hidden rounded-full py-6\"\n    >\n      {tabs.map((tab) => {\n        const isActive = tab.id === activeTab;\n\n        return (\n          <button\n            key={tab.id}\n            onClick={() => handleTabClick(tab.id)}\n            onKeyDown={(e) => {\n              if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault();\n                handleTabClick(tab.id);\n              }\n            }}\n            className=\"relative focus:outline-none\"\n          >\n            <motion.div\n              layout=\"position\"\n              transition={{\n                type: 'spring',\n                stiffness: 210,\n                damping: 18,\n                mass: 1,\n              }}\n              className=\"flex h-16 w-full items-center justify-center\"\n            >\n              <div\n                className={cn(\n                  'flex h-12 cursor-pointer items-center justify-center rounded-full bg-zinc-50 border border-border px-3 dark:bg-zinc-900',\n                  isActive && '',\n                )}\n                tabIndex={0}\n              >\n                <motion.div\n                  className={cn(\n                    'flex items-center justify-center transition-colors duration-300',\n                    isActive\n                      ? tab.activeColor\n                      : 'text-neutral-800 dark:text-white',\n                  )}\n                >\n                  {tab.icon}\n                </motion.div>\n\n                <motion.span\n                  animate={{\n                    width: isActive ? 'auto' : 0,\n                    opacity: isActive ? 1 : 0,\n                    marginLeft: isActive ? 8 : 0,\n                  }}\n                  className={cn(\n                    'relative overflow-hidden text-xl font-semibold whitespace-nowrap transition-colors duration-300',\n                    isActive ? tab.activeColor : 'text-black dark:text-white',\n                  )}\n                >\n                  {tab.label}\n\n                  <AnimatePresence>\n                    {isActive && shine && (\n                      <motion.span\n                        initial={{ left: '-120%' }}\n                        animate={{ left: '120%' }}\n                        transition={{\n                          duration: 0.5,\n                          ease: 'linear',\n                        }}\n                        className=\"absolute top-0 bottom-0 w-16 bg-linear-to-r from-transparent via-white/80 to-transparent dark:from-transparent dark:via-neutral-900/80 dark:to-transparent\"\n                      />\n                    )}\n                  </AnimatePresence>\n                </motion.span>\n              </div>\n            </motion.div>\n          </button>\n        );\n      })}\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "discrete-tabs-base",
      "type": "registry:component",
      "title": "Discrete Tabs (base)",
      "description": "Theme-ready base variant of Animated tabs component with smooth morphing transitions between active states..",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/discrete-tabs.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useState, type FC, type ReactNode } from 'react';\n\nimport { AnimatePresence, motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\n\ninterface TabItem {\n  id: string;\n  icon: ReactNode;\n  label: string;\n  activeColor: string;\n}\n\ninterface DiscreteTabsProps {\n  tabs: TabItem[];\n  onTabChange?: (tabId: string) => void;\n  defaultTab?: string;\n}\n\nexport const DiscreteTabs: FC<DiscreteTabsProps> = ({\n  tabs,\n  onTabChange,\n  defaultTab,\n}) => {\n  const [activeTab, setActiveTab] = useState<string>(defaultTab || tabs[0]?.id);\n  const [shine, setShine] = useState<boolean>(false);\n\n  const handleTabClick = (tabId: string) => {\n    setActiveTab(tabId);\n    if (onTabChange) onTabChange(tabId);\n  };\n\n  useEffect(() => {\n    const timer = setTimeout(() => setShine(true), 600);\n    return () => {\n      clearTimeout(timer);\n      setShine(false);\n    };\n  }, [activeTab]);\n\n  return (\n    <motion.div\n      layout\n      className=\"theme-injected mx-auto flex w-fit items-center justify-center gap-2 overflow-hidden rounded-lg py-6\"\n    >\n      {tabs.map((tab) => {\n        const isActive = tab.id === activeTab;\n\n        return (\n          <button\n            key={tab.id}\n            onClick={() => handleTabClick(tab.id)}\n            onKeyDown={(e) => {\n              if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault();\n                handleTabClick(tab.id);\n              }\n            }}\n            className=\"relative focus:outline-none\"\n          >\n            <motion.div\n              layout=\"position\"\n              transition={{\n                type: 'spring',\n                stiffness: 210,\n                damping: 18,\n                mass: 1,\n              }}\n              className=\"flex h-16 w-full items-center justify-center\"\n            >\n              <div\n                className={cn(\n                  'bg-background border-border flex h-12 cursor-pointer items-center justify-center rounded-lg border px-3',\n                  isActive && '',\n                )}\n                tabIndex={0}\n              >\n                <motion.div\n                  className={cn(\n                    'flex items-center justify-center transition-colors duration-300',\n                    isActive ? tab.activeColor : 'text-foreground',\n                  )}\n                >\n                  {tab.icon}\n                </motion.div>\n\n                <motion.span\n                  animate={{\n                    width: isActive ? 'auto' : 0,\n                    opacity: isActive ? 1 : 0,\n                    marginLeft: isActive ? 8 : 0,\n                  }}\n                  className={cn(\n                    'relative overflow-hidden text-xl font-semibold whitespace-nowrap transition-colors duration-300',\n                    isActive ? tab.activeColor : 'text-foreground',\n                  )}\n                >\n                  {tab.label}\n\n                  <AnimatePresence>\n                    {isActive && shine && (\n                      <motion.span\n                        initial={{ left: '-120%' }}\n                        animate={{ left: '120%' }}\n                        transition={{\n                          duration: 0.5,\n                          ease: 'linear',\n                        }}\n                        className=\"via-background/50 absolute top-0 bottom-0 w-16 bg-linear-to-r from-transparent to-transparent\"\n                      />\n                    )}\n                  </AnimatePresence>\n                </motion.span>\n              </div>\n            </motion.div>\n          </button>\n        );\n      })}\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dock",
      "type": "registry:component",
      "title": "Dock Component",
      "description": "An animated dock component inspired by the macOS dock with smooth scaling and hover interactions. Icons respond dynamically to cursor movement, creating a lively and responsive feel.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/dock.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type FC } from 'react';\nimport { motion, type Transition } from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport {\n  AddSquareIcon,\n  MessageNotification01Icon,\n  NoteIcon,\n  Search01Icon,\n  Settings01Icon,\n} from '@hugeicons/core-free-icons';\nimport { cn } from '@/lib/utils';\n\nexport interface DockItem {\n  id: number;\n  Icon: React.ElementType;\n}\n\ninterface DockProps {\n  items?: DockItem[];\n}\n\nconst DEFAULT_DOCK_ITEMS: DockItem[] = [\n  { id: 1, Icon: () => <HugeiconsIcon icon={Search01Icon} size={26} /> },\n  { id: 2, Icon: () => <HugeiconsIcon icon={NoteIcon} size={26} /> },\n  { id: 3, Icon: () => <HugeiconsIcon icon={AddSquareIcon} size={26} /> },\n  {\n    id: 4,\n    Icon: () => <HugeiconsIcon icon={MessageNotification01Icon} size={26} />,\n  },\n  { id: 5, Icon: () => <HugeiconsIcon icon={Settings01Icon} size={26} /> },\n];\n\nconst dockSpring: Transition = {\n  stiffness: 300,\n  damping: 22,\n  mass: 0.7,\n};\n\nexport const Dock: FC<DockProps> = ({ items }) => {\n  const dockItems = items ?? DEFAULT_DOCK_ITEMS;\n  const [selected, setSelected] = useState<number | null>(null);\n  const [animateSelected, setAnimateSelected] = useState<number | null>(null);\n\n  const handleClick = (id: number) => {\n    setSelected(id);\n    setAnimateSelected(id);\n    setTimeout(() => {\n      setAnimateSelected(null);\n    }, 200);\n  };\n\n  return (\n    <div className=\"flex w-full flex-col items-center justify-center bg-white transition-colors duration-500 dark:bg-zinc-950\">\n      <motion.div\n        layout\n        transition={dockSpring}\n        className=\"relative flex items-end gap-3.5 rounded-3xl border-[1.5px] border-[#E5E5E9] bg-white px-3 py-2 shadow-sm dark:border-zinc-800 dark:bg-zinc-900\"\n      >\n        {dockItems.map((item) => (\n          <motion.div\n            className=\"relative\"\n            onClick={() => handleClick(item.id)}\n            style={{\n              transformOrigin: 'bottom',\n            }}\n            initial={{\n              scale: 1,\n            }}\n            whileHover={{\n              y: -4,\n            }}\n            animate={{\n              scale: animateSelected === item.id ? 1.3 : 1,\n              y: animateSelected === item.id ? -6 : 0,\n            }}\n            transition={{\n              type: 'spring',\n              stiffness: 550,\n              damping: 15,\n              mass: 1.1,\n            }}\n          >\n            <motion.div className=\"cursor-pointer rounded-md bg-[#F4F4FB] p-2 dark:bg-zinc-800\">\n              <item.Icon\n                className={cn(\n                  'size-4 text-zinc-500 transition-all duration-200 dark:text-zinc-600',\n                  selected === item.id && 'text-zinc-700',\n                )}\n              />\n            </motion.div>\n\n            <motion.div\n              className={cn(\n                'absolute mt-px flex w-full items-center justify-center opacity-0 transition-opacity duration-400 will-change-transform',\n                selected === item.id && 'opacity-100',\n              )}\n            >\n              <div\n                className=\"rounded-full bg-zinc-200 dark:bg-zinc-700\"\n                style={{\n                  width: 4,\n                  height: 4,\n                }}\n              />\n            </motion.div>\n          </motion.div>\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dock-base",
      "type": "registry:component",
      "title": "Dock Component (base)",
      "description": "Theme-ready base variant of An animated dock component inspired by the macOS dock with smooth scaling and hover interactions. Icons respond dynamically to cursor movement, creating a lively and responsive feel..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/dock.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type FC } from 'react';\nimport { motion, type Transition } from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport {\n  AddSquareIcon,\n  MessageNotification01Icon,\n  NoteIcon,\n  Search01Icon,\n  Settings01Icon,\n} from '@hugeicons/core-free-icons';\nimport { cn } from '@/lib/utils';\n\nexport interface DockItem {\n  id: number;\n  Icon: React.ElementType;\n}\n\ninterface DockProps {\n  items?: DockItem[];\n}\n\nconst DEFAULT_DOCK_ITEMS: DockItem[] = [\n  { id: 1, Icon: () => <HugeiconsIcon icon={Search01Icon} size={26} /> },\n  { id: 2, Icon: () => <HugeiconsIcon icon={NoteIcon} size={26} /> },\n  { id: 3, Icon: () => <HugeiconsIcon icon={AddSquareIcon} size={26} /> },\n  {\n    id: 4,\n    Icon: () => <HugeiconsIcon icon={MessageNotification01Icon} size={26} />,\n  },\n  { id: 5, Icon: () => <HugeiconsIcon icon={Settings01Icon} size={26} /> },\n];\n\nconst dockSpring: Transition = {\n  stiffness: 300,\n  damping: 22,\n  mass: 0.7,\n};\n\nexport const Dock: FC<DockProps> = ({ items }) => {\n  const dockItems = items ?? DEFAULT_DOCK_ITEMS;\n  const [selected, setSelected] = useState<number | null>(null);\n  const [animateSelected, setAnimateSelected] = useState<number | null>(null);\n\n  const handleClick = (id: number) => {\n    setSelected(id);\n    setAnimateSelected(id);\n    setTimeout(() => {\n      setAnimateSelected(null);\n    }, 200);\n  };\n\n  return (\n    <div className=\"theme-injected flex w-full flex-col items-center justify-center bg-transparent font-sans transition-colors duration-500\">\n      <motion.div\n        layout\n        transition={dockSpring}\n        className=\"relative flex items-end gap-3.5 rounded-3xl border border-border bg-card px-3 py-2 shadow-sm\"\n      >\n        {dockItems.map((item) => (\n          <motion.div\n            className=\"relative\"\n            onClick={() => handleClick(item.id)}\n            style={{\n              transformOrigin: 'bottom',\n            }}\n            initial={{\n              scale: 1,\n            }}\n            whileHover={{\n              y: -4,\n            }}\n            animate={{\n              scale: animateSelected === item.id ? 1.3 : 1,\n              y: animateSelected === item.id ? -6 : 0,\n            }}\n            transition={{\n              type: 'spring',\n              stiffness: 550,\n              damping: 15,\n              mass: 1.1,\n            }}\n          >\n            <motion.div className=\"cursor-pointer rounded-md bg-muted p-2 transition-colors hover:bg-background\">\n              <item.Icon\n                className={cn(\n                  'size-4 text-muted-foreground transition-all duration-200',\n                  selected === item.id && 'text-foreground',\n                )}\n              />\n            </motion.div>\n\n            <motion.div\n              className={cn(\n                'absolute mt-px flex w-full items-center justify-center opacity-0 transition-opacity duration-400 will-change-transform',\n                selected === item.id && 'opacity-100',\n              )}\n            >\n              <div\n                className=\"rounded-full bg-primary\"\n                style={{\n                  width: 4,\n                  height: 4,\n                }}\n              />\n            </motion.div>\n          </motion.div>\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "draw-signature",
      "type": "registry:component",
      "title": "Draw Signature",
      "description": "A premium interactive signature component that captures fluid strokes with a custom pen cursor and step-based workflow.",
      "dependencies": [
        "lucide-react",
        "motion",
        "next-themes",
        "react-icons",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/draw-signature.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { X } from 'lucide-react';\nimport { FaPen } from 'react-icons/fa6';\nimport { MdDraw } from 'react-icons/md';\nimport { FaCheckCircle, FaRedo } from 'react-icons/fa';\nimport { useTheme } from 'next-themes';\nimport useMeasure from 'react-use-measure';\nimport { cn } from '@/lib/utils';\n\ninterface DrawSignatureComponentProps {\n  startLabel?: string;\n  finishLabel?: string;\n  doneLabel?: string;\n  defaultStep?: 'idle' | 'drawing' | 'done';\n  onFinish?: (canvas: HTMLCanvasElement | null) => void;\n  onClear?: () => void;\n  onStepChange?: (step: 'idle' | 'drawing' | 'done') => void;\n}\n\nexport const DrawSignatureComponent: React.FC<DrawSignatureComponentProps> = ({\n  startLabel = 'Start Signing',\n  finishLabel = 'Finish Signing',\n  doneLabel = 'Signing Done',\n  defaultStep = 'idle',\n  onFinish,\n  onClear,\n  onStepChange,\n}) => {\n  const [step, setStep] = useState<'idle' | 'drawing' | 'done'>(defaultStep);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const [isDrawing, setIsDrawing] = useState(false);\n  const [savedSignature, setSavedSignature] = useState<string | null>(null);\n  const { resolvedTheme } = useTheme();\n  const [mounted, setMounted] = useState(false);\n\n  useEffect(() => {\n    // eslint-disable-next-line react-hooks/set-state-in-effect\n    setMounted(true);\n  }, []);\n\n  useEffect(() => {\n    onStepChange?.(step);\n  }, [step, onStepChange]);\n\n  useEffect(() => {\n    if (step === 'drawing' && canvasRef.current) {\n      const canvas = canvasRef.current;\n      const ctx = canvas.getContext('2d');\n      if (!ctx) return;\n\n      ctx.strokeStyle = resolvedTheme === 'dark' ? '#ffffff' : '#000000';\n      ctx.lineWidth = 3;\n      ctx.lineCap = 'round';\n      ctx.lineJoin = 'round';\n\n      if (savedSignature) {\n        const img = new Image();\n        img.src = savedSignature;\n        img.onload = () => {\n          ctx.clearRect(0, 0, canvas.width, canvas.height);\n          ctx.drawImage(img, 0, 0);\n        };\n      }\n    }\n  }, [step, resolvedTheme, savedSignature]);\n\n  if (!mounted) return null;\n\n  const startDrawing = (e: React.MouseEvent | React.TouchEvent) => {\n    setIsDrawing(true);\n    draw(e);\n  };\n\n  const stopDrawing = () => {\n    setIsDrawing(false);\n    const ctx = canvasRef.current?.getContext('2d');\n    ctx?.beginPath();\n  };\n\n  const draw = (e: React.MouseEvent | React.TouchEvent) => {\n    if (!isDrawing || !canvasRef.current) return;\n    const canvas = canvasRef.current;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) return;\n\n    const rect = canvas.getBoundingClientRect();\n    const x = ('touches' in e ? e.touches[0].clientX : e.clientX) - rect.left;\n    const y = ('touches' in e ? e.touches[0].clientY : e.clientY) - rect.top;\n\n    ctx.lineTo(x, y);\n    ctx.stroke();\n    ctx.beginPath();\n    ctx.moveTo(x, y);\n  };\n\n  const clearCanvas = () => {\n    const canvas = canvasRef.current;\n    const ctx = canvas?.getContext('2d');\n    if (canvas && ctx) {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n    }\n\n    setSavedSignature(null);\n    onClear?.();\n  };\n\n  const finishSigning = () => {\n    if (canvasRef.current) {\n      const dataUrl = canvasRef.current.toDataURL();\n      setSavedSignature(dataUrl);\n    }\n\n    setStep('done');\n    onFinish?.(canvasRef.current);\n  };\n\n  const penColor = resolvedTheme === 'dark' ? 'white' : 'black';\n\n  return (\n    <MotionConfig\n      transition={{\n        type: 'spring',\n        bounce: 0.15,\n        duration: 0.7,\n      }}\n    >\n      <motion.div\n        animate={{\n          width: bounds.width > 0 ? bounds.width : 'auto',\n          height: bounds.height > 0 ? bounds.height : 'auto',\n        }}\n        className={cn(\n          'relative z-10 flex items-center justify-center overflow-hidden border-4 border-dashed border-transparent transition-colors duration-400 ease-out',\n          step === 'drawing' &&\n          'border-4 border-dashed border-neutral-300 dark:border-neutral-700',\n        )}\n        style={{\n          borderRadius: 32,\n        }}\n      >\n        <div ref={ref} className=\"i flex shrink-0 p-1\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {step === 'idle' && (\n              <motion.button\n                key=\"start\"\n                // exit={{ opacity: 0, transition: { duration: 0 } }}\n                layoutId=\"container-button\"\n                onClick={() => setStep('drawing')}\n                className=\"flex items-center gap-2 rounded-full bg-neutral-100 px-8 py-5 text-lg font-bold text-neutral-900 hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-100 dark:hover:bg-neutral-700\"\n              >\n                <motion.div layoutId=\"container-button-icon\">\n                  <MdDraw size={24} />\n                </motion.div>\n                <motion.span layoutId=\"container-button-text\">\n                  {startLabel}\n                </motion.span>\n              </motion.button>\n            )}\n\n            {step === 'drawing' && (\n              <motion.div\n                key=\"pad\"\n                exit={{\n                  opacity: 0,\n                  y: '-30%',\n                  x: '-10%',\n                }}\n                className=\"w-[320px] max-w-[320px] rounded-[34px] bg-white p-6 pb-4 will-change-transform dark:bg-neutral-900\"\n              >\n                <div className=\"mb-6 flex items-center justify-between\">\n                  <button\n                    onClick={clearCanvas}\n                    className=\"text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300\"\n                  >\n                    <FaRedo size={22} />\n                  </button>\n\n                  <span className=\"text-lg font-bold text-neutral-500 dark:text-neutral-400\">\n                    Sign\n                  </span>\n\n                  <button\n                    onClick={() => setStep('idle')}\n                    className=\"flex h-7 w-7 items-center justify-center rounded-full bg-neutral-400 text-white hover:bg-neutral-500 dark:bg-neutral-700 dark:hover:bg-neutral-600\"\n                  >\n                    <X size={20} />\n                  </button>\n                </div>\n\n                <canvas\n                  ref={canvasRef}\n                  width={290}\n                  height={200}\n                  onMouseDown={startDrawing}\n                  onMouseMove={draw}\n                  onMouseUp={stopDrawing}\n                  onMouseLeave={stopDrawing}\n                  onTouchStart={startDrawing}\n                  onTouchMove={draw}\n                  onTouchEnd={stopDrawing}\n                  className=\"h-[200px] w-full touch-none\"\n                  style={{\n                    cursor: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34\" height=\"34\" viewBox=\"0 0 24 24\" fill=\"${penColor}\" stroke=\"${resolvedTheme === 'dark' ? 'black' : 'white'}\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"/><path d=\"m15 5 4 4\"/></svg>') 0 22, auto`,\n                  }}\n                />\n\n                <motion.button\n                  layoutId=\"container-button\"\n                  exit={{ opacity: 0, transition: { duration: 0 } }}\n                  whileTap={{ scale: 0.97 }}\n                  onClick={finishSigning}\n                  className=\"mt-4 flex w-full items-center justify-center gap-2 rounded-full bg-neutral-100 px-6 py-4 text-lg font-bold text-neutral-900 hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-100 dark:hover:bg-neutral-700\"\n                >\n                  <motion.div layoutId=\"container-button-icon\">\n                    <MdDraw size={28} />\n                  </motion.div>\n                  <motion.span layoutId=\"container-button-text\">\n                    {finishLabel}\n                  </motion.span>\n                </motion.button>\n              </motion.div>\n            )}\n\n            {step === 'done' && (\n              <motion.div\n                key=\"done\"\n                exit={{ opacity: 0, transition: { duration: 0 } }}\n                className=\"flex items-center gap-3\"\n                layoutId=\"container-button\"\n              >\n                <motion.div className=\"flex items-center gap-2 rounded-full bg-neutral-900 px-6 py-4 text-lg font-bold text-white dark:bg-neutral-100 dark:text-neutral-900\">\n                  <motion.div layoutId=\"container-button-icon\">\n                    <FaCheckCircle size={24} />\n                  </motion.div>\n                  <motion.span layoutId=\"container-button-text\">\n                    {doneLabel}\n                  </motion.span>\n                </motion.div>\n\n                <motion.button\n                  // initial={{ scale: 0.5, opacity: 0 }}\n                  // animate={{ scale: 1, opacity: 1 }}\n                  onClick={() => setStep('drawing')}\n                  className=\"rounded-full bg-neutral-100 p-4 text-neutral-900 hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-100 dark:hover:bg-neutral-700\"\n                >\n                  <FaPen size={22} />\n                </motion.button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "draw-signature-base",
      "type": "registry:component",
      "title": "Draw Signature (base)",
      "description": "Theme-ready base variant of A premium interactive signature component that captures fluid strokes with a custom pen cursor and step-based workflow..",
      "dependencies": [
        "lucide-react",
        "motion",
        "next-themes",
        "react-icons",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/draw-signature.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { X } from 'lucide-react';\nimport { FaPen } from 'react-icons/fa6';\nimport { MdDraw } from 'react-icons/md';\nimport { FaCheckCircle, FaRedo } from 'react-icons/fa';\nimport { useTheme } from 'next-themes';\nimport useMeasure from 'react-use-measure';\nimport { cn } from '@/lib/utils';\n\ninterface DrawSignatureComponentProps {\n  startLabel?: string;\n  finishLabel?: string;\n  doneLabel?: string;\n  defaultStep?: 'idle' | 'drawing' | 'done';\n  onFinish?: (canvas: HTMLCanvasElement | null) => void;\n  onClear?: () => void;\n  onStepChange?: (step: 'idle' | 'drawing' | 'done') => void;\n}\n\nexport const DrawSignatureComponent: React.FC<DrawSignatureComponentProps> = ({\n  startLabel = 'Start Signing',\n  finishLabel = 'Finish Signing',\n  doneLabel = 'Signing Done',\n  defaultStep = 'idle',\n  onFinish,\n  onClear,\n  onStepChange,\n}) => {\n  const [step, setStep] = useState<'idle' | 'drawing' | 'done'>(defaultStep);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const [isDrawing, setIsDrawing] = useState(false);\n  const [savedSignature, setSavedSignature] = useState<string | null>(null);\n  const { resolvedTheme } = useTheme();\n  const [mounted, setMounted] = useState(false);\n\n  useEffect(() => {\n    // eslint-disable-next-line react-hooks/set-state-in-effect\n    setMounted(true);\n  }, []);\n  useEffect(() => {\n    onStepChange?.(step);\n  }, [step, onStepChange]);\n\n  useEffect(() => {\n    if (step === 'drawing' && canvasRef.current) {\n      const canvas = canvasRef.current;\n      const ctx = canvas.getContext('2d');\n      if (!ctx) return;\n\n      ctx.strokeStyle = resolvedTheme === 'dark' ? '#ffffff' : '#000000';\n      ctx.lineWidth = 3;\n      ctx.lineCap = 'round';\n      ctx.lineJoin = 'round';\n\n      if (savedSignature) {\n        const img = new Image();\n        img.src = savedSignature;\n        img.onload = () => {\n          ctx.clearRect(0, 0, canvas.width, canvas.height);\n          ctx.drawImage(img, 0, 0);\n        };\n      }\n    }\n  }, [step, resolvedTheme, savedSignature]);\n\n  if (!mounted) return null;\n\n  const startDrawing = (e: React.MouseEvent | React.TouchEvent) => {\n    setIsDrawing(true);\n    draw(e);\n  };\n\n  const stopDrawing = () => {\n    setIsDrawing(false);\n    const ctx = canvasRef.current?.getContext('2d');\n    ctx?.beginPath();\n  };\n\n  const draw = (e: React.MouseEvent | React.TouchEvent) => {\n    if (!isDrawing || !canvasRef.current) return;\n    const canvas = canvasRef.current;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) return;\n\n    const rect = canvas.getBoundingClientRect();\n    const x = ('touches' in e ? e.touches[0].clientX : e.clientX) - rect.left;\n    const y = ('touches' in e ? e.touches[0].clientY : e.clientY) - rect.top;\n\n    ctx.lineTo(x, y);\n    ctx.stroke();\n    ctx.beginPath();\n    ctx.moveTo(x, y);\n  };\n\n  const clearCanvas = () => {\n    const canvas = canvasRef.current;\n    const ctx = canvas?.getContext('2d');\n    if (canvas && ctx) {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n    }\n\n    setSavedSignature(null);\n    onClear?.();\n  };\n\n  const finishSigning = () => {\n    if (canvasRef.current) {\n      const dataUrl = canvasRef.current.toDataURL();\n      setSavedSignature(dataUrl);\n    }\n\n    setStep('done');\n    onFinish?.(canvasRef.current);\n  };\n\n  const penColor = resolvedTheme === 'dark' ? 'white' : 'black';\n\n  return (\n    <MotionConfig\n      transition={{\n        type: 'spring',\n        bounce: 0.15,\n        duration: 0.7,\n      }}\n    >\n      <motion.div\n        animate={{\n          width: bounds.width > 0 ? bounds.width : 'auto',\n          height: bounds.height > 0 ? bounds.height : 'auto',\n        }}\n        className={cn(\n          'theme-injected relative z-10 flex items-center justify-center overflow-hidden rounded-lg border-2 border-dashed border-transparent transition-colors duration-400 ease-out',\n          step === 'drawing' && 'border-border',\n        )}\n      >\n        <div ref={ref} className=\"flex shrink-0 p-1\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {step === 'idle' && (\n              <motion.button\n                key=\"start\"\n                layoutId=\"container-button\"\n                onClick={() => setStep('drawing')}\n                className=\"bg-muted text-foreground hover:bg-accent hover:text-accent-foreground flex items-center gap-2 rounded-lg px-8 py-5 text-lg font-bold\"\n              >\n                <motion.div layoutId=\"container-button-icon\">\n                  <MdDraw size={24} />\n                </motion.div>\n                <motion.span layoutId=\"container-button-text\">\n                  {startLabel}\n                </motion.span>\n              </motion.button>\n            )}\n\n            {step === 'drawing' && (\n              <motion.div\n                key=\"pad\"\n                exit={{ opacity: 0, y: '-30%', x: '-10%' }}\n                className=\"bg-background w-[320px] max-w-[320px] rounded-lg p-6 pb-4 will-change-transform\"\n              >\n                <div className=\"mb-6 flex items-center justify-between\">\n                  <button\n                    onClick={clearCanvas}\n                    className=\"text-muted-foreground hover:text-foreground\"\n                  >\n                    <FaRedo size={22} />\n                  </button>\n\n                  <span className=\"text-muted-foreground text-lg font-bold\">\n                    Sign\n                  </span>\n\n                  <button\n                    onClick={() => setStep('idle')}\n                    className=\"bg-muted text-foreground hover:bg-accent flex h-7 w-7 items-center justify-center rounded-lg\"\n                  >\n                    <X size={20} />\n                  </button>\n                </div>\n\n                <canvas\n                  ref={canvasRef}\n                  width={290}\n                  height={200}\n                  onMouseDown={startDrawing}\n                  onMouseMove={draw}\n                  onMouseUp={stopDrawing}\n                  onMouseLeave={stopDrawing}\n                  onTouchStart={startDrawing}\n                  onTouchMove={draw}\n                  onTouchEnd={stopDrawing}\n                  className=\"h-[200px] w-full touch-none\"\n                  style={{\n                    cursor: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34\" height=\"34\" viewBox=\"0 0 24 24\" fill=\"${penColor}\" stroke=\"${resolvedTheme === 'dark' ? 'black' : 'white'}\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"/><path d=\"m15 5 4 4\"/></svg>') 0 22, auto`,\n                  }}\n                />\n\n                <motion.button\n                  layoutId=\"container-button\"\n                  exit={{ opacity: 0, transition: { duration: 0 } }}\n                  whileTap={{ scale: 0.97 }}\n                  onClick={finishSigning}\n                  className=\"bg-muted text-foreground hover:bg-accent hover:text-accent-foreground mt-4 flex w-full items-center justify-center gap-2 rounded-lg px-6 py-4 text-lg font-bold\"\n                >\n                  <motion.div layoutId=\"container-button-icon\">\n                    <MdDraw size={28} />\n                  </motion.div>\n                  <motion.span layoutId=\"container-button-text\">\n                    {finishLabel}\n                  </motion.span>\n                </motion.button>\n              </motion.div>\n            )}\n\n            {step === 'done' && (\n              <motion.div\n                key=\"done\"\n                exit={{ opacity: 0, transition: { duration: 0 } }}\n                className=\"flex items-center gap-3\"\n                layoutId=\"container-button\"\n              >\n                <motion.div className=\"bg-primary text-primary-foreground flex items-center gap-2 rounded-lg px-6 py-4 text-lg font-bold\">\n                  <motion.div layoutId=\"container-button-icon\">\n                    <FaCheckCircle size={24} />\n                  </motion.div>\n                  <motion.span layoutId=\"container-button-text\">\n                    {doneLabel}\n                  </motion.span>\n                </motion.div>\n\n                <motion.button\n                  onClick={() => setStep('drawing')}\n                  className=\"bg-muted text-foreground hover:bg-accent hover:text-accent-foreground rounded-lg p-4\"\n                >\n                  <FaPen size={22} />\n                </motion.button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-disclosure",
      "type": "registry:component",
      "title": "Dropdown Disclosure",
      "description": "A sophisticated dropdown menu with shared layout transitions and spring-driven animations for item selection.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useRef, useEffect, type ReactNode, type FC } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { ChevronDown, X, ArrowUpRight, Check } from 'lucide-react';\nimport { FaMeta } from 'react-icons/fa6';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { GoogleGeminiIcon, QwenFreeIcons } from '@hugeicons/core-free-icons';\nimport { SiClaude } from 'react-icons/si';\nimport useMeasure from 'react-use-measure';\n\n\nexport interface Model {\n  id: string;\n  name: string;\n  description: string;\n  icon: ReactNode;\n  hasUpgrade?: boolean;\n}\n\ninterface DropdownDisclosureProps {\n  models?: Model[];\n  isOpen: boolean;\n  onOpenChange: (isOpen: boolean) => void;\n  selectedModelId: string;\n  onModelChange: (model: Model) => void;\n}\n\nconst DEFAULT_MODELS: Model[] = [\n  {\n    id: 'sonnet',\n    name: 'Sonnet 3.5',\n    description: 'Advanced reasoning',\n    icon: <SiClaude size={22} />,\n    hasUpgrade: true,\n  },\n  {\n    id: 'llama',\n    name: 'Llama 3.2',\n    description: 'Versatile problem-solving',\n    icon: <FaMeta size={22} />,\n  },\n  {\n    id: 'qwen',\n    name: 'Qwen 2.5',\n    description: 'Rapid text generation',\n    icon: (\n      <HugeiconsIcon\n        icon={QwenFreeIcons}\n        size={24}\n        color=\"#7c7b82\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 'gemma',\n    name: 'Gemma 2',\n    description: 'Efficient task completion',\n    icon: (\n      <HugeiconsIcon\n        icon={GoogleGeminiIcon}\n        size={24}\n        color=\"#7c7b82\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n];\n\nexport const DropdownDisclosure: FC<DropdownDisclosureProps> = ({\n  models = DEFAULT_MODELS,\n  isOpen,\n  onOpenChange,\n  selectedModelId,\n  onModelChange,\n}) => {\n  const modelList = models;\n  const selected =\n    modelList.find((m) => m.id === selectedModelId) || modelList[0];\n\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    function handleClickOutside(e: MouseEvent) {\n      if (!containerRef.current) return;\n      if (!containerRef.current.contains(e.target as Node)) {\n        onOpenChange(false);\n      }\n    }\n\n    if (isOpen) {\n      document.addEventListener('mousedown', handleClickOutside);\n    }\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [isOpen, onOpenChange]);\n\n  return (\n    <MotionConfig\n      transition={{\n        type: 'spring',\n        stiffness: 200,\n        damping: 25,\n        mass: 1,\n      }}\n    >\n      <motion.div\n        ref={containerRef}\n        animate={{\n          width: bounds.width > 0 ? bounds.width : 'auto',\n          height: bounds.height > 0 ? bounds.height : 'auto',\n        }}\n        className=\"relative flex items-center justify-center overflow-hidden border border-black/10 bg-neutral-50 dark:border-white/20 dark:bg-neutral-900\"\n        style={{\n          borderRadius: 16,\n        }}\n      >\n        <div ref={ref} className=\"shrink-0 p-2\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <motion.button\n                key=\"trigger\"\n                onClick={() => onOpenChange(true)}\n                exit={{\n                  opacity: 0,\n                  transition: {\n                    duration: 0,\n                  },\n                }}\n                className=\"flex cursor-pointer items-center gap-2\"\n              >\n                <motion.div\n                  layoutId={`model-icon-${selected.id}`}\n                  //   layout=\"position\"\n                  className=\"flex shrink-0 items-center justify-center rounded-full border border-neutral-200 text-neutral-500 dark:border-neutral-700 dark:text-neutral-400\"\n                  style={{\n                    width: 40,\n                    height: 40,\n                  }}\n                >\n                  {selected.icon}\n                </motion.div>\n\n                <motion.span\n                  layoutId={`model-name-${selected.id}`}\n                  layout=\"position\"\n                  className=\"truncate text-base font-bold text-neutral-600 dark:text-neutral-200\"\n                >\n                  {selected.name}\n                </motion.span>\n\n                <motion.div\n                  //   layoutId=\"toggle\"\n                  className=\"ml-4\"\n                >\n                  <ChevronDown className=\"h-6 w-6 text-neutral-800 dark:text-neutral-400\" />\n                </motion.div>\n              </motion.button>\n            ) : (\n              <motion.div\n                key=\"expanded\"\n                exit={{ opacity: 0, transition: { duration: 0.2 } }}\n                className=\"flex flex-col items-center gap-3 pt-2\"\n              >\n                <motion.div\n                  role=\"dialog\"\n                  aria-label=\"Model Selection Menu\"\n                  className=\"\"\n                >\n                  <div className=\"mb-3 flex items-center justify-between px-2\">\n                    <motion.span\n                      layoutId=\"title\"\n                      className=\"text-lg font-bold text-neutral-500 dark:text-neutral-500\"\n                    >\n                      Choose Model\n                    </motion.span>\n\n                    <button\n                      onClick={() => onOpenChange(false)}\n                      aria-label=\"Close menu\"\n                      title=\"Close menu\"\n                      className=\"flex h-7 w-7 items-center justify-center rounded-full bg-neutral-400 transition-opacity hover:opacity-80 dark:bg-neutral-700\"\n                    >\n                      <X className=\"h-5 w-5 text-white\" />\n                    </button>\n                  </div>\n\n                  <div className=\"flex flex-col gap-1\">\n                    {modelList.map((m) => {\n                      const active = m.id === selected.id;\n\n                      return (\n                        <motion.button\n                          key={m.id}\n                          onClick={() => {\n                            onModelChange?.(m);\n                            onOpenChange?.(false);\n                          }}\n                          whileTap={{ scale: 0.97 }}\n                          className=\"group flex items-center justify-between gap-4 rounded-xl px-2 py-3 transition-colors hover:bg-neutral-100 sm:px-3 dark:hover:bg-neutral-800\"\n                        >\n                          <div className=\"flex min-w-0 flex-1 items-center gap-3 sm:gap-5\">\n                            <motion.div\n                              layoutId={`model-icon-${m.id}`}\n                              layout=\"position\"\n                              className=\"flex shrink-0 items-center justify-center rounded-full border border-neutral-200 text-neutral-500 dark:border-neutral-700 dark:text-neutral-400\"\n                              style={{\n                                width: 40,\n                                height: 40,\n                              }}\n                            >\n                              {m.icon}\n                            </motion.div>\n\n                            <div className=\"min-w-0 flex-1 text-left\">\n                              <motion.div\n                                layoutId={`model-name-${m.id}`}\n                                layout=\"position\"\n                                className=\"truncate text-base font-bold text-neutral-600 dark:text-neutral-200\"\n                                style={{\n                                  fontSize: 14,\n                                }}\n                              >\n                                {m.name}\n                              </motion.div>\n                              <div className=\"truncate text-sm text-neutral-400 dark:text-neutral-500\">\n                                {m.description}\n                              </div>\n                            </div>\n                          </div>\n\n                          <div className=\"flex items-center gap-3\">\n                            {m.hasUpgrade && (\n                              <div className=\"flex items-center overflow-hidden rounded-lg border border-neutral-300 text-sm font-semibold text-neutral-800 dark:border-neutral-600 dark:text-neutral-300\">\n                                <div className=\"border-r border-neutral-300 px-2 py-1 dark:border-neutral-600\">\n                                  <ArrowUpRight className=\"h-4 w-4 rounded-sm border-2 border-neutral-800 dark:border-neutral-300\" />\n                                </div>\n                                <div className=\"px-2 py-1\">Upgrade</div>\n                              </div>\n                            )}\n\n                            {!m.hasUpgrade && (\n                              <div\n                                className={`flex h-6 w-6 items-center justify-center rounded-full border-2 transition-all ${\n                                  active\n                                    ? 'border-neutral-900 bg-neutral-900 dark:border-neutral-100 dark:bg-neutral-100'\n                                    : 'border-neutral-200 dark:border-neutral-700'\n                                }`}\n                              >\n                                <AnimatePresence\n                                  mode=\"popLayout\"\n                                  initial={false}\n                                >\n                                  {active && (\n                                    <motion.div\n                                      initial={{ scale: 0, opacity: 0 }}\n                                      animate={{ scale: 1, opacity: 1 }}\n                                      exit={{ scale: 0, opacity: 0 }}\n                                      transition={{ duration: 0.2 }}\n                                    >\n                                      <Check className=\"h-4 w-4 stroke-[3.5px] text-white dark:text-neutral-900\" />\n                                    </motion.div>\n                                  )}\n                                </AnimatePresence>\n                              </div>\n                            )}\n                          </div>\n                        </motion.button>\n                      );\n                    })}\n                  </div>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-disclosure-base",
      "type": "registry:component",
      "title": "Dropdown Disclosure (base)",
      "description": "Theme-ready base variant of A sophisticated dropdown menu with shared layout transitions and spring-driven animations for item selection..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useRef, useEffect, type ReactNode, type FC } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { ChevronDown, X, ArrowUpRight, Check } from 'lucide-react';\nimport { FaMeta } from 'react-icons/fa6';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { GoogleGeminiIcon, QwenFreeIcons } from '@hugeicons/core-free-icons';\nimport { SiClaude } from 'react-icons/si';\nimport useMeasure from 'react-use-measure';\n\nexport interface Model {\n  id: string;\n  name: string;\n  description: string;\n  icon: ReactNode;\n  hasUpgrade?: boolean;\n}\n\ninterface DropdownDisclosureProps {\n  models?: Model[];\n  isOpen: boolean;\n  onOpenChange: (isOpen: boolean) => void;\n  selectedModelId: string;\n  onModelChange: (model: Model) => void;\n}\n\nconst DEFAULT_MODELS: Model[] = [\n  {\n    id: 'sonnet',\n    name: 'Sonnet 3.5',\n    description: 'Advanced reasoning',\n    icon: <SiClaude size={22} />,\n    hasUpgrade: true,\n  },\n  {\n    id: 'llama',\n    name: 'Llama 3.2',\n    description: 'Versatile problem-solving',\n    icon: <FaMeta size={22} />,\n  },\n  {\n    id: 'qwen',\n    name: 'Qwen 2.5',\n    description: 'Rapid text generation',\n    icon: (\n      <HugeiconsIcon\n        icon={QwenFreeIcons}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 'gemma',\n    name: 'Gemma 2',\n    description: 'Efficient task completion',\n    icon: (\n      <HugeiconsIcon\n        icon={GoogleGeminiIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n];\n\nexport const DropdownDisclosure: FC<DropdownDisclosureProps> = ({\n  models = DEFAULT_MODELS,\n  isOpen,\n  onOpenChange,\n  selectedModelId,\n  onModelChange,\n}) => {\n  const modelList = models;\n  const selected =\n    modelList.find((m) => m.id === selectedModelId) || modelList[0];\n\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    function handleClickOutside(e: MouseEvent) {\n      if (!containerRef.current) return;\n      if (!containerRef.current.contains(e.target as Node)) {\n        onOpenChange(false);\n      }\n    }\n\n    if (isOpen) {\n      document.addEventListener('mousedown', handleClickOutside);\n    }\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [isOpen, onOpenChange]);\n\n  return (\n    <MotionConfig\n      transition={{\n        type: 'spring',\n        stiffness: 200,\n        damping: 25,\n        mass: 1,\n      }}\n    >\n      <motion.div\n        ref={containerRef}\n        animate={{\n          width: bounds.width > 0 ? bounds.width : 'auto',\n          height: bounds.height > 0 ? bounds.height : 'auto',\n        }}\n        className=\"theme-injected relative flex items-center justify-center overflow-hidden border border-border bg-card font-sans\"\n        style={{\n          borderRadius: 16,\n        }}\n      >\n        <div ref={ref} className=\"shrink-0 p-2\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <motion.button\n                key=\"trigger\"\n                onClick={() => onOpenChange(true)}\n                exit={{\n                  opacity: 0,\n                  transition: {\n                    duration: 0,\n                  },\n                }}\n                className=\"flex cursor-pointer items-center gap-2\"\n              >\n                <motion.div\n                  layoutId={`model-icon-${selected.id}`}\n                  //   layout=\"position\"\n                  className=\"flex shrink-0 items-center justify-center rounded-4xl border border-border bg-background text-muted-foreground\"\n                  style={{\n                    width: 40,\n                    height: 40,\n                  }}\n                >\n                  {selected.icon}\n                </motion.div>\n\n                <motion.span\n                  layoutId={`model-name-${selected.id}`}\n                  layout=\"position\"\n                  className=\"truncate text-base font-bold text-foreground\"\n                >\n                  {selected.name}\n                </motion.span>\n\n                <motion.div\n                  //   layoutId=\"toggle\"\n                  className=\"ml-4\"\n                >\n                  <ChevronDown className=\"h-6 w-6 text-muted-foreground\" />\n                </motion.div>\n              </motion.button>\n            ) : (\n              <motion.div\n                key=\"expanded\"\n                exit={{ opacity: 0, transition: { duration: 0.2 } }}\n                className=\"flex flex-col items-center gap-3 pt-2\"\n              >\n                <motion.div\n                  role=\"dialog\"\n                  aria-label=\"Model Selection Menu\"\n                  className=\"\"\n                >\n                  <div className=\"mb-3 flex items-center justify-between px-2\">\n                    <motion.span\n                      layoutId=\"title\"\n                      className=\"text-lg font-bold text-foreground\"\n                    >\n                      Choose Model\n                    </motion.span>\n\n                    <button\n                      onClick={() => onOpenChange(false)}\n                      aria-label=\"Close menu\"\n                      title=\"Close menu\"\n                      className=\"flex h-7 w-7 items-center justify-center rounded-4xl bg-input text-muted-foreground transition-colors hover:text-foreground\"\n                    >\n                      <X className=\"h-5 w-5 text-current\" />\n                    </button>\n                  </div>\n\n                  <div className=\"flex flex-col gap-1\">\n                    {modelList.map((m) => {\n                      const active = m.id === selected.id;\n\n                      return (\n                        <motion.button\n                          key={m.id}\n                          onClick={() => {\n                            onModelChange?.(m);\n                            onOpenChange?.(false);\n                          }}\n                          whileTap={{ scale: 0.97 }}\n                          className=\"group flex items-center justify-between gap-4 rounded-xl px-2 py-3 transition-colors hover:bg-muted sm:px-3\"\n                        >\n                          <div className=\"flex min-w-0 flex-1 items-center gap-3 sm:gap-5\">\n                            <motion.div\n                              layoutId={`model-icon-${m.id}`}\n                              layout=\"position\"\n                              className=\"flex shrink-0 items-center justify-center rounded-4xl border border-border bg-background text-muted-foreground\"\n                              style={{\n                                width: 40,\n                                height: 40,\n                              }}\n                            >\n                              {m.icon}\n                            </motion.div>\n\n                            <div className=\"min-w-0 flex-1 text-left\">\n                              <motion.div\n                                layoutId={`model-name-${m.id}`}\n                                layout=\"position\"\n                                className=\"truncate text-base font-bold text-foreground\"\n                                style={{\n                                  fontSize: 14,\n                                }}\n                              >\n                                {m.name}\n                              </motion.div>\n                              <div className=\"truncate text-sm text-muted-foreground\">\n                                {m.description}\n                              </div>\n                            </div>\n                          </div>\n\n                          <div className=\"flex items-center gap-3\">\n                            {m.hasUpgrade && (\n                              <div className=\"flex items-center overflow-hidden rounded-lg border border-border text-sm font-semibold text-foreground\">\n                                <div className=\"border-r border-border px-2 py-1\">\n                                  <ArrowUpRight className=\"h-4 w-4 rounded-sm border-2 border-foreground\" />\n                                </div>\n                                <div className=\"px-2 py-1\">Upgrade</div>\n                              </div>\n                            )}\n\n                            {!m.hasUpgrade && (\n                              <div\n                                className={`flex h-6 w-6 items-center justify-center rounded-4xl border-2 transition-all ${\n                                  active\n                                    ? 'border-primary bg-primary'\n                                    : 'border-border'\n                                }`}\n                              >\n                                <AnimatePresence\n                                  mode=\"popLayout\"\n                                  initial={false}\n                                >\n                                  {active && (\n                                    <motion.div\n                                      initial={{ scale: 0, opacity: 0 }}\n                                      animate={{ scale: 1, opacity: 1 }}\n                                      exit={{ scale: 0, opacity: 0 }}\n                                      transition={{ duration: 0.2 }}\n                                    >\n                                      <Check className=\"h-4 w-4 stroke-[3.5px] text-primary-foreground\" />\n                                    </motion.div>\n                                  )}\n                                </AnimatePresence>\n                              </div>\n                            )}\n                          </div>\n                        </motion.button>\n                      );\n                    })}\n                  </div>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "edit-badge",
      "type": "registry:component",
      "title": "Edit Badge",
      "description": "A premium interactive badge component with an inline editor for real-time text, icon, and color customization.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/edit-badge.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { X, Loader2 } from 'lucide-react';\nimport { BiSolidPencil } from 'react-icons/bi';\nimport { FaCircleCheck } from 'react-icons/fa6';\nimport { BsDashCircleFill } from 'react-icons/bs';\nimport { MdTimelapse } from 'react-icons/md';\nimport { LuTimer } from 'react-icons/lu';\nimport { HiPencil } from 'react-icons/hi2';\n\n/*  TYPES  */\n\nexport type BadgeIconType = 'loader' | 'clock' | 'timer' | 'check' | 'minus';\n\nexport interface BadgeConfig {\n  text: string;\n  icon: BadgeIconType;\n  color: string;\n}\n\nconst DEFAULT_BADGE: BadgeConfig = {\n  text: 'Completed',\n  icon: 'check',\n  color: 'green',\n};\n\nconst COLORS = [\n  {\n    id: 'blue',\n    bg: 'bg-[#016FFE]',\n    badgeBg: 'bg-[#E7F1FD] dark:bg-[#016FFE]/10',\n    text: 'text-[#016FFE] dark:text-[#3890FF]',\n  },\n  {\n    id: 'yellow',\n    bg: 'bg-[#2EBE52]',\n    badgeBg: 'bg-[#E0FAE7] dark:bg-[#2EBE52]/10',\n    text: 'text-[#2EBE52] dark:text-[#4ADE80]',\n  },\n  {\n    id: 'orange',\n    bg: 'bg-[#FFC405]',\n    badgeBg: 'bg-[#FBF1DE] dark:bg-[#FFC405]/10',\n    text: 'text-[#FFC405] dark:text-[#FFD700]',\n  },\n  {\n    id: 'green',\n    bg: 'bg-emerald-500',\n    badgeBg: 'bg-emerald-50 dark:bg-emerald-500/10',\n    text: 'text-emerald-600 dark:text-emerald-400',\n  },\n  {\n    id: 'red',\n    bg: 'bg-[#FE322B]',\n    badgeBg: 'bg-[#FCECEC] dark:bg-[#FE322B]/10',\n    text: 'text-[#FE322B] dark:text-[#FF5C57]',\n  },\n];\n\nconst ICONS: Record<BadgeIconType, React.ElementType> = {\n  loader: Loader2,\n  clock: MdTimelapse,\n  timer: LuTimer,\n  check: FaCircleCheck,\n  minus: BsDashCircleFill,\n};\n\nconst springTransition: Transition = {\n  type: 'spring',\n  stiffness: 400,\n  damping: 40,\n  mass: 1,\n};\n\ntype EditBadgeProps = {\n  initialBadge?: BadgeConfig;\n  onChange?: (badge: BadgeConfig) => void;\n};\n\nexport function EditBadge({\n  initialBadge = DEFAULT_BADGE,\n  onChange,\n}: EditBadgeProps) {\n  const [badge, setBadge] = useState<BadgeConfig>(initialBadge);\n  const [tempBadge, setTempBadge] = useState<BadgeConfig>(initialBadge);\n  const [isEditing, setIsEditing] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const currentColor = COLORS.find((c) => c.id === badge.color) || COLORS[0];\n  const IconComponent = ICONS[badge.icon];\n\n  const handleOpen = () => {\n    setTempBadge(badge);\n    setIsEditing(true);\n  };\n\n  const handleUpdate = () => {\n    setBadge(tempBadge);\n    onChange?.(tempBadge);\n    setIsEditing(false);\n  };\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target as Node)\n      ) {\n        setIsEditing(false);\n      }\n    };\n    if (isEditing) document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [isEditing]);\n\n  return (\n    <div\n      className=\"relative flex h-[400px] items-center justify-center\"\n      ref={containerRef}\n    >\n      <MotionConfig transition={springTransition}>\n        <AnimatePresence>\n          {!isEditing ? (\n            <div key=\"close\" className=\"flex items-center gap-3\">\n              <motion.div\n                layoutId=\"eb-container\"\n                style={{\n                  borderRadius: 32,\n                }}\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n              >\n                <motion.div\n                  layoutId=\"badge-container\"\n                  className={`flex items-center gap-2.5 rounded-full px-3 py-2.5 sm:px-4 sm:py-3.5 ${currentColor.badgeBg} ${currentColor.text} cursor-default font-bold select-none`}\n                >\n                  <motion.div layoutId={badge.icon}>\n                    <IconComponent\n                      className={`h-5 w-5 sm:h-[22px] sm:w-[22px] ${badge.icon === 'loader' ? 'animate-spin' : ''}`}\n                    />\n                  </motion.div>\n                  <motion.span\n                    layoutId=\"badge-text\"\n                    className=\"text-base tracking-tight capitalize sm:text-[18px]\"\n                  >\n                    {badge.text}\n                  </motion.span>\n                </motion.div>\n              </motion.div>\n              <motion.button\n                onClick={handleOpen}\n                whileHover={{ scale: 1.1 }}\n                whileTap={{ scale: 0.9 }}\n                className=\"flex h-[42px] w-[42px] items-center justify-center rounded-full border border-[#edecf0] bg-[#F6F5FA] text-[#28272A] sm:h-[50px] sm:w-[50px] dark:border-neutral-800 dark:bg-neutral-800 dark:text-neutral-100\"\n              >\n                <BiSolidPencil className=\"h-6 w-6 fill-current\" />\n              </motion.button>\n            </div>\n          ) : (\n            <motion.div\n              key=\"open\"\n              layoutId=\"eb-container\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0, transition: { duration: 0 } }}\n              // transition={bounceTransition}\n              style={{\n                borderRadius: 24,\n              }}\n              className=\"absolute top-1/2 left-1/2 z-10 w-xs origin-left -translate-x-1/2 -translate-y-1/2 rounded-3xl border-2 border-[#EBEBF0] bg-[#fefefe] p-5 sm:w-[350px] sm:p-6 dark:border-neutral-800 dark:bg-neutral-900\"\n            >\n              <div className=\"mb-5 flex items-center justify-between\">\n                <h2 className=\"text-lg font-bold text-[#87868F] dark:text-neutral-400\">\n                  Edit Badge\n                </h2>\n                <button\n                  title=\"close\"\n                  onClick={() => setIsEditing(false)}\n                  className=\"flex h-7 w-7 items-center justify-center rounded-full bg-[#B0B0B7] text-[#fefefe] dark:bg-neutral-700 dark:text-neutral-300\"\n                >\n                  <X className=\"h-4 w-4\" strokeWidth={4} />\n                </button>\n              </div>\n\n              <div className=\"mb-6\">\n                <motion.input\n                  layoutId=\"badge-text\"\n                  type=\"text\"\n                  autoFocus\n                  value={tempBadge.text}\n                  onChange={(e) =>\n                    setTempBadge((prev) => ({ ...prev, text: e.target.value }))\n                  }\n                  className=\"w-full rounded-xl border-2 border-[#EBEBF0] bg-white px-3 py-2.5 text-base font-bold text-neutral-900 capitalize transition-colors focus:border-neutral-900 focus:outline-none sm:px-4 sm:py-3 sm:text-lg dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-100 dark:focus:border-neutral-100\"\n                  placeholder=\"Enter status...\"\n                />\n              </div>\n\n              <div className=\"mb-6 grid grid-cols-5 gap-2\">\n                {(Object.keys(ICONS) as BadgeIconType[]).map((iconKey) => {\n                  const Icon = ICONS[iconKey];\n                  const isSelected = tempBadge.icon === iconKey;\n                  return (\n                    <motion.button\n                      key={iconKey}\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={() =>\n                        setTempBadge((prev) => ({ ...prev, icon: iconKey }))\n                      }\n                      className={`relative flex aspect-square items-center justify-center rounded-xl border-2 border-[#EBEBF0] text-[#AFAEB7] transition-all dark:border-neutral-800 dark:text-neutral-300`}\n                    >\n                      {isSelected && (\n                        <motion.div\n                          layout\n                          layoutId=\"selected-pill\"\n                          className=\"absolute inset-0 rounded-xl border-2 border-[#28272A] bg-transparent dark:border-neutral-100\"\n                          transition={{\n                            type: 'spring',\n                            stiffness: 400,\n                            damping: 30,\n                          }}\n                        />\n                      )}\n\n                      <motion.div\n                        layoutId={isSelected ? `${badge.icon}` : undefined}\n                      >\n                        <Icon className=\"h-5 w-5 sm:h-6 sm:w-6\" />\n                      </motion.div>\n                    </motion.button>\n                  );\n                })}\n              </div>\n\n              <div className=\"mb-8 flex items-center justify-between gap-3 rounded-xl border-2 border-[#EBEBF0] p-2.5 dark:border-neutral-800\">\n                {COLORS.map((color) => {\n                  const isSelected = tempBadge.color === color.id;\n                  return (\n                    <motion.button\n                      key={color.id}\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={() =>\n                        setTempBadge((prev) => ({ ...prev, color: color.id }))\n                      }\n                      className={`h-8 w-8 rounded-full ${color.bg} relative flex items-center justify-center shadow-sm`}\n                    >\n                      {isSelected && (\n                        <HiPencil className=\"h-4 w-4 text-[#fefefe]\" />\n                      )}\n                    </motion.button>\n                  );\n                })}\n              </div>\n\n              <motion.button\n                whileHover={{ scale: 1.02 }}\n                whileTap={{ scale: 0.97 }}\n                onClick={handleUpdate}\n                className=\"w-full rounded-full bg-[#28272A] py-3.5 text-base font-bold text-[#FBFBFD] shadow-lg sm:py-4 sm:text-lg dark:bg-neutral-100 dark:text-neutral-900\"\n              >\n                Update Badge\n              </motion.button>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "edit-badge-base",
      "type": "registry:component",
      "title": "Edit Badge (base)",
      "description": "Theme-ready base variant of A premium interactive badge component with an inline editor for real-time text, icon, and color customization..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/edit-badge.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { X, Loader2 } from 'lucide-react';\nimport { BiSolidPencil } from 'react-icons/bi';\nimport { FaCircleCheck } from 'react-icons/fa6';\nimport { BsDashCircleFill } from 'react-icons/bs';\nimport { MdTimelapse } from 'react-icons/md';\nimport { LuTimer } from 'react-icons/lu';\nimport { HiPencil } from 'react-icons/hi2';\n\n/*  TYPES  */\n\nexport type BadgeIconType = 'loader' | 'clock' | 'timer' | 'check' | 'minus';\n\nexport interface BadgeConfig {\n  text: string;\n  icon: BadgeIconType;\n  color: string;\n}\n\nconst DEFAULT_BADGE: BadgeConfig = {\n  text: 'Completed',\n  icon: 'check',\n  color: 'green',\n};\n\nconst COLORS = [\n  {\n    id: 'blue',\n    bg: 'bg-[#016FFE]',\n    badgeBg: 'bg-[#E7F1FD] dark:bg-[#016FFE]/10',\n    text: 'text-[#016FFE] dark:text-[#3890FF]',\n  },\n  {\n    id: 'yellow',\n    bg: 'bg-[#2EBE52]',\n    badgeBg: 'bg-[#E0FAE7] dark:bg-[#2EBE52]/10',\n    text: 'text-[#2EBE52] dark:text-[#4ADE80]',\n  },\n  {\n    id: 'orange',\n    bg: 'bg-[#FFC405]',\n    badgeBg: 'bg-[#FBF1DE] dark:bg-[#FFC405]/10',\n    text: 'text-[#FFC405] dark:text-[#FFD700]',\n  },\n  {\n    id: 'green',\n    bg: 'bg-emerald-500',\n    badgeBg: 'bg-emerald-50 dark:bg-emerald-500/10',\n    text: 'text-emerald-600 dark:text-emerald-400',\n  },\n  {\n    id: 'red',\n    bg: 'bg-[#FE322B]',\n    badgeBg: 'bg-[#FCECEC] dark:bg-[#FE322B]/10',\n    text: 'text-[#FE322B] dark:text-[#FF5C57]',\n  },\n];\n\nconst ICONS: Record<BadgeIconType, React.ElementType> = {\n  loader: Loader2,\n  clock: MdTimelapse,\n  timer: LuTimer,\n  check: FaCircleCheck,\n  minus: BsDashCircleFill,\n};\n\nconst springTransition: Transition = {\n  type: 'spring',\n  stiffness: 400,\n  damping: 40,\n  mass: 1,\n};\n\ntype EditBadgeProps = {\n  initialBadge?: BadgeConfig;\n  onChange?: (badge: BadgeConfig) => void;\n};\n\nexport function EditBadge({\n  initialBadge = DEFAULT_BADGE,\n  onChange,\n}: EditBadgeProps) {\n  const [badge, setBadge] = useState<BadgeConfig>(initialBadge);\n  const [tempBadge, setTempBadge] = useState<BadgeConfig>(initialBadge);\n  const [isEditing, setIsEditing] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const currentColor = COLORS.find((c) => c.id === badge.color) || COLORS[0];\n  const IconComponent = ICONS[badge.icon];\n\n  const handleOpen = () => {\n    setTempBadge(badge);\n    setIsEditing(true);\n  };\n\n  const handleUpdate = () => {\n    setBadge(tempBadge);\n    onChange?.(tempBadge);\n    setIsEditing(false);\n  };\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target as Node)\n      ) {\n        setIsEditing(false);\n      }\n    };\n    if (isEditing) document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [isEditing]);\n\n  return (\n    <div\n      className=\"theme-injected relative flex h-100 items-center justify-center font-sans\"\n      ref={containerRef}\n    >\n      <MotionConfig transition={springTransition}>\n        <AnimatePresence>\n          {!isEditing ? (\n            <div key=\"close\" className=\"flex items-center gap-3\">\n              <motion.div\n                layoutId=\"eb-container\"\n                style={{\n                  borderRadius: 'calc(var(--radius) * 4)',\n                }}\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n              >\n                <motion.div\n                  layoutId=\"badge-container\"\n                  className={`flex items-center gap-2.5 rounded-full px-3 py-2.5 font-sans sm:px-4 sm:py-3.5 ${currentColor.badgeBg} ${currentColor.text} cursor-default font-bold select-none`}\n                >\n                  <motion.div layoutId={badge.icon}>\n                    <IconComponent\n                      className={`h-5 w-5 sm:h-5.5 sm:w-5.5 ${badge.icon === 'loader' ? 'animate-spin' : ''}`}\n                    />\n                  </motion.div>\n                  <motion.span\n                    layoutId=\"badge-text\"\n                    className=\"text-base font-sans tracking-tight capitalize sm:text-[18px]\"\n                  >\n                    {badge.text}\n                  </motion.span>\n                </motion.div>\n              </motion.div>\n              <motion.button\n                onClick={handleOpen}\n                whileHover={{ scale: 1.1 }}\n                whileTap={{ scale: 0.9 }}\n                className=\"flex h-[42px] w-[42px] items-center justify-center rounded-full border border-border bg-muted text-foreground sm:h-12.5 sm:w-12.5\"\n              >\n                <BiSolidPencil className=\"h-6 w-6 fill-current\" />\n              </motion.button>\n            </div>\n          ) : (\n            <motion.div\n              key=\"open\"\n              layoutId=\"eb-container\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0, transition: { duration: 0 } }}\n              // transition={bounceTransition}\n              style={{\n                borderRadius: 'calc(var(--radius) * 3)',\n              }}\n              className=\"absolute top-1/2 left-1/2 z-10 w-xs origin-left -translate-x-1/2 -translate-y-1/2 rounded-3xl border-2 border-border bg-card p-5 sm:w-87.5 sm:p-6\"\n            >\n              <div className=\"mb-5 flex items-center justify-between\">\n                <h2 className=\"text-lg font-sans font-bold text-muted-foreground\">\n                  Edit Badge\n                </h2>\n                <button\n                  title=\"close\"\n                  onClick={() => setIsEditing(false)}\n                  className=\"flex h-7 w-7 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n                >\n                  <X className=\"h-4 w-4\" strokeWidth={4} />\n                </button>\n              </div>\n\n              <div className=\"mb-6\">\n                <motion.input\n                  layoutId=\"badge-text\"\n                  type=\"text\"\n                  autoFocus\n                  value={tempBadge.text}\n                  onChange={(e) =>\n                    setTempBadge((prev) => ({ ...prev, text: e.target.value }))\n                  }\n                  className=\"w-full rounded-xl border-2 border-border bg-background px-3 py-2.5 text-base font-sans font-bold text-foreground capitalize transition-colors focus:border-ring focus:outline-none sm:px-4 sm:py-3 sm:text-lg\"\n                  placeholder=\"Enter status...\"\n                />\n              </div>\n\n              <div className=\"mb-6 grid grid-cols-5 gap-2\">\n                {(Object.keys(ICONS) as BadgeIconType[]).map((iconKey) => {\n                  const Icon = ICONS[iconKey];\n                  const isSelected = tempBadge.icon === iconKey;\n                  return (\n                    <motion.button\n                      key={iconKey}\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={() =>\n                        setTempBadge((prev) => ({ ...prev, icon: iconKey }))\n                      }\n                      className=\"relative flex aspect-square items-center justify-center rounded-xl border-2 border-border text-muted-foreground transition-all\"\n                    >\n                      {isSelected && (\n                        <motion.div\n                          layout\n                          layoutId=\"selected-pill\"\n                          className=\"absolute inset-0 rounded-xl border-2 border-foreground bg-transparent\"\n                          transition={{\n                            type: 'spring',\n                            stiffness: 400,\n                            damping: 30,\n                          }}\n                        />\n                      )}\n\n                      <motion.div\n                        layoutId={isSelected ? `${badge.icon}` : undefined}\n                      >\n                        <Icon className=\"h-5 w-5 sm:h-6 sm:w-6\" />\n                      </motion.div>\n                    </motion.button>\n                  );\n                })}\n              </div>\n\n              <div className=\"mb-8 flex items-center justify-between gap-3 rounded-xl border-2 border-border p-2.5\">\n                {COLORS.map((color) => {\n                  const isSelected = tempBadge.color === color.id;\n                  return (\n                    <motion.button\n                      key={color.id}\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={() =>\n                        setTempBadge((prev) => ({ ...prev, color: color.id }))\n                      }\n                      className={`relative flex h-8 w-8 items-center justify-center rounded-full ${color.bg} shadow-sm`}\n                    >\n                      {isSelected && (\n                        <HiPencil className=\"h-4 w-4 text-primary-foreground\" />\n                      )}\n                    </motion.button>\n                  );\n                })}\n              </div>\n\n              <motion.button\n                whileHover={{ scale: 1.02 }}\n                whileTap={{ scale: 0.97 }}\n                onClick={handleUpdate}\n                className=\"w-full rounded-full bg-primary py-3.5 text-base font-sans font-bold text-primary-foreground shadow-lg sm:py-4 sm:text-lg\"\n              >\n                Update Badge\n              </motion.button>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "edit-profile",
      "type": "registry:component",
      "title": "Edit Profile",
      "description": "Profile editing dialog with fields, validation, and save actions.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/edit-profile.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Pencil, Clock, ChevronDown } from 'lucide-react';\n\nexport interface ProfileData {\n    fullName: string;\n    email: string;\n    timezone: string;\n    workingHours: string;\n    title: string;\n    avatarUrl: string;\n    lastUpdated: string;\n}\n\ninterface EditProfileProps {\n    isOpen: boolean;\n    onClose: () => void;\n    initialData: ProfileData;\n    onSave: (data: ProfileData) => void;\n}\n\nexport const EditProfile: React.FC<EditProfileProps> = ({\n    isOpen,\n    onClose,\n    initialData,\n    onSave\n}) => {\n    const [formData, setFormData] = useState<ProfileData>(initialData);\n\n    useEffect(() => {\n        if (isOpen) {\n            requestAnimationFrame(() => setFormData(initialData));\n        }\n    }, [isOpen, initialData]);\n\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {\n        const { name, value } = e.target;\n        setFormData((prev) => ({ ...prev, [name]: value }));\n    };\n\n    return (\n        <AnimatePresence>\n            {isOpen && (\n                <div className=\"fixed inset-0 z-100 flex items-center justify-center p-4 overflow-y-auto\">\n                    {/* Backdrop Overlay */}\n                    <motion.div\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        onClick={onClose}\n                        className=\"fixed inset-0 backdrop-blur-[1px] bg-black/20 dark:bg-black/60\"\n                    />\n\n                    {/* Modal Container */}\n                    <div className=\"relative w-full max-w-180 z-101 my-auto pointer-events-none\">\n                        <motion.div\n                            initial={{ opacity: 0, scale: 0.9, y: 20 }}\n                            animate={{ opacity: 1, scale: 1, y: 0 }}\n                            exit={{ opacity: 0, scale: 0.9, y: 20 }}\n                            transition={{ type: \"spring\", damping: 20, stiffness: 300, mass: 0.8 }}\n                            className=\"pointer-events-auto w-full rounded-[24px] shadow-[0_8px_10px_rgb(0,0,0,0.04)] border overflow-hidden \n                                     bg-[#F5F5F7] border-[#f0f0f0] \n                                     dark:bg-[#1C1C1E] dark:border-[#2C2C2E]\"\n                        >\n                            {/* Header */}\n                            <div className=\"flex items-center justify-between px-6 py-4 md:px-8\">\n                                <h2 className=\"text-[18px] font-semibold text-[#010101] dark:text-white\">Edit your profile</h2>\n                                <button title='close' onClick={onClose} className=\"text-[#a0a0a0] hover:text-gray-400 transition-colors p-1\">\n                                    <X size={20} />\n                                </button>\n                            </div>\n\n                            {/* Body */}\n                            <div className=\"flex flex-col md:flex-row border-t-[1.6px] border-b-[1.6px] rounded-[18px] \n                                          border-[#EAE9F2] bg-white \n                                          dark:border-[#3A3A3C] dark:bg-[#2C2C2E]\">\n\n                                {/* Form Section */}\n                                <div className=\"flex-1 p-6 space-y-4\">\n                                    <div className=\"space-y-1.5\">\n                                        <label className=\"text-[14px] font-medium text-[#706f6f] dark:text-[#A1A1A6]\">Full name</label>\n                                        <input title='fullname'\n                                            name=\"fullName\"\n                                            value={formData.fullName}\n                                            onChange={handleChange}\n                                            className=\"w-full px-4 py-2.5 rounded-[14px] border-[1.5px] outline-none transition-all text-[15px] font-semibold\n                                                     bg-white border-[#DFDDE6] text-[#131313] focus:border-black\n                                                     dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-white dark:focus:border-blue-500\"\n                                        />\n                                    </div>\n\n                                    <div className=\"space-y-1.5\">\n                                        <label className=\"text-[14px] font-medium text-[#706f6f] dark:text-[#A1A1A6]\">Email</label>\n                                        <input title='email'\n                                            name=\"email\"\n                                            value={formData.email}\n                                            onChange={handleChange}\n                                            className=\"w-full px-4 py-2.5 rounded-[14px] border-[1.5px] outline-none font-semibold transition-all text-[15px]\n                                                     bg-white border-[#DFDDE6] text-[#131313] focus:border-black\n                                                     dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-white dark:focus:border-blue-500\"\n                                        />\n                                    </div>\n\n                                    <div className=\"flex flex-col sm:flex-row gap-4\">\n                                        <div className=\"flex-1 space-y-1.5\">\n                                            <label className=\"text-[14px] font-medium text-[#706f6f] dark:text-[#A1A1A6]\">Timezone</label>\n                                            <div className=\"relative\">\n                                                <select title='timezone'\n                                                    name=\"timezone\"\n                                                    value={formData.timezone}\n                                                    onChange={handleChange}\n                                                    className=\"w-full px-4 py-2.5 rounded-[14px] border appearance-none outline-none text-[15px] font-semibold\n                                                             bg-white border-[#DFDDE6] text-[#131313] focus:border-black\n                                                             dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-white dark:focus:border-blue-500\"\n                                                >\n                                                    <option>GMT-8</option>\n                                                    <option>GMT+5</option>\n                                                </select>\n                                                <ChevronDown size={20} className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-[#131313]/40 dark:text-gray-500\" />\n                                            </div>\n                                        </div>\n                                        <div className=\"flex-1 space-y-1.5\">\n                                            <label className=\"text-[14px] font-medium text-[#706f6f] dark:text-[#A1A1A6]\">Working hours</label>\n                                            <div className=\"relative\">\n                                                <input title='workingHours'\n                                                    name=\"workingHours\"\n                                                    value={formData.workingHours}\n                                                    onChange={handleChange}\n                                                    className=\"w-full px-4 py-2.5 rounded-xl border outline-none text-[14px] font-semibold\n                                                             bg-white border-[#DFDDE6] text-[#131313] focus:border-black\n                                                             dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-white dark:focus:border-blue-500\"\n                                                />\n                                                <Clock size={18} className=\"absolute right-3 top-1/2 -translate-y-1/2 text-[#131313]/40 dark:text-gray-500\" />\n                                            </div>\n                                        </div>\n                                    </div>\n\n                                    <div className=\"space-y-1.5\">\n                                        <label className=\"text-[14px] font-medium text-[#706f6f] dark:text-[#A1A1A6]\">Title</label>\n                                        <input title='title'\n                                            name=\"title\"\n                                            value={formData.title}\n                                            onChange={handleChange}\n                                            className=\"w-full px-4 py-2.5 rounded-[14px] border outline-none transition-all text-[14px] font-semibold\n                                                     bg-white border-[#DFDDE6] text-[#131313] focus:border-black\n                                                     dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-white dark:focus:border-blue-500\"\n                                        />\n                                    </div>\n                                </div>\n\n                                {/* Divider */}\n                                <div className=\"w-full h-[1.6px] md:h-auto md:w-[1.6px] border-t md:border-t-0 md:border-l border-dashed border-[#E9E8EB] dark:border-[#48484A]\" />\n\n                                {/* Preview Section */}\n                                <div className=\"flex-1 p-8 px-6 flex flex-col items-center justify-center\">\n                                    <span className=\"text-[14px] font-medium mb-4 text-[#706f6f] dark:text-[#A1A1A6]\">Preview</span>\n                                    <div className=\"relative mb-4\">\n                                        <img\n                                            src={formData.avatarUrl}\n                                            alt=\"Avatar\"\n                                            className=\"w-32 h-32 rounded-full object-cover object-top shadow-sm ring-1 ring-[#f0f0f0] dark:ring-[#48484A]\"\n                                        />\n                                        <button title='edit' className=\"absolute bottom-0 right-0 p-2 rounded-full shadow-md border \n                                                                     bg-white border-[#f0f0f0] text-[#707070]/70\n                                                                     dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-gray-300\">\n                                            <Pencil size={20} />\n                                        </button>\n                                    </div>\n                                    <h3 className=\"text-[18px] font-bold text-[#101010] dark:text-white text-center\">{formData.fullName}</h3>\n                                    <p className=\"text-[14px] mb-4 text-[#777678] dark:text-[#A1A1A6] text-center\">{formData.title}</p>\n                                    <div className=\"flex items-center gap-2 px-3 shadow-sm py-1 rounded-full text-[12px] font-medium \n                                                 bg-[#F7F7F9] text-[#101010]/60 \n                                                 dark:bg-[#3A3A3C] dark:text-[#A1A1A6]\">\n                                        <Clock size={12} className=\"text-[#777678] dark:text-[#A1A1A6]\" />\n                                        <span>{formData.workingHours}</span>\n                                    </div>\n                                </div>\n                            </div>\n\n                            {/* Footer */}\n                            <div className=\"px-6 py-5 md:px-8 flex flex-col-reverse sm:flex-row items-center justify-between gap-4 bg-[#F5F5F7] dark:bg-[#1C1C1E]\">\n                                <span className=\"text-[13px] text-[#767578]\">\n                                    Last updated: <span className=\"font-medium\">{formData.lastUpdated}</span>\n                                </span>\n                                <div className=\"flex gap-3 w-full sm:w-auto\">\n                                    <button\n                                        onClick={onClose}\n                                        className=\"flex-1 sm:flex-none px-5 py-2 rounded-full text-[14px] border-[1.6px] font-bold transition-colors\n                                                 bg-[#f3f4f6] border-[#E2E2E6] text-[#0F0F0F]\n                                                 dark:bg-[#3A3A3C] dark:border-[#48484A] dark:text-white\"\n                                    >\n                                        Cancel\n                                    </button>\n                                    <button\n                                        onClick={() => onSave(formData)}\n                                        className=\"flex-1 sm:flex-none px-5 py-2 rounded-full text-[13px] font-bold transition-colors shadow-lg shadow-black/10\n                                                 bg-[#0F0F0F] text-white hover:bg-[#222]\n                                                 dark:bg-white dark:text-black dark:hover:bg-[#E5E5E7]\"\n                                    >\n                                        Save changes\n                                    </button>\n                                </div>\n                            </div>\n                        </motion.div>\n                    </div>\n                </div>\n            )}\n        </AnimatePresence>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "edit-profile-base",
      "type": "registry:component",
      "title": "Edit Profile (base)",
      "description": "Theme-ready base variant of Profile editing dialog with fields, validation, and save actions..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/edit-profile.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Pencil, Clock, ChevronDown } from 'lucide-react';\n\nexport interface ProfileData {\n    fullName: string;\n    email: string;\n    timezone: string;\n    workingHours: string;\n    title: string;\n    avatarUrl: string;\n    lastUpdated: string;\n}\n\ninterface EditProfileProps {\n    isOpen: boolean;\n    onClose: () => void;\n    initialData: ProfileData;\n    onSave: (data: ProfileData) => void;\n}\n\nexport const EditProfile: React.FC<EditProfileProps> = ({\n    isOpen,\n    onClose,\n    initialData,\n    onSave\n}) => {\n    const [formData, setFormData] = useState<ProfileData>(initialData);\n\n    useEffect(() => {\n        if (isOpen) {\n            requestAnimationFrame(() => setFormData(initialData));\n        }\n    }, [isOpen, initialData]);\n\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {\n        const { name, value } = e.target;\n        setFormData((prev) => ({ ...prev, [name]: value }));\n    };\n\n    return (\n        <AnimatePresence>\n            {isOpen && (\n                <div className=\"fixed inset-0 z-100 flex items-center justify-center p-4 overflow-y-auto theme-injected font-sans\">\n                    {/* Backdrop Overlay */}\n                    <motion.div\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        onClick={onClose}\n                        className=\"fixed inset-0 backdrop-blur-sm bg-background/30\"\n                    />\n\n                    {/* Modal Container */}\n                    <div className=\"relative w-full max-w-180 z-101 my-auto pointer-events-none\">\n                        <motion.div\n                            initial={{ opacity: 0, scale: 0.9, y: 20 }}\n                            animate={{ opacity: 1, scale: 1, y: 0 }}\n                            exit={{ opacity: 0, scale: 0.9, y: 20 }}\n                            transition={{ type: \"spring\", damping: 20, stiffness: 300, mass: 0.8 }}\n                            className=\"pointer-events-auto w-full rounded-xl shadow-lg border border-border overflow-hidden \n                                     bg-card\"\n                        >\n                            {/* Header */}\n                            <div className=\"flex items-center justify-between px-6 py-4 md:px-8\">\n                                <h2 className=\"text-lg font-semibold text-foreground\">Edit your profile</h2>\n                                <button title='close' onClick={onClose} className=\"text-muted-foreground hover:text-foreground transition-colors p-1\">\n                                    <X size={20} />\n                                </button>\n                            </div>\n\n                            {/* Body */}\n                            <div className=\"flex flex-col md:flex-row border-t border-b border-border\n                                          bg-background\">\n\n                                {/* Form Section */}\n                                <div className=\"flex-1 p-6 space-y-4\">\n                                    <div className=\"space-y-1.5\">\n                                        <label className=\"text-sm font-medium text-muted-foreground\">Full name</label>\n                                        <input title='fullname'\n                                            name=\"fullName\"\n                                            value={formData.fullName}\n                                            onChange={handleChange}\n                                            className=\"w-full px-4 py-2.5 rounded-lg border border-2 outline-none transition-all text-base font-semibold\n                                                     bg-background border-input text-foreground focus:border-ring focus:border-input\"\n                                        />\n                                    </div>\n\n                                    <div className=\"space-y-1.5\">\n                                        <label className=\"text-sm font-medium text-muted-foreground\">Email</label>\n                                        <input title='email'\n                                            name=\"email\"\n                                            value={formData.email}\n                                            onChange={handleChange}\n                                            className=\"w-full px-4 py-2.5 rounded-lg border-2 outline-none font-semibold transition-all text-base\n                                                     bg-background border-input text-foreground focus:border-input focus:ring-ring/50\"\n                                        />\n                                    </div>\n\n                                    <div className=\"flex flex-col sm:flex-row gap-4\">\n                                        <div className=\"flex-1 space-y-1.5\">\n                                            <label className=\"text-sm font-medium text-muted-foreground\">Timezone</label>\n                                            <div className=\"relative\">\n                                                <select title='timezone'\n                                                    name=\"timezone\"\n                                                    value={formData.timezone}\n                                                    onChange={handleChange}\n                                                    className=\"w-full px-4 py-2.5 rounded-lg border-2 appearance-none outline-none text-base font-semibold\n                                                             bg-background border-input text-foreground focus:border-input focus:ring-ring/50\"\n                                                >\n                                                    <option>GMT-8</option>\n                                                    <option>GMT+5</option>\n                                                </select>\n                                                <ChevronDown size={20} className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-foreground/40\" />\n                                            </div>\n                                        </div>\n                                        <div className=\"flex-1 space-y-1.5\">\n                                            <label className=\"text-sm font-medium text-muted-foreground\">Working hours</label>\n                                            <div className=\"relative\">\n                                                <input title='workingHours'\n                                                    name=\"workingHours\"\n                                                    value={formData.workingHours}\n                                                    onChange={handleChange}\n                                                    className=\"w-full px-4 py-2.5 rounded-lg border-2 outline-none text-sm font-semibold\n                                                             bg-background border-input text-foreground focus:border-input focus:ring-ring/50\"\n                                                />\n                                                <Clock size={18} className=\"absolute right-3 top-1/2 -translate-y-1/2 text-foreground/40\" />\n                                            </div>\n                                        </div>\n                                    </div>\n\n                                    <div className=\"space-y-1.5\">\n                                        <label className=\"text-sm font-medium text-muted-foreground\">Title</label>\n                                        <input title='title'\n                                            name=\"title\"\n                                            value={formData.title}\n                                            onChange={handleChange}\n                                            className=\"w-full px-4 py-2.5 rounded-lg border-2 outline-none transition-all text-sm font-semibold\n                                                     bg-background border-input text-foreground focus:border-input focus:ring-ring/50\"\n                                        />\n                                    </div>\n                                </div>\n\n                                {/* Divider */}\n                                 <div className=\"w-full h-[1.6px] md:h-auto md:w-[1.6px] border-t md:border-t-0 md:border-l border-dashed border-[#E9E8EB] dark:border-[#48484A]\" />\n\n                                {/* Preview Section */}\n                                <div className=\"flex-1 p-8 px-6 flex flex-col items-center justify-center\">\n                                    <span className=\"text-sm font-medium mb-4 text-muted-foreground\">Preview</span>\n                                    <div className=\"relative mb-4\">\n                                        <img\n                                            src={formData.avatarUrl}\n                                            alt=\"Avatar\"\n                                            className=\"w-32 h-32 rounded-full object-cover object-top shadow-sm ring-1 ring-border\"\n                                        />\n                                        <button title='edit' className=\"absolute bottom-0 right-0 p-2 rounded-full shadow-md border \n                                                                     bg-card border-border text-muted-foreground\n                                                                     hover:text-foreground\">\n                                            <Pencil size={20} />\n                                        </button>\n                                    </div>\n                                    <h3 className=\"text-lg font-bold text-foreground text-center\">{formData.fullName}</h3>\n                                    <p className=\"text-sm mb-4 text-muted-foreground text-center\">{formData.title}</p>\n                                    <div className=\"flex items-center gap-2 px-3 shadow-sm py-1 rounded-full text-xs font-medium \n                                                 bg-muted text-muted-foreground\">\n                                        <Clock size={12} className=\"text-muted-foreground\" />\n                                        <span>{formData.workingHours}</span>\n                                    </div>\n                                </div>\n                            </div>\n\n                            {/* Footer */}\n                            <div className=\"px-6 py-5 md:px-8 flex flex-col-reverse sm:flex-row items-center justify-between gap-4 bg-muted\">\n                                <span className=\"text-xs text-muted-foreground\">\n                                    Last updated: <span className=\"font-medium\">{formData.lastUpdated}</span>\n                                </span>\n                                <div className=\"flex gap-3 w-full sm:w-auto\">\n                                    <button\n                                        onClick={onClose}\n                                        className=\"flex-1 sm:flex-none px-5 py-2 rounded-full text-sm border-2 font-bold transition-colors\n                                                 bg-muted border-border text-foreground hover:bg-muted/80\"\n                                    >\n                                        Cancel\n                                    </button>\n                                    <button\n                                        onClick={() => onSave(formData)}\n                                        className=\"flex-1 sm:flex-none px-5 py-2 rounded-full text-sm font-bold transition-colors shadow-lg\n                                                 bg-foreground text-background hover:bg-foreground/90\"\n                                    >\n                                        Save changes\n                                    </button>\n                                </div>\n                            </div>\n                        </motion.div>\n                    </div>\n                </div>\n            )}\n        </AnimatePresence>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "editable-chip",
      "type": "registry:component",
      "title": "Editable Chip",
      "description": "An interactive editable chip component with smooth animations for editing.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/editable-chip.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useRef,\n  useEffect,\n  type FC,\n  type ChangeEvent,\n  type KeyboardEvent,\n  type MouseEvent,\n} from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { BiSolidPencil } from 'react-icons/bi';\nimport { Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface EditableChipProps {\n  defaultLabel?: string;\n  showThemeToggle?: boolean;\n  onChange?: (value: string) => void;\n}\n\nexport const EditableChip: FC<EditableChipProps> = ({\n  defaultLabel = 'Watchlist',\n  onChange,\n}) => {\n  const [isEditing, setIsEditing] = useState(false);\n  const [label, setLabel] = useState<string>(defaultLabel);\n\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (isEditing && inputRef.current) {\n      requestAnimationFrame(() => {\n        inputRef.current?.focus();\n        inputRef.current?.select();\n      });\n    }\n  }, [isEditing]);\n\n  const handleSave = (e: MouseEvent | KeyboardEvent) => {\n    e.stopPropagation();\n    const finalValue = label.trim() === '' ? 'Untitled' : label;\n    setLabel(finalValue);\n    setIsEditing(false);\n    onChange?.(finalValue);\n  };\n\n  const handleEdit = () => {\n    setIsEditing(true);\n  };\n\n  return (\n      <motion.div layout>\n        <div\n          className={cn(\n            `relative flex cursor-pointer items-center justify-center gap-2 overflow-hidden rounded-full border border-zinc-200 py-1 pr-1 transition-all duration-300 ease-in-out select-none dark:border-zinc-700 dark:bg-zinc-900`,\n            isEditing && 'gap-8 ring-2 ring-black dark:ring-white',\n          )}\n        >\n          <motion.input\n            layout=\"position\"\n            key=\"input\"\n            ref={inputRef}\n            type=\"text\"\n            value={label}\n            readOnly={!isEditing}\n            onChange={(e: ChangeEvent<HTMLInputElement>) =>\n              setLabel(e.target.value)\n            }\n            onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n              e.key === 'Enter' && handleSave(e)\n            }\n\n            onClick={(e: MouseEvent) => e.stopPropagation()}\n            className=\"ml-4 w-32 border-none bg-transparent text-lg font-medium text-[#262626] capitalize outline-none selection:bg-[#B6B6B6] dark:text-zinc-100 dark:selection:bg-zinc-700\"\n          />\n\n          <AnimatePresence mode=\"popLayout\">\n            {isEditing ? (\n              <motion.button\n                key=\"done\"\n                initial={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n                animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n                exit={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n                layout=\"position\"\n                onClick={handleSave}\n                transition={{\n                  type: 'spring',\n                  bounce: 0,\n                  duration: 0.4,\n                }}\n                className=\"rounded-full bg-black p-1 text-white transition-colors dark:bg-zinc-100 dark:text-zinc-950\"\n              >\n                <Check size={26} />\n              </motion.button>\n            ) : (\n              <motion.button\n                key=\"edit\"\n                initial={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n                animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n                exit={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n                layout=\"position\"\n                onClick={handleEdit}\n                transition={{\n                  type: 'spring',\n                  bounce: 0,\n                  duration: 0.4,\n                }}\n                className=\"rounded-full bg-[#F0EFF6] p-1 text-[#696871] transition-colors dark:bg-zinc-800 dark:text-zinc-400 hover:dark:bg-zinc-700\"\n              >\n                <BiSolidPencil size={26} />\n              </motion.button>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "editable-chip-base",
      "type": "registry:component",
      "title": "Editable Chip (base)",
      "description": "Theme-ready base variant of An interactive editable chip component with smooth animations for editing..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/editable-chip.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useRef,\n  useEffect,\n  type FC,\n  type ChangeEvent,\n  type KeyboardEvent,\n  type MouseEvent,\n} from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { BiSolidPencil } from 'react-icons/bi';\nimport { Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface EditableChipProps {\n  defaultLabel?: string;\n  showThemeToggle?: boolean;\n  onChange?: (value: string) => void;\n}\n\nexport const EditableChip: FC<EditableChipProps> = ({\n  defaultLabel = 'Watchlist',\n  onChange,\n}) => {\n  const [isEditing, setIsEditing] = useState(false);\n  const [label, setLabel] = useState<string>(defaultLabel);\n\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (isEditing && inputRef.current) {\n      requestAnimationFrame(() => {\n        inputRef.current?.focus();\n        inputRef.current?.select();\n      });\n    }\n  }, [isEditing]);\n\n  const handleSave = (e: MouseEvent | KeyboardEvent) => {\n    e.stopPropagation();\n    const finalValue = label.trim() === '' ? 'Untitled' : label;\n    setLabel(finalValue);\n    setIsEditing(false);\n    onChange?.(finalValue);\n  };\n\n  const handleEdit = () => {\n    setIsEditing(true);\n  };\n\n  return (\n    <motion.div layout>\n      <div\n        className={cn(\n          `theme-injected border-border bg-card relative flex cursor-pointer items-center justify-center gap-2 overflow-hidden rounded-4xl border py-1 pr-1 transition-all duration-300 ease-in-out select-none`,\n          isEditing && 'ring-ring gap-8 ring-2',\n        )}\n      >\n        <motion.input\n          layout=\"position\"\n          key=\"input\"\n          ref={inputRef}\n          type=\"text\"\n          value={label}\n          readOnly={!isEditing}\n          onChange={(e: ChangeEvent<HTMLInputElement>) =>\n            setLabel(e.target.value)\n          }\n          onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n            e.key === 'Enter' && handleSave(e)\n          }\n          onClick={(e: MouseEvent) => e.stopPropagation()}\n          className=\"text-foreground selection:bg-primary/20 ml-4 w-32 border-none bg-transparent text-lg font-medium capitalize outline-none\"\n        />\n\n        <AnimatePresence mode=\"popLayout\">\n          {isEditing ? (\n            <motion.button\n              key=\"done\"\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n              layout=\"position\"\n              onClick={handleSave}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.4,\n              }}\n              className=\"bg-primary text-primary-foreground rounded-4xl p-1 transition-colors\"\n            >\n              <Check size={26} />\n            </motion.button>\n          ) : (\n            <motion.button\n              key=\"edit\"\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n              layout=\"position\"\n              onClick={handleEdit}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.4,\n              }}\n              className=\"bg-muted text-muted-foreground hover:bg-background rounded-4xl p-1 transition-colors\"\n            >\n              <BiSolidPencil size={26} />\n            </motion.button>\n          )}\n        </AnimatePresence>\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "emoji-spree-choice-chips",
      "type": "registry:component",
      "title": "Emoji Spree Choice Chips",
      "description": "A playful multi-select component with exploding emoji particles and smooth spring animations.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/emoji-spree-choice-chips.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface InterestItem {\n  id: string;\n  label: string;\n  emoji: string;\n}\n\ninterface Particle {\n  id: string;\n  emoji: string;\n  xOffset: number;\n  rotate: number;\n}\n\ninterface Props {\n  interests: InterestItem[];\n  onChange?: (selectedIds: string[]) => void;\n}\n\nexport const EmojiSpreeChips: React.FC<Props> = ({ interests, onChange }) => {\n  const [selected, setSelected] = useState<string[]>([]);\n  const [particles, setParticles] = useState<Particle[]>([]);\n  const [isPanning, setIsPanning] = useState(false);\n  const containerRef = React.useRef<HTMLDivElement>(null);\n\n  const spawnParticles = (emoji: string) => {\n    const newParticles: Particle[] = Array.from({ length: 3 }).map(() => ({\n      id: crypto.randomUUID(),\n      emoji,\n      xOffset: (Math.random() - 0.5) * 180,\n      rotate: (Math.random() - 0.5) * 40,\n    }));\n\n    setParticles(newParticles);\n\n    setTimeout(() => {\n      setParticles([]);\n    }, 1600);\n  };\n\n  const toggleInterest = (id: string, emoji: string) => {\n    setSelected((prev) => {\n      const exists = prev.includes(id);\n      const updated = exists ? prev.filter((i) => i !== id) : [...prev, id];\n\n      onChange?.(updated);\n\n      if (!exists) spawnParticles(emoji);\n\n      return updated;\n    });\n  };\n\n  const rows = React.useMemo(() => {\n    const result: InterestItem[][] = [[], [], []];\n    interests.forEach((item, index) => {\n      result[index % 3].push(item);\n    });\n    return result;\n  }, [interests]);\n\n  return (\n    <div className=\"relative isolate flex min-h-[500px] w-full max-w-4xl flex-col items-center overflow-hidden py-10 sm:min-h-[600px]\">\n      <h2 className=\"mb-6 w-full self-start px-6 text-2xl font-bold sm:mb-8 sm:text-3xl\">\n        Interests\n      </h2>\n\n      {/* Chips */}\n      <motion.div\n        ref={containerRef}\n        className={`relative z-20 w-full cursor-grab overflow-hidden mask-r-from-90% mask-l-from-90% px-6 active:cursor-grabbing ${\n          isPanning ? 'touch-none' : 'touch-pan-y'\n        }`}\n      >\n        <motion.div\n          drag=\"x\"\n          dragConstraints={containerRef}\n          onPanStart={() => setIsPanning(true)}\n          onPanEnd={() => setIsPanning(false)}\n          className=\"flex w-max flex-col gap-4 pr-12 sm:gap-5\"\n        >\n          {rows.map((row, rowIndex) => (\n            <div key={rowIndex} className=\"flex w-max gap-4 sm:gap-5\">\n              {row.map((item) => {\n                const isSelected = selected.includes(item.id);\n\n                return (\n                  <motion.button\n                    key={item.id}\n                    whileTap={{ scale: 0.95 }}\n                    transition={{ type: 'spring', stiffness: 260, damping: 18 }}\n                    onClick={() => toggleInterest(item.id, item.emoji)}\n                    className={`flex w-max items-center gap-2 rounded-full border px-4 py-1.5 text-base font-semibold whitespace-nowrap sm:gap-3 sm:px-5 sm:py-2 sm:text-lg ${\n                      isSelected\n                        ? 'border-neutral-300 bg-white dark:border-neutral-600 dark:bg-neutral-800'\n                        : 'border-neutral-200 bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900'\n                    }`}\n                  >\n                    <span>{item.emoji}</span>\n                    <span>{item.label}</span>\n                  </motion.button>\n                );\n              })}\n            </div>\n          ))}\n        </motion.div>\n      </motion.div>\n\n      {/* PARTICLES */}\n      <div className=\"pointer-events-none absolute inset-0\">\n        <AnimatePresence>\n          {particles.map((p, index) => (\n            <FloatingEmoji\n              key={p.id}\n              emoji={p.emoji}\n              delay={index * 0.08}\n              xOffset={p.xOffset}\n              rotate={p.rotate}\n            />\n          ))}\n        </AnimatePresence>\n      </div>\n\n      {/* Selected Pill */}\n      <div className=\"absolute bottom-8 left-1/2 z-20 -translate-x-1/2 sm:bottom-12\">\n        <AnimatePresence>\n          {selected.length > 0 && (\n            <motion.div\n              initial={{ opacity: 0, y: 50, scale: 0.9 }}\n              animate={{ opacity: 1, y: 0, scale: 1 }}\n              exit={{ opacity: 0, y: 40 }}\n              transition={{\n                type: 'spring',\n                stiffness: 200,\n                damping: 20,\n              }}\n              className=\"relative rounded-full border bg-white px-6 py-2.5 text-lg font-bold shadow-lg sm:px-10 sm:py-4 sm:text-xl dark:bg-neutral-900\"\n            >\n              {selected.length} Interests\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n};\n\n/* Floating Emoji Component */\nconst FloatingEmoji = ({\n  emoji,\n  delay,\n  xOffset,\n  rotate,\n}: {\n  emoji: string;\n  delay: number;\n  xOffset: number;\n  rotate: number;\n}) => {\n  const [phase, setPhase] = useState<'up' | 'down'>('up');\n  const isMobile = React.useSyncExternalStore(\n    (callback) => {\n      window.addEventListener('resize', callback);\n      return () => window.removeEventListener('resize', callback);\n    },\n    () => window.innerWidth < 640,\n    () => false\n  );\n\n  return (\n    <motion.div\n      initial={{ y: 0, x: 0, opacity: 0, scale: 0.6, rotate: 0 }}\n      animate={{\n        y: [0, isMobile ? -180 : -260, isMobile ? -180 : -260, 30],\n        x: [\n          0,\n          xOffset * (isMobile ? 0.6 : 1),\n          xOffset * (isMobile ? 0.5 : 0.8),\n        ],\n        opacity: [0, 1, 1, 0],\n        scale: [0.6, isMobile ? 2 : 3, isMobile ? 2 : 3, 0.6],\n        rotate: [0, rotate, rotate * 0.5],\n      }}\n      transition={{\n        duration: 1,\n        ease: 'easeInOut',\n        delay,\n      }}\n      onUpdate={(latest) => {\n        if (typeof latest.y === 'number') {\n          const threshold = isMobile ? -90 : -130;\n          if (latest.y < threshold) {\n            setPhase('up');\n          } else {\n            setPhase('down');\n          }\n        }\n      }}\n      className={`absolute bottom-20 left-1/2 -translate-x-1/2 text-4xl sm:text-6xl ${\n        phase === 'up' ? 'z-30' : 'z-10'\n      }`}\n    >\n      {emoji}\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "emoji-spree-choice-chips-base",
      "type": "registry:component",
      "title": "Emoji Spree Choice Chips (base)",
      "description": "Theme-ready base variant of A playful multi-select component with exploding emoji particles and smooth spring animations..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/emoji-spree-choice-chips.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface InterestItem {\n  id: string;\n  label: string;\n  emoji: string;\n}\n\ninterface Particle {\n  id: string;\n  emoji: string;\n  xOffset: number;\n  rotate: number;\n}\n\ninterface Props {\n  interests: InterestItem[];\n  onChange?: (selectedIds: string[]) => void;\n}\n\nexport const EmojiSpreeChips: React.FC<Props> = ({ interests, onChange }) => {\n  const [selected, setSelected] = useState<string[]>([]);\n  const [particles, setParticles] = useState<Particle[]>([]);\n  const [isPanning, setIsPanning] = useState(false);\n  const containerRef = React.useRef<HTMLDivElement>(null);\n\n  const spawnParticles = (emoji: string) => {\n    const newParticles: Particle[] = Array.from({ length: 3 }).map(() => ({\n      id: crypto.randomUUID(),\n      emoji,\n      xOffset: (Math.random() - 0.5) * 180,\n      rotate: (Math.random() - 0.5) * 40,\n    }));\n\n    setParticles(newParticles);\n\n    setTimeout(() => {\n      setParticles([]);\n    }, 1600);\n  };\n\n  const toggleInterest = (id: string, emoji: string) => {\n    setSelected((prev) => {\n      const exists = prev.includes(id);\n      const updated = exists ? prev.filter((i) => i !== id) : [...prev, id];\n\n      onChange?.(updated);\n\n      if (!exists) spawnParticles(emoji);\n\n      return updated;\n    });\n  };\n\n  const rows = React.useMemo(() => {\n    const result: InterestItem[][] = [[], [], []];\n    interests.forEach((item, index) => {\n      result[index % 3].push(item);\n    });\n    return result;\n  }, [interests]);\n\n  return (\n    <div className=\"theme-injected relative isolate flex min-h-[500px] w-full max-w-4xl flex-col items-center overflow-hidden py-10 sm:min-h-[600px]\">\n      <h2 className=\"mb-6 w-full self-start px-6 text-2xl font-bold sm:mb-8 sm:text-3xl\">\n        Interests\n      </h2>\n\n      {/* Chips */}\n      <motion.div\n        ref={containerRef}\n        className={`relative z-20 w-full cursor-grab overflow-hidden mask-r-from-90% mask-l-from-90% px-6 active:cursor-grabbing ${\n          isPanning ? 'touch-none' : 'touch-pan-y'\n        }`}\n      >\n        <motion.div\n          drag=\"x\"\n          dragConstraints={containerRef}\n          onPanStart={() => setIsPanning(true)}\n          onPanEnd={() => setIsPanning(false)}\n          className=\"flex w-max flex-col gap-4 pr-12 sm:gap-5\"\n        >\n          {rows.map((row, rowIndex) => (\n            <div key={rowIndex} className=\"flex w-max gap-4 sm:gap-5\">\n              {row.map((item) => {\n                const isSelected = selected.includes(item.id);\n\n                return (\n                  <motion.button\n                    key={item.id}\n                    whileTap={{ scale: 0.95 }}\n                    transition={{ type: 'spring', stiffness: 260, damping: 18 }}\n                    onClick={() => toggleInterest(item.id, item.emoji)}\n                    className={`flex w-max items-center gap-2 rounded-3xl border px-4 py-1.5 font-sans text-base font-semibold whitespace-nowrap sm:gap-3 sm:px-5 sm:py-2 sm:text-lg ${\n                      isSelected\n                        ? 'border-border bg-card dark:border-border dark:bg-muted'\n                        : 'border-border bg-secondary dark:border-border dark:bg-muted'\n                    }`}\n                  >\n                    <span>{item.emoji}</span>\n                    <span>{item.label}</span>\n                  </motion.button>\n                );\n              })}\n            </div>\n          ))}\n        </motion.div>\n      </motion.div>\n\n      {/* PARTICLES */}\n      <div className=\"pointer-events-none absolute inset-0\">\n        <AnimatePresence>\n          {particles.map((p, index) => (\n            <FloatingEmoji\n              key={p.id}\n              emoji={p.emoji}\n              delay={index * 0.08}\n              xOffset={p.xOffset}\n              rotate={p.rotate}\n            />\n          ))}\n        </AnimatePresence>\n      </div>\n\n      {/* Selected Pill */}\n      <div className=\"absolute bottom-8 left-1/2 z-20 -translate-x-1/2 sm:bottom-12\">\n        <AnimatePresence>\n          {selected.length > 0 && (\n            <motion.div\n              initial={{ opacity: 0, y: 50, scale: 0.9 }}\n              animate={{ opacity: 1, y: 0, scale: 1 }}\n              exit={{ opacity: 0, y: 40 }}\n              transition={{\n                type: 'spring',\n                stiffness: 200,\n                damping: 20,\n              }}\n              className=\"border-border bg-card dark:bg-card dark:text-foreground relative rounded-4xl border px-6 py-2.5 font-sans text-lg font-bold shadow-lg sm:px-10 sm:py-4 sm:text-xl\"\n            >\n              {selected.length} Interests\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n};\n\n/* Floating Emoji Component */\nconst FloatingEmoji = ({\n  emoji,\n  delay,\n  xOffset,\n  rotate,\n}: {\n  emoji: string;\n  delay: number;\n  xOffset: number;\n  rotate: number;\n}) => {\n  const [phase, setPhase] = useState<'up' | 'down'>('up');\n  const isMobile = React.useSyncExternalStore(\n    (callback) => {\n      window.addEventListener('resize', callback);\n      return () => window.removeEventListener('resize', callback);\n    },\n    () => window.innerWidth < 640,\n    () => false\n  );\n\n  return (\n    <motion.div\n      initial={{ y: 0, x: 0, opacity: 0, scale: 0.6, rotate: 0 }}\n      animate={{\n        y: [0, isMobile ? -180 : -260, isMobile ? -180 : -260, 30],\n        x: [\n          0,\n          xOffset * (isMobile ? 0.6 : 1),\n          xOffset * (isMobile ? 0.5 : 0.8),\n        ],\n        opacity: [0, 1, 1, 0],\n        scale: [0.6, isMobile ? 2 : 3, isMobile ? 2 : 3, 0.6],\n        rotate: [0, rotate, rotate * 0.5],\n      }}\n      transition={{\n        duration: 1,\n        ease: 'easeInOut',\n        delay,\n      }}\n      onUpdate={(latest) => {\n        if (typeof latest.y === 'number') {\n          const threshold = isMobile ? -90 : -130;\n          if (latest.y < threshold) {\n            setPhase('up');\n          } else {\n            setPhase('down');\n          }\n        }\n      }}\n      className={`absolute bottom-20 left-1/2 -translate-x-1/2 text-4xl select-none sm:text-6xl ${\n        phase === 'up' ? 'z-30' : 'z-10'\n      }`}\n    >\n      {emoji}\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "event-reminders",
      "type": "registry:component",
      "title": "Event Reminders",
      "description": "Set and manage event reminders with lightweight interactive scheduling controls.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/event-reminders.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Minus, Plus, X, ChevronUp, ChevronDown } from 'lucide-react';\nimport { FaBell, FaCheck } from 'react-icons/fa6';\nimport { MdEmail } from 'react-icons/md';\nimport { BiSolidPencil } from 'react-icons/bi';\n\nexport type ReminderType = 'Notification' | 'Email';\nexport type TimeUnit = 'minutes' | 'hours' | 'days';\n\nexport interface Reminder {\n  id: string;\n  type: ReminderType;\n  value: number;\n  unit: TimeUnit;\n}\n\nconst NumberRoller = ({ value }: { value: number }) => {\n  const [prevValue, setPrevValue] = React.useState(value);\n  const [direction, setDirection] = React.useState(1);\n\n  if (prevValue !== value) {\n    setDirection(value >= prevValue ? 1 : -1);\n    setPrevValue(value);\n  }\n\n  const variants = {\n    initial: (d: number) => ({\n      y: d * 5,\n      opacity: 0,\n      scale: 0,\n      filter: 'blur(2px)',\n    }),\n    animate: { y: 0, opacity: 1, scale: 1, filter: 'blur(0px)' },\n    exit: (d: number) => ({\n      y: d * -5,\n      opacity: 0,\n      scale: 0,\n      filter: 'blur(2px)',\n    }),\n  };\n\n  const strValue = value.toString().padStart(2, '0');\n\n  return (\n    <div className=\"flex items-center justify-center overflow-hidden\">\n      {strValue.split('').map((char, i) => (\n        <div key={i} className=\"relative flex items-center justify-center\">\n          <span className=\"invisible text-lg font-bold tabular-nums\">\n            {char}\n          </span>\n          <AnimatePresence custom={direction} initial={false}>\n            <motion.span\n              key={char}\n              custom={direction}\n              variants={variants}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n              className=\"absolute text-lg font-bold text-neutral-900 tabular-nums dark:text-white\"\n            >\n              {char}\n            </motion.span>\n          </AnimatePresence>\n        </div>\n      ))}\n    </div>\n  );\n};\n\nconst AnimatedWord = ({ word }: { word: string }) => {\n  return (\n    <div className=\"relative flex items-center overflow-hidden\">\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {word.split('').map((char, i) => (\n          <motion.span\n            key={`${char}-${i}`}\n            initial={{ y: 5, opacity: 0 }}\n            animate={{ y: 0, opacity: 1 }}\n            exit={{ y: -5, opacity: 0 }}\n            transition={{\n              type: 'spring',\n              bounce: 0,\n              duration: 0.3,\n              delay: i * 0.0175,\n            }}\n            className=\"inline-block font-semibold text-neutral-800 dark:text-neutral-200\"\n          >\n            {i === 0 ? char.toUpperCase() : char}\n          </motion.span>\n        ))}\n      </AnimatePresence>\n    </div>\n  );\n};\n\ninterface EventRemindersProps {\n  title: string;\n  date: string;\n  initialReminders?: Reminder[];\n  onUpdate?: (reminders: Reminder[]) => void;\n}\n\nexport const EventReminders: React.FC<EventRemindersProps> = ({\n  title,\n  date: initialDate,\n  initialReminders = [],\n}) => {\n  const [reminders, setReminders] = useState<Reminder[]>(initialReminders);\n  const [date, setDate] = useState(initialDate);\n  const [isEditingDate, setIsEditingDate] = useState(false);\n\n  const basePill =\n    'border-[1.6px] rounded-full transition-colors bg-white border-neutral-200 dark:bg-neutral-900 dark:border-neutral-800';\n\n  const softBtn =\n    'p-2 rounded-full transition-colors bg-neutral-100 text-neutral-500 hover:text-neutral-900 dark:bg-neutral-800 dark:text-neutral-400 dark:hover:text-white';\n\n  const addReminder = () => {\n    setReminders([\n      ...reminders,\n      {\n        id: crypto.randomUUID(),\n        type: 'Notification',\n        value: 5,\n        unit: 'minutes',\n      },\n    ]);\n  };\n\n  const removeReminder = (id: string) =>\n    setReminders(reminders.filter((r) => r.id !== id));\n\n  const updateReminder = (id: string, updates: Partial<Reminder>) =>\n    setReminders(\n      reminders.map((r) => (r.id === id ? { ...r, ...updates } : r)),\n    );\n\n  const toggleUnit = (id: string, current: TimeUnit) => {\n    const units: TimeUnit[] = ['minutes', 'hours', 'days'];\n    const next = units[(units.indexOf(current) + 1) % units.length];\n    updateReminder(id, { unit: next });\n  };\n\n  return (\n    <div className=\"flex min-h-full flex-col items-center justify-center bg-transparent p-4 antialiased\">\n      <motion.div\n        layout\n        transition={{\n          type: 'spring',\n          bounce: 0.2,\n          duration: 0.5,\n        }}\n        className=\"w-full max-w-100 rounded-[32px] border-2 border-neutral-200 bg-white p-6 shadow-lg transition-colors dark:border-neutral-800 dark:bg-neutral-900\"\n      >\n        {/* Header */}\n        <div className=\"mb-6 flex items-start justify-between gap-3\">\n          <div className=\"min-w-0 flex-1\">\n            <h2 className=\"leading-tight text-lg font-bold text-neutral-900 sm:text-xl dark:text-white\">\n              {title}\n            </h2>\n\n            <AnimatePresence mode=\"wait\">\n              {isEditingDate ? (\n                <motion.input\n                  key=\"edit-date\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  value={date}\n                  onChange={(e) => setDate(e.target.value)}\n                  onKeyDown={(e) =>\n                    e.key === 'Enter' && setIsEditingDate(false)\n                  }\n                  autoFocus\n                  className=\"mt-2 w-full rounded border-b-2 border-neutral-300 bg-neutral-100 px-2 py-1 font-semibold text-neutral-600 outline-none dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300\"\n                />\n              ) : (\n                <motion.p\n                  key=\"view-date\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"mt-2 font-semibold text-neutral-600 dark:text-neutral-400\"\n                >\n                  {date}\n                </motion.p>\n              )}\n            </AnimatePresence>\n          </div>\n\n          <button\n            onClick={() => setIsEditingDate(!isEditingDate)}\n            className=\"rounded-lg border-2 border-neutral-200 bg-white p-2 text-neutral-600 transition-colors hover:bg-neutral-100 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-700\"\n          >\n            {isEditingDate ? (\n              <FaCheck size={20} />\n            ) : (\n              <BiSolidPencil size={20} />\n            )}\n          </button>\n        </div>\n\n        {/* List */}\n        <div className=\"border-t border-dashed border-neutral-200 pt-2 dark:border-neutral-800\">\n          <LayoutGroup>\n            <AnimatePresence mode=\"popLayout\">\n              {reminders.map((reminder) => (\n                <motion.div\n                  key={reminder.id}\n                  layout\n                  initial={{ opacity: 0, y: 10 }}\n                  animate={{ opacity: 1, y: 0 }}\n                  exit={{ opacity: 0, y: -10 }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0.2,\n                    duration: 0.5,\n                  }}\n                  className=\"space-y-3 border-b border-dashed border-neutral-200 py-4 dark:border-neutral-800\"\n                >\n                  {/* Type */}\n                  <motion.div\n                    layout\n                    onClick={() =>\n                      updateReminder(reminder.id, {\n                        type:\n                          reminder.type === 'Notification'\n                            ? 'Email'\n                            : 'Notification',\n                      })\n                    }\n                    className={`${basePill} flex cursor-pointer items-center justify-between px-4 py-2`}\n                  >\n                    <div className=\"flex items-center gap-3\">\n                      <AnimatePresence mode=\"popLayout\" initial={false}>\n                        <motion.div\n                          key={reminder.type}\n                          initial={{ y: 5, opacity: 0, filter: 'blur(4px)' }}\n                          animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n                          exit={{ y: -5, opacity: 0, filter: 'blur(4px)' }}\n                          transition={{\n                            type: 'spring',\n                            bounce: 0,\n                            duration: 0.5,\n                          }}\n                        >\n                          {reminder.type === 'Notification' ? (\n                            <FaBell size={18} className=\"text-neutral-400\" />\n                          ) : (\n                            <MdEmail size={18} className=\"text-neutral-400\" />\n                          )}\n                        </motion.div>\n                      </AnimatePresence>\n                      <AnimatedWord word={reminder.type} />\n                    </div>\n                    <div className=\"flex flex-col -space-y-1 text-neutral-400\">\n                      <ChevronUp size={14} strokeWidth={3} />\n                      <ChevronDown size={14} strokeWidth={3} />\n                    </div>\n                  </motion.div>\n\n                  {/* Value + Unit */}\n                  <div className=\"flex flex-wrap sm:flex-nowrap items-center gap-2 relative\">\n                    <div\n                      className={`${basePill} flex flex-1 min-w-[120px] items-center justify-between px-2 py-1`}\n                    >\n                      <button\n                        onClick={() =>\n                          updateReminder(reminder.id, {\n                            value: Math.max(1, reminder.value - 1),\n                          })\n                        }\n                        className={softBtn}\n                      >\n                        <Minus size={16} />\n                      </button>\n\n                      <NumberRoller value={reminder.value} />\n\n                      <button\n                        onClick={() =>\n                          updateReminder(reminder.id, {\n                            value: reminder.value + 1,\n                          })\n                        }\n                        className={softBtn}\n                      >\n                        <Plus size={16} />\n                      </button>\n                    </div>\n\n                    <motion.div\n                      layout\n                      onClick={() => toggleUnit(reminder.id, reminder.unit)}\n                      className={`${basePill} flex flex-[1.4] min-w-[120px] cursor-pointer items-center justify-between px-4 py-2`}\n                    >\n                      <AnimatedWord word={reminder.unit} />\n                      <div className=\"flex flex-col -space-y-1 text-neutral-400\">\n                        <ChevronUp size={14} strokeWidth={3} />\n                        <ChevronDown size={14} strokeWidth={3} />\n                      </div>\n                    </motion.div>\n\n                    <button\n                      onClick={() => removeReminder(reminder.id)}\n                      className=\"shrink-0 rounded-full border border-neutral-200 p-2.5 sm:p-3 text-neutral-500 transition-colors hover:bg-neutral-100 hover:text-red-500 dark:border-neutral-700 dark:text-neutral-400 dark:hover:bg-neutral-800\"\n                    >\n                      <X size={18} strokeWidth={2.5} />\n                    </button>\n                  </div>\n                </motion.div>\n              ))}\n            </AnimatePresence>\n          </LayoutGroup>\n        </div>\n\n        {/* Add Button */}\n        <motion.button\n          onClick={addReminder}\n          className=\"mt-6 flex w-full items-center justify-center gap-2 rounded-2xl bg-neutral-100 py-3 font-semibold text-neutral-800 transition-colors hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-200 dark:hover:bg-neutral-700\"\n        >\n          <Plus size={18} strokeWidth={2.5} />\n          Add Reminder\n        </motion.button>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "event-reminders-base",
      "type": "registry:component",
      "title": "Event Reminders (base)",
      "description": "Theme-ready base variant of Set and manage event reminders with lightweight interactive scheduling controls..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/event-reminders.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Minus, Plus, X, ChevronUp, ChevronDown } from 'lucide-react';\nimport { FaBell, FaCheck } from 'react-icons/fa6';\nimport { MdEmail } from 'react-icons/md';\nimport { BiSolidPencil } from 'react-icons/bi';\n\nexport type ReminderType = 'Notification' | 'Email';\nexport type TimeUnit = 'minutes' | 'hours' | 'days';\n\nexport interface Reminder {\n  id: string;\n  type: ReminderType;\n  value: number;\n  unit: TimeUnit;\n}\n\nconst NumberRoller = ({ value }: { value: number }) => {\n  const [prevValue, setPrevValue] = React.useState(value);\n  const [direction, setDirection] = React.useState(1);\n\n  if (prevValue !== value) {\n    setDirection(value >= prevValue ? 1 : -1);\n    setPrevValue(value);\n  }\n\n  const variants = {\n    initial: (d: number) => ({\n      y: d * 5,\n      opacity: 0,\n      scale: 0,\n      filter: 'blur(2px)',\n    }),\n    animate: { y: 0, opacity: 1, scale: 1, filter: 'blur(0px)' },\n    exit: (d: number) => ({\n      y: d * -5,\n      opacity: 0,\n      scale: 0,\n      filter: 'blur(2px)',\n    }),\n  };\n\n  const strValue = value.toString().padStart(2, '0');\n\n  return (\n    <div className=\"flex items-center justify-center overflow-hidden\">\n      {strValue.split('').map((char, i) => (\n        <div key={i} className=\"relative flex items-center justify-center\">\n          <span className=\"invisible text-lg font-bold tabular-nums\">\n            {char}\n          </span>\n          <AnimatePresence custom={direction} initial={false}>\n            <motion.span\n              key={char}\n              custom={direction}\n              variants={variants}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n              className=\"absolute font-sans text-lg font-bold tabular-nums text-foreground\"\n            >\n              {char}\n            </motion.span>\n          </AnimatePresence>\n        </div>\n      ))}\n    </div>\n  );\n};\n\nconst AnimatedWord = ({ word }: { word: string }) => {\n  return (\n    <div className=\"relative flex items-center overflow-hidden\">\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {word.split('').map((char, i) => (\n          <motion.span\n            key={`${char}-${i}`}\n            initial={{ y: 5, opacity: 0 }}\n            animate={{ y: 0, opacity: 1 }}\n            exit={{ y: -5, opacity: 0 }}\n            transition={{\n              type: 'spring',\n              bounce: 0,\n              duration: 0.3,\n              delay: i * 0.0175,\n            }}\n            className=\"inline-block font-sans font-semibold text-foreground\"\n          >\n            {i === 0 ? char.toUpperCase() : char}\n          </motion.span>\n        ))}\n      </AnimatePresence>\n    </div>\n  );\n};\n\ninterface EventRemindersProps {\n  title: string;\n  date: string;\n  initialReminders?: Reminder[];\n  onUpdate?: (reminders: Reminder[]) => void;\n}\n\nexport const EventReminders: React.FC<EventRemindersProps> = ({\n  title,\n  date: initialDate,\n  initialReminders = [],\n}) => {\n  const [reminders, setReminders] = useState<Reminder[]>(initialReminders);\n  const [date, setDate] = useState(initialDate);\n  const [isEditingDate, setIsEditingDate] = useState(false);\n\n  const basePill =\n    'rounded-4xl border-[1.6px] border-border bg-card transition-colors';\n\n  const softBtn =\n    'rounded-4xl bg-muted p-2 text-muted-foreground transition-colors hover:bg-background hover:text-foreground';\n\n  const addReminder = () => {\n    setReminders([\n      ...reminders,\n      {\n        id: crypto.randomUUID(),\n        type: 'Notification',\n        value: 5,\n        unit: 'minutes',\n      },\n    ]);\n  };\n\n  const removeReminder = (id: string) =>\n    setReminders(reminders.filter((r) => r.id !== id));\n\n  const updateReminder = (id: string, updates: Partial<Reminder>) =>\n    setReminders(\n      reminders.map((r) => (r.id === id ? { ...r, ...updates } : r)),\n    );\n\n  const toggleUnit = (id: string, current: TimeUnit) => {\n    const units: TimeUnit[] = ['minutes', 'hours', 'days'];\n    const next = units[(units.indexOf(current) + 1) % units.length];\n    updateReminder(id, { unit: next });\n  };\n\n  return (\n    <div className=\"theme-injected flex min-h-full flex-col items-center justify-center bg-transparent p-4 font-sans antialiased\">\n      <motion.div\n        layout\n        transition={{\n          type: 'spring',\n          bounce: 0.2,\n          duration: 0.5,\n        }}\n        className=\"relative w-full max-w-100 rounded-[32px] border-2 border-border bg-card p-6 shadow-lg transition-colors\"\n      >\n        {/* Header */}\n        <div className=\"mb-6 flex items-start justify-between gap-3 px-1\">\n          <div className=\"min-w-0 flex-1\">\n            <h2 className=\"leading-tight text-lg font-bold text-foreground sm:text-xl\">\n              {title}\n            </h2>\n\n            <AnimatePresence mode=\"wait\">\n              {isEditingDate ? (\n                <motion.input\n                  key=\"edit-date\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  value={date}\n                  onChange={(e) => setDate(e.target.value)}\n                  onKeyDown={(e) =>\n                    e.key === 'Enter' && setIsEditingDate(false)\n                  }\n                  autoFocus\n                  className=\"mt-2 w-full rounded border-b-2 border-border bg-muted px-2 py-1 font-sans font-semibold text-foreground outline-none\"\n                />\n              ) : (\n                <motion.p\n                  key=\"view-date\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"mt-2 font-sans font-semibold text-muted-foreground\"\n                >\n                  {date}\n                </motion.p>\n              )}\n            </AnimatePresence>\n          </div>\n\n          <button\n            onClick={() => setIsEditingDate(!isEditingDate)}\n            className=\"rounded-lg border-2 border-border bg-background p-2 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n          >\n            {isEditingDate ? (\n              <FaCheck size={20} />\n            ) : (\n              <BiSolidPencil size={20} />\n            )}\n          </button>\n        </div>\n\n        {/* List */}\n        <div className=\"border-t border-dashed border-border pt-2\">\n          <LayoutGroup>\n            <AnimatePresence mode=\"popLayout\">\n              {reminders.map((reminder) => (\n                <motion.div\n                  key={reminder.id}\n                  layout\n                  initial={{ opacity: 0, y: 10 }}\n                  animate={{ opacity: 1, y: 0 }}\n                  exit={{ opacity: 0, y: -10 }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0.2,\n                    duration: 0.5,\n                  }}\n                  className=\"space-y-3 border-b border-dashed border-border py-4\"\n                >\n                  {/* Type */}\n                  <motion.div\n                    layout\n                    onClick={() =>\n                      updateReminder(reminder.id, {\n                        type:\n                          reminder.type === 'Notification'\n                            ? 'Email'\n                            : 'Notification',\n                      })\n                    }\n                    className={`${basePill} flex cursor-pointer items-center justify-between px-4 py-2`}\n                  >\n                    <div className=\"flex items-center gap-3\">\n                      <AnimatePresence mode=\"popLayout\" initial={false}>\n                        <motion.div\n                          key={reminder.type}\n                          initial={{ y: 5, opacity: 0, filter: 'blur(4px)' }}\n                          animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n                          exit={{ y: -5, opacity: 0, filter: 'blur(4px)' }}\n                          transition={{\n                            type: 'spring',\n                            bounce: 0,\n                            duration: 0.5,\n                          }}\n                        >\n                          {reminder.type === 'Notification' ? (\n                            <FaBell size={18} className=\"text-muted-foreground\" />\n                          ) : (\n                            <MdEmail size={18} className=\"text-muted-foreground\" />\n                          )}\n                        </motion.div>\n                      </AnimatePresence>\n                      <AnimatedWord word={reminder.type} />\n                    </div>\n                    <div className=\"flex flex-col -space-y-1 text-muted-foreground\">\n                      <ChevronUp size={14} strokeWidth={3} />\n                      <ChevronDown size={14} strokeWidth={3} />\n                    </div>\n                  </motion.div>\n\n                  {/* Value + Unit */}\n                  <div className=\"flex flex-wrap sm:flex-nowrap items-center gap-2 relative\">\n                    <div\n                      className={`${basePill} flex flex-1 min-w-[120px] items-center justify-between px-2 py-1`}\n                    >\n                      <button\n                        onClick={() =>\n                          updateReminder(reminder.id, {\n                            value: Math.max(1, reminder.value - 1),\n                          })\n                        }\n                        className={softBtn}\n                      >\n                        <Minus size={16} />\n                      </button>\n\n                      <NumberRoller value={reminder.value} />\n\n                      <button\n                        onClick={() =>\n                          updateReminder(reminder.id, {\n                            value: reminder.value + 1,\n                          })\n                        }\n                        className={softBtn}\n                      >\n                        <Plus size={16} />\n                      </button>\n                    </div>\n\n                    <motion.div\n                      layout\n                      onClick={() => toggleUnit(reminder.id, reminder.unit)}\n                      className={`${basePill} flex flex-[1.4] min-w-[120px] cursor-pointer items-center justify-between px-4 py-2`}\n                    >\n                      <AnimatedWord word={reminder.unit} />\n                      <div className=\"flex flex-col -space-y-1 text-muted-foreground\">\n                        <ChevronUp size={14} strokeWidth={3} />\n                        <ChevronDown size={14} strokeWidth={3} />\n                      </div>\n                    </motion.div>\n\n                    <button\n                      onClick={() => removeReminder(reminder.id)}\n                      className=\"shrink-0 bg-background text-muted-foreground hover:bg-accent hover:text-accent-foreground border border-border rounded-full p-2.5 sm:p-3 transition-colors active:scale-95\"\n                    >\n                      <X size={18} strokeWidth={2.5} />\n                    </button>\n                  </div>\n                </motion.div>\n              ))}\n            </AnimatePresence>\n          </LayoutGroup>\n        </div>\n\n        {/* Add Button */}\n        <motion.button\n          onClick={addReminder}\n          className=\"mt-6 flex w-full items-center justify-center gap-2 rounded-2xl bg-primary py-3 font-sans font-semibold text-primary-foreground transition-colors hover:opacity-95\"\n        >\n          <Plus size={18} strokeWidth={2.5} />\n          Add Reminder\n        </motion.button>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "expand-details",
      "type": "registry:component",
      "title": "Expand Details",
      "description": "Interactive micro-interaction component for expanding details.",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/expand-details.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ChevronDown } from 'lucide-react';\nimport useMeasure from 'react-use-measure';\n\nconst SPRING_CONFIG = {\n  type: 'spring',\n  stiffness: 200,\n  damping: 22,\n  mass: 1.2,\n} as const;\n\nexport default function ExpandDetails() {\n  const [isOpen, setIsOpen] = useState(true);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  return (\n    <div className=\"flex h-screen w-full items-center justify-center btransition-colors \">\n      <motion.div\n        initial={{ borderRadius: 20 }}\n        animate={{\n          width: isOpen ? 320 : 120,\n          height: bounds.height > 0 ? bounds.height : 'auto',\n          borderRadius: isOpen ? 20 : 24,\n        }}\n        transition={{\n          height: {\n            ...SPRING_CONFIG,\n            delay: isOpen ? 0.25 : 0,\n          },\n          width: {\n            ...SPRING_CONFIG,\n            delay: isOpen ? 0 : 0.3,\n          },\n          borderRadius: SPRING_CONFIG,\n        }}\n        className=\"overflow-hidden bg-zinc-100 dark:bg-zinc-900\"\n      >\n        <div ref={ref} className=\"relative px-4 py-2\">\n          <motion.button\n            layout=\"position\"\n            onClick={() => setIsOpen((prev) => !prev)}\n            className=\"flex w-full items-center gap-1 text-zinc-500 transition-colors hover:text-zinc-900 focus:outline-none dark:text-zinc-400 dark:hover:text-zinc-100\"\n          >\n            <motion.div\n              animate={{ rotate: isOpen ? 0 : -90 }}\n              transition={{ duration: 0.2, ease: 'easeOut', delay: 0.3 }}\n              className=\"flex items-center justify-center\"\n            >\n              <ChevronDown className=\"size-5 stroke-2\" />\n            </motion.div>\n\n            <span className=\"text-lg font-medium tracking-tight text-zinc-900 dark:text-zinc-100\">\n              Details\n            </span>\n          </motion.button>\n\n          <AnimatePresence initial={false} mode=\"popLayout\">\n            {isOpen && (\n              <motion.div\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                  y: 40,\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                  transition: {\n                    type: 'spring',\n                    duration: 0.4,\n                    bounce: 0,\n                    delay: 0.3,\n                  },\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                  y: 16,\n                }}\n                transition={{\n                  type: 'spring',\n                  duration: 0.4,\n                  bounce: 0,\n                }}\n                className=\"min-w-[320px] overflow-hidden\"\n              >\n                <div className=\"mt-3 ml-6 grid grid-cols-2 gap-x-4 gap-y-5\">\n                  <div className=\"col-span-2\">\n                    <div className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">\n                      Model\n                    </div>\n                    <div className=\"mt-1 text-lg tracking-tight text-zinc-900 dark:text-zinc-100\">\n                      GPT 5.5 Codex\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">\n                      Tokens\n                    </div>\n                    <div className=\"mt-1 text-lg tracking-tight text-zinc-900 dark:text-zinc-100\">\n                      3.4K\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">\n                      Cost\n                    </div>\n                    <div className=\"mt-1 text-lg tracking-tight text-zinc-900 dark:text-zinc-100\">\n                      $0.27\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">\n                      Latency\n                    </div>\n                    <div className=\"mt-1 text-lg tracking-tight text-zinc-900 dark:text-zinc-100\">\n                      1.4s\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">\n                      Temperature\n                    </div>\n                    <div className=\"mt-1 text-lg tracking-tight text-zinc-900 dark:text-zinc-100\">\n                      0.7\n                    </div>\n                  </div>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "expand-details-base",
      "type": "registry:component",
      "title": "Expand Details (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component for expanding details..",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/expand-details.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ChevronDown } from 'lucide-react';\nimport useMeasure from 'react-use-measure';\n\nconst SPRING_CONFIG = {\n  type: 'spring',\n  stiffness: 200,\n  damping: 22,\n  mass: 1.2,\n} as const;\n\nexport default function ExpandDetails() {\n  const [isOpen, setIsOpen] = useState(true);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  return (\n    <div className=\"theme-injected flex h-screen w-full items-center justify-center transition-colors\">\n      <motion.div\n        initial={{ borderRadius: 20 }}\n        animate={{\n          width: isOpen ? 320 : 120,\n          height: bounds.height > 0 ? bounds.height : 'auto',\n          borderRadius: isOpen ? 20 : 24,\n        }}\n        transition={{\n          height: {\n            ...SPRING_CONFIG,\n            delay: isOpen ? 0.25 : 0,\n          },\n          width: {\n            ...SPRING_CONFIG,\n            delay: isOpen ? 0 : 0.3,\n          },\n          borderRadius: SPRING_CONFIG,\n        }}\n        className=\"border-border bg-card text-card-foreground overflow-hidden border\"\n      >\n        <div ref={ref} className=\"relative px-4 py-2\">\n          <motion.button\n            layout=\"position\"\n            onClick={() => setIsOpen((prev) => !prev)}\n            className=\"text-muted-foreground hover:text-foreground flex w-full items-center gap-1 transition-colors focus:outline-none\"\n          >\n            <motion.div\n              animate={{ rotate: isOpen ? 0 : -90 }}\n              transition={{ duration: 0.2, ease: 'easeOut', delay: 0.3 }}\n              className=\"flex items-center justify-center\"\n            >\n              <ChevronDown className=\"size-5 stroke-2\" />\n            </motion.div>\n\n            <span className=\"text-foreground text-lg font-medium tracking-tight\">\n              Details\n            </span>\n          </motion.button>\n\n          <AnimatePresence initial={false} mode=\"popLayout\">\n            {isOpen && (\n              <motion.div\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                  y: 40,\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                  transition: {\n                    type: 'spring',\n                    duration: 0.4,\n                    bounce: 0,\n                    delay: 0.3,\n                  },\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                  y: 16,\n                }}\n                transition={{\n                  type: 'spring',\n                  duration: 0.4,\n                  bounce: 0,\n                }}\n                className=\"min-w-[320px] overflow-hidden\"\n              >\n                <div className=\"mt-3 ml-6 grid grid-cols-2 gap-x-4 gap-y-5\">\n                  <div className=\"col-span-2\">\n                    <div className=\"text-muted-foreground text-sm font-medium\">\n                      Model\n                    </div>\n                    <div className=\"text-foreground mt-1 text-lg tracking-tight\">\n                      GPT 5.5 Codex\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-muted-foreground text-sm font-medium\">\n                      Tokens\n                    </div>\n                    <div className=\"text-foreground mt-1 text-lg tracking-tight\">\n                      3.4K\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-muted-foreground text-sm font-medium\">\n                      Cost\n                    </div>\n                    <div className=\"text-foreground mt-1 text-lg tracking-tight\">\n                      $0.27\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-muted-foreground text-sm font-medium\">\n                      Latency\n                    </div>\n                    <div className=\"text-foreground mt-1 text-lg tracking-tight\">\n                      1.4s\n                    </div>\n                  </div>\n\n                  <div>\n                    <div className=\"text-muted-foreground text-sm font-medium\">\n                      Temperature\n                    </div>\n                    <div className=\"text-foreground mt-1 text-lg tracking-tight\">\n                      0.7\n                    </div>\n                  </div>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "expandable-event-card",
      "type": "registry:component",
      "title": "Expandable Event Card",
      "description": "A stylish animated card that expands to a full-screen modal, perfect for showcasing events, concerts, or featured destinations.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/expandable-event-card.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\ninterface ExpandableCardProps {\n  imageSrc?: string;\n  title?: string;\n  description?: string;\n  content?: React.ReactNode;\n}\n\nexport default function ExpandableEventCard({\n  imageSrc = \"https://assets.watermelon.sh/event.avif\",\n  title = \"Neon Nights Festival\",\n  description = \"Experience the ultimate electronic music festival with top DJs and immersive visual arts.\",\n  content\n}: ExpandableCardProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const layoutId = `expandable-event-card-${title}`;\n\n  return (\n    <>\n      <motion.div\n        layoutId={layoutId}\n        onClick={() => setIsOpen(true)}\n        className=\"cursor-pointer overflow-hidden rounded-xl bg-card border border-border hover:border-primary/30 transition-colors group shadow-sm\"\n      >\n        <motion.div layoutId={`image-container-${layoutId}`} className=\"relative h-48 w-full overflow-hidden\">\n          <motion.img \n            layoutId={`image-${layoutId}`} \n            src={imageSrc} \n            className=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\" \n          />\n        </motion.div>\n        <div className=\"p-4 sm:p-5\">\n          <motion.h3 layoutId={`title-${layoutId}`} className=\"text-base font-medium tracking-tight text-foreground mb-1\">{title}</motion.h3>\n          <motion.p layoutId={`desc-${layoutId}`} className=\"text-muted-foreground text-xs tracking-wide line-clamp-2\">{description}</motion.p>\n        </div>\n      </motion.div>\n\n      <AnimatePresence>\n        {isOpen && (\n          <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-8\">\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsOpen(false)}\n              className=\"absolute inset-0 bg-background/80 backdrop-blur-md\"\n            />\n            <motion.div\n              layoutId={layoutId}\n              className=\"relative w-full max-w-2xl bg-card rounded-2xl overflow-hidden border border-border z-10 flex flex-col shadow-xl\"\n            >\n              <button \n                onClick={() => setIsOpen(false)} \n                className=\"absolute top-4 right-4 z-20 flex h-8 w-8 items-center justify-center bg-background/50 hover:bg-accent rounded-full border border-border text-foreground transition-colors backdrop-blur-sm\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n              </button>\n              \n              <motion.div layoutId={`image-container-${layoutId}`} className=\"relative h-64 sm:h-80 w-full overflow-hidden shrink-0\">\n                <motion.img \n                  layoutId={`image-${layoutId}`} \n                  src={imageSrc} \n                  className=\"w-full h-full object-cover\" \n                />\n              </motion.div>\n              \n              <div className=\"p-6 sm:p-8 overflow-y-auto custom-scrollbar\">\n                <motion.h3 layoutId={`title-${layoutId}`} className=\"text-xl sm:text-2xl font-semibold tracking-tight text-foreground mb-2\">{title}</motion.h3>\n                <motion.p layoutId={`desc-${layoutId}`} className=\"text-primary text-xs font-medium tracking-wide uppercase mb-6\">{description}</motion.p>\n                <motion.div \n                  initial={{ opacity: 0, y: 20, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, y: 10, filter: 'blur(4px)' }}\n                  transition={{ type: \"spring\", duration: 0.3, bounce: 0, delay: 0.1 }}\n                  className=\"text-foreground/80 text-sm leading-relaxed\"\n                >\n                  {content || (\n                    <div className=\"space-y-4\">\n                      <p>Join us for three unforgettable nights of pulsating beats and breathtaking light shows. The Neon Nights Festival brings together the best electronic music artists from around the globe.</p>\n                      <h4 className=\"text-foreground font-semibold mt-6 mb-2 tracking-tight\">Event Details:</h4>\n                      <ul className=\"list-disc pl-5 space-y-2 text-muted-foreground\">\n                        <li>Dates: August 15-17, 2026</li>\n                        <li>Location: Downtown Arena</li>\n                        <li>Age Restriction: 18+ only</li>\n                      </ul>\n                      <button className=\"mt-6 px-5 py-2.5 bg-primary text-primary-foreground font-medium rounded-lg hover:opacity-90 transition-opacity w-full sm:w-auto shadow-sm\">\n                        Get Tickets\n                      </button>\n                    </div>\n                  )}\n                </motion.div>\n              </div>\n            </motion.div>\n          </div>\n        )}\n      </AnimatePresence>\n    </>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "expandable-event-card-base",
      "type": "registry:component",
      "title": "Expandable Event Card (base)",
      "description": "Theme-ready base variant of A stylish animated card that expands to a full-screen modal, perfect for showcasing events, concerts, or featured destinations..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/expandable-event-card.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\ninterface ExpandableCardProps {\n  imageSrc?: string;\n  title?: string;\n  description?: string;\n  content?: React.ReactNode;\n}\n\nexport default function ExpandableEventCard({\n  imageSrc = \"https://assets.watermelon.sh/event.avif\",\n  title = \"Neon Nights Festival\",\n  description = \"Experience the ultimate electronic music festival with top DJs and immersive visual arts.\",\n  content\n}: ExpandableCardProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const layoutId = `expandable-event-card-${title}`;\n\n  return (\n    <>\n      <motion.div\n        layoutId={layoutId}\n        onClick={() => setIsOpen(true)}\n        className=\"cursor-pointer overflow-hidden rounded-xl bg-card border border-border hover:border-primary/30 transition-colors group shadow-sm theme-injected\"\n      >\n        <motion.div layoutId={`image-container-${layoutId}`} className=\"relative h-48 w-full overflow-hidden\">\n          <motion.img \n            layoutId={`image-${layoutId}`} \n            src={imageSrc} \n            className=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\" \n          />\n        </motion.div>\n        <div className=\"p-4 sm:p-5\">\n          <motion.h3 layoutId={`title-${layoutId}`} className=\"text-base font-medium tracking-tight text-foreground mb-1\">{title}</motion.h3>\n          <motion.p layoutId={`desc-${layoutId}`} className=\"text-muted-foreground text-xs tracking-wide line-clamp-2\">{description}</motion.p>\n        </div>\n      </motion.div>\n\n      <AnimatePresence>\n        {isOpen && (\n          <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-8\">\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsOpen(false)}\n              className=\"absolute inset-0 bg-background/80 backdrop-blur-md\"\n            />\n            <motion.div\n              layoutId={layoutId}\n              className=\"relative w-full max-w-2xl bg-card rounded-2xl overflow-hidden border border-border z-10 flex flex-col shadow-xl\"\n            >\n              <button \n                onClick={() => setIsOpen(false)} \n                className=\"absolute top-4 right-4 z-20 flex h-8 w-8 items-center justify-center bg-background/50 hover:bg-accent rounded-full border border-border text-foreground transition-colors backdrop-blur-sm\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n              </button>\n              \n              <motion.div layoutId={`image-container-${layoutId}`} className=\"relative h-64 sm:h-80 w-full overflow-hidden shrink-0\">\n                <motion.img \n                  layoutId={`image-${layoutId}`} \n                  src={imageSrc} \n                  className=\"w-full h-full object-cover\" \n                />\n              </motion.div>\n              \n              <div className=\"p-6 sm:p-8 overflow-y-auto custom-scrollbar\">\n                <motion.h3 layoutId={`title-${layoutId}`} className=\"text-xl sm:text-2xl font-semibold tracking-tight text-foreground mb-2\">{title}</motion.h3>\n                <motion.p layoutId={`desc-${layoutId}`} className=\"text-primary text-xs font-medium tracking-wide uppercase mb-6\">{description}</motion.p>\n                <motion.div \n                  initial={{ opacity: 0, y: 20, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, y: 10, filter: 'blur(4px)' }}\n                  transition={{ type: \"spring\", duration: 0.3, bounce: 0, delay: 0.1 }}\n                  className=\"text-foreground/80 text-sm leading-relaxed\"\n                >\n                  {content || (\n                    <div className=\"space-y-4\">\n                      <p>Join us for three unforgettable nights of pulsating beats and breathtaking light shows. The Neon Nights Festival brings together the best electronic music artists from around the globe.</p>\n                      <h4 className=\"text-foreground font-semibold mt-6 mb-2 tracking-tight\">Event Details:</h4>\n                      <ul className=\"list-disc pl-5 space-y-2 text-muted-foreground\">\n                        <li>Dates: August 15-17, 2026</li>\n                        <li>Location: Downtown Arena</li>\n                        <li>Age Restriction: 18+ only</li>\n                      </ul>\n                      <button className=\"mt-6 px-5 py-2.5 bg-primary text-primary-foreground font-medium rounded-lg hover:opacity-90 transition-opacity w-full sm:w-auto shadow-sm\">\n                        Get Tickets\n                      </button>\n                    </div>\n                  )}\n                </motion.div>\n              </div>\n            </motion.div>\n          </div>\n        )}\n      </AnimatePresence>\n    </>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "expandable-profile-card",
      "type": "registry:component",
      "title": "Expandable Profile Card",
      "description": "An elegant animated card that expands to a detailed side-by-side view, perfect for profile cards.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/expandable-profile-card.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\ninterface ExpandableCardProps {\n  imageSrc?: string;\n  title?: string;\n  subtitle?: string;\n  content?: React.ReactNode;\n}\n\nexport default function ExpandableProfileCard({\n  imageSrc = \"https://images.unsplash.com/photo-1558655146-d09347e92766?auto=format&fit=crop&q=80&w=1000\",\n  title = \"Jane Doe\",\n  subtitle = \"Senior UX Designer\",\n  content\n}: ExpandableCardProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const layoutId = `expandable-profile-card-${title}`;\n\n  return (\n    <>\n      <motion.div\n        layoutId={layoutId}\n        onClick={() => setIsOpen(true)}\n        className=\"cursor-pointer relative h-64 w-100 overflow-hidden rounded-xl border border-border group shadow-sm\"\n        whileHover=\"hover\"\n      >\n        <motion.img \n          layoutId={`image-${layoutId}`} \n          src={imageSrc} \n          className=\"absolute inset-0 h-full w-full object-cover\" \n          variants={{\n            hover: { scale: 1.05 }\n          }}\n        />\n        <div className=\"absolute inset-0 bg-linear-to-t from-black/80 via-black/20 to-transparent opacity-80 group-hover:opacity-100 transition-opacity\" />\n        \n        <div className=\"absolute bottom-0 left-0 p-5 sm:p-6 w-full translate-y-4 group-hover:translate-y-0 transition-transform duration-300\">\n          <motion.p layoutId={`subtitle-${layoutId}`} className=\"text-primary text-xs font-medium tracking-wide uppercase mb-1.5\">{subtitle}</motion.p>\n          <motion.h3 layoutId={`title-${layoutId}`} className=\"text-lg sm:text-xl font-semibold tracking-tight text-foreground\">{title}</motion.h3>\n        </div>\n      </motion.div>\n\n      <AnimatePresence>\n        {isOpen && (\n          <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsOpen(false)}\n              className=\"absolute inset-0 bg-background/80 backdrop-blur-md\"\n            />\n            <motion.div\n              layoutId={layoutId}\n              className=\"relative w-full max-w-4xl h-[80vh] bg-card rounded-2xl overflow-hidden border border-border z-10 flex flex-col md:flex-row shadow-xl\"\n            >\n              <button \n                onClick={() => setIsOpen(false)} \n                className=\"absolute top-4 right-4 z-20 flex h-8 w-8 items-center justify-center bg-background/50 hover:bg-accent rounded-full border border-border text-foreground transition-colors backdrop-blur-sm\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n              </button>\n              \n              <div className=\"relative h-64 w-full shrink-0 overflow-hidden md:h-full md:w-1/2\">\n                <motion.img \n                  layoutId={`image-${layoutId}`} \n                  src={imageSrc} \n                  className=\"h-full w-full object-cover\" \n                />\n                <div className=\"absolute inset-0 bg-linear-to-t from-black/60 to-transparent md:hidden\" />\n              </div>\n              \n              <div className=\"p-6 sm:p-8 w-full md:w-1/2 flex flex-col h-full overflow-y-auto custom-scrollbar\">\n                <motion.p layoutId={`subtitle-${layoutId}`} className=\"text-primary text-xs font-medium tracking-wide uppercase mb-3\">{subtitle}</motion.p>\n                <motion.h3 layoutId={`title-${layoutId}`} className=\"text-2xl sm:text-3xl font-semibold tracking-tight text-foreground mb-6 pb-4 border-b border-border\">{title}</motion.h3>\n                \n                <motion.div \n                  initial={{ opacity: 0, x: 20 }}\n                  animate={{ opacity: 1, x: 0 }}\n                  exit={{ opacity: 0, x: 10 }}\n                  transition={{ delay: 0.2 }}\n                  className=\"text-foreground/80 text-sm leading-relaxed grow\"\n                >\n                  {content || (\n                    <div className=\"flex flex-col gap-6\">\n                      <p>A passionate UX/UI designer with over 8 years of experience creating intuitive digital products. I specialize in bridging the gap between complex systems and user-friendly interfaces.</p>\n                      \n                      <div>\n                        <h4 className=\"text-foreground font-semibold tracking-tight mb-2\">Background</h4>\n                        <p className=\"text-muted-foreground\">Previously led design teams at top fintech startups, focusing on accessibility, seamless transactions, and inclusive design.</p>\n                      </div>\n\n                      <div>\n                        <h4 className=\"text-foreground font-semibold tracking-tight mb-2\">Current Focus</h4>\n                        <p className=\"text-muted-foreground\">Currently exploring the intersection of AI and user experience, building tools that empower creators and simplify daily workflows.</p>\n                      </div>\n                      \n                      <button className=\"mt-4 px-5 py-2.5 bg-primary text-primary-foreground font-medium rounded-lg hover:opacity-90 transition-opacity self-start shadow-sm\">\n                        Connect with Jane\n                      </button>\n                    </div>\n                  )}\n                </motion.div>\n              </div>\n            </motion.div>\n          </div>\n        )}\n      </AnimatePresence>\n    </>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "expandable-profile-card-base",
      "type": "registry:component",
      "title": "Expandable Profile Card (base)",
      "description": "Theme-ready base variant of An elegant animated card that expands to a detailed side-by-side view, perfect for profile cards..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/expandable-profile-card.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\ninterface ExpandableCardProps {\n  imageSrc?: string;\n  title?: string;\n  subtitle?: string;\n  content?: React.ReactNode;\n}\n\nexport default function ExpandableProfileCard({\n  imageSrc = \"https://images.unsplash.com/photo-1558655146-d09347e92766?auto=format&fit=crop&q=80&w=1000\",\n  title = \"Jane Doe\",\n  subtitle = \"Senior UX Designer\",\n  content\n}: ExpandableCardProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const layoutId = `expandable-profile-card-${title}`;\n\n  return (\n    <>\n      <motion.div\n        layoutId={layoutId}\n        onClick={() => setIsOpen(true)}\n        className=\"cursor-pointer relative h-64 w-100 overflow-hidden rounded-xl border border-border group shadow-sm\"\n        whileHover=\"hover\"\n      >\n        <motion.img \n          layoutId={`image-${layoutId}`} \n          src={imageSrc} \n          className=\"absolute inset-0 h-full w-full object-cover\" \n          variants={{\n            hover: { scale: 1.05 }\n          }}\n        />\n        <div className=\"absolute inset-0 bg-linear-to-t from-black/80 via-black/20 to-transparent opacity-80 group-hover:opacity-100 transition-opacity\" />\n        \n        <div className=\"absolute bottom-0 left-0 p-5 sm:p-6 w-full translate-y-4 group-hover:translate-y-0 transition-transform duration-300\">\n          <motion.p layoutId={`subtitle-${layoutId}`} className=\"text-primary text-xs font-medium tracking-wide uppercase mb-1.5\">{subtitle}</motion.p>\n          <motion.h3 layoutId={`title-${layoutId}`} className=\"text-lg sm:text-xl font-semibold tracking-tight text-foreground\">{title}</motion.h3>\n        </div>\n      </motion.div>\n\n      <AnimatePresence>\n        {isOpen && (\n          <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsOpen(false)}\n              className=\"absolute inset-0 bg-background/80 backdrop-blur-md\"\n            />\n            <motion.div\n              layoutId={layoutId}\n              className=\"relative w-full max-w-4xl h-[80vh] bg-card rounded-2xl overflow-hidden border border-border z-10 flex flex-col md:flex-row shadow-xl\"\n            >\n              <button \n                onClick={() => setIsOpen(false)} \n                className=\"absolute top-4 right-4 z-20 flex h-8 w-8 items-center justify-center bg-background/50 hover:bg-accent rounded-full border border-border text-foreground transition-colors backdrop-blur-sm\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n              </button>\n              \n              <div className=\"relative h-64 w-full shrink-0 overflow-hidden md:h-full md:w-1/2\">\n                <motion.img \n                  layoutId={`image-${layoutId}`} \n                  src={imageSrc} \n                  className=\"h-full w-full object-cover\" \n                />\n                <div className=\"absolute inset-0 bg-linear-to-t from-black/60 to-transparent md:hidden\" />\n              </div>\n              \n              <div className=\"p-6 sm:p-8 w-full md:w-1/2 flex flex-col h-full overflow-y-auto custom-scrollbar\">\n                <motion.p layoutId={`subtitle-${layoutId}`} className=\"text-primary text-xs font-medium tracking-wide uppercase mb-3\">{subtitle}</motion.p>\n                <motion.h3 layoutId={`title-${layoutId}`} className=\"text-2xl sm:text-3xl font-semibold tracking-tight text-foreground mb-6 pb-4 border-b border-border\">{title}</motion.h3>\n                \n                <motion.div \n                  initial={{ opacity: 0, x: 20 }}\n                  animate={{ opacity: 1, x: 0 }}\n                  exit={{ opacity: 0, x: 10 }}\n                  transition={{ delay: 0.2 }}\n                  className=\"text-foreground/80 text-sm leading-relaxed grow\"\n                >\n                  {content || (\n                    <div className=\"flex flex-col gap-6\">\n                      <p>A passionate UX/UI designer with over 8 years of experience creating intuitive digital products. I specialize in bridging the gap between complex systems and user-friendly interfaces.</p>\n                      \n                      <div>\n                        <h4 className=\"text-foreground font-semibold tracking-tight mb-2\">Background</h4>\n                        <p className=\"text-muted-foreground\">Previously led design teams at top fintech startups, focusing on accessibility, seamless transactions, and inclusive design.</p>\n                      </div>\n\n                      <div>\n                        <h4 className=\"text-foreground font-semibold tracking-tight mb-2\">Current Focus</h4>\n                        <p className=\"text-muted-foreground\">Currently exploring the intersection of AI and user experience, building tools that empower creators and simplify daily workflows.</p>\n                      </div>\n                      \n                      <button className=\"mt-4 px-5 py-2.5 bg-primary text-primary-foreground font-medium rounded-lg hover:opacity-90 transition-opacity self-start shadow-sm\">\n                        Connect with Jane\n                      </button>\n                    </div>\n                  )}\n                </motion.div>\n              </div>\n            </motion.div>\n          </div>\n        )}\n      </AnimatePresence>\n    </>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "extended-toolbar",
      "type": "registry:component",
      "title": "Extended Toolbar",
      "description": "A responsive extended toolbar component that enhances usability with smooth micro-interactions, contextual actions, and instant visual feedback for quick and confident user interactions.",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/extended-toolbar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { type FC, useState, forwardRef } from 'react';\nimport { motion, type Transition } from 'framer-motion';\nimport useMeasure from 'react-use-measure';\nimport { ChevronRight } from 'lucide-react';\nimport {\n  BsChatLeftFill,\n  BsFillArchiveFill,\n  BsFillInboxFill,\n  BsFillPinAngleFill,\n  BsTrash3Fill,\n} from 'react-icons/bs';\nimport { IoImage } from 'react-icons/io5';\nimport { PiShareFatFill } from 'react-icons/pi';\nimport { AiFillTag } from 'react-icons/ai';\nimport type { IconType } from 'react-icons';\n\ninterface ToolbarItem {\n  icon: IconType;\n  label: string;\n}\n\ninterface ExtendedToolbarProps {\n  primaryItems?: ToolbarItem[];\n  secondaryItems?: ToolbarItem[];\n}\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 240,\n  damping: 24,\n  mass: 1.2,\n};\n\nconst DEFAULT_PRIMARY: ToolbarItem[] = [\n  { icon: BsFillInboxFill, label: 'Inbox' },\n  { icon: BsChatLeftFill, label: 'Chat' },\n  { icon: BsFillPinAngleFill, label: 'Pin' },\n  { icon: AiFillTag, label: 'Tag' },\n];\n\nconst DEFAULT_SECONDARY: ToolbarItem[] = [\n  { icon: IoImage, label: 'Image' },\n  { icon: BsFillArchiveFill, label: 'Archive' },\n  { icon: PiShareFatFill, label: 'Share' },\n  { icon: BsTrash3Fill, label: 'Delete' },\n];\nconst SIDE_PADDING = 8;\nexport const ExtendedToolbar: FC<ExtendedToolbarProps> = ({\n  primaryItems = DEFAULT_PRIMARY,\n  secondaryItems = DEFAULT_SECONDARY,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const [primaryRef, primaryBounds] = useMeasure({ offsetSize: true });\n  const [secondaryRef, secondaryBounds] = useMeasure({ offsetSize: true });\n  const [toggleRef, toggleBounds] = useMeasure({ offsetSize: true });\n\n  const currentWidth = isExpanded\n    ? secondaryBounds.width + toggleBounds.width + SIDE_PADDING\n    : primaryBounds.width + toggleBounds.width + SIDE_PADDING;\n\n  return (\n    <div className=\"flex items-center justify-center\">\n      <motion.div\n        animate={{\n          width: currentWidth > 0 ? currentWidth : 'auto',\n        }}\n        transition={springConfig}\n        className=\"relative overflow-hidden rounded-full border border-white/40 bg-neutral-100 py-2 dark:border-white/10 dark:bg-neutral-900\"\n      >\n        <motion.div\n          animate={{\n            x: isExpanded ? -(primaryBounds.width - SIDE_PADDING) : 0,\n          }}\n          transition={springConfig}\n          className=\"flex h-full items-center\"\n        >\n          <div\n            ref={primaryRef}\n            className=\"flex shrink-0 items-center gap-4 pr-2 pl-4\"\n          >\n            {primaryItems.map((item, i) => (\n              <ToolbarIcon\n                key={`p-${i}`}\n                icon={item.icon}\n                active={!isExpanded}\n              />\n            ))}\n          </div>\n\n          <ToggleButton\n            ref={toggleRef}\n            isOpen={isExpanded}\n            onClick={() => setIsExpanded(!isExpanded)}\n          />\n\n          <div\n            ref={secondaryRef}\n            className=\"flex shrink-0 items-center gap-4 pr-4 pl-2\"\n          >\n            {secondaryItems.map((item, i) => (\n              <ToolbarIcon\n                key={`s-${i}`}\n                icon={item.icon}\n                active={isExpanded}\n              />\n            ))}\n          </div>\n        </motion.div>\n      </motion.div>\n    </div>\n  );\n};\n\nconst ToolbarIcon = ({\n  icon: Icon,\n  active,\n}: {\n  icon: IconType;\n  active: boolean;\n}) => (\n  <motion.div\n    initial={false}\n    animate={{\n      opacity: active ? 1 : 0,\n      filter: active ? 'blur(0px)' : 'blur(4px)',\n    }}\n    transition={{ duration: 0.2 }}\n  >\n    <Icon className=\"size-5 text-neutral-500\" />\n  </motion.div>\n);\n\ninterface ToggleButtonProps {\n  isOpen: boolean;\n  onClick: () => void;\n}\n\nconst ToggleButton = forwardRef<HTMLDivElement, ToggleButtonProps>(\n  ({ isOpen, onClick }, ref) => (\n    <div\n      ref={ref}\n      onClick={onClick}\n      className=\"z-10 flex shrink-0 cursor-pointer items-center justify-center rounded-full bg-white p-2 transition-transform active:scale-95 dark:bg-neutral-800\"\n    >\n      <motion.div\n        initial={false}\n        animate={{ rotate: isOpen ? 180 : 0 }}\n        transition={springConfig}\n      >\n        <ChevronRight\n          size={18}\n          className=\"text-neutral-600 dark:text-neutral-300\"\n        />\n      </motion.div>\n    </div>\n  ),\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "extended-toolbar-base",
      "type": "registry:component",
      "title": "Extended Toolbar (base)",
      "description": "Theme-ready base variant of A responsive extended toolbar component that enhances usability with smooth micro-interactions, contextual actions, and instant visual feedback for quick and confident user interactions..",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/extended-toolbar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { type FC, useState, forwardRef } from 'react';\nimport { motion, type Transition } from 'framer-motion';\nimport useMeasure from 'react-use-measure';\nimport { ChevronRight } from 'lucide-react';\nimport {\n  BsChatLeftFill,\n  BsFillArchiveFill,\n  BsFillInboxFill,\n  BsFillPinAngleFill,\n  BsTrash3Fill,\n} from 'react-icons/bs';\nimport { IoImage } from 'react-icons/io5';\nimport { PiShareFatFill } from 'react-icons/pi';\nimport { AiFillTag } from 'react-icons/ai';\nimport type { IconType } from 'react-icons';\n\ninterface ToolbarItem {\n  icon: IconType;\n  label: string;\n}\n\ninterface ExtendedToolbarProps {\n  primaryItems?: ToolbarItem[];\n  secondaryItems?: ToolbarItem[];\n}\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 240,\n  damping: 24,\n  mass: 1.2,\n};\n\nconst DEFAULT_PRIMARY: ToolbarItem[] = [\n  { icon: BsFillInboxFill, label: 'Inbox' },\n  { icon: BsChatLeftFill, label: 'Chat' },\n  { icon: BsFillPinAngleFill, label: 'Pin' },\n  { icon: AiFillTag, label: 'Tag' },\n];\n\nconst DEFAULT_SECONDARY: ToolbarItem[] = [\n  { icon: IoImage, label: 'Image' },\n  { icon: BsFillArchiveFill, label: 'Archive' },\n  { icon: PiShareFatFill, label: 'Share' },\n  { icon: BsTrash3Fill, label: 'Delete' },\n];\nconst SIDE_PADDING = 8;\nexport const ExtendedToolbar: FC<ExtendedToolbarProps> = ({\n  primaryItems = DEFAULT_PRIMARY,\n  secondaryItems = DEFAULT_SECONDARY,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const [primaryRef, primaryBounds] = useMeasure({ offsetSize: true });\n  const [secondaryRef, secondaryBounds] = useMeasure({ offsetSize: true });\n  const [toggleRef, toggleBounds] = useMeasure({ offsetSize: true });\n\n  const currentWidth = isExpanded\n    ? secondaryBounds.width + toggleBounds.width + SIDE_PADDING\n    : primaryBounds.width + toggleBounds.width + SIDE_PADDING;\n\n  return (\n    <div className=\"theme-injected flex items-center justify-center font-sans\">\n      <motion.div\n        animate={{\n          width: currentWidth > 0 ? currentWidth : 'auto',\n        }}\n        transition={springConfig}\n        className=\"relative overflow-hidden rounded-3xl border border-border bg-card py-2\"\n      >\n        <motion.div\n          animate={{\n            x: isExpanded ? -(primaryBounds.width - SIDE_PADDING) : 0,\n          }}\n          transition={springConfig}\n          className=\"flex h-full items-center\"\n        >\n          <div\n            ref={primaryRef}\n            className=\"flex shrink-0 items-center gap-4 pr-2 pl-4\"\n          >\n            {primaryItems.map((item, i) => (\n              <ToolbarIcon\n                key={`p-${i}`}\n                icon={item.icon}\n                active={!isExpanded}\n              />\n            ))}\n          </div>\n\n          <ToggleButton\n            ref={toggleRef}\n            isOpen={isExpanded}\n            onClick={() => setIsExpanded(!isExpanded)}\n          />\n\n          <div\n            ref={secondaryRef}\n            className=\"flex shrink-0 items-center gap-4 pr-4 pl-2\"\n          >\n            {secondaryItems.map((item, i) => (\n              <ToolbarIcon\n                key={`s-${i}`}\n                icon={item.icon}\n                active={isExpanded}\n              />\n            ))}\n          </div>\n        </motion.div>\n      </motion.div>\n    </div>\n  );\n};\n\nconst ToolbarIcon = ({\n  icon: Icon,\n  active,\n}: {\n  icon: IconType;\n  active: boolean;\n}) => (\n  <motion.div\n    initial={false}\n    animate={{\n      opacity: active ? 1 : 0,\n      filter: active ? 'blur(0px)' : 'blur(4px)',\n    }}\n    transition={{ duration: 0.2 }}\n  >\n    <Icon className=\"size-5 text-muted-foreground\" />\n  </motion.div>\n);\n\ninterface ToggleButtonProps {\n  isOpen: boolean;\n  onClick: () => void;\n}\n\nconst ToggleButton = forwardRef<HTMLDivElement, ToggleButtonProps>(\n  ({ isOpen, onClick }, ref) => (\n    <div\n      ref={ref}\n      onClick={onClick}\n      className=\"z-10 flex shrink-0 cursor-pointer items-center justify-center rounded-3xl bg-background p-2 transition-transform active:scale-95\"\n    >\n      <motion.div\n        initial={false}\n        animate={{ rotate: isOpen ? 180 : 0 }}\n        transition={springConfig}\n      >\n        <ChevronRight\n          size={18}\n          className=\"text-muted-foreground\"\n        />\n      </motion.div>\n    </div>\n  ),\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "family-receive-button",
      "type": "registry:component",
      "title": "Family Receive Button",
      "description": "Features a toggle button that transforms into a full confirmation modal with backdrop blur and elegant motion design.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/family-receive-button.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  LayoutGroup,\n  type Transition,\n} from 'motion/react';\nimport { X, Fingerprint } from 'lucide-react';\n\nexport interface FamilyReceiveComponentProps {\n  triggerLabel?: string;\n  title?: string;\n  description?: string;\n  confirmLabel?: string;\n  cancelLabel?: string;\n  onConfirm?: () => void;\n  icon?: React.ReactNode;\n}\n\nconst springTransition: Transition = {\n  type: 'spring',\n  bounce: 0,\n  duration: 0.4,\n};\n\nexport const FamilyReceiveComponent: React.FC<FamilyReceiveComponentProps> = ({\n  triggerLabel = 'Receive',\n  title = 'Confirm',\n  description = 'Are you sure you want to receive hell load of money?',\n  confirmLabel = 'Receive',\n  cancelLabel = 'Cancel',\n  onConfirm,\n  icon,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <div className=\"relative flex h-[400px] w-[320px] max-w-full items-center justify-center md:w-[520px]\">\n      <LayoutGroup>\n        <AnimatePresence>\n          {!isOpen && (\n            <motion.button\n              key=\"trigger\"\n              layoutId=\"action-button\"\n              onClick={() => setIsOpen(true)}\n              className=\"relative h-12 w-64 cursor-pointer rounded-full bg-[#00A6F4] text-lg font-medium text-white shadow-lg md:h-14 md:w-96 md:text-xl\"\n              whileTap={{ scale: 0.95 }}\n              transition={springTransition}\n            >\n              {triggerLabel}\n            </motion.button>\n          )}\n        </AnimatePresence>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              key=\"overlay\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"absolute inset-0 z-10 flex items-center justify-center px-4\"\n            >\n              <motion.div\n                initial={{ y: 100, opacity: 0, scale: 0.98 }}\n                animate={{ y: 0, opacity: 1, scale: 1 }}\n                exit={{ y: 100, opacity: 0, scale: 0.98 }}\n                transition={springTransition}\n                className=\"relative w-[280px] max-w-full overflow-hidden rounded-[24px] border border-zinc-200 bg-white p-5 text-zinc-900 shadow-2xl md:w-[520px] md:rounded-[32px] md:p-6 dark:border-white/5 dark:bg-[#080808] dark:text-white\"\n              >\n                <button\n                  onClick={() => setIsOpen(false)}\n                  className=\"absolute top-5 right-5 text-zinc-400 transition-colors hover:text-zinc-950 dark:text-zinc-500 dark:hover:text-white\"\n                >\n                  <X size={24} />\n                </button>\n\n                <div className=\"mb-4 flex items-center gap-3\">\n                  <div className=\"flex h-8 w-8 items-center justify-center rounded-sm bg-zinc-100 md:h-10 md:w-10 dark:bg-white/10\">\n                    {icon ?? (\n                      <Fingerprint size={28} className=\"text-[#00A6F4]\" />\n                    )}\n                  </div>\n                  <h2 className=\"text-xl font-semibold text-zinc-900 md:text-2xl dark:text-white\">\n                    {title}\n                  </h2>\n                </div>\n\n                <p className=\"my-4 max-w-xs text-lg font-semibold text-zinc-500 md:my-6 md:text-xl dark:text-[#727373]\">\n                  {description}\n                </p>\n\n                <div className=\"flex gap-3\">\n                  <button\n                    onClick={() => setIsOpen(false)}\n                    className=\"h-11 flex-1 rounded-full bg-zinc-100 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-200 md:h-13 md:text-lg dark:bg-[#121212] dark:text-gray-300 dark:hover:bg-[#1a1a1a]\"\n                  >\n                    {cancelLabel}\n                  </button>\n\n                  <motion.button\n                    layoutId=\"action-button\"\n                    onClick={() => {\n                      onConfirm?.();\n                      setIsOpen(false);\n                    }}\n                    className=\"h-11 flex-1 cursor-pointer rounded-full bg-[#00A6F4] text-sm font-medium text-white hover:bg-[#0095db] md:h-13 md:text-lg\"\n                    transition={springTransition}\n                  >\n                    {confirmLabel}\n                  </motion.button>\n                </div>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </LayoutGroup>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "family-receive-button-base",
      "type": "registry:component",
      "title": "Family Receive Button (base)",
      "description": "Theme-ready base variant of Features a toggle button that transforms into a full confirmation modal with backdrop blur and elegant motion design..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/family-receive-button.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  LayoutGroup,\n  type Transition,\n} from 'motion/react';\nimport { X, Fingerprint } from 'lucide-react';\n\nexport interface FamilyReceiveComponentProps {\n  triggerLabel?: string;\n  title?: string;\n  description?: string;\n  confirmLabel?: string;\n  cancelLabel?: string;\n  onConfirm?: () => void;\n  icon?: React.ReactNode;\n}\n\nconst springTransition: Transition = {\n  type: 'spring',\n  bounce: 0,\n  duration: 0.4,\n};\n\nexport const FamilyReceiveComponent: React.FC<FamilyReceiveComponentProps> = ({\n  triggerLabel = 'Receive',\n  title = 'Confirm',\n  description = 'Are you sure you want to receive hell load of money?',\n  confirmLabel = 'Receive',\n  cancelLabel = 'Cancel',\n  onConfirm,\n  icon,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <div className=\"theme-injected relative flex h-[400px] w-[320px] max-w-full items-center justify-center md:w-[520px]\">\n      <LayoutGroup>\n        <AnimatePresence>\n          {!isOpen && (\n            <motion.button\n              key=\"trigger\"\n              layoutId=\"action-button\"\n              onClick={() => setIsOpen(true)}\n              className=\"bg-primary text-primary-foreground relative h-12 w-64 cursor-pointer rounded-lg text-lg font-medium shadow-lg md:h-14 md:w-96 md:text-xl\"\n              whileTap={{ scale: 0.95 }}\n              transition={springTransition}\n            >\n              {triggerLabel}\n            </motion.button>\n          )}\n        </AnimatePresence>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              key=\"overlay\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"absolute inset-0 z-10 flex items-center justify-center px-4 backdrop-blur-sm\"\n            >\n              <motion.div\n                initial={{ y: 100, opacity: 0, scale: 0.98 }}\n                animate={{ y: 0, opacity: 1, scale: 1 }}\n                exit={{ y: 100, opacity: 0, scale: 0.98 }}\n                transition={springTransition}\n                className=\"border-border bg-card text-card-foreground relative w-[280px] max-w-full overflow-hidden rounded-sm border p-5 md:w-[520px] md:p-6\"\n              >\n                <button\n                  onClick={() => setIsOpen(false)}\n                  className=\"text-muted-foreground hover:text-foreground absolute top-5 right-5\"\n                >\n                  <X size={24} />\n                </button>\n\n                <div className=\"mb-4 flex items-center gap-3\">\n                  <div className=\"bg-primary/10 text-primary flex h-8 w-8 items-center justify-center rounded-sm md:h-10 md:w-10\">\n                    {icon ?? <Fingerprint size={28} />}\n                  </div>\n                  <h2 className=\"text-card-foreground text-xl font-semibold md:text-2xl\">\n                    {title}\n                  </h2>\n                </div>\n\n                <p className=\"text-muted-foreground my-4 max-w-xs text-lg font-semibold md:my-6 md:text-xl\">\n                  {description}\n                </p>\n\n                <div className=\"flex gap-3\">\n                  <button\n                    onClick={() => setIsOpen(false)}\n                    className=\"bg-muted text-muted-foreground hover:bg-muted/90 h-11 flex-1 rounded-lg text-base font-medium md:h-13 md:text-lg\"\n                  >\n                    {cancelLabel}\n                  </button>\n\n                  <motion.button\n                    layoutId=\"action-button\"\n                    onClick={() => {\n                      onConfirm?.();\n                      setIsOpen(false);\n                    }}\n                    className=\"bg-primary text-primary-foreground hover:bg-primary/90 h-11 flex-1 cursor-pointer rounded-lg text-base font-medium md:h-13 md:text-lg\"\n                    transition={springTransition}\n                  >\n                    {confirmLabel}\n                  </motion.button>\n                </div>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </LayoutGroup>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "family-wallet",
      "type": "registry:component",
      "title": "Family Wallet",
      "description": "An animated wallet interface inspired by family account interactions with smooth card transitions.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/family-wallet.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect, type SVGProps } from 'react';\nimport useMeasure from 'react-use-measure';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport {\n  Drawer,\n  DrawerContent,\n  DrawerOverlay,\n  DrawerPortal,\n  DrawerClose,\n} from '@/components/ui/drawer';\n\nimport {\n  ChevronLeft,\n  X,\n  ArrowRight,\n  Fingerprint,\n  Github,\n  Chrome,\n  Twitter,\n} from 'lucide-react';\n\nimport { BsWallet2 } from 'react-icons/bs';\nimport { FaApple, FaDiscord } from 'react-icons/fa6';\n\n/* ---------------- ENUMS ---------------- */\n\nconst View = {\n  SIGN_IN: 'SIGN_IN',\n  PASSKEY: 'PASSKEY',\n  CONNECT_WALLET: 'CONNECT_WALLET',\n} as const;\n\ntype View = (typeof View)[keyof typeof View];\n\nconst TABS = [\n  { id: 'email', label: 'Email' },\n  { id: 'phone', label: 'Phone' },\n  { id: 'passkey', label: 'Passkey' },\n];\n\nconst MetaMask = (props: SVGProps<SVGSVGElement>) => (\n  <svg\n    {...props}\n    xmlSpace=\"preserve\"\n    id=\"metamask__Layer_1\"\n    x=\"0\"\n    y=\"0\"\n    version=\"1.1\"\n    viewBox=\"0 0 318.6 318.6\"\n  >\n    <path\n      fill=\"#e2761b\"\n      stroke=\"#e2761b\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m274.1 35.5-99.5 73.9L193 65.8z\"\n    />\n    <path d=\"m44.4 35.5 98.7 74.6-17.5-44.3zm193.9 171.3-26.5 40.6 56.7 15.6 16.3-55.3zm-204.4.9L50.1 263l56.7-15.6-26.5-40.6z\" />\n    <path d=\"m103.6 138.2-15.8 23.9 56.3 2.5-2-60.5zm111.3 0-39-34.8-1.3 61.2 56.2-2.5zM106.8 247.4l33.8-16.5-29.2-22.8zm71.1-16.5 33.9 16.5-4.7-39.3z\" />\n    <path\n      fill=\"#d7c1b3\"\n      stroke=\"#d7c1b3\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m211.8 247.4-33.9-16.5 2.7 22.1-.3 9.3zm-105 0 31.5 14.9-.2-9.3 2.5-22.1z\"\n    />\n    <path\n      fill=\"#233447\"\n      stroke=\"#233447\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m138.8 193.5-28.2-8.3 19.9-9.1zm40.9 0 8.3-17.4 20 9.1z\"\n    />\n    <path\n      fill=\"#cd6116\"\n      stroke=\"#cd6116\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m106.8 247.4 4.8-40.6-31.3.9zM207 206.8l4.8 40.6 26.5-39.7zm23.8-44.7-56.2 2.5 5.2 28.9 8.3-17.4 20 9.1zm-120.2 23.1 20-9.1 8.2 17.4 5.3-28.9-56.3-2.5z\"\n    />\n    <path\n      fill=\"#e4751f\"\n      stroke=\"#e4751f\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m87.8 162.1 23.6 46-.8-22.9zm120.3 23.1-1 22.9 23.7-46zm-64-20.6-5.3 28.9 6.6 34.1 1.5-44.9zm30.5 0-2.7 18 1.2 45 6.7-34.1z\"\n    />\n    <path d=\"m179.8 193.5-6.7 34.1 4.8 3.3 29.2-22.8 1-22.9zm-69.2-8.3.8 22.9 29.2 22.8 4.8-3.3-6.6-34.1z\" />\n    <path\n      fill=\"#c0ad9e\"\n      stroke=\"#c0ad9e\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m180.3 262.3.3-9.3-2.5-2.2h-37.7l-2.3 2.2.2 9.3-31.5-14.9 11 9 22.3 15.5h38.3l22.4-15.5 11-9z\"\n    />\n    <path\n      fill=\"#161616\"\n      stroke=\"#161616\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m177.9 230.9-4.8-3.3h-27.7l-4.8 3.3-2.5 22.1 2.3-2.2h37.7l2.5 2.2z\"\n    />\n    <path\n      fill=\"#763d16\"\n      stroke=\"#763d16\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m278.3 114.2 8.5-40.8-12.7-37.9-96.2 71.4 37 31.3 52.3 15.3 11.6-13.5-5-3.6 8-7.3-6.2-4.8 8-6.1zM31.8 73.4l8.5 40.8-5.4 4 8 6.1-6.1 4.8 8 7.3-5 3.6 11.5 13.5 52.3-15.3 37-31.3-96.2-71.4z\"\n    />\n    <path d=\"m267.2 153.5-52.3-15.3 15.9 23.9-23.7 46 31.2-.4h46.5zm-163.6-15.3-52.3 15.3-17.4 54.2h46.4l31.1.4-23.6-46zm71 26.4 3.3-57.7 15.2-41.1h-67.5l15 41.1 3.5 57.7 1.2 18.2.1 44.8h27.7l.2-44.8z\" />\n  </svg>\n);\n\nconst Coinbase = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 48 48\" fill=\"none\">\n    <g clipPath=\"url(#coinbase__clip0_2_2)\">\n      <path\n        d=\"M0 11.0769C0 4.95931 4.95931 0 11.0769 0H36.9231C43.0407 0 48 4.95931 48 11.0769V36.9231C48 43.0407 43.0407 48 36.9231 48H11.0769C4.95931 48 0 43.0407 0 36.9231V11.0769Z\"\n        fill=\"#0052FF\"\n      />\n      <path\n        d=\"M23.9573 32.5C22.3527 32.4676 20.7898 31.9838 19.4487 31.1044C18.1076 30.2249 17.0427 28.9855 16.3767 27.5289C15.7108 26.0724 15.4707 24.4578 15.6842 22.8711C15.8977 21.2843 16.5561 19.79 17.5835 18.5602C18.611 17.3303 19.9658 16.4149 21.4919 15.9193C23.018 15.4237 24.6534 15.3681 26.2098 15.7589C27.7663 16.1497 29.1804 16.9709 30.2894 18.1281C31.3985 19.2853 32.1574 20.7315 32.4787 22.3H41C40.5628 17.9606 38.4703 13.9546 35.1552 11.1109C31.8402 8.26711 27.5563 6.803 23.1895 7.02133C18.8226 7.23967 14.707 9.12377 11.6937 12.284C8.68042 15.4442 7 19.6386 7 24C7 28.3613 8.68042 32.5558 11.6937 35.716C14.707 38.8762 18.8226 40.7603 23.1895 40.9787C27.5563 41.197 31.8402 39.7329 35.1552 36.8891C38.4703 34.0454 40.5628 30.0394 41 25.7H32.4787C32.4787 29.1 27.3658 32.5 23.9573 32.5Z\"\n        fill=\"white\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"coinbase__clip0_2_2\">\n        <rect width=\"48\" height=\"48\" rx=\"24\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nconst Polygon = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 36 36\">\n    <g fill=\"none\">\n      <circle fill=\"#8247E5\" cx=\"18\" cy=\"18\" r=\"18\" />\n      <path\n        d=\"M24.172 13.954c-.438-.25-1.002-.25-1.504 0l-3.509 2.068-2.38 1.316-3.447 2.068c-.439.25-1.003.25-1.504 0l-2.695-1.63a1.527 1.527 0 0 1-.752-1.315v-3.133c0-.502.25-1.003.752-1.316l2.695-1.567c.438-.25 1.002-.25 1.504 0l2.694 1.63c.439.25.752.751.752 1.315v2.068l2.381-1.378v-2.13c0-.502-.25-1.004-.752-1.317l-5.013-2.945c-.438-.25-1.002-.25-1.504 0l-5.138 3.008c-.501.25-.752.752-.752 1.253v5.89c0 .502.25 1.003.752 1.316l5.076 2.946c.438.25 1.002.25 1.504 0l3.446-2.006 2.381-1.378 3.447-2.006c.438-.25 1.002-.25 1.504 0l2.694 1.567c.439.25.752.752.752 1.316v3.133c0 .501-.25 1.003-.752 1.316l-2.632 1.567c-.438.25-1.002.25-1.504 0l-2.694-1.567a1.527 1.527 0 0 1-.752-1.316v-2.005L16.84 22.1v2.067c0 .502.25 1.003.752 1.316l5.075 2.946c.439.25 1.003.25 1.504 0l5.076-2.946c.439-.25.752-.752.752-1.316v-5.953c0-.5-.25-1.002-.752-1.316l-5.076-2.945z\"\n        fill=\"#FFF\"\n      />\n    </g>\n  </svg>\n);\n\nconst TrustWallet = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 444 501\" fill=\"none\">\n    <path\n      d=\"M0.710022 72.41L222.16 0.109985V500.63C63.98 433.89 0.710022 305.98 0.710022 233.69V72.41Z\"\n      fill=\"#0500FF\"\n    />\n    <path\n      d=\"M443.62 72.41L222.17 0.109985V500.63C380.35 433.89 443.62 305.98 443.62 233.69V72.41Z\"\n      fill=\"url(#trust__paint0_linear_3_10)\"\n    />\n    <defs>\n      <linearGradient\n        id=\"trust__paint0_linear_3_10\"\n        x1=\"385.26\"\n        y1=\"-34.78\"\n        x2=\"216.61\"\n        y2=\"493.5\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop offset=\"0.02\" stopColor=\"#0000FF\" />\n        <stop offset=\"0.08\" stopColor=\"#0094FF\" />\n        <stop offset=\"0.16\" stopColor=\"#48FF91\" />\n        <stop offset=\"0.42\" stopColor=\"#0094FF\" />\n        <stop offset=\"0.68\" stopColor=\"#0038FF\" />\n        <stop offset=\"0.9\" stopColor=\"#0500FF\" />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport default function FamilyWallet() {\n  const [open, setOpen] = useState(false);\n  const [view, setView] = useState<View>(View.SIGN_IN);\n  const [authType, setAuthType] = useState('email');\n  const [email, setEmail] = useState('');\n  const [phone, setPhone] = useState('');\n\n  const [ref, bounds] = useMeasure();\n\n  useEffect(() => {\n    if (!open) {\n      requestAnimationFrame(() => setView(View.SIGN_IN));\n    }\n  }, [open]);\n\n  const SignInView = () => (\n    <div className=\"flex flex-col gap-4\">\n      <div className=\"flex items-center justify-between\">\n        <h2 className=\"text-xl font-semibold text-zinc-900 dark:text-zinc-100\">\n          Sign In\n        </h2>\n\n        <DrawerClose asChild>\n          <button className=\"rounded-full bg-white p-2 dark:bg-zinc-800\">\n            <X className=\"h-5 w-5 text-zinc-400\" />\n          </button>\n        </DrawerClose>\n      </div>\n\n      {/* socials */}\n      <div className=\"flex flex-col gap-2\">\n        <div className=\"flex justify-between\">\n          {[Chrome, FaDiscord, Github, FaApple, Twitter].map((Icon, i) => (\n            <button\n              key={i}\n              className=\"flex items-center justify-center rounded-2xl bg-white px-4 py-3 dark:bg-zinc-800\"\n            >\n              <Icon className=\"h-6 w-6 text-black dark:text-white\" />\n            </button>\n          ))}\n        </div>\n\n        <div className=\"flex rounded-xl bg-white p-1 dark:bg-zinc-800\">\n          {TABS.map((tab) => (\n            <button\n              key={tab.id}\n              onClick={() => {\n                setAuthType(tab.id);\n              }}\n              className=\"relative flex-1 cursor-pointer rounded-lg py-2 text-sm font-medium\"\n            >\n              {tab.id === authType && (\n                <motion.div\n                  layoutId=\"active-tab\"\n                  className=\"absolute inset-0 z-0 rounded-lg bg-zinc-100 dark:bg-zinc-700/50\"\n                  transition={{\n                    type: 'spring',\n                    stiffness: 400,\n                    damping: 35,\n                  }}\n                />\n              )}\n\n              <span\n                className={`relative z-10 ${tab.id === authType\n                  ? 'text-zinc-900 dark:text-zinc-100'\n                  : 'text-zinc-500 dark:text-zinc-400'\n                  }`}\n              >\n                {tab.label}\n              </span>\n            </button>\n          ))}\n        </div>\n        <div>\n          <AnimatePresence mode=\"popLayout\">\n            {authType === 'email' && (\n              <motion.div className=\"relative flex w-full rounded-xl bg-white p-1.5 text-zinc-900 dark:bg-zinc-800 dark:text-white\">\n                <input\n                  value={email}\n                  onChange={(e) => setEmail(e.target.value)}\n                  placeholder=\"email@address.com\"\n                  className=\"text-md focus-visible:ring-none ml-2 flex-1 text-zinc-900 focus:border-0 focus:ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-none dark:text-white\"\n                />\n                <motion.button className=\"flex items-center justify-center rounded-lg bg-zinc-100 px-4 py-2 dark:bg-zinc-700/50\">\n                  <ArrowRight className=\"size-6 text-black dark:text-white\" />\n                </motion.button>\n              </motion.div>\n            )}\n            {authType === 'phone' && (\n              <motion.div className=\"relative flex w-full rounded-xl bg-white p-1.5 text-zinc-900 dark:bg-zinc-800 dark:text-white\">\n                <input\n                  value={phone}\n                  onChange={(e) => setPhone(e.target.value)}\n                  placeholder=\"+1 234 567 8900\"\n                  className=\"text-md focus-visible:ring-none ml-2 flex-1 text-zinc-900 focus:border-0 focus:ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-none dark:text-white\"\n                />\n                <motion.button className=\"flex items-center justify-center rounded-lg bg-zinc-100 px-4 py-2 dark:bg-zinc-700/50\">\n                  <ArrowRight className=\"size-6 text-black dark:text-white\" />\n                </motion.button>\n              </motion.div>\n            )}\n            {authType === 'passkey' && (\n              <motion.div className=\"relative flex w-full items-center justify-center gap-2 rounded-xl bg-white p-1.5 text-zinc-900 dark:bg-zinc-800 dark:text-white\">\n                <Fingerprint className=\"ml-1 size-6 text-zinc-900\" />\n                <input\n                  placeholder=\"Login with Passkey\"\n                  readOnly\n                  className=\"text-md focus-visible:ring-none ml-2 flex-1 text-zinc-900 focus:border-0 focus:ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-none dark:text-white\"\n                />\n                <motion.button\n                  className=\"flex items-center justify-center rounded-lg bg-blue-500 px-4 py-2\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  transition={{\n                    duration: 0.2,\n                  }}\n                  onClick={() => setView(View.PASSKEY)}\n                >\n                  <ArrowRight className=\"size-6 text-white\" />\n                </motion.button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n      <div className=\"mt-2 mb-2 flex w-full items-center justify-center\">\n        <p>OR</p>\n      </div>\n\n      <button\n        onClick={() => setView(View.CONNECT_WALLET)}\n        className=\"flex w-full items-center justify-center gap-2 rounded-full bg-blue-500 py-3 text-white\"\n      >\n        <BsWallet2 />\n        Connect Wallet\n      </button>\n    </div>\n  );\n\n  const PasskeyView = () => (\n    <div className=\"flex flex-col items-center gap-6\">\n      <div className=\"flex w-full items-center justify-between\">\n        <button\n          onClick={() => setView(View.SIGN_IN)}\n          className=\"rounded-full bg-white p-2 dark:bg-zinc-800\"\n        >\n          <ChevronLeft className=\"size-6 text-zinc-400\" />\n        </button>\n\n        <h2 className=\"text-xl font-medium text-zinc-900\">Passkey</h2>\n\n        <DrawerClose asChild>\n          <button className=\"rounded-full bg-white p-2 dark:bg-zinc-800\">\n            <X className=\"size-6 text-zinc-400\" />\n          </button>\n        </DrawerClose>\n      </div>\n      <div className=\"relative flex items-center justify-center rounded-2xl bg-white dark:bg-zinc-800 p\">\n        <div className=\"pointer-events-none absolute inset-0\">\n          <svg\n            className=\"h-full w-full\"\n            viewBox=\"0 0 100 100\"\n            preserveAspectRatio=\"none\"\n          >\n            <rect\n              x=\"1\"\n              y=\"1\"\n              width=\"98\"\n              height=\"98\"\n              rx=\"16\"\n              ry=\"16\"\n              fill=\"none\"\n              stroke=\"none\"\n\n            />\n            =\n            <motion.rect\n              x=\"1\"\n              y=\"1\"\n              width=\"98\"\n              height=\"98\"\n              rx=\"16\"\n              ry=\"16\"\n              fill=\"none\"\n              stroke=\"url(#passkey-gradient)\"\n              strokeWidth=\"2\"\n              strokeDasharray=\"80 240\"\n              animate={{ strokeDashoffset: [0, -320] }}\n              transition={{\n                duration: 2,\n                repeat: Infinity,\n                ease: 'linear',\n              }}\n            />\n            <defs>\n              <linearGradient\n                id=\"passkey-gradient\"\n                gradientUnits=\"userSpaceOnUse\"\n                x1=\"0\"\n                y1=\"0\"\n                x2=\"100\"\n                y2=\"100\"\n              >\n                <stop offset=\"0%\" stopColor=\"#3b82f6\" stopOpacity=\"0\" />\n                <stop offset=\"50%\" stopColor=\"#3b82f6\" stopOpacity=\"1\" />\n                <stop offset=\"100%\" stopColor=\"#3b82f6\" stopOpacity=\"0\" />\n              </linearGradient>\n            </defs>\n          </svg>\n        </div>\n\n        <div className=\"relative flex items-center justify-center rounded-2xl p-4\">\n          <Fingerprint className=\"h-16 w-16 text-zinc-500\" />\n        </div>\n      </div>\n\n      <div className=\"flex flex-col items-center justify-center rounded-2xl p-2\">\n        <h2 className=\"text-lg font-medium text-zinc-900 dark:text-zinc-100\">\n          Waiting for passkey\n        </h2>\n        <p className=\"text-md text-center text-zinc-500 dark:text-zinc-400\">\n          Please follow prompts to verify your passkey\n        </p>\n      </div>\n\n      <button\n        onClick={() => setView(View.SIGN_IN)}\n        className=\"w-full rounded-xl bg-blue-500 py-3 text-white cursor-pointer\"\n      >\n        Continue\n      </button>\n    </div>\n  );\n\n  const WalletView = () => (\n    <div className=\"flex flex-col gap-4\">\n      <div className=\"flex items-center justify-between\">\n        <button\n          onClick={() => setView(View.SIGN_IN)}\n          className=\"rounded-full bg-white dark:bg-zinc-800 p-2\"\n        >\n          <ChevronLeft className=\"size-6 text-zinc-400\" />\n        </button>\n\n        <h2 className=\"text-lg font-medium text-zinc-900\">Connect Wallet</h2>\n\n        <DrawerClose asChild>\n          <button className=\"rounded-full bg-white dark:bg-zinc-800  p-2\">\n            <X className=\"size-6 text-zinc-400\" />\n          </button>\n        </DrawerClose>\n      </div>\n      <div className=\"flex flex-col items-center justify-center gap-2\">\n        {[\n          { name: 'Metamask', logo: MetaMask },\n          { name: 'Coinbase', logo: Coinbase },\n          { name: 'Polygon', logo: Polygon },\n          { name: 'Trust', logo: TrustWallet },\n        ].map((wallet, i) => (\n          <button\n            key={i}\n            className=\"flex w-full items-center justify-between rounded-xl bg-white dark:bg-zinc-800 p-4 cursor-pointer\"\n            onClick={() => setView(View.SIGN_IN)}\n          >\n            <span className=\"text-zinc-900 dark:text-zinc-100\">{wallet.name}</span>\n            <div className=\"\">\n              <wallet.logo className=\"size-6\" />\n            </div>\n          </button>\n        ))}\n        <button className=\"flex w-full items-center justify-between rounded-xl bg-white dark:bg-zinc-800 p-4\">\n          <div className=\"flex items-center gap-2\">\n            <span className=\"text-zinc-900 dark:text-zinc-100\">Other Wallets</span>\n            <div className=\"rounded-full border border-zinc-200 bg-zinc-100 dark:bg-zinc-800/50  dark:border-zinc-700 px-3 text-lg\">\n              350+\n            </div>\n          </div>\n\n          <BsWallet2 className=\"size-6\" />\n        </button>\n      </div>\n\n      <div className=\"mt-2 mb-2 flex items-center justify-center gap-2 cursor-pointer\"\n        onClick={() => setView(View.SIGN_IN)}\n      >\n        <BsWallet2 className=\"size-6\" />\n        <p> I don't have wallet</p>\n      </div>\n    </div>\n  );\n\n  const renderView = () => {\n    switch (view) {\n      case View.SIGN_IN:\n        return <SignInView />;\n\n      case View.PASSKEY:\n        return <PasskeyView />;\n\n      case View.CONNECT_WALLET:\n        return <WalletView />;\n    }\n  };\n\n  return (\n    <div className=\"relative flex  items-center justify-center \">\n      <button\n        onClick={() => setOpen(true)}\n        className=\"rounded-full bg-zinc-100 px-8 py-4 font-bold dark:text-white dark:bg-zinc-800\"\n      >\n        Open Wallet\n      </button>\n\n      <Drawer open={open} onOpenChange={setOpen}>\n        <DrawerPortal>\n          <DrawerOverlay className=\"fixed inset-0 bg-black/50\" />\n\n          <DrawerContent className=\"fixed bottom-10!  w-[360px] mx-auto overflow-hidden rounded-4xl! border border-zinc-100 bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900\">\n            <motion.div\n              animate={{ height: bounds.height }}\n              transition={{\n                type: 'spring',\n                stiffness: 400,\n                damping: 30,\n              }}\n            >\n              <div ref={ref} className=\"px-6 py-4\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    key={view}\n                    initial={{ opacity: 0, y: 10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: -10 }}\n                  >\n                    {renderView()}\n                  </motion.div>\n                </AnimatePresence>\n              </div>\n            </motion.div>\n          </DrawerContent>\n        </DrawerPortal>\n      </Drawer>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "family-wallet-base",
      "type": "registry:component",
      "title": "Family Wallet (base)",
      "description": "Theme-ready base variant of An animated wallet interface inspired by family account interactions with smooth card transitions..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/family-wallet.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect, type SVGProps } from 'react';\nimport useMeasure from 'react-use-measure';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport {\n  Drawer,\n  DrawerContent,\n  DrawerOverlay,\n  DrawerPortal,\n  DrawerClose,\n} from '@/components/ui/drawer';\n\nimport {\n  ChevronLeft,\n  X,\n  ArrowRight,\n  Fingerprint,\n  Github,\n  Chrome,\n  Twitter,\n} from 'lucide-react';\n\nimport { BsWallet2 } from 'react-icons/bs';\nimport { FaApple, FaDiscord } from 'react-icons/fa6';\n\n/* ---------------- ENUMS ---------------- */\n\nconst View = {\n  SIGN_IN: 'SIGN_IN',\n  PASSKEY: 'PASSKEY',\n  CONNECT_WALLET: 'CONNECT_WALLET',\n} as const;\n\ntype View = (typeof View)[keyof typeof View];\n\nconst TABS = [\n  { id: 'email', label: 'Email' },\n  { id: 'phone', label: 'Phone' },\n  { id: 'passkey', label: 'Passkey' },\n];\n\nconst MetaMask = (props: SVGProps<SVGSVGElement>) => (\n  <svg\n    {...props}\n    xmlSpace=\"preserve\"\n    id=\"metamask__Layer_1\"\n    x=\"0\"\n    y=\"0\"\n    version=\"1.1\"\n    viewBox=\"0 0 318.6 318.6\"\n  >\n    <path\n      fill=\"#e2761b\"\n      stroke=\"#e2761b\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m274.1 35.5-99.5 73.9L193 65.8z\"\n    />\n    <path d=\"m44.4 35.5 98.7 74.6-17.5-44.3zm193.9 171.3-26.5 40.6 56.7 15.6 16.3-55.3zm-204.4.9L50.1 263l56.7-15.6-26.5-40.6z\" />\n    <path d=\"m103.6 138.2-15.8 23.9 56.3 2.5-2-60.5zm111.3 0-39-34.8-1.3 61.2 56.2-2.5zM106.8 247.4l33.8-16.5-29.2-22.8zm71.1-16.5 33.9 16.5-4.7-39.3z\" />\n    <path\n      fill=\"#d7c1b3\"\n      stroke=\"#d7c1b3\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m211.8 247.4-33.9-16.5 2.7 22.1-.3 9.3zm-105 0 31.5 14.9-.2-9.3 2.5-22.1z\"\n    />\n    <path\n      fill=\"#233447\"\n      stroke=\"#233447\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m138.8 193.5-28.2-8.3 19.9-9.1zm40.9 0 8.3-17.4 20 9.1z\"\n    />\n    <path\n      fill=\"#cd6116\"\n      stroke=\"#cd6116\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m106.8 247.4 4.8-40.6-31.3.9zM207 206.8l4.8 40.6 26.5-39.7zm23.8-44.7-56.2 2.5 5.2 28.9 8.3-17.4 20 9.1zm-120.2 23.1 20-9.1 8.2 17.4 5.3-28.9-56.3-2.5z\"\n    />\n    <path\n      fill=\"#e4751f\"\n      stroke=\"#e4751f\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m87.8 162.1 23.6 46-.8-22.9zm120.3 23.1-1 22.9 23.7-46zm-64-20.6-5.3 28.9 6.6 34.1 1.5-44.9zm30.5 0-2.7 18 1.2 45 6.7-34.1z\"\n    />\n    <path d=\"m179.8 193.5-6.7 34.1 4.8 3.3 29.2-22.8 1-22.9zm-69.2-8.3.8 22.9 29.2 22.8 4.8-3.3-6.6-34.1z\" />\n    <path\n      fill=\"#c0ad9e\"\n      stroke=\"#c0ad9e\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m180.3 262.3.3-9.3-2.5-2.2h-37.7l-2.3 2.2.2 9.3-31.5-14.9 11 9 22.3 15.5h38.3l22.4-15.5 11-9z\"\n    />\n    <path\n      fill=\"#161616\"\n      stroke=\"#161616\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m177.9 230.9-4.8-3.3h-27.7l-4.8 3.3-2.5 22.1 2.3-2.2h37.7l2.5 2.2z\"\n    />\n    <path\n      fill=\"#763d16\"\n      stroke=\"#763d16\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      d=\"m278.3 114.2 8.5-40.8-12.7-37.9-96.2 71.4 37 31.3 52.3 15.3 11.6-13.5-5-3.6 8-7.3-6.2-4.8 8-6.1zM31.8 73.4l8.5 40.8-5.4 4 8 6.1-6.1 4.8 8 7.3-5 3.6 11.5 13.5 52.3-15.3 37-31.3-96.2-71.4z\"\n    />\n    <path d=\"m267.2 153.5-52.3-15.3 15.9 23.9-23.7 46 31.2-.4h46.5zm-163.6-15.3-52.3 15.3-17.4 54.2h46.4l31.1.4-23.6-46zm71 26.4 3.3-57.7 15.2-41.1h-67.5l15 41.1 3.5 57.7 1.2 18.2.1 44.8h27.7l.2-44.8z\" />\n  </svg>\n);\n\nconst Coinbase = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 48 48\" fill=\"none\">\n    <g clipPath=\"url(#coinbase__clip0_2_2)\">\n      <path\n        d=\"M0 11.0769C0 4.95931 4.95931 0 11.0769 0H36.9231C43.0407 0 48 4.95931 48 11.0769V36.9231C48 43.0407 43.0407 48 36.9231 48H11.0769C4.95931 48 0 43.0407 0 36.9231V11.0769Z\"\n        fill=\"#0052FF\"\n      />\n      <path\n        d=\"M23.9573 32.5C22.3527 32.4676 20.7898 31.9838 19.4487 31.1044C18.1076 30.2249 17.0427 28.9855 16.3767 27.5289C15.7108 26.0724 15.4707 24.4578 15.6842 22.8711C15.8977 21.2843 16.5561 19.79 17.5835 18.5602C18.611 17.3303 19.9658 16.4149 21.4919 15.9193C23.018 15.4237 24.6534 15.3681 26.2098 15.7589C27.7663 16.1497 29.1804 16.9709 30.2894 18.1281C31.3985 19.2853 32.1574 20.7315 32.4787 22.3H41C40.5628 17.9606 38.4703 13.9546 35.1552 11.1109C31.8402 8.26711 27.5563 6.803 23.1895 7.02133C18.8226 7.23967 14.707 9.12377 11.6937 12.284C8.68042 15.4442 7 19.6386 7 24C7 28.3613 8.68042 32.5558 11.6937 35.716C14.707 38.8762 18.8226 40.7603 23.1895 40.9787C27.5563 41.197 31.8402 39.7329 35.1552 36.8891C38.4703 34.0454 40.5628 30.0394 41 25.7H32.4787C32.4787 29.1 27.3658 32.5 23.9573 32.5Z\"\n        fill=\"white\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"coinbase__clip0_2_2\">\n        <rect width=\"48\" height=\"48\" rx=\"24\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nconst Polygon = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 36 36\">\n    <g fill=\"none\">\n      <circle fill=\"#8247E5\" cx=\"18\" cy=\"18\" r=\"18\" />\n      <path\n        d=\"M24.172 13.954c-.438-.25-1.002-.25-1.504 0l-3.509 2.068-2.38 1.316-3.447 2.068c-.439.25-1.003.25-1.504 0l-2.695-1.63a1.527 1.527 0 0 1-.752-1.315v-3.133c0-.502.25-1.003.752-1.316l2.695-1.567c.438-.25 1.002-.25 1.504 0l2.694 1.63c.439.25.752.751.752 1.315v2.068l2.381-1.378v-2.13c0-.502-.25-1.004-.752-1.317l-5.013-2.945c-.438-.25-1.002-.25-1.504 0l-5.138 3.008c-.501.25-.752.752-.752 1.253v5.89c0 .502.25 1.003.752 1.316l5.076 2.946c.438.25 1.002.25 1.504 0l3.446-2.006 2.381-1.378 3.447-2.006c.438-.25 1.002-.25 1.504 0l2.694 1.567c.439.25.752.752.752 1.316v3.133c0 .501-.25 1.003-.752 1.316l-2.632 1.567c-.438.25-1.002.25-1.504 0l-2.694-1.567a1.527 1.527 0 0 1-.752-1.316v-2.005L16.84 22.1v2.067c0 .502.25 1.003.752 1.316l5.075 2.946c.439.25 1.003.25 1.504 0l5.076-2.946c.439-.25.752-.752.752-1.316v-5.953c0-.5-.25-1.002-.752-1.316l-5.076-2.945z\"\n        fill=\"#FFF\"\n      />\n    </g>\n  </svg>\n);\n\nconst TrustWallet = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 444 501\" fill=\"none\">\n    <path\n      d=\"M0.710022 72.41L222.16 0.109985V500.63C63.98 433.89 0.710022 305.98 0.710022 233.69V72.41Z\"\n      fill=\"#0500FF\"\n    />\n    <path\n      d=\"M443.62 72.41L222.17 0.109985V500.63C380.35 433.89 443.62 305.98 443.62 233.69V72.41Z\"\n      fill=\"url(#trust__paint0_linear_3_10)\"\n    />\n    <defs>\n      <linearGradient\n        id=\"trust__paint0_linear_3_10\"\n        x1=\"385.26\"\n        y1=\"-34.78\"\n        x2=\"216.61\"\n        y2=\"493.5\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop offset=\"0.02\" stopColor=\"#0000FF\" />\n        <stop offset=\"0.08\" stopColor=\"#0094FF\" />\n        <stop offset=\"0.16\" stopColor=\"#48FF91\" />\n        <stop offset=\"0.42\" stopColor=\"#0094FF\" />\n        <stop offset=\"0.68\" stopColor=\"#0038FF\" />\n        <stop offset=\"0.9\" stopColor=\"#0500FF\" />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport default function FamilyWallet() {\n  const [open, setOpen] = useState(false);\n  const [view, setView] = useState<View>(View.SIGN_IN);\n  const [authType, setAuthType] = useState('email');\n  const [email, setEmail] = useState('');\n  const [phone, setPhone] = useState('');\n\n  const [ref, bounds] = useMeasure();\n\n  useEffect(() => {\n    if (!open) {\n      requestAnimationFrame(() => setView(View.SIGN_IN));\n    }\n  }, [open]);\n\n  const SignInView = () => (\n    <div className=\"flex flex-col gap-4\">\n      <div className=\"flex items-center justify-between\">\n        <h2 className=\"font-sans text-xl font-semibold text-foreground\">\n          Sign In\n        </h2>\n\n        <DrawerClose asChild>\n          <button className=\"rounded-4xl bg-background p-2\">\n            <X className=\"h-5 w-5 text-muted-foreground\" />\n          </button>\n        </DrawerClose>\n      </div>\n\n      {/* socials */}\n      <div className=\"flex flex-col gap-2\">\n        <div className=\"flex justify-between\">\n          {[Chrome, FaDiscord, Github, FaApple, Twitter].map((Icon, i) => (\n            <button\n              key={i}\n              className=\"flex items-center justify-center rounded-2xl bg-background px-4 py-3\"\n            >\n              <Icon className=\"h-6 w-6 text-foreground\" />\n            </button>\n          ))}\n        </div>\n\n        <div className=\"flex rounded-xl bg-background p-1\">\n          {TABS.map((tab) => (\n            <button\n              key={tab.id}\n              onClick={() => {\n                setAuthType(tab.id);\n              }}\n              className=\"relative flex-1 cursor-pointer rounded-lg py-2 text-sm font-medium\"\n            >\n              {tab.id === authType && (\n                <motion.div\n                  layoutId=\"active-tab\"\n                  className=\"absolute inset-0 z-0 rounded-lg bg-muted\"\n                  transition={{\n                    type: 'spring',\n                    stiffness: 400,\n                    damping: 35,\n                  }}\n                />\n              )}\n\n              <span\n                className={`relative z-10 ${tab.id === authType\n                  ? 'text-foreground'\n                  : 'text-muted-foreground'\n                  }`}\n              >\n                {tab.label}\n              </span>\n            </button>\n          ))}\n        </div>\n        <div>\n          <AnimatePresence mode=\"popLayout\">\n            {authType === 'email' && (\n              <motion.div className=\"relative flex w-full rounded-xl bg-background p-1.5 text-foreground\">\n                <input\n                  value={email}\n                  onChange={(e) => setEmail(e.target.value)}\n                  placeholder=\"email@address.com\"\n                  className=\"text-md focus-visible:ring-none ml-2 flex-1 text-foreground focus:border-0 focus:ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-none\"\n                />\n                <motion.button className=\"flex items-center justify-center rounded-lg bg-muted px-4 py-2\">\n                  <ArrowRight className=\"size-6 text-foreground\" />\n                </motion.button>\n              </motion.div>\n            )}\n            {authType === 'phone' && (\n              <motion.div className=\"relative flex w-full rounded-xl bg-background p-1.5 text-foreground\">\n                <input\n                  value={phone}\n                  onChange={(e) => setPhone(e.target.value)}\n                  placeholder=\"+1 234 567 8900\"\n                  className=\"text-md focus-visible:ring-none ml-2 flex-1 text-foreground focus:border-0 focus:ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-none\"\n                />\n                <motion.button className=\"flex items-center justify-center rounded-lg bg-muted px-4 py-2\">\n                  <ArrowRight className=\"size-6 text-foreground\" />\n                </motion.button>\n              </motion.div>\n            )}\n            {authType === 'passkey' && (\n              <motion.div className=\"relative flex w-full items-center justify-center gap-2 rounded-xl bg-background p-1.5 text-foreground\">\n                <Fingerprint className=\"ml-1 size-6 text-foreground\" />\n                <input\n                  placeholder=\"Login with Passkey\"\n                  readOnly\n                  className=\"text-md focus-visible:ring-none ml-2 flex-1 text-foreground focus:border-0 focus:ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-none\"\n                />\n                <motion.button\n                  className=\"flex items-center justify-center rounded-lg bg-primary px-4 py-2\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  transition={{\n                    duration: 0.2,\n                  }}\n                  onClick={() => setView(View.PASSKEY)}\n                >\n                  <ArrowRight className=\"size-6 text-primary-foreground\" />\n                </motion.button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n      <div className=\"mt-2 mb-2 flex w-full items-center justify-center\">\n        <p className=\"font-sans text-muted-foreground\">OR</p>\n      </div>\n\n      <button\n        onClick={() => setView(View.CONNECT_WALLET)}\n        className=\"flex w-full items-center justify-center gap-2 rounded-4xl bg-primary py-3 font-sans text-primary-foreground\"\n      >\n        <BsWallet2 />\n        Connect Wallet\n      </button>\n    </div>\n  );\n\n  const PasskeyView = () => (\n    <div className=\"flex flex-col items-center gap-6\">\n      <div className=\"flex w-full items-center justify-between\">\n        <button\n          onClick={() => setView(View.SIGN_IN)}\n          className=\"rounded-4xl bg-background p-2\"\n        >\n          <ChevronLeft className=\"size-6 text-muted-foreground\" />\n        </button>\n\n        <h2 className=\"font-sans text-xl font-medium text-foreground\">Passkey</h2>\n\n        <DrawerClose asChild>\n          <button className=\"rounded-4xl bg-background p-2\">\n            <X className=\"size-6 text-muted-foreground\" />\n          </button>\n        </DrawerClose>\n      </div>\n      <div className=\"relative flex items-center justify-center rounded-2xl bg-background p-2\">\n        <div className=\"pointer-events-none absolute inset-0\">\n          <svg\n            className=\"h-full w-full\"\n            viewBox=\"0 0 100 100\"\n            preserveAspectRatio=\"none\"\n          >\n            <rect\n              x=\"1\"\n              y=\"1\"\n              width=\"98\"\n              height=\"98\"\n              rx=\"16\"\n              ry=\"16\"\n              fill=\"none\"\n              stroke=\"none\"\n\n            />\n            =\n            <motion.rect\n              x=\"1\"\n              y=\"1\"\n              width=\"98\"\n              height=\"98\"\n              rx=\"16\"\n              ry=\"16\"\n              fill=\"none\"\n              stroke=\"url(#passkey-gradient)\"\n              strokeWidth=\"2\"\n              strokeDasharray=\"80 240\"\n              animate={{ strokeDashoffset: [0, -320] }}\n              transition={{\n                duration: 2,\n                repeat: Infinity,\n                ease: 'linear',\n              }}\n            />\n            <defs>\n              <linearGradient\n                id=\"passkey-gradient\"\n                gradientUnits=\"userSpaceOnUse\"\n                x1=\"0\"\n                y1=\"0\"\n                x2=\"100\"\n                y2=\"100\"\n              >\n                <stop offset=\"0%\" stopColor=\"#3b82f6\" stopOpacity=\"0\" />\n                <stop offset=\"50%\" stopColor=\"#3b82f6\" stopOpacity=\"1\" />\n                <stop offset=\"100%\" stopColor=\"#3b82f6\" stopOpacity=\"0\" />\n              </linearGradient>\n            </defs>\n          </svg>\n        </div>\n\n        <div className=\"relative flex items-center justify-center rounded-2xl p-4\">\n          <Fingerprint className=\"h-16 w-16 text-muted-foreground\" />\n        </div>\n      </div>\n\n      <div className=\"flex flex-col items-center justify-center rounded-2xl p-2\">\n        <h2 className=\"font-sans text-lg font-medium text-foreground\">\n          Waiting for passkey\n        </h2>\n        <p className=\"text-md font-sans text-center text-muted-foreground\">\n          Please follow prompts to verify your passkey\n        </p>\n      </div>\n\n      <button\n        onClick={() => setView(View.SIGN_IN)}\n        className=\"w-full cursor-pointer rounded-xl bg-primary py-3 font-sans text-primary-foreground\"\n      >\n        Continue\n      </button>\n    </div>\n  );\n\n  const WalletView = () => (\n    <div className=\"flex flex-col gap-4\">\n      <div className=\"flex items-center justify-between\">\n        <button\n          onClick={() => setView(View.SIGN_IN)}\n          className=\"rounded-4xl bg-background p-2\"\n        >\n          <ChevronLeft className=\"size-6 text-muted-foreground\" />\n        </button>\n\n        <h2 className=\"font-sans text-lg font-medium text-foreground\">Connect Wallet</h2>\n\n        <DrawerClose asChild>\n          <button className=\"rounded-4xl bg-background p-2\">\n            <X className=\"size-6 text-muted-foreground\" />\n          </button>\n        </DrawerClose>\n      </div>\n      <div className=\"flex flex-col items-center justify-center gap-2\">\n        {[\n          { name: 'Metamask', logo: MetaMask },\n          { name: 'Coinbase', logo: Coinbase },\n          { name: 'Polygon', logo: Polygon },\n          { name: 'Trust', logo: TrustWallet },\n        ].map((wallet, i) => (\n          <button\n            key={i}\n            className=\"flex w-full cursor-pointer items-center justify-between rounded-xl bg-background p-4\"\n            onClick={() => setView(View.SIGN_IN)}\n          >\n            <span className=\"font-sans text-foreground\">{wallet.name}</span>\n            <div className=\"\">\n              <wallet.logo className=\"size-6\" />\n            </div>\n          </button>\n        ))}\n        <button className=\"flex w-full items-center justify-between rounded-xl bg-background p-4\">\n          <div className=\"flex items-center gap-2\">\n            <span className=\"font-sans text-foreground\">Other Wallets</span>\n            <div className=\"rounded-4xl border border-border bg-muted px-3 text-lg text-muted-foreground\">\n              350+\n            </div>\n          </div>\n\n          <BsWallet2 className=\"size-6 text-foreground\" />\n        </button>\n      </div>\n\n      <div className=\"mt-2 mb-2 flex cursor-pointer items-center justify-center gap-2 text-muted-foreground\"\n        onClick={() => setView(View.SIGN_IN)}\n      >\n        <BsWallet2 className=\"size-6\" />\n        <p className=\"font-sans\"> I don't have wallet</p>\n      </div>\n    </div>\n  );\n\n  const renderView = () => {\n    switch (view) {\n      case View.SIGN_IN:\n        return <SignInView />;\n\n      case View.PASSKEY:\n        return <PasskeyView />;\n\n      case View.CONNECT_WALLET:\n        return <WalletView />;\n    }\n  };\n\n  return (\n    <div className=\"theme-injected relative flex items-center justify-center font-sans theme-injected\">\n      <button\n        onClick={() => setOpen(true)}\n        className=\"rounded-4xl bg-muted px-8 py-4 font-sans font-bold text-foreground\"\n      >\n        Open Wallet\n      </button>\n\n      <Drawer open={open} onOpenChange={setOpen}>\n        <DrawerPortal>\n          <DrawerOverlay className=\"fixed inset-0 bg-black/50\" />\n\n          <DrawerContent className=\"theme-injected fixed bottom-10! mx-auto w-[360px] overflow-hidden rounded-4xl! border border-border bg-card\">\n            <motion.div\n              animate={{ height: bounds.height }}\n              transition={{\n                type: 'spring',\n                stiffness: 400,\n                damping: 30,\n              }}\n            >\n              <div ref={ref} className=\"px-6 py-4\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    key={view}\n                    initial={{ opacity: 0, y: 10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: -10 }}\n                  >\n                    {renderView()}\n                  </motion.div>\n                </AnimatePresence>\n              </div>\n            </motion.div>\n          </DrawerContent>\n        </DrawerPortal>\n      </Drawer>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "feature-tour",
      "type": "registry:component",
      "title": "Feature Tour",
      "description": "A premium guided tour component with blur animations, shining titles, and intuitive navigation.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/feature-tour.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport {\n    motion,\n    AnimatePresence,\n    useReducedMotion,\n    type Transition,\n} from \"motion/react\";\nimport { X } from \"lucide-react\";\n\nexport interface TourStep {\n    id: string;\n    title: string;\n    description: string;\n    icon: React.ReactNode;\n}\n\ninterface FeatureTourProps {\n    steps: TourStep[];\n    onClose: () => void;\n    onLearnMore?: (step: TourStep) => void;\n    className?: string;\n    loop?: boolean;\n    closeOnBackdrop?: boolean;\n}\n\n/* ─────────────────────────\n   Typed Motion Curves\n───────────────────────── */\n\nconst EASE_OUT = [0.16, 1, 0.3, 1] as const;\nconst FAST_OUT = [0.22, 1, 0.36, 1] as const;\n\nconst SPRING_ICON: Transition = {\n    type: \"spring\",\n    stiffness: 420,\n    damping: 34,\n    mass: 0.7,\n};\n\nconst SPRING_BG: Transition = {\n    type: \"spring\",\n    stiffness: 340,\n    damping: 30,\n    mass: 0.8,\n};\n\nexport const FeatureTour: React.FC<FeatureTourProps> = ({\n    steps,\n    onClose,\n    onLearnMore,\n    className = \"\",\n    loop = false,\n    closeOnBackdrop = true,\n}) => {\n    const shouldReduceMotion = useReducedMotion();\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [currentIndex, setCurrentIndex] = useState(0);\n\n\n    const goToStep = useCallback((index: number) => {\n        setCurrentIndex((prev) => (index === prev ? prev : index));\n    }, []);\n\n    const goNext = useCallback(() => {\n        setCurrentIndex((prev) =>\n            prev === steps.length - 1 ? (loop ? 0 : prev) : prev + 1\n        );\n    }, [loop, steps.length]);\n\n    const goPrev = useCallback(() => {\n        setCurrentIndex((prev) =>\n            prev === 0 ? (loop ? steps.length - 1 : prev) : prev - 1\n        );\n    }, [loop, steps.length]);\n\n    useEffect(() => {\n        const handleKeyDown = (e: KeyboardEvent) => {\n            if (e.key === \"ArrowRight\") goNext();\n            if (e.key === \"ArrowLeft\") goPrev();\n            if (e.key === \"Escape\") onClose();\n        };\n        window.addEventListener(\"keydown\", handleKeyDown);\n        return () => window.removeEventListener(\"keydown\", handleKeyDown);\n    }, [goNext, goPrev, onClose]);\n\n    useEffect(() => {\n        const btn = containerRef.current?.querySelector(\"button\");\n        btn?.focus();\n    }, []);\n\n    const currentStep = steps[currentIndex];\n\n    if (!steps || steps.length === 0) return null;\n\n    return (\n        <div\n            className=\"flex items-center justify-center\"\n            onClick={closeOnBackdrop ? onClose : undefined}\n            role=\"dialog\"\n            aria-modal=\"true\"\n        >\n            <motion.div\n                ref={containerRef}\n                onClick={(e) => e.stopPropagation()}\n                initial={{\n                    opacity: 0,\n                    scale: 0.96,\n                    y: 16,\n                    filter: \"blur(4px)\",\n                }}\n                animate={{\n                    opacity: 1,\n                    scale: 1,\n                    y: 0,\n                    filter: \"blur(0px)\",\n                }}\n                exit={{\n                    opacity: 0,\n                    scale: 0.98,\n                    y: 12,\n                }}\n                transition={{\n                    duration: 0.18,\n                    ease: EASE_OUT,\n                }}\n                className={`relative w-full max-w-[400px] sm:aspect-[1/1.3] min-h-[520px] sm:min-h-0 rounded-[34px] border shadow-sm p-6 sm:p-8 flex flex-col items-center overflow-hidden transition-colors duration-300 bg-white border-neutral-200 dark:bg-neutral-900 dark:border-neutral-800 ${className}`}\n            >\n                <button\n                    onClick={onClose}\n                    aria-label=\"Close tour\"\n                    className=\"absolute top-6 right-6 p-2 rounded-full transition-colors z-50 bg-neutral-300 hover:bg-neutral-400 dark:bg-neutral-800 dark:hover:bg-neutral-700\"\n                >\n                    <X\n                        size={20}\n                        strokeWidth={3}\n                        className=\"text-white dark:text-neutral-200\"\n                    />\n                </button>\n\n                <div className=\"flex-1 w-full flex flex-col items-center justify-center relative\">\n\n                    {/* Icon Morph */}\n                    <AnimatePresence mode=\"wait\">\n                        <motion.div\n                            key={currentStep.id}\n                            initial={{\n                                opacity: 0,\n                                scale: 0.92,\n                                y: 8,\n                                filter: \"blur(3px)\",\n                            }}\n                            animate={{\n                                opacity: 1,\n                                scale: 1,\n                                y: 0,\n                                filter: \"blur(0px)\",\n                            }}\n                            exit={{\n                                opacity: 0,\n                                scale: 0.92,\n                                y: -6,\n                                filter: \"blur(3px)\",\n                            }}\n                            transition={{\n                                duration: 0.16,\n                                ease: FAST_OUT,\n                            }}\n                            className=\"relative flex items-center justify-center min-h-[120px]\"\n                        >\n                            <motion.div\n                                layoutId=\"tour-icon-bg\"\n                                transition={SPRING_BG}\n                                className=\"absolute w-24 h-24 rounded-3xl\n                           bg-neutral-100 dark:bg-neutral-800\n                           shadow-inner dark:shadow-black/40\"\n                            />\n\n                            <motion.div\n                                layoutId=\"tour-icon\"\n                                transition={SPRING_ICON}\n                                className=\"relative text-neutral-700 dark:text-neutral-200\n                           drop-shadow-[0_4px_12px_rgba(0,0,0,0.12)]\n                           dark:drop-shadow-[0_4px_16px_rgba(255,255,255,0.12)]\"\n                            >\n                                {currentStep.icon}\n                            </motion.div>\n                        </motion.div>\n                    </AnimatePresence>\n\n                    {/* Content Slide */}\n                    <AnimatePresence mode=\"wait\">\n                        <motion.div\n                            key={`content-${currentStep.id}`}\n                            initial={{\n                                opacity: 0,\n                                y: shouldReduceMotion ? 0 : 20,\n                            }}\n                            animate={{\n                                opacity: 1,\n                                y: 0,\n                            }}\n                            exit={{\n                                opacity: 0,\n                                y: shouldReduceMotion ? 0 : -14,\n                            }}\n                            transition={{\n                                duration: 0.16,\n                                ease: EASE_OUT,\n                            }}\n                            className=\"space-y-2 px-4 mt-8 sm:mt-12 text-center\"\n                        >\n                            <h2 className=\"text-[26px] font-bold text-neutral-900 dark:text-white\">\n                                {currentStep.title}\n                            </h2>\n\n                            <p className=\"text-[20px] font-medium leading-tight text-neutral-500 dark:text-neutral-400\">\n                                {currentStep.description}\n                            </p>\n\n                            {onLearnMore && (\n                                <motion.button\n                                    whileHover={{ scale: 1.03 }}\n                                    whileTap={{ scale: 0.97 }}\n                                    transition={{\n                                        type: \"spring\",\n                                        stiffness: 400,\n                                        damping: 30,\n                                    }}\n                                    onClick={() => onLearnMore(currentStep)}\n                                    className=\"mt-6 sm:mt-10 px-10 py-3 rounded-full font-semibold text-lg transition-colors bg-neutral-100 text-neutral-700 hover:bg-neutral-200 dark:bg-neutral-800 dark:text-white dark:hover:bg-neutral-700\"\n                                >\n                                    Learn More\n                                </motion.button>\n                            )}\n                        </motion.div>\n                    </AnimatePresence>\n                </div>\n\n                {/* Dots */}\n                <div className=\"mt-6 sm:mt-8 flex items-center gap-3\" role=\"tablist\">\n                    {steps.map((step, index) => (\n                        <button\n                            key={step.id}\n                            role=\"tab\"\n                            aria-selected={index === currentIndex}\n                            aria-label={`Go to ${step.title}`}\n                            onClick={() => goToStep(index)}\n                            className=\"relative h-2 focus:outline-none\"\n                        >\n                            <motion.div\n                                animate={{\n                                    scale: index === currentIndex ? 1.2 : 1,\n                                }}\n                                transition={{\n                                    type: \"spring\",\n                                    stiffness: 300,\n                                    damping: 20,\n                                }}\n                                className={`h-[12px] w-[12px] rounded-full ${index === currentIndex\n                                    ? \"bg-neutral-500 dark:bg-neutral-200\"\n                                    : \"bg-neutral-200 dark:bg-neutral-700\"\n                                    }`}\n                            />\n                        </button>\n                    ))}\n                </div>\n\n                <div className=\"absolute inset-0 pointer-events-none rounded-[40px] bg-linear-to-br from-white/20 via-transparent to-black/5 dark:from-white/5 dark:via-transparent dark:to-black/40\" />\n            </motion.div>\n        </div>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "feature-tour-base",
      "type": "registry:component",
      "title": "Feature Tour (base)",
      "description": "Theme-ready base variant of A premium guided tour component with blur animations, shining titles, and intuitive navigation..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/feature-tour.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport {\n    motion,\n    AnimatePresence,\n    useReducedMotion,\n    type Transition,\n} from \"motion/react\";\nimport { X } from \"lucide-react\";\n\nexport interface TourStep {\n    id: string;\n    title: string;\n    description: string;\n    icon: React.ReactNode;\n}\n\ninterface FeatureTourProps {\n    steps: TourStep[];\n    onClose: () => void;\n    onLearnMore?: (step: TourStep) => void;\n    className?: string;\n    loop?: boolean;\n    closeOnBackdrop?: boolean;\n}\n\nconst EASE_OUT = [0.16, 1, 0.3, 1] as const;\nconst FAST_OUT = [0.22, 1, 0.36, 1] as const;\n\nconst SPRING_ICON: Transition = {\n    type: \"spring\",\n    stiffness: 420,\n    damping: 34,\n    mass: 0.7,\n};\n\nconst SPRING_BG: Transition = {\n    type: \"spring\",\n    stiffness: 340,\n    damping: 30,\n    mass: 0.8,\n};\n\nexport const FeatureTour: React.FC<FeatureTourProps> = ({\n    steps,\n    onClose,\n    onLearnMore,\n    className = \"\",\n    loop = false,\n    closeOnBackdrop = true,\n}) => {\n    const shouldReduceMotion = useReducedMotion();\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [currentIndex, setCurrentIndex] = useState(0);\n\n    const goToStep = useCallback((index: number) => {\n        setCurrentIndex((prev) => (index === prev ? prev : index));\n    }, []);\n\n    const goNext = useCallback(() => {\n        setCurrentIndex((prev) =>\n            prev === steps.length - 1 ? (loop ? 0 : prev) : prev + 1\n        );\n    }, [loop, steps.length]);\n\n    const goPrev = useCallback(() => {\n        setCurrentIndex((prev) =>\n            prev === 0 ? (loop ? steps.length - 1 : prev) : prev - 1\n        );\n    }, [loop, steps.length]);\n\n    useEffect(() => {\n        const handleKeyDown = (e: KeyboardEvent) => {\n            if (e.key === \"ArrowRight\") goNext();\n            if (e.key === \"ArrowLeft\") goPrev();\n            if (e.key === \"Escape\") onClose();\n        };\n\n        window.addEventListener(\"keydown\", handleKeyDown);\n        return () => window.removeEventListener(\"keydown\", handleKeyDown);\n    }, [goNext, goPrev, onClose]);\n\n    useEffect(() => {\n        const btn = containerRef.current?.querySelector(\"button\");\n        btn?.focus();\n    }, []);\n\n    const currentStep = steps[currentIndex];\n\n    if (!steps || steps.length === 0) return null;\n\n    return (\n        <div\n            className=\"theme-injected flex items-center justify-center font-sans\"\n            onClick={closeOnBackdrop ? onClose : undefined}\n            role=\"dialog\"\n            aria-modal=\"true\"\n        >\n            <motion.div\n                ref={containerRef}\n                onClick={(e) => e.stopPropagation()}\n                initial={{\n                    opacity: 0,\n                    scale: 0.96,\n                    y: 16,\n                    filter: \"blur(4px)\",\n                }}\n                animate={{\n                    opacity: 1,\n                    scale: 1,\n                    y: 0,\n                    filter: \"blur(0px)\",\n                }}\n                exit={{\n                    opacity: 0,\n                    scale: 0.98,\n                    y: 12,\n                }}\n                transition={{\n                    duration: 0.18,\n                    ease: EASE_OUT,\n                }}\n                className={`relative flex w-full max-w-100 min-h-130 flex-col items-center overflow-hidden rounded-3xl border border-border bg-card p-6 font-sans shadow-sm transition-colors duration-300 sm:min-h-0 sm:aspect-[1/1.3] sm:p-8 ${className}`}\n            >\n                <button\n                    onClick={onClose}\n                    aria-label=\"Close tour\"\n                    className=\"absolute top-6 right-6 z-50 rounded-3xl bg-muted p-2 text-muted-foreground transition-colors hover:bg-background hover:text-foreground\"\n                >\n                    <X size={20} strokeWidth={3} className=\"text-current\" />\n                </button>\n\n                <div className=\"relative flex w-full flex-1 flex-col items-center justify-center\">\n                    <AnimatePresence mode=\"wait\">\n                        <motion.div\n                            key={currentStep.id}\n                            initial={{\n                                opacity: 0,\n                                scale: 0.92,\n                                y: 8,\n                                filter: \"blur(3px)\",\n                            }}\n                            animate={{\n                                opacity: 1,\n                                scale: 1,\n                                y: 0,\n                                filter: \"blur(0px)\",\n                            }}\n                            exit={{\n                                opacity: 0,\n                                scale: 0.92,\n                                y: -6,\n                                filter: \"blur(3px)\",\n                            }}\n                            transition={{\n                                duration: 0.16,\n                                ease: FAST_OUT,\n                            }}\n                            className=\"relative flex min-h-30 items-center justify-center\"\n                        >\n                            <motion.div\n                                layoutId=\"tour-icon-bg\"\n                                transition={SPRING_BG}\n                                className=\"absolute h-24 w-24 rounded-3xl bg-muted shadow-inner\"\n                            />\n\n                            <motion.div\n                                layoutId=\"tour-icon\"\n                                transition={SPRING_ICON}\n                                className=\"relative text-foreground drop-shadow-[0_4px_12px_rgba(0,0,0,0.12)]\"\n                            >\n                                {currentStep.icon}\n                            </motion.div>\n                        </motion.div>\n                    </AnimatePresence>\n\n                    <AnimatePresence mode=\"wait\">\n                        <motion.div\n                            key={`content-${currentStep.id}`}\n                            initial={{\n                                opacity: 0,\n                                y: shouldReduceMotion ? 0 : 20,\n                            }}\n                            animate={{\n                                opacity: 1,\n                                y: 0,\n                            }}\n                            exit={{\n                                opacity: 0,\n                                y: shouldReduceMotion ? 0 : -14,\n                            }}\n                            transition={{\n                                duration: 0.16,\n                                ease: EASE_OUT,\n                            }}\n                            className=\"mt-8 space-y-2 px-4 text-center sm:mt-12\"\n                        >\n                            <h2 className=\"font-sans text-[26px] font-bold text-foreground\">\n                                {currentStep.title}\n                            </h2>\n\n                            <p className=\"font-sans text-[20px] leading-tight font-medium text-muted-foreground\">\n                                {currentStep.description}\n                            </p>\n\n                            {onLearnMore && (\n                                <motion.button\n                                    whileHover={{ scale: 1.03 }}\n                                    whileTap={{ scale: 0.97 }}\n                                    transition={{\n                                        type: \"spring\",\n                                        stiffness: 400,\n                                        damping: 30,\n                                    }}\n                                    onClick={() => onLearnMore(currentStep)}\n                                    className=\"mt-6 rounded-3xl bg-primary px-10 py-3 font-sans text-lg font-semibold text-primary-foreground transition-colors hover:opacity-95 sm:mt-10\"\n                                >\n                                    Learn More\n                                </motion.button>\n                            )}\n                        </motion.div>\n                    </AnimatePresence>\n                </div>\n\n                <div className=\"mt-6 flex items-center gap-3 sm:mt-8\" role=\"tablist\">\n                    {steps.map((step, index) => (\n                        <button\n                            key={step.id}\n                            role=\"tab\"\n                            aria-selected={index === currentIndex}\n                            aria-label={`Go to ${step.title}`}\n                            onClick={() => goToStep(index)}\n                            className=\"relative h-2 focus:outline-none\"\n                        >\n                            <motion.div\n                                animate={{\n                                    scale: index === currentIndex ? 1.2 : 1,\n                                }}\n                                transition={{\n                                    type: \"spring\",\n                                    stiffness: 300,\n                                    damping: 20,\n                                }}\n                                className={`h-3 w-3 rounded-3xl ${\n                                    index === currentIndex\n                                        ? \"bg-primary\"\n                                        : \"bg-foreground/50\"\n                                }`}\n                            />\n                        </button>\n                    ))}\n                </div>\n\n                <div className=\"pointer-events-none absolute inset-0 rounded-5xl bg-linear-to-br from-background/30 via-transparent to-foreground/5\" />\n            </motion.div>\n        </div>\n    );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "feedback-action",
      "type": "registry:component",
      "title": "Feedback Action",
      "description": "Trigger quick user feedback actions through subtle animated interaction buttons.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/feedback-action.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { LuCircleDotDashed } from 'react-icons/lu';\nimport { FaArrowRotateRight } from 'react-icons/fa6';\nimport { TbAlertOctagonFilled } from 'react-icons/tb';\nimport { cn } from '@/lib/utils';\n\ninterface InlineFeedbackProps {\n  errorMessage?: string;\n  loadingMessage?: string;\n  onRetry?: () => void;\n}\n\nexport const FeedbackAction: React.FC<InlineFeedbackProps> = ({\n  errorMessage = 'Sync Failed',\n  loadingMessage = 'Syncing',\n  onRetry,\n}) => {\n  const [status, setStatus] = useState<'error' | 'loading'>('error');\n\n  const handleRetry = () => {\n    setStatus('loading');\n    onRetry?.();\n  };\n\n  useEffect(() => {\n    if (status === 'loading') {\n      const timer = setTimeout(() => {\n        setStatus('error');\n      }, 3500);\n      return () => clearTimeout(timer);\n    }\n  }, [status]);\n\n  return (\n    <div className=\"flex h-14 items-center gap-3\">\n      <MotionConfig\n        transition={{ type: 'spring', bounce: 0.25, duration: 0.6 }}\n      >\n        <motion.div\n          animate={{ width: 'auto' }}\n          layout\n          initial={false}\n          className={cn(\n            'relative z-20 flex items-center justify-center overflow-hidden border px-6 py-4',\n            status === 'error'\n              ? 'border-neutral-200 bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900'\n              : 'border-neutral-200 bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900',\n          )}\n          style={{\n            borderRadius: 32,\n          }}\n        >\n          <motion.div\n            initial={{ opacity: 0, filter: 'blur(8px)' }}\n            animate={{ opacity: 1, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, filter: 'blur(8px)' }}\n            transition={{ type: 'spring', stiffness: 300, damping: 24 }}\n            className=\"flex items-center gap-2\"\n          >\n            <AnimatePresence mode=\"popLayout\">\n              <motion.div\n                layout\n                key={status}\n                initial={{ opacity: 0, scale: 0.25, filter: 'blur(2px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0.25, filter: 'blur(2px)' }}\n                transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n              >\n                {status === 'error' ? (\n                  <TbAlertOctagonFilled\n                    size={26}\n                    className={cn('text-red-500 dark:text-red-500')}\n                  />\n                ) : (\n                  <LuCircleDotDashed\n                    size={26}\n                    strokeWidth={2.8}\n                    className={cn(\n                      'animate-spin text-neutral-700 dark:text-neutral-200',\n                    )}\n                  />\n                )}\n              </motion.div>\n            </AnimatePresence>\n\n            <AnimatedText\n              text={status === 'error' ? errorMessage : loadingMessage}\n              className={cn(\n                'text-xl font-semibold',\n                status === 'error'\n                  ? 'text-red-500'\n                  : 'text-neutral-700 dark:text-neutral-200',\n              )}\n            />\n          </motion.div>\n        </motion.div>\n\n        <AnimatePresence mode=\"popLayout\">\n          {status === 'error' && (\n            <motion.button\n              initial={{\n                opacity: 0,\n                x: -55,\n                filter: 'blur(4px)',\n                scale: 0.8,\n              }}\n              animate={{ opacity: 1, x: 0, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 1, x: -55, filter: 'blur(4px)', scale: 0.8 }}\n              transition={{ type: 'spring', stiffness: 260, damping: 20 }}\n              whileHover={{ scale: 1.06 }}\n              whileTap={{ scale: 0.94 }}\n              onClick={handleRetry}\n              className={cn(\n                'z-10 flex h-14 w-14 items-center justify-center rounded-full bg-neutral-900 text-white dark:bg-neutral-100 dark:text-black',\n              )}\n            >\n              <FaArrowRotateRight size={22} />\n            </motion.button>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span\n          layout\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{ y: 10, opacity: 0, scale: 0.5, filter: 'blur(2px)' }}\n              animate={{ y: 0, opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ y: -10, opacity: 0, scale: 0.5, filter: 'blur(2px)' }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n              className={className}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "feedback-action-base",
      "type": "registry:component",
      "title": "Feedback Action (base)",
      "description": "Theme-ready base variant of Trigger quick user feedback actions through subtle animated interaction buttons..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/feedback-action.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { LuCircleDotDashed } from 'react-icons/lu';\nimport { FaArrowRotateRight } from 'react-icons/fa6';\nimport { TbAlertOctagonFilled } from 'react-icons/tb';\nimport { cn } from '@/lib/utils';\n\ninterface InlineFeedbackProps {\n  errorMessage?: string;\n  loadingMessage?: string;\n  onRetry?: () => void;\n}\n\nexport const FeedbackAction: React.FC<InlineFeedbackProps> = ({\n  errorMessage = 'Sync Failed',\n  loadingMessage = 'Syncing',\n  onRetry,\n}) => {\n  const [status, setStatus] = useState<'error' | 'loading'>('error');\n\n  const handleRetry = () => {\n    setStatus('loading');\n    onRetry?.();\n  };\n\n  useEffect(() => {\n    if (status === 'loading') {\n      const timer = setTimeout(() => {\n        setStatus('error');\n      }, 3500);\n      return () => clearTimeout(timer);\n    }\n  }, [status]);\n\n  return (\n    <div className=\"theme-injected flex h-14 items-center gap-3\">\n      <MotionConfig\n        transition={{ type: 'spring', bounce: 0.25, duration: 0.6 }}\n      >\n        <motion.div\n          animate={{ width: 'auto' }}\n          layout\n          initial={false}\n          className={cn(\n            'border-border bg-muted relative z-20 flex items-center justify-center overflow-hidden rounded-lg border px-6 py-4',\n          )}\n        >\n          <motion.div\n            initial={{ opacity: 0, filter: 'blur(8px)' }}\n            animate={{ opacity: 1, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, filter: 'blur(8px)' }}\n            transition={{ type: 'spring', stiffness: 300, damping: 24 }}\n            className=\"flex items-center gap-2\"\n          >\n            <AnimatePresence mode=\"popLayout\">\n              <motion.div\n                layout\n                key={status}\n                initial={{ opacity: 0, scale: 0.25, filter: 'blur(2px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0.25, filter: 'blur(2px)' }}\n                transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n              >\n                {status === 'error' ? (\n                  <TbAlertOctagonFilled\n                    size={26}\n                    className={cn('text-destructive')}\n                  />\n                ) : (\n                  <LuCircleDotDashed\n                    size={26}\n                    strokeWidth={2.8}\n                    className={cn('text-foreground animate-spin')}\n                  />\n                )}\n              </motion.div>\n            </AnimatePresence>\n\n            <AnimatedText\n              text={status === 'error' ? errorMessage : loadingMessage}\n              className={cn(\n                'text-xl font-semibold',\n                status === 'error' ? 'text-destructive' : 'text-foreground',\n              )}\n            />\n          </motion.div>\n        </motion.div>\n\n        <AnimatePresence mode=\"popLayout\">\n          {status === 'error' && (\n            <motion.button\n              initial={{\n                opacity: 0,\n                x: -55,\n                filter: 'blur(4px)',\n                scale: 0.8,\n              }}\n              animate={{ opacity: 1, x: 0, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 1, x: -55, filter: 'blur(4px)', scale: 0.8 }}\n              transition={{ type: 'spring', stiffness: 260, damping: 20 }}\n              whileHover={{ scale: 1.06 }}\n              whileTap={{ scale: 0.94 }}\n              onClick={handleRetry}\n              className={cn(\n                'bg-primary text-primary-foreground z-10 flex h-14 w-14 items-center justify-center rounded-lg',\n              )}\n            >\n              <FaArrowRotateRight size={22} />\n            </motion.button>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span\n          layout\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{ y: 10, opacity: 0, scale: 0.5, filter: 'blur(2px)' }}\n              animate={{ y: 0, opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ y: -10, opacity: 0, scale: 0.5, filter: 'blur(2px)' }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n              className={className}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "feedback",
      "type": "registry:component",
      "title": "Feedback",
      "description": "A premium feedback component with morphing icons, smooth transitions, and a refined dark mode experience.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/feedback.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { X, Sparkle } from 'lucide-react';\nimport { Navigation03Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  FaRegThumbsUp,\n  FaThumbsUp,\n  FaRegThumbsDown,\n  FaThumbsDown,\n} from 'react-icons/fa6';\n\ninterface FeedbackComponentProps {\n  onSubmit?: (data: { rating: 'up' | 'down'; feedback: string }) => void;\n}\n\nconst SPRING_CONFIG = {\n  ease: 'easeInOut' as const,\n  duration: 0.3,\n};\n\nexport const FeedbackComponent: React.FC<FeedbackComponentProps> = ({\n  onSubmit,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [activeRating, setActiveRating] = useState<'up' | 'down' | null>(null);\n  const [animatingIcon, setAnimatingIcon] = useState<'up' | 'down' | null>(\n    null,\n  );\n  const [feedback, setFeedback] = useState('');\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const handleOpen = (type: 'up' | 'down') => {\n    if (animatingIcon) return; // Prevent double clicks during animation\n    setActiveRating(type);\n    setAnimatingIcon(type);\n\n    // Wait for the thumb pop animation to finish before expanding the card\n    setTimeout(() => {\n      setIsOpen(true);\n      setAnimatingIcon(null);\n    }, 500);\n  };\n\n  const handleClose = () => {\n    setIsOpen(false);\n    setTimeout(() => {\n      setActiveRating(null);\n      setFeedback('');\n    }, 400);\n  };\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!activeRating) return;\n    setIsSubmitting(true);\n    setTimeout(() => {\n      onSubmit?.({ rating: activeRating, feedback });\n      setIsSubmitting(false);\n      handleClose();\n    }, 800);\n  };\n\n  return (\n    <div className=\"relative flex min-h-[400px] w-full items-center justify-center px-4\">\n      <LayoutGroup id=\"feedback-group\">\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen ? (\n            <motion.div\n              key=\"initial-buttons\"\n              className=\"flex gap-4\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0, transition: { duration: 0.1 } }}\n            >\n              {(['up', 'down'] as const).map((type) => (\n                <motion.button\n                  key={type}\n                  layoutId={\n                    activeRating === type ? 'feedback-card' : `button-${type}`\n                  }\n                  onClick={() => handleOpen(type)}\n                  whileHover={{ scale: 1.05 }}\n                  whileTap={{ scale: 0.95 }}\n                  transition={SPRING_CONFIG}\n                  className=\"relative flex h-16 w-16 items-center justify-center overflow-visible rounded-[22px] bg-neutral-800 shadow-xl\"\n                >\n                  <AnimatePresence>\n                    {animatingIcon === type && (\n                      <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n                        {[...Array(6)].map((_, i) => {\n                          const angle = (i * 60 * Math.PI) / 180;\n                          const distance = 45;\n                          return (\n                            <motion.div\n                              key={`sparkle-${i}`}\n                              className={`absolute ${\n                                type === 'up'\n                                  ? 'text-neutral-100'\n                                  : 'text-neutral-100'  \n                              }`}\n                              initial={{\n                                scale: 0,\n                                x: 0,\n                                y: 0,\n                                opacity: 1,\n                                rotate: 0,\n                              }}\n                              animate={{\n                                scale: [0, 1.2, 0],\n                                x: Math.cos(angle) * distance,\n                                y: Math.sin(angle) * distance,\n                                opacity: [1, 1, 0],\n                                rotate: [0, 90],\n                              }}\n                              transition={{ duration: 0.5, ease: 'easeOut' }}\n                            >\n                              <Sparkle\n                                className=\"size-3\"\n                                fill=\"currentColor\"\n                              />\n                            </motion.div>\n                          );\n                        })}\n                      </div>\n                    )}\n                  </AnimatePresence>\n\n                  <motion.div\n                    className=\"relative z-10\"\n                    animate={\n                      animatingIcon === type\n                        ? {\n                            scale: [1, 1.8, 1],\n                            rotate: [\n                              0,\n                              type === 'up' ? -35 : 35,\n                              type === 'down' ? 35 : -35,\n                              0,\n                            ],\n                            y: [0, -4, 0],\n                          }\n                        : { scale: 1, rotate: 0, y: 0 }\n                    }\n                    transition={{ duration: 0.5, ease: 'easeOut' }}\n                  >\n                    {type === 'up' ? (\n                      activeRating === 'up' ? (\n                        <FaThumbsUp className=\"h-6 w-6 text-white\" />\n                      ) : (\n                        <FaRegThumbsUp className=\"h-6 w-6 text-white\" />\n                      )\n                    ) : activeRating === 'down' ? (\n                      <FaThumbsDown className=\"h-6 w-6 text-white\" />\n                    ) : (\n                      <FaRegThumbsDown className=\"h-6 w-6 text-white\" />\n                    )}\n                  </motion.div>\n                </motion.button>\n              ))}\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"modal\"\n              layoutId=\"feedback-card\"\n              className=\"relative z-50 w-xs overflow-hidden rounded-[24px] border border-neutral-200 bg-white p-5 shadow-2xl sm:w-sm sm:rounded-[32px] sm:p-8 dark:border-neutral-800 dark:bg-neutral-900\"\n              transition={SPRING_CONFIG}\n            >\n              <motion.button\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ delay: 0.1 }}\n                onClick={(e) => {\n                  e.stopPropagation();\n                  handleClose();\n                }}\n                className=\"absolute top-4 right-4 rounded-full bg-neutral-100 p-1.5 text-neutral-500 transition-all hover:scale-110 hover:text-neutral-700 active:scale-90 sm:top-5 sm:right-5 sm:p-2 dark:bg-neutral-800 dark:text-neutral-400 dark:hover:text-neutral-200\"\n              >\n                <X className=\"h-3.5 w-3.5 sm:h-4 sm:w-4\" strokeWidth={3} />\n              </motion.button>\n\n              <motion.div\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.3 }}\n                className=\"relative pt-2\"\n              >\n                <h2 className=\"mb-1.5 pr-8 text-[20px] leading-tight font-bold text-neutral-900 sm:mb-2 sm:text-[24px] dark:text-white\">\n                  Share Feedback\n                </h2>\n\n                <p className=\"mb-5 pr-6 text-[14px] leading-relaxed text-neutral-500 sm:mb-6 sm:text-[16px] dark:text-neutral-400\">\n                  {activeRating === 'up'\n                    ? 'Let us know what you liked most?'\n                    : 'What can we improve?'}\n                </p>\n\n                <form onSubmit={handleSubmit} className=\"space-y-4\">\n                  <div>\n                    <textarea\n                      autoFocus\n                      value={feedback}\n                      onChange={(e) => setFeedback(e.target.value)}\n                      placeholder=\"Type in your feedback (optional)\"\n                      className=\"h-32 w-full resize-none rounded-2xl border border-neutral-200 bg-neutral-100 p-4 text-neutral-800 transition-all outline-none focus:ring-2 focus:ring-black dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200 dark:focus:ring-white\"\n                    />\n                  </div>\n\n                  <button\n                    type=\"submit\"\n                    disabled={isSubmitting}\n                    className=\"flex items-center gap-2 rounded-xl bg-black px-6 py-3 font-bold text-white shadow-lg transition-all hover:opacity-90 active:scale-95 disabled:opacity-50 dark:bg-white dark:text-black\"\n                  >\n                    <HugeiconsIcon\n                      icon={Navigation03Icon}\n                      size={18}\n                      className=\"fill-current\"\n                    />\n                    <span>{isSubmitting ? 'Sending...' : 'Send Now'}</span>\n                  </button>\n                </form>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </LayoutGroup>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "feedback-base",
      "type": "registry:component",
      "title": "Feedback (base)",
      "description": "Theme-ready base variant of A premium feedback component with morphing icons, smooth transitions, and a refined dark mode experience..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/feedback.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { X, Sparkle } from 'lucide-react';\nimport { Navigation03Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  FaRegThumbsUp,\n  FaThumbsUp,\n  FaRegThumbsDown,\n  FaThumbsDown,\n} from 'react-icons/fa6';\n\ninterface FeedbackComponentProps {\n  onSubmit?: (data: { rating: 'up' | 'down'; feedback: string }) => void;\n}\n\nconst SPRING_CONFIG = {\n  ease: 'easeInOut' as const,\n  duration: 0.3,\n};\n\nexport const FeedbackComponent: React.FC<FeedbackComponentProps> = ({\n  onSubmit,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [activeRating, setActiveRating] = useState<'up' | 'down' | null>(null);\n  const [animatingIcon, setAnimatingIcon] = useState<'up' | 'down' | null>(\n    null,\n  );\n  const [feedback, setFeedback] = useState('');\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const handleOpen = (type: 'up' | 'down') => {\n    if (animatingIcon) return; // Prevent double clicks during animation\n    setActiveRating(type);\n    setAnimatingIcon(type);\n\n    // Wait for the thumb pop animation to finish before expanding the card\n    setTimeout(() => {\n      setIsOpen(true);\n      setAnimatingIcon(null);\n    }, 500);\n  };\n\n  const handleClose = () => {\n    setIsOpen(false);\n    setTimeout(() => {\n      setActiveRating(null);\n      setFeedback('');\n    }, 400);\n  };\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!activeRating) return;\n    setIsSubmitting(true);\n    setTimeout(() => {\n      onSubmit?.({ rating: activeRating, feedback });\n      setIsSubmitting(false);\n      handleClose();\n    }, 800);\n  };\n\n  return (\n    <div className=\"theme-injected relative flex min-h-100 w-full items-center justify-center px-4 font-sans\">\n      <LayoutGroup id=\"feedback-group\">\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen ? (\n            <motion.div\n              key=\"initial-buttons\"\n              className=\"flex gap-4\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0, transition: { duration: 0.1 } }}\n            >\n              {(['up', 'down'] as const).map((type) => (\n                <motion.button\n                  key={type}\n                  layoutId={\n                    activeRating === type ? 'feedback-card' : `button-${type}`\n                  }\n                  onClick={() => handleOpen(type)}\n                  whileHover={{ scale: 1.05 }}\n                  whileTap={{ scale: 0.95 }}\n                  transition={SPRING_CONFIG}\n                  className=\"relative flex h-16 w-16 items-center justify-center overflow-visible rounded-2xl bg-primary text-primary-foreground shadow-xl\"\n                >\n                  <AnimatePresence>\n                    {animatingIcon === type && (\n                      <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n                        {[...Array(6)].map((_, i) => {\n                          const angle = (i * 60 * Math.PI) / 180;\n                          const distance = 45;\n                          return (\n                            <motion.div\n                              key={`sparkle-${i}`}\n                              className=\"absolute text-primary-foreground\"\n                              initial={{\n                                scale: 0,\n                                x: 0,\n                                y: 0,\n                                opacity: 1,\n                                rotate: 0,\n                              }}\n                              animate={{\n                                scale: [0, 1.2, 0],\n                                x: Math.cos(angle) * distance,\n                                y: Math.sin(angle) * distance,\n                                opacity: [1, 1, 0],\n                                rotate: [0, 90],\n                              }}\n                              transition={{ duration: 0.5, ease: 'easeOut' }}\n                            >\n                              <Sparkle\n                                className=\"size-3\"\n                                fill=\"currentColor\"\n                              />\n                            </motion.div>\n                          );\n                        })}\n                      </div>\n                    )}\n                  </AnimatePresence>\n\n                  <motion.div\n                    className=\"relative z-10\"\n                    animate={\n                      animatingIcon === type\n                        ? {\n                            scale: [1, 1.8, 1],\n                            rotate: [\n                              0,\n                              type === 'up' ? -35 : 35,\n                              type === 'down' ? 35 : -35,\n                              0,\n                            ],\n                            y: [0, -4, 0],\n                          }\n                        : { scale: 1, rotate: 0, y: 0 }\n                    }\n                    transition={{ duration: 0.5, ease: 'easeOut' }}\n                  >\n                    {type === 'up' ? (\n                      activeRating === 'up' ? (\n                        <FaThumbsUp className=\"h-6 w-6 text-primary-foreground\" />\n                      ) : (\n                        <FaRegThumbsUp className=\"h-6 w-6 text-primary-foreground\" />\n                      )\n                    ) : activeRating === 'down' ? (\n                      <FaThumbsDown className=\"h-6 w-6 text-primary-foreground\" />\n                    ) : (\n                      <FaRegThumbsDown className=\"h-6 w-6 text-primary-foreground\" />\n                    )}\n                  </motion.div>\n                </motion.button>\n              ))}\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"modal\"\n              layoutId=\"feedback-card\"\n              className=\"relative z-50 w-xs overflow-hidden rounded-2xl border border-border bg-card p-5 font-sans shadow-2xl sm:w-sm sm:rounded-3xl sm:p-8\"\n              transition={SPRING_CONFIG}\n            >\n              <motion.button\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ delay: 0.1 }}\n                onClick={(e) => {\n                  e.stopPropagation();\n                  handleClose();\n                }}\n                className=\"absolute top-4 right-4 rounded-2xl bg-muted p-1.5 text-muted-foreground transition-all hover:scale-110 hover:text-foreground active:scale-90 sm:top-5 sm:right-5 sm:p-2\"\n              >\n                <X className=\"h-3.5 w-3.5 sm:h-4 sm:w-4\" strokeWidth={3} />\n              </motion.button>\n\n              <motion.div\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.3 }}\n                className=\"relative pt-2\"\n              >\n                <h2 className=\"mb-1.5 pr-8 font-sans text-[20px] leading-tight font-bold text-foreground sm:mb-2 sm:text-[24px]\">\n                  Share Feedback\n                </h2>\n\n                <p className=\"mb-5 pr-6 font-sans text-[14px] leading-relaxed text-muted-foreground sm:mb-6 sm:text-[16px]\">\n                  {activeRating === 'up'\n                    ? 'Let us know what you liked most?'\n                    : 'What can we improve?'}\n                </p>\n\n                <form onSubmit={handleSubmit} className=\"space-y-4\">\n                  <div>\n                    <textarea\n                      autoFocus\n                      value={feedback}\n                      onChange={(e) => setFeedback(e.target.value)}\n                      placeholder=\"Type in your feedback (optional)\"\n                      className=\"h-32 w-full resize-none rounded-xl border border-border bg-muted p-4 font-sans text-foreground transition-all outline-none focus:ring-2 focus:ring-ring\"\n                    />\n                  </div>\n\n                  <button\n                    type=\"submit\"\n                    disabled={isSubmitting}\n                    className=\"flex items-center gap-2 rounded-xl bg-primary px-6 py-3 font-sans font-bold text-primary-foreground shadow-lg transition-all hover:opacity-90 active:scale-95 disabled:opacity-50\"\n                  >\n                    <HugeiconsIcon\n                      icon={Navigation03Icon}\n                      size={18}\n                      className=\"fill-current\"\n                    />\n                    <span>{isSubmitting ? 'Sending...' : 'Send Now'}</span>\n                  </button>\n                </form>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </LayoutGroup>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "filter-disclosure",
      "type": "registry:component",
      "title": "Filter Disclosure",
      "description": "A smooth expanding filter component with active state indicators.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/filter-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n} from 'motion/react';\nimport { FaBell, FaTasks } from 'react-icons/fa';\nimport { IoCalendar } from 'react-icons/io5';\nimport { BsCheckLg, BsFillPeopleFill, BsPinFill } from 'react-icons/bs';\nimport { RiBubbleChartFill } from 'react-icons/ri';\nimport { PiFunnelSimpleBold } from 'react-icons/pi';\nimport type { IconType } from 'react-icons';\n\nexport interface FilterItem {\n  id: string;\n  label: string;\n  icon: IconType;\n}\n\ninterface FilterDisclosureProps {\n  items?: FilterItem[];\n  defaultActiveId?: string;\n  onChange?: (id: string) => void;\n}\n\nconst SPRING = {\n  type: 'spring',\n  stiffness: 240,\n  damping: 20,\n  mass: 1,\n} as const;\n\nconst DEFAULT_ITEMS: FilterItem[] = [\n  { id: 'tasks', label: 'Tasks', icon: FaTasks },\n  { id: 'events', label: 'Events', icon: IoCalendar },\n  { id: 'reminders', label: 'Reminders', icon: FaBell },\n  { id: 'appointments', label: 'Appointment', icon: BsPinFill },\n  { id: 'meetings', label: 'Mettings', icon: BsFillPeopleFill },\n  { id: 'celebrations', label: 'Celebrations', icon: RiBubbleChartFill },\n];\n\nexport const FilterDisclosure: FC<FilterDisclosureProps> = ({\n  items = DEFAULT_ITEMS,\n  defaultActiveId = 'reminders',\n  onChange,\n}) => {\n  const [open, setOpen] = useState(false);\n  const [active, setActive] = useState(defaultActiveId);\n\n  const activeItem = items.find((i) => i.id === active);\n  const ActiveIcon = activeItem ? activeItem.icon : FaTasks;\n\n  const handleSelect = (id: string) => {\n    setActive(id);\n    onChange?.(id);\n    setTimeout(() => setOpen(false), 220);\n  };\n\n  return (\n    <div className=\"flex h-[70px] w-[300px] items-center justify-center\">\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          bounce: 0.25,\n          duration: 0.7,\n        }}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {open ? (\n            <motion.div\n              key=\"open\"\n              layoutId=\"filter-disclosure\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{\n                opacity: 0,\n                transition: { duration: 0 },\n              }}\n              style={{ transformOrigin: '50% 100%', borderRadius: 32 }}\n              className=\"absolute z-20 flex w-[300px] flex-col gap-[4px] overflow-hidden rounded-2xl border-[1.6px] border-[#E5E5E9] bg-[#FEFEFE] p-[8px] shadow-[0_12px_40px_rgba(0,0,0,0.08)] will-change-transform dark:border-neutral-800 dark:bg-neutral-900 dark:shadow-[0_20px_50px_rgba(0,0,0,0.5)]\"\n            >\n              {items.map((item, index) => {\n                const Icon = item.icon;\n                const selected = active === item.id;\n\n                return (\n                  <motion.button\n                    key={item.id}\n                    initial={{ opacity: 0, scale: 1.1, y: 40 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    onClick={() => handleSelect(item.id)}\n                    whileTap={{ scale: 0.98 }}\n                    transition={{ ...SPRING, delay: (3 + index) * 0.05 }}\n                    className=\"flex w-full cursor-pointer items-center justify-between rounded-[16px] px-[12px] py-[10px] transition-colors hover:bg-[#F6F5FA] dark:hover:bg-neutral-800/60\"\n                  >\n                    <div className=\"flex items-center gap-[28px]\">\n                      <Icon className=\"h-[24px] w-[24px] text-[#AFAEB9] dark:text-neutral-500\" />\n                      <span className=\"text-[18px] font-bold tracking-tight text-[#535257] dark:text-neutral-200\">\n                        {item.label}\n                      </span>\n                    </div>\n\n                    <motion.div\n                      animate={{\n                        backgroundColor: selected ? '#31C051' : 'rgba(0,0,0,0)',\n                      }}\n                      className={`flex h-[26px] w-[26px] shrink-0 items-center justify-center rounded-full border-[3px] ${selected ? 'border-[#31C051]' : 'border-[#ADADB2] dark:border-neutral-700'} `}\n                    >\n                      <motion.div\n                        animate={{\n                          scale: selected ? 1 : 0,\n                          opacity: selected ? 1 : 0,\n                        }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 520,\n                          damping: 30,\n                        }}\n                      >\n                        <BsCheckLg className=\"h-[16px] w-[16px] text-white\" />\n                      </motion.div>\n                    </motion.div>\n                  </motion.button>\n                );\n              })}\n            </motion.div>\n          ) : (\n            <div key=\"close\" className=\"flex items-center\">\n              <motion.button\n                layoutId=\"filter-disclosure\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{\n                  opacity: 0,\n                  transition: { duration: 0 },\n                }}\n                onClick={() => setOpen(true)}\n                whileHover={{ scale: 1.05 }}\n                whileTap={{ scale: 0.95 }}\n                style={{\n                  borderRadius: 32,\n                }}\n                className=\"z-30 flex h-[60px] w-[60px] cursor-pointer items-center justify-center rounded-full border-[1.6px] border-[#E5E5E9] bg-[#FEFEFE] shadow-xs will-change-transform dark:border-neutral-800 dark:bg-neutral-900\"\n              >\n                <PiFunnelSimpleBold className=\"h-[30px] w-[30px] text-[#272729] dark:text-neutral-100\" />\n              </motion.button>\n\n              <motion.div\n                initial={{ x: -30 }}\n                animate={{ x: 0 }}\n                transition={{\n                  type: 'spring',\n                  bounce: 0,\n                  duration: 1.2,\n                }}\n                className=\"z-10 -ml-[12px] flex h-[60px] w-[60px] items-center justify-center rounded-full border-[1.6px] border-[#E5E5E9] bg-[#FEFEFE] opacity-80 shadow-xs dark:border-neutral-800 dark:bg-neutral-900\"\n              >\n                <AnimatePresence mode=\"popLayout\" initial={false}>\n                  <motion.div\n                    key={active}\n                    initial={{ opacity: 0, scale: 0.6 }}\n                    animate={{ opacity: 1, scale: 1 }}\n                    exit={{ opacity: 0, scale: 0.6 }}\n                  >\n                    <ActiveIcon className=\"h-[24px] w-[24px] text-[#AFAEB9] dark:text-neutral-500\" />\n                  </motion.div>\n                </AnimatePresence>\n              </motion.div>\n            </div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "filter-disclosure-base",
      "type": "registry:component",
      "title": "Filter Disclosure (base)",
      "description": "Theme-ready base variant of A smooth expanding filter component with active state indicators..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/filter-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { FaBell, FaTasks } from 'react-icons/fa';\nimport { IoCalendar } from 'react-icons/io5';\nimport { BsCheckLg, BsFillPeopleFill, BsPinFill } from 'react-icons/bs';\nimport { RiBubbleChartFill } from 'react-icons/ri';\nimport { PiFunnelSimpleBold } from 'react-icons/pi';\nimport type { IconType } from 'react-icons';\n\nexport interface FilterItem {\n  id: string;\n  label: string;\n  icon: IconType;\n}\n\ninterface FilterDisclosureProps {\n  items?: FilterItem[];\n  defaultActiveId?: string;\n  onChange?: (id: string) => void;\n}\n\nconst SPRING = {\n  type: 'spring',\n  stiffness: 240,\n  damping: 20,\n  mass: 1,\n} as const;\n\nconst DEFAULT_ITEMS: FilterItem[] = [\n  { id: 'tasks', label: 'Tasks', icon: FaTasks },\n  { id: 'events', label: 'Events', icon: IoCalendar },\n  { id: 'reminders', label: 'Reminders', icon: FaBell },\n  { id: 'appointments', label: 'Appointment', icon: BsPinFill },\n  { id: 'meetings', label: 'Mettings', icon: BsFillPeopleFill },\n  { id: 'celebrations', label: 'Celebrations', icon: RiBubbleChartFill },\n];\n\nexport const FilterDisclosure: FC<FilterDisclosureProps> = ({\n  items = DEFAULT_ITEMS,\n  defaultActiveId = 'reminders',\n  onChange,\n}) => {\n  const [open, setOpen] = useState(false);\n  const [active, setActive] = useState(defaultActiveId);\n\n  const activeItem = items.find((i) => i.id === active);\n  const ActiveIcon = activeItem ? activeItem.icon : FaTasks;\n\n  const handleSelect = (id: string) => {\n    setActive(id);\n    onChange?.(id);\n    setTimeout(() => setOpen(false), 220);\n  };\n\n  return (\n    <div className=\"theme-injected flex h-[500px] w-[300px] items-center justify-center\">\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          bounce: 0.25,\n          duration: 0.7,\n        }}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {open ? (\n            <motion.div\n              key=\"open\"\n              layoutId=\"filter-disclosure\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{\n                opacity: 0,\n                transition: { duration: 0 },\n              }}\n              style={{ transformOrigin: '50% 100%' }}\n              className=\"border-border bg-popover absolute z-20 flex w-[300px] flex-col gap-[4px] overflow-hidden  border-[1.6px] p-[8px] shadow-xl will-change-transform rounded-lg\"\n            >\n              {items.map((item, index) => {\n                const Icon = item.icon;\n                const selected = active === item.id;\n\n                return (\n                  <motion.button\n                    key={item.id}\n                    initial={{ opacity: 0, scale: 1.1, y: 40 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    onClick={() => handleSelect(item.id)}\n                    whileTap={{ scale: 0.98 }}\n                    transition={{ ...SPRING, delay: (3 + index) * 0.05 }}\n                    className=\"hover:bg-accent flex w-full cursor-pointer items-center justify-between rounded-lg px-[12px] py-[10px] transition-colors\"\n                  >\n                    <div className=\"flex items-center gap-[28px]\">\n                      <Icon className=\"text-muted-foreground h-[24px] w-[24px]\" />\n                      <span className=\"text-foreground text-[18px] font-bold tracking-tight\">\n                        {item.label}\n                      </span>\n                    </div>\n\n                    <motion.div\n                    \n                      className={`flex h-[26px] w-[26px] shrink-0 items-center justify-center rounded-lg border-[3px] ${\n                        selected ? 'border-primary bg-primary' : 'border-border'\n                      }`}\n                    >\n                      <motion.div\n                        animate={{\n                          scale: selected ? 1 : 0,\n                          opacity: selected ? 1 : 0,\n                        }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 520,\n                          damping: 30,\n                        }}\n                      >\n                        <BsCheckLg className=\"text-primary-foreground h-[16px] w-[16px]\" />\n                      </motion.div>\n                    </motion.div>\n                  </motion.button>\n                );\n              })}\n            </motion.div>\n          ) : (\n            <div key=\"close\" className=\"flex items-center\">\n              <motion.button\n                layoutId=\"filter-disclosure\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{\n                  opacity: 0,\n                  transition: { duration: 0 },\n                }}\n                onClick={() => setOpen(true)}\n                whileHover={{ scale: 1.05 }}\n                whileTap={{ scale: 0.95 }}\n               \n                className=\"border-border bg-background z-30 flex h-[60px] w-[60px] cursor-pointer items-center justify-center rounded-lg border-[1.6px] shadow-sm will-change-transform\"\n              >\n                <PiFunnelSimpleBold className=\"text-foreground h-[30px] w-[30px]\" />\n              </motion.button>\n\n              <motion.div\n                initial={{ x: -30 }}\n                animate={{ x: 0 }}\n                transition={{\n                  type: 'spring',\n                  bounce: 0,\n                  duration: 1.2,\n                }}\n                className=\"border-border bg-background z-10 -ml-[12px] flex h-[60px] w-[60px] items-center justify-center rounded-lg border-[1.6px] opacity-80 shadow-sm\"\n              >\n                <AnimatePresence mode=\"popLayout\" initial={false}>\n                  <motion.div\n                    key={active}\n                    initial={{ opacity: 0, scale: 0.6 }}\n                    animate={{ opacity: 1, scale: 1 }}\n                    exit={{ opacity: 0, scale: 0.6 }}\n                  >\n                    <ActiveIcon className=\"text-muted-foreground h-[24px] w-[24px]\" />\n                  </motion.div>\n                </AnimatePresence>\n              </motion.div>\n            </div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "floating-disclosure",
      "type": "registry:component",
      "title": "Floating Disclosure",
      "description": "A compact expandable action menu with animated resizing,  floating close button, and spring-based item reveal.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/floating-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useState } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { PlusIcon } from 'lucide-react';\nimport { BsFileTextFill } from 'react-icons/bs';\nimport { FaBell } from 'react-icons/fa6';\nimport { TbFileFilled } from 'react-icons/tb';\nimport { IoIosFolder } from 'react-icons/io';\nimport useMeasure from 'react-use-measure';\nimport { cn } from '@/lib/utils';\nimport type { IconType } from 'react-icons';\n\ninterface TooltipItem {\n  title: string;\n  description: string;\n  icon: IconType;\n}\ninterface FloatingDisclosureProps {\n  items: TooltipItem[];\n}\n\nexport const items = [\n  {\n    title: 'Task',\n    description: 'Create a new task',\n    icon: BsFileTextFill,\n  },\n  {\n    title: 'Reminder',\n    description: 'Create reminders',\n    icon: FaBell,\n  },\n  {\n    title: 'Note',\n    description: 'Capture ideas',\n    icon: TbFileFilled,\n  },\n  {\n    title: 'Project',\n    description: 'Organise projects',\n    icon: IoIosFolder,\n  },\n];\n\nexport const FloatingDisclosure = ({ items }: FloatingDisclosureProps) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  useEffect(() => {\n    console.log(bounds);\n  }, [isOpen, bounds]);\n\n  return (\n    <MotionConfig\n      transition={{\n        type: 'spring',\n        stiffness: 280,\n        damping: 26,\n      }}\n    >\n      <motion.div\n        className={cn(\n          'flex items-center justify-center overflow-hidden rounded-3xl bg-[rgb(241,236,231)] shadow-[0_0_0_1px_rgba(0,0,0,0.01),0_1px_2px_-1px_rgba(0,0,0,0.01),0_2px_4px_0_rgba(0,0,0,0.01)] transition-colors duration-400 ease-out dark:bg-neutral-700',\n          {\n            'border border-black/5 bg-neutral-50 dark:border-white/5 dark:bg-neutral-900':\n              isOpen,\n          },\n        )}\n        animate={{\n          width: bounds.width > 0 ? bounds.width : 'auto',\n          height: bounds.height > 0 ? bounds.height : 'auto',\n        }}\n      >\n        <AnimatePresence mode=\"popLayout\">\n          {isOpen && (\n            <motion.div\n              className=\"absolute z-10 flex cursor-pointer items-center gap-2 rounded-2xl border bg-[#F1ECE7] px-4 py-1.5 dark:border-white/5 dark:bg-neutral-900\"\n              initial={{\n                opacity: 0,\n                filter: 'blur(8px)',\n                y: 0,\n                top: '50%',\n                left: '50%',\n                x: '-50%',\n              }}\n              animate={{\n                opacity: 1,\n                filter: 'blur(0px)',\n                y: -170,\n                top: '50%',\n                left: '50%',\n                x: '-50%',\n                pointerEvents: 'auto',\n              }}\n              exit={{\n                opacity: 0,\n                filter: 'blur(8px)',\n                y: 0,\n              }}\n              transition={{\n                type: 'spring',\n                delay: 0.05,\n                duration: 0.6,\n                bounce: 0.3,\n              }}\n              onClick={() => setIsOpen(false)}\n            >\n              <PlusIcon\n                className={cn(\n                  'rotate-0 text-neutral-500 transition-transform duration-300 ease-in-out',\n                  isOpen && 'rotate-45',\n                )}\n              />\n            </motion.div>\n          )}\n        </AnimatePresence>\n        <div ref={ref} className={cn('p-2')}>\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <motion.div\n                key=\"close\"\n                className=\"shrink-0 cursor-pointer px-6\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{\n                  duration: 0.2,\n                  ease: 'easeOut',\n                }}\n                onClick={() => setIsOpen(!isOpen)}\n              >\n                <PlusIcon className=\"h-6 w-6 text-neutral-500 dark:text-neutral-100\" />\n              </motion.div>\n            ) : (\n              <motion.div key=\"open\" className=\"flex shrink-0 flex-col gap-3\">\n                {items.map((item) => (\n                  <motion.div\n                    key={item.title}\n                    className=\"flex flex-1 shrink-0 cursor-pointer items-center gap-2 rounded-xl p-1 hover:bg-[#f9f6f4] dark:hover:bg-white/5\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(4px)',\n                      y: 20,\n                      scale: 1,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                      y: 0,\n                      scale: 1,\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(4px)',\n                      transition: { duration: 0.2, ease: 'easeOut' },\n                    }}\n                    transition={{\n                      delay: 0.15,\n                      type: 'spring',\n                      stiffness: 200,\n                      damping: 20,\n                    }}\n                  >\n                    <div className=\"shrink-0 rounded-lg bg-[#F1ECE7] p-2 dark:bg-neutral-700\">\n                      <item.icon className=\"h-5 w-5 text-neutral-500 dark:text-neutral-100\" />\n                    </div>\n\n                    <div className=\"flex w-52 flex-col leading-none text-nowrap\">\n                      <p className=\"font-semibold text-zinc-700 dark:text-neutral-100\">\n                        {item.title}\n                      </p>\n                      <span className=\"text-sm text-zinc-500 dark:text-neutral-400\">\n                        {item.description}\n                      </span>\n                    </div>\n                  </motion.div>\n                ))}\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "floating-disclosure-base",
      "type": "registry:component",
      "title": "Floating Disclosure (base)",
      "description": "Theme-ready base variant of A compact expandable action menu with animated resizing,  floating close button, and spring-based item reveal..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/floating-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useState } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { PlusIcon } from 'lucide-react';\nimport { BsFileTextFill } from 'react-icons/bs';\nimport { FaBell } from 'react-icons/fa6';\nimport { TbFileFilled } from 'react-icons/tb';\nimport { IoIosFolder } from 'react-icons/io';\nimport useMeasure from 'react-use-measure';\nimport { cn } from '@/lib/utils';\nimport type { IconType } from 'react-icons';\n\ninterface TooltipItem {\n  title: string;\n  description: string;\n  icon: IconType;\n}\ninterface FloatingDisclosureProps {\n  items: TooltipItem[];\n}\n\nexport const items = [\n  {\n    title: 'Task',\n    description: 'Create a new task',\n    icon: BsFileTextFill,\n  },\n  {\n    title: 'Reminder',\n    description: 'Create reminders',\n    icon: FaBell,\n  },\n  {\n    title: 'Note',\n    description: 'Capture ideas',\n    icon: TbFileFilled,\n  },\n  {\n    title: 'Project',\n    description: 'Organise projects',\n    icon: IoIosFolder,\n  },\n];\n\nexport const FloatingDisclosure = ({ items }: FloatingDisclosureProps) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  useEffect(() => {\n    console.log(bounds);\n  }, [isOpen, bounds]);\n\n  return (\n    <MotionConfig\n      transition={{\n        type: 'spring',\n        stiffness: 280,\n        damping: 26,\n      }}\n    >\n      <div className=\"h-[500px] flex items-center justify-center\">\n        <motion.div\n          className={cn(\n            'theme-injected bg-background border-border flex items-center justify-center overflow-hidden rounded-lg border shadow-[0_0_0_1px_hsl(var(--border)/0.2),0_1px_2px_-1px_hsl(var(--foreground)/0.05),0_2px_4px_0_hsl(var(--foreground)/0.05)] transition-colors duration-400 ease-out',\n          )}\n          animate={{\n            width: bounds.width > 0 ? bounds.width : 'auto',\n            height: bounds.height > 0 ? bounds.height : 'auto',\n          }}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {isOpen && (\n              <motion.div\n                className=\"border-border bg-popover absolute z-10 flex cursor-pointer items-center gap-2 rounded-lg border px-4 py-1.5\"\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                  y: 0,\n                  top: '50%',\n                  left: '50%',\n                  x: '-50%',\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: -170,\n                  top: '50%',\n                  left: '50%',\n                  x: '-50%',\n                  pointerEvents: 'auto',\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                  y: 0,\n                }}\n                transition={{\n                  type: 'spring',\n                  delay: 0.05,\n                  duration: 0.6,\n                  bounce: 0.3,\n                }}\n                onClick={() => setIsOpen(false)}\n              >\n                <PlusIcon\n                  className={cn(\n                    'text-muted-foreground rotate-0 transition-transform duration-300 ease-in-out',\n                    isOpen && 'rotate-45',\n                  )}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n          <div ref={ref} className={cn('p-2')}>\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {!isOpen ? (\n                <motion.div\n                  key=\"close\"\n                  className=\"shrink-0 cursor-pointer px-6\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  transition={{\n                    duration: 0.2,\n                    ease: 'easeOut',\n                  }}\n                  onClick={() => setIsOpen(!isOpen)}\n                >\n                  <PlusIcon className=\"text-muted-foreground h-6 w-6\" />\n                </motion.div>\n              ) : (\n                <motion.div key=\"open\" className=\"flex shrink-0 flex-col gap-3\">\n                  {items.map((item) => (\n                    <motion.div\n                      key={item.title}\n                      className=\"hover:bg-accent flex flex-1 shrink-0 cursor-pointer items-center gap-2 rounded-lg p-1\"\n                      initial={{\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: 20,\n                        scale: 1,\n                      }}\n                      animate={{\n                        opacity: 1,\n                        filter: 'blur(0px)',\n                        y: 0,\n                        scale: 1,\n                      }}\n                      exit={{\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        transition: { duration: 0.2, ease: 'easeOut' },\n                      }}\n                      transition={{\n                        delay: 0.15,\n                        type: 'spring',\n                        stiffness: 200,\n                        damping: 20,\n                      }}\n                    >\n                      <div className=\"bg-muted shrink-0 rounded-lg p-2\">\n                        <item.icon className=\"text-muted-foreground h-5 w-5\" />\n                      </div>\n\n                      <div className=\"flex w-52 flex-col leading-none text-nowrap\">\n                        <p className=\"text-foreground font-semibold\">\n                          {item.title}\n                        </p>\n                        <span className=\"text-muted-foreground text-sm\">\n                          {item.description}\n                        </span>\n                      </div>\n                    </motion.div>\n                  ))}\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </motion.div>\n      </div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "floating-input",
      "type": "registry:component",
      "title": "Floating Input",
      "description": "An input field with floating label animation.",
      "dependencies": [],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/floating-input.tsx",
          "type": "registry:component",
          "content": "import { cn } from \"@/lib/utils\";\nimport { useState } from \"react\";\n\ninterface FloatingInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n  label: string;\n}\n\nexport function FloatingInput({ label, className, ...props }: FloatingInputProps) {\n  const [focused, setFocused] = useState(false);\n  const [hasValue, setHasValue] = useState(false);\n\n  return (\n    <div className=\"relative\">\n      <input\n        className={cn(\n          \"peer w-full px-4 py-3 border rounded-lg bg-transparent outline-none\",\n          \"border-border focus:border-primary transition-colors\",\n          className\n        )}\n        placeholder=\" \"\n        onFocus={() => setFocused(true)}\n        onBlur={(e) => {\n          setFocused(false);\n          setHasValue(e.target.value !== \"\");\n        }}\n        onChange={(e) => setHasValue(e.target.value !== \"\")}\n        {...props}\n      />\n      <label\n        className={cn(\n          \"absolute left-4 top-3 text-muted-foreground transition-all duration-200 pointer-events-none\",\n          \"peer-focus:-top-2.5 peer-focus:left-3 peer-focus:text-xs peer-focus:bg-background peer-focus:px-1\",\n          \"peer-focus:text-primary\",\n          (focused || hasValue) && \"-top-2.5 left-3 text-xs bg-background px-1\"\n        )}\n      >\n        {label}\n      </label>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "floating-input-base",
      "type": "registry:component",
      "title": "Floating Input (base)",
      "description": "Theme-ready base variant of An input field with floating label animation..",
      "dependencies": [],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/floating-input.tsx",
          "type": "registry:component",
          "content": "import { cn } from \"@/lib/utils\";\nimport { useState } from \"react\";\n\ninterface FloatingInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n  label: string;\n}\n\nexport function FloatingInput({ label, className, ...props }: FloatingInputProps) {\n  const [focused, setFocused] = useState(false);\n  const [hasValue, setHasValue] = useState(false);\n\n  return (\n    <div className=\"relative\">\n      <input\n        className={cn(\n          \"peer w-full px-4 py-3 border rounded-lg bg-input outline-none\",\n          \"border-border focus:border-primary transition-colors\",\n          className\n        )}\n        placeholder=\" \"\n        onFocus={() => setFocused(true)}\n        onBlur={(e) => {\n          setFocused(false);\n          setHasValue(e.target.value !== \"\");\n        }}\n        onChange={(e) => setHasValue(e.target.value !== \"\")}\n        {...props}\n      />\n      <label\n        className={cn(\n          \"absolute left-4 top-3 text-muted-foreground transition-all duration-200 pointer-events-none\",\n          \"peer-focus:-top-2.5 peer-focus:left-3 peer-focus:text-xs peer-focus:bg-background peer-focus:px-1\",\n          \"peer-focus:text-primary\",\n          (focused || hasValue) && \"-top-2.5 left-3 text-xs bg-background px-1\"\n        )}\n      >\n        {label}\n      </label>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fluid-tabs",
      "type": "registry:component",
      "title": "Fluid Tabs",
      "description": "A fluid, spring-animated tab component with floating active indicator and icon scaling.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/fluid-tabs.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type ReactNode, type FC } from 'react';\nimport { motion } from 'motion/react';\nimport { BiSolidPieChartAlt2 } from 'react-icons/bi';\nimport { FaInbox, FaLandmark } from 'react-icons/fa';\n\nexport interface TabItem {\n  id: string;\n  label: string;\n  icon: ReactNode;\n}\n\ninterface FluidTabsProps {\n  tabs?: TabItem[];\n  defaultActive?: string;\n  onChange?: (id: string) => void;\n}\n\nconst DEFAULT_TABS: TabItem[] = [\n  { id: 'accounts', label: 'Accounts', icon: <FaLandmark size={22} /> },\n  { id: 'deposits', label: 'Deposits', icon: <FaInbox size={22} /> },\n  { id: 'funds', label: 'Funds', icon: <BiSolidPieChartAlt2 size={22} /> },\n];\n\nexport const FluidTabs: FC<FluidTabsProps> = ({\n  tabs = DEFAULT_TABS,\n  defaultActive = tabs[0]?.id,\n  onChange,\n}) => {\n  const [active, setActive] = useState<string>(defaultActive);\n\n  const handleChange = (id: string) => {\n    setActive(id);\n    onChange?.(id);\n  };\n\n  return (\n    <div className=\"relative flex items-center gap-1 rounded-full border-[1.6px] border-[#f5f1ebf4] bg-[#F5F1EB] px-1 py-1 transition-colors sm:gap-2 dark:border-neutral-800 dark:bg-neutral-900\">\n      {tabs.map((tab) => {\n        const isActive = active === tab.id;\n\n        return (\n          <button\n            key={tab.id}\n            onClick={() => handleChange(tab.id)}\n            className=\"group relative rounded-full px-3 py-2.5 outline-none sm:px-4 sm:py-3.5\"\n          >\n            {isActive && (\n              <motion.div\n                layoutId=\"active-pill\"\n                transition={{\n                  type: 'spring',\n                  stiffness: 280,\n                  damping: 25,\n                  mass: 0.8,\n                }}\n                className=\"absolute inset-0 rounded-full border border-[#fefefe]/90 bg-gradient-to-b from-[#fefefe] to-gray-50/80 shadow-xs dark:border-neutral-600/50 dark:from-neutral-700 dark:to-neutral-800/90\"\n              />\n            )}\n\n            <motion.div\n              transition={{\n                duration: 0.3,\n                ease: 'easeOut',\n              }}\n              animate={{\n                filter: isActive\n                  ? ['blur(0px)', 'blur(4px)', 'blur(0px)']\n                  : 'blur(0px)',\n              }}\n              className={`relative z-10 flex items-center gap-1.5 transition-colors duration-200 sm:gap-3 ${\n                isActive\n                  ? 'font-bold text-[#292926] dark:text-white'\n                  : 'font-semibold text-[#585652] dark:text-neutral-500 group-hover:dark:text-neutral-300'\n              }`}\n            >\n              <motion.div\n                animate={{ scale: isActive ? 1.03 : 1 }}\n                transition={{\n                  scale: { type: 'spring', stiffness: 300, damping: 15 },\n                }}\n                className=\"flex shrink-0 items-center justify-center\"\n              >\n                {tab.icon}\n              </motion.div>\n\n              <span className=\"text-sm tracking-tight whitespace-nowrap sm:text-base\">\n                {tab.label}\n              </span>\n            </motion.div>\n          </button>\n        );\n      })}\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fluid-tabs-base",
      "type": "registry:component",
      "title": "Fluid Tabs (base)",
      "description": "Theme-ready base variant of A fluid, spring-animated tab component with floating active indicator and icon scaling..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/fluid-tabs.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type ReactNode, type FC } from 'react';\nimport { motion } from 'motion/react';\nimport { BiSolidPieChartAlt2 } from 'react-icons/bi';\nimport { FaInbox, FaLandmark } from 'react-icons/fa';\n\nexport interface TabItem {\n  id: string;\n  label: string;\n  icon: ReactNode;\n}\n\ninterface FluidTabsProps {\n  tabs?: TabItem[];\n  defaultActive?: string;\n  onChange?: (id: string) => void;\n}\n\nconst DEFAULT_TABS: TabItem[] = [\n  { id: 'accounts', label: 'Accounts', icon: <FaLandmark size={22} /> },\n  { id: 'deposits', label: 'Deposits', icon: <FaInbox size={22} /> },\n  { id: 'funds', label: 'Funds', icon: <BiSolidPieChartAlt2 size={22} /> },\n];\n\nexport const FluidTabs: FC<FluidTabsProps> = ({\n  tabs = DEFAULT_TABS,\n  defaultActive = tabs[0]?.id,\n  onChange,\n}) => {\n  const [active, setActive] = useState<string>(defaultActive);\n\n  const handleChange = (id: string) => {\n    setActive(id);\n    onChange?.(id);\n  };\n\n  return (\n    <div className=\"theme-injected border-border bg-background relative flex items-center gap-1 rounded-lg border-[1.6px] px-1 py-1 transition-colors sm:gap-2\">\n      {tabs.map((tab) => {\n        const isActive = active === tab.id;\n\n        return (\n          <button\n            key={tab.id}\n            onClick={() => handleChange(tab.id)}\n            className=\"group relative rounded-lg px-3 py-2.5 outline-none sm:px-4 sm:py-3.5\"\n          >\n            {isActive && (\n              <motion.div\n                layoutId=\"active-pill\"\n                transition={{\n                  type: 'spring',\n                  stiffness: 280,\n                  damping: 25,\n                  mass: 0.8,\n                }}\n                className=\"border-border bg-foreground absolute inset-0 rounded-lg border shadow-xs\"\n              />\n            )}\n\n            <motion.div\n              transition={{\n                duration: 0.3,\n                ease: 'easeOut',\n              }}\n              animate={{\n                filter: isActive\n                  ? ['blur(0px)', 'blur(4px)', 'blur(0px)']\n                  : 'blur(0px)',\n              }}\n              className={`relative z-10 flex items-center gap-1.5 transition-colors duration-200 sm:gap-3 ${\n                isActive\n                  ? 'text-muted font-bold'\n                  : 'text-muted-foreground hover:text-foreground font-semibold'\n              }`}\n            >\n              <motion.div\n                animate={{ scale: isActive ? 1.03 : 1 }}\n                transition={{\n                  scale: { type: 'spring', stiffness: 300, damping: 15 },\n                }}\n                className=\"flex shrink-0 items-center justify-center\"\n              >\n                {tab.icon}\n              </motion.div>\n\n              <span className=\"text-sm tracking-tight whitespace-nowrap sm:text-base\">\n                {tab.label}\n              </span>\n            </motion.div>\n          </button>\n        );\n      })}\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fractional-picker",
      "type": "registry:component",
      "title": "Fractional Picker",
      "description": "A smooth draggable ruler-style picker for selecting numeric values with spring snapping.",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/fractional-picker.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  animate,\n  MotionValue,\n} from 'framer-motion';\nimport { cn } from '@/lib/utils';\n\ninterface RulerItemProps {\n  value: number;\n  x: MotionValue<number>;\n  itemWidth: number;\n  max: number;\n}\n\nfunction RulerItem({ value, x, itemWidth, max }: RulerItemProps) {\n  const distance = useTransform(x, (latest) => {\n    const itemPos = value * itemWidth;\n    return Math.abs(itemPos + latest);\n  });\n\n  const opacity = useTransform(distance, [0, itemWidth], [1, 0.3]);\n  const scale = useTransform(distance, [0, itemWidth * 0.8], [1.1, 0.9]);\n\n  return (\n    <div className=\"flex h-full shrink-0 flex-col\" style={{ width: itemWidth }}>\n      <div className=\"relative flex h-full w-full flex-col items-center justify-end\">\n        <motion.span\n          className=\"text-foreground mb-1 text-4xl font-semibold tabular-nums select-none\"\n          style={{ opacity, scale }}\n        >\n          {value}\n        </motion.span>\n\n        <div className=\"relative flex h-8 w-full items-end\">\n          <div className=\"absolute left-1/2 z-10 h-8 w-[4px] -translate-x-1/2 rounded-t-full bg-neutral-400 dark:bg-neutral-200\" />\n          <div className=\"flex w-full translate-x-1/2 justify-evenly\">\n            {value !== max &&\n              Array.from({ length: 4 }).map((_, i) => (\n                <div\n                  key={`${value}-sub-${i}`}\n                  className=\"h-4 w-[4px] rounded-t-full bg-neutral-200 dark:bg-neutral-600\"\n                />\n              ))}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport function FractionalPicker({\n  min = 0,\n  max = 20,\n  defaultValue = 0,\n  itemWidth = 80,\n  onChange,\n  className,\n}: any) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState(0);\n\n  const x = useMotionValue(-defaultValue * itemWidth);\n  const [activeValue, setActiveValue] = useState(defaultValue);\n\n  const snap = () => {\n    const currentX = x.get();\n    console.log(currentX)\n    const closestValue = Math.round(currentX / itemWidth) * itemWidth;\n    animate(x, closestValue, {\n      type: 'spring',\n      stiffness: 400,\n      damping: 40,\n    });\n  };\n\n  useEffect(() => {\n    return x.on('change', (latest) => {\n      const val = Math.abs(Math.round(latest / itemWidth));\n      if (val !== activeValue && val >= min && val <= max) {\n        setActiveValue(val);\n        onChange?.(val);\n      }\n    });\n  }, [x, itemWidth, activeValue, onChange, min, max]);\n\n  useLayoutEffect(() => {\n    if (!containerRef.current) return;\n\n    const updateWidth = () => {\n      if (containerRef.current) {\n        setContainerWidth(containerRef.current.offsetWidth);\n      }\n    };\n\n    updateWidth();\n    window.addEventListener('resize', updateWidth);\n    return () => window.removeEventListener('resize', updateWidth);\n  }, []);\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\n        'bg-background border-border relative max-w-[600px] overflow-hidden rounded-4xl border shadow-sm',\n        className,\n      )}\n      style={{ height: 120 }}\n    >\n      <div className=\"pointer-events-none absolute top-0 left-1/2 z-20 flex -translate-x-1/2 flex-col items-center\">\n        <div\n          className=\"h-6 w-10 rounded-b-xl bg-neutral-200\"\n          style={{ clipPath: 'polygon(0 0, 100% 0, 80% 100%, 20% 100%)' }}\n        />\n        <div className=\"mt-1 h-1.5 w-1.5 rounded-full bg-neutral-200\" />\n      </div>\n\n      <motion.div\n        drag=\"x\"\n        style={{\n          x,\n          paddingLeft: containerWidth / 2 - itemWidth / 2,\n          paddingRight: containerWidth / 2 - itemWidth / 2,\n        }}\n        dragConstraints={{\n          left: -max * itemWidth,\n          right: -min * itemWidth,\n        }}\n        dragElastic={0.1}\n        onDragEnd={snap}\n        className=\"flex h-full cursor-grab items-end active:cursor-grabbing\"\n      >\n        {Array.from({ length: max - min + 1 }, (_, i) => (\n          <RulerItem\n            key={i + min}\n            value={i + min}\n            x={x}\n            itemWidth={itemWidth}\n            max={max}\n          />\n        ))}\n      </motion.div>\n\n      <div className=\"from-background via-background/60 pointer-events-none absolute inset-y-0 left-0 z-10 w-24 bg-gradient-to-r to-transparent\" />\n      <div className=\"from-background via-background/60 pointer-events-none absolute inset-y-0 right-0 z-10 w-24 bg-gradient-to-l to-transparent\" />\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fractional-picker-base",
      "type": "registry:component",
      "title": "Fractional Picker (base)",
      "description": "Theme-ready base variant of A smooth draggable ruler-style picker for selecting numeric values with spring snapping..",
      "dependencies": [
        "framer-motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/fractional-picker.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  animate,\n  MotionValue,\n} from 'framer-motion';\nimport { cn } from '@/lib/utils';\n\ninterface RulerItemProps {\n  value: number;\n  x: MotionValue<number>;\n  itemWidth: number;\n  max: number;\n}\n\nfunction RulerItem({ value, x, itemWidth, max }: RulerItemProps) {\n  const distance = useTransform(x, (latest) => {\n    const itemPos = value * itemWidth;\n    return Math.abs(itemPos + latest);\n  });\n\n  const opacity = useTransform(distance, [0, itemWidth], [1, 0.3]);\n  const scale = useTransform(distance, [0, itemWidth * 0.8], [1.1, 0.9]);\n\n  return (\n    <div className=\"flex h-full shrink-0 flex-col\" style={{ width: itemWidth }}>\n      <div className=\"relative flex h-full w-full flex-col items-center justify-end\">\n        <motion.span\n          className=\"text-foreground mb-1 text-4xl font-semibold tabular-nums select-none\"\n          style={{ opacity, scale }}\n        >\n          {value}\n        </motion.span>\n\n        <div className=\"relative flex h-8 w-full items-end\">\n          <div className=\"bg-muted-foreground absolute left-1/2 z-10 h-8 w-[4px] -translate-x-1/2 rounded-t-full\" />\n          <div className=\"flex w-full translate-x-1/2 justify-evenly\">\n            {value !== max &&\n              Array.from({ length: 4 }).map((_, i) => (\n                <div\n                  key={`${value}-sub-${i}`}\n                  className=\"bg-border h-4 w-[4px] rounded-t-full\"\n                />\n              ))}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport function FractionalPicker({\n  min = 0,\n  max = 20,\n  defaultValue = 0,\n  itemWidth = 80,\n  onChange,\n  className,\n}: any) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState(0);\n\n  const x = useMotionValue(-defaultValue * itemWidth);\n  const [activeValue, setActiveValue] = useState(defaultValue);\n\n  const snap = () => {\n    const currentX = x.get();\n    const closestValue = Math.round(currentX / itemWidth) * itemWidth;\n    animate(x, closestValue, {\n      type: 'spring',\n      stiffness: 400,\n      damping: 40,\n    });\n  };\n\n  useEffect(() => {\n    return x.on('change', (latest) => {\n      const val = Math.abs(Math.round(latest / itemWidth));\n      if (val !== activeValue && val >= min && val <= max) {\n        setActiveValue(val);\n        onChange?.(val);\n      }\n    });\n  }, [x, itemWidth, activeValue, onChange, min, max]);\n\n  useLayoutEffect(() => {\n    if (!containerRef.current) return;\n\n    const updateWidth = () => {\n      if (containerRef.current) {\n        setContainerWidth(containerRef.current.offsetWidth);\n      }\n    };\n\n    updateWidth();\n    window.addEventListener('resize', updateWidth);\n    return () => window.removeEventListener('resize', updateWidth);\n  }, []);\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\n        'theme-injected bg-background border-border relative max-w-[600px] overflow-hidden rounded-lg border shadow-sm',\n        className,\n      )}\n      style={{ height: 120 }}\n    >\n      <div className=\"pointer-events-none absolute top-0 left-1/2 z-20 flex -translate-x-1/2 flex-col items-center\">\n        <div\n          className=\"bg-foreground h-6 w-10 \"\n          style={{ clipPath: 'polygon(0 0, 100% 0, 80% 100%, 20% 100%)' }}\n        />\n        <div className=\"bg-foreground mt-1 h-1.5 w-1.5 rounded-full\" />\n      </div>\n\n      <motion.div\n        drag=\"x\"\n        style={{\n          x,\n          paddingLeft: containerWidth / 2 - itemWidth / 2,\n          paddingRight: containerWidth / 2 - itemWidth / 2,\n        }}\n        dragConstraints={{\n          left: -max * itemWidth,\n          right: -min * itemWidth,\n        }}\n        dragElastic={0.1}\n        onDragEnd={snap}\n        className=\"flex h-full cursor-grab items-end active:cursor-grabbing\"\n      >\n        {Array.from({ length: max - min + 1 }, (_, i) => (\n          <RulerItem\n            key={i + min}\n            value={i + min}\n            x={x}\n            itemWidth={itemWidth}\n            max={max}\n          />\n        ))}\n      </motion.div>\n\n      <div className=\"from-background via-background/60 pointer-events-none absolute inset-y-0 left-0 z-10 w-24 bg-gradient-to-r to-transparent\" />\n      <div className=\"from-background via-background/60 pointer-events-none absolute inset-y-0 right-0 z-10 w-24 bg-gradient-to-l to-transparent\" />\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "frequency-selector",
      "type": "registry:component",
      "title": "Frequency Selector",
      "description": "Select recurring time intervals using animated tabs and contextual sub options.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/frequency-selector.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Check, ChevronRight } from 'lucide-react';\n\n/* ---------- Types ---------- */\nexport type FrequencyType = 'Daily' | 'Weekly' | 'Monthly' | 'Yearly';\n\nexport interface FrequencyData {\n  type: FrequencyType;\n  subValue?: string;\n}\n\ninterface FrequencySelectorProps {\n  value: FrequencyData;\n  onChange: (data: FrequencyData) => void;\n  className?: string;\n}\n\n/* ---------- Motion Config ---------- */\nconst smoothSpring = {\n  type: 'spring',\n  bounce: 0.3,\n  duration: 0.7,\n} as const;\n\n/* ---------- Data ---------- */\nconst FREQUENCIES: FrequencyType[] = ['Daily', 'Weekly', 'Monthly', 'Yearly'];\n\nconst SUB_OPTIONS: Record<FrequencyType, string[]> = {\n  Daily: [],\n  Weekly: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  Monthly: Array.from({ length: 31 }, (_, i) => (i + 1).toString()),\n  Yearly: [\n    'Jan',\n    'Feb',\n    'Mar',\n    'Apr',\n    'May',\n    'Jun',\n    'Jul',\n    'Aug',\n    'Sep',\n    'Oct',\n    'Nov',\n    'Dec',\n  ],\n};\n\nexport const FrequencySelector: React.FC<FrequencySelectorProps> = ({\n  value,\n  onChange,\n  className = '',\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [tempType, setTempType] = useState<FrequencyType>(value.type);\n  const [tempSubValue, setTempSubValue] = useState<string | undefined>(\n    value.subValue,\n  );\n\n  const handleOpen = () => {\n    setTempType(value.type);\n    setTempSubValue(value.subValue || SUB_OPTIONS[value.type][0]);\n    setIsOpen(true);\n  };\n\n  const handleConfirm = () => {\n    onChange({\n      type: tempType,\n      subValue: tempType === 'Daily' ? undefined : tempSubValue,\n    });\n    setIsOpen(false);\n  };\n\n  return (\n    <LayoutGroup id=\"frequency-root\">\n      <div\n        className={`flex w-full items-center justify-center p-4 antialiased select-none ${className}`}\n      >\n        <AnimatePresence mode=\"wait\">\n          {!isOpen ? (\n            /* ---------- CLOSED STATE ---------- */\n            <motion.div\n              layoutId=\"container\"\n              initial={{ filter: 'blur(4px)', opacity: 0 }}\n              animate={{ filter: 'blur(0px)', opacity: 1 }}\n              exit={{ filter: 'blur(4px)', opacity: 0 }}\n              onClick={handleOpen}\n              transition={smoothSpring}\n              className=\"flex min-h-14 w-full max-w-md cursor-pointer items-center justify-between rounded-full bg-neutral-100 p-1 pl-4 sm:pl-6  gap-4 dark:bg-neutral-900\"\n            >\n              <motion.span\n                layout\n                className=\"text-base font-bold text-neutral-500 sm:text-lg dark:text-neutral-400\"\n              >\n                Frequency\n              </motion.span>\n\n              <motion.div\n                layoutId=\"trigger-pill\"\n                transition={smoothSpring}\n                className=\"flex min-h-12 flex-1 items-center justify-between gap-2 rounded-full border border-black/5 bg-white px-3 py-1.5 shadow-sm sm:flex-initial sm:gap-3 sm:px-4 dark:border-white/5 dark:bg-neutral-800\"\n              >\n                <span className=\"text-base font-bold sm:text-lg\">\n                  {value.type}\n                  {value.subValue ? `, ${value.subValue}` : ''}\n                </span>\n\n                <ChevronRight size={18} className=\"shrink-0 text-neutral-400\" />\n              </motion.div>\n            </motion.div>\n          ) : (\n            /* ---------- OPEN STATE ---------- */\n            <motion.div\n              layoutId=\"container\"\n              initial={{ filter: 'blur(4px)', opacity: 0 }}\n              animate={{ filter: 'blur(0px)', opacity: 1 }}\n              exit={{ filter: 'blur(4px)', opacity: 0 }}\n              transition={smoothSpring}\n              className=\"flex w-full max-w-lg flex-col gap-3 rounded-[32px] border border-black/5 bg-neutral-100 p-2 shadow-xl dark:border-white/5 dark:bg-neutral-900\"\n            >\n              {/* Top Row */}\n              <div className=\"flex items-center gap-2\">\n                <motion.div\n                  layoutId=\"trigger-pill\"\n                  transition={smoothSpring}\n                  className=\"custom-scrollbar relative flex h-11 flex-1 items-center gap-2 overflow-x-auto rounded-full bg-white p-1 shadow-inner sm:h-13 sm:gap-2 dark:bg-neutral-800\"\n                >\n                  {FREQUENCIES.map((type) => (\n                    <button\n                      key={type}\n                      onClick={() => {\n                        setTempType(type);\n                        setTempSubValue(SUB_OPTIONS[type][0]);\n                      }}\n                      className=\"relative flex h-full flex-none items-center justify-center px-4 text-xs font-bold sm:flex-1 sm:min-w-fit sm:px-6 sm:text-[15px]\"\n                    >\n                      {tempType === type && (\n                        <motion.div\n                          layoutId=\"active-tab\"\n                          transition={smoothSpring}\n                          className=\"absolute inset-0 z-0 rounded-full bg-neutral-200 dark:bg-neutral-700\"\n                        />\n                      )}\n\n                      <span className=\"relative z-10\">{type}</span>\n                    </button>\n                  ))}\n                </motion.div>\n\n                <motion.button\n                  whileTap={{ scale: 0.9 }}\n                  onClick={handleConfirm}\n                  className=\"flex h-10 w-10 items-center justify-center rounded-full bg-neutral-900 text-white sm:h-12 sm:w-12 dark:bg-white dark:text-neutral-900\"\n                >\n                  <Check size={18} />\n                </motion.button>\n              </div>\n\n              {/* Sub Options */}\n              <AnimatePresence mode=\"wait\">\n                {SUB_OPTIONS[tempType].length > 0 && (\n                  <motion.div\n                    layout\n                    transition={smoothSpring}\n                    className=\"overflow-hidden\"\n                  >\n                    {SUB_OPTIONS[tempType].length > 0 && (\n                      <motion.div\n                        key={tempType}\n                        layout\n                        transition={smoothSpring}\n                        className={`grid gap-2 rounded-2xl bg-white p-3 shadow-inner dark:bg-neutral-800 ${\n                          tempType === 'Monthly'\n                            ? 'grid-cols-7'\n                            : tempType === 'Yearly'\n                              ? 'grid-cols-4'\n                              : 'grid-cols-7'\n                        }`}\n                      >\n                        {SUB_OPTIONS[tempType].map((option) => (\n                          <button\n                            key={option}\n                            onClick={() => setTempSubValue(option)}\n                            className=\"relative flex h-8 items-center justify-center rounded-full text-[10px] font-bold sm:h-9 sm:text-sm\"\n                          >\n                            {tempSubValue === option && (\n                              <motion.div\n                                layoutId=\"active-sub\"\n                                transition={smoothSpring}\n                                className=\"absolute inset-0 z-0 rounded-full bg-neutral-200 dark:bg-neutral-700\"\n                              />\n                            )}\n\n                            <span className=\"relative z-10\">{option}</span>\n                          </button>\n                        ))}\n                      </motion.div>\n                    )}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </LayoutGroup>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "frequency-selector-base",
      "type": "registry:component",
      "title": "Frequency Selector (base)",
      "description": "Theme-ready base variant of Select recurring time intervals using animated tabs and contextual sub options..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/frequency-selector.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Check, ChevronRight } from 'lucide-react';\n\nexport type FrequencyType = 'Daily' | 'Weekly' | 'Monthly' | 'Yearly';\n\nexport interface FrequencyData {\n  type: FrequencyType;\n  subValue?: string;\n}\n\ninterface FrequencySelectorProps {\n  value: FrequencyData;\n  onChange: (data: FrequencyData) => void;\n  className?: string;\n}\n\nconst smoothSpring = {\n  type: 'spring',\n  bounce: 0.3,\n  duration: 0.7,\n} as const;\n\nconst FREQUENCIES: FrequencyType[] = ['Daily', 'Weekly', 'Monthly', 'Yearly'];\n\nconst SUB_OPTIONS: Record<FrequencyType, string[]> = {\n  Daily: [],\n  Weekly: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  Monthly: Array.from({ length: 31 }, (_, i) => (i + 1).toString()),\n  Yearly: [\n    'Jan',\n    'Feb',\n    'Mar',\n    'Apr',\n    'May',\n    'Jun',\n    'Jul',\n    'Aug',\n    'Sep',\n    'Oct',\n    'Nov',\n    'Dec',\n  ],\n};\n\nexport const FrequencySelector: React.FC<FrequencySelectorProps> = ({\n  value,\n  onChange,\n  className = '',\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [tempType, setTempType] = useState<FrequencyType>(value.type);\n  const [tempSubValue, setTempSubValue] = useState<string | undefined>(\n    value.subValue,\n  );\n\n  const handleOpen = () => {\n    setTempType(value.type);\n    setTempSubValue(value.subValue || SUB_OPTIONS[value.type][0]);\n    setIsOpen(true);\n  };\n\n  const handleConfirm = () => {\n    onChange({\n      type: tempType,\n      subValue: tempType === 'Daily' ? undefined : tempSubValue,\n    });\n    setIsOpen(false);\n  };\n\n  return (\n    <LayoutGroup id=\"frequency-root\">\n      <div\n        className={`theme-injected flex w-full items-center justify-center p-4 antialiased select-none ${className}`}\n      >\n        <AnimatePresence mode=\"wait\">\n          {!isOpen ? (\n            <motion.div\n              layoutId=\"container\"\n              initial={{ filter: 'blur(4px)', opacity: 0 }}\n              animate={{ filter: 'blur(0px)', opacity: 1 }}\n              exit={{ filter: 'blur(4px)', opacity: 0 }}\n              onClick={handleOpen}\n              transition={smoothSpring}\n              className=\"bg-muted border-border flex min-h-14 w-full max-w-md cursor-pointer items-center justify-between rounded-lg border p-1 pl-4 sm:pl-6\"\n            >\n              <motion.span\n                layout\n                className=\"text-muted-foreground text-base font-bold sm:text-lg\"\n              >\n                Frequency\n              </motion.span>\n\n              <motion.div\n                layoutId=\"trigger-pill\"\n                transition={smoothSpring}\n                className=\"border-border bg-background flex min-h-12 flex-1 items-center justify-between gap-2 rounded-lg border px-3 py-1.5 shadow-sm sm:flex-initial sm:gap-3 sm:px-4\"\n              >\n                <span className=\"text-foreground text-base font-bold sm:text-lg\">\n                  {value.type}\n                  {value.subValue ? `, ${value.subValue}` : ''}\n                </span>\n\n                <ChevronRight size={18} className=\"text-muted-foreground shrink-0\" />\n              </motion.div>\n            </motion.div>\n          ) : (\n            <motion.div\n              layoutId=\"container\"\n              initial={{ filter: 'blur(4px)', opacity: 0 }}\n              animate={{ filter: 'blur(0px)', opacity: 1 }}\n              exit={{ filter: 'blur(4px)', opacity: 0 }}\n              transition={smoothSpring}\n              className=\"border-border bg-muted flex w-full max-w-lg flex-col gap-3 rounded-lg border p-2 shadow-xl\"\n            >\n              <div className=\"flex items-center gap-2\">\n                <motion.div\n                  layoutId=\"trigger-pill\"\n                  transition={smoothSpring}\n                  className=\"custom-scrollbar bg-background relative flex h-11 flex-1 items-center gap-2 overflow-x-auto rounded-lg p-1 shadow-inner sm:h-13 sm:gap-2\"\n                >\n                  {FREQUENCIES.map((type) => (\n                    <button\n                      key={type}\n                      onClick={() => {\n                        setTempType(type);\n                        setTempSubValue(SUB_OPTIONS[type][0]);\n                      }}\n                      className=\"text-foreground relative flex h-full flex-none items-center justify-center px-4 text-xs font-bold sm:flex-1 sm:min-w-fit sm:px-6 sm:text-[15px]\"\n                    >\n                      {tempType === type && (\n                        <motion.div\n                          layoutId=\"active-tab\"\n                          transition={smoothSpring}\n                          className=\"bg-muted border-border  absolute inset-0 z-0 rounded-lg border\"\n                        />\n                      )}\n\n                      <span className=\"relative z-10\">{type}</span>\n                    </button>\n                  ))}\n                </motion.div>\n\n                <motion.button\n                  whileTap={{ scale: 0.9 }}\n                  onClick={handleConfirm}\n                  className=\"bg-foreground text-background flex h-10 w-10 items-center justify-center rounded-lg sm:h-12 sm:w-12\"\n                >\n                  <Check size={18} />\n                </motion.button>\n              </div>\n\n              <AnimatePresence mode=\"wait\">\n                {SUB_OPTIONS[tempType].length > 0 && (\n                  <motion.div\n                    layout\n                    transition={smoothSpring}\n                    className=\"overflow-hidden\"\n                  >\n                    <motion.div\n                      key={tempType}\n                      layout\n                      transition={smoothSpring}\n                      className={`bg-background grid gap-2 rounded-lg p-3 shadow-inner ${\n                        tempType === 'Monthly'\n                          ? 'grid-cols-7'\n                          : tempType === 'Yearly'\n                            ? 'grid-cols-4'\n                            : 'grid-cols-7'\n                      }`}\n                    >\n                      {SUB_OPTIONS[tempType].map((option) => (\n                        <button\n                          key={option}\n                          onClick={() => setTempSubValue(option)}\n                          className=\"text-foreground relative flex h-8 items-center justify-center rounded-lg text-[10px] font-bold sm:h-9 sm:text-sm\"\n                        >\n                          {tempSubValue === option && (\n                            <motion.div\n                              layoutId=\"active-sub\"\n                              transition={smoothSpring}\n                              className=\"bg-muted border-border absolute inset-0 z-0 rounded-lg border\"\n                            />\n                          )}\n\n                          <span className=\"relative z-10\">{option}</span>\n                        </button>\n                      ))}\n                    </motion.div>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </LayoutGroup>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fund-widget",
      "type": "registry:component",
      "title": "Fund Widget",
      "description": "An animated fund widget featuring smooth 3D transforms and progressive blur effects.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/fund-widget.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport {\n  motion,\n  MotionConfig,\n  useMotionValue,\n  useTransform,\n  useMotionTemplate,\n  type Transition,\n} from 'motion/react';\nimport { FaArrowUp } from 'react-icons/fa6';\n\nexport interface FundItem {\n  id: string;\n  label: string;\n  value: string;\n  change: string;\n}\n\ninterface FundWidgetProps {\n  data?: FundItem[];\n  initialIndex?: number;\n}\n\nconst DEFAULT_DATA: FundItem[] = [\n  {\n    id: 'stocks',\n    label: 'Stocks',\n    value: '2.7Cr',\n    change: '12%',\n  },\n  {\n    id: 'funds',\n    label: 'Funds',\n    value: '3.5Cr',\n    change: '8%',\n  },\n  {\n    id: 'deposits',\n    label: 'Deposits',\n    value: '1.2Cr',\n    change: '6%',\n  },\n];\n\nconst CARD_HEIGHT = 320;\nconst DRAG_BUFFER = 40;\nconst VELOCITY_THRESHOLD = 0;\n\nconst SPRING_OPTIONS: Transition = {\n  type: 'spring',\n  stiffness: 300,\n  damping: 40,\n};\n\nconst FundCard = ({ item, i, y }: any) => {\n  const cardOffset = i * CARD_HEIGHT;\n\n  const rotateX = useTransform(\n    y,\n    [\n      -(cardOffset + CARD_HEIGHT),\n      -cardOffset,\n      -(cardOffset - CARD_HEIGHT),\n    ],\n    [-25, 0, 25],\n    { clamp: true },\n  );\n\n  const DEAD_ZONE = CARD_HEIGHT * 0.25;\n\n  const blur = useTransform(\n    y,\n    [\n      -(cardOffset + CARD_HEIGHT),\n      -(cardOffset + DEAD_ZONE),\n      -cardOffset,\n      -(cardOffset - DEAD_ZONE),\n      -(cardOffset - CARD_HEIGHT),\n    ],\n    [8, 0, 0, 0, 8],\n    { clamp: true },\n  );\n\n  const filter = useMotionTemplate`blur(${blur}px)`;\n\n  return (\n    <motion.div\n      key={item.id}\n      className=\"flex min-h-[320px] min-w-[320px] flex-col p-10 transform-3d\"\n      style={{\n        rotateX,\n        filter,\n        transformPerspective: 1000,\n      }}\n    >\n      <h2 className=\"text-[60px] leading-none font-bold text-zinc-900 dark:text-zinc-100\">\n        {item.value}\n      </h2>\n\n      <p className=\"mt-4 flex items-center gap-2 text-[32px] font-bold text-stone-400 dark:text-stone-400\">\n        {item.change}\n        <FaArrowUp className=\"text-2xl\" />\n      </p>\n\n      <h3 className=\"mt-12 text-[40px] font-bold text-stone-600 dark:text-stone-200\">\n        {item.label}\n      </h3>\n    </motion.div>\n  );\n};\n\nexport const FundWidget: React.FC<FundWidgetProps> = ({\n  data = DEFAULT_DATA,\n  initialIndex = 0,\n}) => {\n  const [index, setIndex] = useState(initialIndex);\n\n  const y = useMotionValue(-(initialIndex * CARD_HEIGHT));\n\n  const handleDragEnd = (_: any, info: any) => {\n    const offset = info.offset.y;\n    const velocity = info.velocity.y;\n\n    if (offset < -DRAG_BUFFER || velocity < -VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.min(prev + 1, data.length - 1));\n    } else if (offset > DRAG_BUFFER || velocity > VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.max(prev - 1, 0));\n    }\n  };\n\n  return (\n    <div>\n      <div className=\"relative flex items-center justify-center\">\n        <MotionConfig transition={SPRING_OPTIONS}>\n          <div className=\"relative overflow-visible\">\n            <div className=\"relative z-0 overflow-visible\">\n              <div className=\"absolute right-[18px] -bottom-[332px] left-[18px] z-[-1] h-20 w-[90%] rounded-[44px] border-2 border-[#E0DEDA] bg-[#F2F1EC] shadow-[0_4px_20px_rgba(0,0,0,0.03)] dark:border-white/10 dark:bg-zinc-800\" />\n            </div>\n\n            <div className=\"relative h-[320px] w-[320px] overflow-hidden rounded-[48px] border-2 border-[#E0DEDA] bg-[#FBFCF9] shadow-md select-none perspective-[1000px] transform-3d dark:border-white/10 dark:bg-zinc-900\">\n              <motion.div\n                drag=\"y\"\n                dragConstraints={{\n                  top: -((data.length - 1) * CARD_HEIGHT),\n                  bottom: 0,\n                }}\n                dragElastic={0.12}\n                style={{ y }}\n                onDragEnd={handleDragEnd}\n                animate={{\n                  y: -(index * CARD_HEIGHT),\n                }}\n                className=\"flex cursor-grab flex-col transform-3d active:cursor-grabbing\"\n              >\n                {data.map((item, i) => (\n                  <FundCard key={item.id} item={item} i={i} y={y} />\n                ))}\n              </motion.div>\n\n              <div className=\"absolute top-1/2 right-7 z-20 flex -translate-y-1/2 flex-col\">\n                {data.map((_, i) => (\n                  <button\n                    key={i}\n                    title=\"slider\"\n                    onClick={() => setIndex(i)}\n                    className=\"py-1 focus:outline-none\"\n                  >\n                    <motion.div\n                      animate={{\n                        height: i === index ? 42 : 10,\n                        backgroundColor: i === index ? '#585652' : '#D3D3D3',\n                      }}\n                      transition={{ duration: 0.3 }}\n                      className=\"w-[8px] rounded-full\"\n                    />\n                  </button>\n                ))}\n              </div>\n            </div>\n          </div>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fund-widget-base",
      "type": "registry:component",
      "title": "Fund Widget (base)",
      "description": "Theme-ready base variant of An animated fund widget featuring smooth 3D transforms and progressive blur effects..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/fund-widget.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport {\n  motion,\n  MotionConfig,\n  useMotionValue,\n  useTransform,\n  useMotionTemplate,\n  type Transition,\n} from 'motion/react';\nimport { FaArrowUp } from 'react-icons/fa6';\nimport { cn } from '@/lib/utils';\n\nexport interface FundItem {\n  id: string;\n  label: string;\n  value: string;\n  change: string;\n}\n\ninterface FundWidgetProps {\n  data?: FundItem[];\n  initialIndex?: number;\n}\n\nconst DEFAULT_DATA: FundItem[] = [\n  {\n    id: 'stocks',\n    label: 'Stocks',\n    value: '2.7Cr',\n    change: '12%',\n  },\n  {\n    id: 'funds',\n    label: 'Funds',\n    value: '3.5Cr',\n    change: '8%',\n  },\n  {\n    id: 'deposits',\n    label: 'Deposits',\n    value: '1.2Cr',\n    change: '6%',\n  },\n];\n\nconst CARD_HEIGHT = 320;\nconst DRAG_BUFFER = 40;\nconst VELOCITY_THRESHOLD = 0;\n\nconst SPRING_OPTIONS: Transition = {\n  type: 'spring',\n  stiffness: 300,\n  damping: 40,\n};\n\nconst FundCard = ({ item, i, y }: any) => {\n  const cardOffset = i * CARD_HEIGHT;\n\n  const rotateX = useTransform(\n    y,\n    [-(cardOffset + CARD_HEIGHT), -cardOffset, -(cardOffset - CARD_HEIGHT)],\n    [-25, 0, 25],\n    { clamp: true },\n  );\n\n  const DEAD_ZONE = CARD_HEIGHT * 0.25;\n\n  const blur = useTransform(\n    y,\n    [\n      -(cardOffset + CARD_HEIGHT),\n      -(cardOffset + DEAD_ZONE),\n      -cardOffset,\n      -(cardOffset - DEAD_ZONE),\n      -(cardOffset - CARD_HEIGHT),\n    ],\n    [8, 0, 0, 0, 8],\n    { clamp: true },\n  );\n\n  const filter = useMotionTemplate`blur(${blur}px)`;\n\n  return (\n    <motion.div\n      key={item.id}\n      className=\"flex min-h-[320px] min-w-[320px] flex-col p-10 transform-3d\"\n      style={{\n        rotateX,\n        filter,\n        transformPerspective: 1000,\n      }}\n    >\n      <h2 className=\"text-foreground text-[60px] leading-none font-bold\">\n        {item.value}\n      </h2>\n\n      <p className=\"text-muted-foreground mt-4 flex items-center gap-2 text-[32px] font-bold\">\n        {item.change}\n        <FaArrowUp className=\"text-2xl\" />\n      </p>\n\n      <h3 className=\"text-muted-foreground mt-12 text-[40px] font-bold\">\n        {item.label}\n      </h3>\n    </motion.div>\n  );\n};\n\nexport const FundWidget: React.FC<FundWidgetProps> = ({\n  data = DEFAULT_DATA,\n  initialIndex = 0,\n}) => {\n  const [index, setIndex] = useState(initialIndex);\n\n  const y = useMotionValue(-(initialIndex * CARD_HEIGHT));\n\n  const handleDragEnd = (_: any, info: any) => {\n    const offset = info.offset.y;\n    const velocity = info.velocity.y;\n\n    if (offset < -DRAG_BUFFER || velocity < -VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.min(prev + 1, data.length - 1));\n    } else if (offset > DRAG_BUFFER || velocity > VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.max(prev - 1, 0));\n    }\n  };\n\n  return (\n    <div className=\"theme-injected\">\n      <div className=\"relative flex items-center justify-center\">\n        <MotionConfig transition={SPRING_OPTIONS}>\n          <div className=\"relative overflow-visible\">\n            <div className=\"relative z-0 overflow-visible\">\n              <div className=\"border-border bg-muted absolute right-[18px] -bottom-[332px] left-[18px] z-[-1] h-20 w-[90%] rounded-lg border-2 shadow-[0_4px_20px_rgba(0,0,0,0.03)]\" />\n            </div>\n\n            <div className=\"border-border bg-card relative h-[320px] w-[320px] overflow-hidden rounded-lg border-2 shadow-md select-none perspective-[1000px] transform-3d\">\n              <motion.div\n                drag=\"y\"\n                dragConstraints={{\n                  top: -((data.length - 1) * CARD_HEIGHT),\n                  bottom: 0,\n                }}\n                dragElastic={0.12}\n                style={{ y }}\n                onDragEnd={handleDragEnd}\n                animate={{\n                  y: -(index * CARD_HEIGHT),\n                }}\n                className=\"flex cursor-grab flex-col transform-3d active:cursor-grabbing\"\n              >\n                {data.map((item, i) => (\n                  <FundCard key={item.id} item={item} i={i} y={y} />\n                ))}\n              </motion.div>\n\n              <div className=\"absolute top-1/2 right-7 z-20 flex -translate-y-1/2 flex-col\">\n                {data.map((_, i) => (\n                  <button\n                    key={i}\n                    title=\"slider\"\n                    onClick={() => setIndex(i)}\n                    className=\"py-1 focus:outline-none\"\n                  >\n                    <motion.div\n                      animate={{\n                        height: i === index ? 42 : 10,\n                      }}\n                      transition={{ duration: 0.3 }}\n                      className={cn('w-[8px] rounded-lg bg-foreground/50 transition-colors duration-300', i === index && 'bg-foreground')}\n                    />\n                  </button>\n                ))}\n              </div>\n            </div>\n          </div>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "gooey-menu",
      "type": "registry:component",
      "title": "Gooey Menu",
      "description": "An interactive Next.js logo with expandable tooltip that shows framework information.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/gooey-menu.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence, type Variants } from 'motion/react';\n\ninterface GooeyMenuProps {\n  data: GooeyMenuData[];\n}\n\ninterface GooeyMenuData {\n  key: string;\n  label: string;\n  value: string;\n  labelClass: string;\n  valueClass: string;\n}\n\nconst DIMENSIONS = {\n  min: 40,\n  max: 200,\n};\n\nconst DEFAULT_DATA: GooeyMenuData[] = [\n  {\n    key: 'title',\n    label: 'Next.js',\n    value: 'v13.4.8',\n    labelClass: 'text-sm font-medium text-neutral-500',\n    valueClass: 'text-sm text-neutral-500',\n  },\n  {\n    key: 'errors',\n    label: 'Errors',\n    value: '20',\n    labelClass: 'text-sm font-medium',\n    valueClass:\n      'text-sm flex items-center justify-center rounded-full border border-[#EB5757]/10 bg-[#EB5757]/15 p-1 px-2 font-mono text-red-500 bg-red-500/20',\n  },\n  {\n    key: 'route',\n    label: 'Route',\n    value: 'Static',\n    labelClass: 'text-sm font-medium',\n    valueClass: 'text-sm text-[#a09f9f]',\n  },\n];\n\nconst menuVariants: Variants = {\n  closed: {\n    y: 0,\n    borderRadius: 20,\n    width: DIMENSIONS.min,\n    height: DIMENSIONS.min,\n    z: -10,\n    transition: {\n      // duration: 0.4,\n      // ease: [0.22, 1, 0.36, 1],\n      type: 'spring',\n      stiffness: 300,\n      damping: 30,\n      y: { delay: 0.15 },\n      width: { delay: 0 },\n      height: { delay: 0 },\n    },\n  },\n  open: {\n    y: -50,\n    borderRadius: 10,\n    width: DIMENSIONS.max,\n    height: 'auto',\n    transition: {\n      // duration: 0.4,\n      // ease: [0.22, 1, 0.36, 1],\n      type: 'spring',\n      stiffness: 300,\n      damping: 30,\n      width: { delay: 0.15 },\n      height: { delay: 0.15 },\n      borderRadius: { delay: 0.15 },\n    },\n  },\n};\n\nexport function GooeyMenu({ data = DEFAULT_DATA }: GooeyMenuProps) {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <div className=\"relative flex h-full min-h-125 w-full items-center justify-center  bg-transparent\">\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        className=\"absolute bottom-0 left-0\"\n        version=\"1.1\"\n      >\n        <defs>\n          <filter id=\"goo\">\n            <feGaussianBlur\n              in=\"SourceGraphic\"\n              stdDeviation=\"4.4\"\n              result=\"blur\"\n            />\n            <feColorMatrix\n              in=\"blur\"\n              mode=\"matrix\"\n              values=\"1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 20 -7\"\n              result=\"SkiperGooeyFilter\"\n            />\n            <feBlend in=\"SourceGraphic\" in2=\"goo\" />\n          </filter>\n        </defs>\n      </svg>\n\n      <div style={{ filter: 'url(#goo)' }} className=\"absolute\">\n        <motion.button\n          onMouseEnter={() => setIsOpen(true)}\n          onMouseLeave={() => setIsOpen(false)}\n          onClick={() => setIsOpen(!isOpen)}\n          className=\"relative z-20 flex size-10 cursor-pointer items-center justify-center rounded-full border-none bg-black dark:bg-neutral-800\"\n        >\n          <svg width=\"32\" height=\"32\" viewBox=\"0 0 180 180\" fill=\"none\">\n            <path\n              d=\"M149.508 157.52L69.142 54H54V125.97H66.1136V69.356L137.352 160.6Z\"\n              className=\"fill-white dark:fill-white\"\n            />\n            <path\n              d=\"M115.352 54H127.466V125.97H115.352V54Z\"\n              className=\"fill-white dark:fill-white\"\n            />\n          </svg>\n        </motion.button>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              key=\"menu-content\"\n              variants={menuVariants}\n              initial=\"closed\"\n              animate=\"open\"\n              exit=\"closed\"\n              className=\"absolute bottom-0 overflow-hidden bg-black dark:bg-neutral-800\"\n            >\n              <motion.div\n                className=\"grid w-[200px] space-y-2 p-4\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0, transition: { duration: 0.1 } }}\n                transition={{ duration: 0.2, delay: 0.15 }}\n              >\n                {data.map((item, index) => (\n                  <motion.div\n                    key={item.key}\n                    className=\"flex items-center justify-between text-white\"\n                    initial={{ opacity: 0, y: 6 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 4 }}\n                    transition={{\n                      duration: 0.25,\n                      delay: 0.1 + index * 0.05,\n                    }}\n                  >\n                    <span className={item.labelClass}>{item.label}</span>\n                    <span className={item.valueClass}>{item.value}</span>\n                  </motion.div>\n                ))}\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "gooey-menu-base",
      "type": "registry:component",
      "title": "Gooey Menu (base)",
      "description": "Theme-ready base variant of An interactive Next.js logo with expandable tooltip that shows framework information..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/gooey-menu.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence, type Variants } from 'motion/react';\n\ninterface GooeyMenuProps {\n  data: GooeyMenuData[];\n}\n\ninterface GooeyMenuData {\n  key: string;\n  label: string;\n  value: string;\n  labelClass: string;\n  valueClass: string;\n}\n\nconst DIMENSIONS = {\n  min: 40,\n  max: 200,\n};\n\nconst DEFAULT_DATA: GooeyMenuData[] = [\n  {\n    key: 'title',\n    label: 'Next.js',\n    value: 'v13.4.8',\n    labelClass: 'text-sm font-medium text-muted-foreground',\n    valueClass: 'text-sm text-muted-foreground',\n  },\n  {\n    key: 'errors',\n    label: 'Errors',\n    value: '20',\n    labelClass: 'text-sm font-medium',\n    valueClass:\n      'text-sm flex items-center justify-center rounded-lg border border-destructive/20 bg-destructive/10 p-1 px-2 font-mono text-destructive bg-destructive/20',\n  },\n  {\n    key: 'route',\n    label: 'Route',\n    value: 'Static',\n    labelClass: 'text-sm font-medium',\n    valueClass: 'text-sm text-muted-foreground',\n  },\n];\n\nconst menuVariants: Variants = {\n  closed: {\n    y: 0,\n    borderRadius: 20,\n    width: DIMENSIONS.min,\n    height: DIMENSIONS.min,\n    z: -10,\n    transition: {\n      type: 'spring',\n      stiffness: 300,\n      damping: 30,\n      y: { delay: 0.15 },\n      width: { delay: 0 },\n      height: { delay: 0 },\n    },\n  },\n  open: {\n    y: -50,\n    borderRadius: 10,\n    width: DIMENSIONS.max,\n    height: 'auto',\n    transition: {\n      type: 'spring',\n      stiffness: 300,\n      damping: 30,\n      width: { delay: 0.15 },\n      height: { delay: 0.15 },\n      borderRadius: { delay: 0.15 },\n    },\n  },\n};\n\nexport function GooeyMenu({ data = DEFAULT_DATA }: GooeyMenuProps) {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <div className=\"theme-injected relative flex h-full min-h-125 w-full items-center justify-center bg-transparent\">\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        className=\"absolute bottom-0 left-0\"\n        version=\"1.1\"\n      >\n        <defs>\n          <filter id=\"goo\">\n            <feGaussianBlur\n              in=\"SourceGraphic\"\n              stdDeviation=\"4.4\"\n              result=\"blur\"\n            />\n            <feColorMatrix\n              in=\"blur\"\n              mode=\"matrix\"\n              values=\"1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 20 -7\"\n              result=\"SkiperGooeyFilter\"\n            />\n            <feBlend in=\"SourceGraphic\" in2=\"goo\" />\n          </filter>\n        </defs>\n      </svg>\n\n      <div style={{ filter: 'url(#goo)' }} className=\"absolute\">\n        <motion.button\n          onMouseEnter={() => setIsOpen(true)}\n          onMouseLeave={() => setIsOpen(false)}\n          onClick={() => setIsOpen(!isOpen)}\n          className=\"bg-muted text-muted-foreground border-border relative z-20 flex size-10 cursor-pointer items-center justify-center rounded-lg border border-none\"\n        >\n          <svg width=\"32\" height=\"32\" viewBox=\"0 0 180 180\" fill=\"none\">\n            <path\n              d=\"M149.508 157.52L69.142 54H54V125.97H66.1136V69.356L137.352 160.6Z\"\n              className=\"fill-foreground\"\n            />\n            <path\n              d=\"M115.352 54H127.466V125.97H115.352V54Z\"\n              className=\"fill-foreground\"\n            />\n          </svg>\n        </motion.button>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              key=\"menu-content\"\n              variants={menuVariants}\n              initial=\"closed\"\n              animate=\"open\"\n              exit=\"closed\"\n              className=\"bg-muted text-muted-foreground  absolute bottom-0 overflow-hidden rounded-lg \"\n            >\n              <motion.div\n                className=\"grid w-[200px] space-y-2 p-4\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0, transition: { duration: 0.1 } }}\n                transition={{ duration: 0.2, delay: 0.15 }}\n              >\n                {data.map((item, index) => (\n                  <motion.div\n                    key={item.key}\n                    className=\"text-foreground flex items-center justify-between\"\n                    initial={{ opacity: 0, y: 6 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 4 }}\n                    transition={{\n                      duration: 0.25,\n                      delay: 0.1 + index * 0.05,\n                    }}\n                  >\n                    <span className={item.labelClass}>{item.label}</span>\n                    <span className={item.valueClass}>{item.value}</span>\n                  </motion.div>\n                ))}\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-action",
      "type": "registry:component",
      "title": "Inline Action",
      "description": "Inline actions enabling quick edits without leaving current context view.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-action.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { Check } from 'lucide-react';\n\ninterface InlineActionProps {\n  label: string;\n  icon: React.ReactNode;\n  actionText: string;\n  onAction: () => Promise<void>;\n  theme?: 'light' | 'dark' | 'system';\n  className?: string;\n}\n\nexport const InlineAction: React.FC<InlineActionProps> = ({\n  label,\n  icon,\n  actionText,\n  onAction,\n  theme = 'system',\n  className,\n}) => {\n  const [status, setStatus] = useState<'idle' | 'loading' | 'success'>('idle');\n\n  const handleTrigger = async () => {\n    if (status !== 'idle') return;\n    setStatus('loading');\n    try {\n      await onAction();\n      setStatus('success');\n    } catch (error) {\n      setStatus('idle');\n    }\n  };\n\n  useEffect(() => {\n    if (status === 'success') {\n      const timer = setTimeout(() => setStatus('idle'), 2000);\n      return () => clearTimeout(timer);\n    }\n  }, [status]);\n\n  const springTransition: Transition = {\n    type: 'spring',\n    stiffness: 400,\n    damping: 35,\n    mass: 1,\n  };\n\n  const forcedTheme =\n    theme === 'dark' ? 'dark' : theme === 'light' ? 'light' : '';\n\n  return (\n    <div\n      className={cn(\n        'flex w-full items-center justify-center px-4',\n        forcedTheme,\n        className,\n      )}\n    >\n      <div className=\"flex w-full w-xs items-center justify-between overflow-hidden rounded-full border-[1.5px] border-[#F0F0F0] bg-white p-3 shadow-sm transition-colors duration-300 md:w-sm dark:border-zinc-800 dark:bg-zinc-900\">\n        <div className=\"flex min-w-0 items-center gap-2 sm:gap-3\">\n          <div className=\"flex shrink-0 items-center justify-center rounded-full bg-[#F0F0F0] p-2.5 text-[#1F1F1F] transition-colors sm:p-3.5 dark:bg-zinc-800 dark:text-zinc-100\">\n            <div className=\"scale-90 sm:scale-100\">{icon}</div>\n          </div>\n          <span className=\"truncate text-[15px] font-bold text-[#000000] transition-colors sm:text-[18px] dark:text-white\">\n            {label}\n          </span>\n        </div>\n        <MotionConfig transition={springTransition}>\n          <motion.div\n            className={cn(\n              'relative flex h-12 items-center overflow-hidden rounded-full bg-[#F0F0F0] px-2 py-2 dark:bg-zinc-800',\n            )}\n            animate={{\n              width:\n                status === 'success' ? 48 : status === 'loading' ? 120 : 120,\n            }}\n          >\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {status === 'idle' && (\n                <motion.button\n                  key=\"idle\"\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                  onClick={handleTrigger}\n                  className=\"w-full rounded-full text-[13px] font-bold whitespace-nowrap text-[#000000] transition-colors sm:text-[15px] dark:text-white\"\n                >\n                  {actionText}\n                </motion.button>\n              )}\n\n              {status === 'loading' && (\n                <motion.div\n                  key=\"loading\"\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                  className=\"w-full\"\n                >\n                  <div className=\"relative h-1.5 flex-1 rounded-full bg-zinc-300 dark:bg-zinc-600\">\n                    <motion.div\n                      className=\"absolute top-0 bottom-0 w-[30%] rounded-full bg-[#212121] dark:bg-zinc-300\"\n                      initial={{ left: '0%' }}\n                      animate={{ left: '70%' }}\n                      transition={{\n                        duration: 0.8,\n                        repeat: Infinity,\n                        repeatType: 'reverse',\n                        ease: 'easeInOut',\n                      }}\n                    />\n                  </div>\n                </motion.div>\n              )}\n\n              {status === 'success' && (\n                <motion.div\n                  key=\"success\"\n                  initial={{ filter: 'blur(4px)', opacity: 0 }}\n                  animate={{ filter: 'blur(0px)', opacity: 1 }}\n                  exit={{ filter: 'blur(4px)', opacity: 0 }}\n                  className=\"relative flex h-full w-full items-center justify-center overflow-hidden rounded-full bg-[#050505] transition-colors dark:bg-white\"\n                >\n                  <motion.div\n                    initial={{ x: '0%' }}\n                    animate={{ x: '100%' }}\n                    transition={{ duration: 0.7, delay: 0.1, ease: 'easeOut' }}\n                    className=\"absolute inset-0 z-10 h-full w-full skew-x-[-40deg] bg-linear-to-r from-transparent via-white/50 to-transparent dark:via-black/20\"\n                  />\n\n                  <Check className=\"size-6 stroke-2 text-white dark:text-black\" />\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-action-base",
      "type": "registry:component",
      "title": "Inline Action (base)",
      "description": "Theme-ready base variant of Inline actions enabling quick edits without leaving current context view..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-action.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { Check } from 'lucide-react';\n\ninterface InlineActionProps {\n  label: string;\n  icon: React.ReactNode;\n  actionText: string;\n  onAction: () => Promise<void>;\n  theme?: 'light' | 'dark' | 'system';\n  className?: string;\n}\n\nexport const InlineAction: React.FC<InlineActionProps> = ({\n  label,\n  icon,\n  actionText,\n  onAction,\n  theme = 'system',\n  className,\n}) => {\n  const [status, setStatus] = useState<'idle' | 'loading' | 'success'>('idle');\n\n  const handleTrigger = async () => {\n    if (status !== 'idle') return;\n    setStatus('loading');\n    try {\n      await onAction();\n      setStatus('success');\n    } catch (error) {\n      setStatus('idle');\n    }\n  };\n\n  useEffect(() => {\n    if (status === 'success') {\n      const timer = setTimeout(() => setStatus('idle'), 2000);\n      return () => clearTimeout(timer);\n    }\n  }, [status]);\n\n  const springTransition: Transition = {\n    type: 'spring',\n    stiffness: 400,\n    damping: 35,\n    mass: 1,\n  };\n\n  const forcedTheme =\n    theme === 'dark' ? 'dark' : theme === 'light' ? 'light' : '';\n\n  return (\n    <div\n      className={cn(\n        'flex w-full items-center justify-center px-4',\n        forcedTheme,\n        className,\n      )}\n    >\n      <div className=\"border-border/50 bg-card flex w-full w-xs items-center justify-between overflow-hidden rounded-lg border-1 p-3 shadow-sm transition-colors duration-300 md:w-sm\">\n        <div className=\"flex min-w-0 items-center gap-2 sm:gap-3\">\n          <div className=\"bg-primary text-primary-foreground flex shrink-0 items-center justify-center rounded-lg p-2.5 transition-colors sm:p-3.5\">\n            <div className=\"scale-90 sm:scale-100\">{icon}</div>\n          </div>\n          <span className=\"text-card-foreground truncate text-[15px] font-bold transition-colors sm:text-[18px]\">\n            {label}\n          </span>\n        </div>\n        <MotionConfig transition={springTransition}>\n          <motion.div\n            className={cn(\n              'bg-primary text-primary-foreground relative flex h-12 items-center overflow-hidden rounded-lg px-2 py-2',\n            )}\n            animate={{\n              width:\n                status === 'success' ? 48 : status === 'loading' ? 120 : 120,\n            }}\n          >\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {status === 'idle' && (\n                <motion.button\n                  key=\"idle\"\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                  onClick={handleTrigger}\n                  className=\"w-full rounded-lg text-[13px] font-bold whitespace-nowrap transition-colors sm:text-[15px]\"\n                >\n                  {actionText}\n                </motion.button>\n              )}\n\n              {status === 'loading' && (\n                <motion.div\n                  key=\"loading\"\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                  className=\"w-full\"\n                >\n                  <div className=\"bg-primary-foreground relative h-1.5 flex-1 rounded-lg\">\n                    <motion.div\n                      className=\"bg-primary absolute top-0 bottom-0 w-[30%] rounded-lg\"\n                      initial={{ left: '0%' }}\n                      animate={{ left: '70%' }}\n                      transition={{\n                        duration: 0.8,\n                        repeat: Infinity,\n                        repeatType: 'reverse',\n                        ease: 'easeInOut',\n                      }}\n                    />\n                  </div>\n                </motion.div>\n              )}\n\n              {status === 'success' && (\n                <motion.div\n                  key=\"success\"\n                  initial={{ filter: 'blur(4px)', opacity: 0 }}\n                  animate={{ filter: 'blur(0px)', opacity: 1 }}\n                  exit={{ filter: 'blur(4px)', opacity: 0 }}\n                  className=\"bg-primary-foreground relative flex h-full w-full items-center justify-center overflow-hidden rounded-lg transition-colors\"\n                >\n                  <motion.div\n                    initial={{ x: '0%' }}\n                    animate={{ x: '100%' }}\n                    transition={{ duration: 0.7, delay: 0.1, ease: 'easeOut' }}\n                    className=\"via-primary-foreground/50 absolute inset-0 z-10 h-full w-full skew-x-[-40deg] bg-linear-to-r from-transparent to-transparent\"\n                  />\n\n                  <Check className=\"text-secondary-foreground size-6 stroke-2\" />\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-edit",
      "type": "registry:component",
      "title": "Inline Edit",
      "description": "A sleek, interactive editor that transitions seamlessly between display and edit modes using smooth layout animations.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-edit.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useId, type FC } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  AlarmClockFreeIcons,\n  Calendar03Icon,\n  Cancel01Icon,\n  Edit03Icon,\n  Link01Icon,\n  Menu02Icon,\n  Tick02Icon,\n  Ticket02Icon,\n} from '@hugeicons/core-free-icons/index';\n\ninterface EditableRowProps {\n  icon: any;\n  label: string;\n  value: string;\n  secondaryValue?: string;\n  onSave?: (value: string) => void;\n  onSaveRange?: (v1: string, v2: string) => void;\n  type?: 'text' | 'time' | 'url';\n  multiline?: boolean;\n}\n\nexport interface EventData {\n  event: string;\n  date: string;\n  start: string;\n  end: string;\n  location: string;\n  url: string;\n  desc: string;\n}\n\ninterface InlineEditCardProps {\n  data: EventData;\n  onDataChange: (data: EventData) => void;\n  title?: string;\n}\n\nconst spring: Transition = {\n  type: 'spring',\n  stiffness: 420,\n  damping: 28,\n  mass: 0.6,\n};\n\nconst EditableRow: FC<EditableRowProps> = ({\n  icon,\n  label,\n  value,\n  secondaryValue,\n  onSave,\n  onSaveRange,\n  type = 'text',\n  multiline = false,\n}) => {\n  const [editing, setEditing] = useState(false);\n  const [v1, setV1] = useState(value);\n  const [v2, setV2] = useState(secondaryValue || '');\n  const inputId = useId();\n  const secondaryInputId = useId();\n  const isTime = type === 'time';\n\n  const handleSave = () => {\n    if (isTime && onSaveRange) onSaveRange(v1, v2);\n    else if (onSave) onSave(v1);\n    setEditing(false);\n  };\n\n  return (\n    <motion.div\n      layout\n      transition={spring}\n      className={`relative flex w-full ${multiline ? 'flex-col items-start gap-4' : 'flex-col gap-2 sm:flex-row sm:items-center sm:gap-4'}`}\n    >\n      <div\n        className={`flex shrink-0 items-center gap-3 ${multiline ? 'w-full' : 'w-full sm:w-[130px]'}`}\n      >\n        <HugeiconsIcon\n          icon={icon}\n          size={24}\n          color=\"#9ca3af\"\n          strokeWidth={1.5}\n        />\n        <label\n          htmlFor={inputId}\n          className=\"cursor-pointer text-[16px] font-medium text-gray-500 dark:text-gray-400\"\n        >\n          {label}\n        </label>\n      </div>\n\n      <div\n        className={`relative w-full bg-white transition-colors dark:bg-zinc-950`}\n      >\n        <motion.div\n          layout\n          className=\"group/content w-full rounded-xl px-2 hover:bg-gray-50 sm:px-3 dark:hover:bg-zinc-900/50\"\n        >\n          <motion.div\n            layout\n            transition={spring}\n            className={`relative flex min-h-[40px] w-full gap-2 overflow-hidden ${multiline ? 'flex-col py-2.5' : 'items-center'}`}\n          >\n            {isTime ? (\n              <div className=\"flex w-full gap-2\">\n                <input\n                  id={inputId}\n                  autoFocus\n                  type=\"text\"\n                  readOnly={!editing}\n                  value={v1}\n                  onChange={(e) => setV1(e.target.value)}\n                  className=\"h-10 w-full rounded-xl border border-transparent bg-transparent text-[16px] leading-relaxed font-medium text-gray-900 outline-none focus:border-gray-200 dark:text-gray-100 dark:focus:border-zinc-800\"\n                />\n                <input\n                  id={secondaryInputId}\n                  type=\"text\"\n                  readOnly={!editing}\n                  value={v2}\n                  onChange={(e) => setV2(e.target.value)}\n                  className=\"h-10 w-full rounded-xl border border-transparent bg-transparent text-[16px] leading-relaxed font-medium text-gray-900 outline-none focus:border-gray-200 dark:text-gray-100 dark:focus:border-zinc-800\"\n                />\n              </div>\n            ) : multiline ? (\n              <textarea\n                id={inputId}\n                autoFocus\n                readOnly={!editing}\n                rows={3}\n                value={v1}\n                onChange={(e) => setV1(e.target.value)}\n                className=\"w-full resize-none rounded-xl bg-transparent px-0 py-0 text-[16px] leading-relaxed font-medium text-gray-900 outline-none dark:text-gray-100\"\n              />\n            ) : (\n              <input\n                id={inputId}\n                autoFocus\n                type=\"text\"\n                readOnly={!editing}\n                value={v1}\n                onChange={(e) => setV1(e.target.value)}\n                onKeyDown={(e) => e.key === 'Enter' && handleSave()}\n                className=\"h-10 w-full rounded-xl bg-transparent text-[15px] font-medium text-gray-900 outline-none sm:text-base dark:text-gray-100\"\n              />\n            )}\n\n            <div className=\"mr-0.5 flex shrink-0 items-center justify-end\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {editing ? (\n                  <motion.div\n                    key=\"edit\"\n                    className=\"flex gap-1\"\n                    initial={{ opacity: 0, y: 40 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 40 }}\n                    transition={{\n                      duration: 0.4,\n                      ease: [0.19, 1, 0.22, 1],\n                    }}\n                  >\n                    <motion.button\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={handleSave}\n                      className=\"flex size-7 items-center justify-center rounded-lg bg-gray-900 text-white dark:bg-gray-100 dark:text-black\"\n                    >\n                      <HugeiconsIcon icon={Tick02Icon} size={18} />\n                    </motion.button>\n\n                    <motion.button\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={() => setEditing(false)}\n                      className=\"flex size-7 items-center justify-center rounded-lg bg-gray-900 text-white dark:bg-zinc-800\"\n                    >\n                      <HugeiconsIcon\n                        icon={Cancel01Icon}\n                        size={18}\n                        color=\"#ffffff\"\n                      />\n                    </motion.button>\n                  </motion.div>\n                ) : (\n                  <motion.div\n                    exit={{ opacity: 1 }}\n                    key=\"view\"\n                    className={`flex size-7 items-center justify-center rounded-lg border border-gray-200 bg-white opacity-0 shadow-sm group-hover/content:opacity-100 dark:border-zinc-800 dark:bg-zinc-900 ${multiline ? 'mt-1 self-end' : ''}`}\n                    onClick={() => setEditing(true)}\n                  >\n                    <HugeiconsIcon\n                      icon={Edit03Icon}\n                      size={18}\n                      color=\"#9ca3af\"\n                    />\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        </motion.div>\n      </div>\n    </motion.div>\n  );\n};\n\nexport const InlineEditCard: FC<InlineEditCardProps> = ({\n  data,\n  onDataChange,\n  title = 'Update Details',\n}) => {\n  return (\n    <div className=\"mx-auto h-fit w-[92vw] max-w-xs rounded-[34px] border border-gray-200 bg-gray-50 p-1.5 shadow-sm transition-colors sm:mx-0 sm:w-[440px] sm:max-w-none dark:border-zinc-800 dark:bg-zinc-900\">\n      <div className=\"w-full overflow-hidden rounded-[28px] border border-gray-200 bg-white transition-colors dark:border-zinc-800 dark:bg-zinc-950\">\n        <div className=\"rounded-t-[32px] border-b border-gray-200 bg-gray-50 px-8 py-3.5 dark:border-zinc-800 dark:bg-zinc-900/50\">\n          <h4 className=\"text-[15px] font-semibold tracking-wide text-gray-500 uppercase dark:text-gray-400\">\n            {title}\n          </h4>\n        </div>\n\n        <div className=\"space-y-4 px-4 py-3 sm:space-y-1\">\n          <EditableRow\n            icon={Ticket02Icon}\n            label=\"Event\"\n            value={data.event}\n            onSave={(v) => onDataChange({ ...data, event: v })}\n          />\n          <EditableRow\n            icon={Calendar03Icon}\n            label=\"Date\"\n            value={data.date}\n            onSave={(v) => onDataChange({ ...data, date: v })}\n          />\n          <EditableRow\n            icon={AlarmClockFreeIcons}\n            label=\"Time\"\n            type=\"time\"\n            value={data.start}\n            secondaryValue={data.end}\n            onSaveRange={(a, b) => onDataChange({ ...data, start: a, end: b })}\n          />\n          <EditableRow\n            icon={Link01Icon}\n            label=\"URL\"\n            type=\"url\"\n            value={data.url}\n            onSave={(v) => onDataChange({ ...data, url: v })}\n          />\n          <div className=\"mt-2 border-t border-gray-100 pt-4 dark:border-zinc-900\">\n            <EditableRow\n              icon={Menu02Icon}\n              label=\"Description\"\n              multiline\n              value={data.desc}\n              onSave={(v) => onDataChange({ ...data, desc: v })}\n            />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-edit-base",
      "type": "registry:component",
      "title": "Inline Edit (base)",
      "description": "Theme-ready base variant of A sleek, interactive editor that transitions seamlessly between display and edit modes using smooth layout animations..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-edit.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useId, type FC } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  AlarmClockFreeIcons,\n  Calendar03Icon,\n  Cancel01Icon,\n  Edit03Icon,\n  Link01Icon,\n  Menu02Icon,\n  Tick02Icon,\n  Ticket02Icon,\n} from '@hugeicons/core-free-icons/index';\n\ninterface EditableRowProps {\n  icon: any;\n  label: string;\n  value: string;\n  secondaryValue?: string;\n  onSave?: (value: string) => void;\n  onSaveRange?: (v1: string, v2: string) => void;\n  type?: 'text' | 'time' | 'url';\n  multiline?: boolean;\n}\n\nexport interface EventData {\n  event: string;\n  date: string;\n  start: string;\n  end: string;\n  location: string;\n  url: string;\n  desc: string;\n}\n\ninterface InlineEditCardProps {\n  data: EventData;\n  onDataChange: (data: EventData) => void;\n  title?: string;\n}\n\nconst spring: Transition = {\n  type: 'spring',\n  stiffness: 420,\n  damping: 28,\n  mass: 0.6,\n};\n\nconst EditableRow: FC<EditableRowProps> = ({\n  icon,\n  label,\n  value,\n  secondaryValue,\n  onSave,\n  onSaveRange,\n  type = 'text',\n  multiline = false,\n}) => {\n  const [editing, setEditing] = useState(false);\n  const [v1, setV1] = useState(value);\n  const [v2, setV2] = useState(secondaryValue || '');\n  const inputId = useId();\n  const secondaryInputId = useId();\n  const isTime = type === 'time';\n\n  const handleSave = () => {\n    if (isTime && onSaveRange) onSaveRange(v1, v2);\n    else if (onSave) onSave(v1);\n    setEditing(false);\n  };\n\n  return (\n    <motion.div\n      layout\n      transition={spring}\n      className={`relative flex w-full ${multiline ? 'flex-col items-start gap-4' : 'flex-col gap-2 sm:flex-row sm:items-center sm:gap-4'}`}\n    >\n      <div\n        className={`flex shrink-0 items-center gap-3 ${multiline ? 'w-full' : 'w-full sm:w-[130px]'}`}\n      >\n        <HugeiconsIcon\n          icon={icon}\n          size={24}\n          className=\"text-muted-foreground\"\n          strokeWidth={1.5}\n        />\n        <label\n          htmlFor={inputId}\n          className=\"text-muted-foreground cursor-pointer text-[16px] font-medium\"\n        >\n          {label}\n        </label>\n      </div>\n\n      <div className={`bg-background relative w-full transition-colors`}>\n        <motion.div\n          layout\n          className=\"group/content hover:bg-muted w-full rounded-lg px-2 sm:px-3\"\n        >\n          <motion.div\n            layout\n            transition={spring}\n            className={`relative flex min-h-[40px] w-full gap-2 overflow-hidden ${multiline ? 'flex-col py-2.5' : 'items-center'}`}\n          >\n            {isTime ? (\n              <div className=\"flex w-full gap-2\">\n                <input\n                  id={inputId}\n                  autoFocus\n                  type=\"text\"\n                  readOnly={!editing}\n                  value={v1}\n                  onChange={(e) => setV1(e.target.value)}\n                  className=\"text-foreground focus:border-border h-10 w-full rounded-lg border border-transparent bg-transparent text-[16px] leading-relaxed font-medium outline-none\"\n                />\n                <input\n                  id={secondaryInputId}\n                  type=\"text\"\n                  readOnly={!editing}\n                  value={v2}\n                  onChange={(e) => setV2(e.target.value)}\n                  className=\"text-foreground focus:border-border h-10 w-full rounded-lg border border-transparent bg-transparent text-[16px] leading-relaxed font-medium outline-none\"\n                />\n              </div>\n            ) : multiline ? (\n              <textarea\n                id={inputId}\n                autoFocus\n                readOnly={!editing}\n                rows={3}\n                value={v1}\n                onChange={(e) => setV1(e.target.value)}\n                className=\"text-foreground w-full resize-none rounded-lg bg-transparent px-0 py-0 text-[16px] leading-relaxed font-medium outline-none\"\n              />\n            ) : (\n              <input\n                id={inputId}\n                autoFocus\n                type=\"text\"\n                readOnly={!editing}\n                value={v1}\n                onChange={(e) => setV1(e.target.value)}\n                onKeyDown={(e) => e.key === 'Enter' && handleSave()}\n                className=\"text-foreground h-10 w-full rounded-lg bg-transparent text-[15px] font-medium outline-none sm:text-base\"\n              />\n            )}\n\n            <div className=\"mr-0.5 flex shrink-0 items-center justify-end\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {editing ? (\n                  <motion.div\n                    key=\"edit\"\n                    className=\"flex gap-1\"\n                    initial={{ opacity: 0, y: 40 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 40 }}\n                    transition={{\n                      duration: 0.4,\n                      ease: [0.19, 1, 0.22, 1],\n                    }}\n                  >\n                    <motion.button\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={handleSave}\n                      className=\"bg-primary text-primary-foreground flex size-7 items-center justify-center rounded-lg\"\n                    >\n                      <HugeiconsIcon icon={Tick02Icon} size={18} />\n                    </motion.button>\n\n                    <motion.button\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      onClick={() => setEditing(false)}\n                      className=\"bg-muted text-foreground flex size-7 items-center justify-center rounded-lg\"\n                    >\n                      <HugeiconsIcon icon={Cancel01Icon} size={18} />\n                    </motion.button>\n                  </motion.div>\n                ) : (\n                  <motion.div\n                    exit={{ opacity: 1 }}\n                    key=\"view\"\n                    className={`border-border bg-background flex size-7 items-center justify-center rounded-lg border opacity-0 shadow-sm group-hover/content:opacity-100 ${multiline ? 'mt-1 self-end' : ''}`}\n                    onClick={() => setEditing(true)}\n                  >\n                    <HugeiconsIcon\n                      icon={Edit03Icon}\n                      size={18}\n                      className=\"text-muted-foreground\"\n                    />\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        </motion.div>\n      </div>\n    </motion.div>\n  );\n};\n\nexport const InlineEditCard: FC<InlineEditCardProps> = ({\n  data,\n  onDataChange,\n  title = 'Update Details',\n}) => {\n  return (\n    <div className=\"theme-injected border-border bg-muted mx-auto h-fit w-[92vw] max-w-xs rounded-lg border p-1.5 shadow-sm transition-colors sm:mx-0 sm:w-[440px] sm:max-w-none\">\n      <div className=\"border-border bg-card w-full overflow-hidden rounded-lg border transition-colors\">\n        <div className=\"border-border bg-muted rounded-t-lg border-b px-8 py-3.5\">\n          <h4 className=\"text-muted-foreground text-[15px] font-semibold tracking-wide uppercase\">\n            {title}\n          </h4>\n        </div>\n\n        <div className=\"space-y-4 px-4 py-3 sm:space-y-1\">\n          <EditableRow\n            icon={Ticket02Icon}\n            label=\"Event\"\n            value={data.event}\n            onSave={(v) => onDataChange({ ...data, event: v })}\n          />\n          <EditableRow\n            icon={Calendar03Icon}\n            label=\"Date\"\n            value={data.date}\n            onSave={(v) => onDataChange({ ...data, date: v })}\n          />\n          <EditableRow\n            icon={AlarmClockFreeIcons}\n            label=\"Time\"\n            type=\"time\"\n            value={data.start}\n            secondaryValue={data.end}\n            onSaveRange={(a, b) => onDataChange({ ...data, start: a, end: b })}\n          />\n          <EditableRow\n            icon={Link01Icon}\n            label=\"URL\"\n            type=\"url\"\n            value={data.url}\n            onSave={(v) => onDataChange({ ...data, url: v })}\n          />\n          <div className=\"border-border mt-2 border-t pt-4\">\n            <EditableRow\n              icon={Menu02Icon}\n              label=\"Description\"\n              multiline\n              value={data.desc}\n              onSave={(v) => onDataChange({ ...data, desc: v })}\n            />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-overflow",
      "type": "registry:component",
      "title": "Inline Overflow",
      "description": "An interactive inline overflow menu that reveals additional actions with spring animations.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-overflow.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { HiOutlineDotsHorizontal } from 'react-icons/hi';\nimport { IoClose } from 'react-icons/io5';\n\nexport interface InlineOverflowAction {\n  label: string;\n}\n\nexport interface InlineOverflowProps {\n  visibleActions: InlineOverflowAction[];\n  hiddenActions: InlineOverflowAction[];\n  showThemeToggle?: boolean;\n}\n\nconst Action: FC<{ label: string }> = ({ label }) => {\n  return (\n    <motion.button\n      layout=\"position\"\n      initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n      animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n      whileHover={{ scale: 1.05 }}\n      whileTap={{ scale: 0.96 }}\n      transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n      className=\"curosr-pointer h-9 shrink-0 cursor-pointer rounded-full border border-black/5 bg-white px-3.5 text-sm font-bold whitespace-nowrap text-neutral-950 transition-colors sm:h-12 sm:px-6 sm:text-base dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100\"\n    >\n      {label}\n    </motion.button>\n  );\n};\n\nexport const InlineOverflow: FC<InlineOverflowProps> = ({\n  visibleActions,\n  hiddenActions,\n}) => {\n  const [open, setOpen] = useState(false);\n\n  return (\n    <motion.div\n      layout\n      className=\"no-scrollbar relative flex max-w-[calc(100vw-1.5rem)] items-center gap-1.5 overflow-hidden border border-black/5 bg-[#F6F5EE] px-1.5 py-1.5 shadow-sm sm:gap-2 sm:px-2 sm:py-2 dark:border-neutral-800 dark:bg-neutral-900\"\n      style={{\n        borderRadius: 32,\n      }}\n      transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n    >\n      {visibleActions.map((action, i) => (\n        <Action key={i} label={action.label} />\n      ))}\n\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {open &&\n          hiddenActions.map((action) => (\n            <motion.div\n              key={action.label}\n              exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n            >\n              <Action label={action.label} />\n            </motion.div>\n          ))}\n      </AnimatePresence>\n      <motion.button\n        layout\n        onClick={() => setOpen(!open)}\n        whileTap={{ scale: 0.9 }}\n        className=\"flex h-9 w-9 shrink-0 cursor-pointer items-center justify-center rounded-full border border-black/5 bg-white text-neutral-600 hover:opacity-70 sm:h-12 sm:w-12 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400\"\n        transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {open ? (\n            <motion.div\n              key=\"close\"\n              initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n            >\n              <IoClose className=\"size-5 sm:size-6\" />\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"dots\"\n              initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n              className=\"font-mono text-base tracking-wider\"\n            >\n              <HiOutlineDotsHorizontal className=\"size-5 sm:size-7\" />\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.button>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-overflow-base",
      "type": "registry:component",
      "title": "Inline Overflow (base)",
      "description": "Theme-ready base variant of An interactive inline overflow menu that reveals additional actions with spring animations..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-overflow.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { HiOutlineDotsHorizontal } from 'react-icons/hi';\nimport { IoClose } from 'react-icons/io5';\n\nexport interface InlineOverflowAction {\n  label: string;\n}\n\nexport interface InlineOverflowProps {\n  visibleActions: InlineOverflowAction[];\n  hiddenActions: InlineOverflowAction[];\n  showThemeToggle?: boolean;\n}\n\nconst Action: FC<{ label: string }> = ({ label }) => {\n  return (\n    <motion.button\n      layout=\"position\"\n      initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n      animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n      whileHover={{ scale: 1.05 }}\n      whileTap={{ scale: 0.96 }}\n      transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n      className=\"h-9 shrink-0 cursor-pointer rounded-4xl border border-border bg-card px-4 text-sm font-bold whitespace-nowrap text-foreground transition-colors hover:bg-accent/40 sm:h-12 sm:px-6 sm:text-base\"\n    >\n      {label}\n    </motion.button>\n  );\n};\n\nexport const InlineOverflow: FC<InlineOverflowProps> = ({\n  visibleActions,\n  hiddenActions,\n}) => {\n  const [open, setOpen] = useState(false);\n\n  return (\n    <motion.div\n      layout\n      className=\"theme-injected no-scrollbar relative flex max-w-full items-center gap-2 overflow-hidden rounded-4xl border border-border bg-muted/40 px-2 py-2 text-foreground shadow-sm font-sans\"\n      style={{ fontFamily: 'var(--font-sans)' }}\n      transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n    >\n      {visibleActions.map((action, i) => (\n        <Action key={i} label={action.label} />\n      ))}\n\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {open &&\n          hiddenActions.map((action) => (\n            <motion.div\n              key={action.label}\n              exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n            >\n              <Action label={action.label} />\n            </motion.div>\n          ))}\n      </AnimatePresence>\n      <motion.button\n        layout\n        onClick={() => setOpen(!open)}\n        whileTap={{ scale: 0.9 }}\n        className=\"flex h-9 w-9 shrink-0 cursor-pointer items-center justify-center rounded-4xl border border-border bg-card text-muted-foreground hover:bg-accent/40 sm:h-12 sm:w-12\"\n        transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {open ? (\n            <motion.div\n              key=\"close\"\n              initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n            >\n              <IoClose className=\"size-5 sm:size-6\" />\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"dots\"\n              initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n              transition={{ type: 'spring', bounce: 0.35, duration: 0.7 }}\n              className=\"font-mono text-base tracking-wider\"\n              style={{ fontFamily: 'var(--font-mono)' }}\n            >\n              <HiOutlineDotsHorizontal className=\"size-5 sm:size-7\" />\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.button>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-table-control",
      "type": "registry:component",
      "title": "Inline Table Control",
      "description": "Inline controls for editing table rows without breaking user focus.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-table-control.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Pencil, X, Check } from 'lucide-react';\nimport { GoStack } from 'react-icons/go';\nimport { BsArrowUpRightSquare } from 'react-icons/bs';\nimport { FaRegCreditCard } from 'react-icons/fa6';\n\nexport interface TableItem {\n  id: string;\n  expense: string;\n  method: string;\n  amount: string;\n}\n\ninterface InlineTableControlProps {\n  data: TableItem[];\n  onUpdate?: (item: TableItem) => void;\n  className?: string;\n}\n\nconst getIcon = (field: string) => {\n  const iconClass = 'text-neutral-400 dark:text-neutral-500';\n  if (field === 'expense')\n    return <FaRegCreditCard size={18} className={iconClass} />;\n  if (field === 'method') return <GoStack size={18} className={iconClass} />;\n  if (field === 'amount')\n    return <BsArrowUpRightSquare size={18} className={iconClass} />;\n  return null;\n};\n\nexport const InlineTableControl: React.FC<InlineTableControlProps> = ({\n  data,\n  onUpdate,\n  className = '',\n}) => {\n  const [items, setItems] = useState<TableItem[]>(data);\n  const [previousData, setPreviousData] = useState(data);\n  const [editingId, setEditingId] = useState<string | null>(null);\n  const [editValues, setEditValues] = useState<TableItem | null>(null);\n\n  if (previousData !== data) {\n    setPreviousData(data);\n    setItems(data);\n  }\n\n  const handleDone = () => {\n    if (editValues) {\n      const updatedItems = items.map((item) =>\n        item.id === editValues.id ? editValues : item,\n      );\n      setItems(updatedItems);\n      onUpdate?.(editValues);\n      setEditingId(null);\n      setEditValues(null);\n    }\n  };\n\n  const layoutTransition = {\n    type: 'spring' as const,\n    bounce: 0,\n    duration: 0.7,\n  };\n\n  return (\n    <div\n      className={`flex w-full flex-col items-center justify-center p-4 antialiased select-none sm:p-10 ${className}`}\n    >\n      <div className=\"w-full max-w-lg\">\n        <motion.div\n          layout\n          transition={layoutTransition}\n          className={`hidden grid-cols-[1.2fr_1fr_0.8fr_40px] px-6 py-4 text-sm font-semibold tracking-wider capitalize transition-all duration-300 sm:grid ${editingId ? 'opacity-20 blur-[1px]' : 'opacity-100'} text-neutral-400 dark:text-neutral-500`}\n        >\n          <motion.div layout className=\"flex items-center gap-2\">\n            <FaRegCreditCard size={18} /> Expense\n          </motion.div>\n          <motion.div layout className=\"flex items-center gap-2\">\n            <GoStack size={18} /> Method\n          </motion.div>\n          <motion.div layout className=\"flex items-center gap-2\">\n            <BsArrowUpRightSquare size={18} /> Amount\n          </motion.div>\n        </motion.div>\n\n        <LayoutGroup>\n          <div className=\"flex flex-col gap-2 sm:gap-0\">\n            {items.map((item) => (\n              <div key={item.id} className=\"relative\">\n                {!editingId && (\n                  <motion.div\n                    layoutId={`divider-${item.id}`}\n                    className=\"mx-6 hidden h-px bg-neutral-100 sm:block dark:bg-neutral-800\"\n                  />\n                )}\n\n                <AnimatePresence mode=\"popLayout\">\n                  {editingId === item.id ? (\n                    <motion.div\n                      layoutId={`container-${item.id}`}\n                      transition={layoutTransition}\n                      className=\"relative z-20 my-2 rounded-2xl border-[1.4px] border-r-0 border-l-0 border-neutral-200 bg-white p-4 shadow-xl sm:my-4 sm:rounded-none sm:p-8 sm:py-4 sm:shadow-none dark:border-neutral-800 dark:bg-neutral-900\"\n                    >\n                      <motion.div className=\"space-y-4 sm:space-y-5\">\n                        {(['expense', 'method', 'amount'] as const).map(\n                          (field) => (\n                            <div\n                              key={field}\n                              className=\"flex flex-col gap-1 sm:grid sm:grid-cols-[120px_1fr] sm:items-center sm:gap-0\"\n                            >\n                              <motion.label\n                                initial={{ opacity: 0 }}\n                                animate={{ opacity: 1 }}\n                                transition={{ duration: 0.3, delay: 0.1 }}\n                                className=\"flex items-center gap-2 text-[11px] font-bold tracking-wider text-neutral-400 uppercase sm:text-sm sm:capitalize dark:text-neutral-500\"\n                              >\n                                {getIcon(field)} {field}\n                              </motion.label>\n                              <motion.div\n                                layout=\"position\"\n                                transition={layoutTransition}\n                                className=\"flex w-full items-center rounded-xl border-[1.6px] border-neutral-200 bg-neutral-50 px-4 py-2.5 focus-within:border-blue-500 sm:py-2 dark:border-neutral-700 dark:bg-neutral-800 dark:focus-within:border-neutral-400\"\n                              >\n                                <motion.input\n                                  layoutId={`${field}-${item.id}`}\n                                  layout=\"position\"\n                                  title=\"edit text\"\n                                  type=\"text\"\n                                  value={editValues ? editValues[field] : ''}\n                                  transition={layoutTransition}\n                                  onChange={(e) =>\n                                    setEditValues((prev) =>\n                                      prev\n                                        ? { ...prev, [field]: e.target.value }\n                                        : null,\n                                    )\n                                  }\n                                  className=\"relative z-999 w-full bg-transparent text-base font-bold text-neutral-900 outline-none sm:text-sm dark:text-white\"\n                                />\n                              </motion.div>\n                            </div>\n                          ),\n                        )}\n                      </motion.div>\n\n                      <div className=\"mt-6 flex flex-row justify-end gap-2 sm:mt-4\">\n                        <button\n                          onClick={() => {\n                            setEditingId(null);\n                            setEditValues(null);\n                          }}\n                          className=\"flex flex-1 items-center justify-center gap-2 rounded-xl bg-neutral-100 px-5 py-3 text-sm font-bold text-neutral-600 sm:flex-none sm:py-2 dark:bg-neutral-800 dark:text-neutral-400\"\n                        >\n                          <X size={18} /> <span>Cancel</span>\n                        </button>\n                        <button\n                          onClick={handleDone}\n                          className=\"flex flex-1 items-center justify-center gap-2 rounded-xl bg-neutral-900 px-5 py-3 text-sm font-bold text-white sm:flex-none sm:py-2 dark:bg-white dark:text-black\"\n                        >\n                          <Check size={18} /> <span>Done</span>\n                        </button>\n                      </div>\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      layout=\"position\"\n                      layoutId={`container-${item.id}`}\n                      transition={layoutTransition}\n                      animate={{\n                        opacity: editingId ? 0.35 : 1,\n                        filter: editingId ? 'blur(1px)' : 'blur(0px)',\n                      }}\n                      className={`group grid cursor-default grid-cols-[1fr_auto_40px] items-center rounded-2xl px-4 py-4 transition-all duration-300 sm:grid-cols-[1.2fr_1fr_0.8fr_40px] sm:rounded-none sm:px-6 sm:py-5 ${\n                        editingId\n                          ? ''\n                          : 'border border-neutral-100 bg-neutral-50/50 opacity-100 hover:bg-neutral-50 sm:border-none sm:bg-transparent dark:border-white/[0.03] dark:bg-zinc-900/40 dark:hover:bg-zinc-800/60'\n                      }`}\n                    >\n                      <motion.div className=\"flex flex-col\">\n                        <motion.div\n                          layoutId={`expense-${item.id}`}\n                          layout=\"position\"\n                          className=\"flex text-sm font-bold text-neutral-900 sm:text-base\"\n                        >\n                          <motion.span\n                            layout=\"position\"\n                            transition={layoutTransition}\n                            className=\"dark:text-zinc-100\"\n                          >\n                            {item.expense}\n                          </motion.span>\n                        </motion.div>\n                        <motion.div\n                          layoutId={`method-mobile-${item.id}`}\n                          layout=\"position\"\n                          className=\"flex text-xs font-medium text-neutral-500 sm:hidden\"\n                        >\n                          <motion.span\n                            layout=\"position\"\n                            transition={layoutTransition}\n                            className=\"dark:text-zinc-500\"\n                          >\n                            {item.method}\n                          </motion.span>\n                        </motion.div>\n                      </motion.div>\n\n                      <motion.div\n                        layoutId={`method-${item.id}`}\n                        layout=\"position\"\n                        className=\"hidden text-sm font-semibold text-neutral-500 sm:flex\"\n                      >\n                        <motion.span\n                          layout=\"position\"\n                          transition={layoutTransition}\n                          className=\"dark:text-zinc-500\"\n                        >\n                          {item.method}\n                        </motion.span>\n                      </motion.div>\n\n                      <motion.div\n                        layoutId={`amount-${item.id}`}\n                        layout=\"position\"\n                        className=\"flex justify-end text-sm font-bold text-neutral-700 sm:justify-start sm:text-base\"\n                      >\n                        <motion.span\n                          layout=\"position\"\n                          transition={layoutTransition}\n                          className=\"flex items-center dark:text-zinc-300\"\n                        >\n                          <span className=\"mr-0.5 text-neutral-400 dark:text-zinc-600\">\n                            $\n                          </span>\n                          {item.amount}\n                        </motion.span>\n                      </motion.div>\n\n                      <button\n                        title=\"edit\"\n                        onClick={() => {\n                          setEditValues({ ...item });\n                          setEditingId(item.id);\n                        }}\n                        className=\"flex justify-end text-neutral-400 transition-transform hover:text-black active:scale-125 dark:hover:text-white\"\n                      >\n                        <Pencil size={18} strokeWidth={2.5} />\n                      </button>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            ))}\n          </div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-table-control-base",
      "type": "registry:component",
      "title": "Inline Table Control (base)",
      "description": "Theme-ready base variant of Inline controls for editing table rows without breaking user focus..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-table-control.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Pencil, X, Check } from 'lucide-react';\nimport { GoStack } from 'react-icons/go';\nimport { BsArrowUpRightSquare } from 'react-icons/bs';\nimport { FaRegCreditCard } from 'react-icons/fa6';\n\nexport interface TableItem {\n  id: string;\n  expense: string;\n  method: string;\n  amount: string;\n}\n\ninterface InlineTableControlProps {\n  data: TableItem[];\n  onUpdate?: (item: TableItem) => void;\n  className?: string;\n}\n\nconst getIcon = (field: string) => {\n  const iconClass = 'text-muted-foreground';\n  if (field === 'expense')\n    return <FaRegCreditCard size={18} className={iconClass} />;\n  if (field === 'method') return <GoStack size={18} className={iconClass} />;\n  if (field === 'amount')\n    return <BsArrowUpRightSquare size={18} className={iconClass} />;\n  return null;\n};\n\nexport const InlineTableControl: React.FC<InlineTableControlProps> = ({\n  data,\n  onUpdate,\n  className = '',\n}) => {\n  const [items, setItems] = useState<TableItem[]>(data);\n  const [previousData, setPreviousData] = useState(data);\n  const [editingId, setEditingId] = useState<string | null>(null);\n  const [editValues, setEditValues] = useState<TableItem | null>(null);\n\n  if (previousData !== data) {\n    setPreviousData(data);\n    setItems(data);\n  }\n\n  const handleDone = () => {\n    if (editValues) {\n      const updatedItems = items.map((item) =>\n        item.id === editValues.id ? editValues : item,\n      );\n      setItems(updatedItems);\n      onUpdate?.(editValues);\n      setEditingId(null);\n      setEditValues(null);\n    }\n  };\n\n  const layoutTransition = {\n    type: 'spring' as const,\n    bounce: 0,\n    duration: 0.7,\n  };\n\n  return (\n    <div\n      className={`theme-injected flex w-full flex-col items-center justify-center p-4 antialiased select-none sm:p-10 ${className}`}\n    >\n      <div className=\"w-full max-w-lg\">\n        <motion.div\n          layout\n          transition={layoutTransition}\n          className={`hidden grid-cols-[1.2fr_1fr_0.8fr_40px] px-6 py-4 text-sm font-semibold tracking-wider capitalize transition-all duration-300 sm:grid ${editingId ? 'opacity-20 blur-[1px]' : 'opacity-100'} text-muted-foreground`}\n        >\n          <motion.div layout className=\"flex items-center gap-2\">\n            <FaRegCreditCard size={18} /> Expense\n          </motion.div>\n          <motion.div layout className=\"flex items-center gap-2\">\n            <GoStack size={18} /> Method\n          </motion.div>\n          <motion.div layout className=\"flex items-center gap-2\">\n            <BsArrowUpRightSquare size={18} /> Amount\n          </motion.div>\n        </motion.div>\n\n        <LayoutGroup>\n          <div className=\"flex flex-col gap-2 sm:gap-0\">\n            {items.map((item) => (\n              <div key={item.id} className=\"relative\">\n                {!editingId && (\n                  <motion.div\n                    layoutId={`divider-${item.id}`}\n                    className=\"bg-border mx-6 hidden h-px sm:block\"\n                  />\n                )}\n\n                <AnimatePresence mode=\"popLayout\">\n                  {editingId === item.id ? (\n                    <motion.div\n                      layoutId={`container-${item.id}`}\n                      transition={layoutTransition}\n                      className=\"border-border bg-card relative z-20 my-2 rounded-lg border p-4 shadow-xl sm:my-4 sm:rounded-none sm:p-8 sm:py-4 sm:shadow-none\"\n                    >\n                      <motion.div className=\"space-y-4 sm:space-y-5\">\n                        {(['expense', 'method', 'amount'] as const).map(\n                          (field) => (\n                            <div\n                              key={field}\n                              className=\"flex flex-col gap-1 sm:grid sm:grid-cols-[120px_1fr] sm:items-center sm:gap-0\"\n                            >\n                              <motion.label\n                                initial={{ opacity: 0 }}\n                                animate={{ opacity: 1 }}\n                                transition={{ duration: 0.3, delay: 0.1 }}\n                                className=\"text-muted-foreground flex items-center gap-2 text-[11px] font-bold tracking-wider uppercase sm:text-sm sm:capitalize\"\n                              >\n                                {getIcon(field)} {field}\n                              </motion.label>\n                              <motion.div\n                                layout=\"position\"\n                                transition={layoutTransition}\n                                className=\"border-border bg-muted focus-within:border-ring flex w-full items-center rounded-lg border px-4 py-2.5 sm:py-2\"\n                              >\n                                <motion.input\n                                  layoutId={`${field}-${item.id}`}\n                                  layout=\"position\"\n                                  title=\"edit text\"\n                                  type=\"text\"\n                                  value={editValues ? editValues[field] : ''}\n                                  transition={layoutTransition}\n                                  onChange={(e) =>\n                                    setEditValues((prev) =>\n                                      prev\n                                        ? { ...prev, [field]: e.target.value }\n                                        : null,\n                                    )\n                                  }\n                                  className=\"text-foreground relative z-999 w-full bg-transparent text-base font-bold outline-none sm:text-sm\"\n                                />\n                              </motion.div>\n                            </div>\n                          ),\n                        )}\n                      </motion.div>\n\n                      <div className=\"mt-6 flex flex-row justify-end gap-2 sm:mt-4\">\n                        <button\n                          onClick={() => {\n                            setEditingId(null);\n                            setEditValues(null);\n                          }}\n                          className=\"bg-muted text-muted-foreground flex flex-1 items-center justify-center gap-2 rounded-lg px-5 py-3 text-sm font-bold sm:flex-none sm:py-2\"\n                        >\n                          <X size={18} /> <span>Cancel</span>\n                        </button>\n                        <button\n                          onClick={handleDone}\n                          className=\"bg-primary text-primary-foreground flex flex-1 items-center justify-center gap-2 rounded-lg px-5 py-3 text-sm font-bold sm:flex-none sm:py-2\"\n                        >\n                          <Check size={18} /> <span>Done</span>\n                        </button>\n                      </div>\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      layout=\"position\"\n                      layoutId={`container-${item.id}`}\n                      transition={layoutTransition}\n                      animate={{\n                        opacity: editingId ? 0.35 : 1,\n                        filter: editingId ? 'blur(1px)' : 'blur(0px)',\n                      }}\n                      className={`group grid cursor-default grid-cols-[1fr_auto_40px] items-center rounded-lg px-4 py-4 transition-all duration-300 sm:grid-cols-[1.2fr_1fr_0.8fr_40px] sm:rounded-none sm:px-6 sm:py-5 ${\n                        editingId\n                          ? ''\n                          : 'border-border bg-muted/50 hover:bg-muted border opacity-100 sm:border-none sm:bg-transparent dark:border-white/[0.03] dark:bg-zinc-900/40 dark:hover:bg-zinc-800/60'\n                      }`}\n                    >\n                      <motion.div className=\"flex flex-col\">\n                        <motion.div\n                          layoutId={`expense-${item.id}`}\n                          layout=\"position\"\n                          className=\"text-foreground flex text-sm font-bold sm:text-base\"\n                        >\n                          <motion.span\n                            layout=\"position\"\n                            transition={layoutTransition}\n                          >\n                            {item.expense}\n                          </motion.span>\n                        </motion.div>\n                        <motion.div\n                          layoutId={`method-mobile-${item.id}`}\n                          layout=\"position\"\n                          className=\"text-muted-foreground flex text-xs font-medium sm:hidden\"\n                        >\n                          <motion.span\n                            layout=\"position\"\n                            transition={layoutTransition}\n                          >\n                            {item.method}\n                          </motion.span>\n                        </motion.div>\n                      </motion.div>\n\n                      <motion.div\n                        layoutId={`method-${item.id}`}\n                        layout=\"position\"\n                        className=\"text-muted-foreground hidden text-sm font-semibold sm:flex\"\n                      >\n                        <motion.span\n                          layout=\"position\"\n                          transition={layoutTransition}\n                        >\n                          {item.method}\n                        </motion.span>\n                      </motion.div>\n\n                      <motion.div\n                        layoutId={`amount-${item.id}`}\n                        layout=\"position\"\n                        className=\"text-foreground flex justify-end text-sm font-bold sm:justify-start sm:text-base\"\n                      >\n                        <motion.span\n                          layout=\"position\"\n                          transition={layoutTransition}\n                          className=\"flex items-center\"\n                        >\n                          <span className=\"text-muted-foreground mr-0.5\">\n                            $\n                          </span>\n                          {item.amount}\n                        </motion.span>\n                      </motion.div>\n\n                      <button\n                        title=\"edit\"\n                        onClick={() => {\n                          setEditValues({ ...item });\n                          setEditingId(item.id);\n                        }}\n                        className=\"text-muted-foreground hover:text-foreground flex justify-end transition-transform active:scale-125\"\n                      >\n                        <Pencil size={18} strokeWidth={2.5} />\n                      </button>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            ))}\n          </div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-toast",
      "type": "registry:component",
      "title": "Inline Toast",
      "description": "An animated inline toast that provides instant feedback with a built-in copy action.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-toast.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { IoCheckmarkCircle } from 'react-icons/io5';\n\nexport interface InlineCopyToastProps {\n  code: string;\n  copyDuration?: number;\n}\n\nexport const InlineToast: FC<InlineCopyToastProps> = ({\n  code,\n  copyDuration = 2000,\n}) => {\n  const [copied, setCopied] = useState<boolean>(false);\n\n  const handleCopy = async (): Promise<void> => {\n    await navigator.clipboard.writeText(code);\n    setCopied(true);\n\n    setTimeout(() => {\n      setCopied(false);\n    }, copyDuration);\n  };\n\n  return (\n    <motion.div\n      layout=\"position\"\n      transition={{ type: 'spring', stiffness: 260, damping: 24 }}\n      className=\"relative flex h-16 min-w-[320px] items-center justify-center overflow-hidden rounded-full border border-[#ecebeb2b] bg-[#F6F6F6] pl-7 pr-2 shadow-sm dark:bg-zinc-900\"\n    >\n      <AnimatePresence>\n        {copied && (\n          <motion.div\n            initial={{ x: '-100%' }}\n            animate={{ x: '0%' }}\n            transition={{\n              duration: copyDuration / 1000,\n              ease: 'linear',\n            }}\n            className=\"absolute inset-0 bg-[#F0F0F0] dark:bg-zinc-800\"\n          />\n        )}\n      </AnimatePresence>\n\n      <div className=\"z-10 flex w-full items-center justify-between gap-7\">\n        <AnimatePresence mode=\"popLayout\">\n          {!copied ? (\n            <motion.div\n              key=\"copy\"\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 0.95 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 0.95 }}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.4,\n              }}\n              className=\"flex w-full items-center justify-between\"\n            >\n              <span className=\"text-xl font-bold tracking-wide text-[#868686] dark:text-zinc-500\">\n                {code}\n              </span>\n\n              <motion.button\n                onClick={handleCopy}\n                whileHover={{ y: -1, scale: 1.04 }}\n                whileTap={{ scale: 0.96 }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 350,\n                  damping: 18,\n                }}\n                className=\"relative cursor-pointer overflow-hidden rounded-full bg-[#FEFEFE] px-[26px] py-2.5 text-base font-semibold text-black shadow-[0_6px_12px_rgba(0,0,0,0.08)] dark:bg-zinc-100\"\n              >\n                <motion.span\n                  initial={{ x: '-120%' }}\n                  whileHover={{ x: '120%' }}\n                  transition={{ duration: 0.6, ease: 'easeInOut' }}\n                  className=\"pointer-events-none absolute inset-0 bg-linear-to-r from-transparent via-black/5 to-transparent\"\n                />\n\n                <span className=\"relative z-10\">Copy</span>\n              </motion.button>\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"copied\"\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 1.1 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 1.1 }}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.4,\n              }}\n              className=\"flex w-full items-center justify-center gap-2 text-black dark:text-white\"\n            >\n              <IoCheckmarkCircle size={28} />\n              <span className=\"text-lg font-bold\">Code Copied!</span>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "inline-toast-base",
      "type": "registry:component",
      "title": "Inline Toast (base)",
      "description": "Theme-ready base variant of An animated inline toast that provides instant feedback with a built-in copy action..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/inline-toast.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { IoCheckmarkCircle } from 'react-icons/io5';\n\nexport interface InlineCopyToastProps {\n  code: string;\n  copyDuration?: number;\n}\n\nexport const InlineToast: FC<InlineCopyToastProps> = ({\n  code,\n  copyDuration = 2000,\n}) => {\n  const [copied, setCopied] = useState<boolean>(false);\n\n  const handleCopy = async (): Promise<void> => {\n    await navigator.clipboard.writeText(code);\n    setCopied(true);\n\n    setTimeout(() => {\n      setCopied(false);\n    }, copyDuration);\n  };\n\n  return (\n    <motion.div\n      layout=\"position\"\n      transition={{ type: 'spring', stiffness: 260, damping: 24 }}\n      className=\"theme-injected border-border bg-muted relative flex h-16 min-w-[320px] items-center justify-center overflow-hidden rounded-full border pl-7 pr-4 shadow-sm\"\n    >\n      <AnimatePresence>\n        {copied && (\n          <motion.div\n            initial={{ x: '-100%' }}\n            animate={{ x: '0%' }}\n            transition={{\n              duration: copyDuration / 1000,\n              ease: 'linear',\n            }}\n            className=\"bg-muted absolute inset-0\"\n          />\n        )}\n      </AnimatePresence>\n\n      <div className=\"z-10 flex w-full items-center justify-between gap-7\">\n        <AnimatePresence mode=\"popLayout\">\n          {!copied ? (\n            <motion.div\n              key=\"copy\"\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 0.95 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 0.95 }}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.4,\n              }}\n              className=\"flex w-full items-center justify-between\"\n            >\n              <span className=\"text-muted-foreground/50 text-xl font-bold tracking-wide\">\n                {code}\n              </span>\n\n              <motion.button\n                onClick={handleCopy}\n                whileHover={{ y: -1, scale: 1.04 }}\n                whileTap={{ scale: 0.96 }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 350,\n                  damping: 18,\n                }}\n                className=\"bg-background text-foreground relative cursor-pointer overflow-hidden rounded-lg px-[26px] py-2.5 text-base font-semibold shadow-md\"\n              >\n                <motion.span\n                  initial={{ x: '-120%' }}\n                  whileHover={{ x: '120%' }}\n                  transition={{ duration: 0.6, ease: 'easeInOut' }}\n                  className=\"via-foreground/10 pointer-events-none absolute inset-0 bg-gradient-to-r from-transparent to-transparent\"\n                />\n\n                <span className=\"relative z-10\">Copy</span>\n              </motion.button>\n            </motion.div>\n          ) : (\n            <motion.div\n              key=\"copied\"\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 1.1 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 1.1 }}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.4,\n              }}\n              className=\"text-foreground flex w-full items-center justify-center gap-2\"\n            >\n              <IoCheckmarkCircle size={28} />\n              <span className=\"text-lg font-bold\">Code Copied!</span>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "integration-card",
      "type": "registry:component",
      "title": "Integration Card",
      "description": "Show connected services with status, actions, and simple integration management.",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/integration-card.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n  Search,\n  ChevronDown,\n  ChevronLeft,\n  ChevronRight,\n  Check,\n} from 'lucide-react';\nimport { IoClose } from 'react-icons/io5';\nimport { cn } from '@/lib/utils';\n\n/* ---------- Types ---------- */\nexport interface IntegrationItem {\n  id: string;\n  name: string;\n  entities: string;\n  description: string;\n  tags: string[];\n  triggers: number;\n  actions: number;\n  available: boolean;\n  icon: React.ReactNode;\n}\n\ninterface IntegrationsCardProps {\n  items: IntegrationItem[];\n  title: string;\n}\n\n/* ---------- Sub-components ---------- */\nconst FilterButton: React.FC<{\n  label: string;\n  active?: boolean;\n  onClick: () => void;\n  selected?: string;\n}> = ({ label, active, onClick, selected }) => (\n  <button\n    onClick={onClick}\n    className={cn(\n      'relative flex shrink-0 items-center gap-1.5 rounded-lg border px-3 py-1.5 text-[11px] transition active:scale-95',\n      active\n        ? 'border-zinc-300 bg-zinc-100 text-zinc-900 dark:border-[#3a3a3a] dark:bg-[#1a1a1a] dark:text-white'\n        : 'border-zinc-200 bg-zinc-100/50 text-zinc-500 hover:text-zinc-900 dark:border-[#2a2a2a] dark:bg-[#141414] dark:text-[#a3a3a3] dark:hover:text-white',\n    )}\n  >\n    {selected || label}\n    <ChevronDown\n      size={12}\n      className={cn(\n        'transition-transform duration-300',\n        active ? 'rotate-180' : '',\n      )}\n    />\n  </button>\n);\n\nconst IntegrationCard: React.FC<{ item: IntegrationItem }> = ({ item }) => {\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, y: 6 }}\n      animate={{ opacity: 1, y: 0 }}\n      className=\"flex gap-4 border-b border-zinc-100 px-5 py-4 transition-colors last:rounded-b-[14px] last:border-b-[1.6px] hover:bg-zinc-50 dark:border-[#1f1f1f] dark:hover:bg-[#141414]\"\n    >\n      {/* Icon */}\n      <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-zinc-200 bg-zinc-50 dark:border-[#2a2a2a] dark:bg-[#0f0f0f]\">\n        {item.icon}\n      </div>\n\n      {/* Content */}\n      <div className=\"min-w-0 flex-1\">\n        <div className=\"flex items-start justify-between gap-2\">\n          <div className=\"truncate\">\n            <h3 className=\"truncate text-[14px] font-medium text-zinc-900 dark:text-[#EEEEEE]\">\n              {item.name}\n            </h3>\n            <p className=\"mt-0.5 truncate text-[10px] tracking-wider text-zinc-400 uppercase dark:text-[#6b6b6b]\">\n              {item.entities}\n            </p>\n          </div>\n\n          {item.available && (\n            <span className=\"shrink-0 rounded-full border border-green-200 bg-green-50 px-2 py-0.5 pt-1 text-[9px] font-bold text-green-600 dark:border-[#1AA420]/70 dark:bg-[#142E17] dark:text-[#1bb022]\">\n              AVAILABLE\n            </span>\n          )}\n        </div>\n\n        <p className=\"mt-2 max-w-full text-[12px] leading-relaxed text-zinc-500 dark:text-[#8a8a8a]\">\n          {item.description}\n        </p>\n\n        <div className=\"mt-3 flex flex-col justify-between gap-2 sm:flex-row sm:items-center\">\n          <div className=\"flex flex-wrap gap-1.5\">\n            {item.tags.map((tag) => (\n              <span\n                key={tag}\n                className=\"rounded-full border border-zinc-200 bg-zinc-100 px-2 py-0.5 text-[10px] text-zinc-500 dark:border-[#2a2a2a] dark:bg-[#1a1a1a] dark:text-[#9a9a9a]\"\n              >\n                {tag}\n              </span>\n            ))}\n          </div>\n\n          <span className=\"text-[10px] whitespace-nowrap text-zinc-400 dark:text-[#6b6b6b]\">\n            {item.triggers} TRIGGERS / {item.actions} ACTIONS\n          </span>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\n/* ---------- Main ---------- */\nexport const IntegrationsCard: React.FC<IntegrationsCardProps> = ({\n  items,\n  title,\n}) => {\n  const [activePopover, setActivePopover] = useState<\n    'type' | 'useCase' | 'more' | null\n  >(null);\n  const [selectedType, setSelectedType] = useState('All types');\n  const [selectedUseCase, setSelectedUseCase] = useState('All use cases');\n  const [searchQuery, setSearchQuery] = useState('');\n  const [currentPage, setCurrentPage] = useState(1);\n  const itemsPerPage = 6;\n\n  const popoverRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        popoverRef.current &&\n        !popoverRef.current.contains(event.target as Node)\n      ) {\n        setActivePopover(null);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  // Filter Logic\n  const filteredItems = items.filter((item) => {\n    const matchesSearch =\n      item.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n      item.description.toLowerCase().includes(searchQuery.toLowerCase());\n    const matchesType =\n      selectedType === 'All types' || item.tags.includes(selectedType);\n    const matchesUseCase =\n      selectedUseCase === 'All use cases' ||\n      item.entities.includes(selectedUseCase.toUpperCase());\n    return matchesSearch && matchesType && matchesUseCase;\n  });\n\n  // Pagination Logic\n  const totalPages = Math.ceil(filteredItems.length / itemsPerPage);\n  const paginatedItems = filteredItems.slice(\n    (currentPage - 1) * itemsPerPage,\n    currentPage * itemsPerPage,\n  );\n\n  const typeOptions = ['All types', 'Marketplace', 'Internal', 'Third-party'];\n  const useCaseOptions = [\n    'All use cases',\n    'Productivity',\n    'Marketing',\n    'Development',\n    'Sales',\n  ];\n\n  return (\n    <div className=\"text-foreground flex w-full flex-col items-center bg-transparent px-4 py-8\">\n      <div className=\"w-full max-w-145 overflow-hidden rounded-[22px] border border-zinc-200 bg-white shadow-2xl transition-all duration-300 dark:border-[#1f1f1f] dark:bg-[#101010]\">\n        {/* Header */}\n        <header className=\"flex items-center justify-between px-5 py-4\">\n          <h2 className=\"text-sm font-semibold tracking-tight text-zinc-900 dark:text-white\">\n            {title}\n          </h2>\n          <button\n            title=\"close\"\n            className=\"flex h-8 w-8 items-center justify-center rounded-full text-zinc-400 transition-all hover:bg-zinc-100 hover:text-zinc-900 active:scale-90 dark:text-[#6b6b6b] dark:hover:bg-white/5 dark:hover:text-white\"\n          >\n            <IoClose size={18} />\n          </button>\n        </header>\n\n        {/* Filters & Search */}\n        <div className=\"relative flex flex-col items-stretch gap-3 rounded-t-[14px] border-t border-b border-zinc-100 bg-zinc-50 px-5 py-4 md:flex-row md:items-center dark:border-[#1f1f1f] dark:bg-[#171717]\">\n          <div className=\"no-scrollbar flex items-center gap-2 overflow-x-auto pb-1 md:pb-0\">\n            <FilterButton\n              label=\"All types\"\n              selected={selectedType !== 'All types' ? selectedType : undefined}\n              active={activePopover === 'type'}\n              onClick={() =>\n                setActivePopover(activePopover === 'type' ? null : 'type')\n              }\n            />\n            <FilterButton\n              label=\"All use cases\"\n              selected={\n                selectedUseCase !== 'All use cases'\n                  ? selectedUseCase\n                  : undefined\n              }\n              active={activePopover === 'useCase'}\n              onClick={() =>\n                setActivePopover(activePopover === 'useCase' ? null : 'useCase')\n              }\n            />\n            <FilterButton\n              label=\"More\"\n              active={activePopover === 'more'}\n              onClick={() =>\n                setActivePopover(activePopover === 'more' ? null : 'more')\n              }\n            />\n          </div>\n\n          <div className=\"hidden flex-1 md:block\" />\n\n          <div className=\"group relative w-full md:w-56\">\n            <Search\n              size={14}\n              className=\"absolute top-1/2 left-3 -translate-y-1/2 text-zinc-400 transition-colors group-focus-within:text-zinc-900 dark:text-[#6b6b6b] dark:group-focus-within:text-white\"\n            />\n            <input\n              value={searchQuery}\n              onChange={(e) => {\n                setSearchQuery(e.target.value);\n                setCurrentPage(1);\n              }}\n              placeholder=\"Search for an app...\"\n              className=\"w-full rounded-lg border border-zinc-200 bg-white py-1.5 pr-4 pl-9 text-[12px] text-zinc-900 placeholder-zinc-400 transition-all focus:border-zinc-400 focus:outline-none dark:border-[#2a2a2a] dark:bg-[#121212] dark:text-white dark:placeholder-[#6b6b6b] dark:focus:border-[#3a3a3a]\"\n            />\n          </div>\n\n          {/* Global Popover */}\n          <AnimatePresence>\n            {activePopover && (\n              <motion.div\n                ref={popoverRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: 4 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"absolute top-full right-5 left-5 z-50 w-auto overflow-hidden rounded-xl border border-zinc-200 bg-white p-1.5 shadow-2xl md:right-auto md:left-5 md:min-w-48 dark:border-white/10 dark:bg-[#171717]\"\n              >\n                {activePopover === 'type' &&\n                  typeOptions.map((opt) => (\n                    <button\n                      key={opt}\n                      onClick={() => {\n                        setSelectedType(opt);\n                        setActivePopover(null);\n                        setCurrentPage(1);\n                      }}\n                      className=\"flex w-full items-center justify-between gap-3 rounded-lg px-3 py-2 text-left text-[12px] font-medium text-zinc-700 transition-colors hover:bg-zinc-50 dark:text-[#EEEEEE] dark:hover:bg-white/5\"\n                    >\n                      {opt}\n                      {selectedType === opt && (\n                        <Check\n                          size={12}\n                          className=\"text-zinc-900 dark:text-white\"\n                        />\n                      )}\n                    </button>\n                  ))}\n                {activePopover === 'useCase' &&\n                  useCaseOptions.map((opt) => (\n                    <button\n                      key={opt}\n                      onClick={() => {\n                        setSelectedUseCase(opt);\n                        setActivePopover(null);\n                        setCurrentPage(1);\n                      }}\n                      className=\"flex w-full items-center justify-between gap-3 rounded-lg px-3 py-2 text-left text-[12px] font-medium text-zinc-700 transition-colors hover:bg-zinc-50 dark:text-[#EEEEEE] dark:hover:bg-white/5\"\n                    >\n                      {opt}\n                      {selectedUseCase === opt && (\n                        <Check\n                          size={12}\n                          className=\"text-zinc-900 dark:text-white\"\n                        />\n                      )}\n                    </button>\n                  ))}\n                {activePopover === 'more' && (\n                  <div className=\"space-y-1 p-2\">\n                    <p className=\"px-2 pb-2 text-[9px] font-bold tracking-wider text-zinc-400 uppercase dark:text-[#555]\">\n                      Advanced\n                    </p>\n                    <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[11px] text-zinc-600 transition-colors hover:bg-zinc-50 dark:text-[#888] dark:hover:bg-white/5\">\n                      Sort by Name\n                    </button>\n                    <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[11px] text-zinc-600 transition-colors hover:bg-zinc-50 dark:text-[#888] dark:hover:bg-white/5\">\n                      Sort by Recent\n                    </button>\n                    <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[11px] font-medium text-red-500 transition-colors hover:bg-zinc-50 dark:hover:bg-white/5\">\n                      Reset Filters\n                    </button>\n                  </div>\n                )}\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* List */}\n        <div className=\"no-scrollbar max-h-130 overflow-y-auto bg-white dark:bg-[#171717]\">\n          <AnimatePresence mode=\"popLayout\">\n            {paginatedItems.map((item) => (\n              <IntegrationCard key={item.id} item={item} />\n            ))}\n            {paginatedItems.length === 0 && (\n              <motion.div\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                className=\"space-y-3 py-24 text-center\"\n              >\n                <div className=\"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full border border-zinc-100 bg-zinc-50 dark:border-white/10 dark:bg-white/5\">\n                  <Search\n                    size={20}\n                    className=\"text-zinc-400 dark:text-[#555]\"\n                  />\n                </div>\n                <p className=\"text-[14px] font-medium tracking-tight text-zinc-900 dark:text-white\">\n                  No integrations found\n                </p>\n                <p className=\"text-[12px] text-zinc-400 dark:text-[#6b6b6b]\">\n                  Try adjusting your search or filters\n                </p>\n                <button\n                  onClick={() => {\n                    setSearchQuery('');\n                    setSelectedType('All types');\n                    setSelectedUseCase('All use cases');\n                  }}\n                  className=\"text-[12px] font-bold text-zinc-900 hover:underline dark:text-white\"\n                >\n                  Clear all filters\n                </button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* Footer */}\n        <footer className=\"flex flex-col items-center justify-between gap-4 border-t border-zinc-100 bg-zinc-50/30 px-6 py-4 text-[11px] text-zinc-400 sm:flex-row dark:border-[#1f1f1f] dark:bg-transparent dark:text-[#6b6b6b]\">\n          <span className=\"font-medium\">\n            {filteredItems.length > 0\n              ? (currentPage - 1) * itemsPerPage + 1\n              : 0}{' '}\n            – {Math.min(currentPage * itemsPerPage, filteredItems.length)} of{' '}\n            {filteredItems.length} apps\n          </span>\n\n          <div className=\"flex items-center gap-1\">\n            <button\n              disabled={currentPage === 1}\n              onClick={() => setCurrentPage((prev) => prev - 1)}\n              className=\"rounded-lg p-1.5 transition-all hover:bg-zinc-100 disabled:opacity-30 dark:hover:bg-white/5\"\n            >\n              <ChevronLeft size={16} />\n            </button>\n            <div className=\"flex items-center gap-1.5 px-2\">\n              {[...Array(totalPages)].map((_, i) => {\n                const pageNum = i + 1;\n                if (\n                  totalPages > 5 &&\n                  pageNum > 2 &&\n                  pageNum < totalPages - 1 &&\n                  Math.abs(pageNum - currentPage) > 1\n                ) {\n                  if (pageNum === 3 || pageNum === totalPages - 2)\n                    return (\n                      <span key={pageNum} className=\"px-1 opacity-50\">\n                        …\n                      </span>\n                    );\n                  return null;\n                }\n                return (\n                  <button\n                    key={pageNum}\n                    onClick={() => setCurrentPage(pageNum)}\n                    className={cn(\n                      'flex h-7 w-7 items-center justify-center rounded-lg text-[11px] font-bold transition-all',\n                      currentPage === pageNum\n                        ? 'border border-orange-200 bg-orange-50 text-orange-600 shadow-sm dark:border-[#3a1f14] dark:bg-[#2a160e] dark:text-[#f97316]'\n                        : 'text-zinc-500 hover:bg-zinc-100 dark:text-[#6b6b6b] dark:hover:bg-white/5',\n                    )}\n                  >\n                    {pageNum}\n                  </button>\n                );\n              })}\n            </div>\n            <button\n              disabled={currentPage === totalPages || totalPages === 0}\n              onClick={() => setCurrentPage((prev) => prev + 1)}\n              className=\"rounded-lg p-1.5 transition-all hover:bg-zinc-100 disabled:opacity-30 dark:hover:bg-white/5\"\n            >\n              <ChevronRight size={16} />\n            </button>\n          </div>\n        </footer>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "integration-card-base",
      "type": "registry:component",
      "title": "Integration Card (base)",
      "description": "Theme-ready base variant of Show connected services with status, actions, and simple integration management..",
      "dependencies": [
        "framer-motion",
        "lucide-react",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/integration-card.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n  Search,\n  ChevronDown,\n  ChevronLeft,\n  ChevronRight,\n  Check,\n} from 'lucide-react';\nimport { IoClose } from 'react-icons/io5';\nimport { cn } from '@/lib/utils';\n\n/* ---------- Types ---------- */\nexport interface IntegrationItem {\n  id: string;\n  name: string;\n  entities: string;\n  description: string;\n  tags: string[];\n  triggers: number;\n  actions: number;\n  available: boolean;\n  icon: React.ReactNode;\n}\n\ninterface IntegrationsCardProps {\n  items: IntegrationItem[];\n  title: string;\n}\n\n/* ---------- Sub-components ---------- */\nconst FilterButton: React.FC<{\n  label: string;\n  active?: boolean;\n  onClick: () => void;\n  selected?: string;\n}> = ({ label, active, onClick, selected }) => (\n  <button\n    onClick={onClick}\n    className={cn(\n      'relative flex shrink-0 items-center gap-2 rounded-full border px-3 py-1.5 text-[11px] transition active:scale-95',\n      active\n        ? 'bg-primary/10 border-primary text-primary'\n        : 'bg-muted/60 border-border text-muted-foreground hover:text-foreground hover:bg-muted',\n    )}\n  >\n    {selected || label}\n    <ChevronDown\n      size={12}\n      className={cn(\n        'transition-transform duration-300',\n        active ? 'rotate-180' : '',\n      )}\n    />\n  </button>\n);\n\nconst IntegrationCard: React.FC<{ item: IntegrationItem }> = ({ item }) => {\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, y: 6 }}\n      animate={{ opacity: 1, y: 0 }}\n      className=\"theme-injected bg-card text-foreground border-border hover:bg-accent/40 flex gap-4 border-b px-5 py-4 transition-colors last:rounded-b-lg last:border-b\"\n    >\n      {/* Icon */}\n      <div className=\"bg-muted/50 border-border flex h-10 w-10 shrink-0 items-center justify-center rounded-md border\">\n        {item.icon}\n      </div>\n\n      {/* Content */}\n      <div className=\"min-w-0 flex-1\">\n        <div className=\"flex items-start justify-between gap-2\">\n          <div className=\"truncate\">\n            <h3 className=\"text-foreground truncate text-[14px] font-medium\">\n              {item.name}\n            </h3>\n            <p className=\"text-muted-foreground mt-1 truncate text-[10px] tracking-wider uppercase\">\n              {item.entities}\n            </p>\n          </div>\n\n          {item.available && (\n            <span className=\"bg-primary/10 text-primary border-primary/30 shrink-0 rounded-md border px-2 py-0.5 text-[9px] font-bold\">\n              AVAILABLE\n            </span>\n          )}\n        </div>\n\n        <p className=\"text-muted-foreground mt-2 max-w-full text-[12px] leading-relaxed\">\n          {item.description}\n        </p>\n\n        <div className=\"mt-3 flex flex-col justify-between gap-2 sm:flex-row sm:items-center\">\n          <div className=\"flex flex-wrap gap-2\">\n            {item.tags.map((tag) => (\n              <span\n                key={tag}\n                className=\"bg-muted/60 border-border text-muted-foreground rounded-md border px-2 py-0.5 text-[10px]\"\n              >\n                {tag}\n              </span>\n            ))}\n          </div>\n\n          <span className=\"text-muted-foreground text-[10px] whitespace-nowrap\">\n            {item.triggers} TRIGGERS / {item.actions} ACTIONS\n          </span>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\n/* ---------- Main ---------- */\nexport const IntegrationsCard: React.FC<IntegrationsCardProps> = ({\n  items,\n  title,\n}) => {\n  const [activePopover, setActivePopover] = useState<\n    'type' | 'useCase' | 'more' | null\n  >(null);\n  const [selectedType, setSelectedType] = useState('All types');\n  const [selectedUseCase, setSelectedUseCase] = useState('All use cases');\n  const [searchQuery, setSearchQuery] = useState('');\n  const [currentPage, setCurrentPage] = useState(1);\n  const itemsPerPage = 6;\n\n  const popoverRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        popoverRef.current &&\n        !popoverRef.current.contains(event.target as Node)\n      ) {\n        setActivePopover(null);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  // Filter Logic\n  const filteredItems = items.filter((item) => {\n    const matchesSearch =\n      item.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n      item.description.toLowerCase().includes(searchQuery.toLowerCase());\n    const matchesType =\n      selectedType === 'All types' || item.tags.includes(selectedType);\n    const matchesUseCase =\n      selectedUseCase === 'All use cases' ||\n      item.entities.includes(selectedUseCase.toUpperCase());\n    return matchesSearch && matchesType && matchesUseCase;\n  });\n\n  // Pagination Logic\n  const totalPages = Math.ceil(filteredItems.length / itemsPerPage);\n  const paginatedItems = filteredItems.slice(\n    (currentPage - 1) * itemsPerPage,\n    currentPage * itemsPerPage,\n  );\n\n  const typeOptions = ['All types', 'Marketplace', 'Internal', 'Third-party'];\n  const useCaseOptions = [\n    'All use cases',\n    'Productivity',\n    'Marketing',\n    'Development',\n    'Sales',\n  ];\n\n  return (\n    <div className=\"theme-injected text-foreground flex w-full flex-col items-center px-4 py-8\">\n      <div className=\"bg-card text-card-foreground border-border w-full max-w-145 overflow-hidden rounded-2xl border shadow-2xl transition-all duration-300\">\n        {/* Header */}\n        <header className=\"bg-card text-foreground border-border flex items-center justify-between border-b px-5 py-4\">\n          <h2 className=\"text-foreground text-[14px] font-semibold tracking-tight\">\n            {title}\n          </h2>\n          <button\n            title=\"close\"\n            className=\"text-muted-foreground hover:text-foreground hover:bg-muted flex h-8 w-8 items-center justify-center rounded-full transition-all active:scale-90\"\n          >\n            <IoClose size={18} />\n          </button>\n        </header>\n\n        {/* Filters & Search */}\n        <div className=\"bg-muted/30 border-border relative flex flex-col items-stretch gap-3 border-b px-5 py-4 md:flex-row md:items-center\">\n          <div className=\"no-scrollbar flex items-center gap-2 overflow-x-auto pb-1 md:pb-0\">\n            <FilterButton\n              label=\"All types\"\n              selected={selectedType !== 'All types' ? selectedType : undefined}\n              active={activePopover === 'type'}\n              onClick={() =>\n                setActivePopover(activePopover === 'type' ? null : 'type')\n              }\n            />\n            <FilterButton\n              label=\"All use cases\"\n              selected={\n                selectedUseCase !== 'All use cases'\n                  ? selectedUseCase\n                  : undefined\n              }\n              active={activePopover === 'useCase'}\n              onClick={() =>\n                setActivePopover(activePopover === 'useCase' ? null : 'useCase')\n              }\n            />\n            <FilterButton\n              label=\"More\"\n              active={activePopover === 'more'}\n              onClick={() =>\n                setActivePopover(activePopover === 'more' ? null : 'more')\n              }\n            />\n          </div>\n\n          <div className=\"hidden flex-1 md:block\" />\n\n          <div className=\"group relative w-full md:w-56\">\n            <Search\n              size={14}\n              className=\"text-muted-foreground group-focus-within:text-primary absolute top-1/2 left-3 -translate-y-1/2 transition-colors\"\n            />\n            <input\n              value={searchQuery}\n              onChange={(e) => {\n                setSearchQuery(e.target.value);\n                setCurrentPage(1);\n              }}\n              placeholder=\"Search for an app...\"\n              className=\"bg-background border-border text-foreground placeholder:text-muted-foreground focus:ring-primary/20 focus:border-primary w-full rounded-full border py-1.5 pr-4 pl-9 text-[12px] transition-all focus:ring-2 focus:outline-none\"\n            />\n          </div>\n\n          {/* Global Popover (Anchored to filter area but absolute to container) */}\n          <AnimatePresence>\n            {activePopover && (\n              <motion.div\n                ref={popoverRef}\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: 4 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                className=\"bg-card border-border absolute top-full right-5 left-5 z-50 w-auto overflow-hidden rounded-xl border p-1.5 shadow-2xl md:right-auto md:left-5 md:min-w-48\"\n              >\n                {activePopover === 'type' &&\n                  typeOptions.map((opt) => (\n                    <button\n                      key={opt}\n                      onClick={() => {\n                        setSelectedType(opt);\n                        setActivePopover(null);\n                        setCurrentPage(1);\n                      }}\n                      className=\"hover:bg-muted flex w-full items-center justify-between gap-3 rounded-lg px-3 py-2 text-left text-[12px] font-medium transition-colors\"\n                    >\n                      {opt}\n                      {selectedType === opt && (\n                        <Check size={12} className=\"text-primary\" />\n                      )}\n                    </button>\n                  ))}\n                {activePopover === 'useCase' &&\n                  useCaseOptions.map((opt) => (\n                    <button\n                      key={opt}\n                      onClick={() => {\n                        setSelectedUseCase(opt);\n                        setActivePopover(null);\n                        setCurrentPage(1);\n                      }}\n                      className=\"hover:bg-muted flex w-full items-center justify-between gap-3 rounded-lg px-3 py-2 text-left text-[12px] font-medium transition-colors\"\n                    >\n                      {opt}\n                      {selectedUseCase === opt && (\n                        <Check size={12} className=\"text-primary\" />\n                      )}\n                    </button>\n                  ))}\n                {activePopover === 'more' && (\n                  <div className=\"space-y-1 p-2\">\n                    <p className=\"text-muted-foreground px-2 pb-2 text-[10px] font-bold tracking-wider uppercase\">\n                      Advanced\n                    </p>\n                    <button className=\"hover:bg-muted flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[12px] transition-colors\">\n                      Sort by Name\n                    </button>\n                    <button className=\"hover:bg-muted flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[12px] transition-colors\">\n                      Sort by Recent\n                    </button>\n                    <button className=\"hover:bg-muted text-destructive flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[12px] font-semibold transition-colors\">\n                      Reset Filters\n                    </button>\n                  </div>\n                )}\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* List */}\n        <div className=\"bg-card text-card-foreground no-scrollbar max-h-[500px] overflow-y-auto\">\n          <AnimatePresence mode=\"popLayout\">\n            {paginatedItems.map((item) => (\n              <IntegrationCard key={item.id} item={item} />\n            ))}\n            {paginatedItems.length === 0 && (\n              <motion.div\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                className=\"space-y-3 py-20 text-center\"\n              >\n                <div className=\"bg-muted mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full\">\n                  <Search size={20} className=\"text-muted-foreground\" />\n                </div>\n                <p className=\"text-foreground text-sm font-medium\">\n                  No integrations found\n                </p>\n                <p className=\"text-muted-foreground text-xs\">\n                  Try adjusting your search or filters\n                </p>\n                <button\n                  onClick={() => {\n                    setSearchQuery('');\n                    setSelectedType('All types');\n                    setSelectedUseCase('All use cases');\n                  }}\n                  className=\"text-primary text-xs font-semibold hover:underline\"\n                >\n                  Clear all filters\n                </button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* Footer */}\n        <footer className=\"bg-muted/20 border-border text-muted-foreground flex flex-col items-center justify-between gap-4 border-t px-6 py-4 text-[11px] sm:flex-row\">\n          <span className=\"font-medium\">\n            {filteredItems.length > 0\n              ? (currentPage - 1) * itemsPerPage + 1\n              : 0}{' '}\n            – {Math.min(currentPage * itemsPerPage, filteredItems.length)} of{' '}\n            {filteredItems.length} apps\n          </span>\n\n          <div className=\"flex items-center gap-1\">\n            <button\n              disabled={currentPage === 1}\n              onClick={() => setCurrentPage((prev) => prev - 1)}\n              className=\"hover:bg-muted rounded-lg p-1.5 transition-colors disabled:opacity-30 disabled:hover:bg-transparent\"\n            >\n              <ChevronLeft size={16} />\n            </button>\n            <div className=\"flex items-center gap-1 px-2\">\n              {[...Array(totalPages)].map((_, i) => {\n                const pageNum = i + 1;\n                // Simple pagination logic for brevity\n                if (\n                  totalPages > 5 &&\n                  pageNum > 2 &&\n                  pageNum < totalPages - 1 &&\n                  Math.abs(pageNum - currentPage) > 1\n                ) {\n                  if (pageNum === 3 || pageNum === totalPages - 2)\n                    return (\n                      <span key={pageNum} className=\"px-1\">\n                        …\n                      </span>\n                    );\n                  return null;\n                }\n                return (\n                  <button\n                    key={pageNum}\n                    onClick={() => setCurrentPage(pageNum)}\n                    className={cn(\n                      'flex h-7 w-7 items-center justify-center rounded-lg text-[11px] font-bold transition-all',\n                      currentPage === pageNum\n                        ? 'bg-primary text-primary-foreground shadow-sm'\n                        : 'hover:bg-muted text-muted-foreground',\n                    )}\n                  >\n                    {pageNum}\n                  </button>\n                );\n              })}\n            </div>\n            <button\n              disabled={currentPage === totalPages || totalPages === 0}\n              onClick={() => setCurrentPage((prev) => prev + 1)}\n              className=\"hover:bg-muted rounded-lg p-1.5 transition-colors disabled:opacity-30 disabled:hover:bg-transparent\"\n            >\n              <ChevronRight size={16} />\n            </button>\n          </div>\n        </footer>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "invite-disclosure",
      "type": "registry:component",
      "title": "Invite Disclosure",
      "description": "A sleek, morphing disclosure component for managing invitations with interactive badge counts and spring animations.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/invite-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState, type ReactNode } from 'react';\nimport {\n  AnimatePresence,\n  motion,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { MdOutlineClose } from 'react-icons/md';\nimport { FaFolderClosed } from 'react-icons/fa6';\nimport { LuDraftingCompass } from 'react-icons/lu';\nimport { BiSolidZap } from 'react-icons/bi';\nimport { PiScrewdriverBold } from 'react-icons/pi';\n\nexport interface InviteItem {\n  id: string;\n  title: string;\n  description: string;\n  icon: ReactNode;\n  hasUpdate?: boolean;\n}\n\ninterface InviteDisclosureProps {\n  title?: string;\n  badgeCount?: number;\n  invites?: InviteItem[];\n}\n\nconst DEFAULT_INVITES: InviteItem[] = [\n  {\n    id: '1',\n    title: 'Sonora Repository',\n    description: 'Contribute to the code repository',\n    icon: <FaFolderClosed className=\"h-4 w-4 text-[#868686]\" />,\n    hasUpdate: true,\n  },\n  {\n    id: '2',\n    title: 'Design Tokens',\n    description: 'Collaborate on design tokens',\n    icon: <LuDraftingCompass className=\"h-5 w-5 text-[#868686]\" />,\n    hasUpdate: true,\n  },\n  {\n    id: '3',\n    title: 'Motion Kit',\n    description: 'Contribute to motion components',\n    icon: <BiSolidZap className=\"h-5 w-5 text-[#868686]\" />,\n  },\n  {\n    id: '4',\n    title: 'Build Tools',\n    description: 'Explore build tools & pipeline',\n    icon: <PiScrewdriverBold className=\"h-5 w-5 text-[#868686]\" />,\n  },\n];\n\nconst springTransition: Transition = {\n  type: 'spring',\n  stiffness: 800,\n  damping: 80,\n  mass: 5,\n};\n\nconst collapsedTransition: Transition = {\n  type: 'spring',\n  stiffness: 800,\n  damping: 80,\n  mass: 4,\n};\n\nexport const InviteDisclosure: React.FC<InviteDisclosureProps> = ({\n  title = 'Invites',\n  badgeCount = 2,\n  invites = DEFAULT_INVITES,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <div className=\"flex h-[500px] w-fit items-center justify-center\">\n      <MotionConfig transition={isOpen ? springTransition : collapsedTransition}>\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {!isOpen ? (\n            <motion.button\n              layoutId=\"disclosure\"\n              onClick={() => setIsOpen(true)}\n              style={{\n                borderRadius: 32,\n              }}\n              className=\"flex cursor-pointer items-center gap-3 bg-[#F4F4F4] px-6 py-4 transition-colors duration-200 hover:bg-[#eae8e8] dark:bg-neutral-900 dark:hover:bg-neutral-800\"\n            >\n              <motion.span\n                layoutId=\"title\"\n                className=\"text-xl font-semibold text-[#262626] dark:text-neutral-100\"\n              >\n                {title}\n              </motion.span>\n              <motion.div\n                layoutId=\"badge\"\n                className=\"flex h-7 w-7 items-center justify-center rounded-full bg-[#262626] text-[14px] font-bold text-white dark:bg-neutral-100 dark:text-neutral-900\"\n              >\n                {badgeCount}\n              </motion.div>\n            </motion.button>\n          ) : (\n            <motion.div\n              layoutId=\"disclosure\"\n              className=\"w-xs bg-[#F4F4F4] p-2 sm:w-[360px] dark:bg-neutral-900\"\n              style={{\n                borderRadius: 24,\n              }}\n            >\n              <div className=\"flex items-center justify-between px-6 pt-4 pb-6\">\n                <motion.h2\n                  layoutId=\"title\"\n                  className=\"text-2xl font-bold text-[#262626] dark:text-neutral-100\"\n                >\n                  {title}\n                </motion.h2>\n                <motion.button\n                  layoutId=\"badge\"\n                  title=\"close\"\n                  onClick={() => setIsOpen(false)}\n                  className=\"flex h-8 w-8 items-center justify-center rounded-full bg-[#fefefe] transition-colors duration-200 hover:bg-neutral-200 dark:bg-neutral-800 dark:hover:bg-neutral-700\"\n                >\n                  <MdOutlineClose className=\"h-5 w-5 text-[#676767] dark:text-neutral-400\" />\n                </motion.button>\n              </div>\n\n              <div className=\"space-y-3 px-2 pb-4\">\n                {invites.map((invite, index) => (\n                  <motion.div\n                    key={invite.id}\n                    initial={{ opacity: 0, y: 10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    whileHover={{ scale: 1.02 }}\n                    transition={{\n                      delay: index * 0.04 + 0.1,\n                      type: 'spring',\n                      stiffness: 260,\n                      damping: 20,\n                    }}\n                    className=\"group flex cursor-pointer items-center gap-4 rounded-2xl bg-[#FEFEFE] px-3 py-3 transition-all hover:bg-[#FEFEFE]/70 hover:shadow-sm dark:bg-neutral-800 dark:hover:bg-neutral-800/70\"\n                  >\n                    <div className=\"relative\">\n                      <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-[#F5F5F5] dark:bg-neutral-700\">\n                        {invite.icon && React.isValidElement(invite.icon)\n                          ? React.cloneElement(\n                              invite.icon as React.ReactElement<any>,\n                              {\n                                className: `${(invite.icon as React.ReactElement<any>).props.className} dark:text-neutral-300`,\n                              },\n                            )\n                          : invite.icon}\n                      </div>\n                      {invite.hasUpdate && (\n                        <div className=\"absolute top-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-white bg-[#262626] dark:border-neutral-800 dark:bg-neutral-100\" />\n                      )}\n                    </div>\n\n                    <div className=\"flex-1\">\n                      <h3 className=\"text-[15px] leading-tight font-bold text-[#262626] dark:text-neutral-100\">\n                        {invite.title}\n                      </h3>\n                      <p className=\"text-sm font-medium text-[#9B9B9B] dark:text-neutral-500\">\n                        {invite.description}\n                      </p>\n                    </div>\n                  </motion.div>\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "invite-disclosure-base",
      "type": "registry:component",
      "title": "Invite Disclosure (base)",
      "description": "Theme-ready base variant of A sleek, morphing disclosure component for managing invitations with interactive badge counts and spring animations..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/invite-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState, type ReactNode } from 'react';\nimport {\nAnimatePresence,\nmotion,\nMotionConfig,\ntype Transition,\n} from 'motion/react';\nimport { MdOutlineClose } from 'react-icons/md';\nimport { FaFolderClosed } from 'react-icons/fa6';\nimport { LuDraftingCompass } from 'react-icons/lu';\nimport { BiSolidZap } from 'react-icons/bi';\nimport { PiScrewdriverBold } from 'react-icons/pi';\n\nexport interface InviteItem {\nid: string;\ntitle: string;\ndescription: string;\nicon: ReactNode;\nhasUpdate?: boolean;\n}\n\ninterface InviteDisclosureProps {\ntitle?: string;\nbadgeCount?: number;\ninvites?: InviteItem[];\n}\n\nconst DEFAULT_INVITES: InviteItem[] = [\n{\n  id: '1',\n  title: 'Sonora Repository',\n  description: 'Contribute to the code repository',\n  icon: <FaFolderClosed className=\"h-4 w-4 text-muted-foreground\" />,\n  hasUpdate: true,\n},\n{\n  id: '2',\n  title: 'Design Tokens',\n  description: 'Collaborate on design tokens',\n  icon: <LuDraftingCompass className=\"h-5 w-5 text-muted-foreground\" />,\n  hasUpdate: true,\n},\n{\n  id: '3',\n  title: 'Motion Kit',\n  description: 'Contribute to motion components',\n  icon: <BiSolidZap className=\"h-5 w-5 text-muted-foreground\" />,\n},\n{\n  id: '4',\n  title: 'Build Tools',\n  description: 'Explore build tools & pipeline',\n  icon: <PiScrewdriverBold className=\"h-5 w-5 text-muted-foreground\" />,\n},\n];\n\nconst springTransition: Transition = {\ntype: 'spring',\nstiffness: 800,\ndamping: 80,\nmass: 5,\n};\n\nconst collapsedTransition: Transition = {\ntype: 'spring',\nstiffness: 800,\ndamping: 80,\nmass: 4,\n};\n\nexport const InviteDisclosure: React.FC<InviteDisclosureProps> = ({\ntitle = 'Invites',\nbadgeCount = 2,\ninvites = DEFAULT_INVITES,\n}) => {\nconst [isOpen, setIsOpen] = useState(false);\n\nreturn (\n  <div\n    className=\"theme-injected flex min-h-full w-fit items-center justify-center bg-transparent text-foreground font-sans\"\n    style={{ fontFamily: 'var(--font-sans)' }}\n  >\n    <MotionConfig transition={isOpen ? springTransition : collapsedTransition}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {!isOpen ? (\n          <motion.button\n            layoutId=\"disclosure\"\n            onClick={() => setIsOpen(true)}\n            style={{\n              borderRadius: 32,\n            }}\n            className=\"flex cursor-pointer items-center gap-3 rounded-3xl border border-border bg-card px-6 py-4 text-foreground transition-colors duration-200 hover:bg-accent/40\"\n          >\n            <motion.span\n              layoutId=\"title\"\n              className=\"text-xl font-semibold text-foreground\"\n            >\n              {title}\n            </motion.span>\n            <motion.div\n              layoutId=\"badge\"\n              className=\"flex h-7 w-7 items-center justify-center rounded-full bg-foreground text-sm font-bold text-background\"\n              style={{ fontFamily: 'var(--font-mono)' }}\n            >\n              {badgeCount}\n            </motion.div>\n          </motion.button>\n        ) : (\n          <motion.div\n            layoutId=\"disclosure\"\n            style={{\n              borderRadius: 24,\n            }}\n            className=\"w-80 sm:w-96 rounded-2xl border border-border bg-card p-2 text-card-foreground\"\n          >\n            <div className=\"flex items-center justify-between px-6 pt-4 pb-6\">\n              <motion.h2\n                layoutId=\"title\"\n                className=\"text-2xl font-bold text-foreground\"\n              >\n                {title}\n              </motion.h2>\n              <motion.button\n                layoutId=\"badge\"\n                title=\"close\"\n                onClick={() => setIsOpen(false)}\n                className=\"flex h-8 w-8 items-center justify-center rounded-full bg-background text-muted-foreground transition-colors duration-200 hover:bg-accent\"\n              >\n                <MdOutlineClose className=\"h-5 w-5\" />\n              </motion.button>\n            </div>\n\n            <div className=\"space-y-3 px-2 pb-4\">\n              {invites.map((invite, index) => (\n                <motion.div\n                  key={invite.id}\n                  initial={{ opacity: 0, y: 10 }}\n                  animate={{ opacity: 1, y: 0 }}\n                  whileHover={{ scale: 1.02 }}\n                  transition={{\n                    delay: index * 0.04 + 0.1,\n                    type: 'spring',\n                    stiffness: 260,\n                    damping: 20,\n                  }}\n                  className=\"group flex cursor-pointer items-center gap-4 rounded-xl border border-border bg-background px-3 py-3 transition-all hover:bg-accent/40 hover:shadow-sm\"\n                >\n                  <div className=\"relative\">\n                    <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-muted/60\">\n                      {invite.icon && React.isValidElement(invite.icon)\n                        ? React.cloneElement(\n                            invite.icon as React.ReactElement<any>,\n                            {\n                              className: `${(invite.icon as React.ReactElement<any>).props.className} text-muted-foreground`,\n                            },\n                          )\n                        : invite.icon}\n                    </div>\n                    {invite.hasUpdate && (\n                      <div className=\"absolute top-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-foreground\" />\n                    )}\n                  </div>\n\n                  <div className=\"flex-1\">\n                    <h3 className=\"text-base leading-tight font-bold text-foreground\">\n                      {invite.title}\n                    </h3>\n                    <p className=\"text-sm font-medium text-muted-foreground\">\n                      {invite.description}\n                    </p>\n                  </div>\n                </motion.div>\n              ))}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </MotionConfig>\n  </div>\n);\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "journal-navigation",
      "type": "registry:component",
      "title": "Journal Navigation",
      "description": "Organized journal navigation enabling quick section switching with smooth animated transitions.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/journal-navigation.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nexport interface JournalEntry {\n  id: string | number;\n  day: number;\n  month: string;\n  year?: number;\n  content: React.ReactNode;\n}\n\ninterface JournalNavigationProps {\n  entries: JournalEntry[];\n  initialIndex?: number;\n  onEntryChange?: (entry: JournalEntry) => void;\n}\n\nexport const JournalNavigation: React.FC<JournalNavigationProps> = ({\n  entries,\n  initialIndex = 0,\n  onEntryChange,\n}) => {\n  const [currentIndex, setCurrentIndex] = useState(initialIndex);\n  const [direction, setDirection] = useState(0);\n\n  const directionRef = useRef(direction);\n  useEffect(() => {\n    directionRef.current = direction;\n  }, [direction]);\n\n  const handleNext = () => {\n    if (currentIndex < entries.length - 1) {\n      setDirection(1);\n      setCurrentIndex((prev) => prev + 1);\n    }\n  };\n\n  const handlePrev = () => {\n    if (currentIndex > 0) {\n      setDirection(-1);\n      setCurrentIndex((prev) => prev - 1);\n    }\n  };\n\n  useEffect(() => {\n    if (onEntryChange) {\n      onEntryChange(entries[currentIndex]);\n    }\n  }, [currentIndex, entries, onEntryChange]);\n\n  const currentEntry = entries[currentIndex];\n\n  const contentVariants = {\n    enter: (direction: number) => ({\n      y: direction > 0 ? 3 : -3,\n      opacity: 0,\n    }),\n    center: { y: 0, opacity: 1 },\n    exit: (direction: number) => ({\n      y: direction > 0 ? 3 : -3,\n      opacity: 0,\n    }),\n  };\n\n  const charVariants = {\n    enter: () => ({\n      // Wait to spawn until old leaves? The user wants exactly:\n      // \"old div content vanshies and as soon as one char vanish new content appear\"\n      // They just want a beautiful overlapping displacement\n      y: directionRef.current > 0 ? 3 : -3,\n      opacity: 0,\n      filter: 'blur(2px)',\n    }),\n    center: (globalIndex: number) => ({\n      y: 0,\n      opacity: 1,\n      filter: 'blur(0px)',\n      transition: {\n        type: 'spring' as const,\n        bounce: 0.1,\n        duration: 0.3,\n        delay: globalIndex * 0.01,\n      },\n    }),\n    exit: (globalIndex: number) => ({\n      y: directionRef.current > 0 ? 3 : -3,\n      opacity: 0,\n      filter: 'blur(2px)',\n      transition: {\n        type: 'spring' as const,\n        bounce: 0.1,\n        duration: 0.3,\n        delay: globalIndex * 0.01, // perfectly match the enter speed to spin at same time\n      },\n    }),\n  };\n\n  const ITEM_HEIGHT = 45; // 37px button height (h-9.25) + 8px gap (gap-2)\n\n  return (\n    <div className=\"flex min-h-full w-full flex-col items-center justify-center bg-transparent p-6 transition-colors duration-500\">\n      <div className=\"relative flex h-85 w-full max-w-90 overflow-hidden rounded-[32px] border border-[#e5e4de]/50 bg-[#F3EFE9] shadow-sm transition-colors duration-300 select-none dark:border-neutral-800 dark:bg-neutral-900\">\n        <div className=\"relative z-10 m-1 flex w-13.5 flex-col items-center justify-center overflow-hidden rounded-full border border-[#e5e4de]/50 bg-[#FEFEFE] transition-colors duration-300 dark:border-neutral-700 dark:bg-neutral-800\">\n          <div className=\"pointer-events-none absolute top-0 left-0 z-20 h-20 w-full bg-linear-to-b from-[#FEFEFE] via-[#FEFEFE]/80 to-transparent backdrop-blur-[0.5px] dark:from-neutral-800 dark:via-neutral-800/80 dark:to-transparent\" />\n\n          <div\n            className=\"absolute top-1/2 left-0 z-10 w-full\"\n            style={{ marginTop: '-18.5px' }}\n          >\n            <motion.div\n              drag=\"y\"\n              dragConstraints={{\n                top: -((entries.length - 1) * ITEM_HEIGHT),\n                bottom: 0,\n              }}\n              onDragEnd={(_, info) => {\n                const yOffset = info.offset.y;\n                const velocity = info.velocity.y;\n                const absOffset = Math.abs(yOffset);\n\n                // Need to move at least 15px or flick fast to change index\n                let itemsToMove = Math.floor((absOffset + 15) / ITEM_HEIGHT);\n\n                if (Math.abs(velocity) > 200 && itemsToMove === 0) {\n                  itemsToMove = 1;\n                }\n\n                const directionMultiplier = yOffset < 0 ? 1 : -1;\n                let newIndex = currentIndex + directionMultiplier * itemsToMove;\n\n                if (newIndex < 0) newIndex = 0;\n                if (newIndex >= entries.length) newIndex = entries.length - 1;\n\n                if (newIndex > currentIndex) setDirection(1);\n                else if (newIndex < currentIndex) setDirection(-1);\n\n                if (newIndex !== currentIndex) {\n                  setCurrentIndex(newIndex);\n                }\n              }}\n              animate={{ y: -(currentIndex * ITEM_HEIGHT) }}\n              transition={{\n                type: 'spring',\n                stiffness: 260,\n                damping: 32,\n                mass: 0.6,\n              }}\n              className=\"flex cursor-grab flex-col items-center gap-2 active:cursor-grabbing\"\n            >\n              {entries.map((entry, index) => {\n                const isActive = index === currentIndex;\n                return (\n                  <motion.button\n                    key={entry.id}\n                    onClick={() => {\n                      if (index > currentIndex) setDirection(1);\n                      else if (index < currentIndex) setDirection(-1);\n                      if (index !== currentIndex) {\n                        setCurrentIndex(index);\n                      }\n                    }}\n                    animate={{ scale: isActive ? 1.2 : 1 }}\n                    className={`flex h-9.25 w-9.25 shrink-0 items-center justify-center rounded-full text-[16px] font-bold transition-colors ${\n                      isActive\n                        ? 'bg-[#F0ECE6] text-[#1C1C1E] dark:bg-neutral-700 dark:text-white'\n                        : 'text-[#B0AFB8] hover:bg-[#F0ECE6] dark:text-neutral-600 dark:hover:text-neutral-400'\n                    }`}\n                  >\n                    {entry.day.toString().padStart(2, '0')}\n                  </motion.button>\n                );\n              })}\n            </motion.div>\n          </div>\n\n          <div className=\"pointer-events-none absolute bottom-0 left-0 z-20 h-20 w-full bg-linear-to-t from-[#FEFEFE] via-[#FEFEFE]/80 to-transparent backdrop-blur-[0.5px] dark:from-neutral-800 dark:via-neutral-800/80 dark:to-transparent\" />\n        </div>\n\n        <div className=\"flex flex-1 flex-col p-4\">\n          <div className=\"mb-6 flex items-center justify-between\">\n            <div className=\"relative flex items-center overflow-hidden text-lg font-medium tracking-tight text-[#918D87] tabular-nums dark:text-neutral-400\">\n              <AnimatePresence mode=\"popLayout\" custom={direction}>\n                <motion.span\n                  key={currentEntry.month}\n                  custom={direction}\n                  variants={contentVariants}\n                  initial=\"enter\"\n                  animate=\"center\"\n                  exit=\"exit\"\n                  transition={{ duration: 0.3, ease: 'easeOut' }}\n                  className=\"mr-1 inline-block whitespace-nowrap\"\n                >\n                  {currentEntry.month}\n                </motion.span>\n              </AnimatePresence>\n              <div className=\"flex\">\n                {currentEntry.day\n                  .toString()\n                  .split('')\n                  .map((digit, i) => (\n                    <AnimatePresence\n                      mode=\"popLayout\"\n                      custom={direction}\n                      key={i}\n                    >\n                      <motion.span\n                        key={`${i}-${digit}`}\n                        custom={direction}\n                        variants={contentVariants}\n                        initial=\"enter\"\n                        animate=\"center\"\n                        exit=\"exit\"\n                        transition={{ duration: 0.3, ease: 'easeOut' }}\n                        className=\"inline-block\"\n                      >\n                        {digit}\n                      </motion.span>\n                    </AnimatePresence>\n                  ))}\n              </div>\n            </div>\n\n            <div className=\"flex gap-2\">\n              {[\n                {\n                  title: 'left',\n                  action: handlePrev,\n                  disabled: currentIndex === 0,\n                  icon: <ChevronLeft size={20} strokeWidth={2.5} />,\n                },\n                {\n                  title: 'right',\n                  action: handleNext,\n                  disabled: currentIndex === entries.length - 1,\n                  icon: <ChevronRight size={20} strokeWidth={2.5} />,\n                },\n              ].map((btn) => (\n                <button\n                  key={btn.title}\n                  title={btn.title}\n                  onClick={btn.action}\n                  disabled={btn.disabled}\n                  className=\"flex h-8 w-8 items-center justify-center rounded-full bg-[#Fefefe] text-[#B8B8B5] transition-colors hover:bg-[#Fefefe]/70 disabled:hover:bg-[#f2f1eb] dark:bg-neutral-800 dark:text-neutral-500 dark:hover:bg-neutral-700 dark:disabled:opacity-20\"\n                >\n                  {btn.icon}\n                </button>\n              ))}\n            </div>\n          </div>\n\n          <div className=\"flex flex-1 flex-col overflow-hidden\">\n            <div className=\"relative flex-1\">\n              <AnimatePresence>\n                <motion.div\n                  key={currentEntry.id + '-stagger'}\n                  variants={{\n                    enter: { opacity: 1 },\n                    center: { opacity: 1 },\n                    exit: { opacity: 1, transition: { duration: 1.5 } }, // hold parent alive\n                  }}\n                  initial=\"enter\"\n                  animate=\"center\"\n                  exit=\"exit\"\n                  className=\"absolute top-0 left-0 w-full text-[18px] leading-relaxed font-bold -tracking-wide text-[#292422] transition-colors dark:text-neutral-200\"\n                >\n                  {typeof currentEntry.content === 'string' ||\n                  Array.isArray(currentEntry.content) ? (\n                    <motion.div className=\"space-y-4\">\n                      {(Array.isArray(currentEntry.content)\n                        ? currentEntry.content\n                        : [currentEntry.content as string]\n                      ).map((paragraph, pIndex, arr) => {\n                        const priorLength = arr\n                          .slice(0, pIndex)\n                          .join('').length;\n                        const segments = paragraph.split(/(\\s+)/);\n\n                        return (\n                          <motion.p key={`p-${pIndex}-${currentEntry.id}`}>\n                            {segments.map((segment: string, index: number) => {\n                              if (/\\s+/.test(segment)) {\n                                return (\n                                  <motion.span\n                                    key={index}\n                                    className=\"whitespace-pre\"\n                                  >\n                                    {segment}\n                                  </motion.span>\n                                );\n                              }\n\n                              const previousLengths = segments\n                                .slice(0, index)\n                                .join('').length;\n\n                              return (\n                                <motion.span\n                                  key={`word-${index}-${currentEntry.id}`}\n                                  className=\"inline-block\"\n                                >\n                                  {Array.from(segment).map(\n                                    (char: string, charIndex: number) => {\n                                      const globalIndex =\n                                        priorLength +\n                                        previousLengths +\n                                        charIndex;\n\n                                      return (\n                                        <motion.span\n                                          key={`char-${charIndex}-${currentEntry.id}`}\n                                          custom={globalIndex}\n                                          variants={charVariants}\n                                          initial=\"enter\"\n                                          animate=\"center\"\n                                          exit=\"exit\"\n                                          className=\"relative inline-block\"\n                                        >\n                                          {char}\n                                        </motion.span>\n                                      );\n                                    },\n                                  )}\n                                </motion.span>\n                              );\n                            })}\n                          </motion.p>\n                        );\n                      })}\n                    </motion.div>\n                  ) : (\n                    currentEntry.content\n                  )}\n                </motion.div>\n              </AnimatePresence>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "journal-navigation-base",
      "type": "registry:component",
      "title": "Journal Navigation (base)",
      "description": "Theme-ready base variant of Organized journal navigation enabling quick section switching with smooth animated transitions..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/journal-navigation.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nexport interface JournalEntry {\n  id: string | number;\n  day: number;\n  month: string;\n  year?: number;\n  content: React.ReactNode;\n}\n\ninterface JournalNavigationProps {\n  entries: JournalEntry[];\n  initialIndex?: number;\n  onEntryChange?: (entry: JournalEntry) => void;\n}\n\nexport const JournalNavigation: React.FC<JournalNavigationProps> = ({\n  entries,\n  initialIndex = 0,\n  onEntryChange,\n}) => {\n  const [currentIndex, setCurrentIndex] = useState(initialIndex);\n  const [direction, setDirection] = useState(0);\n\n  const directionRef = useRef(direction);\n  useEffect(() => {\n    directionRef.current = direction;\n  }, [direction]);\n\n  const handleNext = () => {\n    if (currentIndex < entries.length - 1) {\n      setDirection(1);\n      setCurrentIndex((prev) => prev + 1);\n    }\n  };\n\n  const handlePrev = () => {\n    if (currentIndex > 0) {\n      setDirection(-1);\n      setCurrentIndex((prev) => prev - 1);\n    }\n  };\n\n  useEffect(() => {\n    if (onEntryChange) {\n      onEntryChange(entries[currentIndex]);\n    }\n  }, [currentIndex, entries, onEntryChange]);\n\n  const currentEntry = entries[currentIndex];\n\n  const contentVariants = {\n    enter: (direction: number) => ({\n      y: direction > 0 ? 3 : -3,\n      opacity: 0,\n    }),\n    center: { y: 0, opacity: 1 },\n    exit: (direction: number) => ({\n      y: direction > 0 ? 3 : -3,\n      opacity: 0,\n    }),\n  };\n\n  const charVariants = {\n    enter: () => ({\n      y: directionRef.current > 0 ? 3 : -3,\n      opacity: 0,\n      filter: 'blur(2px)',\n    }),\n    center: (globalIndex: number) => ({\n      y: 0,\n      opacity: 1,\n      filter: 'blur(0px)',\n      transition: {\n        type: 'spring' as const,\n        bounce: 0.1,\n        duration: 0.3,\n        delay: globalIndex * 0.01,\n      },\n    }),\n    exit: (globalIndex: number) => ({\n      y: directionRef.current > 0 ? 3 : -3,\n      opacity: 0,\n      filter: 'blur(2px)',\n      transition: {\n        type: 'spring' as const,\n        bounce: 0.1,\n        duration: 0.3,\n        delay: globalIndex * 0.01,\n      },\n    }),\n  };\n\n  const ITEM_HEIGHT = 45;\n\n  return (\n    <div className=\"theme-injected  flex min-h-full w-full flex-col items-center justify-center p-6 transition-colors duration-500\">\n      <div className=\"border-border bg-muted relative flex h-85 w-full max-w-90 overflow-hidden rounded-lg border shadow-sm transition-colors duration-300 select-none\">\n        <div className=\"border-border bg-background relative z-10 m-1 flex w-13.5 flex-col items-center justify-center overflow-hidden rounded-lg border transition-colors duration-300\">\n          <div className=\"from-background via-background/80 pointer-events-none absolute top-0 left-0 z-20 h-20 w-full bg-linear-to-b to-transparent backdrop-blur-[0.5px]\" />\n\n          <div\n            className=\"absolute top-1/2 left-0 z-10 w-full\"\n            style={{ marginTop: '-18.5px' }}\n          >\n            <motion.div\n              drag=\"y\"\n              dragConstraints={{\n                top: -((entries.length - 1) * ITEM_HEIGHT),\n                bottom: 0,\n              }}\n              onDragEnd={(_, info) => {\n                const yOffset = info.offset.y;\n                const velocity = info.velocity.y;\n                const absOffset = Math.abs(yOffset);\n\n                let itemsToMove = Math.floor((absOffset + 15) / ITEM_HEIGHT);\n\n                if (Math.abs(velocity) > 200 && itemsToMove === 0) {\n                  itemsToMove = 1;\n                }\n\n                const directionMultiplier = yOffset < 0 ? 1 : -1;\n                let newIndex = currentIndex + directionMultiplier * itemsToMove;\n\n                if (newIndex < 0) newIndex = 0;\n                if (newIndex >= entries.length) newIndex = entries.length - 1;\n\n                if (newIndex > currentIndex) setDirection(1);\n                else if (newIndex < currentIndex) setDirection(-1);\n\n                if (newIndex !== currentIndex) {\n                  setCurrentIndex(newIndex);\n                }\n              }}\n              animate={{ y: -(currentIndex * ITEM_HEIGHT) }}\n              transition={{\n                type: 'spring',\n                stiffness: 260,\n                damping: 32,\n                mass: 0.6,\n              }}\n              className=\"flex cursor-grab flex-col items-center gap-2 active:cursor-grabbing\"\n            >\n              {entries.map((entry, index) => {\n                const isActive = index === currentIndex;\n                return (\n                  <motion.button\n                    key={entry.id}\n                    onClick={() => {\n                      if (index > currentIndex) setDirection(1);\n                      else if (index < currentIndex) setDirection(-1);\n                      if (index !== currentIndex) {\n                        setCurrentIndex(index);\n                      }\n                    }}\n                    animate={{ scale: isActive ? 1.2 : 1 }}\n                    className={`flex h-9.25 w-9.25 shrink-0 items-center justify-center rounded-lg text-[16px] font-bold transition-colors ${\n                      isActive\n                        ? 'bg-accent text-accent-foreground'\n                        : 'text-muted-foreground hover:bg-accent'\n                    }`}\n                  >\n                    {entry.day.toString().padStart(2, '0')}\n                  </motion.button>\n                );\n              })}\n            </motion.div>\n          </div>\n\n          <div className=\"from-background via-background/80 pointer-events-none absolute bottom-0 left-0 z-20 h-20 w-full bg-linear-to-t to-transparent backdrop-blur-[0.5px]\" />\n        </div>\n\n        <div className=\"flex flex-1 flex-col p-4\">\n          <div className=\"mb-6 flex items-center justify-between\">\n            <div className=\"text-muted-foreground relative flex items-center overflow-hidden text-lg font-medium tracking-tight tabular-nums\">\n              <AnimatePresence mode=\"popLayout\" custom={direction}>\n                <motion.span\n                  key={currentEntry.month}\n                  custom={direction}\n                  variants={contentVariants}\n                  initial=\"enter\"\n                  animate=\"center\"\n                  exit=\"exit\"\n                  transition={{ duration: 0.3, ease: 'easeOut' }}\n                  className=\"mr-1 inline-block whitespace-nowrap\"\n                >\n                  {currentEntry.month}\n                </motion.span>\n              </AnimatePresence>\n              <div className=\"flex\">\n                {currentEntry.day\n                  .toString()\n                  .split('')\n                  .map((digit, i) => (\n                    <AnimatePresence\n                      mode=\"popLayout\"\n                      custom={direction}\n                      key={i}\n                    >\n                      <motion.span\n                        key={`${i}-${digit}`}\n                        custom={direction}\n                        variants={contentVariants}\n                        initial=\"enter\"\n                        animate=\"center\"\n                        exit=\"exit\"\n                        transition={{ duration: 0.3, ease: 'easeOut' }}\n                        className=\"inline-block\"\n                      >\n                        {digit}\n                      </motion.span>\n                    </AnimatePresence>\n                  ))}\n              </div>\n            </div>\n\n            <div className=\"flex gap-2\">\n              {[\n                {\n                  title: 'left',\n                  action: handlePrev,\n                  disabled: currentIndex === 0,\n                  icon: <ChevronLeft size={20} strokeWidth={2.5} />,\n                },\n                {\n                  title: 'right',\n                  action: handleNext,\n                  disabled: currentIndex === entries.length - 1,\n                  icon: <ChevronRight size={20} strokeWidth={2.5} />,\n                },\n              ].map((btn) => (\n                <button\n                  key={btn.title}\n                  title={btn.title}\n                  onClick={btn.action}\n                  disabled={btn.disabled}\n                  className=\"bg-background text-muted-foreground hover:bg-accent hover:text-accent-foreground flex h-8 w-8 items-center justify-center rounded-lg transition-colors disabled:opacity-50\"\n                >\n                  {btn.icon}\n                </button>\n              ))}\n            </div>\n          </div>\n\n          <div className=\"flex flex-1 flex-col overflow-hidden\">\n            <div className=\"relative flex-1\">\n              <AnimatePresence>\n                <motion.div\n                  key={currentEntry.id + '-stagger'}\n                  variants={{\n                    enter: { opacity: 1 },\n                    center: { opacity: 1 },\n                    exit: { opacity: 1, transition: { duration: 1.5 } },\n                  }}\n                  initial=\"enter\"\n                  animate=\"center\"\n                  exit=\"exit\"\n                  className=\"text-foreground absolute top-0 left-0 w-full text-[18px] leading-relaxed font-bold -tracking-wide transition-colors\"\n                >\n                  {typeof currentEntry.content === 'string' ||\n                  Array.isArray(currentEntry.content) ? (\n                    <motion.div className=\"space-y-4\">\n                      {(Array.isArray(currentEntry.content)\n                        ? currentEntry.content\n                        : [currentEntry.content as string]\n                      ).map((paragraph, pIndex, arr) => {\n                        const priorLength = arr\n                          .slice(0, pIndex)\n                          .join('').length;\n                        const segments = paragraph.split(/(\\s+)/);\n\n                        return (\n                          <motion.p key={`p-${pIndex}-${currentEntry.id}`}>\n                            {segments.map((segment: string, index: number) => {\n                              if (/\\s+/.test(segment)) {\n                                return (\n                                  <motion.span\n                                    key={index}\n                                    className=\"whitespace-pre\"\n                                  >\n                                    {segment}\n                                  </motion.span>\n                                );\n                              }\n\n                              const previousLengths = segments\n                                .slice(0, index)\n                                .join('').length;\n\n                              return (\n                                <motion.span\n                                  key={`word-${index}-${currentEntry.id}`}\n                                  className=\"inline-block\"\n                                >\n                                  {Array.from(segment).map(\n                                    (char: string, charIndex: number) => {\n                                      const globalIndex =\n                                        priorLength +\n                                        previousLengths +\n                                        charIndex;\n\n                                      return (\n                                        <motion.span\n                                          key={`char-${charIndex}-${currentEntry.id}`}\n                                          custom={globalIndex}\n                                          variants={charVariants}\n                                          initial=\"enter\"\n                                          animate=\"center\"\n                                          exit=\"exit\"\n                                          className=\"relative inline-block\"\n                                        >\n                                          {char}\n                                        </motion.span>\n                                      );\n                                    },\n                                  )}\n                                </motion.span>\n                              );\n                            })}\n                          </motion.p>\n                        );\n                      })}\n                    </motion.div>\n                  ) : (\n                    currentEntry.content\n                  )}\n                </motion.div>\n              </AnimatePresence>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "knob-slider",
      "type": "registry:component",
      "title": "Knob Slider",
      "description": "A premium radial dial component with tactile feedback, blur animations, and full theme integration.",
      "dependencies": [
        "motion",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/knob-slider.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, {\n    useState,\n    useRef,\n    useEffect,\n    useCallback,\n    useMemo,\n    useId,\n} from \"react\";\nimport {\n    motion,\n    MotionValue,\n    useSpring,\n    useTransform,\n    motionValue,\n} from \"motion/react\";\nimport useMeasure from \"react-use-measure\";\n\n/* ───────── Sliding Number ───────── */\n\nconst DIGIT_SPRING = {\n    type: \"spring\" as const,\n    stiffness: 280,\n    damping: 24,\n    mass: 0.3,\n};\n\nfunction Digit({ value, place }: { value: number; place: number }) {\n    const digit = Math.floor(value / place) % 10;\n    const mv = useMemo(() => motionValue(digit), [digit]);\n    const spring = useSpring(mv, DIGIT_SPRING);\n\n    useEffect(() => {\n        spring.set(digit);\n    }, [digit, spring]);\n\n    return (\n        <div\n            className=\"relative inline-block overflow-hidden tabular-nums\"\n            style={{ width: \"0.6em\" }}\n        >\n            <div className=\"invisible\">0</div>\n            {Array.from({ length: 10 }, (_, i) => (\n                <SlotDigit key={i} mv={spring} number={i} />\n            ))}\n        </div>\n    );\n}\n\nfunction SlotDigit({\n    mv,\n    number,\n}: {\n    mv: MotionValue<number>;\n    number: number;\n}) {\n    const id = useId();\n    const [ref, bounds] = useMeasure();\n\n    const y = useTransform(mv, (latest) => {\n        if (!bounds.height) return 0;\n        const offset = (10 + number - (latest % 10)) % 10;\n        let pos = offset * bounds.height;\n        if (offset > 5) pos -= 10 * bounds.height;\n        return pos;\n    });\n\n    if (!bounds.height)\n        return (\n            <span ref={ref} className=\"invisible absolute\">\n                {number}\n            </span>\n        );\n\n    return (\n        <motion.span\n            ref={ref}\n            style={{ y }}\n            layoutId={`${id}-${number}`}\n            transition={DIGIT_SPRING}\n            className=\"absolute inset-0 flex items-center justify-center\"\n        >\n            {number}\n        </motion.span>\n    );\n}\n\nfunction SlidingNumber({\n    value,\n    blur,\n}: {\n    value: number;\n    blur: number;\n}) {\n    const str = Math.abs(value).toString();\n    const int = parseInt(str, 10);\n    const places = str\n        .split(\"\")\n        .map((_, i) => Math.pow(10, str.length - i - 1));\n\n    return (\n        <motion.div\n            animate={{ filter: `blur(${blur}px)` }}\n            transition={{ duration: 0.15 }}\n            className=\"flex items-center justify-center font-bold tabular-nums tracking-tight\"\n            style={{\n                fontFamily: \"ui-rounded, SF Pro Rounded, system-ui, sans-serif\",\n            }}\n        >\n            {places.map((place, i) => (\n                <Digit key={`${place}-${i}`} value={int} place={place} />\n            ))}\n        </motion.div>\n    );\n}\n\n/* ───────── Knob ───────── */\n\ninterface KnobSliderProps {\n    value: number;\n    onChange: (value: number) => void;\n    min?: number;\n    max?: number;\n    size?: number;\n}\n\nexport const KnobSlider: React.FC<KnobSliderProps> = ({\n    value,\n    onChange,\n    min = 0,\n    max = 100,\n    size = 320,\n}) => {\n    const knobRef = useRef<HTMLDivElement>(null);\n    const [dragging, setDragging] = useState(false);\n\n    const tickCount = 72;\n    const innerSize = size * 0.68;\n\n    /* Blur intensity */\n    const [prev, setPrev] = useState(value);\n    const [blur, setBlur] = useState(0);\n    if (prev !== value) {\n        setBlur(Math.min(10, Math.abs(value - prev)));\n        setPrev(value);\n    }\n\n    /* Convert pointer → snapped value */\n    const updateFromPointer = useCallback(\n        (x: number, y: number) => {\n            if (!knobRef.current) return;\n\n            const rect = knobRef.current.getBoundingClientRect();\n            const cx = rect.left + rect.width / 2;\n            const cy = rect.top + rect.height / 2;\n\n            let angle = (Math.atan2(y - cy, x - cx) * 180) / Math.PI + 90;\n            if (angle < 0) angle += 360;\n\n            /* Snap to nearest tick */\n            const tickAngle = 360 / tickCount;\n            const snappedAngle = Math.round(angle / tickAngle) * tickAngle;\n\n            const percent = snappedAngle / 360;\n            const newValue = Math.round(percent * (max - min) + min);\n\n            onChange(newValue);\n        },\n        [min, max, onChange]\n    );\n\n    useEffect(() => {\n        const move = (e: MouseEvent) =>\n            dragging && updateFromPointer(e.clientX, e.clientY);\n        const up = () => setDragging(false);\n\n        if (dragging) {\n            window.addEventListener(\"mousemove\", move);\n            window.addEventListener(\"mouseup\", up);\n        }\n\n        return () => {\n            window.removeEventListener(\"mousemove\", move);\n            window.removeEventListener(\"mouseup\", up);\n        };\n    }, [dragging, updateFromPointer]);\n\n    const currentAngle = ((value - min) / (max - min)) * 360;\n\n    return (\n        <div\n            ref={knobRef}\n            onMouseDown={(e) => {\n                setDragging(true);\n                updateFromPointer(e.clientX, e.clientY);\n            }}\n            className=\"relative flex items-center justify-center rounded-full\n                 bg-neutral-100 dark:bg-neutral-900\n                 cursor-pointer select-none\n                 transition-colors duration-300\"\n            style={{ width: size, height: size }}\n        >\n            {/* Tick Ring */}\n            <svg\n                viewBox=\"0 0 100 100\"\n                className=\"absolute inset-0 w-full h-full pointer-events-none\n                   text-neutral-400 dark:text-neutral-600\"\n            >\n                {Array.from({ length: tickCount }).map((_, i) => {\n                    const angle = (i * 360) / tickCount;\n                    return (\n                        <line\n                            key={i}\n                            x1=\"50\"\n                            y1=\"4\"\n                            x2=\"50\"\n                            y2=\"9\"\n                            transform={`rotate(${angle} 50 50)`}\n                            stroke=\"currentColor\"\n                            strokeWidth=\"0.7\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.7\"\n                        />\n                    );\n                })}\n            </svg>\n\n            {/* Arrow */}\n            <div\n                className=\"absolute inset-0 pointer-events-none\"\n                style={{ transform: `rotate(${currentAngle}deg)` }}\n            >\n                <div\n                    className=\"absolute left-1/2 -translate-x-1/2\n                     border-l-transparent border-r-transparent\n                     border-b-neutral-500 dark:border-b-neutral-300\"\n                    style={{\n                        top: size * 0.12,\n                        borderLeftWidth: size * 0.025,\n                        borderRightWidth: size * 0.025,\n                        borderBottomWidth: size * 0.045,\n                        borderStyle: \"solid\",\n                    }}\n                />\n            </div>\n\n            {/* Inner Knob */}\n            <div\n                className=\"relative rounded-full flex items-center justify-center\n                   bg-white dark:bg-neutral-800\n                   shadow-lg dark:shadow-black/40\n                   transition-colors duration-300\"\n                style={{\n                    width: innerSize,\n                    height: innerSize,\n                }}\n            >\n                <div className=\"absolute inset-0 rounded-full border border-neutral-200 dark:border-neutral-700\" />\n\n                <div\n                    className=\"text-neutral-600 dark:text-neutral-300\"\n                    style={{ fontSize: innerSize * 0.28 }}\n                >\n                    <SlidingNumber value={value} blur={blur} />\n                </div>\n            </div>\n        </div>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "knob-slider-base",
      "type": "registry:component",
      "title": "Knob Slider (base)",
      "description": "Theme-ready base variant of A premium radial dial component with tactile feedback, blur animations, and full theme integration..",
      "dependencies": [
        "motion",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/knob-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, {\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  useMemo,\n  useId,\n} from 'react';\nimport {\n  motion,\n  MotionValue,\n  useSpring,\n  useTransform,\n  motionValue,\n} from 'motion/react';\nimport useMeasure from 'react-use-measure';\n\nconst DIGIT_SPRING = {\n  type: 'spring' as const,\n  stiffness: 280,\n  damping: 24,\n  mass: 0.3,\n};\n\nfunction Digit({ value, place }: { value: number; place: number }) {\n  const digit = Math.floor(value / place) % 10;\n  const mv = useMemo(() => motionValue(digit), [digit]);\n  const spring = useSpring(mv, DIGIT_SPRING);\n\n  useEffect(() => {\n    spring.set(digit);\n  }, [digit, spring]);\n\n  return (\n    <div\n      className=\"relative inline-block \n      \n      overflow-hidden tabular-nums\"\n      style={{ width: '0.6em' }}\n    >\n      <div className=\"invisible\">0</div>\n      {Array.from({ length: 10 }, (_, i) => (\n        <SlotDigit key={i} mv={spring} number={i} />\n      ))}\n    </div>\n  );\n}\n\nfunction SlotDigit({\n  mv,\n  number,\n}: {\n  mv: MotionValue<number>;\n  number: number;\n}) {\n  const id = useId();\n  const [ref, bounds] = useMeasure();\n\n  const y = useTransform(mv, (latest) => {\n    if (!bounds.height) return 0;\n    const offset = (10 + number - (latest % 10)) % 10;\n    let pos = offset * bounds.height;\n    if (offset > 5) pos -= 10 * bounds.height;\n    return pos;\n  });\n\n  if (!bounds.height)\n    return (\n      <span ref={ref} className=\"invisible absolute\">\n        {number}\n      </span>\n    );\n\n  return (\n    <motion.span\n      ref={ref}\n      style={{ y }}\n      layoutId={`${id}-${number}`}\n      transition={DIGIT_SPRING}\n      className=\"absolute inset-0 flex items-center justify-center\"\n    >\n      {number}\n    </motion.span>\n  );\n}\n\nfunction SlidingNumber({ value, blur }: { value: number; blur: number }) {\n  const str = Math.abs(value).toString();\n  const int = parseInt(str, 10);\n  const places = str.split('').map((_, i) => Math.pow(10, str.length - i - 1));\n\n  return (\n    <motion.div\n      animate={{ filter: `blur(${blur}px)` }}\n      transition={{ duration: 0.15 }}\n      className=\"text-foreground flex items-center justify-center font-bold tracking-tight tabular-nums\"\n      style={{\n        fontFamily: 'ui-rounded, SF Pro Rounded, system-ui, sans-serif',\n      }}\n    >\n      {places.map((place, i) => (\n        <Digit key={`${place}-${i}`} value={int} place={place} />\n      ))}\n    </motion.div>\n  );\n}\n\ninterface KnobSliderProps {\n  value: number;\n  onChange: (value: number) => void;\n  min?: number;\n  max?: number;\n  size?: number;\n}\n\nexport const KnobSlider: React.FC<KnobSliderProps> = ({\n  value,\n  onChange,\n  min = 0,\n  max = 100,\n  size = 320,\n}) => {\n  const knobRef = useRef<HTMLDivElement>(null);\n  const [dragging, setDragging] = useState(false);\n\n  const tickCount = 72;\n  const innerSize = size * 0.68;\n\n  const [prev, setPrev] = useState(value);\n  const [blur, setBlur] = useState(0);\n  if (prev !== value) {\n    setBlur(Math.min(10, Math.abs(value - prev)));\n    setPrev(value);\n  }\n\n  const updateFromPointer = useCallback(\n    (x: number, y: number) => {\n      if (!knobRef.current) return;\n\n      const rect = knobRef.current.getBoundingClientRect();\n      const cx = rect.left + rect.width / 2;\n      const cy = rect.top + rect.height / 2;\n\n      let angle = (Math.atan2(y - cy, x - cx) * 180) / Math.PI + 90;\n      if (angle < 0) angle += 360;\n\n      const tickAngle = 360 / tickCount;\n      const snappedAngle = Math.round(angle / tickAngle) * tickAngle;\n\n      const percent = snappedAngle / 360;\n      const newValue = Math.round(percent * (max - min) + min);\n\n      onChange(newValue);\n    },\n    [min, max, onChange],\n  );\n\n  useEffect(() => {\n    const move = (e: MouseEvent) =>\n      dragging && updateFromPointer(e.clientX, e.clientY);\n    const up = () => setDragging(false);\n\n    if (dragging) {\n      window.addEventListener('mousemove', move);\n      window.addEventListener('mouseup', up);\n    }\n\n    return () => {\n      window.removeEventListener('mousemove', move);\n      window.removeEventListener('mouseup', up);\n    };\n  }, [dragging, updateFromPointer]);\n\n  const currentAngle = ((value - min) / (max - min)) * 360;\n\n  return (\n    <div\n      ref={knobRef}\n      onMouseDown={(e) => {\n        setDragging(true);\n        updateFromPointer(e.clientX, e.clientY);\n      }}\n      className=\"theme-injected bg-background relative flex cursor-pointer items-center justify-center rounded-lg transition-colors duration-300 select-none\"\n      style={{ width: size, height: size }}\n    >\n      <svg\n        viewBox=\"0 0 100 100\"\n        className=\"text-muted-foreground pointer-events-none absolute inset-0 h-full w-full\"\n      >\n        {Array.from({ length: tickCount }).map((_, i) => {\n          const angle = (i * 360) / tickCount;\n          return (\n            <line\n              key={i}\n              x1=\"50\"\n              y1=\"4\"\n              x2=\"50\"\n              y2=\"9\"\n              transform={`rotate(${angle} 50 50)`}\n              stroke=\"currentColor\"\n              strokeWidth=\"0.7\"\n              strokeLinecap=\"round\"\n              opacity=\"0.7\"\n            />\n          );\n        })}\n      </svg>\n\n      <div\n        className=\"pointer-events-none absolute inset-0\"\n        style={{ transform: `rotate(${currentAngle}deg)` }}\n      >\n        <div\n          className=\"border-b-muted-foreground absolute left-1/2 -translate-x-1/2 border-r-transparent border-l-transparent\"\n          style={{\n            top: size * 0.12,\n            borderLeftWidth: size * 0.025,\n            borderRightWidth: size * 0.025,\n            borderBottomWidth: size * 0.045,\n            borderStyle: 'solid',\n          }}\n        />\n      </div>\n\n      <div\n        className=\"bg-background relative flex items-center justify-center rounded-full shadow-lg transition-colors duration-300\"\n        style={{\n          width: innerSize,\n          height: innerSize,\n        }}\n      >\n        <div className=\"border-border absolute inset-0 rounded-full border\" />\n\n        <div\n          className=\"text-muted-foreground\"\n          style={{ fontSize: innerSize * 0.28 }}\n        >\n          <SlidingNumber value={value} blur={blur} />\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "labeled-progress-indicator",
      "type": "registry:component",
      "title": "Labeled Progress Indicator",
      "description": "An animated progress indicator with dynamic labels that update smoothly.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/labeled-progress-indicator.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { useState, useEffect, type FC } from 'react';\n\nexport interface LabeledProgressIndicatorProps {\n  labels: string[];\n  progress?: string;\n  intervalMs?: number;\n  showThemeToggle?: boolean;\n}\n\nexport const LabeledProgressIndicator: FC<LabeledProgressIndicatorProps> = ({\n  labels,\n  progress = '55%',\n  intervalMs = 2000,\n}) => {\n  const [labelIndex, setLabelIndex] = useState(0);\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setLabelIndex((prev) => (prev + 1) % labels.length);\n    }, intervalMs);\n\n    return () => clearInterval(interval);\n  }, [labels.length, intervalMs]);\n\n  return (\n    <div className=\"flex flex-col items-center gap-5\">\n      <div className=\"relative flex w-full items-center justify-center perspective-[800px] transform-3d\">\n        <AnimatePresence mode=\"popLayout\">\n          <motion.span\n            key={labelIndex}\n            initial={{\n              opacity: 0,\n              y: 10,\n              scale: 2,\n              filter: 'blur(4px)',\n              rotateX: -60,\n            }}\n            animate={{\n              opacity: 1,\n              y: 0,\n              scale: 1,\n              filter: 'blur(0px)',\n              rotateX: 0,\n            }}\n            exit={{\n              opacity: 0,\n              filter: 'blur(4px)',\n              rotateX: 90,\n              scale: 0.9,\n            }}\n            transition={{\n              type: 'spring',\n              stiffness: 600,\n              damping: 100,\n              mass: 10,\n            }}\n            className=\"origon-bottom flex w-full items-center justify-center text-3xl font-bold text-[#B5B5B5] will-change-transform transform-3d dark:text-zinc-400\"\n          >\n            {labels[labelIndex]}\n          </motion.span>\n        </AnimatePresence>\n      </div>\n\n      <div className=\"h-4 w-[320px] overflow-hidden rounded-full border border-black/5 bg-[#F0F0F0] shadow-inner dark:border-white/5 dark:bg-zinc-900\">\n        <motion.div\n          initial={{ width: '0%' }}\n          animate={{ width: progress }}\n          transition={{ duration: 1, ease: 'easeOut' }}\n          className=\"relative h-full overflow-hidden rounded-full bg-[#016FFE] dark:bg-blue-600\"\n        >\n          <motion.div\n            initial={{ x: '-100%' }}\n            animate={{ x: '200%' }}\n            transition={{\n              duration: intervalMs / 1000,\n              repeat: Infinity,\n              ease: 'linear',\n            }}\n            className=\"absolute inset-y-0 w-full bg-linear-to-r from-zinc-900/10 via-sky-300 to-zinc-900/10\"\n          />\n        </motion.div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "labeled-progress-indicator-base",
      "type": "registry:component",
      "title": "Labeled Progress Indicator (base)",
      "description": "Theme-ready base variant of An animated progress indicator with dynamic labels that update smoothly..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/labeled-progress-indicator.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { useState, useEffect, type FC } from 'react';\n\nexport interface LabeledProgressIndicatorProps {\n  labels: string[];\n  progress?: string;\n  intervalMs?: number;\n  showThemeToggle?: boolean;\n}\n\nexport const LabeledProgressIndicator: FC<LabeledProgressIndicatorProps> = ({\n  labels,\n  progress = '55%',\n  intervalMs = 2000,\n}) => {\n  const [labelIndex, setLabelIndex] = useState(0);\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setLabelIndex((prev) => (prev + 1) % labels.length);\n    }, intervalMs);\n\n    return () => clearInterval(interval);\n  }, [labels.length, intervalMs]);\n\n  return (\n    <div className=\"theme-injected flex flex-col items-center gap-5\">\n      <div className=\"relative flex w-full items-center justify-center perspective-[800px] transform-3d\">\n        <AnimatePresence mode=\"popLayout\">\n          <motion.span\n            key={labelIndex}\n            initial={{\n              opacity: 0,\n              y: 10,\n              scale: 2,\n              filter: 'blur(4px)',\n              rotateX: -60,\n            }}\n            animate={{\n              opacity: 1,\n              y: 0,\n              scale: 1,\n              filter: 'blur(0px)',\n              rotateX: 0,\n            }}\n            exit={{\n              opacity: 0,\n              filter: 'blur(4px)',\n              rotateX: 90,\n              scale: 0.9,\n            }}\n            transition={{\n              type: 'spring',\n              stiffness: 600,\n              damping: 100,\n              mass: 10,\n            }}\n            className=\"origon-bottom text-muted-foreground flex w-full items-center justify-center text-3xl font-bold will-change-transform transform-3d\"\n          >\n            {labels[labelIndex]}\n          </motion.span>\n        </AnimatePresence>\n      </div>\n\n      <div className=\"border-border bg-muted h-4 w-[320px] overflow-hidden rounded-lg border shadow-inner\">\n        <motion.div\n          initial={{ width: '0%' }}\n          animate={{ width: progress }}\n          transition={{ duration: 1, ease: 'easeOut' }}\n          className=\"bg-primary relative h-full overflow-hidden rounded-lg\"\n        >\n          <motion.div\n            initial={{ x: '-100%' }}\n            animate={{ x: '200%' }}\n            transition={{\n              duration: intervalMs / 1000,\n              repeat: Infinity,\n              ease: 'linear',\n            }}\n            className=\"via-primary absolute inset-y-0 w-full bg-gradient-to-r from-transparent to-transparent brightness-150\"\n          />\n        </motion.div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "layered-progressive-disclosure",
      "type": "registry:component",
      "title": "Layered Progressive Disclosure",
      "description": "A premium layered progressive disclosure panel with animated feature toggles, asymmetric controls, and tabbed micro-interactions for advanced configuration workflows.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/layered-progressive-disclosure.tsx",
          "type": "registry:component",
          "content": "import { ArrowRight04Icon, PlusSignIcon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface LayeredProgressiveDisclosureProps {\n  title?: string;\n  configOptions?: { label: string; value: string | number }[];\n  primaryFeatureName?: string;\n  secondaryFeatureName?: string;\n  asymmetricOptionsName?: string;\n  tabs?: [string, string];\n  onAddProperty?: () => void;\n  onFeatureToggle?: (isActive: boolean) => void;\n  onAsymmetricToggle?: (isActive: boolean) => void;\n  onTabChange?: (tab: string) => void;\n}\n\nexport default function LayeredProgressiveDisclosure({\n  title = 'Configuration',\n  configOptions = [\n    { label: 'Width', value: '300' },\n    { label: 'Height', value: '300' },\n  ],\n  primaryFeatureName = 'Visual Change',\n  secondaryFeatureName = 'Transition',\n  asymmetricOptionsName = 'Asymmetric',\n  tabs = ['Insertion', 'Removal'],\n  onAddProperty,\n  onFeatureToggle,\n  onAsymmetricToggle,\n  onTabChange,\n}: LayeredProgressiveDisclosureProps) {\n  const [isAsymmetric, setIsAsymmetric] = useState(false);\n  const [isTransition, setIsTransition] = useState(false);\n  const [activeTab, setActiveTab] = useState<string>(tabs[0]);\n\n  const handleFeatureToggle = () => {\n    const newState = !isTransition;\n    setIsTransition(newState);\n    onFeatureToggle?.(newState);\n  };\n\n  const handleAsymmetricToggle = () => {\n    const newState = !isAsymmetric;\n    setIsAsymmetric(newState);\n    onAsymmetricToggle?.(newState);\n  };\n\n  const handleTabChange = (tab: string) => {\n    setActiveTab(tab);\n    onTabChange?.(tab);\n  };\n\n  return (\n    <div className=\"flex min-w-[300px] flex-col gap-3 rounded-3xl bg-neutral-100 p-3 transition-colors duration-300 dark:bg-neutral-900/50\">\n      <p className=\"ml-2 font-semibold tracking-tight text-neutral-500 dark:text-neutral-400\">\n        {title}\n      </p>\n      <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl bg-neutral-200 p-3 transition-colors duration-300 dark:bg-neutral-900\">\n        <div className=\"flex w-full items-center gap-12\">\n          {configOptions.slice(0, 2).map((option, idx) => (\n            <div\n              key={idx}\n              className=\"flex w-full items-center justify-between gap-3 rounded-2xl bg-neutral-100 px-4 py-3 transition-colors duration-300 dark:bg-neutral-800\"\n            >\n              <p className=\"font-semibold tracking-tight text-neutral-500 dark:text-neutral-400\">\n                {option.label}\n              </p>\n              <p className=\"font-semibold tracking-tight text-neutral-500 dark:text-neutral-300\">\n                {option.value}\n              </p>\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl bg-neutral-200 p-1 transition-colors duration-300 dark:bg-neutral-900\">\n        <div className=\"flex w-full flex-col items-center p-3\">\n          <div\n            onClick={handleFeatureToggle}\n            className=\"relative z-30 flex w-full cursor-pointer items-center justify-between gap-3 rounded-2xl bg-neutral-100 px-4 py-3 transition-colors duration-300 dark:bg-neutral-800\"\n          >\n            <div className=\"relative flex h-6 flex-1 items-center\">\n              <AnimatePresence mode=\"popLayout\">\n                <motion.div\n                  key={isTransition ? secondaryFeatureName : primaryFeatureName}\n                  className=\"absolute flex font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  initial=\"hidden\"\n                  animate=\"visible\"\n                  exit=\"exit\"\n                  variants={{\n                    visible: {\n                      transition: { staggerChildren: 0.02 },\n                    },\n                    exit: {\n                      transition: { staggerChildren: 0.005 },\n                    },\n                  }}\n                >\n                  {(isTransition ? secondaryFeatureName : primaryFeatureName)\n                    .split('')\n                    .map((char, index) => (\n                      <motion.span\n                        key={index}\n                        variants={{\n                          hidden: { opacity: 0, y: 10, filter: 'blur(1px)' },\n                          visible: { opacity: 1, y: 0, filter: 'blur(0px)' },\n                          exit: { opacity: 0, y: -10, filter: 'blur(1px)' },\n                        }}\n                        className=\"whitespace-pre\"\n                      >\n                        {char}\n                      </motion.span>\n                    ))}\n                </motion.div>\n              </AnimatePresence>\n            </div>\n            <UnfoldMore />\n          </div>\n\n          <AnimatePresence>\n            {isTransition && (\n              <motion.div\n                key=\"asymmetric-toggle-container\"\n                initial={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                animate={{\n                  height: 'auto',\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                }}\n                exit={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                transition={{ duration: 0.3, ease: 'easeOut' }}\n                className=\"w-full overflow-hidden\"\n              >\n                <div className=\"mt-3 flex w-full items-center justify-between gap-3 rounded-2xl bg-neutral-100 px-4 py-3 transition-colors duration-300 dark:bg-neutral-800\">\n                  <p className=\"font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\">\n                    {asymmetricOptionsName}\n                  </p>\n                  <button\n                    onClick={handleAsymmetricToggle}\n                    className={`flex h-7 w-12 cursor-pointer rounded-full p-0.5 shadow-inner transition-colors duration-300 ease-in-out ${\n                      isAsymmetric\n                        ? 'bg-neutral-800 dark:bg-neutral-100'\n                        : 'bg-neutral-300 dark:bg-neutral-600'\n                    }`}\n                  >\n                    <motion.div\n                      layout\n                      initial={{ x: 0 }}\n                      animate={{ x: isAsymmetric ? 20 : 0 }}\n                      transition={{ duration: 0.2, ease: 'easeInOut' }}\n                      className=\"size-6 rounded-full bg-white shadow-sm dark:bg-neutral-900\"\n                    />\n                  </button>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        <div className=\"flex w-full flex-col items-center rounded-2xl bg-neutral-100 p-3 transition-colors duration-300 dark:bg-neutral-800\">\n          <AnimatePresence>\n            {isAsymmetric && (\n              <motion.div\n                key=\"asymmetric-tabs-container\"\n                initial={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                animate={{\n                  height: 'auto',\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                }}\n                exit={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                transition={{ type: 'spring', bounce: 0.45, duration: 0.8 }}\n                className=\"w-full overflow-hidden\"\n              >\n                <div className=\"relative z-20 mb-3 flex w-full items-center justify-between rounded-2xl bg-neutral-200 p-0.5 transition-colors duration-300 dark:bg-neutral-900\">\n                  <button\n                    onClick={() => handleTabChange(tabs[0])}\n                    className=\"relative z-10 w-full py-2 text-center font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {tabs[0]}\n                    {activeTab === tabs[0] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl bg-neutral-100 shadow-sm dark:bg-neutral-800\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                  <button\n                    onClick={() => handleTabChange(tabs[1])}\n                    className=\"relative z-10 w-full py-2 text-center font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {tabs[1]}\n                    {activeTab === tabs[1] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl bg-neutral-100 shadow-sm dark:bg-neutral-800\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <div className=\"mb-3 flex w-full items-center justify-between px-1\">\n            <p className=\"font-semibold tracking-tight text-zinc-500 dark:text-zinc-400\">\n              Opacity\n            </p>\n            <div className=\"flex h-full w-[175px] items-center justify-around rounded-2xl bg-neutral-200 px-5 py-2 transition-colors duration-300 dark:bg-neutral-900\">\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '0' : '1'}\n                    initial={{ opacity: 0, y: -10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 10 }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {activeTab === tabs[0] ? '0' : '1'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n\n              <HugeiconsIcon\n                icon={ArrowRight04Icon}\n                className=\"text-neutral-700 dark:text-neutral-400\"\n              />\n\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '1' : '0'}\n                    initial={{ opacity: 0, y: -10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 10 }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {activeTab === tabs[0] ? '1' : '0'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"mb-3 flex w-full items-center justify-between px-1\">\n            <p className=\"font-semibold tracking-tight text-zinc-500 dark:text-zinc-400\">\n              {' '}\n              Blur\n            </p>\n            <div className=\"flex h-full w-[175px] items-center justify-around rounded-2xl bg-neutral-200 px-5 py-2 transition-colors duration-300 dark:bg-neutral-900\">\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '16' : '0'}\n                    initial={{ opacity: 0, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, filter: 'blur(4px)' }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {activeTab === tabs[0] ? '16' : '0'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n\n              <HugeiconsIcon\n                icon={ArrowRight04Icon}\n                className=\"text-neutral-700 dark:text-neutral-400\"\n              />\n\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '0' : '16'}\n                    initial={{ opacity: 0, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, filter: 'blur(4px)' }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {activeTab === tabs[0] ? '0' : '16'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n            </div>\n          </div>\n\n          <button\n            onClick={onAddProperty}\n            className=\"mt-2 flex w-full items-center justify-center gap-2 rounded-2xl bg-neutral-900 px-5 py-2.5 text-center font-semibold tracking-tight text-neutral-100 transition-colors duration-300 dark:bg-neutral-100 dark:text-neutral-900\"\n          >\n            <HugeiconsIcon\n              icon={PlusSignIcon}\n              className=\"inline-block size-5\"\n            />{' '}\n            Add Property\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nconst UnfoldMore = ({ onClick }: { onClick?: () => void }) => {\n  return (\n    <svg\n      onClick={onClick}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"lucide lucide-chevrons-up-down-icon lucide-chevrons-up-down cursor-pointer text-neutral-700 dark:text-neutral-400\"\n    >\n      <path d=\"m7 15 5 5 5-5\" />\n      <path d=\"m7 9 5-5 5 5\" />\n    </svg>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "layered-progressive-disclosure-base",
      "type": "registry:component",
      "title": "Layered Progressive Disclosure (base)",
      "description": "Theme-ready base variant of A premium layered progressive disclosure panel with animated feature toggles, asymmetric controls, and tabbed micro-interactions for advanced configuration workflows..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/layered-progressive-disclosure.tsx",
          "type": "registry:component",
          "content": "import { ArrowRight04Icon, PlusSignIcon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface LayeredProgressiveDisclosureProps {\n  title?: string;\n  configOptions?: { label: string; value: string | number }[];\n  primaryFeatureName?: string;\n  secondaryFeatureName?: string;\n  asymmetricOptionsName?: string;\n  tabs?: [string, string];\n  onAddProperty?: () => void;\n  onFeatureToggle?: (isActive: boolean) => void;\n  onAsymmetricToggle?: (isActive: boolean) => void;\n  onTabChange?: (tab: string) => void;\n}\n\nexport default function LayeredProgressiveDisclosure({\n  title = 'Configuration',\n  configOptions = [\n    { label: 'Width', value: '300' },\n    { label: 'Height', value: '300' },\n  ],\n  primaryFeatureName = 'Visual Change',\n  secondaryFeatureName = 'Transition',\n  asymmetricOptionsName = 'Asymmetric',\n  tabs = ['Insertion', 'Removal'],\n  onAddProperty,\n  onFeatureToggle,\n  onAsymmetricToggle,\n  onTabChange,\n}: LayeredProgressiveDisclosureProps) {\n  const [isAsymmetric, setIsAsymmetric] = useState(false);\n  const [isTransition, setIsTransition] = useState(false);\n  const [activeTab, setActiveTab] = useState<string>(tabs[0]);\n\n  const handleFeatureToggle = () => {\n    const newState = !isTransition;\n    setIsTransition(newState);\n    onFeatureToggle?.(newState);\n  };\n\n  const handleAsymmetricToggle = () => {\n    const newState = !isAsymmetric;\n    setIsAsymmetric(newState);\n    onAsymmetricToggle?.(newState);\n  };\n\n  const handleTabChange = (tab: string) => {\n    setActiveTab(tab);\n    onTabChange?.(tab);\n  };\n\n  return (\n    <div className=\"theme-injected flex min-w-[300px] flex-col gap-3 rounded-3xl border border-border bg-card p-3 font-sans transition-colors duration-300\">\n      <p className=\"ml-2 font-sans font-semibold tracking-tight text-muted-foreground\">\n        {title}\n      </p>\n      <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl border border-border bg-muted p-3 transition-colors duration-300\">\n        <div className=\"flex w-full items-center gap-12\">\n          {configOptions.slice(0, 2).map((option, idx) => (\n            <div\n              key={idx}\n              className=\"flex w-full items-center justify-between gap-3 rounded-2xl border border-border bg-background px-4 py-3 transition-colors duration-300\"\n            >\n              <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n                {option.label}\n              </p>\n              <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n                {option.value}\n              </p>\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl border border-border bg-muted p-1 transition-colors duration-300\">\n        <div className=\"flex w-full flex-col items-center p-3\">\n          <div\n            onClick={handleFeatureToggle}\n            className=\"relative z-30 flex w-full cursor-pointer items-center justify-between gap-3 rounded-2xl border border-border bg-background px-4 py-3 transition-colors duration-300\"\n          >\n            <div className=\"relative flex h-6 flex-1 items-center\">\n              <AnimatePresence mode=\"popLayout\">\n                <motion.div\n                  key={isTransition ? secondaryFeatureName : primaryFeatureName}\n                  className=\"absolute flex font-sans font-semibold tracking-tight text-foreground\"\n                  initial=\"hidden\"\n                  animate=\"visible\"\n                  exit=\"exit\"\n                  variants={{\n                    visible: {\n                      transition: { staggerChildren: 0.02 },\n                    },\n                    exit: {\n                      transition: { staggerChildren: 0.005 },\n                    },\n                  }}\n                >\n                  {(isTransition ? secondaryFeatureName : primaryFeatureName)\n                    .split('')\n                    .map((char, index) => (\n                      <motion.span\n                        key={index}\n                        variants={{\n                          hidden: { opacity: 0, y: 10, filter: 'blur(1px)' },\n                          visible: { opacity: 1, y: 0, filter: 'blur(0px)' },\n                          exit: { opacity: 0, y: -10, filter: 'blur(1px)' },\n                        }}\n                        className=\"whitespace-pre\"\n                      >\n                        {char}\n                      </motion.span>\n                    ))}\n                </motion.div>\n              </AnimatePresence>\n            </div>\n            <UnfoldMore />\n          </div>\n\n          <AnimatePresence>\n            {isTransition && (\n              <motion.div\n                key=\"asymmetric-toggle-container\"\n                initial={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                animate={{\n                  height: 'auto',\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                }}\n                exit={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                transition={{ duration: 0.3, ease: 'easeOut' }}\n                className=\"w-full overflow-hidden\"\n              >\n                <div className=\"mt-3 flex w-full items-center justify-between gap-3 rounded-2xl border border-border bg-background px-4 py-3 transition-colors duration-300\">\n                  <p className=\"font-sans font-semibold tracking-tight text-foreground\">\n                    {asymmetricOptionsName}\n                  </p>\n                  <button\n                    onClick={handleAsymmetricToggle}\n                    className={`flex h-7 w-12 cursor-pointer rounded-full p-0.5 shadow-inner transition-colors duration-300 ease-in-out ${\n                      isAsymmetric\n                        ? 'bg-primary'\n                        : 'bg-input'\n                    }`}\n                  >\n                    <motion.div\n                      layout\n                      initial={{ x: 0 }}\n                      animate={{ x: isAsymmetric ? 20 : 0 }}\n                      transition={{ duration: 0.2, ease: 'easeInOut' }}\n                      className=\"size-6 rounded-full bg-background shadow-sm\"\n                    />\n                  </button>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        <div className=\"flex w-full flex-col items-center rounded-2xl border border-border bg-background p-3 transition-colors duration-300\">\n          <AnimatePresence>\n            {isAsymmetric && (\n              <motion.div\n                key=\"asymmetric-tabs-container\"\n                initial={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                animate={{\n                  height: 'auto',\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                }}\n                exit={{ height: 0, opacity: 0, filter: 'blur(4px)', y: -50 }}\n                transition={{ type: 'spring', bounce: 0.45, duration: 0.8 }}\n                className=\"w-full overflow-hidden\"\n              >\n                <div className=\"relative z-20 mb-3 flex w-full items-center justify-between rounded-2xl border border-border bg-muted p-0.5 transition-colors duration-300\">\n                  <button\n                    onClick={() => handleTabChange(tabs[0])}\n                    className=\"relative z-10 w-full py-2 text-center font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {tabs[0]}\n                    {activeTab === tabs[0] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl border border-border bg-background shadow-sm\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                  <button\n                    onClick={() => handleTabChange(tabs[1])}\n                    className=\"relative z-10 w-full py-2 text-center font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {tabs[1]}\n                    {activeTab === tabs[1] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl border border-border bg-background shadow-sm\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <div className=\"mb-3 flex w-full items-center justify-between px-1\">\n            <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n              Opacity\n            </p>\n            <div className=\"flex h-full w-43.75 items-center justify-around rounded-2xl border border-border bg-muted px-5 py-2 transition-colors duration-300\">\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '0' : '1'}\n                    initial={{ opacity: 0, y: -10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 10 }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {activeTab === tabs[0] ? '0' : '1'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n\n              <HugeiconsIcon\n                icon={ArrowRight04Icon}\n                className=\"text-muted-foreground\"\n              />\n\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '1' : '0'}\n                    initial={{ opacity: 0, y: -10 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: 10 }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {activeTab === tabs[0] ? '1' : '0'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"mb-3 flex w-full items-center justify-between px-1\">\n            <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n              {' '}\n              Blur\n            </p>\n            <div className=\"flex h-full w-43.75 items-center justify-around rounded-2xl border border-border bg-muted px-5 py-2 transition-colors duration-300\">\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '16' : '0'}\n                    initial={{ opacity: 0, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, filter: 'blur(4px)' }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {activeTab === tabs[0] ? '16' : '0'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n\n              <HugeiconsIcon\n                icon={ArrowRight04Icon}\n                className=\"text-muted-foreground\"\n              />\n\n              <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.p\n                    key={activeTab === tabs[0] ? '0' : '16'}\n                    initial={{ opacity: 0, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, filter: 'blur(4px)' }}\n                    transition={{ duration: 0.2 }}\n                    className=\"absolute font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {activeTab === tabs[0] ? '0' : '16'}\n                  </motion.p>\n                </AnimatePresence>\n              </div>\n            </div>\n          </div>\n\n          <button\n            onClick={onAddProperty}\n            className=\"mt-2 flex w-full items-center justify-center gap-2 rounded-2xl bg-primary px-5 py-2.5 text-center font-sans font-semibold tracking-tight text-primary-foreground transition-colors duration-300\"\n          >\n            <HugeiconsIcon\n              icon={PlusSignIcon}\n              className=\"inline-block size-5\"\n            />{' '}\n            Add Property\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nconst UnfoldMore = ({ onClick }: { onClick?: () => void }) => {\n  return (\n    <svg\n      onClick={onClick}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"lucide lucide-chevrons-up-down-icon lucide-chevrons-up-down cursor-pointer text-muted-foreground\"\n    >\n      <path d=\"m7 15 5 5 5-5\" />\n      <path d=\"m7 9 5-5 5 5\" />\n    </svg>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "licence-key",
      "type": "registry:component",
      "title": "Licence Key",
      "description": "Interactive micro-interaction component for licence keys.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/licence-key.tsx",
          "type": "registry:component",
          "content": "import { AnimatePresence, motion, MotionConfig } from 'motion/react';\nimport { useState } from 'react';\n\nconst springConfig = {\n  type: 'spring',\n  visualDuration: 0.35,\n  bounce: 0.3,\n} as const;\n\nexport default function LicenceKey() {\n  const [isOpen, setIsOpen] = useState(false);\n  const [value, setValue] = useState('');\n\n  const PLACEHOLDER_TEXT = 'License Key';\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <div className=\"flex h-screen w-full items-center justify-center\">\n        <motion.div\n          className=\"relative h-16 cursor-pointer rounded-full bg-zinc-100 text-lg dark:bg-zinc-900 dark:text-white dark:ring-1 dark:ring-zinc-800\"\n          animate={{ width: isOpen ? '400px' : '230px' }}\n          onClick={() => {\n            if (!isOpen) {\n              setIsOpen(true);\n            }\n          }}\n        >\n          <div className=\"flex h-full w-full items-center justify-center gap-1 pr-3 pl-4 font-semibold overflow-hidden relative\">\n            <AnimatePresence mode=\"popLayout\">\n              {!isOpen && (\n                <motion.span\n                  key=\"close\"\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{\n                    opacity: 1,\n                    filter: 'blur(0px)',\n                    transition: {\n                      type: 'spring',\n                      visualDuration: 0.2,\n                      bounce: 0,\n                      delay: 0.05,\n                    },\n                  }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                  transition={{\n                    type: 'spring',\n                    visualDuration: 0.2,\n                    bounce: 0,\n                  }}\n                >\n                  I have a{' '}\n                </motion.span>\n              )}\n            </AnimatePresence>\n\n            {!isOpen && (\n              <motion.span layoutId=\"placeholder\">\n                {PLACEHOLDER_TEXT}\n              </motion.span>\n            )}\n\n            <AnimatePresence mode=\"popLayout\" anchorX=\"right\">\n              {isOpen && (\n                <div\n                  key=\"open\"\n                  className=\"flex flex-1 items-center justify-start\"\n                >\n                  <motion.span\n                    layoutId=\"placeholder\"\n                    className=\"pointer-events-none absolute text-lg font-medium text-zinc-400 dark:text-zinc-500\"\n                    initial={{ opacity: 0 }}\n                    animate={{\n                      opacity: value.length === 0 ? 1 : 0,\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(4px)',\n                    }}\n                    transition={{\n                      type: 'spring',\n                      visualDuration: 0.25,\n                      bounce: 0.1,\n                    }}\n                  >\n                    {PLACEHOLDER_TEXT}\n                  </motion.span>\n\n                  <motion.input\n                    autoFocus\n                    initial={{\n                      opacity: 0,\n                      width: 0,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      width: 'auto',\n                    }}\n                    exit={{\n                      opacity: 0,\n                        width: 0,\n                      filter:\"blur(4px)\"\n                    }}\n                    value={value}\n                    onChange={(e) => setValue(e.target.value)}\n                    className=\"flex-1 bg-transparent focus-visible:ring-0 focus-visible:outline-none\"\n                  />\n\n                  <motion.button\n                    initial={{ opacity: 0, filter: 'blur(2px)' }}\n                    animate={{ opacity: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, filter: 'blur(2px)' }}\n                    transition={{\n                      type: 'spring',\n                      duration: 0.3,\n                      bounce: 0.1,\n                    }}\n                    className=\"cursor-pointer rounded-full bg-zinc-800 px-4 py-2 text-white ring-1 ring-zinc-800 dark:bg-white dark:text-zinc-900 dark:ring-white\"\n                    onClick={() => setIsOpen(false)}\n                  >\n                    Activate\n                  </motion.button>\n                </div>\n              )}\n            </AnimatePresence>\n          </div>\n        </motion.div>\n      </div>\n    </MotionConfig>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "licence-key-base",
      "type": "registry:component",
      "title": "Licence Key (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component for licence keys..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/licence-key.tsx",
          "type": "registry:component",
          "content": "import { AnimatePresence, motion, MotionConfig } from 'motion/react';\nimport { useState } from 'react';\n\nconst springConfig = {\n  type: 'spring',\n  visualDuration: 0.35,\n  bounce: 0.3,\n} as const;\n\nexport default function LicenceKey() {\n  const [isOpen, setIsOpen] = useState(false);\n  const [value, setValue] = useState('');\n\n  const PLACEHOLDER_TEXT = 'License Key';\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <div className=\"theme-injected flex h-screen w-full items-center justify-center\">\n        <motion.div\n          className=\"border-border bg-card text-card-foreground relative h-16 cursor-pointer rounded-full border text-lg\"\n          animate={{ width: isOpen ? '400px' : '230px' }}\n          onClick={() => {\n            if (!isOpen) {\n              setIsOpen(true);\n            }\n          }}\n        >\n          <div className=\"flex h-full w-full items-center justify-center gap-1 pr-3 pl-4 font-semibold overflow-hidden relative\">\n            <AnimatePresence mode=\"popLayout\">\n              {!isOpen && (\n                <motion.span\n                  key=\"close\"\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{\n                    opacity: 1,\n                    filter: 'blur(0px)',\n                    transition: {\n                      type: 'spring',\n                      visualDuration: 0.2,\n                      bounce: 0,\n                      delay: 0.05,\n                    },\n                  }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                  transition={{\n                    type: 'spring',\n                    visualDuration: 0.2,\n                    bounce: 0,\n                  }}\n                >\n                  I have a{' '}\n                </motion.span>\n              )}\n            </AnimatePresence>\n\n            {!isOpen && (\n              <motion.span layoutId=\"placeholder\">\n                {PLACEHOLDER_TEXT}\n              </motion.span>\n            )}\n\n            <AnimatePresence mode=\"popLayout\" anchorX=\"right\">\n              {isOpen && (\n                <div\n                  key=\"open\"\n                  className=\"flex flex-1 items-center justify-start\"\n                >\n                  <motion.span\n                    layoutId=\"placeholder\"\n                    className=\"text-muted-foreground pointer-events-none absolute text-lg font-medium\"\n                    initial={{ opacity: 0 }}\n                    animate={{\n                      opacity: value.length === 0 ? 1 : 0,\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(4px)',\n                    }}\n                    transition={{\n                      type: 'spring',\n                      visualDuration: 0.25,\n                      bounce: 0.1,\n                    }}\n                  >\n                    {PLACEHOLDER_TEXT}\n                  </motion.span>\n\n                  <motion.input\n                    autoFocus\n                    initial={{\n                      opacity: 0,\n                      width: 0,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      width: 'auto',\n                    }}\n                    exit={{\n                      opacity: 0,\n                      width: 0,\n                    }}\n                    value={value}\n                    onChange={(e) => setValue(e.target.value)}\n                    className=\"text-foreground flex-1 bg-transparent focus-visible:ring-0 focus-visible:outline-none\"\n                  />\n\n                  <motion.button\n                    initial={{ opacity: 0, filter: 'blur(2px)' }}\n                    animate={{ opacity: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, filter: 'blur(2px)' }}\n                    transition={{\n                      type: 'spring',\n                      duration: 0.3,\n                      bounce: 0.1,\n                    }}\n                    className=\"border-primary bg-primary text-primary-foreground cursor-pointer rounded-full border px-4 py-2\"\n                    onClick={() => setIsOpen(false)}\n                  >\n                    Activate\n                  </motion.button>\n                </div>\n              )}\n            </AnimatePresence>\n          </div>\n        </motion.div>\n      </div>\n    </MotionConfig>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "list-stack",
      "type": "registry:component",
      "title": "List Stack",
      "description": "An animated stacked list that smoothly expands and collapses to reveal or hide items.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/list-stack.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { FaFireFlameCurved, FaSailboat } from 'react-icons/fa6';\nimport { LuTent } from 'react-icons/lu';\nimport { type IconType } from 'react-icons';\n\ninterface ListItem {\n  id: string;\n  title: string;\n  location: string;\n  date: string;\n  icon: IconType;\n}\n\ninterface ListStackProps {\n  items?: ListItem[];\n}\n\nconst ITEMS: ListItem[] = [\n  {\n    id: '1',\n    title: 'Camping',\n    location: 'Yosemite Park',\n    date: '5 August',\n    icon: LuTent,\n  },\n  {\n    id: '2',\n    title: 'Boating',\n    location: 'Lake Tahoe Park',\n    date: '2 August',\n    icon: FaSailboat,\n  },\n  {\n    id: '3',\n    title: 'Barbecue',\n    location: 'Greenfield Shores',\n    date: '28 July',\n    icon: FaFireFlameCurved,\n  },\n];\nconst CARD_HEIGHT = 60;\nconst GAP = 8;\nconst COLLAPSED_OFFSET = -7;\n\nexport const ListStack: FC<ListStackProps> = ({ items = ITEMS }) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  return (\n    <div className=\"h- w-full font-sans\">\n      <div className=\"flex h-[400px] w-full flex-col items-center justify-center\">\n        <div className=\"relative flex h-full w-full flex-col items-center justify-center perspective-[1000px]\">\n          {items.map((item, i) => {\n            return (\n              <motion.div\n                className=\"bg-opacity-80 absolute flex w-[270px] items-center rounded-2xl bg-white px-3 py-3 shadow-[0px_0px_2px_rgba(0,0,0,0.1),0px_1px_4px_rgba(0,0,0,0.15)] backdrop-blur-2xl dark:border-gray-100 dark:bg-zinc-800\"\n                key={i}\n                animate={isExpanded ? 'expanded' : 'collapsed'}\n                style={{\n                  height: CARD_HEIGHT,\n                }}\n                variants={{\n                  expanded: {\n                    y: (items.length - 1 - i) * (CARD_HEIGHT + GAP),\n                    z: 10,\n                  },\n                  collapsed: {\n                    y: i * COLLAPSED_OFFSET,\n                    z: i * 60,\n                  },\n                }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 23,\n                }}\n              >\n                <div className=\"flex w-full items-center font-sans\">\n                  <div\n                    key={i}\n                    className=\"flex w-full items-center gap-x-2 text-neutral-900\"\n                  >\n                    <div className=\"flex size-10 items-center justify-center rounded-md bg-black text-zinc-100 dark:bg-white dark:text-zinc-700\">\n                      <item.icon size={24} />\n                    </div>\n                    <div className=\"leading-tighter flex-1\">\n                      <h3 className=\"text-sm text-zinc-900 dark:text-zinc-100\">\n                        {item.title}\n                      </h3>\n                      <p className=\"text-xs text-zinc-500 dark:text-zinc-400\">\n                        {item.location}\n                      </p>\n                    </div>\n\n                    <span className=\"leading-tighter mb-[2px] ml-5 self-end text-end text-xs text-zinc-500 dark:text-zinc-400\">\n                      {item.date}\n                    </span>\n                  </div>\n                </div>\n              </motion.div>\n            );\n          })}\n          <motion.div\n            className=\"absolute cursor-pointer rounded-2xl border border-gray-100 bg-white px-4 py-2 text-neutral-900 shadow-sm\"\n            animate={{\n              y: isExpanded\n                ? (items.length - 1) * (CARD_HEIGHT + GAP) + CARD_HEIGHT + GAP\n                : CARD_HEIGHT + GAP,\n              z: isExpanded ? 0 : 40,\n            }}\n            transition={{\n              type: 'spring',\n              stiffness: 200,\n              damping: 25,\n            }}\n            layout\n            onClick={() => {\n              setIsExpanded((prev) => !prev);\n            }}\n          >\n            <AnimatePresence mode=\"popLayout\">\n              <motion.span\n                layout\n                key={isExpanded ? 'hide' : 'show'}\n                initial={{\n                  opacity: 0,\n                }}\n                animate={{\n                  opacity: 1,\n                }}\n                exit={{\n                  opacity: 0,\n                }}\n                transition={{\n                  duration: 0.2,\n                }}\n              >\n                {' '}\n                {isExpanded ? 'Hide ' : 'Show '}\n              </motion.span>\n            </AnimatePresence>\n          </motion.div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "list-stack-base",
      "type": "registry:component",
      "title": "List Stack (base)",
      "description": "Theme-ready base variant of An animated stacked list that smoothly expands and collapses to reveal or hide items..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/list-stack.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { FaFireFlameCurved, FaSailboat } from 'react-icons/fa6';\nimport { LuTent } from 'react-icons/lu';\nimport { type IconType } from 'react-icons';\n\ninterface ListItem {\n  id: string;\n  title: string;\n  location: string;\n  date: string;\n  icon: IconType;\n}\n\ninterface ListStackProps {\n  items?: ListItem[];\n}\n\nconst ITEMS: ListItem[] = [\n  {\n    id: '1',\n    title: 'Camping',\n    location: 'Yosemite Park',\n    date: '5 August',\n    icon: LuTent,\n  },\n  {\n    id: '2',\n    title: 'Boating',\n    location: 'Lake Tahoe Park',\n    date: '2 August',\n    icon: FaSailboat,\n  },\n  {\n    id: '3',\n    title: 'Barbecue',\n    location: 'Greenfield Shores',\n    date: '28 July',\n    icon: FaFireFlameCurved,\n  },\n];\nconst CARD_HEIGHT = 60;\nconst GAP = 8;\nconst COLLAPSED_OFFSET = -7;\n\nexport const ListStack: FC<ListStackProps> = ({ items = ITEMS }) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  return (\n    <div className=\"theme-injected h- w-full font-sans\">\n      <div className=\"flex h-[400px] w-full flex-col items-center justify-center\">\n        <div className=\"relative flex h-full w-full flex-col items-center justify-center perspective-[1000px]\">\n          {items.map((item, i) => {\n            return (\n              <motion.div\n                className=\"bg-card border-border absolute flex w-[270px] items-center rounded-lg border px-3 py-3 shadow-sm backdrop-blur-2xl\"\n                key={i}\n                animate={isExpanded ? 'expanded' : 'collapsed'}\n                style={{\n                  height: CARD_HEIGHT,\n                }}\n                variants={{\n                  expanded: {\n                    y: (items.length - 1 - i) * (CARD_HEIGHT + GAP),\n                    z: 10,\n                  },\n                  collapsed: {\n                    y: i * COLLAPSED_OFFSET,\n                    z: i * 60,\n                  },\n                }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 23,\n                }}\n              >\n                <div className=\"flex w-full items-center font-sans\">\n                  <div\n                    key={i}\n                    className=\"text-foreground flex w-full items-center gap-x-2\"\n                  >\n                    <div className=\"bg-primary text-primary-foreground flex size-10 items-center justify-center rounded-lg\">\n                      <item.icon size={24} />\n                    </div>\n                    <div className=\"leading-tighter flex-1\">\n                      <h3 className=\"text-foreground text-sm\">{item.title}</h3>\n                      <p className=\"text-muted-foreground text-xs\">\n                        {item.location}\n                      </p>\n                    </div>\n\n                    <span className=\"leading-tighter text-muted-foreground mb-[2px] ml-5 self-end text-end text-xs\">\n                      {item.date}\n                    </span>\n                  </div>\n                </div>\n              </motion.div>\n            );\n          })}\n          <motion.div\n            className=\"border-border bg-card text-foreground absolute cursor-pointer rounded-lg border px-4 py-2 shadow-sm\"\n            animate={{\n              y: isExpanded\n                ? (items.length - 1) * (CARD_HEIGHT + GAP) + CARD_HEIGHT + GAP\n                : CARD_HEIGHT + GAP,\n              z: isExpanded ? 0 : 40,\n            }}\n            transition={{\n              type: 'spring',\n              stiffness: 200,\n              damping: 25,\n            }}\n            layout\n            onClick={() => {\n              setIsExpanded((prev) => !prev);\n            }}\n          >\n            <AnimatePresence mode=\"popLayout\">\n              <motion.span\n                layout\n                key={isExpanded ? 'hide' : 'show'}\n                initial={{\n                  opacity: 0,\n                }}\n                animate={{\n                  opacity: 1,\n                }}\n                exit={{\n                  opacity: 0,\n                }}\n                transition={{\n                  duration: 0.2,\n                }}\n              >\n                {' '}\n                {isExpanded ? 'Hide ' : 'Show '}\n              </motion.span>\n            </AnimatePresence>\n          </motion.div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "macos-sidebar",
      "type": "registry:component",
      "title": "macOS Sidebar",
      "description": "A premium macOS-style collapsible sidebar with smooth spring-driven width transitions, hover morphing, and tactile selection feedback.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/macos-sidebar.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport { PlusSignIcon, SidebarLeftIcon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { motion, AnimatePresence } from \"motion/react\";\nimport { useState, type ReactNode } from \"react\";\n\nexport interface MacOSSidebarProps {\n  items: string[];\n  defaultOpen?: boolean;\n  initialSelectedIndex?: number;\n  children?: ReactNode;\n  className?: string;\n}\n\nexport function MacOSSidebar({\n  items,\n  defaultOpen = true,\n  initialSelectedIndex = 0,\n  children,\n  className = \"\",\n}: MacOSSidebarProps) {\n  const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n  const [selectedIndex, setSelectedIndex] =\n    useState<number>(initialSelectedIndex);\n  const [isOpen, setIsOpen] = useState<boolean>(defaultOpen);\n\n  return (\n    <div\n      className={`flex bg-neutral-200 dark:bg-neutral-900 rounded-3xl p-3 relative w-full sm:min-w-[480px] overflow-hidden ${className}`}\n    >\n      <motion.div\n        animate={{\n          width: isOpen ? 240 : 64,\n        }}\n        transition={{ type: \"spring\", bounce: 0.4, duration: 0.8 }}\n        className={`p-2 rounded-2xl shrink-0 flex flex-col items-start transition-colors duration-900 ease-out ${\n          isOpen ? \"bg-neutral-100 dark:bg-neutral-800\" : \"bg-transparent\"\n        }`}\n      >\n        <div\n          className={`flex items-center w-full ${\n            isOpen ? \"justify-end gap-4\" : \"justify-center\"\n          } text-neutral-700 dark:text-neutral-300 p-2 shrink-0`}\n        >\n          <AnimatePresence>\n            {isOpen && (\n              <motion.div\n                initial={{ opacity: 0, scale: 0.8 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.8 }}\n                transition={{ duration: 0.2 }}\n              >\n                <HugeiconsIcon\n                  icon={PlusSignIcon}\n                  className=\"size-5 cursor-pointer\"\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n          <motion.div\n            layout\n            className=\"shrink-0 flex items-center justify-center\"\n          >\n            <HugeiconsIcon\n              icon={SidebarLeftIcon}\n              className=\"size-5 cursor-pointer\"\n              onClick={() => setIsOpen(!isOpen)}\n            />\n          </motion.div>\n        </div>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{ opacity: 0, filter: \"blur(4px)\" }}\n              animate={{ opacity: 1, filter: \"blur(0px)\" }}\n              exit={{ opacity: 0, filter: \"blur(4px)\" }}\n              transition={{ duration: 0.2, ease: \"easeOut\" }}\n              className=\"flex flex-col gap-2 mt-4 w-full relative z-10 whitespace-nowrap\"\n              onMouseLeave={() => setHoveredIndex(null)}\n            >\n              {items.map((item, index) => (\n                <div\n                  key={item}\n                  className=\"relative cursor-pointer\"\n                  onMouseEnter={() => setHoveredIndex(index)}\n                  onClick={() => setSelectedIndex(index)}\n                >\n                  <AnimatePresence>\n                    {selectedIndex === index && (\n                      <motion.div\n                        className=\"absolute inset-0 z-0 bg-neutral-200 dark:bg-neutral-700 rounded-md\"\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        transition={{ duration: 0.2, ease: \"easeOut\" }}\n                      />\n                    )}\n                  </AnimatePresence>\n                  <p\n                    className={`relative z-10 px-5 py-3 tracking-tight ${\n                      selectedIndex === index\n                        ? \"text-neutral-900 dark:text-neutral-100 font-medium\"\n                        : \"text-neutral-700 dark:text-neutral-200/50\"\n                    }`}\n                  >\n                    {item}\n                  </p>\n                  <AnimatePresence>\n                    {hoveredIndex === index && selectedIndex !== index && (\n                      <motion.span\n                        layoutId=\"sidebar-hover-bg\"\n                        className=\"absolute inset-0 z-0 bg-neutral-200/50 dark:bg-neutral-900/50 rounded-md\"\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        transition={{\n                          type: \"spring\",\n                          stiffness: 350,\n                          damping: 30,\n                        }}\n                      />\n                    )}\n                  </AnimatePresence>\n                </div>\n              ))}\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n\n      <div className=\"flex-1 w-full h-full min-h-full overflow-y-auto z-0 pl-4 lg:pl-8\">\n        {children}\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "macos-sidebar-base",
      "type": "registry:component",
      "title": "macOS Sidebar (base)",
      "description": "Theme-ready base variant of A premium macOS-style collapsible sidebar with smooth spring-driven width transitions, hover morphing, and tactile selection feedback..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/macos-sidebar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { PlusSignIcon, SidebarLeftIcon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useState, type ReactNode } from 'react';\n\nexport interface MacOSSidebarProps {\n  items: string[];\n  defaultOpen?: boolean;\n  initialSelectedIndex?: number;\n  children?: ReactNode;\n  className?: string;\n}\n\nexport function MacOSSidebar({\n  items,\n  defaultOpen = true,\n  initialSelectedIndex = 0,\n  children,\n  className = '',\n}: MacOSSidebarProps) {\n  const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n  const [selectedIndex, setSelectedIndex] =\n    useState<number>(initialSelectedIndex);\n  const [isOpen, setIsOpen] = useState<boolean>(defaultOpen);\n\n  return (\n    <div\n      className={`theme-injected bg-muted relative flex w-full overflow-hidden rounded-lg p-3 sm:min-w-[480px] ${className}`}\n    >\n      <motion.div\n        animate={{\n          width: isOpen ? 240 : 64,\n        }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.8 }}\n        className={`flex shrink-0 flex-col items-start rounded-lg p-2 transition-colors duration-900 ease-out ${\n          isOpen ? 'bg-background' : 'bg-transparent'\n        }`}\n      >\n        <div\n          className={`flex w-full items-center ${\n            isOpen ? 'justify-end gap-4' : 'justify-center'\n          } text-muted-foreground shrink-0 p-2`}\n        >\n          <AnimatePresence>\n            {isOpen && (\n              <motion.div\n                initial={{ opacity: 0, scale: 0.8 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.8 }}\n                transition={{ duration: 0.2 }}\n              >\n                <HugeiconsIcon\n                  icon={PlusSignIcon}\n                  className=\"size-5 cursor-pointer\"\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n          <motion.div\n            layout\n            className=\"flex shrink-0 items-center justify-center\"\n          >\n            <HugeiconsIcon\n              icon={SidebarLeftIcon}\n              className=\"size-5 cursor-pointer\"\n              onClick={() => setIsOpen(!isOpen)}\n            />\n          </motion.div>\n        </div>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{ opacity: 0, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, filter: 'blur(4px)' }}\n              transition={{ duration: 0.2, ease: 'easeOut' }}\n              className=\"relative z-10 mt-4 flex w-full flex-col gap-2 whitespace-nowrap\"\n              onMouseLeave={() => setHoveredIndex(null)}\n            >\n              {items.map((item, index) => (\n                <div\n                  key={item}\n                  className=\"relative cursor-pointer\"\n                  onMouseEnter={() => setHoveredIndex(index)}\n                  onClick={() => setSelectedIndex(index)}\n                >\n                  <AnimatePresence>\n                    {selectedIndex === index && (\n                      <motion.div\n                        className=\"bg-accent absolute inset-0 z-0 rounded-lg\"\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        transition={{ duration: 0.2, ease: 'easeOut' }}\n                      />\n                    )}\n                  </AnimatePresence>\n                  <p\n                    className={`relative z-10 px-5 py-3 tracking-tight ${\n                      selectedIndex === index\n                        ? 'text-foreground font-medium'\n                        : 'text-muted-foreground'\n                    }`}\n                  >\n                    {item}\n                  </p>\n                  <AnimatePresence>\n                    {hoveredIndex === index && selectedIndex !== index && (\n                      <motion.span\n                        layoutId=\"sidebar-hover-bg\"\n                        className=\"bg-accent/50 absolute inset-0 z-0 rounded-lg\"\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 350,\n                          damping: 30,\n                        }}\n                      />\n                    )}\n                  </AnimatePresence>\n                </div>\n              ))}\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n\n      <div className=\"z-0 h-full min-h-full w-full flex-1 overflow-y-auto pl-4 lg:pl-8\">\n        {children}\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "meeting-card",
      "type": "registry:component",
      "title": "Meeting Card",
      "description": "Summarize meeting details with time, participants, and quick action controls.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/meeting-card.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n    ChevronUp, Calendar, Clock, Bell, Video, Users,\n    Link as LinkIcon, MoreHorizontal\n} from 'lucide-react';\n\ninterface Participant {\n    name: string;\n    avatar: string;\n}\n\ninterface MeetingCardProps {\n    title: string;\n    date: string;\n    time: string;\n    duration: string;\n    meetingLink: string;\n    notification: string;\n    recording?: boolean;\n    aiNotes?: boolean;\n    participants: Participant[];\n    description: string;\n}\n\nexport const MeetingCard: React.FC<MeetingCardProps> = ({\n    title, date, time, duration, meetingLink, notification,\n    participants, description\n}) => {\n    const [expanded, setExpanded] = useState(true);\n    const [theme] = useState<'light' | 'dark'>('light');\n    const [isRecording, setIsRecording] = useState(true);\n    const [isAiEnabled, setIsAiEnabled] = useState(true);\n\n    const spring = { type: 'spring', stiffness: 300, damping: 30 } as const;\n\n    return (\n        <div className={theme === 'dark' ? 'dark' : ''}>\n            <div className=\"w-full mt-12 flex flex-col items-center justify-center p-2 sm:p-6 relative bg-transparent\">\n                <div className=\"w-full max-w-full lg:w-100 lg:max-w-100 \">\n                    <motion.div\n                        layout=\"position\"\n                        transition={spring}\n                        className=\"w-full bg-[#F5F5F7] dark:bg-[#161616] border border-[#E5E5E5] dark:border-white/10 rounded-xl shadow-lg overflow-hidden\"\n                    >\n                        <div\n                            className=\"flex items-center justify-between p-4 cursor-pointer select-none gap-2\"\n                            onClick={() => setExpanded(!expanded)}\n                        >\n                            <div className=\"flex items-center gap-3 min-w-0\">\n                                <div className=\"w-9 h-9 bg-[#BB89FA] rounded-[10px] flex items-center justify-center shrink-0\">\n                                    <Calendar size={18} className=\"text-white\" />\n                                </div>\n                                <div className=\"min-w-0\">\n                                    <p className=\"font-bold text-[14px] text-[#1A1A1A] dark:text-[#EDEDED] truncate\">{title}</p>\n                                    <p className=\"text-[11px] text-[#6B7280] dark:text-gray-500\">Today, {time}</p>\n                                </div>\n                            </div>\n\n                            <div className=\"flex items-center gap-2 sm:gap-3 shrink-0\">\n                                <div className=\"flex -space-x-2 overflow-hidden\">\n                                    {participants.slice(0, 3).map((p, i) => (\n                                        <img key={i} src={p.avatar} className=\"w-6 h-6 rounded-full border-2 border-white dark:border-[#161616] object-cover\" alt={p.name} />\n                                    ))}\n                                </div>\n                                <motion.div\n                                    animate={{ rotate: expanded ? 0 : 180 }}\n                                    className=\"w-8 h-8 rounded-lg border border-[#E5E5E5] dark:border-white/10 flex items-center justify-center text-[#9CA3AF]\"\n                                >\n                                    <ChevronUp size={18} />\n                                </motion.div>\n                            </div>\n                        </div>\n\n                        <AnimatePresence initial={false} mode=\"sync\">\n                            {expanded && (\n                                <motion.div\n                                    initial={{ height: 0, opacity: 0 }}\n                                    animate={{ height: 'auto', opacity: 1 }}\n                                    exit={{ height: 0, opacity: 0 }}\n                                    transition={spring}\n                                    className=\"overflow-hidden\"\n                                >\n                                    <div className=\"p-4 space-y-4 text-[13px] text-[#555D6B] dark:text-gray-400 border-t-[1.4px] border-[#E9E8EF] dark:border-white/5 bg-white dark:bg-[#1C1C1C] rounded-t-[24px]\">\n                                        <Row icon={<Calendar size={15} />} label=\"Date\">\n                                            <Tag>{date}</Tag>\n                                        </Row>\n\n                                        <Row icon={<Clock size={15} />} label=\"Time\">\n                                            <div className=\"flex items-center gap-1 flex-wrap justify-end\">\n                                                <Tag>{time}</Tag>\n                                                <span className='text-[11px] dark:text-gray-500'>to</span>\n                                                <Tag>{duration}</Tag>\n                                            </div>\n                                        </Row>\n\n                                        <Row icon={<Video size={15} />} label=\"Link\">\n                                            <Tag className=\"max-w-30 xs:max-w-[180px] sm:max-w-none\">\n                                                <LinkIcon size={12} className=\"shrink-0\" />\n                                                <span className=\"truncate\">{meetingLink}</span>\n                                            </Tag>\n                                        </Row>\n\n                                        <Row icon={<Bell size={15} />} label=\"Notification\">\n                                            <Tag>{notification}</Tag>\n                                        </Row>\n\n                                        <Row icon={<Video size={15} />} label=\"Recording\">\n                                            <Toggle active={isRecording} onChange={setIsRecording} />\n                                        </Row>\n\n                                        <Row icon={<Users size={15} />} label=\"AI notetaking\">\n                                            <Toggle active={isAiEnabled} onChange={setIsAiEnabled} />\n                                        </Row>\n\n                                        {/* Participants */}\n                                        <div className=\"pt-3 border-t border-[#EFEFEF] dark:border-white/5 space-y-2\">\n                                            <p className=\"text-[12px] font-medium text-[#6B7280] dark:text-gray-500\">Participants</p>\n                                            <div className=\"flex items-center gap-2 flex-wrap\">\n                                                {participants.map((p, i) => (\n                                                    <div key={i} className=\"flex items-center gap-2 px-2 py-1 bg-[#F5F5F7] dark:bg-white/5 border border-[#E5E5E5] dark:border-white/10 rounded-full\">\n                                                        <img src={p.avatar} className=\"w-5 h-5 rounded-full\" alt=\"\" />\n                                                        <span className=\"text-[12px] font-medium text-[#1A1A1A] dark:text-gray-300\">{p.name}</span>\n                                                    </div>\n                                                ))}\n                                            </div>\n                                        </div>\n\n                                        {/* Description */}\n                                        <div className=\"pt-3 border-t border-[#EFEFEF] dark:border-white/5\">\n                                            <p className=\"text-[12px] font-medium text-[#6B7280] dark:text-gray-500 mb-1\">Description</p>\n                                            <p className=\"text-[12px] text-[#4B5563] dark:text-gray-400 leading-relaxed\">{description}</p>\n                                        </div>\n                                    </div>\n\n                                    {/* Footer */}\n                                    <div className=\"p-3 flex flex-wrap items-center justify-between gap-3 bg-[#F5F5F7] dark:bg-[#161616] border-t dark:border-white/5\">\n                                        <p className=\"text-[13px] text-[#6B7280] dark:text-gray-500 font-medium\">Going?</p>\n                                        <div className=\"flex items-center gap-1.5 flex-wrap sm:flex-nowrap\">\n                                            {['Yes', 'No', 'Maybe'].map((opt) => (\n                                                <button\n                                                    key={opt}\n                                                    className=\"px-2.5 sm:px-3 py-1 rounded-full border border-[#E5E5E5] dark:border-white/10 text-[11px] sm:text-[12px] font-medium text-[#374151] dark:text-gray-300 bg-white dark:bg-white/5 active:bg-gray-200 dark:active:bg-white/10 transition-colors\"\n                                                >\n                                                    {opt}\n                                                </button>\n                                            ))}\n                                            <MoreHorizontal size={16} className=\"text-[#9CA3AF] ml-1 cursor-pointer hidden xs:block\" />\n                                        </div>\n                                    </div>\n                                </motion.div>\n                            )}\n                        </AnimatePresence>\n                    </motion.div>\n                </div>\n            </div>\n        </div>\n    );\n};\n\nconst Row = ({ icon, label, children }: { icon: React.ReactNode; label: string; children: React.ReactNode; }) => (\n    <div className=\"flex items-center justify-between gap-2\">\n        <div className=\"flex items-center gap-2 text-[#6B7280] dark:text-gray-500 shrink-0\">\n            {icon}\n            <span className=\"text-[12px] font-medium whitespace-nowrap\">{label}</span>\n        </div>\n        <div className=\"flex-1 flex justify-end min-w-0\">{children}</div>\n    </div>\n);\n\nconst Tag = ({ children, className = \"\" }: { children: React.ReactNode; className?: string }) => (\n    <div className={`flex items-center gap-1 px-2 py-1 rounded-full border border-[#E5E5E5] dark:border-white/10 text-[12px] text-[#374151] dark:text-gray-300 bg-[#FAFAFA] dark:bg-white/5 whitespace-nowrap overflow-hidden ${className}`}>\n        {children}\n    </div>\n);\n\nconst Toggle = ({ active, onChange }: { active: boolean; onChange: (v: boolean) => void; }) => {\n    return (\n        <div\n            onClick={() => onChange(!active)}\n            className={`w-9 h-5 rounded-full px-1 flex items-center cursor-pointer transition-colors duration-200 ${active ? \"bg-[#EAF7EA] dark:bg-green-500/20\" : \"bg-[#F3F4F6] dark:bg-white/10\"\n                }`}\n        >\n            <motion.div\n                layout\n                transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\n                animate={{ x: active ? 16 : 0 }}\n                className={`w-3.5 h-3.5 rounded-full shadow-sm ${active ? \"bg-[#22C55E]\" : \"bg-[#9CA3AF]\"\n                    }`}\n            />\n        </div>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "meeting-card-base",
      "type": "registry:component",
      "title": "Meeting Card (base)",
      "description": "Theme-ready base variant of Summarize meeting details with time, participants, and quick action controls..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/meeting-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  ChevronUp,\n  Calendar,\n  Clock,\n  Bell,\n  Video,\n  Users,\n  Link as LinkIcon,\n  MoreHorizontal,\n} from 'lucide-react';\n\ninterface Participant {\n  name: string;\n  avatar: string;\n}\n\ninterface MeetingCardProps {\n  title: string;\n  date: string;\n  time: string;\n  duration: string;\n  meetingLink: string;\n  notification: string;\n  recording?: boolean;\n  aiNotes?: boolean;\n  participants: Participant[];\n  description: string;\n}\n\nexport const MeetingCard: React.FC<MeetingCardProps> = ({\n  title,\n  date,\n  time,\n  duration,\n  meetingLink,\n  notification,\n  participants,\n  description,\n}) => {\n  const [expanded, setExpanded] = useState(true);\n  const [theme] = useState<'light' | 'dark'>('light');\n  const [isRecording, setIsRecording] = useState(true);\n  const [isAiEnabled, setIsAiEnabled] = useState(true);\n\n  const spring = { type: 'spring', stiffness: 300, damping: 30 } as const;\n\n  return (\n    <div className={`theme-injected ${theme === 'dark' ? 'dark' : ''}`}>\n      <div className=\"relative mt-12 flex w-full flex-col items-center justify-center p-2 sm:p-6\">\n        <div className=\"w-full max-w-full lg:w-100 lg:max-w-100\">\n          <motion.div\n            layout=\"size\"\n            transition={spring}\n            className=\"bg-card text-card-foreground border-border w-full overflow-hidden rounded-xl border shadow-lg\"\n          >\n            <div\n              className=\"flex cursor-pointer items-center justify-between gap-2 p-4 select-none\"\n              onClick={() => setExpanded(!expanded)}\n            >\n              <div className=\"flex min-w-0 items-center gap-3\">\n                <div className=\"bg-primary flex h-9 w-9 shrink-0 items-center justify-center rounded-md\">\n                  <Calendar size={18} className=\"text-primary-foreground\" />\n                </div>\n                <div className=\"min-w-0\">\n                  <p className=\"text-foreground truncate text-sm font-bold\">\n                    {title}\n                  </p>\n                  <p className=\"text-muted-foreground text-xs\">Today, {time}</p>\n                </div>\n              </div>\n\n              <div className=\"flex shrink-0 items-center gap-2 sm:gap-3\">\n                <div className=\"flex -space-x-2 overflow-hidden\">\n                  {participants.slice(0, 3).map((p, i) => (\n                    <img\n                      key={i}\n                      src={p.avatar}\n                      className=\"border-background h-6 w-6 rounded-full border-2 object-cover\"\n                      alt={p.name}\n                    />\n                  ))}\n                </div>\n                <motion.div\n                  animate={{ rotate: expanded ? 0 : 180 }}\n                  className=\"border-border bg-background text-muted-foreground flex h-8 w-8 items-center justify-center rounded-md border\"\n                >\n                  <ChevronUp size={18} />\n                </motion.div>\n              </div>\n            </div>\n\n            <AnimatePresence initial={false} mode=\"sync\">\n              {expanded && (\n                <motion.div\n                  initial={{ height: 0, opacity: 0 }}\n                  animate={{ height: 'auto', opacity: 1 }}\n                  exit={{ height: 0, opacity: 0 }}\n                  transition={spring}\n                  className=\"overflow-hidden\"\n                >\n                  <div className=\"text-muted-foreground border-border bg-background space-y-4 rounded-t-xl border-t p-4 text-sm\">\n                    <Row icon={<Calendar size={15} />} label=\"Date\">\n                      <Tag>{date}</Tag>\n                    </Row>\n\n                    <Row icon={<Clock size={15} />} label=\"Time\">\n                      <div className=\"flex flex-wrap items-center justify-end gap-1\">\n                        <Tag>{time}</Tag>\n                        <span className=\"text-muted-foreground text-xs\">\n                          to\n                        </span>\n                        <Tag>{duration}</Tag>\n                      </div>\n                    </Row>\n\n                    <Row icon={<Video size={15} />} label=\"Link\">\n                      <Tag className=\"xs:max-w-44 max-w-32 sm:max-w-56 md:max-w-64 lg:max-w-72\">\n                        <LinkIcon size={12} className=\"shrink-0\" />\n                        <span className=\"truncate\">{meetingLink}</span>\n                      </Tag>\n                    </Row>\n\n                    <Row icon={<Bell size={15} />} label=\"Notification\">\n                      <Tag>{notification}</Tag>\n                    </Row>\n\n                    <Row icon={<Video size={15} />} label=\"Recording\">\n                      <Toggle active={isRecording} onChange={setIsRecording} />\n                    </Row>\n\n                    <Row icon={<Users size={15} />} label=\"AI notetaking\">\n                      <Toggle active={isAiEnabled} onChange={setIsAiEnabled} />\n                    </Row>\n\n                    {/* Participants */}\n                    <div className=\"border-border space-y-2 border-t pt-3\">\n                      <p className=\"text-muted-foreground text-xs font-medium\">\n                        Participants\n                      </p>\n                      <div className=\"flex flex-wrap items-center gap-2\">\n                        {participants.map((p, i) => (\n                          <div\n                            key={i}\n                            className=\"bg-muted/50 border-border flex items-center gap-2 rounded-md border px-2 py-1\"\n                          >\n                            <img\n                              src={p.avatar}\n                              className=\"h-5 w-5 rounded-full\"\n                              alt=\"\"\n                            />\n                            <span className=\"text-foreground text-xs font-medium\">\n                              {p.name}\n                            </span>\n                          </div>\n                        ))}\n                      </div>\n                    </div>\n\n                    {/* Description */}\n                    <div className=\"border-border border-t pt-3\">\n                      <p className=\"text-muted-foreground mb-1 text-xs font-medium\">\n                        Description\n                      </p>\n                      <p className=\"text-muted-foreground text-xs leading-relaxed\">\n                        {description}\n                      </p>\n                    </div>\n                  </div>\n\n                  {/* Footer */}\n                  <div className=\"bg-muted/40 border-border flex flex-wrap items-center justify-between gap-3 border-t p-3\">\n                    <p className=\"text-muted-foreground text-sm font-medium\">\n                      Going?\n                    </p>\n                    <div className=\"flex flex-wrap items-center gap-1.5 sm:flex-nowrap\">\n                      {['Yes', 'No', 'Maybe'].map((opt) => (\n                        <button\n                          key={opt}\n                          className=\"border-border text-foreground bg-background active:bg-accent rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm\"\n                        >\n                          {opt}\n                        </button>\n                      ))}\n                      <MoreHorizontal\n                        size={16}\n                        className=\"text-muted-foreground xs:block ml-1 hidden cursor-pointer\"\n                      />\n                    </div>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst Row = ({\n  icon,\n  label,\n  children,\n}: {\n  icon: React.ReactNode;\n  label: string;\n  children: React.ReactNode;\n}) => (\n  <div className=\"flex items-center justify-between gap-2\">\n    <div className=\"text-muted-foreground flex shrink-0 items-center gap-2\">\n      {icon}\n      <span className=\"text-xs font-medium whitespace-nowrap\">{label}</span>\n    </div>\n    <div className=\"flex min-w-0 flex-1 justify-end\">{children}</div>\n  </div>\n);\n\nconst Tag = ({\n  children,\n  className = '',\n}: {\n  children: React.ReactNode;\n  className?: string;\n}) => (\n  <div\n    className={`border-border text-foreground bg-muted/40 flex items-center gap-1 overflow-hidden rounded-md border px-2 py-1 text-xs whitespace-nowrap ${className}`}\n  >\n    {children}\n  </div>\n);\n\nconst Toggle = ({\n  active,\n  onChange,\n}: {\n  active: boolean;\n  onChange: (v: boolean) => void;\n}) => {\n  return (\n    <div\n      onClick={() => onChange(!active)}\n      className={`flex h-6 w-10 cursor-pointer items-center rounded-full px-1 transition-colors duration-200 ${\n        active ? 'bg-primary/20' : 'bg-muted'\n      }`}\n    >\n      <motion.div\n        layout\n        transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n        animate={{ x: active ? 16 : 0 }}\n        className={`h-4 w-4 rounded-full shadow-xs ${\n          active ? 'bg-primary' : 'bg-muted-foreground'\n        }`}\n      />\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "minimal-carousel",
      "type": "registry:component",
      "title": "Minimal Carousel",
      "description": "Interactive wallet interface with expandable cards featuring smooth layout animations and micro-interactions.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/minimal-carousel.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"motion/react\";\nimport { MoreHorizontal, Copy } from \"lucide-react\";\n\n/* --- Types --- */\nexport interface CarouselCard {\n  id: string;\n  title: string;\n  value: string;\n  color: string;\n  icon: React.ElementType;\n}\n\ninterface MinimalCarouselProps {\n  cards: CarouselCard[];\n  onCopyClick?: (card: CarouselCard) => void;\n  onCustomizeClick?: (card: CarouselCard) => void;\n}\n\nexport const MinimalCarousel: React.FC<MinimalCarouselProps> = ({\n  cards,\n  onCopyClick,\n  onCustomizeClick,\n}) => {\n  const [activeId, setActiveId] = useState<string | null>(null);\n\n  const activeCard = cards.find((c) => c.id === activeId);\n  const secondaryCards = cards.filter((c) => c.id !== activeId);\n\n  const handleBackgroundClick = (e: React.MouseEvent) => {\n    if (e.target === e.currentTarget) setActiveId(null);\n  };\n\n  return (\n    <div className=\"min-h-full w-full flex items-center justify-center bg-transparent\">\n      <div\n        className=\"w-full flex flex-col items-center justify-center px-3 sm:px-4 select-none font-sans\"\n        onClick={handleBackgroundClick}\n      >\n        {/* Container  */}\n        <div className=\"w-full max-w-105\">\n          <motion.div layout className=\"flex flex-col gap-3\">\n\n            {/* Expanded Card */}\n            <AnimatePresence mode=\"popLayout\">\n              {activeCard && (\n                <motion.div\n                  key={activeCard.id}\n                  layoutId={activeCard.id}\n                  className={`relative flex w-full flex-col justify-between\n                             rounded-[28px] sm:rounded-[32px] p-4 sm:p-5 text-white shadow-2xl\n                             ${activeCard.color}\n                             min-h-42.5 sm:h-48`}\n                  transition={{ type: \"spring\", bounce: 0.2, duration: 0.6 }}\n                >\n                  <div className=\"flex items-start justify-between gap-2\">\n                    <div className=\"flex h-10 w-10 sm:h-11 sm:w-11 items-center justify-center rounded-full shrink-0\">\n                      <activeCard.icon size={38} className=\"sm:w-11 sm:h-11\" />\n                    </div>\n\n                    <motion.button\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      type=\"button\"\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        onCopyClick?.(activeCard);\n                      }}\n                      className=\"flex items-center gap-1.5 rounded-full bg-white/10\n                                 px-3 py-1.5 sm:px-4 sm:py-2 font-bold backdrop-blur-md \n                                 text-xs sm:text-base whitespace-nowrap\n                                 hover:bg-white/20 transition-colors\"\n                    >\n                      Copy <span className=\"hidden xs:inline\">Address</span> <Copy size={16} />\n                    </motion.button>\n                  </div>\n\n                  <div className=\"flex items-end justify-between mt-4\">\n                    <div className=\"overflow-hidden mr-2\">\n                      <h3 className=\"text-xl sm:text-2xl font-semibold opacity-90 leading-tight truncate\">\n                        {activeCard.title}\n                      </h3>\n                      <p className=\"text-lg sm:text-xl font-semibold tracking-tight opacity-60 truncate\">\n                        {activeCard.value}\n                      </p>\n                    </div>\n\n                    <button\n                      type=\"button\"\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        onCustomizeClick?.(activeCard);\n                      }}\n                      className=\"rounded-full bg-white/30 px-3 py-1 sm:px-4 sm:py-1.5\n                                 text-sm sm:text-base font-bold backdrop-blur-md \n                                 hover:bg-white/40 transition-colors shrink-0\"\n                    >\n                      Edit\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n\n            {/* Grid Layout */}\n            <motion.div\n              layout\n              className={`grid gap-2 sm:gap-3 transition-all duration-500 ${activeId ? \"grid-cols-3\" : \"grid-cols-2\"\n                }`}\n            >\n              {(activeId ? secondaryCards : cards).map((card) => (\n                <motion.div\n                  key={card.id}\n                  layoutId={card.id}\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    setActiveId(card.id);\n                  }}\n                  transition={{ type: \"spring\", bounce: 0.2, duration: 0.6 }}\n                  className={`relative flex flex-col justify-between cursor-pointer\n                             rounded-[22px] sm:rounded-[28px] p-3 sm:p-4 text-white shadow-lg\n                             ${card.color}\n                             ${activeId ? \"h-24 sm:h-28\" : \"h-28 sm:h-32\"}`}\n                >\n                  <div className=\"flex justify-between items-start\">\n                    <card.icon size={activeId ? 20 : 28} className=\"shrink-0\" />\n                    <div className=\"rounded-full bg-white/10 p-1 sm:p-1.5 transition-colors\">\n                      <MoreHorizontal size={16} />\n                    </div>\n                  </div>\n\n                  <div className=\"mt-1 overflow-hidden\">\n                    <h4 className={`${activeId ? \"text-[10px] sm:text-xs\" : \"text-sm sm:text-base\"} \n                                   font-medium opacity-90 truncate leading-tight`}>\n                      {card.title}\n                    </h4>\n                    <p className={`${activeId ? \"text-[10px] sm:text-xs\" : \"text-sm sm:text-base\"} \n                                   font-semibold text-white/60 truncate`}>\n                      {card.value}\n                    </p>\n                  </div>\n                </motion.div>\n              ))}\n            </motion.div>\n          </motion.div>\n        </div>\n      </div>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "minimal-carousel-base",
      "type": "registry:component",
      "title": "Minimal Carousel (base)",
      "description": "Theme-ready base variant of Interactive wallet interface with expandable cards featuring smooth layout animations and micro-interactions..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/minimal-carousel.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"motion/react\";\nimport { MoreHorizontal, Copy } from \"lucide-react\";\n\n/* --- Types --- */\nexport interface CarouselCard {\n  id: string;\n  title: string;\n  value: string;\n  color: string;\n  icon: React.ElementType;\n}\n\ninterface MinimalCarouselProps {\n  cards: CarouselCard[];\n  onCopyClick?: (card: CarouselCard) => void;\n  onCustomizeClick?: (card: CarouselCard) => void;\n}\n\nexport const MinimalCarousel: React.FC<MinimalCarouselProps> = ({\n  cards,\n  onCopyClick,\n  onCustomizeClick,\n}) => {\n  const [activeId, setActiveId] = useState<string | null>(null);\n\n  const activeCard = cards.find((c) => c.id === activeId);\n  const secondaryCards = cards.filter((c) => c.id !== activeId);\n\n  const handleBackgroundClick = (e: React.MouseEvent) => {\n    if (e.target === e.currentTarget) setActiveId(null);\n  };\n\n  return (\n    <div className=\"min-h-full w-full flex items-center justify-center bg-transparent theme-injected\">\n      <div\n        className=\"w-full flex flex-col items-center justify-center px-4 sm:px-5 select-none font-sans\"\n        onClick={handleBackgroundClick}\n      >\n        {/* Container  */}\n        <div className=\"w-full max-w-105\">\n          <motion.div layout className=\"flex flex-col gap-4\">\n\n            {/* Expanded Card */}\n            <AnimatePresence mode=\"popLayout\">\n              {activeCard && (\n                <motion.div\n                  key={activeCard.id}\n                  layoutId={activeCard.id}\n                  className={`relative flex w-full flex-col justify-between\n                             rounded-2xl sm:rounded-3xl border border-white/20 p-5 sm:p-6 text-white shadow-xl\n                             ${activeCard.color}\n                             min-h-42.5 sm:h-48`}\n                  transition={{ type: \"spring\", bounce: 0.2, duration: 0.6 }}\n                >\n                  <div className=\"flex items-start justify-between gap-2\">\n                    <div className=\"flex h-10 w-10 sm:h-11 sm:w-11 items-center justify-center rounded-full shrink-0\">\n                      <activeCard.icon size={38} className=\"sm:w-11 sm:h-11\" />\n                    </div>\n\n                    <motion.button\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      type=\"button\"\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        onCopyClick?.(activeCard);\n                      }}\n                      className=\"flex items-center gap-1.5 rounded-full border border-white/30 bg-white/15\n                                 px-3 py-1.5 sm:px-4 sm:py-2 font-bold backdrop-blur-md \n                                 text-xs sm:text-base whitespace-nowrap\n                                 hover:bg-white/20 transition-colors\"\n                    >\n                      Copy <span className=\"hidden xs:inline\">Address</span> <Copy size={16} />\n                    </motion.button>\n                  </div>\n\n                  <div className=\"flex items-end justify-between mt-4\">\n                    <div className=\"overflow-hidden mr-2\">\n                      <h3 className=\"text-xl sm:text-2xl font-semibold opacity-90 leading-tight truncate\">\n                        {activeCard.title}\n                      </h3>\n                      <p className=\"text-lg sm:text-xl font-semibold tracking-tight opacity-60 truncate\">\n                        {activeCard.value}\n                      </p>\n                    </div>\n\n                    <button\n                      type=\"button\"\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        onCustomizeClick?.(activeCard);\n                      }}\n                      className=\"rounded-full border border-white/30 bg-white/25 px-3 py-1.5 sm:px-4 sm:py-2\n                                 text-sm sm:text-base font-bold backdrop-blur-md \n                                 hover:bg-white/40 transition-colors shrink-0\"\n                    >\n                      Edit\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n\n            {/* Grid Layout */}\n            <motion.div\n              layout\n              className={`grid gap-3 sm:gap-4 transition-all duration-500 ${activeId ? \"grid-cols-3\" : \"grid-cols-2\"\n                }`}\n            >\n              {(activeId ? secondaryCards : cards).map((card) => (\n                <motion.div\n                  key={card.id}\n                  layoutId={card.id}\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    setActiveId(card.id);\n                  }}\n                  transition={{ type: \"spring\", bounce: 0.2, duration: 0.6 }}\n                  className={`relative flex flex-col justify-between cursor-pointer\n                             rounded-xl sm:rounded-2xl border border-white/15 p-3 sm:p-4 text-white shadow-md\n                             ${card.color}\n                             ${activeId ? \"h-24 sm:h-28\" : \"h-28 sm:h-32\"}`}\n                >\n                  <div className=\"flex justify-between items-start\">\n                    <card.icon size={activeId ? 20 : 28} className=\"shrink-0\" />\n                    <div className=\"rounded-full border border-white/25 bg-white/15 p-1 sm:p-1.5 transition-colors\">\n                      <MoreHorizontal size={16} />\n                    </div>\n                  </div>\n\n                  <div className=\"mt-1 overflow-hidden\">\n                    <h4 className={`${activeId ? \"text-xs sm:text-xs\" : \"text-sm sm:text-base\"} \n                                   font-medium opacity-90 truncate leading-tight`}>\n                      {card.title}\n                    </h4>\n                    <p className={`${activeId ? \"text-xs sm:text-xs\" : \"text-sm sm:text-base\"} \n                                   font-semibold text-white/60 truncate`}>\n                      {card.value}\n                    </p>\n                  </div>\n                </motion.div>\n              ))}\n            </motion.div>\n          </motion.div>\n        </div>\n      </div>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "morphing-button",
      "type": "registry:component",
      "title": "Morphing Button",
      "description": "An animated button that smoothly morphs into an expanded interactive state.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/morphing-button.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { FaBell } from 'react-icons/fa6';\n\ninterface MorphingButtonProps {\n  buttonText?: string;\n  placeholder?: string;\n  onSubmit?: (email: string) => void;\n  className?: string;\n}\n\nexport const MorphingButton: React.FC<MorphingButtonProps> = ({\n  buttonText = 'Notify Me',\n  placeholder = 'Email',\n  onSubmit,\n  className = '',\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [email, setEmail] = useState('');\n  const containerRef = useRef<HTMLDivElement>(null);\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target as Node)\n      ) {\n        setIsExpanded(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  useEffect(() => {\n    if (isExpanded && inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, [isExpanded]);\n\n  const handleToggle = (e: React.MouseEvent) => {\n    if (!isExpanded) {\n      e.stopPropagation();\n      setIsExpanded(true);\n    } else if (email) {\n      onSubmit?.(email);\n      setIsExpanded(false);\n      setEmail('');\n    }\n  };\n\n  const springConfig = {\n    type: 'spring',\n    stiffness: 240,\n    damping: 18,\n    mass: 1.1,\n  } as const;\n\n  return (\n    <div className=\"flex w-full flex-col items-center justify-center gap-12 p-8 transition-colors duration-500\">\n      <div\n        className={`flex items-center justify-center will-change-transform ${className}`}\n      >\n        <motion.div\n          ref={containerRef}\n          layout\n          transition={springConfig}\n          style={{ borderRadius: 32 }}\n          className={`relative flex items-center overflow-hidden border-[1.1px] border-[#e7e6e6a6] transition-colors duration-300 dark:border-white/5 ${\n            isExpanded\n              ? 'w-84 bg-[#F4F4F4] p-1 shadow-sm dark:bg-[#1C1C1E] dark:shadow-xl'\n              : 'w-auto bg-[#F4F4F4] p-0 dark:bg-[#1C1C1E]'\n          }`}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {isExpanded && (\n              <motion.div\n                key=\"input-container\"\n                initial={{ opacity: 0, x: -10 }}\n                animate={{ opacity: 1, x: 0 }}\n                exit={{ opacity: 0 }}\n                transition={{ ...springConfig }}\n                className=\"flex flex-1 items-center px-4\"\n              >\n                <motion.input\n                  ref={inputRef}\n                  layout\n                  type=\"email\"\n                  value={email}\n                  onChange={(e) => setEmail(e.target.value)}\n                  placeholder={placeholder}\n                  className=\"w-full bg-transparent text-xl font-semibold text-[#18181B] placeholder-[#A1A1AA] transition-colors outline-none dark:text-[#fefefe] dark:placeholder-[#B2B2B2]\"\n                  onKeyDown={(e) => {\n                    if (e.key === 'Enter' && email) {\n                      onSubmit?.(email);\n                      setIsExpanded(false);\n                      setEmail('');\n                    }\n                  }}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <motion.button\n            layout\n            onClick={handleToggle}\n            transition={springConfig}\n            className={`relative flex items-center justify-center gap-3 rounded-full font-bold whitespace-nowrap transition-colors duration-300 ${\n              isExpanded\n                ? 'bg-[#FEFEFE] px-5 py-3 text-black shadow-sm hover:bg-[#fafafa] dark:bg-[#2C2C2E] dark:text-white dark:shadow-lg dark:hover:bg-[#3A3A3C]'\n                : 'bg-[#F4F4F4] px-6 py-4 text-black hover:bg-[#ebeaea] dark:bg-[#1C1C1E] dark:text-white dark:hover:bg-[#252529]'\n            }`}\n          >\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {!isExpanded && (\n                <motion.span\n                  key=\"bell-icon\"\n                  layout\n                  className=\"origin-right\"\n                  initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                  transition={springConfig}\n                >\n                  <FaBell className=\"h-6 w-6 text-black/90 dark:text-[#fefefe]\" />\n                </motion.span>\n              )}\n            </AnimatePresence>\n\n            <motion.span layout=\"position\" className=\"text-xl tracking-tight\">\n              {buttonText}\n            </motion.span>\n          </motion.button>\n        </motion.div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "morphing-button-base",
      "type": "registry:component",
      "title": "Morphing Button (base)",
      "description": "Theme-ready base variant of An animated button that smoothly morphs into an expanded interactive state..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/morphing-button.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { FaBell } from 'react-icons/fa6';\n\ninterface MorphingButtonProps {\n  buttonText?: string;\n  placeholder?: string;\n  onSubmit?: (email: string) => void;\n  className?: string;\n}\n\nexport const MorphingButton: React.FC<MorphingButtonProps> = ({\n  buttonText = 'Notify Me',\n  placeholder = 'Email',\n  onSubmit,\n  className = '',\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [email, setEmail] = useState('');\n  const containerRef = useRef<HTMLDivElement>(null);\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target as Node)\n      ) {\n        setIsExpanded(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  useEffect(() => {\n    if (isExpanded && inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, [isExpanded]);\n\n  const handleToggle = (e: React.MouseEvent) => {\n    if (!isExpanded) {\n      e.stopPropagation();\n      setIsExpanded(true);\n    } else if (email) {\n      onSubmit?.(email);\n      setIsExpanded(false);\n      setEmail('');\n    }\n  };\n\n  const springConfig = {\n    type: 'spring',\n    stiffness: 240,\n    damping: 18,\n    mass: 1.1,\n  } as const;\n\n  return (\n    <div className=\"theme-injected flex w-full flex-col items-center justify-center gap-12 p-8 transition-colors duration-500\">\n      <div\n        className={`flex items-center justify-center will-change-transform ${className}`}\n      >\n        <motion.div\n          ref={containerRef}\n          layout\n          transition={springConfig}\n          className={`border-border/60 relative flex rounded-lg items-center overflow-hidden border-[1.1px] transition-colors duration-300 ${\n            isExpanded ? 'bg-card w-84 p-1 shadow-sm' : 'bg-card w-auto p-0'\n          }`}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {isExpanded && (\n              <motion.div\n                key=\"input-container\"\n                initial={{ opacity: 0, x: -10 }}\n                animate={{ opacity: 1, x: 0 }}\n                exit={{ opacity: 0 }}\n                transition={{ ...springConfig }}\n                className=\"flex flex-1 items-center px-4\"\n              >\n                <motion.input\n                  ref={inputRef}\n                  layout\n                  type=\"email\"\n                  value={email}\n                  onChange={(e) => setEmail(e.target.value)}\n                  placeholder={placeholder}\n                  className=\"text-card-foreground placeholder:text-muted-foreground w-full bg-transparent text-xl font-semibold transition-colors outline-none\"\n                  onKeyDown={(e) => {\n                    if (e.key === 'Enter' && email) {\n                      onSubmit?.(email);\n                      setIsExpanded(false);\n                      setEmail('');\n                    }\n                  }}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <motion.button\n            layout\n            onClick={handleToggle}\n            transition={springConfig}\n            className={`relative flex items-center justify-center gap-3 rounded-lg font-bold whitespace-nowrap transition-colors duration-300 ${\n              isExpanded\n                ? 'bg-primary text-primary-foreground hover:bg-primary/90 px-5 py-3 shadow-sm'\n                : 'bg-primary text-primary-foreground hover:bg-primary/90 px-6 py-4'\n            }`}\n          >\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {!isExpanded && (\n                <motion.span\n                  key=\"bell-icon\"\n                  layout\n                  className=\"origin-right\"\n                  initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                  transition={springConfig}\n                >\n                  <FaBell className=\"text-primary-foreground h-6 w-6\" />\n                </motion.span>\n              )}\n            </AnimatePresence>\n\n            <motion.span layout=\"position\" className=\"text-xl tracking-tight\">\n              {buttonText}\n            </motion.span>\n          </motion.button>\n        </motion.div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "morphing-discovery-bar",
      "type": "registry:component",
      "title": "Morphing Discovery Bar",
      "description": "A responsive extended toolbar component that enhances usability with smooth micro-interactions, contextual actions, and instant visual feedback for quick and confident user interactions.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/morphing-discovery-bar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Search, X } from 'lucide-react';\n\n/* ---------- Types ---------- */\nexport interface Category {\n  id: string;\n  label: string;\n  icon: React.ReactNode;\n  activeColor: string;\n  activeTextColor: string;\n}\n\nexport interface MorphingDiscoveryBarProps {\n  categories: Category[];\n  className?: string;\n}\n\n/* ---------- Motion Settings ---------- */\nconst transition = {\n  type: 'spring',\n  bounce: 0.3,\n  duration: 0.7,\n} as const;\n\nexport const MorphingDiscoveryBar: React.FC<MorphingDiscoveryBarProps> = ({\n  categories,\n  className = '',\n}) => {\n  const [isSearching, setIsSearching] = useState(false);\n  const [activeTab, setActiveTab] = useState(categories[0]?.id);\n  const [searchValue, setSearchValue] = useState('');\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (isSearching) {\n      const timer = setTimeout(() => inputRef.current?.focus(), 100);\n      return () => clearTimeout(timer);\n    }\n  }, [isSearching]);\n\n  return (\n    <div\n      className={`flex w-full flex-col items-center justify-center bg-transparent p-2 transition-colors duration-500 sm:p-4 ${className}`}\n    >\n      {/* Container height adjusted for mobile flow */}\n      <div className=\"flex h-20 w-full max-w-full items-center justify-center\">\n        <LayoutGroup>\n          <motion.div\n            layout\n            transition={transition}\n            className=\"flex max-w-full items-center gap-1.5 rounded-[32px] p-1.5 backdrop-blur-md sm:gap-3 sm:p-2\"\n          >\n            {/* SEARCH COMPONENT */}\n            <motion.div\n              layout\n              style={{ borderRadius: 28 }}\n              transition={transition}\n              className={`relative flex items-center overflow-hidden border shadow-sm transition-colors ${\n                isSearching\n                  ? 'xs:w-64 h-12 w-[calc(100vw-80px)] sm:h-14 sm:w-80'\n                  : 'h-12 w-12 sm:h-14 sm:w-14'\n              } border-neutral-100 bg-white dark:border-neutral-800 dark:bg-neutral-900`}\n            >\n              <div className=\"flex h-full w-full items-center justify-center px-3 sm:px-4\">\n                <motion.div layout=\"position\" transition={transition}>\n                  <Search\n                    size={18}\n                    strokeWidth={3}\n                    className=\"shrink-0 text-neutral-900 transition-colors dark:text-neutral-400\"\n                  />\n                </motion.div>\n\n                <AnimatePresence mode=\"wait\">\n                  {isSearching && (\n                    <motion.input\n                      key=\"search-input\"\n                      ref={inputRef}\n                      initial={{\n                        opacity: 0,\n                        scaleX: 0.6,\n                        scaleY: 0.8,\n                        filter: 'blur(4px)',\n                        transformOrigin: 'left center',\n                      }}\n                      animate={{\n                        opacity: 1,\n                        scaleX: 1,\n                        scaleY: 1,\n                        filter: 'blur(0px)',\n                      }}\n                      exit={{\n                        opacity: 0,\n                        scaleX: 0.6,\n                        scaleY: 0.8,\n                        filter: 'blur(4px)',\n                      }}\n                      transition={{ duration: 0.15 }}\n                      placeholder=\"Search\"\n                      className=\"ml-2 w-full border-none bg-transparent text-sm font-medium text-neutral-900 outline-none placeholder:text-neutral-400 sm:text-base dark:text-white dark:placeholder:text-neutral-600\"\n                      value={searchValue}\n                      onChange={(e) => setSearchValue(e.target.value)}\n                    />\n                  )}\n                </AnimatePresence>\n\n                {!isSearching && (\n                  <motion.button\n                    layoutId=\"search-click-overlay\"\n                    className=\"absolute inset-0 z-10 h-full w-full\"\n                    onClick={() => setIsSearching(true)}\n                  />\n                )}\n              </div>\n            </motion.div>\n\n            {/* CATEGORIES */}\n            <AnimatePresence mode=\"popLayout\">\n              {!isSearching ? (\n                <motion.div\n                  key=\"categories-list\"\n                  layout\n                  initial={{ opacity: 0, scale: 0.9, filter: 'blur(10px)' }}\n                  animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, scale: 0.9, filter: 'blur(10px)' }}\n                  transition={transition}\n                  className=\"flex items-center gap-1 overflow-hidden rounded-full border border-[#F0F0F0] bg-[#ffffff] p-1 dark:border-neutral-800 dark:bg-neutral-900\"\n                >\n                  {categories.map((cat) => {\n                    const isActive = activeTab === cat.id;\n\n                    return (\n                      <motion.button\n                        key={cat.id}\n                        layout\n                        onClick={() => setActiveTab(cat.id)}\n                        className={`relative z-0 flex items-center gap-1.5 rounded-full px-3 py-2 text-xs font-bold tracking-tight whitespace-nowrap transition-colors sm:gap-2 sm:px-6 sm:py-3 sm:text-lg`}\n                        style={{\n                          color: isActive ? cat.activeTextColor : undefined,\n                        }}\n                      >\n                        {!isActive && (\n                          <span className=\"absolute inset-0 flex items-center justify-center text-neutral-600 dark:text-neutral-400\" />\n                        )}\n\n                        {isActive && (\n                          <motion.div\n                            layoutId=\"pill-bg\"\n                            className=\"absolute inset-0 z-[-1] rounded-full bg-[(--active-bg)] shadow-sm dark:border dark:border-neutral-700 dark:bg-neutral-800\"\n                            style={\n                              {\n                                // @ts-ignore\n                                '--active-bg': cat.activeColor,\n                              } as React.CSSProperties\n                            }\n                            transition={transition}\n                          />\n                        )}\n                        <span className=\"relative z-10 scale-90 sm:scale-100\">\n                          {cat.icon}\n                        </span>\n                        <span\n                          className={`relative z-10 ${!isActive ? 'text-neutral-600 dark:text-neutral-400' : ''}`}\n                        >\n                          {cat.label}\n                        </span>\n                      </motion.button>\n                    );\n                  })}\n                </motion.div>\n              ) : (\n                <motion.button\n                  key=\"close-action\"\n                  layout\n                  initial={{\n                    width: 120,\n                    x: -80,\n                    scaleX: 1.5,\n                    scaleY: 0.8,\n                    opacity: 0,\n                    filter: 'blur(8px)',\n                    transformOrigin: 'left center',\n                  }}\n                  animate={{\n                    width: 56,\n                    x: 0,\n                    scaleX: 1,\n                    scaleY: 1,\n                    opacity: 1,\n                    filter: 'blur(0px)',\n                  }}\n                  exit={{\n                    width: 120,\n                    x: -80,\n                    scaleX: 1.5,\n                    scaleY: 0.8,\n                    opacity: 0,\n                    filter: 'blur(8px)',\n                  }}\n                  transition={transition}\n                  whileTap={{ scale: 0.9 }}\n                  onClick={() => {\n                    setIsSearching(false);\n                    setSearchValue('');\n                  }}\n                  className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full border border-neutral-100 bg-white text-neutral-900 shadow-sm transition-colors sm:h-14 sm:w-14 dark:border-neutral-800 dark:bg-neutral-900 dark:text-white\"\n                >\n                  <X size={18} strokeWidth={2.5} />\n                </motion.button>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "morphing-discovery-bar-base",
      "type": "registry:component",
      "title": "Morphing Discovery Bar (base)",
      "description": "Theme-ready base variant of A responsive extended toolbar component that enhances usability with smooth micro-interactions, contextual actions, and instant visual feedback for quick and confident user interactions..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/morphing-discovery-bar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Search, X } from 'lucide-react';\n\nexport interface Category {\n  id: string;\n  label: string;\n  icon: React.ReactNode;\n  activeColor: string;\n  activeTextColor: string;\n}\n\nexport interface MorphingDiscoveryBarProps {\n  categories: Category[];\n  className?: string;\n}\n\nconst transition = {\n  type: 'spring',\n  bounce: 0.3,\n  duration: 0.7,\n} as const;\n\nexport const MorphingDiscoveryBar: React.FC<MorphingDiscoveryBarProps> = ({\n  categories,\n  className = '',\n}) => {\n  const [isSearching, setIsSearching] = useState(false);\n  const [activeTab, setActiveTab] = useState(categories[0]?.id);\n  const [searchValue, setSearchValue] = useState('');\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (isSearching) {\n      const timer = setTimeout(() => inputRef.current?.focus(), 100);\n      return () => clearTimeout(timer);\n    }\n  }, [isSearching]);\n\n  return (\n    <div\n      className={`theme-injected flex w-full flex-col items-center justify-center bg-transparent p-2 transition-colors duration-500 sm:p-4 ${className}`}\n    >\n      <div className=\"flex h-20 w-full max-w-full items-center justify-center\">\n        <LayoutGroup>\n          <motion.div\n            layout\n            transition={transition}\n            className=\"flex max-w-full items-center gap-1.5 rounded-lg p-1.5 backdrop-blur-md sm:gap-3 sm:p-2\"\n          >\n            <motion.div\n              layout\n              style={{ borderRadius: 12 }}\n              transition={transition}\n              className={`relative flex items-center overflow-hidden border shadow-sm transition-colors ${\n                isSearching\n                  ? 'xs:w-64 h-12 w-[calc(100vw-80px)] sm:h-14 sm:w-80'\n                  : 'h-12 w-12 sm:h-14 sm:w-14'\n              } border-border bg-background`}\n            >\n              <div className=\"flex h-full w-full items-center justify-center px-3 sm:px-4\">\n                <motion.div layout=\"position\" transition={transition}>\n                  <Search\n                    size={18}\n                    strokeWidth={3}\n                    className=\"text-foreground shrink-0 transition-colors\"\n                  />\n                </motion.div>\n\n                <AnimatePresence mode=\"wait\">\n                  {isSearching && (\n                    <motion.input\n                      key=\"search-input\"\n                      ref={inputRef}\n                      initial={{\n                        opacity: 0,\n                        scaleX: 0.6,\n                        scaleY: 0.8,\n                        filter: 'blur(4px)',\n                        transformOrigin: 'left center',\n                      }}\n                      animate={{\n                        opacity: 1,\n                        scaleX: 1,\n                        scaleY: 1,\n                        filter: 'blur(0px)',\n                      }}\n                      exit={{\n                        opacity: 0,\n                        scaleX: 0.6,\n                        scaleY: 0.8,\n                        filter: 'blur(4px)',\n                      }}\n                      transition={{ duration: 0.15 }}\n                      placeholder=\"Search\"\n                      className=\"text-foreground placeholder:text-muted-foreground ml-2 w-full border-none bg-transparent text-sm font-medium outline-none sm:text-base\"\n                      value={searchValue}\n                      onChange={(e) => setSearchValue(e.target.value)}\n                    />\n                  )}\n                </AnimatePresence>\n\n                {!isSearching && (\n                  <motion.button\n                    layoutId=\"search-click-overlay\"\n                    className=\"absolute inset-0 z-10 h-full w-full\"\n                    onClick={() => setIsSearching(true)}\n                  />\n                )}\n              </div>\n            </motion.div>\n\n            <AnimatePresence mode=\"popLayout\">\n              {!isSearching ? (\n                <motion.div\n                  key=\"categories-list\"\n                  layout\n                  initial={{ opacity: 0, scale: 0.9, filter: 'blur(10px)' }}\n                  animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, scale: 0.9, filter: 'blur(10px)' }}\n                  transition={transition}\n                  className=\"border-border bg-background flex items-center gap-1 overflow-hidden rounded-lg border p-1\"\n                >\n                  {categories.map((cat) => {\n                    const isActive = activeTab === cat.id;\n\n                    return (\n                      <motion.button\n                        key={cat.id}\n                        layout\n                        onClick={() => setActiveTab(cat.id)}\n                        className=\"relative z-0 flex items-center gap-1.5 rounded-lg px-3 py-2 text-xs font-bold tracking-tight whitespace-nowrap transition-colors sm:gap-2 sm:px-6 sm:py-3 sm:text-lg\"\n                        style={{\n                          color: isActive ? cat.activeTextColor : undefined,\n                        }}\n                      >\n                        {!isActive && (\n                          <span className=\"text-muted-foreground absolute inset-0 flex items-center justify-center\" />\n                        )}\n\n                        {isActive && (\n                          <motion.div\n                            layoutId=\"pill-bg\"\n                            className=\"bg-foreground/10 absolute inset-0 z-0 rounded-lg shadow-sm\"\n                            // style={\n                            //   {\n                            //     '--active-bg': cat.activeColor,\n                            //   } as React.CSSProperties\n                            // }\n                            transition={transition}\n                          />\n                        )}\n                        <span\n                          className={`relative z-10 scale-90 sm:scale-100 ${\n                            !isActive\n                              ? 'text-muted-foreground'\n                              : 'text-primary'\n                          }`}\n                        >\n                          {cat.icon}\n                        </span>\n                        <span\n                          className={`relative z-10 ${\n                            !isActive\n                              ? 'text-muted-foreground'\n                              : 'text-primary'\n                          }`}\n                        >\n                          {cat.label}\n                        </span>\n                      </motion.button>\n                    );\n                  })}\n                </motion.div>\n              ) : (\n                <motion.button\n                  key=\"close-action\"\n                  layout\n                  initial={{\n                    width: 120,\n                    x: -80,\n                    scaleX: 1.5,\n                    scaleY: 0.8,\n                    opacity: 0,\n                    filter: 'blur(8px)',\n                    transformOrigin: 'left center',\n                  }}\n                  animate={{\n                    width: 56,\n                    x: 0,\n                    scaleX: 1,\n                    scaleY: 1,\n                    opacity: 1,\n                    filter: 'blur(0px)',\n                  }}\n                  exit={{\n                    width: 120,\n                    x: -80,\n                    scaleX: 1.5,\n                    scaleY: 0.8,\n                    opacity: 0,\n                    filter: 'blur(8px)',\n                  }}\n                  transition={transition}\n                  whileTap={{ scale: 0.9 }}\n                  onClick={() => {\n                    setIsSearching(false);\n                    setSearchValue('');\n                  }}\n                  className=\"border-border bg-background text-foreground flex h-12 w-12 shrink-0 items-center justify-center rounded-lg border shadow-sm transition-colors sm:h-14 sm:w-14\"\n                >\n                  <X size={18} strokeWidth={2.5} />\n                </motion.button>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "morphing-sidebar-controls",
      "type": "registry:component",
      "title": "Morphing Sidebar Controls",
      "description": "A premium morphing sidebar control panel with progressive configuration, motion presets, and animated layout transitions for advanced animation workflows.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/morphing-sidebar-controls.tsx",
          "type": "registry:component",
          "content": "import {\n  ArrowLeft02Icon,\n  ArrowRight04Icon,\n  PlayIcon,\n  PlusSignIcon,\n  ZapIcon,\n} from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface MorphingSidebarControlsProps {\n  title?: string;\n  configOptions?: { label: string; value: string | number }[];\n  primaryFeatureName?: string;\n  secondaryFeatureName?: string;\n  asymmetricOptionsName?: string;\n  tabs?: [string, string];\n  types?: string[];\n  easeOptions?: { icons: React.ReactNode; title: string }[];\n  sliderConfigs?: {\n    name: string;\n    insertion: [string | number, string | number];\n    removal: [string | number, string | number];\n  }[];\n  onAddProperty?: () => void;\n  onFeatureToggle?: (isActive: boolean) => void;\n  onAsymmetricToggle?: (isActive: boolean) => void;\n  onTabChange?: (tab: string) => void;\n  onTypeChange?: (type: string) => void;\n  onEaseChange?: (easeTitle: string) => void;\n}\n\nexport default function MorphingSidebarControls({\n  title = 'Configuration',\n  configOptions = [\n    { label: 'Width', value: '300' },\n    { label: 'Height', value: '300' },\n  ],\n  primaryFeatureName = 'Visual Change',\n  secondaryFeatureName = 'Transition',\n  asymmetricOptionsName = 'Asymmetric',\n  tabs = ['Insertion', 'Removal'],\n  types = ['Spring', 'Cubic'],\n  easeOptions,\n  sliderConfigs = [\n    {\n      name: 'Opacity',\n      insertion: ['0', '1'],\n      removal: ['1', '0'],\n    },\n    {\n      name: 'Blur',\n      insertion: ['16', '0'],\n      removal: ['0', '16'],\n    },\n  ],\n  onAddProperty,\n  onFeatureToggle,\n  onAsymmetricToggle,\n  onTabChange,\n  onTypeChange,\n  onEaseChange,\n}: MorphingSidebarControlsProps) {\n  const [isAsymmetric, setIsAsymmetric] = useState(false);\n  const [isTransition, setIsTransition] = useState(false);\n  const [activeTab, setActiveTab] = useState<string>(tabs[0]);\n  const [activeType, setActiveType] = useState<string>(types[0]);\n  const [activeEase, setActiveEase] = useState<string>('Smooth');\n  const [isMotion, setIsMotion] = useState(false);\n\n  const handleFeatureToggle = () => {\n    const newState = !isTransition;\n    setIsTransition(newState);\n    onFeatureToggle?.(newState);\n  };\n\n  const handleAsymmetricToggle = () => {\n    const newState = !isAsymmetric;\n    setIsAsymmetric(newState);\n    onAsymmetricToggle?.(newState);\n  };\n\n  const handleTabChange = (tab: string) => {\n    setActiveTab(tab);\n    onTabChange?.(tab);\n  };\n\n  const handleTypeChange = (type: string) => {\n    setActiveType(type);\n    onTypeChange?.(type);\n  };\n\n  const handleEaseChange = (easeTitle: string) => {\n    setActiveEase(easeTitle);\n    onEaseChange?.(easeTitle);\n  };\n\n  const resolvedEaseOptions = easeOptions || [\n    { icons: <SmoothCurve />, title: 'Smooth' },\n    { icons: <Bouncy />, title: 'Bouncy' },\n    { icons: <Snappy />, title: 'Snappy' },\n    { icons: <Custom />, title: 'Custom' },\n  ];\n\n  return (\n    <div className=\"flex w-[350px] flex-col gap-3 rounded-3xl bg-neutral-100 p-3 transition-colors duration-300 dark:bg-neutral-900/50\">\n      <div className=\"flex w-full items-center justify-between gap-1 p-2\">\n        <div className=\"flex w-full items-center justify-between\">\n          <AnimatePresence mode=\"popLayout\">\n            {isMotion && (\n              <motion.div\n                layoutId=\"icon\"\n                key=\"left-button\"\n                initial={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, rotate: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n                onClick={() => setIsMotion(!isMotion)}\n                className=\"cursor-pointer rounded-full bg-neutral-900 p-2\"\n              >\n                <HugeiconsIcon\n                  icon={ArrowLeft02Icon}\n                  className=\"size-4 rounded-full fill-neutral-50 text-neutral-100\"\n                />\n              </motion.div>\n            )}\n\n            {!isMotion && (\n              <motion.p\n                key=\"title\"\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: -20,\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  x: 0,\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: -20,\n                }}\n                transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n                className=\"text-neutral-1000 font-semibold tracking-tight dark:text-neutral-400\"\n              >\n                {title}\n              </motion.p>\n            )}\n\n            {isMotion && (\n              <motion.p\n                key=\"motion-text\"\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: 10,\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  x: 0,\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: 10,\n                }}\n                transition={{ type: 'spring', bounce: 0.3, duration: 0.5 }}\n                className=\"text-neutral-1000 mr-24 font-semibold tracking-tight dark:text-neutral-400\"\n              >\n                Motion\n              </motion.p>\n            )}\n\n            {!isMotion && (\n              <motion.div\n                layoutId=\"icon\"\n                key=\"right-button\"\n                initial={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, rotate: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n                onClick={() => setIsMotion(!isMotion)}\n                className=\"cursor-pointer rounded-full bg-neutral-900 p-2\"\n              >\n                <HugeiconsIcon\n                  icon={ZapIcon}\n                  className=\"size-4 rounded-full fill-neutral-50 text-neutral-100\"\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n        <div className=\"cursor-pointer rounded-full bg-neutral-900 p-2\">\n          <HugeiconsIcon\n            icon={PlayIcon}\n            className=\"size-4 rounded-full fill-neutral-50 text-neutral-100\"\n          />\n        </div>\n      </div>\n\n      <AnimatePresence mode=\"popLayout\">\n        {!isMotion && (\n          <motion.div\n            key=\"config-panel\"\n            initial={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n            className=\"flex h-full w-full flex-col gap-3\"\n          >\n            <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl bg-neutral-200 p-3 transition-colors duration-300 dark:bg-neutral-900\">\n              <div className=\"flex w-full items-center gap-12\">\n                {configOptions.slice(0, 2).map((option, idx) => (\n                  <div\n                    key={idx}\n                    className=\"flex w-full items-center justify-between gap-3 rounded-2xl bg-neutral-100 px-4 py-3 transition-colors duration-300 dark:bg-neutral-800\"\n                  >\n                    <p className=\"text-neutral-1000 font-semibold tracking-tight dark:text-neutral-400\">\n                      {option.label}\n                    </p>\n                    <p className=\"text-neutral-1000 font-semibold tracking-tight dark:text-neutral-300\">\n                      {option.value}\n                    </p>\n                  </div>\n                ))}\n              </div>\n            </div>\n\n            <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl bg-neutral-200 p-1 transition-colors duration-300 dark:bg-neutral-900\">\n              <div className=\"flex w-full flex-col items-center p-3\">\n                <div\n                  onClick={handleFeatureToggle}\n                  className=\"relative z-30 flex w-full cursor-pointer items-center justify-between gap-3 rounded-2xl bg-neutral-100 px-4 py-3 transition-colors duration-300 dark:bg-neutral-800\"\n                >\n                  <div className=\"relative flex h-6 flex-1 items-center\">\n                    <AnimatePresence mode=\"popLayout\">\n                      <motion.div\n                        key={\n                          isTransition\n                            ? secondaryFeatureName\n                            : primaryFeatureName\n                        }\n                        className=\"absolute flex font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                        initial=\"hidden\"\n                        animate=\"visible\"\n                        exit=\"exit\"\n                        variants={{\n                          visible: {\n                            transition: { staggerChildren: 0.02 },\n                          },\n                          exit: {\n                            transition: { staggerChildren: 0.005 },\n                          },\n                        }}\n                      >\n                        {(isTransition\n                          ? secondaryFeatureName\n                          : primaryFeatureName\n                        )\n                          .split('')\n                          .map((char, index) => (\n                            <motion.span\n                              key={index}\n                              variants={{\n                                hidden: {\n                                  opacity: 0,\n                                  y: 10,\n                                  filter: 'blur(1px)',\n                                },\n                                visible: {\n                                  opacity: 1,\n                                  y: 0,\n                                  filter: 'blur(0px)',\n                                },\n                                exit: {\n                                  opacity: 0,\n                                  y: -10,\n                                  filter: 'blur(1px)',\n                                },\n                              }}\n                              className=\"whitespace-pre\"\n                            >\n                              {char}\n                            </motion.span>\n                          ))}\n                      </motion.div>\n                    </AnimatePresence>\n                  </div>\n                  <UnfoldMore />\n                </div>\n\n                <AnimatePresence>\n                  {isTransition && (\n                    <motion.div\n                      key=\"asymmetric-toggle-container\"\n                      initial={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      animate={{\n                        height: 'auto',\n                        opacity: 1,\n                        filter: 'blur(0px)',\n                        y: 0,\n                      }}\n                      exit={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      transition={{ duration: 0.3, ease: 'easeOut' }}\n                      className=\"w-full overflow-hidden\"\n                    >\n                      <div className=\"mt-3 flex w-full items-center justify-between gap-3 rounded-2xl bg-neutral-100 px-4 py-3 transition-colors duration-300 dark:bg-neutral-800\">\n                        <p className=\"font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\">\n                          {asymmetricOptionsName}\n                        </p>\n                        <button\n                          onClick={handleAsymmetricToggle}\n                          className={`flex h-7 w-12 cursor-pointer rounded-full p-0.5 shadow-inner transition-colors duration-300 ease-in-out ${\n                            isAsymmetric\n                              ? 'bg-neutral-800 dark:bg-neutral-100'\n                              : 'bg-neutral-300 dark:bg-neutral-600'\n                          }`}\n                        >\n                          <motion.div\n                            layout\n                            initial={{ x: 0 }}\n                            animate={{ x: isAsymmetric ? 20 : 0 }}\n                            transition={{ duration: 0.2, ease: 'easeInOut' }}\n                            className=\"size-6 rounded-full bg-white shadow-sm dark:bg-neutral-900\"\n                          />\n                        </button>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n\n              <div className=\"flex w-full flex-col items-center rounded-2xl bg-neutral-100 p-3 transition-colors duration-300 dark:bg-neutral-800\">\n                <AnimatePresence>\n                  {isAsymmetric && (\n                    <motion.div\n                      key=\"asymmetric-tabs-container\"\n                      initial={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      animate={{\n                        height: 'auto',\n                        opacity: 1,\n                        filter: 'blur(0px)',\n                        y: 0,\n                      }}\n                      exit={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      transition={{\n                        type: 'spring',\n                        bounce: 0.45,\n                        duration: 0.8,\n                      }}\n                      className=\"w-full overflow-hidden\"\n                    >\n                      <div className=\"relative z-20 mb-3 flex w-full items-center justify-between rounded-2xl bg-neutral-200 p-0.5 transition-colors duration-300 dark:bg-neutral-900\">\n                        <button\n                          onClick={() => handleTabChange(tabs[0])}\n                          className=\"relative z-10 w-full py-2 text-center font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                        >\n                          {tabs[0]}\n                          {activeTab === tabs[0] && (\n                            <motion.span\n                              layoutId=\"progressive-disclosure-tab\"\n                              className=\"absolute inset-0 -z-10 rounded-xl bg-neutral-100 shadow-sm dark:bg-neutral-800\"\n                              transition={{\n                                type: 'spring',\n                                bounce: 0.4,\n                                duration: 0.5,\n                              }}\n                            />\n                          )}\n                        </button>\n                        <button\n                          onClick={() => handleTabChange(tabs[1])}\n                          className=\"relative z-10 w-full py-2 text-center font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                        >\n                          {tabs[1]}\n                          {activeTab === tabs[1] && (\n                            <motion.span\n                              layoutId=\"progressive-disclosure-tab\"\n                              className=\"absolute inset-0 -z-10 rounded-xl bg-neutral-100 shadow-sm dark:bg-neutral-800\"\n                              transition={{\n                                type: 'spring',\n                                bounce: 0.4,\n                                duration: 0.5,\n                              }}\n                            />\n                          )}\n                        </button>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n\n                {sliderConfigs.map((config, idx) => {\n                  const val1 =\n                    activeTab === tabs[0]\n                      ? config.insertion[0]\n                      : config.removal[0];\n                  const val2 =\n                    activeTab === tabs[0]\n                      ? config.insertion[1]\n                      : config.removal[1];\n\n                  return (\n                    <div\n                      key={idx}\n                      className=\"mb-3 flex w-full items-center justify-between px-1\"\n                    >\n                      <p className=\"font-semibold tracking-tight text-zinc-500 dark:text-zinc-400\">\n                        {config.name}\n                      </p>\n                      <div className=\"flex h-full w-[175px] items-center justify-around rounded-2xl bg-neutral-200 px-5 py-2 transition-colors duration-300 dark:bg-neutral-900\">\n                        <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                          <AnimatePresence mode=\"popLayout\">\n                            <motion.p\n                              key={`${config.name}-left-${val1}`}\n                              initial={{ opacity: 0, y: -10 }}\n                              animate={{ opacity: 1, y: 0 }}\n                              exit={{ opacity: 0, y: 10 }}\n                              transition={{ duration: 0.2 }}\n                              className=\"absolute font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                            >\n                              {val1}\n                            </motion.p>\n                          </AnimatePresence>\n                        </div>\n\n                        <HugeiconsIcon\n                          icon={ArrowRight04Icon}\n                          className=\"text-neutral-700 dark:text-neutral-400\"\n                        />\n\n                        <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                          <AnimatePresence mode=\"popLayout\">\n                            <motion.p\n                              key={`${config.name}-right-${val2}`}\n                              initial={{ opacity: 0, y: -10 }}\n                              animate={{ opacity: 1, y: 0 }}\n                              exit={{ opacity: 0, y: 10 }}\n                              transition={{ duration: 0.2 }}\n                              className=\"absolute font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                            >\n                              {val2}\n                            </motion.p>\n                          </AnimatePresence>\n                        </div>\n                      </div>\n                    </div>\n                  );\n                })}\n\n                <button\n                  onClick={onAddProperty}\n                  className=\"mt-2 flex w-full items-center justify-center gap-2 rounded-2xl bg-neutral-900 px-5 py-2.5 text-center font-semibold tracking-tight text-neutral-100 transition-colors duration-300 dark:bg-neutral-100 dark:text-neutral-900\"\n                >\n                  <HugeiconsIcon\n                    icon={PlusSignIcon}\n                    className=\"inline-block size-5\"\n                  />{' '}\n                  Add Property\n                </button>\n              </div>\n            </div>\n          </motion.div>\n        )}\n\n        {isMotion && (\n          <motion.div\n            key=\"motion-panel\"\n            initial={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n            className=\"flex h-full w-full flex-col items-center gap-3\"\n          >\n            <AnimatePresence mode=\"popLayout\">\n              <motion.div\n                key=\"asymmetric-tabs-container\"\n                initial={{\n                  height: 0,\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  y: -50,\n                }}\n                animate={{\n                  height: 'auto',\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                }}\n                exit={{\n                  height: 0,\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  y: -50,\n                }}\n                transition={{ type: 'spring', bounce: 0.45, duration: 0.8 }}\n                className=\"w-full overflow-hidden\"\n              >\n                <div className=\"relative z-20 mb-3 flex w-full items-center justify-between rounded-2xl bg-neutral-200 p-0.5 transition-colors duration-300 dark:bg-neutral-900\">\n                  <button\n                    onClick={() => handleTypeChange(types[0])}\n                    className=\"relative z-10 w-full py-2 text-center font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {types[0]}\n                    {activeType === types[0] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl bg-neutral-100 shadow-sm dark:bg-neutral-800\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                  <button\n                    onClick={() => handleTypeChange(types[1])}\n                    className=\"relative z-10 w-full py-2 text-center font-semibold tracking-tight text-neutral-700 dark:text-neutral-200\"\n                  >\n                    {types[1]}\n                    {activeType === types[1] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl bg-neutral-100 shadow-sm dark:bg-neutral-800\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                </div>\n              </motion.div>\n            </AnimatePresence>\n            <div className=\"grid w-full grid-cols-2 gap-2\">\n              {resolvedEaseOptions.map((item) => {\n                const isActive = activeEase === item.title;\n                return (\n                  <div\n                    key={item.title}\n                    onClick={() => handleEaseChange(item.title)}\n                    className={`group flex aspect-square w-full cursor-pointer flex-col items-center justify-between rounded-[36px] p-4 transition-all duration-300 active:scale-[0.98] ${\n                      isActive\n                        ? 'border-[6px] bg-neutral-300 text-neutral-900 shadow-sm dark:bg-neutral-700/80 dark:text-neutral-100'\n                        : 'text-neutral-1000 bg-neutral-200 hover:bg-neutral-300/50 hover:text-neutral-700 dark:bg-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-700/50 dark:hover:text-neutral-300'\n                    }`}\n                  >\n                    <div className=\"relative flex w-full flex-1 scale-[1.10] items-center justify-center p-2 transition-colors duration-300\">\n                      {item.icons}\n                    </div>\n                    <p\n                      className={`w-full text-center font-semibold tracking-tight transition-colors duration-300 ${isActive ? 'text-[15px]' : 'text-sm'}`}\n                    >\n                      {item.title}\n                    </p>\n                  </div>\n                );\n              })}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\nconst UnfoldMore = ({ onClick }: { onClick?: () => void }) => {\n  return (\n    <svg\n      onClick={onClick}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"lucide lucide-chevrons-up-down-icon lucide-chevrons-up-down cursor-pointer text-neutral-700 dark:text-neutral-400\"\n    >\n      <path d=\"m7 15 5 5 5-5\" />\n      <path d=\"m7 9 5-5 5 5\" />\n    </svg>\n  );\n};\n\nconst SmoothCurve = () => {\n  return (\n    <svg\n      viewBox=\"0 0 259 86\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[110px] text-current\"\n    >\n      <path\n        d=\"M153.002 15.5012C104.002 22.5 127.002 69 74.5026 78.5015C28.0407 86.9103 6.00195 41.5015 6.00195 41.5015\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M207.502 16.1061C241.002 13.6062 253.002 56.1062 253.002 56.1062\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <circle cx=\"182.002\" cy=\"18.5\" r=\"18.5\" fill=\"currentColor\" />\n    </svg>\n  );\n};\n\nconst Bouncy = () => {\n  return (\n    <svg\n      viewBox=\"0 0 320 280\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[80px] text-current\"\n    >\n      <path\n        d=\"M6 255.946C6 255.946 7.10863 157.446 76.3574 157.446C150.857 157.446 150.857 255.946 150.857 255.946\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M152.856 254.446C152.856 254.446 151.018 183.676 177.018 123.446\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M224.85 60.4463C246.228 45.3003 273.94 37.0901 309.858 40.9464\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <circle cx=\"192.857\" cy=\"87.9463\" r=\"26\" fill=\"currentColor\" />\n    </svg>\n  );\n};\n\nconst Snappy = () => {\n  return (\n    <svg\n      viewBox=\"0 0 316 164\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[96px] text-current\"\n    >\n      <circle cx=\"229.5\" cy=\"90\" r=\"33\" fill=\"currentColor\" />\n      <path\n        d=\"M54 93.5H181\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M106.5 120L192.5 120\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M81 66H185.5\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M147 41L210 41\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n    </svg>\n  );\n};\n\nconst Custom = () => {\n  return (\n    <svg\n      viewBox=\"0 0 300 300\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[68px] text-current\"\n    >\n      <circle cx=\"151.5\" cy=\"164.5\" r=\"62.5\" fill=\"currentColor\" />\n      <path\n        d=\"M152.373 169.767C155.282 168.181 156.354 164.536 154.767 161.627C153.181 158.718 149.536 157.646 146.627 159.233L149.5 164.5L152.373 169.767ZM97.1269 186.233L91.8595 189.106L97.6057 199.64L102.873 196.767L100 191.5L97.1269 186.233ZM149.5 164.5L146.627 159.233L97.1269 186.233L100 191.5L102.873 196.767L152.373 169.767L149.5 164.5Z\"\n        fill=\"white\"\n      />\n      <circle cx=\"78.5\" cy=\"201.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"146.5\" cy=\"83.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"199.5\" cy=\"99.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"93.5\" cy=\"99.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"227.5\" cy=\"150.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"70.5\" cy=\"150.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"219.5\" cy=\"201.5\" r=\"11.5\" fill=\"currentColor\" />\n    </svg>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "morphing-sidebar-controls-base",
      "type": "registry:component",
      "title": "Morphing Sidebar Controls (base)",
      "description": "Theme-ready base variant of A premium morphing sidebar control panel with progressive configuration, motion presets, and animated layout transitions for advanced animation workflows..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/morphing-sidebar-controls.tsx",
          "type": "registry:component",
          "content": "import {\n  ArrowLeft02Icon,\n  ArrowRight04Icon,\n  PlayIcon,\n  PlusSignIcon,\n  ZapIcon,\n} from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nexport interface MorphingSidebarControlsProps {\n  title?: string;\n  configOptions?: { label: string; value: string | number }[];\n  primaryFeatureName?: string;\n  secondaryFeatureName?: string;\n  asymmetricOptionsName?: string;\n  tabs?: [string, string];\n  types?: string[];\n  easeOptions?: { icons: React.ReactNode; title: string }[];\n  sliderConfigs?: {\n    name: string;\n    insertion: [string | number, string | number];\n    removal: [string | number, string | number];\n  }[];\n  onAddProperty?: () => void;\n  onFeatureToggle?: (isActive: boolean) => void;\n  onAsymmetricToggle?: (isActive: boolean) => void;\n  onTabChange?: (tab: string) => void;\n  onTypeChange?: (type: string) => void;\n  onEaseChange?: (easeTitle: string) => void;\n}\n\nexport default function MorphingSidebarControls({\n  title = 'Configuration',\n  configOptions = [\n    { label: 'Width', value: '300' },\n    { label: 'Height', value: '300' },\n  ],\n  primaryFeatureName = 'Visual Change',\n  secondaryFeatureName = 'Transition',\n  asymmetricOptionsName = 'Asymmetric',\n  tabs = ['Insertion', 'Removal'],\n  types = ['Spring', 'Cubic'],\n  easeOptions,\n  sliderConfigs = [\n    {\n      name: 'Opacity',\n      insertion: ['0', '1'],\n      removal: ['1', '0'],\n    },\n    {\n      name: 'Blur',\n      insertion: ['16', '0'],\n      removal: ['0', '16'],\n    },\n  ],\n  onAddProperty,\n  onFeatureToggle,\n  onAsymmetricToggle,\n  onTabChange,\n  onTypeChange,\n  onEaseChange,\n}: MorphingSidebarControlsProps) {\n  const [isAsymmetric, setIsAsymmetric] = useState(false);\n  const [isTransition, setIsTransition] = useState(false);\n  const [activeTab, setActiveTab] = useState<string>(tabs[0]);\n  const [activeType, setActiveType] = useState<string>(types[0]);\n  const [activeEase, setActiveEase] = useState<string>('Smooth');\n  const [isMotion, setIsMotion] = useState(false);\n\n  const handleFeatureToggle = () => {\n    const newState = !isTransition;\n    setIsTransition(newState);\n    onFeatureToggle?.(newState);\n  };\n\n  const handleAsymmetricToggle = () => {\n    const newState = !isAsymmetric;\n    setIsAsymmetric(newState);\n    onAsymmetricToggle?.(newState);\n  };\n\n  const handleTabChange = (tab: string) => {\n    setActiveTab(tab);\n    onTabChange?.(tab);\n  };\n\n  const handleTypeChange = (type: string) => {\n    setActiveType(type);\n    onTypeChange?.(type);\n  };\n\n  const handleEaseChange = (easeTitle: string) => {\n    setActiveEase(easeTitle);\n    onEaseChange?.(easeTitle);\n  };\n\n  const resolvedEaseOptions = easeOptions || [\n    { icons: <SmoothCurve />, title: 'Smooth' },\n    { icons: <Bouncy />, title: 'Bouncy' },\n    { icons: <Snappy />, title: 'Snappy' },\n    { icons: <Custom />, title: 'Custom' },\n  ];\n\n  return (\n    <div className=\"theme-injected flex w-[350px] flex-col gap-3 rounded-3xl border border-border bg-card p-3 font-sans transition-colors duration-300\">\n      <div className=\"flex w-full items-center justify-between gap-1 p-2\">\n        <div className=\"flex w-full items-center justify-between\">\n          <AnimatePresence mode=\"popLayout\">\n            {isMotion && (\n              <motion.div\n                layoutId=\"icon\"\n                key=\"left-button\"\n                initial={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, rotate: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n                onClick={() => setIsMotion(!isMotion)}\n                className=\"cursor-pointer rounded-full bg-primary p-2\"\n              >\n                <HugeiconsIcon\n                  icon={ArrowLeft02Icon}\n                  className=\"size-4 rounded-full fill-primary-foreground text-primary-foreground\"\n                />\n              </motion.div>\n            )}\n\n            {!isMotion && (\n              <motion.p\n                key=\"title\"\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: -20,\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  x: 0,\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: -20,\n                }}\n                transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n                className=\"font-sans font-semibold tracking-tight text-muted-foreground\"\n              >\n                {title}\n              </motion.p>\n            )}\n\n            {isMotion && (\n              <motion.p\n                key=\"motion-text\"\n                initial={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: 10,\n                }}\n                animate={{\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  x: 0,\n                }}\n                exit={{\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  x: 10,\n                }}\n                transition={{ type: 'spring', bounce: 0.3, duration: 0.5 }}\n                className=\"mr-24 font-sans font-semibold tracking-tight text-muted-foreground\"\n              >\n                Motion\n              </motion.p>\n            )}\n\n            {!isMotion && (\n              <motion.div\n                layoutId=\"icon\"\n                key=\"right-button\"\n                initial={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, rotate: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, rotate: 45, filter: 'blur(4px)' }}\n                transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n                onClick={() => setIsMotion(!isMotion)}\n                className=\"cursor-pointer rounded-full bg-primary p-2\"\n              >\n                <HugeiconsIcon\n                  icon={ZapIcon}\n                  className=\"size-4 rounded-full fill-primary-foreground text-primary-foreground\"\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n        <div className=\"cursor-pointer rounded-full bg-primary p-2\">\n          <HugeiconsIcon\n            icon={PlayIcon}\n            className=\"size-4 rounded-full fill-primary-foreground text-primary-foreground\"\n          />\n        </div>\n      </div>\n\n      <AnimatePresence mode=\"popLayout\">\n        {!isMotion && (\n          <motion.div\n            key=\"config-panel\"\n            initial={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n            className=\"flex h-full w-full flex-col gap-3\"\n          >\n            <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl border border-border bg-muted p-3 transition-colors duration-300\">\n              <div className=\"flex w-full items-center gap-12\">\n                {configOptions.slice(0, 2).map((option, idx) => (\n                  <div\n                    key={idx}\n                    className=\"flex w-full items-center justify-between gap-3 rounded-2xl border border-border bg-background px-4 py-3 transition-colors duration-300\"\n                  >\n                    <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n                      {option.label}\n                    </p>\n                    <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n                      {option.value}\n                    </p>\n                  </div>\n                ))}\n              </div>\n            </div>\n\n            <div className=\"flex w-full flex-col items-center gap-3 rounded-3xl border border-border bg-muted p-1 transition-colors duration-300\">\n              <div className=\"flex w-full flex-col items-center p-3\">\n                <div\n                  onClick={handleFeatureToggle}\n                  className=\"relative z-30 flex w-full cursor-pointer items-center justify-between gap-3 rounded-2xl border border-border bg-background px-4 py-3 transition-colors duration-300\"\n                >\n                  <div className=\"relative flex h-6 flex-1 items-center\">\n                    <AnimatePresence mode=\"popLayout\">\n                      <motion.div\n                        key={\n                          isTransition\n                            ? secondaryFeatureName\n                            : primaryFeatureName\n                        }\n                        className=\"absolute flex font-sans font-semibold tracking-tight text-foreground\"\n                        initial=\"hidden\"\n                        animate=\"visible\"\n                        exit=\"exit\"\n                        variants={{\n                          visible: {\n                            transition: { staggerChildren: 0.02 },\n                          },\n                          exit: {\n                            transition: { staggerChildren: 0.005 },\n                          },\n                        }}\n                      >\n                        {(isTransition\n                          ? secondaryFeatureName\n                          : primaryFeatureName\n                        )\n                          .split('')\n                          .map((char, index) => (\n                            <motion.span\n                              key={index}\n                              variants={{\n                                hidden: {\n                                  opacity: 0,\n                                  y: 10,\n                                  filter: 'blur(1px)',\n                                },\n                                visible: {\n                                  opacity: 1,\n                                  y: 0,\n                                  filter: 'blur(0px)',\n                                },\n                                exit: {\n                                  opacity: 0,\n                                  y: -10,\n                                  filter: 'blur(1px)',\n                                },\n                              }}\n                              className=\"whitespace-pre\"\n                            >\n                              {char}\n                            </motion.span>\n                          ))}\n                      </motion.div>\n                    </AnimatePresence>\n                  </div>\n                  <UnfoldMore />\n                </div>\n\n                <AnimatePresence>\n                  {isTransition && (\n                    <motion.div\n                      key=\"asymmetric-toggle-container\"\n                      initial={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      animate={{\n                        height: 'auto',\n                        opacity: 1,\n                        filter: 'blur(0px)',\n                        y: 0,\n                      }}\n                      exit={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      transition={{ duration: 0.3, ease: 'easeOut' }}\n                      className=\"w-full overflow-hidden\"\n                    >\n                      <div className=\"mt-3 flex w-full items-center justify-between gap-3 rounded-2xl border border-border bg-background px-4 py-3 transition-colors duration-300\">\n                        <p className=\"font-sans font-semibold tracking-tight text-foreground\">\n                          {asymmetricOptionsName}\n                        </p>\n                        <button\n                          onClick={handleAsymmetricToggle}\n                          className={`flex h-7 w-12 cursor-pointer rounded-full p-0.5 shadow-inner transition-colors duration-300 ease-in-out ${\n                            isAsymmetric\n                              ? 'bg-primary'\n                              : 'bg-input'\n                          }`}\n                        >\n                          <motion.div\n                            layout\n                            initial={{ x: 0 }}\n                            animate={{ x: isAsymmetric ? 20 : 0 }}\n                            transition={{ duration: 0.2, ease: 'easeInOut' }}\n                            className=\"size-6 rounded-full bg-background shadow-sm\"\n                          />\n                        </button>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n\n              <div className=\"flex w-full flex-col items-center rounded-2xl border border-border bg-background p-3 transition-colors duration-300\">\n                <AnimatePresence>\n                  {isAsymmetric && (\n                    <motion.div\n                      key=\"asymmetric-tabs-container\"\n                      initial={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      animate={{\n                        height: 'auto',\n                        opacity: 1,\n                        filter: 'blur(0px)',\n                        y: 0,\n                      }}\n                      exit={{\n                        height: 0,\n                        opacity: 0,\n                        filter: 'blur(4px)',\n                        y: -50,\n                      }}\n                      transition={{\n                        type: 'spring',\n                        bounce: 0.45,\n                        duration: 0.8,\n                      }}\n                      className=\"w-full overflow-hidden\"\n                    >\n                      <div className=\"relative z-20 mb-3 flex w-full items-center justify-between rounded-2xl border border-border bg-muted p-0.5 transition-colors duration-300\">\n                        <button\n                          onClick={() => handleTabChange(tabs[0])}\n                          className=\"relative z-10 w-full py-2 text-center font-sans font-semibold tracking-tight text-foreground\"\n                        >\n                          {tabs[0]}\n                          {activeTab === tabs[0] && (\n                            <motion.span\n                              layoutId=\"progressive-disclosure-tab\"\n                              className=\"absolute inset-0 -z-10 rounded-xl border border-border bg-background shadow-sm\"\n                              transition={{\n                                type: 'spring',\n                                bounce: 0.4,\n                                duration: 0.5,\n                              }}\n                            />\n                          )}\n                        </button>\n                        <button\n                          onClick={() => handleTabChange(tabs[1])}\n                          className=\"relative z-10 w-full py-2 text-center font-sans font-semibold tracking-tight text-foreground\"\n                        >\n                          {tabs[1]}\n                          {activeTab === tabs[1] && (\n                            <motion.span\n                              layoutId=\"progressive-disclosure-tab\"\n                              className=\"absolute inset-0 -z-10 rounded-xl border border-border bg-background shadow-sm\"\n                              transition={{\n                                type: 'spring',\n                                bounce: 0.4,\n                                duration: 0.5,\n                              }}\n                            />\n                          )}\n                        </button>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n\n                {sliderConfigs.map((config, idx) => {\n                  const val1 =\n                    activeTab === tabs[0]\n                      ? config.insertion[0]\n                      : config.removal[0];\n                  const val2 =\n                    activeTab === tabs[0]\n                      ? config.insertion[1]\n                      : config.removal[1];\n\n                  return (\n                    <div\n                      key={idx}\n                      className=\"mb-3 flex w-full items-center justify-between px-1\"\n                    >\n                      <p className=\"font-sans font-semibold tracking-tight text-muted-foreground\">\n                        {config.name}\n                      </p>\n                      <div className=\"flex h-full w-43.75 items-center justify-around rounded-2xl border border-border bg-muted px-5 py-2 transition-colors duration-300\">\n                        <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                          <AnimatePresence mode=\"popLayout\">\n                            <motion.p\n                              key={`${config.name}-left-${val1}`}\n                              initial={{ opacity: 0, y: -10 }}\n                              animate={{ opacity: 1, y: 0 }}\n                              exit={{ opacity: 0, y: 10 }}\n                              transition={{ duration: 0.2 }}\n                              className=\"absolute font-sans font-semibold tracking-tight text-foreground\"\n                            >\n                              {val1}\n                            </motion.p>\n                          </AnimatePresence>\n                        </div>\n\n                        <HugeiconsIcon\n                          icon={ArrowRight04Icon}\n                          className=\"text-muted-foreground\"\n                        />\n\n                        <div className=\"relative flex h-6 w-6 items-center justify-center\">\n                          <AnimatePresence mode=\"popLayout\">\n                            <motion.p\n                              key={`${config.name}-right-${val2}`}\n                              initial={{ opacity: 0, y: -10 }}\n                              animate={{ opacity: 1, y: 0 }}\n                              exit={{ opacity: 0, y: 10 }}\n                              transition={{ duration: 0.2 }}\n                              className=\"absolute font-sans font-semibold tracking-tight text-foreground\"\n                            >\n                              {val2}\n                            </motion.p>\n                          </AnimatePresence>\n                        </div>\n                      </div>\n                    </div>\n                  );\n                })}\n\n                <button\n                  onClick={onAddProperty}\n                  className=\"mt-2 flex w-full items-center justify-center gap-2 rounded-2xl bg-primary px-5 py-2.5 text-center font-sans font-semibold tracking-tight text-primary-foreground transition-colors duration-300\"\n                >\n                  <HugeiconsIcon\n                    icon={PlusSignIcon}\n                    className=\"inline-block size-5\"\n                  />{' '}\n                  Add Property\n                </button>\n              </div>\n            </div>\n          </motion.div>\n        )}\n\n        {isMotion && (\n          <motion.div\n            key=\"motion-panel\"\n            initial={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, y: 50, filter: 'blur(4px)' }}\n            transition={{ type: 'spring', bounce: 0.25, duration: 0.5 }}\n            className=\"flex h-full w-full flex-col items-center gap-3\"\n          >\n            <AnimatePresence mode=\"popLayout\">\n              <motion.div\n                key=\"asymmetric-tabs-container\"\n                initial={{\n                  height: 0,\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  y: -50,\n                }}\n                animate={{\n                  height: 'auto',\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                  y: 0,\n                }}\n                exit={{\n                  height: 0,\n                  opacity: 0,\n                  filter: 'blur(4px)',\n                  y: -50,\n                }}\n                transition={{ type: 'spring', bounce: 0.45, duration: 0.8 }}\n                className=\"w-full overflow-hidden\"\n              >\n                <div className=\"relative z-20 mb-3 flex w-full items-center justify-between rounded-2xl border border-border bg-muted p-0.5 transition-colors duration-300\">\n                  <button\n                    onClick={() => handleTypeChange(types[0])}\n                    className=\"relative z-10 w-full py-2 text-center font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {types[0]}\n                    {activeType === types[0] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl border border-border bg-background shadow-sm\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                  <button\n                    onClick={() => handleTypeChange(types[1])}\n                    className=\"relative z-10 w-full py-2 text-center font-sans font-semibold tracking-tight text-foreground\"\n                  >\n                    {types[1]}\n                    {activeType === types[1] && (\n                      <motion.span\n                        layoutId=\"progressive-disclosure-tab\"\n                        className=\"absolute inset-0 -z-10 rounded-xl border border-border bg-background shadow-sm\"\n                        transition={{\n                          type: 'spring',\n                          bounce: 0.4,\n                          duration: 0.5,\n                        }}\n                      />\n                    )}\n                  </button>\n                </div>\n              </motion.div>\n            </AnimatePresence>\n            <div className=\"grid w-full grid-cols-2 gap-2\">\n              {resolvedEaseOptions.map((item) => {\n                const isActive = activeEase === item.title;\n                return (\n                  <div\n                    key={item.title}\n                    onClick={() => handleEaseChange(item.title)}\n                    className={`group flex aspect-square w-full cursor-pointer flex-col items-center justify-between rounded-3xl p-4 transition-all duration-300 active:scale-[0.98] ${\n                      isActive\n                        ? 'border-[6px] border-border bg-background text-foreground shadow-sm'\n                        : 'bg-muted text-muted-foreground hover:bg-secondary hover:text-foreground'\n                    }`}\n                  >\n                    <div className=\"relative flex w-full flex-1 scale-[1.10] items-center justify-center p-2 transition-colors duration-300\">\n                      {item.icons}\n                    </div>\n                    <p\n                      className={`w-full text-center font-semibold tracking-tight transition-colors duration-300 ${isActive ? 'text-[15px]' : 'text-sm'}`}\n                    >\n                      {item.title}\n                    </p>\n                  </div>\n                );\n              })}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\nconst UnfoldMore = ({ onClick }: { onClick?: () => void }) => {\n  return (\n    <svg\n      onClick={onClick}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"lucide lucide-chevrons-up-down-icon lucide-chevrons-up-down cursor-pointer text-muted-foreground\"\n    >\n      <path d=\"m7 15 5 5 5-5\" />\n      <path d=\"m7 9 5-5 5 5\" />\n    </svg>\n  );\n};\n\nconst SmoothCurve = () => {\n  return (\n    <svg\n      viewBox=\"0 0 259 86\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[110px] text-current\"\n    >\n      <path\n        d=\"M153.002 15.5012C104.002 22.5 127.002 69 74.5026 78.5015C28.0407 86.9103 6.00195 41.5015 6.00195 41.5015\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M207.502 16.1061C241.002 13.6062 253.002 56.1062 253.002 56.1062\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <circle cx=\"182.002\" cy=\"18.5\" r=\"18.5\" fill=\"currentColor\" />\n    </svg>\n  );\n};\n\nconst Bouncy = () => {\n  return (\n    <svg\n      viewBox=\"0 0 320 280\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[80px] text-current\"\n    >\n      <path\n        d=\"M6 255.946C6 255.946 7.10863 157.446 76.3574 157.446C150.857 157.446 150.857 255.946 150.857 255.946\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M152.856 254.446C152.856 254.446 151.018 183.676 177.018 123.446\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M224.85 60.4463C246.228 45.3003 273.94 37.0901 309.858 40.9464\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <circle cx=\"192.857\" cy=\"87.9463\" r=\"26\" fill=\"currentColor\" />\n    </svg>\n  );\n};\n\nconst Snappy = () => {\n  return (\n    <svg\n      viewBox=\"0 0 316 164\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[96px] text-current\"\n    >\n      <circle cx=\"229.5\" cy=\"90\" r=\"33\" fill=\"currentColor\" />\n      <path\n        d=\"M54 93.5H181\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M106.5 120L192.5 120\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M81 66H185.5\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M147 41L210 41\"\n        stroke=\"currentColor\"\n        strokeWidth=\"12\"\n        strokeLinecap=\"round\"\n      />\n    </svg>\n  );\n};\n\nconst Custom = () => {\n  return (\n    <svg\n      viewBox=\"0 0 300 300\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-auto w-[68px] text-current\"\n    >\n      <circle cx=\"151.5\" cy=\"164.5\" r=\"62.5\" fill=\"currentColor\" />\n      <path\n        d=\"M152.373 169.767C155.282 168.181 156.354 164.536 154.767 161.627C153.181 158.718 149.536 157.646 146.627 159.233L149.5 164.5L152.373 169.767ZM97.1269 186.233L91.8595 189.106L97.6057 199.64L102.873 196.767L100 191.5L97.1269 186.233ZM149.5 164.5L146.627 159.233L97.1269 186.233L100 191.5L102.873 196.767L152.373 169.767L149.5 164.5Z\"\n        fill=\"white\"\n      />\n      <circle cx=\"78.5\" cy=\"201.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"146.5\" cy=\"83.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"199.5\" cy=\"99.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"93.5\" cy=\"99.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"227.5\" cy=\"150.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"70.5\" cy=\"150.5\" r=\"11.5\" fill=\"currentColor\" />\n      <circle cx=\"219.5\" cy=\"201.5\" r=\"11.5\" fill=\"currentColor\" />\n    </svg>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-checklist",
      "type": "registry:component",
      "title": "Onboarding Checklist",
      "description": "Step-by-step onboarding checklist with progress tracking and completion feedback.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/onboarding-checklist.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronUp, ChevronRight, Check } from 'lucide-react';\n\ninterface Step {\n  id: number;\n  title: string;\n  isCompleted: boolean;\n}\n\ninterface ChecklistProps {\n  steps: Step[];\n  title?: string;\n}\n\nexport const OnboardingChecklist: React.FC<ChecklistProps> = ({\n  steps,\n  title = \"Getting started\"\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [theme] = useState<'light' | 'dark'>('light');\n\n  const completedCount = steps.filter(s => s.isCompleted).length;\n  const totalSteps = steps.length;\n  const springConfig = { type: \"spring\", stiffness: 300, damping: 30 } as const;\n\n  return (\n    <div className={theme === 'dark' ? 'dark' : ''}>\n      <div className=\"min-h-full bg-transparent flex flex-col items-center justify-center p-4 xs:p-6 sm:p-10 space-y-12 relative transition-colors duration-500\">\n        <motion.div\n          layout\n          transition={springConfig}\n          className=\"w-full lg:w-100 max-w-100 bg-[#F5F5F7] dark:bg-[#161616] border border-[#E5E5E5] dark:border-white/10 rounded-xl shadow-lg overflow-hidden\"\n        >\n          {/* Header Section */}\n          <div\n            onClick={() => setIsExpanded(!isExpanded)}\n            className=\"p-3 sm:p-3.5 flex items-center justify-between cursor-pointer select-none\"\n          >\n            <div className=\"flex items-center gap-2 sm:gap-3 min-w-0\">\n              <motion.div\n                animate={{ rotate: isExpanded ? 0 : 180 }}\n                className=\"w-7 h-7 sm:w-8 sm:h-8 rounded-lg flex items-center justify-center text-[#A1A1A1] shrink-0\"\n              >\n                <ChevronUp size={20} className=\"sm:hidden\" />\n                <ChevronUp size={22} className=\"hidden sm:block\" />\n              </motion.div>\n              <span className=\"font-bold text-[#1A1A1A] dark:text-[#EDEDED] text-[14px] sm:text-[15px] truncate pr-1\">\n                {title}\n              </span>\n            </div>\n\n            <div className=\"flex items-center gap-2 sm:gap-3 shrink-0 ml-1\">\n              <div className=\"flex gap-0.5 xs:gap-[3px]\">\n                {Array.from({ length: 14 }).map((_, i) => (\n                  <div\n                    key={i}\n                    className={`h-3.5 sm:h-4 w-[2.5px] sm:w-[3.5px] rounded-full transition-colors duration-500 ${i < (completedCount / totalSteps) * 14\n                        ? 'bg-[#22C55E]'\n                        : 'bg-[#E5E5E7] dark:bg-[#2A2A2A]'\n                      }`}\n                  />\n                ))}\n              </div>\n\n              <span className=\"text-[12px] sm:text-[13px] font-bold text-[#71717A] dark:text-[#888] min-w-7 sm:min-w-7.5 text-right\">\n                {completedCount}/{totalSteps}\n              </span>\n            </div>\n          </div>\n\n          {/* Expanded Checklist Items */}\n          <AnimatePresence>\n            {isExpanded && (\n              <motion.div\n                initial={{ height: 0, opacity: 0 }}\n                animate={{ height: 'auto', opacity: 1 }}\n                exit={{ height: 0, opacity: 0 }}\n                transition={springConfig}\n                className=\"border-t-[1.4px] border-[#E9E8EF] dark:border-white/5 bg-white dark:bg-[#1C1C1C] rounded-t-4xl sm:rounded-t-[24px]\"\n              >\n                <div className=\"p-1.5 sm:p-2 space-y-0.5 sm:y-1\">\n                  {steps.map((step) => (\n                    <div\n                      key={step.id}\n                      className=\"group flex items-center justify-between p-2.5 sm:p-3 px-3 sm:px-4 hover:bg-[#F9F9F9] dark:hover:bg-white/5 rounded-xl cursor-pointer transition-all active:scale-[0.98] sm:active:scale-100\"\n                    >\n                      <div className=\"flex items-center gap-2.5 sm:gap-3 min-w-0\">\n                        {step.isCompleted ? (\n                          <div className=\"w-5 h-4.5 sm:w-6 sm:h-5 rounded-full bg-[#00B613] shadow-sm shadow-[#238848] flex items-center justify-center shrink-0\">\n                            <Check size={10} strokeWidth={4} className=\"text-white sm:hidden\" />\n                            <Check size={12} strokeWidth={4} className=\"text-white hidden sm:block\" />\n                          </div>\n                        ) : (\n                          <div className={`w-5 h-4.5 sm:w-6 sm:h-5 rounded-full border-2 flex items-center justify-center text-[10px] sm:text-[12px] font-bold shrink-0 ${step.id === 3\n                              ? 'bg-[#292929] dark:bg-[#EDEDED] border-[#292929] dark:border-[#EDEDED] shadow-sm shadow-[#1a1919] text-white dark:text-[#1A1A1A]'\n                              : 'border-[#E5E5E7] dark:border-[#333] text-[#A1A1A1] dark:text-[#555] shadow-sm shadow-[#8f8e8e]/40'\n                            }`}>\n                            {step.id}\n                          </div>\n                        )}\n                        <span className={`text-[13px] sm:text-[14px] font-medium transition-colors truncate ${step.isCompleted ? 'text-[#A1A1A1] dark:text-[#555]' : 'text-[#1A1A1A] dark:text-[#D4D4D4]'\n                          }`}>\n                          {step.title}\n                        </span>\n                      </div>\n\n                      {!step.isCompleted && (\n                        <ChevronRight size={14} className=\"text-[#D1D1D6] dark:text-[#444] shrink-0 sm:size-4\" />\n                      )}\n                    </div>\n                  ))}\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </div>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-checklist-base",
      "type": "registry:component",
      "title": "Onboarding Checklist (base)",
      "description": "Theme-ready base variant of Step-by-step onboarding checklist with progress tracking and completion feedback..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/onboarding-checklist.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronUp, ChevronRight, Check } from 'lucide-react';\n\ninterface Step {\n  id: number;\n  title: string;\n  isCompleted: boolean;\n}\n\ninterface ChecklistProps {\n  steps: Step[];\n  title?: string;\n}\n\nexport const OnboardingChecklist: React.FC<ChecklistProps> = ({\n  steps,\n  title = \"Getting started\"\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [theme] = useState<'light' | 'dark'>('light');\n\n  const completedCount = steps.filter(s => s.isCompleted).length;\n  const totalSteps = steps.length;\n  const springConfig = { type: \"spring\", stiffness: 300, damping: 30 } as const;\n\n  return (\n    <div\n      className={`theme-injected ${theme === 'dark' ? 'dark' : ''} bg-transparent text-foreground font-sans`}\n      style={{ fontFamily: \"var(--font-sans)\" }}\n    >\n      <div className=\"min-h-full bg-transparent flex flex-col items-center justify-center p-4 xs:p-6 sm:p-10 space-y-12 relative transition-colors duration-500\">\n        <motion.div\n          layout\n          transition={springConfig}\n          className=\"w-full max-w-xl bg-card text-card-foreground border border-border rounded-xl shadow-lg overflow-hidden\"\n        >\n          {/* Header Section */}\n          <div\n            onClick={() => setIsExpanded(!isExpanded)}\n            className=\"p-3 sm:p-4 flex items-center justify-between cursor-pointer select-none\"\n          >\n            <div className=\"flex items-center gap-2 sm:gap-3 min-w-0\">\n              <motion.div\n                animate={{ rotate: isExpanded ? 0 : 180 }}\n                className=\"w-7 h-7 sm:w-8 sm:h-8 rounded-md flex items-center justify-center text-muted-foreground shrink-0\"\n              >\n                <ChevronUp size={20} className=\"sm:hidden\" />\n                <ChevronUp size={22} className=\"hidden sm:block\" />\n              </motion.div>\n              <span className=\"font-bold text-foreground text-sm sm:text-base truncate pr-1\">\n                {title}\n              </span>\n            </div>\n\n            <div className=\"flex items-center gap-2 sm:gap-3 shrink-0 ml-1\">\n              <div className=\"flex gap-1\">\n                {Array.from({ length: 14 }).map((_, i) => (\n                  <div\n                    key={i}\n                    className={`h-3 sm:h-4 w-1 rounded-full transition-colors duration-500 ${i < (completedCount / totalSteps) * 14\n                        ? 'bg-primary'\n                        : 'bg-muted'\n                      }`}\n                  />\n                ))}\n              </div>\n\n              <span\n                className=\"text-xs sm:text-sm font-bold text-muted-foreground min-w-7 sm:min-w-8 text-right\"\n                style={{ fontFamily: \"var(--font-mono)\" }}\n              >\n                {completedCount}/{totalSteps}\n              </span>\n            </div>\n          </div>\n\n          {/* Expanded Checklist Items */}\n          <AnimatePresence>\n            {isExpanded && (\n              <motion.div\n                initial={{ height: 0, opacity: 0 }}\n                animate={{ height: 'auto', opacity: 1 }}\n                exit={{ height: 0, opacity: 0 }}\n                transition={springConfig}\n                className=\"border-t border-border bg-background rounded-t-xl\"\n              >\n                <div className=\"p-2 space-y-1\">\n                  {steps.map((step) => (\n                    <div\n                      key={step.id}\n                      className=\"group flex items-center justify-between py-3 px-3 sm:px-4 hover:bg-accent/40 rounded-lg cursor-pointer transition-all active:scale-95 sm:active:scale-100\"\n                    >\n                      <div className=\"flex items-center gap-2 sm:gap-3 min-w-0\">\n                        {step.isCompleted ? (\n                          <div className=\"w-5 h-5 sm:w-6 sm:h-6 rounded-full bg-primary shadow-xs flex items-center justify-center shrink-0\">\n                            <Check size={10} strokeWidth={4} className=\"text-primary-foreground sm:hidden\" />\n                            <Check size={12} strokeWidth={4} className=\"text-primary-foreground hidden sm:block\" />\n                          </div>\n                        ) : (\n                          <div className={`w-5 h-5 sm:w-6 sm:h-6 rounded-full border-2 flex items-center justify-center text-xs font-bold shrink-0 ${step.id === 3\n                              ? 'bg-foreground border-foreground shadow-xs text-background'\n                              : 'border-border text-muted-foreground shadow-xs'\n                            }`}>\n                            {step.id}\n                          </div>\n                        )}\n                        <span className={`text-sm font-medium transition-colors truncate ${step.isCompleted ? 'text-muted-foreground' : 'text-foreground'\n                          }`}>\n                          {step.title}\n                        </span>\n                      </div>\n\n                      {!step.isCompleted && (\n                        <ChevronRight size={14} className=\"text-muted-foreground shrink-0 sm:size-4\" />\n                      )}\n                    </div>\n                  ))}\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </div>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-screen",
      "type": "registry:component",
      "title": "Onboarding Screen",
      "description": "Clean onboarding screen guiding users through setup with visual steps.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/onboarding-screen.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion } from 'motion/react';\nimport { ChevronLeft, Info, ImagePlus } from 'lucide-react';\nimport { HiBadgeCheck } from 'react-icons/hi';\n\ninterface OnboardingProps {\n  title?: string;\n  subtitle?: string;\n  businessNameLabel?: string;\n  businessNamePlaceholder?: string;\n  legalNameLabel?: string;\n  legalNamePlaceholder?: string;\n  nextButtonText?: string;\n  finishButtonText?: string;\n  tooltipMainText?: string;\n  tooltipSubText?: string;\n  rightSectionDescription?: string;\n  onComplete?: (data: any) => void;\n}\n\nexport const OnboardingScreen: React.FC<OnboardingProps> = ({\n  title = 'Business Details',\n  subtitle = 'Tell us about your brand to start creating campaigns.',\n  businessNameLabel = 'Business name',\n  businessNamePlaceholder = 'Enter your name',\n  legalNameLabel = 'Business Legal name',\n  legalNamePlaceholder = 'Enter your business legal name',\n  nextButtonText = 'Create business account',\n  finishButtonText = 'Finish Setup',\n  tooltipMainText = 'Click here to add your profile image.',\n  tooltipSubText = 'You can always do this later.',\n  rightSectionDescription = \"With your creator profile ready, it's time to set up your business account.\",\n  onComplete,\n}) => {\n  const [businessName, setBusinessName] = useState('Acme Inc');\n  const [legalName, setLegalName] = useState('');\n  const [currentStep, setCurrentStep] = useState(1);\n\n  const totalSteps = 3;\n  const spring = { type: 'spring', stiffness: 300, damping: 30 } as const;\n  const progressSpring = {\n    type: 'spring',\n    stiffness: 100,\n    damping: 20,\n  } as const;\n\n  const handleNext = () => {\n    if (currentStep < totalSteps) setCurrentStep((prev) => prev + 1);\n    else onComplete?.({ businessName, legalName });\n  };\n\n  const handleBack = () => {\n    if (currentStep > 1) setCurrentStep((prev) => prev - 1);\n  };\n\n  return (\n    <div className=\"flex min-h-full w-full flex-col items-center justify-center bg-transparent transition-colors duration-500\">\n      <motion.div\n        initial={{ opacity: 0, scale: 0.95 }}\n        animate={{ opacity: 1, scale: 1 }}\n        transition={spring}\n        className=\"flex w-full max-w-sm flex-col overflow-hidden rounded-[32px] border bg-white p-2 shadow-xl transition-colors duration-500 md:h-150 md:max-w-5xl md:flex-row dark:bg-[#0A0A0A]\"\n      >\n        {/* Left Section */}\n        <div className=\"flex flex-[1.2] flex-col justify-center rounded-[26px] border border-black/5 bg-[#FAFAFA] px-8 py-10 transition-colors duration-500 md:rounded-l-[26px] md:rounded-r-none md:border-r-0 md:px-16 dark:border-white/10 dark:bg-[#131313]\">\n          <div className=\"mx-auto w-full max-w-sm\">\n            <div className=\"mb-8 flex justify-center md:justify-start\">\n              <div className=\"rounded-xl bg-black/5 p-2 dark:bg-white/5\">\n                <svg\n                  width=\"28\"\n                  height=\"28\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  className=\"text-black dark:text-white\"\n                >\n                  <path\n                    d=\"M7 8H5C3.34315 8 2 9.34315 2 11V13C2 14.6569 3.34315 16 5 16H7M17 8H19C20.6569 8 22 9.34315 22 11V13C22 14.6569 20.6569 16 19 16H17M8 12H16\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2.5\"\n                    strokeLinecap=\"round\"\n                  />\n                </svg>\n              </div>\n            </div>\n\n            <h1 className=\"mb-2 text-2xl font-semibold tracking-tight text-[#1A1A1A] transition-colors dark:text-[#d8d8d8]\">\n              {title}\n            </h1>\n            <p className=\"mb-8 text-sm text-gray-500 transition-colors dark:text-gray-400\">\n              {subtitle}\n            </p>\n\n            {/* Stepper */}\n            <div className=\"mb-10 flex gap-2\">\n              {[1, 2, 3].map((i) => (\n                <div\n                  key={i}\n                  className=\"relative h-1 flex-1 overflow-hidden rounded-full bg-black/5 dark:bg-white/10\"\n                >\n                  <motion.div\n                    animate={{ width: i <= currentStep ? '100%' : '0%' }}\n                    transition={progressSpring}\n                    className=\"absolute top-0 left-0 h-full bg-emerald-400\"\n                  />\n                </div>\n              ))}\n            </div>\n\n            <div className=\"mb-10 space-y-6 text-left\">\n              <div className=\"space-y-2\">\n                <label className=\"flex items-center gap-2 text-xs font-semibold tracking-wider whitespace-nowrap text-[#808080] uppercase transition-colors dark:text-[#6C6C6C]\">\n                  {businessNameLabel} <Info size={14} className=\"opacity-50\" />\n                </label>\n                <input\n                  placeholder={businessNamePlaceholder}\n                  value={businessName}\n                  onChange={(e) => setBusinessName(e.target.value)}\n                  className=\"w-full rounded-2xl border-[1.5px] border-black/20 bg-white px-5 py-3.5 text-sm text-black transition-all outline-none focus:ring-2 focus:ring-emerald-500/20 dark:border-[#1D1D1D] dark:bg-[#121212] dark:text-white\"\n                />\n              </div>\n\n              <div className=\"space-y-2\">\n                <label className=\"flex items-center gap-2 text-xs font-semibold tracking-wider whitespace-nowrap text-[#808080] uppercase transition-colors dark:text-[#6C6C6C]\">\n                  {legalNameLabel} <Info size={14} className=\"opacity-50\" />\n                </label>\n                <input\n                  placeholder={legalNamePlaceholder}\n                  value={legalName}\n                  onChange={(e) => setLegalName(e.target.value)}\n                  className=\"w-full rounded-2xl border-[1.5px] border-black/20 bg-white px-5 py-3.5 text-sm text-black transition-all outline-none focus:ring-2 focus:ring-emerald-500/20 dark:border-[#1D1D1D] dark:bg-[#121212] dark:text-white\"\n                />\n              </div>\n            </div>\n\n            <div className=\"flex flex-nowrap items-center gap-2 md:gap-4\">\n              <motion.button\n                onClick={handleBack}\n                whileTap={{ scale: 0.95 }}\n                className=\"shrink-0 rounded-2xl border border-black/10 bg-white p-4 text-[#666666] transition-colors dark:border-[#282828] dark:bg-[#121212] dark:text-[#999999]\"\n              >\n                <ChevronLeft size={20} />\n              </motion.button>\n              <motion.button\n                onClick={handleNext}\n                whileTap={{ scale: 0.98 }}\n                className=\"flex min-w-fit flex-1 items-center justify-center rounded-2xl bg-[#1A1A1A] px-8 py-4 text-sm font-bold whitespace-nowrap text-white shadow-xl transition-colors dark:bg-[#EDEDED] dark:text-[#101010]\"\n              >\n                {currentStep === totalSteps ? finishButtonText : nextButtonText}\n              </motion.button>\n            </div>\n          </div>\n        </div>\n\n        {/* Right Section */}\n        <div className=\"relative hidden flex-1 flex-col items-center justify-center rounded-[26px] border border-black/5 bg-[#F4F4F4] p-12 transition-colors duration-500 md:flex md:rounded-l-none md:rounded-r-[26px] md:border-l-0 dark:border-white/5 dark:bg-[#1C1C1C]\">\n          <motion.div\n            initial={{ opacity: 0, y: 10 }}\n            animate={{ opacity: 1, y: 0 }}\n            className=\"z-10 -mb-5 rounded-2xl border border-[#E5E5E5] bg-white px-4 py-2 text-center text-xs font-medium whitespace-nowrap text-black shadow-lg transition-colors dark:border-[#2D2D2D] dark:bg-[#2B292E] dark:text-white\"\n          >\n            <p>{tooltipMainText}</p>\n            <p className=\"text-[10px] font-normal whitespace-nowrap opacity-60\">\n              {tooltipSubText}\n            </p>\n          </motion.div>\n\n          <motion.div\n            layout\n            className=\"relative my-8 flex aspect-square w-full max-w-72 flex-col items-center justify-center rounded-[32px] border-2 border-[#E5E5E5] bg-white p-8 shadow-sm transition-all dark:border-[#303030] dark:bg-zinc-900/50\"\n          >\n            <div className=\"mb-6 flex h-16 w-16 items-center justify-center rounded-2xl bg-zinc-100 text-zinc-400 shadow-inner dark:bg-zinc-800\">\n              <ImagePlus size={24} strokeWidth={1.5} />\n            </div>\n\n            <div className=\"mb-6 flex items-center gap-2 whitespace-nowrap\">\n              <span className=\"text-sm font-bold text-[#1A1A1A] transition-colors dark:text-white\">\n                {businessName || 'Your Brand'}\n              </span>\n              <HiBadgeCheck size={18} className=\"shrink-0 text-orange-400\" />\n            </div>\n\n            <div className=\"w-full space-y-2 opacity-20\">\n              <div className=\"h-1.5 w-full rounded-full bg-black dark:bg-white\" />\n              <div className=\"mx-auto h-1.5 w-2/3 rounded-full bg-black dark:bg-white\" />\n            </div>\n          </motion.div>\n\n          <p className=\"max-w-64 text-center text-xs leading-relaxed text-gray-500 transition-colors dark:text-gray-400\">\n            {rightSectionDescription}\n          </p>\n        </div>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-screen-base",
      "type": "registry:component",
      "title": "Onboarding Screen (base)",
      "description": "Theme-ready base variant of Clean onboarding screen guiding users through setup with visual steps..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/onboarding-screen.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion } from 'motion/react';\nimport { ChevronLeft, Info, ImagePlus } from 'lucide-react';\nimport { HiBadgeCheck } from 'react-icons/hi';\n\ninterface OnboardingProps {\n  title?: string;\n  subtitle?: string;\n  businessNameLabel?: string;\n  businessNamePlaceholder?: string;\n  legalNameLabel?: string;\n  legalNamePlaceholder?: string;\n  nextButtonText?: string;\n  finishButtonText?: string;\n  tooltipMainText?: string;\n  tooltipSubText?: string;\n  rightSectionDescription?: string;\n  onComplete?: (data: any) => void;\n}\n\nexport const OnboardingScreen: React.FC<OnboardingProps> = ({\n  title = 'Business Details',\n  subtitle = 'Tell us about your brand to start creating campaigns.',\n  businessNameLabel = 'Business name',\n  businessNamePlaceholder = 'Enter your name',\n  legalNameLabel = 'Business Legal name',\n  legalNamePlaceholder = 'Enter your business legal name',\n  nextButtonText = 'Create business account',\n  finishButtonText = 'Finish Setup',\n  tooltipMainText = 'Click here to add your profile image.',\n  tooltipSubText = 'You can always do this later.',\n  rightSectionDescription = \"With your creator profile ready, it's time to set up your business account.\",\n  onComplete,\n}) => {\n  const [businessName, setBusinessName] = useState('Acme Inc');\n  const [legalName, setLegalName] = useState('');\n  const [currentStep, setCurrentStep] = useState(1);\n\n  const totalSteps = 3;\n  const spring = { type: 'spring', stiffness: 300, damping: 30 } as const;\n  const progressSpring = {\n    type: 'spring',\n    stiffness: 100,\n    damping: 20,\n  } as const;\n\n  const handleNext = () => {\n    if (currentStep < totalSteps) setCurrentStep((prev) => prev + 1);\n    else onComplete?.({ businessName, legalName });\n  };\n\n  const handleBack = () => {\n    if (currentStep > 1) setCurrentStep((prev) => prev - 1);\n  };\n\n  return (\n    <div\n      className=\"theme-injected text-foreground flex min-h-full w-full flex-col items-center justify-center bg-transparent font-sans transition-colors duration-500\"\n      style={{ fontFamily: 'var(--font-sans)' }}\n    >\n      <motion.div\n        initial={{ opacity: 0, scale: 0.95 }}\n        animate={{ opacity: 1, scale: 1 }}\n        transition={spring}\n        className=\"bg-card text-card-foreground border-border flex w-full max-w-sm flex-col overflow-hidden rounded-3xl border p-2 shadow-lg transition-colors duration-500 md:max-w-5xl md:flex-row\"\n      >\n        {/* Left Section */}\n        <div className=\"bg-muted/30 border-border md:border-r-border flex flex-[1.2] flex-col justify-center rounded-2xl border px-8 py-10 transition-colors duration-500 md:rounded-l-2xl md:rounded-r-none md:border-r md:px-16\">\n          <div className=\"mx-auto w-full max-w-sm\">\n            <div className=\"mb-8 flex justify-center md:justify-start\">\n              <div className=\"bg-muted rounded-xl p-2\">\n                <svg\n                  width=\"28\"\n                  height=\"28\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  className=\"text-foreground\"\n                >\n                  <path\n                    d=\"M7 8H5C3.34315 8 2 9.34315 2 11V13C2 14.6569 3.34315 16 5 16H7M17 8H19C20.6569 8 22 9.34315 22 11V13C22 14.6569 20.6569 16 19 16H17M8 12H16\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2.5\"\n                    strokeLinecap=\"round\"\n                  />\n                </svg>\n              </div>\n            </div>\n\n            <h1 className=\"text-foreground mb-2 text-2xl font-semibold tracking-tight transition-colors\">\n              {title}\n            </h1>\n            <p className=\"text-muted-foreground mb-8 text-sm transition-colors\">\n              {subtitle}\n            </p>\n\n            {/* Stepper */}\n            <div className=\"mb-10 flex gap-2\">\n              {[1, 2, 3].map((i) => (\n                <div\n                  key={i}\n                  className=\"bg-muted relative h-1 flex-1 overflow-hidden rounded-full\"\n                >\n                  <motion.div\n                    animate={{ width: i <= currentStep ? '100%' : '0%' }}\n                    transition={progressSpring}\n                    className=\"bg-primary absolute top-0 left-0 h-full\"\n                  />\n                </div>\n              ))}\n            </div>\n\n            <div className=\"mb-10 space-y-6 text-left\">\n              <div className=\"space-y-2\">\n                <label className=\"text-muted-foreground flex items-center gap-2 text-xs font-semibold tracking-wider whitespace-nowrap uppercase transition-colors\">\n                  {businessNameLabel} <Info size={14} className=\"opacity-50\" />\n                </label>\n                <input\n                  placeholder={businessNamePlaceholder}\n                  value={businessName}\n                  onChange={(e) => setBusinessName(e.target.value)}\n                  className=\"bg-background border-border text-foreground focus:ring-ring/30 w-full rounded-xl border px-5 py-3 text-sm transition-all outline-none focus:ring-2\"\n                />\n              </div>\n\n              <div className=\"space-y-2\">\n                <label className=\"text-muted-foreground flex items-center gap-2 text-xs font-semibold tracking-wider whitespace-nowrap uppercase transition-colors\">\n                  {legalNameLabel} <Info size={14} className=\"opacity-50\" />\n                </label>\n                <input\n                  placeholder={legalNamePlaceholder}\n                  value={legalName}\n                  onChange={(e) => setLegalName(e.target.value)}\n                  className=\"bg-background border-border text-foreground focus:ring-ring/30 w-full rounded-xl border px-5 py-3 text-sm transition-all outline-none focus:ring-2\"\n                />\n              </div>\n            </div>\n\n            <div className=\"flex flex-nowrap items-center gap-2 md:gap-4\">\n              <motion.button\n                onClick={handleBack}\n                whileTap={{ scale: 0.95 }}\n                className=\"bg-background border-border text-muted-foreground shrink-0 rounded-xl border p-4 transition-colors\"\n              >\n                <ChevronLeft size={20} />\n              </motion.button>\n              <motion.button\n                onClick={handleNext}\n                whileTap={{ scale: 0.98 }}\n                className=\"bg-primary text-primary-foreground flex min-w-fit flex-1 items-center justify-center rounded-xl px-8 py-4 text-sm font-bold whitespace-nowrap shadow-md transition-colors\"\n              >\n                {currentStep === totalSteps ? finishButtonText : nextButtonText}\n              </motion.button>\n            </div>\n          </div>\n        </div>\n\n        {/* Right Section */}\n        <div className=\"bg-muted/40 border-border relative hidden flex-1 flex-col items-center justify-center rounded-r-2xl border p-12 transition-colors duration-500 md:flex md:rounded-l-none md:border-l-0\">\n          <motion.div\n            initial={{ opacity: 0, y: 10 }}\n            animate={{ opacity: 1, y: 0 }}\n            className=\"bg-card border-border text-foreground z-10 -mb-5 rounded-xl border px-4 py-2 text-center text-xs font-medium whitespace-nowrap shadow-md transition-colors\"\n          >\n            <p>{tooltipMainText}</p>\n            <p className=\"text-xs font-normal whitespace-nowrap opacity-60\">\n              {tooltipSubText}\n            </p>\n          </motion.div>\n\n          <motion.div\n            layout\n            className=\"border-border bg-card relative my-8 flex aspect-square w-full max-w-72 flex-col items-center justify-center rounded-3xl border-2 p-8 shadow-sm transition-all\"\n          >\n            <div className=\"bg-muted text-muted-foreground mb-6 flex h-16 w-16 items-center justify-center rounded-xl shadow-inner\">\n              <ImagePlus size={24} strokeWidth={1.5} />\n            </div>\n\n            <div className=\"mb-6 flex items-center gap-2 whitespace-nowrap\">\n              <span className=\"text-foreground text-sm font-bold transition-colors\">\n                {businessName || 'Your Brand'}\n              </span>\n              <HiBadgeCheck size={18} className=\"text-primary shrink-0\" />\n            </div>\n\n            <div className=\"w-full space-y-2 opacity-20\">\n              <div className=\"bg-foreground h-1.5 w-full rounded-full\" />\n              <div className=\"bg-foreground mx-auto h-1.5 w-2/3 rounded-full\" />\n            </div>\n          </motion.div>\n\n          <p className=\"text-muted-foreground max-w-xs text-center text-xs leading-relaxed transition-colors\">\n            {rightSectionDescription}\n          </p>\n        </div>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-setup",
      "type": "registry:component",
      "title": "Onboarding Setup",
      "description": "Onboarding setup card guiding users through initial configuration steps.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/onboarding-setup.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { CheckCircle2, ChevronDown, Check } from 'lucide-react';\n\ntype FocusOption = {\n  id: string;\n  label: string;\n};\n\ninterface OnboardingSetupProps {\n  title: string;\n  subtitle: string;\n  focusOptions: FocusOption[];\n  selectedFocus: string;\n  onFocusChange: (id: string) => void;\n  revenue: string;\n  onRevenueChange: (value: string) => void;\n  role: string;\n  onRoleChange: (value: string) => void;\n  step: number;\n  totalSteps: number;\n  onContinue: () => void;\n  imageUrl: string;\n}\n\nconst spring = {\n  type: 'spring',\n  stiffness: 320,\n  damping: 30,\n  mass: 0.7,\n} as const;\n\nexport const OnboardingSetup: React.FC<OnboardingSetupProps> = ({\n  title,\n  subtitle,\n  focusOptions,\n  selectedFocus,\n  onFocusChange,\n  revenue,\n  onRevenueChange,\n  role,\n  onRoleChange,\n  step,\n  totalSteps,\n  onContinue,\n  imageUrl,\n}) => {\n  const [isRevenueOpen, setIsRevenueOpen] = useState(false);\n  const revenueRef = useRef<HTMLDivElement>(null);\n\n  const revenueOptions = ['$100k – $200k', '$200k – $500k', '$500k+'];\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        revenueRef.current &&\n        !revenueRef.current.contains(event.target as Node)\n      ) {\n        setIsRevenueOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  return (\n    <div\n      className={`relative flex w-full flex-col items-center justify-center bg-transparent py-0 transition-all duration-500`}\n    >\n      <motion.div\n        initial={{ opacity: 0, scale: 0.96 }}\n        animate={{ opacity: 1, scale: 1 }}\n        transition={spring}\n        className=\"relative z-10 grid w-full max-w-5xl grid-cols-1 rounded-[24px] border-2 border-[#EFEDF5] bg-[#F5F5F7] shadow-xl lg:grid-cols-[1.2fr_0.8fr] dark:border-[#1a1a1a] dark:bg-[#0A0A0A]\"\n      >\n        {/* LEFT CONTENT */}\n        <div className=\"inter order-2 flex flex-col lg:order-1\">\n          <div className=\"m-1.5 flex h-full flex-col rounded-[18px] bg-white p-5 shadow-sm sm:p-8 dark:bg-[#111]\">\n            <h1 className=\"text-[22px] font-medium text-[#111] sm:text-[24px] dark:text-[#EEE]\">\n              {title}\n            </h1>\n            <p className=\"mt-1 text-[12px] text-[#99999B] dark:text-[#666]\">\n              {subtitle}\n            </p>\n\n            <div className=\"my-5 border-t-[1.6px] border-dashed border-gray-200 dark:border-[#222]\" />\n\n            {/* Focus Options */}\n            <div className=\"grow\">\n              <p className=\"mb-4 text-[13px] font-normal tracking-tight text-[#8F8E92]\">\n                Your main focus\n              </p>\n\n              <div className=\"flex flex-wrap gap-2\">\n                {focusOptions.map((option) => {\n                  const active = option.id === selectedFocus;\n                  return (\n                    <motion.button\n                      key={option.id}\n                      whileTap={{ scale: 0.97 }}\n                      onClick={() => onFocusChange(option.id)}\n                      className={`relative flex grow items-center justify-center gap-2 rounded-xl border-[1.5px] px-4 py-2.5 text-[12px] font-medium transition-all duration-200 sm:grow-0 sm:justify-start ${\n                        active\n                          ? 'border-[#F87742]/40 bg-[#FFF0E9] text-[#F87742] dark:border-[#F87742]/50 dark:bg-[#2A1A14]'\n                          : 'border-[#E5E7EB] bg-white text-[#4B5563] hover:border-[#D1D5DB] dark:border-[#222] dark:bg-[#111] dark:text-[#999] dark:hover:border-[#333]'\n                      } `}\n                    >\n                      {active && (\n                        <CheckCircle2\n                          size={18}\n                          fill=\"#FA692E\"\n                          className=\"text-white dark:text-[#2A1A14]\"\n                        />\n                      )}\n                      {option.label}\n                    </motion.button>\n                  );\n                })}\n              </div>\n            </div>\n\n            {/* Revenue & Role Row */}\n            <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n              <div>\n                <label className=\"text-[13px] font-normal text-[#979799]\">\n                  Monthly revenue\n                </label>\n                <div className=\"relative mt-2\" ref={revenueRef}>\n                  <button\n                    type=\"button\"\n                    onClick={() => setIsRevenueOpen(!isRevenueOpen)}\n                    className=\"relative h-10 w-full rounded-full border border-[#EEEDF3] bg-white pr-12 pl-6 text-left text-[13px] whitespace-nowrap text-[#111] transition-all outline-none focus:ring-1 focus:ring-[#d6d5db] dark:border-[#222] dark:bg-[#111] dark:text-[#999] dark:focus:ring-[#333]\"\n                  >\n                    <span className=\"block truncate\">\n                      {revenue || 'Select revenue'}\n                    </span>\n                    <motion.div\n                      animate={{ rotate: isRevenueOpen ? 180 : 0 }}\n                      transition={{ duration: 0.2 }}\n                      className=\"absolute top-1/2 right-5 flex -translate-y-1/2 items-center\"\n                    >\n                      <ChevronDown size={14} className=\"text-[#979799]\" />\n                    </motion.div>\n                  </button>\n\n                  <AnimatePresence>\n                    {isRevenueOpen && (\n                      <motion.div\n                        initial={{ opacity: 0, y: -10, scale: 0.95 }}\n                        animate={{ opacity: 1, y: 0, scale: 1 }}\n                        exit={{ opacity: 0, y: -10, scale: 0.95 }}\n                        transition={{ duration: 0.15, ease: 'easeOut' }}\n                        className=\"absolute z-[100] mt-1.5 w-full overflow-hidden rounded-xl border border-[#EEEDF3] bg-white py-1 shadow-2xl dark:border-[#222] dark:bg-[#111]\"\n                      >\n                        {revenueOptions.map((option) => (\n                          <button\n                            key={option}\n                            type=\"button\"\n                            onClick={() => {\n                              onRevenueChange(option);\n                              setIsRevenueOpen(false);\n                            }}\n                            className=\"group flex w-full items-center justify-between px-4 py-2.5 text-left text-[13px] transition-colors hover:bg-[#F5F5F7] dark:hover:bg-[#1a1a1a]\"\n                          >\n                            <span\n                              className={\n                                revenue === option\n                                  ? 'font-medium text-[#111] dark:text-[#EEE]'\n                                  : 'text-[#666] dark:text-[#999]'\n                              }\n                            >\n                              {option}\n                            </span>\n                            {revenue === option && (\n                              <Check\n                                size={14}\n                                className=\"text-[#111] dark:text-[#EEE]\"\n                              />\n                            )}\n                          </button>\n                        ))}\n                      </motion.div>\n                    )}\n                  </AnimatePresence>\n                </div>\n              </div>\n\n              <div>\n                <label className=\"text-[13px] font-normal text-[#979799]\">\n                  Your role\n                </label>\n                <input\n                  value={role}\n                  onChange={(e) => onRoleChange(e.target.value)}\n                  placeholder=\"e.g. Sales Manager\"\n                  className=\"mt-2 h-10 w-full rounded-full border border-[#EEEDF3] bg-white px-6 text-left text-[13px] text-[#111] transition-all outline-none placeholder:text-[#A2A2A4] focus:ring-1 focus:ring-[#d6d5db] dark:border-[#222] dark:bg-[#111] dark:text-[#EEE] dark:placeholder:text-[#444] dark:focus:ring-[#333]\"\n                />\n              </div>\n            </div>\n          </div>\n\n          {/* Footer */}\n          <div className=\"mt-auto flex flex-wrap items-center justify-between gap-4 p-5 pt-2 sm:px-8 sm:pb-8\">\n            <div className=\"flex items-center gap-2 text-[11px] font-medium text-[#8B8B8D]\">\n              <span className=\"whitespace-nowrap\">\n                STEP {step} / {totalSteps}\n              </span>\n              <div className=\"ml-2 flex gap-1\">\n                {Array.from({ length: 5 }).map((_, i) => (\n                  <span\n                    key={i}\n                    className={`h-4 w-1 rounded-full transition-colors ${i < Math.ceil((step / totalSteps) * 5) ? 'bg-[#ff6a32]' : 'bg-[#E5E5ED] dark:bg-[#222]'}`}\n                  />\n                ))}\n              </div>\n            </div>\n\n            <motion.button\n              whileHover={{ scale: 1.04 }}\n              whileTap={{ scale: 0.96 }}\n              transition={spring}\n              onClick={onContinue}\n              className=\"xs:w-auto h-10 w-full rounded-full bg-[#0F0F0F] px-8 text-[13px] font-medium text-[#D7D7D7] shadow-lg transition-all active:shadow-sm sm:w-auto dark:bg-[#EEE] dark:text-black\"\n            >\n              Continue\n            </motion.button>\n          </div>\n        </div>\n\n        {/* RIGHT IMAGE SECTION */}\n        <div className=\"relative order-1 h-48 overflow-hidden rounded-t-[24px] sm:h-64 md:h-auto md:min-h-full lg:order-2 lg:rounded-t-none lg:rounded-r-[24px]\">\n          <AnimatePresence mode=\"popLayout\">\n            <motion.img\n              key={imageUrl}\n              src={imageUrl}\n              initial={{ opacity: 0, scale: 1.03 }}\n              animate={{ opacity: 1, scale: 1 }}\n              exit={{ opacity: 0, scale: 0.98 }}\n              transition={spring}\n              className=\"absolute inset-0 h-full w-full object-cover\"\n            />\n            <div className=\"pointer-events-none absolute inset-0 bg-black/5 dark:bg-black/20\" />\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-setup-base",
      "type": "registry:component",
      "title": "Onboarding Setup (base)",
      "description": "Theme-ready base variant of Onboarding setup card guiding users through initial configuration steps..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/onboarding-setup.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { CheckCircle2, ChevronDown, Check } from 'lucide-react';\n\ntype FocusOption = {\n  id: string;\n  label: string;\n};\n\ninterface OnboardingSetupProps {\n  title: string;\n  subtitle: string;\n  focusOptions: FocusOption[];\n  selectedFocus: string;\n  onFocusChange: (id: string) => void;\n  revenue: string;\n  onRevenueChange: (value: string) => void;\n  role: string;\n  onRoleChange: (value: string) => void;\n  step: number;\n  totalSteps: number;\n  onContinue: () => void;\n  imageUrl: string;\n}\n\nconst spring = {\n  type: 'spring',\n  stiffness: 320,\n  damping: 30,\n  mass: 0.7,\n} as const;\n\nexport const OnboardingSetup: React.FC<OnboardingSetupProps> = ({\n  title,\n  subtitle,\n  focusOptions,\n  selectedFocus,\n  onFocusChange,\n  revenue,\n  onRevenueChange,\n  role,\n  onRoleChange,\n  step,\n  totalSteps,\n  onContinue,\n  imageUrl,\n}) => {\n  const [isRevenueOpen, setIsRevenueOpen] = useState(false);\n  const revenueRef = useRef<HTMLDivElement>(null);\n\n  const revenueOptions = ['$100k – $200k', '$200k – $500k', '$500k+'];\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        revenueRef.current &&\n        !revenueRef.current.contains(event.target as Node)\n      ) {\n        setIsRevenueOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  return (\n    <div\n      className={`theme-injected relative flex w-full flex-col items-center justify-center bg-transparent py-0 font-sans transition-all duration-500`}\n    >\n      <motion.div\n        initial={{ opacity: 0, scale: 0.96 }}\n        animate={{ opacity: 1, scale: 1 }}\n        transition={spring}\n        className=\"border-border bg-background relative z-10 grid w-full max-w-5xl grid-cols-1 rounded-2xl border-2 shadow-xl lg:grid-cols-[1.2fr_0.8fr]\"\n      >\n        {/* LEFT CONTENT */}\n        <div className=\"order-2 flex flex-col lg:order-1\">\n          <div className=\"bg-card m-1 flex h-full flex-col rounded-lg p-6 shadow-sm sm:p-8\">\n            <h1 className=\"text-foreground text-xl font-semibold sm:text-2xl\">\n              {title}\n            </h1>\n            <p className=\"text-muted-foreground mt-2 text-xs\">{subtitle}</p>\n\n            <div className=\"border-border my-4 border-t border-dashed\" />\n\n            {/* Focus Options */}\n            <div className=\"grow\">\n              <p className=\"text-muted-foreground mb-3 text-xs font-medium tracking-tight\">\n                Your main focus\n              </p>\n\n              <div className=\"flex flex-wrap gap-2\">\n                {focusOptions.map((option) => {\n                  const active = option.id === selectedFocus;\n                  return (\n                    <motion.button\n                      key={option.id}\n                      whileTap={{ scale: 0.97 }}\n                      onClick={() => onFocusChange(option.id)}\n                      className={`relative flex grow items-center justify-center gap-2 rounded-md border px-4 py-2 text-xs font-medium transition-all duration-200 sm:grow-0 sm:justify-start ${\n                        active\n                          ? 'bg-primary/10 border-primary/40 text-primary'\n                          : 'bg-card border-border text-foreground/70 hover:border-border/80'\n                      } `}\n                    >\n                      {active && (\n                        <CheckCircle2\n                          size={18}\n                          fill=\"currentColor\"\n                          className=\"text-primary\"\n                        />\n                      )}\n                      {option.label}\n                    </motion.button>\n                  );\n                })}\n              </div>\n            </div>\n\n            {/* Revenue & Role Row */}\n            <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n              <div>\n                <label className=\"text-muted-foreground text-xs font-medium\">\n                  Monthly revenue\n                </label>\n                <div className=\"relative mt-2\" ref={revenueRef}>\n                  <button\n                    type=\"button\"\n                    onClick={() => setIsRevenueOpen(!isRevenueOpen)}\n                    className=\"border-border bg-card text-foreground focus-visible:ring-ring relative h-10 w-full rounded-full border pr-12 pl-6 text-left text-sm whitespace-nowrap transition-all outline-none focus-visible:ring-1\"\n                  >\n                    <span className=\"block truncate\">\n                      {revenue || 'Select revenue'}\n                    </span>\n                    <motion.div\n                      animate={{ rotate: isRevenueOpen ? 180 : 0 }}\n                      transition={{ duration: 0.2 }}\n                      className=\"absolute top-1/2 right-5 flex -translate-y-1/2 items-center\"\n                    >\n                      <ChevronDown\n                        size={14}\n                        className=\"text-muted-foreground\"\n                      />\n                    </motion.div>\n                  </button>\n\n                  <AnimatePresence>\n                    {isRevenueOpen && (\n                      <motion.div\n                        initial={{ opacity: 0, y: -10, scale: 0.95 }}\n                        animate={{ opacity: 1, y: 0, scale: 1 }}\n                        exit={{ opacity: 0, y: -10, scale: 0.95 }}\n                        transition={{ duration: 0.15, ease: 'easeOut' }}\n                        className=\"bg-card border-border absolute z-[100] mt-1.5 w-full overflow-hidden rounded-xl border py-1 shadow-2xl\"\n                      >\n                        {revenueOptions.map((option) => (\n                          <button\n                            key={option}\n                            type=\"button\"\n                            onClick={() => {\n                              onRevenueChange(option);\n                              setIsRevenueOpen(false);\n                            }}\n                            className=\"hover:bg-muted/50 group flex w-full items-center justify-between px-4 py-2.5 text-left text-[13px] transition-colors\"\n                          >\n                            <span\n                              className={\n                                revenue === option\n                                  ? 'text-foreground font-medium'\n                                  : 'text-muted-foreground'\n                              }\n                            >\n                              {option}\n                            </span>\n                            {revenue === option && (\n                              <Check size={14} className=\"text-foreground\" />\n                            )}\n                          </button>\n                        ))}\n                      </motion.div>\n                    )}\n                  </AnimatePresence>\n                </div>\n              </div>\n\n              <div>\n                <label className=\"text-muted-foreground text-xs font-medium\">\n                  Your role\n                </label>\n                <input\n                  value={role}\n                  onChange={(e) => onRoleChange(e.target.value)}\n                  placeholder=\"e.g. Sales Manager\"\n                  className=\"border-border bg-card text-foreground placeholder:text-muted-foreground/50 focus-visible:ring-ring mt-2 h-10 w-full rounded-full border px-6 text-left text-sm transition-all outline-none focus-visible:ring-1\"\n                />\n              </div>\n            </div>\n          </div>\n\n          {/* Footer */}\n          <div className=\"mt-auto flex flex-wrap items-center justify-between gap-4 p-6 pt-4 sm:px-8 sm:pb-8\">\n            <div className=\"text-muted-foreground flex items-center gap-2 text-xs font-medium\">\n              <span className=\"whitespace-nowrap\">\n                STEP {step} / {totalSteps}\n              </span>\n              <div className=\"ml-2 flex gap-1\">\n                {Array.from({ length: 5 }).map((_, i) => (\n                  <span\n                    key={i}\n                    className={`h-3 w-1 rounded-full transition-colors ${i < Math.ceil((step / totalSteps) * 5) ? 'bg-primary' : 'bg-border'}`}\n                  />\n                ))}\n              </div>\n            </div>\n\n            <motion.button\n              whileHover={{ scale: 1.04 }}\n              whileTap={{ scale: 0.96 }}\n              transition={spring}\n              onClick={onContinue}\n              className=\"xs:w-auto bg-foreground text-background h-9 w-full rounded-full px-6 text-sm font-medium shadow-lg transition-all active:shadow-sm sm:w-auto\"\n            >\n              Continue\n            </motion.button>\n          </div>\n        </div>\n\n        {/* RIGHT IMAGE SECTION */}\n        <div className=\"relative order-1 h-48 overflow-hidden rounded-t-2xl sm:h-64 md:h-auto md:min-h-full lg:order-2 lg:rounded-t-none lg:rounded-r-2xl\">\n          <AnimatePresence mode=\"popLayout\">\n            <motion.img\n              key={imageUrl}\n              src={imageUrl}\n              initial={{ opacity: 0, scale: 1.03 }}\n              animate={{ opacity: 1, scale: 1 }}\n              exit={{ opacity: 0, scale: 0.98 }}\n              transition={spring}\n              className=\"absolute inset-0 h-full w-full object-cover\"\n            />\n            <div className=\"pointer-events-none absolute inset-0 bg-black/5 dark:bg-black/20\" />\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination",
      "type": "registry:component",
      "title": "pagination",
      "description": "A smooth draggable ruler-style picker for selecting numeric values with spring snapping.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { HiOutlineArrowLeft, HiOutlineArrowRight } from 'react-icons/hi2';\n\nexport interface PaginationProps {\n  totalPages?: number;\n  value?: number;\n  defaultValue?: number;\n  onChange?: (page: number) => void;\n}\n\nconst digitVariants = {\n  initial: (dir: number) => ({\n    y: dir > 0 ? 20 : -20,\n    opacity: 0,\n    scale: 0.5,\n    filter: 'blur(2px)',\n  }),\n  animate: {\n    y: 0,\n    opacity: 1,\n    scale: 1,\n    filter: 'blur(0px)',\n  },\n  exit: (dir: number) => ({\n    y: dir > 0 ? -20 : 20,\n    opacity: 0,\n    scale: 0.5,\n    filter: 'blur(2px)',\n  }),\n};\n\nexport function Pagination({\n  totalPages = 15,\n  value,\n  defaultValue = 1,\n  onChange,\n}: PaginationProps) {\n  const isControlled = value !== undefined;\n\n  const [internalPage, setInternalPage] = React.useState(defaultValue);\n  const [direction, setDirection] = React.useState(0);\n\n  const currentPage = isControlled ? value! : internalPage;\n\n  const digits = currentPage.toString().split('');\n\n  const [prevDigits, setPrevDigits] = React.useState<string[]>([]);\n  const [prevTicks, setPrevTicks] = React.useState<number[]>([]);\n\n  const len = digits.length;\n  const lenDiff = len - prevDigits.length;\n\n  const nextTicks = digits.map((digit, i) => {\n    const prevI = i - lenDiff;\n    const prevDigit = prevI >= 0 ? prevDigits[prevI] : undefined;\n    const prevTick = prevI >= 0 ? prevTicks[prevI] : 0;\n\n    return digit !== prevDigit ? (prevTick ?? 0) + 1 : (prevTick ?? 0);\n  });\n\n  if (prevDigits.join(\"\") !== digits.join(\"\")) {\n    setPrevTicks(nextTicks);\n    setPrevDigits(digits);\n  }\n\n  const paginate = (dir: number) => {\n    const next = Math.min(totalPages, Math.max(1, currentPage + dir));\n\n    if (next === currentPage) return;\n\n    setDirection(dir);\n\n    if (!isControlled) {\n      setInternalPage(next);\n    }\n\n    onChange?.(next);\n  };\n\n  return (\n    <div className=\"flex w-full justify-center\">\n      <div className=\"flex items-center gap-2 rounded-full border border-[#f0eff6dd] bg-[#F0EFF6] px-1 py-1 sm:gap-3 dark:border-zinc-800 dark:bg-zinc-900\">\n        <motion.button\n          whileTap={{ scale: 0.9 }}\n          transition={{ type: 'spring', stiffness: 400, damping: 20 }}\n          onClick={() => paginate(-1)}\n          disabled={currentPage === 1}\n          className={`flex h-11 w-11 items-center justify-center rounded-full bg-white text-[#030303] shadow transition-colors duration-200 hover:bg-zinc-800 hover:text-zinc-100 sm:h-14 sm:w-14 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-800 hover:dark:text-zinc-100 ${currentPage === 1\n            ? 'cursor-not-allowed opacity-50'\n            : 'cursor-pointer'\n            }`}\n        >\n          <HiOutlineArrowLeft className=\"h-5 w-5 sm:h-7 sm:w-7\" />\n        </motion.button>\n\n        <div className=\"mr-1 flex items-center pr-1 text-base font-bold text-[#59585F] select-none sm:text-xl dark:text-zinc-400\">\n          <div className=\"flex h-7 items-center justify-center sm:h-8\">\n            {digits.map((digit, index) => (\n              <div\n                key={`${index}-${len}`}\n                className=\"relative h-7 overflow-hidden w-[1ch]\"\n              >\n                <AnimatePresence\n                  mode=\"popLayout\"\n                  initial={false}\n                  custom={direction}\n                >\n                  <motion.span\n                    key={nextTicks[index]}\n                    custom={direction}\n                    variants={digitVariants}\n                    initial=\"initial\"\n                    animate=\"animate\"\n                    exit=\"exit\"\n                    transition={{\n                      type: 'spring',\n                      stiffness: 200,\n                      damping: 16,\n                      mass: 1.2,\n                    }}\n                    className=\"absolute inset-0 flex items-center justify-center text-zinc-600 tabular-nums dark:text-zinc-200\"\n                  >\n                    {digit}\n                  </motion.span>\n                </AnimatePresence>\n              </div>\n            ))}\n          </div>\n\n          <span className=\"ml-1 flex h-7 items-center sm:h-8 dark:text-zinc-300\">\n            of {totalPages}\n          </span>\n        </div>\n\n        <motion.button\n\n          whileTap={{ scale: 0.9 }}\n          transition={{ type: 'spring', stiffness: 400, damping: 20 }}\n          onClick={() => paginate(1)}\n          disabled={currentPage === totalPages}\n          className={`flex h-11 w-11 items-center justify-center rounded-full bg-white text-[#030303] shadow transition-colors duration-200 hover:bg-zinc-800 hover:text-zinc-100 sm:h-14 sm:w-14 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-800 hover:dark:text-zinc-100 ${currentPage === 1\n            ? 'cursor-not-allowed opacity-50'\n            : 'cursor-pointer'\n            }`}\n        >\n          <HiOutlineArrowRight className=\"h-5 w-5 sm:h-7 sm:w-7\" />\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-base",
      "type": "registry:component",
      "title": "pagination (base)",
      "description": "Theme-ready base variant of A smooth draggable ruler-style picker for selecting numeric values with spring snapping..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { HiOutlineArrowLeft, HiOutlineArrowRight } from 'react-icons/hi2';\n\nexport interface PaginationProps {\n  totalPages?: number;\n  value?: number;\n  defaultValue?: number;\n  onChange?: (page: number) => void;\n}\n\nconst digitVariants = {\n  initial: (dir: number) => ({\n    y: dir > 0 ? 20 : -20,\n    opacity: 0,\n    scale: 0.5,\n    filter: 'blur(2px)',\n  }),\n  animate: {\n    y: 0,\n    opacity: 1,\n    scale: 1,\n    filter: 'blur(0px)',\n  },\n  exit: (dir: number) => ({\n    y: dir > 0 ? -20 : 20,\n    opacity: 0,\n    scale: 0.5,\n    filter: 'blur(2px)',\n  }),\n};\n\nexport function Pagination({\n  totalPages = 15,\n  value,\n  defaultValue = 1,\n  onChange,\n}: PaginationProps) {\n  const isControlled = value !== undefined;\n\n  const [internalPage, setInternalPage] = React.useState(defaultValue);\n  const [direction, setDirection] = React.useState(0);\n\n  const currentPage = isControlled ? value! : internalPage;\n\n  const digits = currentPage.toString().split('');\n\n  const [prevDigits, setPrevDigits] = React.useState<string[]>([]);\n  const [prevTicks, setPrevTicks] = React.useState<number[]>([]);\n\n  const len = digits.length;\n  const lenDiff = len - prevDigits.length;\n\n  const nextTicks = digits.map((digit, i) => {\n    const prevI = i - lenDiff;\n    const prevDigit = prevI >= 0 ? prevDigits[prevI] : undefined;\n    const prevTick = prevI >= 0 ? prevTicks[prevI] : 0;\n\n    return digit !== prevDigit ? (prevTick ?? 0) + 1 : (prevTick ?? 0);\n  });\n\n  if (prevDigits.join(\"\") !== digits.join(\"\")) {\n    setPrevTicks(nextTicks);\n    setPrevDigits(digits);\n  }\n\n  const paginate = (dir: number) => {\n    const next = Math.min(totalPages, Math.max(1, currentPage + dir));\n\n    if (next === currentPage) return;\n\n    setDirection(dir);\n\n    if (!isControlled) {\n      setInternalPage(next);\n    }\n\n    onChange?.(next);\n  };\n\n  return (\n    <div className=\"theme-injected flex w-full justify-center\">\n      <div className=\"border-border bg-muted flex items-center gap-2 rounded-lg border px-1 py-1 sm:gap-3\">\n        <motion.button\n          whileTap={{ scale: 0.9 }}\n          transition={{ type: 'spring', stiffness: 400, damping: 20 }}\n          onClick={() => paginate(-1)}\n          disabled={currentPage === 1}\n          className={`bg-background dark:bg-foreground dark:text-background dark:hover:bg-foreground/80 text-foregroundhover:text-foreground/80 hover:text-accent-foreground flex h-11 w-11 items-center justify-center rounded-lg shadow transition-colors duration-200 sm:h-14 sm:w-14 ${\n            currentPage === 1\n              ? 'cursor-not-allowed opacity-50'\n              : 'cursor-pointer'\n          }`}\n        >\n          <HiOutlineArrowLeft className=\"h-5 w-5 sm:h-7 sm:w-7\" />\n        </motion.button>\n\n        <div className=\"text-muted-foreground mr-1 flex items-center pr-1 text-base font-bold select-none sm:text-xl\">\n          <div className=\"flex h-7 items-center justify-center sm:h-8\">\n            {digits.map((digit, index) => (\n              <div\n                key={`${index}-${len}`}\n                className=\"relative h-7 w-[1ch] overflow-hidden\"\n              >\n                <AnimatePresence\n                  mode=\"popLayout\"\n                  initial={false}\n                  custom={direction}\n                >\n                  <motion.span\n                    key={nextTicks[index]}\n                    custom={direction}\n                    variants={digitVariants}\n                    initial=\"initial\"\n                    animate=\"animate\"\n                    exit=\"exit\"\n                    transition={{\n                      type: 'spring',\n                      stiffness: 200,\n                      damping: 16,\n                      mass: 1.2,\n                    }}\n                    className=\"text-muted-foreground absolute inset-0 flex items-center justify-center tabular-nums\"\n                  >\n                    {digit}\n                  </motion.span>\n                </AnimatePresence>\n              </div>\n            ))}\n          </div>\n\n          <span className=\"text-muted-foreground ml-1 flex h-7 items-center sm:h-8\">\n            of {totalPages}\n          </span>\n        </div>\n\n        <motion.button\n          whileTap={{ scale: 0.9 }}\n          transition={{ type: 'spring', stiffness: 400, damping: 20 }}\n          onClick={() => paginate(1)}\n          disabled={currentPage === totalPages}\n          className={`bg-background dark:bg-foreground dark:text-background dark:hover:bg-foreground/80 text-foreground hover:bg-background/80 hover:text-foreground/80 flex h-11 w-11 items-center justify-center rounded-lg shadow transition-colors duration-200 sm:h-14 sm:w-14 ${\n            currentPage === totalPages\n              ? 'cursor-not-allowed opacity-50'\n              : 'cursor-pointer'\n          }`}\n        >\n          <HiOutlineArrowRight className=\"h-5 w-5 sm:h-7 sm:w-7\" />\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pin-item",
      "type": "registry:component",
      "title": "Pin Item",
      "description": "A sleek list component with shared-layout transitions for pinning items and managing priority views.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/pin-item.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, MotionConfig, type Transition } from 'motion/react';\nimport { Pin } from 'lucide-react';\nimport { IoFastFood } from 'react-icons/io5';\nimport {\n  FaChargingStation,\n  FaPills,\n  FaSailboat,\n  FaUtensils,\n} from 'react-icons/fa6';\n\nexport type PlaceItem = {\n  id: number;\n  name: string;\n  type: string;\n  status: string;\n  icon: React.ComponentType<{ size?: number }>;\n  pinned?: boolean;\n};\n\nconst INITIAL_PLACES: PlaceItem[] = [\n  {\n    id: 1,\n    name: 'Harbor Bay Marina',\n    type: 'Marina',\n    status: 'Closes 7:00 PM',\n    icon: IoFastFood,\n    pinned: false,\n  },\n  {\n    id: 2,\n    name: 'Mocha Brew',\n    type: 'Cafe',\n    status: 'Closes 9:00 PM',\n    icon: FaSailboat,\n    pinned: false,\n  },\n  {\n    id: 3,\n    name: 'Olive Bistro',\n    type: 'Restaurant',\n    status: 'Closes 11:00 PM',\n    icon: FaUtensils,\n    pinned: false,\n  },\n  {\n    id: 4,\n    name: 'GreenVolt Hub',\n    type: 'EV Charger',\n    status: 'Open 24 hours',\n    icon: FaChargingStation,\n    pinned: false,\n  },\n  {\n    id: 5,\n    name: 'CarePlus Pharmacy',\n    type: 'Pharmacy',\n    status: 'Open 24 hours',\n    icon: FaPills,\n    pinned: false,\n  },\n];\n\nconst springConfig:Transition = {\n  type: 'spring',\n  stiffness: 400,\n  damping: 40,\n} \n\ntype PinItemComponentProps = {\n  items?: PlaceItem[];\n};\n\nexport const PinItemComponent = ({\n  items = INITIAL_PLACES,\n}: PinItemComponentProps) => {\n  const [places, setPlaces] = useState<PlaceItem[]>(\n    items.map((p) => ({ ...p, pinned: p.pinned ?? false })),\n  );\n\n  const togglePin = (id: number) => {\n    setPlaces((prev) =>\n      prev.map((place) =>\n        place.id === id ? { ...place, pinned: !place.pinned } : place,\n      ),\n    );\n  };\n\n  const pinnedPlaces = places.filter((p) => p.pinned);\n  const unpinnedPlaces = places.filter((p) => !p.pinned);\n\n  return (\n    <div className=\"w-full max-w-[355px] space-y-6\">\n      <MotionConfig transition={springConfig}>\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {pinnedPlaces.length > 0 && (\n            <motion.div\n              layout\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"space-y-3\"\n            >\n              <motion.h3\n                layout\n                className=\"ml-1 text-[14px] font-semibold tracking-wider text-[#ADACB8] dark:text-neutral-500\"\n              >\n                Pinned Places\n              </motion.h3>\n              <div className=\"space-y-2\">\n                {pinnedPlaces.map((place) => (\n                  <PlaceCard\n                    key={place.id}\n                    place={place}\n                    onToggle={togglePin}\n                  />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <motion.div layout className=\"space-y-3\">\n          <motion.h3\n            layout\n            className=\"ml-1 text-[14px] font-semibold tracking-wider text-[#ADACB8] dark:text-neutral-500\"\n          >\n            All Places\n          </motion.h3>\n          <div className=\"space-y-3\">\n            {unpinnedPlaces.map((place) => (\n              <PlaceCard key={place.id} place={place} onToggle={togglePin} />\n            ))}\n          </div>\n        </motion.div>\n      </MotionConfig>\n    </div>\n  );\n};\n\n\nconst PlaceCard = ({\n  place,\n  onToggle,\n}: {\n  place: PlaceItem;\n  onToggle: (id: number) => void;\n}) => {\n  const Icon = place.icon;\n\n  return (\n    <motion.div\n      layoutId={`card-${place.id}`}\n      transition={springConfig}\n      className=\"group relative flex cursor-default items-center justify-between gap-2.5 rounded-2xl border border-gray-100 bg-[#F6F5FA] p-2.5 shadow-xs transition-shadow hover:shadow-sm sm:p-3 dark:border-neutral-800 dark:bg-neutral-900\"\n    >\n      <div className=\"flex items-center gap-3\">\n        <motion.div\n          layout\n          className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-[#FEFEFE] text-[#AEADB9] dark:bg-neutral-800 dark:text-neutral-400\"\n        >\n          <Icon size={22} />\n        </motion.div>\n\n        <motion.div layout>\n          <h4 className=\"text-base leading-tight font-bold text-[#27272B] dark:text-neutral-100\">\n            {place.name}\n          </h4>\n          <p className=\"mt-0.5 max-w-[180px] truncate text-[14px] font-semibold text-[#87868D] sm:max-w-none dark:text-neutral-400\">\n            {place.type} • {place.status}\n          </p>\n        </motion.div>\n      </div>\n\n      <motion.button\n        layout\n        onClick={() => onToggle(place.id)}\n        className={`relative z-10 flex h-8 w-8 items-center justify-center rounded-full transition-all duration-300 ${\n          place.pinned\n            ? 'bg-yellow-400 text-white opacity-100'\n            : 'bg-[#CDCCD5] text-[#fefefe] opacity-0 group-hover:opacity-100 dark:bg-neutral-700 dark:text-neutral-400'\n        }`}\n      >\n        <Pin size={16} className=\"fill-white\" />\n      </motion.button>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pin-item-base",
      "type": "registry:component",
      "title": "Pin Item (base)",
      "description": "Theme-ready base variant of A sleek list component with shared-layout transitions for pinning items and managing priority views..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/pin-item.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { Pin } from 'lucide-react';\nimport { IoFastFood } from 'react-icons/io5';\nimport {\n  FaChargingStation,\n  FaPills,\n  FaSailboat,\n  FaUtensils,\n} from 'react-icons/fa6';\n\nexport type PlaceItem = {\n  id: number;\n  name: string;\n  type: string;\n  status: string;\n  icon: React.ComponentType<{ size?: number }>;\n  pinned?: boolean;\n};\n\nconst INITIAL_PLACES: PlaceItem[] = [\n  {\n    id: 1,\n    name: 'Harbor Bay Marina',\n    type: 'Marina',\n    status: 'Closes 7:00 PM',\n    icon: IoFastFood,\n    pinned: false,\n  },\n  {\n    id: 2,\n    name: 'Mocha Brew',\n    type: 'Cafe',\n    status: 'Closes 9:00 PM',\n    icon: FaSailboat,\n    pinned: false,\n  },\n  {\n    id: 3,\n    name: 'Olive Bistro',\n    type: 'Restaurant',\n    status: 'Closes 11:00 PM',\n    icon: FaUtensils,\n    pinned: false,\n  },\n  {\n    id: 4,\n    name: 'GreenVolt Hub',\n    type: 'EV Charger',\n    status: 'Open 24 hours',\n    icon: FaChargingStation,\n    pinned: false,\n  },\n  {\n    id: 5,\n    name: 'CarePlus Pharmacy',\n    type: 'Pharmacy',\n    status: 'Open 24 hours',\n    icon: FaPills,\n    pinned: false,\n  },\n];\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 400,\n  damping: 40,\n};\n\ntype PinItemComponentProps = {\n  items?: PlaceItem[];\n};\n\nexport const PinItemComponent = ({\n  items = INITIAL_PLACES,\n}: PinItemComponentProps) => {\n  const [places, setPlaces] = useState<PlaceItem[]>(\n    items.map((p) => ({ ...p, pinned: p.pinned ?? false })),\n  );\n\n  const togglePin = (id: number) => {\n    setPlaces((prev) =>\n      prev.map((place) =>\n        place.id === id ? { ...place, pinned: !place.pinned } : place,\n      ),\n    );\n  };\n\n  const pinnedPlaces = places.filter((p) => p.pinned);\n  const unpinnedPlaces = places.filter((p) => !p.pinned);\n\n  return (\n    <div className=\"theme-injected w-full max-w-[355px] space-y-6\">\n      <MotionConfig transition={springConfig}>\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {pinnedPlaces.length > 0 && (\n            <motion.div\n              layout\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"space-y-3\"\n            >\n              <motion.h3\n                layout\n                className=\"text-muted-foreground ml-1 text-[14px] font-semibold tracking-wider\"\n              >\n                Pinned Places\n              </motion.h3>\n              <div className=\"space-y-2\">\n                {pinnedPlaces.map((place) => (\n                  <PlaceCard\n                    key={place.id}\n                    place={place}\n                    onToggle={togglePin}\n                  />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <motion.div layout className=\"space-y-3\">\n          <motion.h3\n            layout\n            className=\"text-muted-foreground ml-1 text-[14px] font-semibold tracking-wider\"\n          >\n            All Places\n          </motion.h3>\n          <div className=\"space-y-3\">\n            {unpinnedPlaces.map((place) => (\n              <PlaceCard key={place.id} place={place} onToggle={togglePin} />\n            ))}\n          </div>\n        </motion.div>\n      </MotionConfig>\n    </div>\n  );\n};\n\nconst PlaceCard = ({\n  place,\n  onToggle,\n}: {\n  place: PlaceItem;\n  onToggle: (id: number) => void;\n}) => {\n  const Icon = place.icon;\n\n  return (\n    <motion.div\n      layoutId={`card-${place.id}`}\n      transition={springConfig}\n      className=\"group border-border bg-muted relative flex cursor-default items-center justify-between gap-2.5 rounded-lg border p-2.5 shadow-sm transition-shadow hover:shadow sm:p-3\"\n    >\n      <div className=\"flex items-center gap-3\">\n        <motion.div\n          layout\n          className=\"bg-background text-muted-foreground flex h-10 w-10 items-center justify-center rounded-lg\"\n        >\n          <Icon size={22} />\n        </motion.div>\n\n        <motion.div layout>\n          <h4 className=\"text-foreground text-base leading-tight font-bold\">\n            {place.name}\n          </h4>\n          <p className=\"text-muted-foreground mt-0.5 max-w-[180px] truncate text-[14px] font-semibold sm:max-w-none\">\n            {place.type} • {place.status}\n          </p>\n        </motion.div>\n      </div>\n\n      <motion.button\n        layout\n        onClick={() => onToggle(place.id)}\n        className={`relative z-10 flex h-8 w-8 items-center justify-center rounded-lg transition-all duration-300 ${\n          place.pinned\n            ? 'bg-primary text-primary-foreground opacity-100'\n            : 'bg-muted text-muted-foreground opacity-0 group-hover:opacity-100'\n        }`}\n      >\n        <Pin size={16} className=\"fill-current\" />\n      </motion.button>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pop-stepper",
      "type": "registry:component",
      "title": "Pop Stepper",
      "description": "Interactive micro-interaction component for pop stepper.",
      "dependencies": [
        "lucide-react",
        "motion",
        "next-themes"
      ],
      "files": [
        {
          "path": "components/watermelon/pop-stepper.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { Minus, Plus } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { useTheme } from 'next-themes';\nimport { useState } from 'react';\n\ninterface PopStepperProps {\n  initialValue?: number;\n  step?: number;\n  min?: number;\n  max?: number;\n  fontClassName?: string;\n  lightColors?: string[];\n  darkColors?: string[];\n}\n\nfunction createColorTimes(length: number) {\n  if (length <= 2) return [0, 1];\n\n  const startHold = 0.25;\n  const endHold = 0.25;\n  const usable = 1 - startHold - endHold;\n  const middleCount = length - 2;\n\n  return [\n    0,\n    ...Array.from(\n      { length: middleCount },\n      (_, i) => startHold + (usable * (i + 1)) / (middleCount + 1),\n    ),\n    1,\n  ];\n}\n\nexport default function PopStepper({\n  initialValue = 10,\n  step = 10,\n  min = 0,\n  max = 100,\n  fontClassName = 'font-sans',\n  lightColors = ['#000000', '#ef4444', '#3b82f6', '#22c55e', '#000000'],\n  darkColors = ['#ffffff', '#be123c', '#1d4ed8', '#15803d', '#ffffff'],\n}: PopStepperProps) {\n  const [value, setValue] = useState(initialValue);\n  const [prevValue, setPrevValue] = useState(initialValue);\n\n  const { resolvedTheme } = useTheme();\n\n  const colors = resolvedTheme === 'dark' ? darkColors : lightColors;\n\n  const updateValue = (next: number) => {\n    if (next === value) return;\n    setPrevValue(value);\n    setValue(next);\n  };\n\n  const isIncrementing = value > prevValue;\n\n  return (\n    <div className=\"flex h-screen w-full items-center justify-center gap-3  transition-colors \">\n      <motion.button\n        whileTap={{\n          scale: 1.15,\n        }}\n        transition={{\n          duration: 0.15,\n        }}\n        onClick={() => updateValue(Math.max(min, value - step))}\n        className=\"rounded-full bg-black p-2 text-white dark:bg-white dark:text-black\"\n      >\n        <Minus className=\"size-6\" />\n      </motion.button>\n\n      <div className=\"inline-flex min-h-18 min-w-40 items-center justify-center overflow-hidden rounded-xl bg-zinc-100 px-5 py-2 text-zinc-950 dark:bg-zinc-900 dark:text-zinc-50\">\n        <motion.span\n          key={value}\n          initial={{\n            scale: 1,\n            rotate: 0,\n          }}\n          animate={{\n            scale: [1, 1.25, 1.25, 1],\n            rotate: [\n              0,\n              isIncrementing ? -20 : 20,\n              isIncrementing ? -20 : 20,\n              0,\n            ],\n            color: colors,\n          }}\n          transition={{\n            scale: {\n              duration: 0.4,\n              times: [0, 0.4, 0.6, 1],\n              ease: 'easeInOut',\n            },\n            rotate: {\n              duration: 0.4,\n              times: [0, 0.4, 0.6, 1],\n              ease: 'easeInOut',\n            },\n            color: {\n              duration: 0.35,\n              times: createColorTimes(colors.length),\n            },\n          }}\n          className={`text-5xl font-black tracking-tight whitespace-nowrap ${fontClassName}`}\n        >\n          {value}\n        </motion.span>\n      </div>\n\n      <motion.button\n        whileTap={{\n          scale: 1.15,\n        }}\n        transition={{\n          duration: 0.15,\n        }}\n        onClick={() => updateValue(Math.min(max, value + step))}\n        className=\"rounded-full bg-black p-2 text-white dark:bg-white dark:text-black\"\n      >\n        <Plus className=\"size-6\" />\n      </motion.button>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pop-stepper-base",
      "type": "registry:component",
      "title": "Pop Stepper (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component for pop stepper..",
      "dependencies": [
        "lucide-react",
        "motion",
        "next-themes"
      ],
      "files": [
        {
          "path": "components/watermelon/pop-stepper.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { Minus, Plus } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { useTheme } from 'next-themes';\nimport { useState } from 'react';\n\ninterface PopStepperProps {\n  initialValue?: number;\n  step?: number;\n  min?: number;\n  max?: number;\n  fontClassName?: string;\n  lightColors?: string[];\n  darkColors?: string[];\n}\n\nfunction createColorTimes(length: number) {\n  if (length <= 2) return [0, 1];\n\n  const startHold = 0.25;\n  const endHold = 0.25;\n  const usable = 1 - startHold - endHold;\n  const middleCount = length - 2;\n\n  return [\n    0,\n    ...Array.from(\n      { length: middleCount },\n      (_, i) => startHold + (usable * (i + 1)) / (middleCount + 1),\n    ),\n    1,\n  ];\n}\n\nexport default function PopStepper({\n  initialValue = 10,\n  step = 10,\n  min = 0,\n  max = 100,\n  fontClassName = 'font-sans',\n  lightColors = ['#000000', '#ef4444', '#3b82f6', '#22c55e', '#000000'],\n  darkColors = ['#ffffff', '#be123c', '#1d4ed8', '#15803d', '#ffffff'],\n}: PopStepperProps) {\n  const [value, setValue] = useState(initialValue);\n  const [prevValue, setPrevValue] = useState(initialValue);\n\n  const { resolvedTheme } = useTheme();\n\n  const colors = resolvedTheme === 'dark' ? darkColors : lightColors;\n\n  const updateValue = (next: number) => {\n    if (next === value) return;\n    setPrevValue(value);\n    setValue(next);\n  };\n\n  const isIncrementing = value > prevValue;\n\n  return (\n    <div className=\"theme-injected flex h-screen w-full items-center justify-center gap-3 transition-colors\">\n      <motion.button\n        whileTap={{\n          scale: 1.15,\n        }}\n        transition={{\n          duration: 0.15,\n        }}\n        onClick={() => updateValue(Math.max(min, value - step))}\n        className=\"bg-primary text-primary-foreground rounded-full p-2\"\n      >\n        <Minus className=\"size-6\" />\n      </motion.button>\n\n      <div className=\"border-border bg-card text-card-foreground inline-flex min-h-18 min-w-40 items-center justify-center overflow-hidden rounded-xl border px-5 py-2\">\n        <motion.span\n          key={value}\n          initial={{\n            scale: 1,\n            rotate: 0,\n          }}\n          animate={{\n            scale: [1, 1.25, 1.25, 1],\n            rotate: [\n              0,\n              isIncrementing ? -20 : 20,\n              isIncrementing ? -20 : 20,\n              0,\n            ],\n            color: colors,\n          }}\n          transition={{\n            scale: {\n              duration: 0.4,\n              times: [0, 0.4, 0.6, 1],\n              ease: 'easeInOut',\n            },\n            rotate: {\n              duration: 0.4,\n              times: [0, 0.4, 0.6, 1],\n              ease: 'easeInOut',\n            },\n            color: {\n              duration: 0.35,\n              times: createColorTimes(colors.length),\n            },\n          }}\n          className={`text-5xl font-black tracking-tight whitespace-nowrap ${fontClassName}`}\n        >\n          {value}\n        </motion.span>\n      </div>\n\n      <motion.button\n        whileTap={{\n          scale: 1.15,\n        }}\n        transition={{\n          duration: 0.15,\n        }}\n        onClick={() => updateValue(Math.min(max, value + step))}\n        className=\"bg-primary text-primary-foreground rounded-full p-2\"\n      >\n        <Plus className=\"size-6\" />\n      </motion.button>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "predictive-text",
      "type": "registry:component",
      "title": "Predictive Text",
      "description": "Suggests next words in real time while users type naturally.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/predictive-text.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ArrowUp, ImageIcon, Mic } from 'lucide-react';\n\ninterface PredictiveInputProps {\n  dictionary?: string[];\n  placeholder?: string;\n  onSend?: (text: string) => void;\n  className?: string;\n}\n\nconst DEFAULT_WORDS = [\n  \"what\", \"whatever\", \"what's\", \"bright\", \"brighter\", \"brigade\",\n  \"sunny\", \"sunset\", \"sun\", \"day\", \"dance\", \"data\", \"a\", \"an\", \"any\"\n];\n\nexport const PredictiveText: React.FC<PredictiveInputProps> = ({\n  dictionary = DEFAULT_WORDS,\n  placeholder = \"Write a message\",\n  onSend,\n  className = \"\"\n}) => {\n  const [text, setText] = useState(\"\");\n\n  const [activeSuggestionIndex, setActiveSuggestionIndex] = useState<number>(-1);\n  const [wordFrequency, setWordFrequency] = useState<Record<string, number>>({});\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  // Build a combined dictionary from the provided list + frequently used words\n  const enrichedDictionary = useCallback(() => {\n    const freqWords = Object.keys(wordFrequency).sort(\n      (a, b) => wordFrequency[b] - wordFrequency[a]\n    );\n    // Merge freq words first (for priority), then dedupe with base dictionary\n    return Array.from(new Set([...freqWords, ...dictionary]));\n  }, [dictionary, wordFrequency]);\n\n  // Derive lastWord and suggestions during render\n  const lastWord = useMemo(() => {\n    const words = text.split(/\\s+/);\n    return words[words.length - 1].toLowerCase();\n  }, [text]);\n\n  const suggestions = useMemo(() => {\n    if (lastWord.length > 0) {\n      const dict = enrichedDictionary();\n      return dict\n        .filter(word => word.toLowerCase().startsWith(lastWord) && word.toLowerCase() !== lastWord)\n        .slice(0, 3);\n    }\n    return [];\n  }, [lastWord, enrichedDictionary]);\n\n  // Reset active suggestion whenever text changes via typing\n  useEffect(() => {\n    requestAnimationFrame(() => setActiveSuggestionIndex(-1));\n  }, [text]);\n\n  const applySuggestion = useCallback((suggestion: string) => {\n    const words = text.split(/\\s+/);\n    words[words.length - 1] = suggestion;\n    const newText = words.join(\" \") + \" \";\n    setText(newText);\n    setActiveSuggestionIndex(-1);\n    inputRef.current?.focus();\n  }, [text]);\n\n  const handleSend = useCallback(() => {\n    if (!text.trim()) return;\n\n    // Track word frequency for smarter future suggestions\n    const usedWords = text.trim().toLowerCase().split(/\\s+/);\n    setWordFrequency(prev => {\n      const updated = { ...prev };\n      usedWords.forEach(w => {\n        updated[w] = (updated[w] ?? 0) + 1;\n      });\n      return updated;\n    });\n\n    onSend?.(text);\n    setText(\"\");\n  }, [text, onSend]);\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    switch (e.key) {\n      case \"Enter\": {\n        if (activeSuggestionIndex >= 0 && suggestions[activeSuggestionIndex]) {\n          e.preventDefault();\n          applySuggestion(suggestions[activeSuggestionIndex]);\n        } else {\n          e.preventDefault();\n          handleSend();\n        }\n        break;\n      }\n\n      case \"Tab\": {\n        if (suggestions.length > 0) {\n          e.preventDefault();\n          // Cycle through suggestions, -1 means none selected\n          const next = (activeSuggestionIndex + 1) % suggestions.length;\n          setActiveSuggestionIndex(next);\n        }\n        break;\n      }\n\n      case \"ArrowRight\": {\n        // Accept first suggestion on ArrowRight when cursor is at end\n        const input = inputRef.current;\n        if (\n          suggestions.length > 0 &&\n          input &&\n          input.selectionStart === text.length\n        ) {\n          e.preventDefault();\n          applySuggestion(suggestions[0]);\n        }\n        break;\n      }\n\n      case \"Escape\": {\n        if (text.length > 0) {\n          e.preventDefault();\n          setText(\"\");\n        }\n        break;\n      }\n\n      default:\n        break;\n    }\n  };\n\n  return (\n    <div className={`w-full flex flex-col items-center justify-center p-4 sm:p-6 antialiased select-none ${className}`}>\n      <div className=\"relative w-full max-w-[95%] sm:max-w-md flex flex-col items-start mb-10 sm:mb-20\">\n\n        <div className=\"h-10 sm:h-12 w-full flex justify-start items-center mb-3\">\n          <AnimatePresence>\n            {suggestions.length > 0 && (\n              <motion.div\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: 0, scale: 1 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\n                className=\"flex items-center gap-0.5 border-2 px-1 py-1 rounded-full shadow-sm transition-colors bg-white border-neutral-100 dark:bg-neutral-900 dark:border-neutral-800\"\n              >\n                {suggestions.map((word, i) => (\n                  <button\n                    key={word}\n                    onClick={() => applySuggestion(word)}\n                    className={`px-3 sm:px-4 py-1 text-xs sm:text-sm font-bold transition-colors whitespace-nowrap\n                      ${i === activeSuggestionIndex\n                        ? 'text-blue-500 dark:text-blue-400'\n                        : 'text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300'}\n                      ${i !== 0 ? 'border-l-2 pl-3 sm:pl-4 border-neutral-100 dark:border-neutral-800' : ''}\n                    `}\n                  >\n                    {word}\n                  </button>\n                ))}\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        <div className=\"relative w-full group\">\n          <input\n            ref={inputRef}\n            type=\"text\"\n            value={text}\n            onChange={(e) => setText(e.target.value)}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            className=\"w-full border-none rounded-4xl sm:rounded-[22px] shadow-sm py-3.5 sm:py-4 px-5 sm:px-6 pr-20 sm:pr-24 text-sm sm:text-base outline-none transition-all font-bold tracking-wide \n              bg-neutral-100 text-black placeholder:text-neutral-400 focus:ring-1 focus:ring-neutral-200\n              dark:bg-neutral-900 dark:text-white dark:placeholder:text-neutral-600 dark:focus:ring-neutral-800\"\n          />\n\n          <div className=\"absolute right-2 sm:right-3 top-1/2 -translate-y-1/2 flex items-center gap-2 sm:gap-3\">\n            <AnimatePresence mode=\"wait\">\n              {text.length > 0 ? (\n                <motion.button\n                  key=\"send-btn\"\n                  initial={{ opacity: 0, scale: 0.8 }}\n                  animate={{ opacity: 1, scale: 1 }}\n                  exit={{ opacity: 0, scale: 0.8 }}\n                  onClick={handleSend}\n                  className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-full flex items-center justify-center transition-all active:scale-90 bg-neutral-900 text-white dark:bg-white dark:text-black shadow-md\"\n                >\n                  <ArrowUp size={18} strokeWidth={3} />\n                </motion.button>\n              ) : (\n                <motion.div\n                  key=\"placeholder-icons\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"flex items-center gap-3 sm:gap-4 pr-1 sm:pr-2 text-neutral-400 dark:text-neutral-600\"\n                >\n                  <ImageIcon size={20} className=\"cursor-pointer hover:text-neutral-600 dark:hover:text-neutral-400 transition-colors\" />\n                  <Mic size={20} className=\"cursor-pointer hover:text-neutral-600 dark:hover:text-neutral-400 transition-colors\" />\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "predictive-text-base",
      "type": "registry:component",
      "title": "Predictive Text (base)",
      "description": "Theme-ready base variant of Suggests next words in real time while users type naturally..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/predictive-text.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, {\n  useState,\n  useEffect,\n  useRef,\n  useCallback,\n  useMemo,\n} from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ArrowUp, ImageIcon, Mic } from 'lucide-react';\n\ninterface PredictiveInputProps {\n  dictionary?: string[];\n  placeholder?: string;\n  onSend?: (text: string) => void;\n  className?: string;\n}\n\nconst DEFAULT_WORDS = [\n  'what',\n  'whatever',\n  \"what's\",\n  'bright',\n  'brighter',\n  'brigade',\n  'sunny',\n  'sunset',\n  'sun',\n  'day',\n  'dance',\n  'data',\n  'a',\n  'an',\n  'any',\n];\n\nexport const PredictiveText: React.FC<PredictiveInputProps> = ({\n  dictionary = DEFAULT_WORDS,\n  placeholder = 'Write a message',\n  onSend,\n  className = '',\n}) => {\n  const [text, setText] = useState('');\n\n  const [activeSuggestionIndex, setActiveSuggestionIndex] =\n    useState<number>(-1);\n  const [wordFrequency, setWordFrequency] = useState<Record<string, number>>(\n    {},\n  );\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  const enrichedDictionary = useCallback(() => {\n    const freqWords = Object.keys(wordFrequency).sort(\n      (a, b) => wordFrequency[b] - wordFrequency[a],\n    );\n    return Array.from(new Set([...freqWords, ...dictionary]));\n  }, [dictionary, wordFrequency]);\n\n  const lastWord = useMemo(() => {\n    const words = text.split(/\\s+/);\n    return words[words.length - 1].toLowerCase();\n  }, [text]);\n\n  const suggestions = useMemo(() => {\n    if (lastWord.length > 0) {\n      const dict = enrichedDictionary();\n      return dict\n        .filter(\n          (word) =>\n            word.toLowerCase().startsWith(lastWord) &&\n            word.toLowerCase() !== lastWord,\n        )\n        .slice(0, 3);\n    }\n    return [];\n  }, [lastWord, enrichedDictionary]);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setActiveSuggestionIndex(-1));\n  }, [text]);\n\n  const applySuggestion = useCallback(\n    (suggestion: string) => {\n      const words = text.split(/\\s+/);\n      words[words.length - 1] = suggestion;\n      const newText = words.join(' ') + ' ';\n      setText(newText);\n      setActiveSuggestionIndex(-1);\n      inputRef.current?.focus();\n    },\n    [text],\n  );\n\n  const handleSend = useCallback(() => {\n    if (!text.trim()) return;\n\n    const usedWords = text.trim().toLowerCase().split(/\\s+/);\n    setWordFrequency((prev) => {\n      const updated = { ...prev };\n      usedWords.forEach((w) => {\n        updated[w] = (updated[w] ?? 0) + 1;\n      });\n      return updated;\n    });\n\n    onSend?.(text);\n    setText('');\n  }, [text, onSend]);\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    switch (e.key) {\n      case 'Enter': {\n        if (activeSuggestionIndex >= 0 && suggestions[activeSuggestionIndex]) {\n          e.preventDefault();\n          applySuggestion(suggestions[activeSuggestionIndex]);\n        } else {\n          e.preventDefault();\n          handleSend();\n        }\n        break;\n      }\n\n      case 'Tab': {\n        if (suggestions.length > 0) {\n          e.preventDefault();\n          const next = (activeSuggestionIndex + 1) % suggestions.length;\n          setActiveSuggestionIndex(next);\n        }\n        break;\n      }\n\n      case 'ArrowRight': {\n        const input = inputRef.current;\n        if (\n          suggestions.length > 0 &&\n          input &&\n          input.selectionStart === text.length\n        ) {\n          e.preventDefault();\n          applySuggestion(suggestions[0]);\n        }\n        break;\n      }\n\n      case 'Escape': {\n        if (text.length > 0) {\n          e.preventDefault();\n          setText('');\n        }\n        break;\n      }\n\n      default:\n        break;\n    }\n  };\n\n  return (\n    <div\n      className={`theme-injected flex w-full flex-col items-center justify-center p-4 antialiased select-none sm:p-6 ${className}`}\n    >\n      <div className=\"relative mb-10 flex w-full max-w-[95%] flex-col items-start sm:mb-20 sm:max-w-md\">\n        <div className=\"mb-3 flex h-10 w-full items-center justify-start sm:h-12\">\n          <AnimatePresence>\n            {suggestions.length > 0 && (\n              <motion.div\n                initial={{ opacity: 0, y: 10, scale: 0.95 }}\n                animate={{ opacity: 1, y: 0, scale: 1 }}\n                exit={{ opacity: 0, y: 10, scale: 0.95 }}\n                transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n                className=\"bg-card border-border flex items-center gap-0.5 rounded-lg border px-1 py-1 shadow-sm transition-colors\"\n              >\n                {suggestions.map((word, i) => (\n                  <button\n                    key={word}\n                    onClick={() => applySuggestion(word)}\n                    className={`px-3 py-1 text-xs font-bold whitespace-nowrap transition-colors sm:px-4 sm:text-sm ${\n                      i === activeSuggestionIndex\n                        ? 'text-primary'\n                        : 'text-muted-foreground hover:text-foreground'\n                    } ${i !== 0 ? 'border-border border-l pl-3 sm:pl-4' : ''} `}\n                  >\n                    {word}\n                  </button>\n                ))}\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n\n        <div className=\"group relative w-full\">\n          <input\n            ref={inputRef}\n            type=\"text\"\n            value={text}\n            onChange={(e) => setText(e.target.value)}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            className=\"bg-card text-foreground border border-border placeholder:text-muted-foreground focus:ring-ring w-full rounded-lg border-none px-5 py-3.5 pr-20 text-sm font-bold tracking-wide shadow-sm transition-all outline-none focus:ring-1 sm:px-6 sm:py-4 sm:pr-24 sm:text-base\"\n          />\n\n          <div className=\"absolute top-1/2 right-2 flex -translate-y-1/2 items-center gap-2 sm:right-3 sm:gap-3\">\n            <AnimatePresence mode=\"wait\">\n              {text.length > 0 ? (\n                <motion.button\n                  key=\"send-btn\"\n                  initial={{ opacity: 0, scale: 0.8 }}\n                  animate={{ opacity: 1, scale: 1 }}\n                  exit={{ opacity: 0, scale: 0.8 }}\n                  onClick={handleSend}\n                  className=\"bg-primary text-primary-foreground flex h-8 w-8 items-center justify-center rounded-lg shadow-md transition-all active:scale-90 sm:h-10 sm:w-10\"\n                >\n                  <ArrowUp size={18} strokeWidth={3} />\n                </motion.button>\n              ) : (\n                <motion.div\n                  key=\"placeholder-icons\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"text-muted-foreground flex items-center gap-3 pr-1 sm:gap-4 sm:pr-2\"\n                >\n                  <ImageIcon\n                    size={20}\n                    className=\"hover:text-foreground cursor-pointer transition-colors\"\n                  />\n                  <Mic\n                    size={20}\n                    className=\"hover:text-foreground cursor-pointer transition-colors\"\n                  />\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pricing-widget",
      "type": "registry:component",
      "title": "Pricing Widget",
      "description": "An animated pricing widget with smooth transitions and dynamic value updates.",
      "dependencies": [
        "@number-flow/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/pricing-widget.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { Check } from 'lucide-react';\nimport NumberFlow from '@number-flow/react';\n\nexport type BillingCycle = 'monthly' | 'yearly';\n\nexport interface PricingPlan {\n  id: string;\n  title: string;\n  price: number;\n  popular: boolean;\n}\n\ninterface PricingWidgetProps {\n  initialBilling?: BillingCycle;\n  initialActivePlanId?: string;\n  plansData?: Record<BillingCycle, PricingPlan[]>;\n}\n\nconst SPRING: Transition = {\n  stiffness: 260,\n  damping: 22,\n};\n\nconst DEFAULT_DATA: Record<BillingCycle, PricingPlan[]> = {\n  monthly: [\n    { id: 'free', title: 'Free', price: 0.0, popular: false },\n    { id: 'starter', title: 'Starter', price: 9.99, popular: true },\n    { id: 'pro', title: 'Pro', price: 19.99, popular: false },\n  ],\n  yearly: [\n    { id: 'free', title: 'Free', price: 0.0, popular: false },\n    { id: 'starter', title: 'Starter', price: 7.49, popular: true },\n    { id: 'pro', title: 'Pro', price: 17.49, popular: false },\n  ],\n};\n\nexport const PricingWidget: FC<PricingWidgetProps> = ({\n  initialBilling = 'monthly',\n  initialActivePlanId = 'starter',\n  plansData = DEFAULT_DATA,\n}) => {\n  const [billing, setBilling] = useState<BillingCycle>(initialBilling);\n  const [active, setActive] = useState<string>(initialActivePlanId);\n\n  return (\n    <div className=\"w-[380px] rounded-[32px] border-[1.6px] border-[#E5E5E9] bg-[#FEFEFE] p-4 shadow-xl transition-colors dark:border-zinc-800 dark:bg-zinc-900\">\n      <div className=\"relative mb-4 flex rounded-full border border-[#f4f4fbdc] bg-[#F4F4FB] px-2 py-2 dark:border-zinc-700 dark:bg-zinc-800\">\n        <motion.div\n          layout\n          transition={SPRING}\n          className=\"absolute inset-y-1 my-[0.5px] w-[48%] rounded-full border border-[#fefefed9] bg-[#FEFEFE] shadow-sm dark:border-zinc-600 dark:bg-zinc-700\"\n          animate={{ x: billing === 'monthly' ? '0%' : '100%' }}\n        />\n        {(['monthly', 'yearly'] as const).map((t) => (\n          <button\n            key={t}\n            onClick={() => setBilling(t)}\n            className=\"relative z-10 w-1/2 py-1 text-base font-bold text-black transition-colors focus:outline-none dark:text-zinc-200\"\n          >\n            {t === 'monthly' ? 'Monthly' : 'Yearly'}\n          </button>\n        ))}\n      </div>\n\n      <div className=\"space-y-3\">\n        {plansData[billing].map((item) => {\n          const isActive = active === item.id;\n          return (\n            <motion.button\n              layout\n              key={item.id}\n              onClick={() => setActive(item.id)}\n              className=\"relative flex h-[82px] w-full items-center justify-between rounded-[24px] border-[1.6px] border-[#E5E5E9] bg-white px-4 text-left transition-all focus:outline-none dark:border-zinc-800 dark:bg-zinc-900\"\n            >\n              {isActive && (\n                <motion.div\n                  layoutId=\"active-border\"\n                  transition={SPRING}\n                  className=\"pointer-events-none absolute inset-0 z-20 rounded-[24px] border-[2.5px] border-black dark:border-white\"\n                />\n              )}\n\n              <div className=\"relative z-10\">\n                <div className=\"flex items-center gap-2\">\n                  <span className=\"text-[18px] font-bold transition-colors dark:text-white\">\n                    {item.title}\n                  </span>\n                  {item.popular && (\n                    <span className=\"rounded-xl bg-[#F3EDB4] px-2.5 py-0.5 text-[14px] font-bold text-[#49411A]\">\n                      Popular\n                    </span>\n                  )}\n                </div>\n                <motion.p className=\"flex items-center gap-1 text-sm font-bold text-[#040404] transition-colors dark:text-zinc-400\">\n                  <NumberFlow\n                    value={item.price}\n                    format={{ style: 'currency', currency: 'USD' }}\n                  />\n                  <motion.span layout className=\"font-semibold text-[#858489]\">\n                    {' '}\n                    / month\n                  </motion.span>\n                </motion.p>\n              </div>\n\n              <div className=\"relative z-10 flex h-[24px] w-[24px] items-center justify-center rounded-full border-[1.6px] border-[#E5E5E9] dark:border-zinc-700\">\n                <AnimatePresence>\n                  {isActive && (\n                    <motion.div\n                      initial={{ opacity: 0 }}\n                      animate={{ opacity: 1 }}\n                      exit={{ opacity: 0 }}\n                      transition={SPRING}\n                      className=\"flex h-full w-full items-center justify-center rounded-full bg-black dark:bg-white\"\n                    >\n                      <Check size={14} className=\"text-white dark:text-black\" />\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </motion.button>\n          );\n        })}\n      </div>\n\n      <button className=\"mt-5 w-full rounded-full bg-[#020203] py-3 font-semibold text-[#F7F7F9] transition-all hover:opacity-90 dark:bg-white dark:text-black\">\n        Get Started\n      </button>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pricing-widget-base",
      "type": "registry:component",
      "title": "Pricing Widget (base)",
      "description": "Theme-ready base variant of An animated pricing widget with smooth transitions and dynamic value updates..",
      "dependencies": [
        "@number-flow/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/pricing-widget.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, type FC } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { Check } from 'lucide-react';\nimport NumberFlow from '@number-flow/react';\n\nexport type BillingCycle = 'monthly' | 'yearly';\n\nexport interface PricingPlan {\n  id: string;\n  title: string;\n  price: number;\n  popular: boolean;\n}\n\ninterface PricingWidgetProps {\n  initialBilling?: BillingCycle;\n  initialActivePlanId?: string;\n  plansData?: Record<BillingCycle, PricingPlan[]>;\n}\n\nconst SPRING: Transition = {\n  stiffness: 260,\n  damping: 22,\n};\n\nconst DEFAULT_DATA: Record<BillingCycle, PricingPlan[]> = {\n  monthly: [\n    { id: 'free', title: 'Free', price: 0.0, popular: false },\n    { id: 'starter', title: 'Starter', price: 9.99, popular: true },\n    { id: 'pro', title: 'Pro', price: 19.99, popular: false },\n  ],\n  yearly: [\n    { id: 'free', title: 'Free', price: 0.0, popular: false },\n    { id: 'starter', title: 'Starter', price: 7.49, popular: true },\n    { id: 'pro', title: 'Pro', price: 17.49, popular: false },\n  ],\n};\n\nexport const PricingWidget: FC<PricingWidgetProps> = ({\n  initialBilling = 'monthly',\n  initialActivePlanId = 'starter',\n  plansData = DEFAULT_DATA,\n}) => {\n  const [billing, setBilling] = useState<BillingCycle>(initialBilling);\n  const [active, setActive] = useState<string>(initialActivePlanId);\n\n  return (\n    <div className=\"theme-injected border-border bg-card w-[380px] rounded-lg border-[1.6px] p-4 shadow-xl transition-colors\">\n      <div className=\"border-border bg-muted relative mb-4 flex rounded-lg border px-2 py-2\">\n        <motion.div\n          layout\n          transition={SPRING}\n          className=\"border-border bg-card absolute inset-y-1 my-[0.5px] w-[48%] rounded-lg border shadow-sm\"\n          animate={{ x: billing === 'monthly' ? '0%' : '100%' }}\n        />\n        {(['monthly', 'yearly'] as const).map((t) => (\n          <button\n            key={t}\n            onClick={() => setBilling(t)}\n            className=\"text-foreground relative z-10 w-1/2 py-1 text-base font-bold transition-colors focus:outline-none\"\n          >\n            {t === 'monthly' ? 'Monthly' : 'Yearly'}\n          </button>\n        ))}\n      </div>\n\n      <div className=\"space-y-3\">\n        {plansData[billing].map((item) => {\n          const isActive = active === item.id;\n          return (\n            <motion.button\n              layout\n              key={item.id}\n              onClick={() => setActive(item.id)}\n              className=\"border-border bg-card relative flex h-[82px] w-full items-center justify-between rounded-lg border-[1.6px] px-4 text-left transition-all focus:outline-none\"\n            >\n              {isActive && (\n                <motion.div\n                  layoutId=\"active-border\"\n                  transition={SPRING}\n                  className=\"border-foreground pointer-events-none absolute inset-0 z-20 rounded-lg border-[2.5px]\"\n                />\n              )}\n\n              <div className=\"relative z-10\">\n                <div className=\"flex items-center gap-2\">\n                  <span className=\"text-foreground text-[18px] font-bold transition-colors\">\n                    {item.title}\n                  </span>\n                  {item.popular && (\n                    <span className=\"bg-accent text-accent-foreground rounded-lg px-2.5 py-0.5 text-[14px] font-bold\">\n                      Popular\n                    </span>\n                  )}\n                </div>\n                <motion.p className=\"text-foreground flex items-center gap-1 text-sm font-bold transition-colors\">\n                  <NumberFlow\n                    value={item.price}\n                    format={{ style: 'currency', currency: 'USD' }}\n                  />\n                  <motion.span\n                    layout\n                    className=\"text-muted-foreground font-semibold\"\n                  >\n                    {' '}\n                    / month\n                  </motion.span>\n                </motion.p>\n              </div>\n\n              <div className=\"border-border relative z-10 flex size-6 items-center justify-center overflow-hidden rounded-lg border-2\">\n                <AnimatePresence>\n                  {isActive && (\n                    <motion.div\n                      initial={{ opacity: 0 }}\n                      animate={{ opacity: 1 }}\n                      exit={{ opacity: 0 }}\n                      transition={SPRING}\n                      className=\"bg-foreground flex size-full items-center justify-center\"\n                    >\n                      <Check className=\"text-background size-full\" />\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </motion.button>\n          );\n        })}\n      </div>\n\n      <button className=\"bg-primary text-primary-foreground mt-5 w-full rounded-lg py-3 font-semibold transition-all hover:opacity-90\">\n        Get Started\n      </button>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "profile-card",
      "type": "registry:component",
      "title": "Profile Card",
      "description": "Compact profile card displaying user details with quick actions.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/profile-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  ChevronUp,\n  Globe,\n  MousePointer2,\n  Flame,\n  MapPin,\n  Tag,\n  Users,\n  DollarSign,\n  Flag,\n  Link as LinkIcon,\n} from 'lucide-react';\nimport { RiClaudeFill } from 'react-icons/ri';\nimport { RxArrowTopRight } from 'react-icons/rx';\n\ninterface ProfileCardProps {\n  logo?: string;\n  name: string;\n  website: string;\n  visits: string;\n  heatScore: number;\n  location: string;\n  categories: string[];\n  employees: string;\n  arr: string;\n  founders: { name: string; avatar: string }[];\n  extraFounders?: number;\n}\n\nexport const ProfileCard: React.FC<ProfileCardProps> = ({\n  name,\n  website,\n  visits,\n  heatScore,\n  location,\n  categories,\n  employees,\n  arr,\n  founders,\n  extraFounders = 5,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const springConfig = { type: 'spring', stiffness: 300, damping: 30 } as const;\n\n  return (\n    <div className=\"flex min-h-[500px] w-full items-center justify-center p-4\">\n      <motion.div\n        layout\n        transition={springConfig}\n        className=\"w-xs overflow-hidden rounded-xl border border-[#E5E5E5] bg-[#F5F5F7] shadow-lg transition-colors duration-500 md:w-sm dark:border-white/10 dark:bg-[#161616]\"\n      >\n        {/* Header Section */}\n        <div\n          className=\"flex cursor-pointer items-center justify-between bg-[#F5F5F7] p-3.5 transition-colors dark:bg-[#161616]\"\n          onClick={() => setIsExpanded(!isExpanded)}\n        >\n          <div className=\"flex min-w-0 items-center gap-3\">\n            <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-[10px] bg-[#D8775A] text-[#EFE3DE] shadow-inner\">\n              <RiClaudeFill size={26} />\n            </div>\n            <span className=\"truncate text-[15px] font-semibold text-[#1A1A1A] transition-colors dark:text-[#ededed]\">\n              {name}\n            </span>\n          </div>\n\n          <div className=\"flex shrink-0 items-center gap-3\">\n            {/* Responsive SVG Graph Fixed */}\n            <div className=\"w-15 sm:w-20\">\n              <svg viewBox=\"0 0 80 20\" fill=\"none\" className=\"h-auto w-full\">\n                <path\n                  d=\"M2 18C15 15 25 5 45 8C65 11 70 2 78 2\"\n                  stroke=\"#32BE3E\"\n                  strokeWidth=\"2\"\n                  strokeLinecap=\"round\"\n                />\n              </svg>\n            </div>\n\n            <motion.div\n              animate={{ rotate: isExpanded ? 0 : 180 }}\n              className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-[#A9A9AB]/40 bg-[#F5F5F7] text-[#A9A9AB] transition-colors duration-200 hover:text-[#7f7f81] dark:bg-[#1c1c1c]\"\n            >\n              <ChevronUp size={22} />\n            </motion.div>\n          </div>\n        </div>\n\n        {/* Expanded Content */}\n        <AnimatePresence>\n          {isExpanded && (\n            <motion.div\n              initial={{ height: 0, opacity: 0 }}\n              animate={{ height: 'auto', opacity: 1 }}\n              exit={{ height: 0, opacity: 0 }}\n              transition={springConfig}\n              className=\"shadow-3xl rounded-t-3xl border-t-[1.4px] border-[#E9E8EF] bg-white transition-colors duration-500 dark:border-white/5 dark:bg-[#1c1c1c]\"\n            >\n              <div className=\"space-y-4 p-5\">\n                <DataRow icon={<Globe size={16} />} label=\"Website\">\n                  <div className=\"flex items-center gap-1.5 truncate rounded-full border-[1.5px] border-[#e3e2e8] px-2 py-1 text-[11px] font-medium text-[#666] sm:text-[12px] dark:border-white/10 dark:text-gray-400\">\n                    <LinkIcon size={12} className=\"shrink-0\" />{' '}\n                    <span className=\"truncate\">{website}</span>\n                  </div>\n                </DataRow>\n\n                <DataRow\n                  icon={<MousePointer2 size={16} />}\n                  label=\"Monthly visits\"\n                >\n                  <span className=\"text-[14px] font-semibold text-[#464646] dark:text-[#d4d4d4]\">\n                    {visits}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<Flame size={16} />} label=\"Heat Score\">\n                  <div className=\"flex items-center gap-1 rounded-full border border-[#D1F0DB] bg-[#EBF9EC] px-2 py-0.5 text-[12px] font-bold text-[#107F3E] dark:border-green-500/20 dark:bg-green-500/10 dark:text-green-400\">\n                    {heatScore} <RxArrowTopRight size={14} strokeWidth={0.5} />\n                  </div>\n                </DataRow>\n\n                <DataRow icon={<MapPin size={16} />} label=\"Location\">\n                  <span className=\"ml-2 truncate text-right text-[14px] font-semibold text-[#464646] dark:text-[#d4d4d4]\">\n                    {location}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<Tag size={16} />} label=\"Categories\">\n                  <div className=\"flex flex-wrap justify-end gap-2\">\n                    {categories.map((cat) => (\n                      <span\n                        key={cat}\n                        className=\"rounded-full border border-[#E1D8F5] bg-[#F6EFFF] px-2.5 py-0.5 text-[11px] font-bold whitespace-nowrap text-[#7C3AED] dark:border-purple-500/20 dark:bg-purple-500/10 dark:text-purple-400\"\n                      >\n                        {cat}\n                      </span>\n                    ))}\n                  </div>\n                </DataRow>\n\n                <DataRow icon={<Users size={16} />} label=\"Employees\">\n                  <span className=\"text-[14px] font-semibold text-[#464646] dark:text-[#d4d4d4]\">\n                    {employees}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<DollarSign size={16} />} label=\"Estimated ARR\">\n                  <span className=\"rounded-full border border-[#D1F0DB] bg-[#E8F9EE] px-2 py-0.5 text-[12px] font-bold text-[#107F3E] dark:border-green-500/20 dark:bg-green-500/10 dark:text-green-400\">\n                    {arr}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<Flag size={16} />} label=\"Founders\">\n                  <div className=\"flex flex-wrap items-center justify-end gap-2\">\n                    {founders.map((f, i) => (\n                      <div\n                        key={i}\n                        className=\"flex shrink-0 items-center gap-2 rounded-full border border-[#E5E5E5] bg-[#F7F7F8] py-1 pr-3 pl-1 dark:border-white/10 dark:bg-white/5\"\n                      >\n                        <img\n                          src={f.avatar}\n                          className=\"h-5 w-5 rounded-full object-cover\"\n                          alt=\"\"\n                        />\n                        <span className=\"text-[12px] font-medium text-[#1A1A1A] dark:text-[#d4d4d4]\">\n                          {f.name}\n                        </span>\n                      </div>\n                    ))}\n                    <div className=\"flex h-6 w-8 shrink-0 items-center justify-center rounded-full border border-[#E5E5E5] bg-[#F1F1F2] text-[11px] font-bold text-[#666] dark:border-white/10 dark:bg-[#2a2a2a] dark:text-gray-400\">\n                      +{extraFounders}\n                    </div>\n                  </div>\n                </DataRow>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </div>\n  );\n};\n\nconst DataRow = ({\n  icon,\n  label,\n  children,\n}: {\n  icon: any;\n  label: string;\n  children: React.ReactNode;\n}) => (\n  <div className=\"flex items-center justify-between gap-4 py-0.5\">\n    <div className=\"flex shrink-0 items-center gap-3 text-[#A1A1A1]\">\n      {icon}\n      <span className=\"text-[13px] font-medium whitespace-nowrap text-[#71717A] dark:text-gray-400\">\n        {label}\n      </span>\n    </div>\n    <div className=\"flex min-w-0 flex-1 justify-end\">{children}</div>\n  </div>\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "profile-card-base",
      "type": "registry:component",
      "title": "Profile Card (base)",
      "description": "Theme-ready base variant of Compact profile card displaying user details with quick actions..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/profile-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  ChevronUp,\n  Globe,\n  MousePointer2,\n  Flame,\n  MapPin,\n  Tag,\n  Users,\n  DollarSign,\n  Flag,\n  Link as LinkIcon,\n} from 'lucide-react';\nimport { RiClaudeFill } from 'react-icons/ri';\nimport { RxArrowTopRight } from 'react-icons/rx';\n\ninterface ProfileCardProps {\n  logo?: string;\n  name: string;\n  website: string;\n  visits: string;\n  heatScore: number;\n  location: string;\n  categories: string[];\n  employees: string;\n  arr: string;\n  founders: { name: string; avatar: string }[];\n  extraFounders?: number;\n}\n\nexport const ProfileCard: React.FC<ProfileCardProps> = ({\n  name,\n  website,\n  visits,\n  heatScore,\n  location,\n  categories,\n  employees,\n  arr,\n  founders,\n  extraFounders = 5,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const springConfig = { type: 'spring', stiffness: 300, damping: 30 } as const;\n\n  return (\n    <div className=\"flex min-h-[500px] w-full items-center justify-center p-4\">\n      <motion.div\n        layout\n        transition={springConfig}\n        className=\"bg-card border-border theme-injected w-xs overflow-hidden rounded-xl border shadow-lg transition-colors duration-500 md:w-sm\"\n      >\n        {/* Header Section */}\n        <div\n          className=\"bg-card flex cursor-pointer items-center justify-between p-4 transition-colors\"\n          onClick={() => setIsExpanded(!isExpanded)}\n        >\n          <div className=\"flex min-w-0 items-center gap-3\">\n            <div className=\"bg-primary text-primary-foreground flex h-10 w-10 shrink-0 items-center justify-center rounded-lg shadow-inner\">\n              <RiClaudeFill size={26} />\n            </div>\n            <span className=\"text-foreground truncate text-sm font-semibold transition-colors\">\n              {name}\n            </span>\n          </div>\n\n          <div className=\"flex shrink-0 items-center gap-3\">\n            {/* Responsive SVG Graph Fixed */}\n            <div className=\"w-15 sm:w-20\">\n              <svg\n                viewBox=\"0 0 80 20\"\n                fill=\"none\"\n                className=\"text-primary h-auto w-full\"\n              >\n                <path\n                  d=\"M2 18C15 15 25 5 45 8C65 11 70 2 78 2\"\n                  stroke=\"currentColor\"\n                  strokeWidth=\"2\"\n                  strokeLinecap=\"round\"\n                />\n              </svg>\n            </div>\n\n            <motion.div\n              animate={{ rotate: isExpanded ? 0 : 180 }}\n              className=\"border-border text-muted-foreground hover:text-foreground bg-background flex h-8 w-8 shrink-0 items-center justify-center rounded-md border transition-colors duration-200\"\n            >\n              <ChevronUp size={22} />\n            </motion.div>\n          </div>\n        </div>\n\n        {/* Expanded Content */}\n        <AnimatePresence>\n          {isExpanded && (\n            <motion.div\n              initial={{ height: 0, opacity: 0 }}\n              animate={{ height: 'auto', opacity: 1 }}\n              exit={{ height: 0, opacity: 0 }}\n              transition={springConfig}\n              className=\"border-border bg-popover rounded-t-xl border-t shadow-xl transition-colors duration-500\"\n            >\n              <div className=\"space-y-4 p-6\">\n                <DataRow icon={<Globe size={16} />} label=\"Website\">\n                  <div className=\"border-input bg-background text-muted-foreground flex items-center gap-2 truncate rounded-full border px-3 py-1 text-xs font-medium\">\n                    <LinkIcon size={12} className=\"shrink-0\" />{' '}\n                    <span className=\"truncate\">{website}</span>\n                  </div>\n                </DataRow>\n\n                <DataRow\n                  icon={<MousePointer2 size={16} />}\n                  label=\"Monthly visits\"\n                >\n                  <span className=\"text-foreground text-sm font-semibold\">\n                    {visits}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<Flame size={16} />} label=\"Heat Score\">\n                  <div className=\"bg-accent text-accent-foreground border-border flex items-center gap-1 rounded-full border px-2 py-1 text-xs font-bold\">\n                    {heatScore} <RxArrowTopRight size={14} strokeWidth={0.5} />\n                  </div>\n                </DataRow>\n\n                <DataRow icon={<MapPin size={16} />} label=\"Location\">\n                  <span className=\"text-foreground ml-2 truncate text-right text-sm font-semibold\">\n                    {location}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<Tag size={16} />} label=\"Categories\">\n                  <div className=\"flex flex-wrap justify-end gap-2\">\n                    {categories.map((cat) => (\n                      <span\n                        key={cat}\n                        className=\"bg-secondary text-secondary-foreground border-border rounded-full border px-3 py-1 text-xs font-bold whitespace-nowrap\"\n                      >\n                        {cat}\n                      </span>\n                    ))}\n                  </div>\n                </DataRow>\n\n                <DataRow icon={<Users size={16} />} label=\"Employees\">\n                  <span className=\"text-foreground text-sm font-semibold\">\n                    {employees}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<DollarSign size={16} />} label=\"Estimated ARR\">\n                  <span className=\"bg-secondary text-secondary-foreground border-border rounded-full border px-2 py-1 text-xs font-bold\">\n                    {arr}\n                  </span>\n                </DataRow>\n\n                <DataRow icon={<Flag size={16} />} label=\"Founders\">\n                  <div className=\"flex flex-wrap items-center justify-end gap-2\">\n                    {founders.map((f, i) => (\n                      <div\n                        key={i}\n                        className=\"bg-muted border-border flex shrink-0 items-center gap-2 rounded-full border py-1 pr-3 pl-1\"\n                      >\n                        <img\n                          src={f.avatar}\n                          className=\"h-5 w-5 rounded-full object-cover\"\n                          alt=\"\"\n                        />\n                        <span className=\"text-foreground text-xs font-medium\">\n                          {f.name}\n                        </span>\n                      </div>\n                    ))}\n                    <div className=\"bg-muted border-border text-muted-foreground flex h-6 w-8 shrink-0 items-center justify-center rounded-full border text-xs font-bold\">\n                      +{extraFounders}\n                    </div>\n                  </div>\n                </DataRow>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </div>\n  );\n};\n\nconst DataRow = ({\n  icon,\n  label,\n  children,\n}: {\n  icon: any;\n  label: string;\n  children: React.ReactNode;\n}) => (\n  <div className=\"flex items-center justify-between gap-4 py-0.5\">\n    <div className=\"text-muted-foreground flex shrink-0 items-center gap-3\">\n      {icon}\n      <span className=\"text-muted-foreground text-sm font-medium whitespace-nowrap\">\n        {label}\n      </span>\n    </div>\n    <div className=\"flex min-w-0 flex-1 justify-end\">{children}</div>\n  </div>\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "progressive-input-stack",
      "type": "registry:component",
      "title": "Progressive Input Stack",
      "description": "An animated input stack that progressively layers form fields as users complete each step.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/progressive-input-stack.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ArrowRight, ArrowLeft } from 'lucide-react';\nimport { FaCheck } from 'react-icons/fa6';\nimport { cn } from '@/lib/utils';\n\nexport interface StepData {\n  id: string;\n  label: string;\n  type: 'text' | 'toggle';\n  placeholder?: string;\n}\n\ninterface ProgressiveInputStackProps {\n  steps: StepData[];\n  initialData?: Record<string, string | boolean>;\n  onSubmit?: (data: Record<string, string | boolean>) => void;\n}\n\nexport const ProgressiveInputStack: React.FC<ProgressiveInputStackProps> = ({\n  steps,\n  initialData,\n  onSubmit,\n}) => {\n  const [currentStep, setCurrentStep] = useState(0);\n\n  const [formData, setFormData] = useState<Record<string, string | boolean>>(\n    initialData ||\n      steps.reduce(\n        (acc, step) => ({\n          ...acc,\n          [step.id]: step.type === 'toggle' ? false : '',\n        }),\n        {},\n      ),\n  );\n\n  const springTransition = {\n    type: 'spring' as const,\n    stiffness: 800,\n    damping: 45,\n    mass: 2,\n  };\n\n  const handleNext = () => {\n    if (currentStep < steps.length - 1) {\n      setCurrentStep((prev) => prev + 1);\n    } else {\n      onSubmit?.(formData);\n    }\n  };\n\n  const handleBack = () => {\n    if (currentStep > 0) {\n      setCurrentStep((prev) => prev - 1);\n    }\n  };\n\n  const updateField = (id: string, value: string | boolean) => {\n    setFormData((prev) => ({ ...prev, [id]: value }));\n  };\n\n  return (\n    <div className=\"relative flex w-xs flex-col gap-8 sm:w-sm\">\n      <div className=\"relative h-[60px] w-full\">\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {steps.map((step, index) => {\n            if (index > currentStep) return null;\n\n            const position = currentStep - index;\n            const isTop = index === currentStep;\n\n            return (\n              <motion.div\n                key={step.id}\n                initial={{ opacity: 0, scale: 1.2, y: 15, z: steps.length }}\n                animate={{\n                  opacity: 1,\n                  scale: 1 - position * 0.05,\n                  y: -position * 12,\n                  z: steps.length - position,\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 1.2,\n                  y: 15,\n                }}\n                transition={springTransition}\n                className={cn(\n                  'absolute inset-0 flex h-[60px] items-center rounded-2xl border border-[#E9E8EE] bg-white px-4 shadow-sm transition-colors dark:border-zinc-700 dark:bg-zinc-900',\n                  !isTop && 'pointer-events-none opacity-50',\n                )}\n              >\n                {step.type === 'text' && (\n                  <input\n                    autoFocus={isTop}\n                    type=\"text\"\n                    value={formData[step.id] as string}\n                    onChange={(e) => updateField(step.id, e.target.value)}\n                    placeholder={step.placeholder}\n                    className=\"w-full bg-transparent text-lg font-semibold text-[#242426] outline-none placeholder:text-[#85858B]/70 dark:text-zinc-200 dark:placeholder:text-zinc-500\"\n                  />\n                )}\n\n                {step.type === 'toggle' && (\n                  <div className=\"flex w-full items-center gap-4\">\n                    <span className=\"min-w-0 flex-1 truncate text-lg font-semibold text-[#85858B] dark:text-zinc-400\">\n                      {step.label}\n                    </span>\n\n                    <button\n                      onClick={() => updateField(step.id, !formData[step.id])}\n                      className={cn(\n                        'relative flex h-7 w-12 shrink-0 items-center rounded-full p-1 transition-colors',\n                        formData[step.id]\n                          ? 'bg-black dark:bg-zinc-200'\n                          : 'bg-zinc-200 dark:bg-zinc-800',\n                      )}\n                    >\n                      <motion.div\n                        animate={{\n                          x: formData[step.id] ? 20 : 0,\n                        }}\n                        transition={springTransition}\n                        className=\"h-5 w-5 rounded-full bg-white shadow\"\n                      />\n                    </button>\n                  </div>\n                )}\n              </motion.div>\n            );\n          })}\n        </AnimatePresence>\n      </div>\n\n      <div className=\"flex items-center\">\n        <AnimatePresence>\n          {currentStep > 0 && (\n            <motion.button\n              initial={{ opacity: 0, scale: 0.9 }}\n              animate={{ opacity: 1, scale: 1 }}\n              exit={{ opacity: 0, scale: 0.9 }}\n              onClick={handleBack}\n              transition={{\n                duration: 0.2,\n                ease: 'easeOut',\n              }}\n              className=\"flex items-center justify-center rounded-full bg-zinc-200 p-4 transition hover:bg-zinc-300 dark:bg-zinc-800 dark:hover:bg-zinc-700\"\n            >\n              <ArrowLeft size={24} />\n            </motion.button>\n          )}\n        </AnimatePresence>\n\n        <motion.button\n          onClick={handleNext}\n          className=\"ml-auto flex h-12 items-center gap-2 overflow-hidden rounded-full bg-black px-5 font-semibold text-white transition hover:opacity-90 dark:bg-zinc-200 dark:text-black\"\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {currentStep === steps.length - 1 ? (\n              <motion.div\n                key=\"done\"\n                initial={{ y: 20, opacity: 0, filter: 'blur(4px)' }}\n                animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n                exit={{ y: -20, opacity: 0, filter: 'blur(4px)' }}\n                transition={{\n                  duration: 0.2,\n                  ease: 'easeOut',\n                }}\n                className=\"flex items-center gap-2\"\n              >\n                <FaCheck size={18} />\n                Done\n              </motion.div>\n            ) : (\n              <motion.div\n                key=\"next\"\n                initial={{ y: 20, opacity: 0, filter: 'blur(4px)' }}\n                animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n                exit={{ y: -20, opacity: 0, filter: 'blur(4px)' }}\n                transition={{\n                  duration: 0.2,\n                  ease: 'easeOut',\n                }}\n                className=\"flex items-center gap-2\"\n              >\n                Next\n                <ArrowRight size={18} />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.button>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "progressive-input-stack-base",
      "type": "registry:component",
      "title": "Progressive Input Stack (base)",
      "description": "Theme-ready base variant of An animated input stack that progressively layers form fields as users complete each step..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/progressive-input-stack.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ArrowRight, ArrowLeft } from 'lucide-react';\nimport { FaCheck } from 'react-icons/fa6';\nimport { cn } from '@/lib/utils';\n\nexport interface StepData {\n  id: string;\n  label: string;\n  type: 'text' | 'toggle';\n  placeholder?: string;\n}\n\ninterface ProgressiveInputStackProps {\n  steps: StepData[];\n  initialData?: Record<string, string | boolean>;\n  onSubmit?: (data: Record<string, string | boolean>) => void;\n}\n\nexport const ProgressiveInputStack: React.FC<ProgressiveInputStackProps> = ({\n  steps,\n  initialData,\n  onSubmit,\n}) => {\n  const [currentStep, setCurrentStep] = useState(0);\n\n  const [formData, setFormData] = useState<Record<string, string | boolean>>(\n    initialData ||\n      steps.reduce(\n        (acc, step) => ({\n          ...acc,\n          [step.id]: step.type === 'toggle' ? false : '',\n        }),\n        {},\n      ),\n  );\n\n  const springTransition = {\n    type: 'spring' as const,\n    stiffness: 800,\n    damping: 45,\n    mass: 2,\n  };\n\n  const handleNext = () => {\n    if (currentStep < steps.length - 1) {\n      setCurrentStep((prev) => prev + 1);\n    } else {\n      onSubmit?.(formData);\n    }\n  };\n\n  const handleBack = () => {\n    if (currentStep > 0) {\n      setCurrentStep((prev) => prev - 1);\n    }\n  };\n\n  const updateField = (id: string, value: string | boolean) => {\n    setFormData((prev) => ({ ...prev, [id]: value }));\n  };\n\n  return (\n    <div className=\"relative flex w-xs flex-col gap-8 sm:w-sm\">\n      <div className=\"relative h-[60px] w-full\">\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {steps.map((step, index) => {\n            if (index > currentStep) return null;\n\n            const position = currentStep - index;\n            const isTop = index === currentStep;\n\n            return (\n              <motion.div\n                key={step.id}\n                initial={{ opacity: 0, scale: 1.2, y: 15, z: steps.length }}\n                animate={{\n                  opacity: 1,\n                  scale: 1 - position * 0.05,\n                  y: -position * 12,\n                  z: steps.length - position,\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 1.2,\n                  y: 15,\n                }}\n                transition={springTransition}\n                className={cn(\n                  'border-border bg-card absolute inset-0 flex h-[60px] items-center rounded-lg border px-4 shadow-sm transition-colors',\n                  !isTop && 'pointer-events-none opacity-50',\n                )}\n              >\n                {step.type === 'text' && (\n                  <input\n                    autoFocus={isTop}\n                    type=\"text\"\n                    value={formData[step.id] as string}\n                    onChange={(e) => updateField(step.id, e.target.value)}\n                    placeholder={step.placeholder}\n                    className=\"text-foreground placeholder:text-muted-foreground/70 w-full bg-transparent text-lg font-semibold outline-none\"\n                  />\n                )}\n\n                {step.type === 'toggle' && (\n                  <div className=\"flex w-full items-center gap-4\">\n                    <span className=\"text-muted-foreground min-w-0 flex-1 truncate text-lg font-semibold\">\n                      {step.label}\n                    </span>\n\n                    <button\n                      onClick={() => updateField(step.id, !formData[step.id])}\n                      className={cn(\n                        'relative flex h-7 w-12 shrink-0 items-center rounded-lg p-1 transition-colors',\n                        formData[step.id]\n                          ? 'bg-foreground'\n                          : 'bg-foreground/50',\n                      )}\n                    >\n                      <motion.div\n                        animate={{\n                          x: formData[step.id] ? 20 : 0,\n                        }}\n                        transition={springTransition}\n                        className=\"bg-background h-5 w-5 rounded-lg shadow\"\n                      />\n                    </button>\n                  </div>\n                )}\n              </motion.div>\n            );\n          })}\n        </AnimatePresence>\n      </div>\n\n      <div className=\"flex items-center\">\n        <AnimatePresence>\n          {currentStep > 0 && (\n            <motion.button\n              initial={{ opacity: 0, scale: 0.9 }}\n              animate={{ opacity: 1, scale: 1 }}\n              exit={{ opacity: 0, scale: 0.9 }}\n              onClick={handleBack}\n              transition={{\n                duration: 0.2,\n                ease: 'easeOut',\n              }}\n              className=\"bg-muted hover:bg-accent flex items-center justify-center rounded-lg p-4 transition\"\n            >\n              <ArrowLeft size={24} />\n            </motion.button>\n          )}\n        </AnimatePresence>\n\n        <motion.button\n          onClick={handleNext}\n          className=\"bg-primary text-primary-foreground ml-auto flex h-12 items-center gap-2 overflow-hidden rounded-lg px-5 font-semibold transition hover:opacity-90\"\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {currentStep === steps.length - 1 ? (\n              <motion.div\n                key=\"done\"\n                initial={{ y: 20, opacity: 0, filter: 'blur(4px)' }}\n                animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n                exit={{ y: -20, opacity: 0, filter: 'blur(4px)' }}\n                transition={{\n                  duration: 0.2,\n                  ease: 'easeOut',\n                }}\n                className=\"flex items-center gap-2\"\n              >\n                <FaCheck size={18} />\n                Done\n              </motion.div>\n            ) : (\n              <motion.div\n                key=\"next\"\n                initial={{ y: 20, opacity: 0, filter: 'blur(4px)' }}\n                animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n                exit={{ y: -20, opacity: 0, filter: 'blur(4px)' }}\n                transition={{\n                  duration: 0.2,\n                  ease: 'easeOut',\n                }}\n                className=\"flex items-center gap-2\"\n              >\n                Next\n                <ArrowRight size={18} />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.button>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-feedback",
      "type": "registry:component",
      "title": "Quick Feedback",
      "description": "A responsive feedback component built for instant user responses, using subtle micro-interactions and snappy visual cues to confirm actions in real time.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-feedback.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { type FC, useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Transition,\n  MotionConfig,\n  LayoutGroup,\n} from 'motion/react';\nimport { Undo2 } from 'lucide-react';\nimport { FaThumbsDown, FaThumbsUp } from 'react-icons/fa6';\nimport useMeasure from 'react-use-measure';\nimport { cn } from '@/lib/utils';\nimport type { IconType } from 'react-icons';\n\nexport type FeedbackStatus = 'idle' | 'up' | 'down';\n\nexport interface QuickFeedbackProps {\n  defaultStatus?: FeedbackStatus;\n  showThemeToggle?: boolean;\n  feedbackText?: string;\n  onFeedback?: (status: 'up' | 'down') => void;\n  onUndo?: () => void;\n}\n\nconst containerTransition: Transition = {\n  type: 'spring',\n  stiffness: 150,\n  damping: 15,\n  mass: 1,\n};\n\nexport const QuickFeedback: FC<QuickFeedbackProps> = ({\n  defaultStatus = 'idle',\n  feedbackText = 'Feedback Received!',\n  onFeedback,\n  onUndo,\n}) => {\n  const [status, setStatus] = useState<FeedbackStatus>(defaultStatus);\n\n  const handleFeedback = (value: 'up' | 'down') => {\n    setStatus(value);\n    onFeedback?.(value);\n  };\n\n  const handleUndo = () => {\n    setStatus('idle');\n    onUndo?.();\n  };\n\n  return (\n    <div className=\"relative flex w-full items-center justify-center gap-4 bg-transparent px-4 transition-colors duration-500\">\n      <MotionConfig transition={containerTransition}>\n        <LayoutGroup>\n          <div className=\"relative flex items-center justify-center gap-2\">\n            <AnimatePresence mode=\"sync\" initial={false}>\n              {(status === 'idle' || status === 'up') && (\n                <QuickFeedbackButton\n                  key=\"up-btn\"\n                  name=\"up\"\n                  handleFeedback={() => handleFeedback('up')}\n                  handleUndo={handleUndo}\n                  status={status}\n                  feedbackText={feedbackText}\n                  Icon={FaThumbsUp}\n                />\n              )}\n              {(status === 'idle' || status === 'down') && (\n                <QuickFeedbackButton\n                  key=\"down-btn\"\n                  name=\"down\"\n                  handleFeedback={() => handleFeedback('down')}\n                  handleUndo={handleUndo}\n                  status={status}\n                  feedbackText=\"Sorry about that\"\n                  Icon={FaThumbsDown}\n                />\n              )}\n            </AnimatePresence>\n          </div>\n        </LayoutGroup>\n      </MotionConfig>\n    </div>\n  );\n};\n\ninterface QuickFeedbackButtonProps {\n  name: 'up' | 'down';\n  handleFeedback: () => void;\n  handleUndo: () => void;\n  status: FeedbackStatus;\n  feedbackText: string;\n  Icon: IconType;\n}\n\nexport const QuickFeedbackButton: FC<QuickFeedbackButtonProps> = ({\n  name,\n  handleFeedback,\n  handleUndo,\n  status,\n  feedbackText,\n  Icon,\n}) => {\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n  const isActive = name === status;\n\n  return (\n    <motion.div\n      layout=\"position\"\n      animate={{\n        opacity: 1,\n        width: bounds.width > 0 ? bounds.width : 'auto',\n        height: bounds.height > 0 ? bounds.height : 'auto',\n      }}\n      className=\"relative overflow-hidden rounded-full bg-[#F3EFE9] will-change-transform dark:border-neutral-800 dark:bg-neutral-900\"\n    >\n      <motion.div\n        ref={ref}\n        className={cn(\n          'flex w-fit items-center justify-center gap-1 px-12 py-3',\n          isActive && 'px-4.5 py-3.5',\n        )}\n      >\n        <motion.button\n          layout\n          onClick={handleFeedback}\n          className={cn(\n            'ml-1 flex shrink-0 items-center justify-center rounded-full',\n            isActive && 'pointer-events-none',\n          )}\n        >\n          <Icon className=\"size-8 text-[#020200de] dark:text-neutral-100\" />\n        </motion.button>\n\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {isActive && (\n            <motion.div\n              initial={{ opacity: 0, x: 20 }}\n              animate={{ opacity: 1, x: 0 }}\n              exit={{ opacity: 0, x: 20 }}\n              className=\"flex shrink-0 items-center gap-2 whitespace-nowrap\"\n            >\n              <span className=\"ml-1 text-sm font-bold tracking-wide text-[#020200] sm:ml-2 sm:text-lg dark:text-neutral-100\">\n                {feedbackText}\n              </span>\n\n              <button\n                onClick={(e) => {\n                  e.stopPropagation();\n                  handleUndo();\n                }}\n                className=\"flex shrink-0 items-center gap-1 rounded-full bg-[#E0DCD4] px-3 py-2 text-xs font-bold text-[#020200] transition hover:bg-[#d6d2ca] active:scale-95 sm:text-base dark:bg-neutral-800 dark:text-neutral-200 dark:hover:bg-neutral-700\"\n              >\n                <Undo2 size={16} className=\"sm:h-5 sm:w-5\" strokeWidth={2.5} />\n                Undo\n              </button>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-feedback-base",
      "type": "registry:component",
      "title": "Quick Feedback (base)",
      "description": "Theme-ready base variant of A responsive feedback component built for instant user responses, using subtle micro-interactions and snappy visual cues to confirm actions in real time..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-feedback.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { type FC, useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Transition,\n  MotionConfig,\n  LayoutGroup,\n} from 'motion/react';\nimport { Undo2 } from 'lucide-react';\nimport { FaThumbsDown, FaThumbsUp } from 'react-icons/fa6';\nimport useMeasure from 'react-use-measure';\nimport { cn } from '@/lib/utils';\nimport type { IconType } from 'react-icons';\n\nexport type FeedbackStatus = 'idle' | 'up' | 'down';\n\nexport interface QuickFeedbackProps {\n  defaultStatus?: FeedbackStatus;\n  showThemeToggle?: boolean;\n  feedbackText?: string;\n  onFeedback?: (status: 'up' | 'down') => void;\n  onUndo?: () => void;\n}\n\nconst containerTransition: Transition = {\n  type: 'spring',\n  stiffness: 150,\n  damping: 15,\n  mass: 1,\n};\n\nexport const QuickFeedback: FC<QuickFeedbackProps> = ({\n  defaultStatus = 'idle',\n  feedbackText = 'Feedback Received!',\n  onFeedback,\n  onUndo,\n}) => {\n  const [status, setStatus] = useState<FeedbackStatus>(defaultStatus);\n\n  const handleFeedback = (value: 'up' | 'down') => {\n    setStatus(value);\n    onFeedback?.(value);\n  };\n\n  const handleUndo = () => {\n    setStatus('idle');\n    onUndo?.();\n  };\n\n  return (\n    <div className=\"theme-injected relative flex w-full items-center justify-center gap-4 bg-transparent px-4 transition-colors duration-500\">\n      <MotionConfig transition={containerTransition}>\n        <LayoutGroup>\n          <div className=\"relative flex items-center justify-center gap-2\">\n            <AnimatePresence mode=\"sync\" initial={false}>\n              {(status === 'idle' || status === 'up') && (\n                <QuickFeedbackButton\n                  key=\"up-btn\"\n                  name=\"up\"\n                  handleFeedback={() => handleFeedback('up')}\n                  handleUndo={handleUndo}\n                  status={status}\n                  feedbackText={feedbackText}\n                  Icon={FaThumbsUp}\n                />\n              )}\n              {(status === 'idle' || status === 'down') && (\n                <QuickFeedbackButton\n                  key=\"down-btn\"\n                  name=\"down\"\n                  handleFeedback={() => handleFeedback('down')}\n                  handleUndo={handleUndo}\n                  status={status}\n                  feedbackText=\"Sorry about that\"\n                  Icon={FaThumbsDown}\n                />\n              )}\n            </AnimatePresence>\n          </div>\n        </LayoutGroup>\n      </MotionConfig>\n    </div>\n  );\n};\n\ninterface QuickFeedbackButtonProps {\n  name: 'up' | 'down';\n  handleFeedback: () => void;\n  handleUndo: () => void;\n  status: FeedbackStatus;\n  feedbackText: string;\n  Icon: IconType;\n}\n\nexport const QuickFeedbackButton: FC<QuickFeedbackButtonProps> = ({\n  name,\n  handleFeedback,\n  handleUndo,\n  status,\n  feedbackText,\n  Icon,\n}) => {\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n  const isActive = name === status;\n\n  return (\n    <motion.div\n      layout=\"position\"\n      animate={{\n        opacity: 1,\n        width: bounds.width > 0 ? bounds.width : 'auto',\n        height: bounds.height > 0 ? bounds.height : 'auto',\n      }}\n      className=\"bg-card border-border relative overflow-hidden rounded-lg border will-change-transform\"\n    >\n      <motion.div\n        ref={ref}\n        className={cn(\n          'flex w-fit items-center justify-center gap-1 px-12 py-3',\n          isActive && 'px-4.5 py-3.5',\n        )}\n      >\n        <motion.button\n          layout\n          onClick={handleFeedback}\n          className={cn(\n            'ml-1 flex shrink-0 items-center justify-center rounded-lg',\n            isActive && 'pointer-events-none',\n          )}\n        >\n          <Icon className=\"text-foreground size-8\" />\n        </motion.button>\n\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {isActive && (\n            <motion.div\n              initial={{ opacity: 0, x: 20 }}\n              animate={{ opacity: 1, x: 0 }}\n              exit={{ opacity: 0, x: 20 }}\n              className=\"flex shrink-0 items-center gap-2 whitespace-nowrap\"\n            >\n              <span className=\"text-foreground ml-1 text-sm font-bold tracking-wide sm:ml-2 sm:text-lg\">\n                {feedbackText}\n              </span>\n\n              <button\n                onClick={(e) => {\n                  e.stopPropagation();\n                  handleUndo();\n                }}\n                className=\"bg-muted text-foreground hover:bg-muted/80 flex shrink-0 items-center gap-1 rounded-lg px-3 py-2 text-xs font-bold transition active:scale-95 sm:text-base\"\n              >\n                <Undo2 size={16} className=\"sm:h-5 sm:w-5\" strokeWidth={2.5} />\n                Undo\n              </button>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-option-picker",
      "type": "registry:component",
      "title": "Quick Option Picker",
      "description": "A sleek, interactive option picker with smooth roll animations and a premium feel.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-option-picker.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, useEffect, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n} from 'motion/react';\nimport { ChevronDown, Globe } from 'lucide-react';\nimport { TbLockFilled } from 'react-icons/tb';\nimport type { IconType } from 'react-icons';\nimport { cn } from '@/lib/utils';\n\n\nexport interface Option {\n  id: string;\n  label: string;\n  icon: IconType;\n}\n\ninterface OptionPickerProps {\n  options?: Option[];\n}\n\n\nconst DEFAULT_OPTIONS: Option[] = [\n  { id: 'private', label: 'Private', icon: TbLockFilled },\n  { id: 'public', label: 'Public', icon: Globe },\n];\n\nexport const OptionPicker: FC<OptionPickerProps> = ({ options }) => {\n  const [isOpen, setIsOpen] = useState<boolean>(false);\n  const [selected, setSelected] = useState<Option>(\n    options?.[0] || DEFAULT_OPTIONS[0],\n  );\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target as Node)\n      ) {\n        setIsOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  const toggleOpen = () => setIsOpen((prev) => !prev);\n  const handleSelect = (option: Option) => {\n    setSelected(option);\n    setIsOpen(false);\n  };\n\n\n  const data = options || DEFAULT_OPTIONS;\n\n  return (\n    <div\n      className=\"relative inline-block perspective-[1200px] transform-3d\"\n      ref={containerRef}\n    >\n      <MotionConfig\n        transition={{ type: 'spring', damping: 20, stiffness: 300 }}\n      >\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{\n                opacity: 0,\n                y: 10,\n                filter: 'blur(4px)',\n                scale: 1.1,\n                rotateX: -70,\n              }}\n              animate={{\n                opacity: 1,\n                y: -5,\n                filter: 'blur(0px)',\n                scale: 1,\n                rotateX: 0,\n              }}\n              exit={{\n                opacity: 0,\n                y: 10,\n                filter: 'blur(4px)',\n                scale: 1.1,\n                rotateX: -70,\n              }}\n              className=\"absolute bottom-full left-1/2 z-50 mb-2 origin-bottom -translate-x-1/2 transform-3d\"\n              role=\"menu\"\n              aria-label=\"Visibility options\"\n            >\n              <div className=\"relative flex min-w-max gap-2 rounded-full border border-neutral-100 bg-[#F3F3F3] p-1.5 py-1 whitespace-nowrap dark:border-neutral-700 dark:bg-neutral-800\">\n                {data.map((option, index) => {\n                  const isActive = selected.id === option.id;\n                  const isFirst = index === 0;\n                  const isLast = index === data.length - 1;\n\n                  const roundedClasses = `\n                    ${isFirst ? 'rounded-l-full rounded-r-2xl' : ''}\n                    ${isLast ? 'rounded-r-full rounded-l-2xl' : ''}\n                    ${!isFirst && !isLast ? 'rounded-none' : ''}\n                  `;\n\n                  return (\n                    <motion.button\n                      key={option.id}\n                      onClick={() => handleSelect(option)}\n                      whileTap={{ scale: 0.95 }}\n                      whileHover={{ y: -1 }}\n                      title={`Set as ${option.label}`}\n                      aria-label={`Select ${option.label}`}\n                      className={`relative flex items-center gap-2 px-5 py-3 text-[15px] font-semibold transition-all duration-300 ${roundedClasses} bg-[#FEFEFE] dark:bg-neutral-700 ${isActive ? 'text-[#010101] dark:text-white' : 'text-[#6E6E6E] dark:text-neutral-400'}`}\n                    >\n                      <motion.span>\n                        <option.icon size={22} />\n                      </motion.span>\n                      <span className=\"text-bold relative z-10 text-lg\">\n                        {option.label}\n                      </span>\n                    </motion.button>\n                  );\n                })}\n\n                <div className=\"absolute -bottom-1.5 left-1/2 h-3 w-3 -translate-x-1/2 rotate-45 border-r border-b border-neutral-100 bg-[#F3F3F3] dark:border-neutral-700 dark:bg-neutral-800\" />\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <motion.button\n          layout=\"size\"\n          onClick={toggleOpen}\n          whileTap={{ scale: 0.97 }}\n          title=\"Change Visibility\"\n          aria-label={`Visibility is currently ${selected.label}. Click to change.`}\n          aria-expanded={isOpen}\n          className={`flex items-center justify-center gap-2 rounded-full border border-transparent px-4 py-4 transition-all duration-300 select-none ${isOpen ? 'bg-[#E5E5E5] dark:border-neutral-700 dark:bg-neutral-800' : 'bg-[#F4F4F4] dark:bg-neutral-900'}`}\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div\n              key={selected.id}\n              initial={{ opacity: 0, scale: 0.5, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.5, filter: 'blur(4px)' }}\n              className=\"flex items-center gap-2\"\n            >\n              <selected.icon\n                size={24}\n                className={`transition-colors duration-300 ${isOpen ? 'text-[#AEAEAE] dark:text-neutral-500' : 'text-[#AFAFAF] dark:text-neutral-400'}`}\n              />\n            </motion.div>\n          </AnimatePresence>\n          <AnimatedText\n            value={selected.label}\n            className=\"text-lg font-semibold text-neutral-700 dark:text-neutral-100\"\n          />\n\n          <motion.div\n            animate={{ rotate: isOpen ? 180 : 0 }}\n            className=\"flex items-center\"\n          >\n            <ChevronDown\n              size={24}\n              className={`transition-colors duration-300 ${isOpen ? 'text-[#AEAEAE] dark:text-neutral-500' : 'text-[#AFAFAF] dark:text-neutral-400'}`}\n              strokeWidth={2.5}\n            />\n          </motion.div>\n        </motion.button>\n      </MotionConfig>\n    </div>\n  );\n};\n\nconst AnimatedText = ({\n  value,\n  className,\n}: {\n  value: string;\n  className?: string;\n}) => {\n  return (\n    <div\n      className={cn(\n        'flex text-lg tracking-tight will-change-transform',\n        className,\n      )}\n    >\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {value.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              layout\n              initial={{ opacity: 0, y: 5, scale: 0.7 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: -5, scale: 0.7 }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-option-picker-base",
      "type": "registry:component",
      "title": "Quick Option Picker (base)",
      "description": "Theme-ready base variant of A sleek, interactive option picker with smooth roll animations and a premium feel..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-option-picker.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, useEffect, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n} from 'motion/react';\nimport { ChevronDown, Globe } from 'lucide-react';\nimport { TbLockFilled } from 'react-icons/tb';\nimport type { IconType } from 'react-icons';\nimport { cn } from '@/lib/utils';\n\nexport interface Option {\n  id: string;\n  label: string;\n  icon: IconType;\n}\n\ninterface OptionPickerProps {\n  options?: Option[];\n}\n\nconst DEFAULT_OPTIONS: Option[] = [\n  { id: 'private', label: 'Private', icon: TbLockFilled },\n  { id: 'public', label: 'Public', icon: Globe },\n];\n\nexport const OptionPicker: FC<OptionPickerProps> = ({ options }) => {\n  const [isOpen, setIsOpen] = useState<boolean>(false);\n  const [selected, setSelected] = useState<Option>(\n    options?.[0] || DEFAULT_OPTIONS[0],\n  );\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target as Node)\n      ) {\n        setIsOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  const toggleOpen = () => setIsOpen((prev) => !prev);\n  const handleSelect = (option: Option) => {\n    setSelected(option);\n    setIsOpen(false);\n  };\n\n  const data = options || DEFAULT_OPTIONS;\n\n  return (\n    <div\n      className=\"theme-injected relative inline-block perspective-[1200px] mt-10 transform-3d\"\n      ref={containerRef}\n    >\n      <MotionConfig\n        transition={{ type: 'spring', damping: 20, stiffness: 300 }}\n      >\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{\n                opacity: 0,\n                y: 10,\n                filter: 'blur(4px)',\n                scale: 1.1,\n                rotateX: -70,\n              }}\n              animate={{\n                opacity: 1,\n                y: -5,\n                filter: 'blur(0px)',\n                scale: 1,\n                rotateX: 0,\n              }}\n              exit={{\n                opacity: 0,\n                y: 10,\n                filter: 'blur(4px)',\n                scale: 1.1,\n                rotateX: -70,\n              }}\n              className=\"absolute bottom-full left-1/2 z-50 mb-2 origin-bottom -translate-x-1/2 transform-3d\"\n              role=\"menu\"\n              aria-label=\"Visibility options\"\n            >\n              <div className=\"relative flex min-w-max gap-2 rounded-lg border border-border bg-muted p-1.5 py-1 whitespace-nowrap\">\n                {data.map((option, index) => {\n                  const isActive = selected.id === option.id;\n                  const isFirst = index === 0;\n                  const isLast = index === data.length - 1;\n\n                  const roundedClasses = `\n                    ${isFirst ? 'rounded-l-lg rounded-r-lg' : ''}\n                    ${isLast ? 'rounded-r-lg rounded-l-lg' : ''}\n                    ${!isFirst && !isLast ? 'rounded-none' : ''}\n                  `;\n\n                  return (\n                    <motion.button\n                      key={option.id}\n                      onClick={() => handleSelect(option)}\n                      whileTap={{ scale: 0.95 }}\n                      whileHover={{ y: -1 }}\n                      title={`Set as ${option.label}`}\n                      aria-label={`Select ${option.label}`}\n                      className={`relative flex items-center gap-2 px-5 py-3 text-[15px] font-semibold transition-all duration-300 ${roundedClasses} bg-background ${\n                        isActive\n                          ? 'text-foreground'\n                          : 'text-muted-foreground'\n                      }`}\n                    >\n                      <motion.span>\n                        <option.icon size={22} />\n                      </motion.span>\n                      <span className=\"text-bold relative z-10 text-lg\">\n                        {option.label}\n                      </span>\n                    </motion.button>\n                  );\n                })}\n\n                <div className=\"absolute -bottom-1.5 left-1/2 h-3 w-3 -translate-x-1/2 rotate-45 border-r border-b border-border bg-muted\" />\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <motion.button\n          layout=\"size\"\n          onClick={toggleOpen}\n          whileTap={{ scale: 0.97 }}\n          title=\"Change Visibility\"\n          aria-label={`Visibility is currently ${selected.label}. Click to change.`}\n          aria-expanded={isOpen}\n          className={`flex items-center justify-center gap-2 rounded-lg border border-transparent px-4 py-4 transition-all duration-300 select-none ${\n            isOpen ? 'bg-muted/50 border-border' : 'bg-muted'\n          }`}\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div\n              key={selected.id}\n              initial={{ opacity: 0, scale: 0.5, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.5, filter: 'blur(4px)' }}\n              className=\"flex items-center gap-2\"\n            >\n              <selected.icon\n                size={24}\n                className={`transition-colors duration-300 ${\n                  isOpen ? 'text-muted-foreground' : 'text-muted-foreground'\n                }`}\n              />\n            </motion.div>\n          </AnimatePresence>\n\n          <AnimatedText\n            value={selected.label}\n            className=\"text-lg font-semibold text-foreground\"\n          />\n\n          <motion.div\n            animate={{ rotate: isOpen ? 180 : 0 }}\n            className=\"flex items-center\"\n          >\n            <ChevronDown\n              size={24}\n              className=\"text-muted-foreground\"\n              strokeWidth={2.5}\n            />\n          </motion.div>\n        </motion.button>\n      </MotionConfig>\n    </div>\n  );\n};\n\nconst AnimatedText = ({\n  value,\n  className,\n}: {\n  value: string;\n  className?: string;\n}) => {\n  return (\n    <div\n      className={cn(\n        'flex text-lg tracking-tight will-change-transform',\n        className,\n      )}\n    >\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {value.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              layout\n              initial={{ opacity: 0, y: 5, scale: 0.7 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: -5, scale: 0.7 }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-paste",
      "type": "registry:component",
      "title": "Quick Paste",
      "description": "Instantly paste copied content using shortcut-triggered micro interaction panel.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-paste.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { X, ArrowRight } from 'lucide-react';\n\nexport interface PasteData {\n  name: string;\n  image: string;\n}\n\ninterface QuickPasteProps {\n  onPaste: (value: string) => PasteData | null;\n  onClear?: () => void;\n  onContinue?: (data: PasteData) => void;\n  placeholder?: string;\n  submitText?: string;\n  className?: string;\n}\n\nexport const QuickPaste: React.FC<QuickPasteProps> = ({\n  onPaste,\n  onClear,\n  onContinue,\n  placeholder = 'Email Address',\n  submitText = 'Paste',\n  className = '',\n}) => {\n  const [pastedData, setPastedData] = useState<PasteData | null>(null);\n  const [inputValue, setInputValue] = useState('');\n\n  const handlePaste = () => {\n    const data = onPaste(inputValue);\n    if (data) {\n      setPastedData(data);\n    }\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n      handlePaste();\n    }\n  };\n\n  const handleClear = () => {\n    setPastedData(null);\n    setInputValue('');\n    onClear?.();\n  };\n\n  const springConfig = { type: 'spring' as const, bounce: 0.1, duration: 0.4 };\n\n  return (\n    <div\n      className={`flex w-full flex-col items-center justify-center p-4 antialiased select-none ${className}`}\n    >\n      <div className=\"w-full max-w-100\">\n        <LayoutGroup>\n          <motion.div\n            layout\n            transition={springConfig}\n            className=\"flex min-h-16 items-center rounded-full bg-neutral-100 p-1.5 shadow-sm transition-colors duration-300 dark:bg-neutral-900\"\n          >\n            <AnimatePresence mode=\"popLayout\">\n              {pastedData ? (\n                <motion.div\n                  key=\"pasted\"\n                  className=\"flex w-full items-center justify-between pr-1\"\n                >\n                  <motion.div\n                    initial={{\n                      opacity: 0,\n                      scale: 0.9,\n                      filter: 'blur(4px)',\n                      x: -20,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      scale: 1,\n                      filter: 'blur(0px)',\n                      x: 0,\n                    }}\n                    exit={{\n                      opacity: 0,\n                      scale: 0.9,\n                      filter: 'blur(4px)',\n                      x: -20,\n                    }}\n                    transition={{ type: 'spring', bounce: 0, duration: 0.35 }}\n                    className=\"flex items-center rounded-full border border-neutral-200 bg-white py-1.5 pr-4 pl-1.5 shadow-sm transition-colors dark:border-neutral-700 dark:bg-neutral-800\"\n                  >\n                    <img\n                      src={pastedData.image}\n                      alt={pastedData.name}\n                      className=\"mr-3 h-9 w-9 rounded-full border border-neutral-200 object-cover shadow-sm dark:border-neutral-700\"\n                    />\n                    <span className=\"mr-3 max-w-30 truncate text-[15px] font-bold tracking-tight text-neutral-600 transition-colors sm:max-w-none sm:text-[16px] dark:text-neutral-200\">\n                      {pastedData.name}\n                    </span>\n                    <button\n                      title=\"remove\"\n                      onClick={handleClear}\n                      className=\"flex h-5 w-5 items-center justify-center rounded-full bg-neutral-400 text-white transition-colors hover:bg-red-500\"\n                    >\n                      <X size={14} strokeWidth={3} />\n                    </button>\n                  </motion.div>\n\n                  <motion.button\n                    title=\"continue\"\n                    layoutId=\"shared-action-button\"\n                    transition={springConfig}\n                    style={{ borderRadius: 9999 }}\n                    onClick={() => onContinue?.(pastedData)}\n                    className=\"ml-2 flex h-11 w-11 shrink-0 items-center justify-center bg-neutral-900 text-white shadow-lg active:scale-95 dark:bg-white dark:text-black\"\n                  >\n                    <motion.div\n                      layout=\"position\"\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      exit={{ opacity: 0, scale: 0.8 }}\n                      transition={{ duration: 0.2 }}\n                      className=\"flex items-center justify-center\"\n                    >\n                      <ArrowRight size={22} strokeWidth={2.5} />\n                    </motion.div>\n                  </motion.button>\n                </motion.div>\n              ) : (\n                <motion.div\n                  key=\"input\"\n                  initial={{ opacity: 0, filter: 'blur(4px)', x: 0 }}\n                  animate={{ opacity: 1, filter: 'blur(0px)', x: 0 }}\n                  exit={{ opacity: 0, filter: 'blur(4px)', x: 0 }}\n                  transition={{ type: 'spring', bounce: 0, duration: 0.35 }}\n                  className=\"flex w-full items-center justify-between pr-1 pl-4\"\n                >\n                  <input\n                    type=\"text\"\n                    placeholder={placeholder}\n                    value={inputValue}\n                    onChange={(e) => setInputValue(e.target.value)}\n                    onKeyDown={handleKeyDown}\n                    className=\"mr-2 w-full border-none bg-transparent text-[16px] font-semibold text-neutral-900 transition-colors outline-none placeholder:text-neutral-400 sm:text-[18px] dark:text-white dark:placeholder:text-neutral-600\"\n                  />\n                  <motion.button\n                    layoutId=\"shared-action-button\"\n                    type=\"button\"\n                    transition={springConfig}\n                    style={{ borderRadius: 9999 }}\n                    onClick={handlePaste}\n                    className=\"flex h-11 shrink-0 items-center justify-center bg-blue-600 px-5 text-[14px] font-bold tracking-tight text-white shadow-md hover:bg-blue-700 active:scale-95 sm:px-7 sm:text-[15px]\"\n                  >\n                    <motion.span\n                      layout=\"position\"\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      exit={{ opacity: 0, scale: 0.8 }}\n                      transition={{ duration: 0.2 }}\n                      className=\"whitespace-nowrap\"\n                    >\n                      {submitText}\n                    </motion.span>\n                  </motion.button>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-paste-base",
      "type": "registry:component",
      "title": "Quick Paste (base)",
      "description": "Theme-ready base variant of Instantly paste copied content using shortcut-triggered micro interaction panel..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-paste.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { X, ArrowRight } from 'lucide-react';\n\nexport interface PasteData {\n  name: string;\n  image: string;\n}\n\ninterface QuickPasteProps {\n  onPaste: (value: string) => PasteData | null;\n  onClear?: () => void;\n  onContinue?: (data: PasteData) => void;\n  placeholder?: string;\n  submitText?: string;\n  className?: string;\n}\n\nexport const QuickPaste: React.FC<QuickPasteProps> = ({\n  onPaste,\n  onClear,\n  onContinue,\n  placeholder = 'Email Address',\n  submitText = 'Paste',\n  className = '',\n}) => {\n  const [pastedData, setPastedData] = useState<PasteData | null>(null);\n  const [inputValue, setInputValue] = useState('');\n\n  const handlePaste = () => {\n    const data = onPaste(inputValue);\n    if (data) {\n      setPastedData(data);\n    }\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n      handlePaste();\n    }\n  };\n\n  const handleClear = () => {\n    setPastedData(null);\n    setInputValue('');\n    onClear?.();\n  };\n\n  const springConfig = { type: 'spring' as const, bounce: 0.1, duration: 0.4 };\n\n  return (\n    <div\n      className={`theme-injected flex w-full flex-col items-center justify-center p-4 antialiased select-none ${className}`}\n    >\n      <div className=\"w-full max-w-100\">\n        <LayoutGroup>\n          <motion.div\n            layout\n            transition={springConfig}\n            className=\"bg-muted flex min-h-16 items-center rounded-lg p-1.5 shadow-sm transition-colors duration-300\"\n          >\n            <AnimatePresence mode=\"popLayout\">\n              {pastedData ? (\n                <motion.div\n                  key=\"pasted\"\n                  className=\"flex w-full items-center justify-between pr-1\"\n                >\n                  <motion.div\n                    initial={{\n                      opacity: 0,\n                      scale: 0.9,\n                      filter: 'blur(4px)',\n                      x: -20,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      scale: 1,\n                      filter: 'blur(0px)',\n                      x: 0,\n                    }}\n                    exit={{\n                      opacity: 0,\n                      scale: 0.9,\n                      filter: 'blur(4px)',\n                      x: -20,\n                    }}\n                    transition={{ type: 'spring', bounce: 0, duration: 0.35 }}\n                    className=\"border-border bg-background flex items-center rounded-lg border py-1.5 pr-4 pl-1.5 shadow-sm transition-colors\"\n                  >\n                    <img\n                      src={pastedData.image}\n                      alt={pastedData.name}\n                      className=\"border-border mr-3 h-9 w-9 rounded-lg border object-cover shadow-sm\"\n                    />\n                    <span className=\"text-muted-foreground mr-3 max-w-30 truncate text-[15px] font-bold tracking-tight transition-colors sm:max-w-none sm:text-[16px]\">\n                      {pastedData.name}\n                    </span>\n                    <button\n                      title=\"remove\"\n                      onClick={handleClear}\n                      className=\"bg-muted text-foreground hover:bg-destructive hover:text-destructive-foreground flex h-5 w-5 items-center justify-center rounded-lg transition-colors\"\n                    >\n                      <X size={14} strokeWidth={3} />\n                    </button>\n                  </motion.div>\n\n                  <motion.button\n                    title=\"continue\"\n                    layoutId=\"shared-action-button\"\n                    transition={springConfig}\n                    style={{ borderRadius: 9999 }}\n                    onClick={() => onContinue?.(pastedData)}\n                    className=\"bg-foreground text-background ml-2 flex h-11 w-11 shrink-0 items-center justify-center shadow-lg active:scale-95\"\n                  >\n                    <motion.div\n                      layout=\"position\"\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      exit={{ opacity: 0, scale: 0.8 }}\n                      transition={{ duration: 0.2 }}\n                      className=\"flex items-center justify-center\"\n                    >\n                      <ArrowRight size={22} strokeWidth={2.5} />\n                    </motion.div>\n                  </motion.button>\n                </motion.div>\n              ) : (\n                <motion.div\n                  key=\"input\"\n                  initial={{ opacity: 0, filter: 'blur(4px)', x: 0 }}\n                  animate={{ opacity: 1, filter: 'blur(0px)', x: 0 }}\n                  exit={{ opacity: 0, filter: 'blur(4px)', x: 0 }}\n                  transition={{ type: 'spring', bounce: 0, duration: 0.35 }}\n                  className=\"flex w-full items-center justify-between pr-1 pl-4\"\n                >\n                  <input\n                    type=\"text\"\n                    placeholder={placeholder}\n                    value={inputValue}\n                    onChange={(e) => setInputValue(e.target.value)}\n                    onKeyDown={handleKeyDown}\n                    className=\"text-foreground placeholder:text-muted-foreground mr-2 w-full border-none bg-transparent text-[16px] font-semibold transition-colors outline-none sm:text-[18px]\"\n                  />\n                  <motion.button\n                    layoutId=\"shared-action-button\"\n                    type=\"button\"\n                    transition={springConfig}\n                    style={{ borderRadius: 9999 }}\n                    onClick={handlePaste}\n                    className=\"bg-primary text-primary-foreground flex h-11 shrink-0 items-center justify-center px-5 text-[14px] font-bold tracking-tight shadow-md hover:opacity-90 active:scale-95 sm:px-7 sm:text-[15px]\"\n                  >\n                    <motion.span\n                      layout=\"position\"\n                      initial={{ opacity: 0, scale: 0.8 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      exit={{ opacity: 0, scale: 0.8 }}\n                      transition={{ duration: 0.2 }}\n                      className=\"whitespace-nowrap\"\n                    >\n                      {submitText}\n                    </motion.span>\n                  </motion.button>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-switcher",
      "type": "registry:component",
      "title": "Quick Switcher",
      "description": "A premium, dual-mode action bar that enables fast switching between two distinct modes with fluid animations and spring physics.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-switcher.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type ChangeEvent } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { ArrowRight, ChevronUp, ChevronDown } from 'lucide-react';\n\nexport type QuickSwitcherMode = 'ask' | 'generate';\n\nexport interface QuickSwitcherProps {\n  defaultMode?: QuickSwitcherMode;\n  askIcon: React.ReactNode;\n  generateIcon: React.ReactNode;\n  askLabel?: string;\n  generateLabel?: string;\n  onActionClick?: (mode: QuickSwitcherMode) => void;\n}\n\nconst transition: Transition = {\n  type: 'spring',\n  stiffness: 300,\n  damping: 30,\n  mass: 0.8,\n};\n\nexport const QuickSwitcher: React.FC<QuickSwitcherProps> = ({\n  defaultMode = 'ask',\n  askIcon,\n  generateIcon,\n  askLabel = 'Ask Anything',\n  generateLabel = 'Generate Image',\n  onActionClick,\n}) => {\n  const [mode, setMode] = useState<QuickSwitcherMode>(defaultMode);\n  const [value, setValue] = useState<string>('');\n\n  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n    setValue(e.target.value);\n  };\n\n  const onSubmit = () => {\n    onActionClick?.(mode);\n  };\n  const toggleMode = () => {\n    setMode((prev) => (prev === 'ask' ? 'generate' : 'ask'));\n  };\n\n  return (\n    <motion.div\n      layout\n      className=\"flex h-[68px] min-w-[320px] items-center rounded-full border border-gray-200/50 bg-[#F2F2F2] p-1.5 shadow-sm sm:min-w-[380px] dark:border-neutral-800/50 dark:bg-neutral-900\"\n    >\n      <button\n        onClick={toggleMode}\n        className=\"group flex h-full items-center rounded-full bg-white pr-4 pl-2 shadow-sm transition-colors hover:bg-neutral-100 active:scale-95 dark:bg-neutral-800 dark:hover:bg-neutral-700\"\n      >\n        <div className=\"relative flex h-12 w-12 items-center justify-center overflow-hidden\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div\n              key={mode}\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 0.5 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 0.5 }}\n              transition={transition}\n              className=\"flex items-center justify-center text-neutral-900 dark:text-neutral-100\"\n            >\n              {mode === 'ask' ? askIcon : generateIcon}\n            </motion.div>\n          </AnimatePresence>\n        </div>\n\n        <div className=\"ml-1 flex flex-col\">\n          <ChevronUp\n            size={14}\n            strokeWidth={4}\n            className={`transition-colors ${'text-neutral-300 dark:text-neutral-500'}`}\n          />\n          <ChevronDown\n            size={14}\n            strokeWidth={4}\n            className={`transition-colors ${'text-neutral-300 dark:text-neutral-500'}`}\n          />\n        </div>\n      </button>\n\n      <div className=\"relative flex h-full flex-grow items-center overflow-hidden px-4\">\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {value.length <= 0 && (\n            <AnimatedText\n              text={mode === 'ask' ? askLabel : generateLabel}\n              className=\"pointer-events-none absolute top-1/2 left-4 z-10 -translate-y-1/2 truncate text-[18px] font-semibold whitespace-nowrap text-neutral-400 sm:text-[20px] dark:text-neutral-500\"\n            />\n          )}\n        </AnimatePresence>\n\n        <input\n          type=\"text\"\n          value={value}\n          onChange={handleChange}\n          className=\"w-full flex-1 border-none bg-transparent text-[18px] font-semibold text-neutral-900 placeholder-transparent ring-0 outline-none focus:ring-0 focus:outline-none sm:text-[20px] dark:text-neutral-100\"\n        />\n      </div>\n\n      <motion.button\n        whileHover={{ x: 2 }}\n        whileTap={{ scale: 0.9 }}\n        className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full border border-gray-100 bg-white text-neutral-900 shadow-sm transition-colors hover:bg-neutral-100 active:bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:hover:bg-neutral-700 dark:active:bg-neutral-800\"\n        onClick={onSubmit}\n      >\n        <ArrowRight size={22} strokeWidth={2.5} />\n      </motion.button>\n    </motion.div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\">\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "quick-switcher-base",
      "type": "registry:component",
      "title": "Quick Switcher (base)",
      "description": "Theme-ready base variant of A premium, dual-mode action bar that enables fast switching between two distinct modes with fluid animations and spring physics..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/quick-switcher.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type ChangeEvent } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { ArrowRight, ChevronUp, ChevronDown } from 'lucide-react';\n\nexport type QuickSwitcherMode = 'ask' | 'generate';\n\nexport interface QuickSwitcherProps {\n  defaultMode?: QuickSwitcherMode;\n  askIcon: React.ReactNode;\n  generateIcon: React.ReactNode;\n  askLabel?: string;\n  generateLabel?: string;\n  onActionClick?: (mode: QuickSwitcherMode) => void;\n}\n\nconst transition: Transition = {\n  type: 'spring',\n  stiffness: 300,\n  damping: 30,\n  mass: 0.8,\n};\n\nexport const QuickSwitcher: React.FC<QuickSwitcherProps> = ({\n  defaultMode = 'ask',\n  askIcon,\n  generateIcon,\n  askLabel = 'Ask Anything',\n  generateLabel = 'Generate Image',\n  onActionClick,\n}) => {\n  const [mode, setMode] = useState<QuickSwitcherMode>(defaultMode);\n  const [value, setValue] = useState<string>('');\n\n  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n    setValue(e.target.value);\n  };\n\n  const onSubmit = () => {\n    onActionClick?.(mode);\n  };\n\n  const toggleMode = () => {\n    setMode((prev) => (prev === 'ask' ? 'generate' : 'ask'));\n  };\n\n  return (\n    <motion.div\n      layout\n      className=\"theme-injected border-border bg-muted flex h-[68px] min-w-[320px] items-center rounded-lg border p-1.5 shadow-sm sm:min-w-[380px]\"\n    >\n      <button\n        onClick={toggleMode}\n        className=\"group bg-background hover:bg-background/80 cursor-pointer dark:bg-foreground  flex h-full items-center rounded-lg pr-4 pl-2 shadow-sm transition-colors active:scale-95\"\n      >\n        <div className=\"relative flex h-12 w-12 items-center justify-center overflow-hidden\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div\n              key={mode}\n              initial={{ opacity: 0, filter: 'blur(4px)', scale: 0.5 }}\n              animate={{ opacity: 1, filter: 'blur(0px)', scale: 1 }}\n              exit={{ opacity: 0, filter: 'blur(4px)', scale: 0.5 }}\n              transition={transition}\n              className=\"text-foreground dark:text-background flex items-center justify-center\"\n            >\n              {mode === 'ask' ? askIcon : generateIcon}\n            </motion.div>\n          </AnimatePresence>\n        </div>\n\n        <div className=\"ml-1 flex flex-col\">\n          <ChevronUp\n            size={14}\n            strokeWidth={4}\n            className=\"text-muted-foreground dark:text-background transition-colors\"\n          />\n          <ChevronDown\n            size={14}\n            strokeWidth={4}\n            className=\"text-muted-foreground dark:text-background transition-colors\"\n          />\n        </div>\n      </button>\n\n      <div className=\"relative flex h-full flex-grow items-center overflow-hidden px-4\">\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {value.length <= 0 && (\n            <AnimatedText\n              text={mode === 'ask' ? askLabel : generateLabel}\n              className=\"text-muted-foreground pointer-events-none absolute top-1/2 left-4 z-10 -translate-y-1/2 truncate text-[18px] font-semibold whitespace-nowrap sm:text-[20px]\"\n            />\n          )}\n        </AnimatePresence>\n\n        <input\n          type=\"text\"\n          value={value}\n          onChange={handleChange}\n          className=\"text-foreground w-full flex-1 border-none bg-transparent text-[18px] font-semibold placeholder-transparent ring-0 outline-none focus:ring-0 focus:outline-none sm:text-[20px]\"\n        />\n      </div>\n\n      <motion.button\n        \n        whileTap={{ scale: 0.9 }}\n        className=\"border-border bg-background dark:bg-foreground dark:text-background text-foreground hover:bg-accent active:bg-muted flex h-12 w-12 shrink-0 items-center justify-center rounded-lg border shadow-sm transition-colors\"\n        onClick={onSubmit}\n      >\n        <ArrowRight size={22} strokeWidth={2.5} />\n      </motion.button>\n    </motion.div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\">\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radial-carousel",
      "type": "registry:component",
      "title": "Radial Carousel",
      "description": "A stunning radial carousel component with spring animations, drag-to-rotate interaction, and adaptive layout.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/radial-carousel.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Variants,\n  useMotionValue,\n  useSpring,\n  useTransform,\n} from 'motion/react';\nimport { X } from 'lucide-react';\n\nexport interface GalleryItem {\n  id: string | number;\n  url: string;\n  title?: string;\n}\n\nexport interface RadialCarouselProps {\n  items: GalleryItem[];\n  radius?: number;\n  thumbnailSize?: number;\n  centerSize?: number;\n}\n\nexport const RadialCarousel: React.FC<RadialCarouselProps> = ({\n  items,\n  radius = 260,\n  thumbnailSize = 110,\n  centerSize = 400,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [activeIndex, setActiveIndex] = useState(0);\n\n  const [isPanning, setIsPanning] = useState(false);\n  const [responsiveSizes, setResponsiveSizes] = useState({\n    radius,\n    thumbnailSize,\n    centerSize,\n  });\n\n  useEffect(() => {\n    const updateSizes = () => {\n      const width = window.innerWidth;\n\n      if (width < 400) {\n        setResponsiveSizes({\n          radius: Math.min(radius, 110),\n          thumbnailSize: Math.min(thumbnailSize, 70),\n          centerSize: Math.min(centerSize, 260),\n        });\n      } else if (width < 640) {\n        setResponsiveSizes({\n          radius: Math.min(radius, 140),\n          thumbnailSize: Math.min(thumbnailSize, 80),\n          centerSize: Math.min(centerSize, 300),\n        });\n      } else if (width < 1024) {\n        setResponsiveSizes({\n          radius: Math.min(radius, 200),\n          thumbnailSize: Math.min(thumbnailSize, 90),\n          centerSize: Math.min(centerSize, 340),\n        });\n      } else {\n        setResponsiveSizes({ radius, thumbnailSize, centerSize });\n      }\n    };\n\n    updateSizes();\n    window.addEventListener('resize', updateSizes);\n    return () => window.removeEventListener('resize', updateSizes);\n  }, [radius, thumbnailSize, centerSize]);\n\n  const rotation = useMotionValue(0);\n\n  const smoothRotation = useSpring(rotation, {\n    bounce: 0.15,\n    duration: 0.1,\n  });\n\n  const toggleExpand = useCallback(() => {\n    setIsExpanded((prev) => !prev);\n  }, []);\n\n  const handleItemClick = (index: number) => {\n    setActiveIndex(index);\n    setIsExpanded(false);\n  };\n\n  const containerVariants: Variants = {\n    collapsed: { transition: { staggerChildren: 0.01, staggerDirection: -1 } },\n    expanded: { transition: { staggerChildren: 0.03, delayChildren: 0.1 } },\n  };\n\n  return (\n    <div className=\"relative flex h-[350px] w-full touch-pan-y items-center justify-center overflow-visible select-none sm:h-[450px]\">\n      <AnimatePresence mode=\"popLayout\">\n        {!isExpanded ? (\n          <motion.div\n            key=\"center-view\"\n            layout\n            transition={{ type: 'spring', bounce: 0.15, duration: 0.15 }}\n            className=\"relative z-10\"\n          >\n            <motion.div\n              layoutId={`card-${items[activeIndex].id}`}\n              style={{\n                width: responsiveSizes.centerSize,\n                height: responsiveSizes.centerSize,\n              }}\n              className=\"relative overflow-hidden rounded-[32px] border border-neutral-200 bg-white p-3 shadow-2xl transition-colors duration-300 sm:rounded-[42px] sm:p-4 dark:border-neutral-800 dark:bg-neutral-900\"\n            >\n              <motion.img\n                layoutId={`img-${items[activeIndex].id}`}\n                src={items[activeIndex].url}\n                alt={items[activeIndex].title}\n                className=\"h-full w-full rounded-[28px] object-cover sm:rounded-[36px]\"\n                draggable={false}\n              />\n\n              <button\n                onClick={toggleExpand}\n                className=\"absolute top-6 right-6 flex h-8 w-8 items-center justify-center rounded-full bg-neutral-100 shadow-xl backdrop-blur-xl transition-all duration-200 hover:scale-105 hover:bg-white active:scale-95 sm:top-8 sm:right-8 sm:h-10 sm:w-10 dark:bg-white/10 dark:hover:bg-white/20\"\n              >\n                <X\n                  size={20}\n                  className=\"text-neutral-500 sm:hidden dark:text-white\"\n                />\n                <X\n                  size={28}\n                  className=\"hidden text-neutral-500 sm:block dark:text-white\"\n                />\n              </button>\n            </motion.div>\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"radial-view\"\n            variants={containerVariants}\n            initial=\"collapsed\"\n            animate=\"expanded\"\n            exit=\"collapsed\"\n            className={`relative flex h-full w-full cursor-grab items-center justify-center active:cursor-grabbing ${\n              isPanning ? 'touch-none' : 'touch-pan-y'\n            }`}\n            onPanStart={() => setIsPanning(true)}\n            onPanEnd={() => setIsPanning(false)}\n            onPan={(_, info) => {\n              rotation.set(rotation.get() + info.delta.x * 0.5);\n            }}\n          >\n            {items.map((item, index) => {\n              const baseAngle =\n                (index / items.length) * (2 * Math.PI) - Math.PI / 2;\n              return (\n                <Item\n                  key={item.id}\n                  item={item}\n                  baseAngle={baseAngle}\n                  radius={responsiveSizes.radius}\n                  thumbnailSize={responsiveSizes.thumbnailSize}\n                  rotation={smoothRotation}\n                  onClick={() => handleItemClick(index)}\n                />\n              );\n            })}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\ninterface ItemProps {\n  item: GalleryItem;\n  baseAngle: number;\n  radius: number;\n  thumbnailSize: number;\n  rotation: any;\n  onClick: () => void;\n}\n\nconst Item: React.FC<ItemProps> = ({\n  item,\n  baseAngle,\n  radius,\n  thumbnailSize,\n  rotation,\n  onClick,\n}) => {\n  const x = useTransform(rotation, (r: number) => {\n    const currentAngle = baseAngle + (r * Math.PI) / 180;\n    return Math.cos(currentAngle) * radius;\n  });\n\n  const y = useTransform(rotation, (r: number) => {\n    const currentAngle = baseAngle + (r * Math.PI) / 180;\n    return Math.sin(currentAngle) * radius;\n  });\n\n  const rotate = useTransform(rotation, (r: number) => {\n    const currentAngle = baseAngle + (r * Math.PI) / 180;\n    return (currentAngle * 180) / Math.PI + 90;\n  });\n\n  const itemVariants: Variants = {\n    collapsed: {\n      opacity: 0,\n      scale: 0.8,\n      transition: { type: 'spring', bounce: 0.4, duration: 0.5 },\n    },\n    expanded: {\n      scale: 1,\n      opacity: 1,\n      transition: { type: 'spring', bounce: 0.4, duration: 0.5 },\n    },\n  };\n\n  return (\n    <motion.div\n      variants={itemVariants}\n      style={{ x, y, rotate }}\n      onClick={onClick}\n      className=\"absolute cursor-pointer\"\n    >\n      <motion.div\n        layoutId={`card-${item.id}`}\n        style={{ width: thumbnailSize, height: thumbnailSize }}\n        className=\"overflow-hidden rounded-[18px] border border-neutral-200 bg-white p-1 shadow-2xl ring-1 ring-black/5 transition-colors duration-300 sm:rounded-[24px] dark:border-neutral-800 dark:bg-neutral-900 dark:ring-white/5\"\n      >\n        <motion.img\n          layoutId={`img-${item.id}`}\n          src={item.url}\n          alt={item.title}\n          className=\"h-full w-full rounded-[13px] object-cover sm:rounded-[18px]\"\n          draggable={false}\n        />\n      </motion.div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radial-carousel-base",
      "type": "registry:component",
      "title": "Radial Carousel (base)",
      "description": "Theme-ready base variant of A stunning radial carousel component with spring animations, drag-to-rotate interaction, and adaptive layout..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/radial-carousel.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Variants,\n  useMotionValue,\n  useSpring,\n  useTransform,\n} from 'motion/react';\nimport { X } from 'lucide-react';\n\nexport interface GalleryItem {\n  id: string | number;\n  url: string;\n  title?: string;\n}\n\nexport interface RadialCarouselProps {\n  items: GalleryItem[];\n  radius?: number;\n  thumbnailSize?: number;\n  centerSize?: number;\n}\n\nexport const RadialCarousel: React.FC<RadialCarouselProps> = ({\n  items,\n  radius = 260,\n  thumbnailSize = 110,\n  centerSize = 400,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [activeIndex, setActiveIndex] = useState(0);\n\n  const [isPanning, setIsPanning] = useState(false);\n  const [responsiveSizes, setResponsiveSizes] = useState({\n    radius,\n    thumbnailSize,\n    centerSize,\n  });\n\n  useEffect(() => {\n    const updateSizes = () => {\n      const width = window.innerWidth;\n\n      if (width < 400) {\n        setResponsiveSizes({\n          radius: Math.min(radius, 110),\n          thumbnailSize: Math.min(thumbnailSize, 70),\n          centerSize: Math.min(centerSize, 260),\n        });\n      } else if (width < 640) {\n        setResponsiveSizes({\n          radius: Math.min(radius, 140),\n          thumbnailSize: Math.min(thumbnailSize, 80),\n          centerSize: Math.min(centerSize, 300),\n        });\n      } else if (width < 1024) {\n        setResponsiveSizes({\n          radius: Math.min(radius, 200),\n          thumbnailSize: Math.min(thumbnailSize, 90),\n          centerSize: Math.min(centerSize, 340),\n        });\n      } else {\n        setResponsiveSizes({ radius, thumbnailSize, centerSize });\n      }\n    };\n\n    updateSizes();\n    window.addEventListener('resize', updateSizes);\n    return () => window.removeEventListener('resize', updateSizes);\n  }, [radius, thumbnailSize, centerSize]);\n\n  const rotation = useMotionValue(0);\n\n  const smoothRotation = useSpring(rotation, {\n    bounce: 0.15,\n    duration: 0.1,\n  });\n\n  const toggleExpand = useCallback(() => {\n    setIsExpanded((prev) => !prev);\n  }, []);\n\n  const handleItemClick = (index: number) => {\n    setActiveIndex(index);\n    setIsExpanded(false);\n  };\n\n  const containerVariants: Variants = {\n    collapsed: { transition: { staggerChildren: 0.01, staggerDirection: -1 } },\n    expanded: { transition: { staggerChildren: 0.03, delayChildren: 0.1 } },\n  };\n\n  return (\n    <div className=\"theme-injected relative flex h-[350px] w-full touch-pan-y items-center justify-center overflow-visible bg-transparent font-sans select-none sm:h-[450px]\">\n      <AnimatePresence mode=\"popLayout\">\n        {!isExpanded ? (\n          <motion.div\n            key=\"center-view\"\n            layout\n            transition={{ type: 'spring', bounce: 0.15, duration: 0.15 }}\n            className=\"relative z-10\"\n          >\n            <motion.div\n              layoutId={`card-${items[activeIndex].id}`}\n              style={{\n                width: responsiveSizes.centerSize,\n                height: responsiveSizes.centerSize,\n              }}\n              className=\"border-border bg-card relative overflow-hidden rounded-2xl border-2 p-3 shadow-xl transition-colors duration-300 sm:rounded-3xl sm:p-4\"\n            >\n              <motion.img\n                layoutId={`img-${items[activeIndex].id}`}\n                src={items[activeIndex].url}\n                alt={items[activeIndex].title}\n                className=\"h-full w-full rounded-xl object-cover sm:rounded-2xl\"\n                draggable={false}\n              />\n\n              <button\n                onClick={toggleExpand}\n                className=\"border-border bg-muted hover:bg-secondary absolute top-6 right-6 flex h-8 w-8 items-center justify-center rounded-full border shadow-lg backdrop-blur-xl transition-all duration-200 hover:scale-105 active:scale-95 sm:top-8 sm:right-8 sm:h-10 sm:w-10\"\n              >\n                <X size={20} className=\"text-muted-foreground sm:hidden\" />\n                <X\n                  size={28}\n                  className=\"text-muted-foreground hidden sm:block\"\n                />\n              </button>\n            </motion.div>\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"radial-view\"\n            variants={containerVariants}\n            initial=\"collapsed\"\n            animate=\"expanded\"\n            exit=\"collapsed\"\n            className={`relative flex h-full w-full cursor-grab items-center justify-center active:cursor-grabbing ${\n              isPanning ? 'touch-none' : 'touch-pan-y'\n            }`}\n            onPanStart={() => setIsPanning(true)}\n            onPanEnd={() => setIsPanning(false)}\n            onPan={(_, info) => {\n              rotation.set(rotation.get() + info.delta.x * 0.5);\n            }}\n          >\n            {items.map((item, index) => {\n              const baseAngle =\n                (index / items.length) * (2 * Math.PI) - Math.PI / 2;\n              return (\n                <Item\n                  key={item.id}\n                  item={item}\n                  baseAngle={baseAngle}\n                  radius={responsiveSizes.radius}\n                  thumbnailSize={responsiveSizes.thumbnailSize}\n                  rotation={smoothRotation}\n                  onClick={() => handleItemClick(index)}\n                />\n              );\n            })}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\ninterface ItemProps {\n  item: GalleryItem;\n  baseAngle: number;\n  radius: number;\n  thumbnailSize: number;\n  rotation: any;\n  onClick: () => void;\n}\n\nconst Item: React.FC<ItemProps> = ({\n  item,\n  baseAngle,\n  radius,\n  thumbnailSize,\n  rotation,\n  onClick,\n}) => {\n  const x = useTransform(rotation, (r: number) => {\n    const currentAngle = baseAngle + (r * Math.PI) / 180;\n    return Math.cos(currentAngle) * radius;\n  });\n\n  const y = useTransform(rotation, (r: number) => {\n    const currentAngle = baseAngle + (r * Math.PI) / 180;\n    return Math.sin(currentAngle) * radius;\n  });\n\n  const rotate = useTransform(rotation, (r: number) => {\n    const currentAngle = baseAngle + (r * Math.PI) / 180;\n    return (currentAngle * 180) / Math.PI + 90;\n  });\n\n  const itemVariants: Variants = {\n    collapsed: {\n      opacity: 0,\n      scale: 0.8,\n      transition: { type: 'spring', bounce: 0.4, duration: 0.5 },\n    },\n    expanded: {\n      scale: 1,\n      opacity: 1,\n      transition: { type: 'spring', bounce: 0.4, duration: 0.5 },\n    },\n  };\n\n  return (\n    <motion.div\n      variants={itemVariants}\n      style={{ x, y, rotate }}\n      onClick={onClick}\n      className=\"absolute cursor-pointer\"\n    >\n      <motion.div\n        layoutId={`card-${item.id}`}\n        style={{ width: thumbnailSize, height: thumbnailSize }}\n        className=\"border-border bg-card ring-border/40 overflow-hidden rounded-lg border-2 p-1 shadow-lg ring-1 transition-colors duration-300 sm:rounded-xl\"\n      >\n        <motion.img\n          layoutId={`img-${item.id}`}\n          src={item.url}\n          alt={item.title}\n          className=\"h-full w-full rounded-md object-cover sm:rounded-lg\"\n          draggable={false}\n        />\n      </motion.div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "range-selection-slider",
      "type": "registry:component",
      "title": "Range Selection Slider",
      "description": "A responsive range selection slider widget that allows users to precisely choose values, enhanced with smooth interactions and immediate visual feedback for accurate control.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/range-selection-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { type FC, useState, useRef, useCallback } from 'react';\nimport { motion, useMotionValue, useTransform } from 'motion/react';\n\ninterface DigitColumnProps {\n  digit: number;\n  height: number;\n}\n\ninterface RollingNumberProps {\n  value: number;\n  prefix?: string;\n  fontSizeClass?: string;\n}\n\ninterface RangeSliderProps {\n  min: number;\n  max: number;\n  step?: number;\n  value: [number, number];\n  onChange: (value: [number, number]) => void;\n}\n\nexport interface PriceRangeCardProps {\n  defaultRange?: [number, number];\n  min?: number;\n  max?: number;\n  step?: number;\n  prefix?: string;\n  onApply?: (range: [number, number]) => void;\n  onCancel?: (range: [number, number]) => void;\n}\n\ntype DragType = 'min' | 'max' | null;\n\nfunction cn(...classes: Array<string | false | undefined>) {\n  return classes.filter(Boolean).join(' ');\n}\n\nconst DigitColumn: FC<DigitColumnProps> = ({ digit, height }) => {\n  return (\n    <div\n      className=\"relative overflow-hidden\"\n      style={{ height: height, width: '0.65em' }}\n    >\n      <motion.div\n        animate={{ y: -digit * height }}\n        transition={{\n          type: 'spring',\n          stiffness: 140,\n          damping: 22,\n          mass: 0.6,\n        }}\n        className=\"absolute top-0 left-0 flex w-full flex-col items-center\"\n      >\n        {Array.from({ length: 10 }).map((_, i) => (\n          <span\n            key={i}\n            style={{ height: height }}\n            className=\"flex w-full items-center justify-center\"\n          >\n            {i}\n          </span>\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n\nexport const RollingNumber: FC<RollingNumberProps> = ({\n  value,\n  prefix = '',\n}) => {\n  const formatted = prefix + value.toLocaleString();\n  const height =\n    typeof window !== 'undefined' && window.innerWidth < 640 ? 24 : 32;\n\n  return (\n    <div\n      className={cn(\n        'flex items-center leading-none font-bold text-[#010103] tabular-nums dark:text-neutral-100',\n        'h-[24px] sm:h-[32px]',\n      )}\n    >\n      {formatted.split('').map((char, index) => {\n        const isNumber = !isNaN(parseInt(char, 10));\n\n        if (!isNumber) {\n          return (\n            <span key={index} className=\"px-px\">\n              {char}\n            </span>\n          );\n        }\n\n        return <DigitColumn key={index} digit={Number(char)} height={height} />;\n      })}\n    </div>\n  );\n};\n\nconst RangeSlider: FC<RangeSliderProps> = ({\n  min,\n  max,\n  step = 1,\n  value,\n  onChange,\n}) => {\n  const trackRef = useRef<HTMLDivElement>(null);\n  const dragging = useRef<DragType>(null);\n\n  const percentFromValue = useCallback(\n    (v: number) => ((v - min) / (max - min)) * 100,\n    [min, max],\n  );\n\n  const valueFromX = useCallback(\n    (x: number) => {\n      if (!trackRef.current) return min;\n      const rect = trackRef.current.getBoundingClientRect();\n      const percent = Math.min(1, Math.max(0, (x - rect.left) / rect.width));\n      const raw = min + percent * (max - min);\n      return Math.round(raw / step) * step;\n    },\n    [min, max, step],\n  );\n\n  const minPercent = useMotionValue(0);\n  const maxPercent = useMotionValue(0);\n\n  const minP = percentFromValue(value[0]);\n  const maxP = percentFromValue(value[1]);\n\n  if (minPercent.get() !== minP) {\n    minPercent.set(minP);\n  }\n\n  if (maxPercent.get() !== maxP) {\n    maxPercent.set(maxP);\n  }\n\n  const rangeLeft = useTransform(minPercent, (v) => `${v}%`);\n  const rangeWidth = useTransform([minPercent, maxPercent], (latest) => {\n    const minV = Number(latest[0]);\n    const maxV = Number(latest[1]);\n    return `${maxV - minV}%`;\n  });\n\n  const thumbMinLeft = useTransform(minPercent, (v) => `calc(${v}% - 16px)`);\n  const thumbMaxLeft = useTransform(maxPercent, (v) => `calc(${v}% - 16px)`);\n\n  const handleMove = (e: React.PointerEvent) => {\n    if (!dragging.current) return;\n\n    const newValue = valueFromX(e.clientX);\n\n    if (dragging.current === 'min') {\n      const clamped = Math.min(newValue, value[1] - step);\n      onChange([clamped, value[1]]);\n    } else {\n      const clamped = Math.max(newValue, value[0] + step);\n      onChange([value[0], clamped]);\n    }\n  };\n\n  const stop = () => {\n    dragging.current = null;\n  };\n\n  return (\n    <div\n      className=\"relative flex h-14 w-full touch-none items-center select-none\"\n      onPointerMove={handleMove}\n      onPointerUp={stop}\n      onPointerLeave={stop}\n    >\n      <div\n        ref={trackRef}\n        className=\"absolute h-2 w-full rounded-full bg-gray-200 dark:bg-neutral-800\"\n      >\n        <motion.div\n          className=\"absolute h-full rounded-full bg-neutral-800 dark:bg-neutral-300\"\n          style={{\n            left: rangeLeft,\n            width: rangeWidth,\n          }}\n        />\n      </div>\n\n      <motion.div\n        onPointerDown={(e) => {\n          (e.target as HTMLElement).setPointerCapture(e.pointerId);\n          dragging.current = 'min';\n        }}\n        className=\"absolute h-8 w-8 cursor-grab rounded-full border-[6px] border-[#010103] bg-[#FEFEFE] shadow-2xl active:cursor-grabbing dark:border-neutral-300 dark:bg-neutral-800\"\n        style={{ left: thumbMinLeft }}\n      />\n\n      <motion.div\n        onPointerDown={(e) => {\n          (e.target as HTMLElement).setPointerCapture(e.pointerId);\n          dragging.current = 'max';\n        }}\n        className=\"absolute h-8 w-8 cursor-grab rounded-full border-[6px] border-[#010103] bg-[#FEFEFE] shadow-2xl active:cursor-grabbing dark:border-neutral-300 dark:bg-neutral-800\"\n        style={{ left: thumbMaxLeft }}\n      />\n    </div>\n  );\n};\n\nexport const PriceRangeCard: FC<PriceRangeCardProps> = ({\n  defaultRange = [800, 2400],\n  min = 0,\n  max = 5000,\n  step = 20,\n  prefix = '$',\n  onApply,\n  onCancel,\n}) => {\n  const [range, setRange] = useState<[number, number]>(defaultRange);\n\n  return (\n    <div className=\"w-full w-xs overflow-hidden rounded-[2rem] border border-[#F0F0F0] bg-[#FEFEFE] shadow-xl sm:w-sm sm:max-w-sm dark:border-neutral-800 dark:bg-neutral-900\">\n      <div className=\"flex flex-col gap-4 p-5 sm:p-6\">\n        <h2 className=\"text-xl font-extrabold tracking-tight text-[#010103] dark:text-neutral-100\">\n          Price Range\n        </h2>\n\n        <RangeSlider\n          min={min}\n          max={max}\n          step={step}\n          value={range}\n          onChange={setRange}\n        />\n\n        <div className=\"mt-2 flex flex-col gap-3 sm:gap-4\">\n          {(['From', 'To'] as const).map((label, i) => (\n            <div\n              key={label}\n              className=\"flex flex-col gap-1 rounded-2xl bg-[#F4F4FB] p-4 dark:bg-neutral-800/50\"\n            >\n              <span className=\"text-[10px] font-bold tracking-wider text-[#76767D] uppercase sm:text-xs dark:text-neutral-500\">\n                {label}\n              </span>\n              <div className=\"text-xl font-bold sm:text-2xl\">\n                <RollingNumber value={range[i]} prefix={prefix} />\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"flex gap-3 px-5 pt-2 pb-6 sm:gap-4 sm:px-6\">\n        <button\n          className=\"flex-1 rounded-full bg-[#000002] py-2.5 text-sm text-[#FEFEFE] active:scale-95 sm:text-base dark:bg-neutral-100 dark:text-neutral-950\"\n          onClick={() => onApply?.(range)}\n        >\n          Apply\n        </button>\n\n        <button\n          onClick={() => {\n            setRange(defaultRange);\n            onCancel?.(defaultRange);\n          }}\n          className=\"flex-1 rounded-full border border-[#E4E4E9] py-2.5 text-sm font-bold text-[#69686F] hover:bg-gray-50 active:scale-95 sm:text-base dark:border-neutral-700 dark:text-neutral-400 dark:hover:bg-neutral-800\"\n        >\n          Cancel\n        </button>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "range-selection-slider-base",
      "type": "registry:component",
      "title": "Range Selection Slider (base)",
      "description": "Theme-ready base variant of A responsive range selection slider widget that allows users to precisely choose values, enhanced with smooth interactions and immediate visual feedback for accurate control..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/range-selection-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { type FC, useState, useRef, useCallback } from 'react';\nimport { motion, useMotionValue, useTransform } from 'motion/react';\n\ninterface DigitColumnProps {\n  digit: number;\n  height: number;\n}\n\ninterface RollingNumberProps {\n  value: number;\n  prefix?: string;\n  fontSizeClass?: string;\n}\n\ninterface RangeSliderProps {\n  min: number;\n  max: number;\n  step?: number;\n  value: [number, number];\n  onChange: (value: [number, number]) => void;\n}\n\nexport interface PriceRangeCardProps {\n  defaultRange?: [number, number];\n  min?: number;\n  max?: number;\n  step?: number;\n  prefix?: string;\n  onApply?: (range: [number, number]) => void;\n  onCancel?: (range: [number, number]) => void;\n}\n\ntype DragType = 'min' | 'max' | null;\n\nfunction cn(...classes: Array<string | false | undefined>) {\n  return classes.filter(Boolean).join(' ');\n}\n\nconst DigitColumn: FC<DigitColumnProps> = ({ digit, height }) => {\n  return (\n    <div\n      className=\"relative overflow-hidden\"\n      style={{ height: height, width: '0.65em' }}\n    >\n      <motion.div\n        animate={{ y: -digit * height }}\n        transition={{\n          type: 'spring',\n          stiffness: 140,\n          damping: 22,\n          mass: 0.6,\n        }}\n        className=\"absolute top-0 left-0 flex w-full flex-col items-center\"\n      >\n        {Array.from({ length: 10 }).map((_, i) => (\n          <span\n            key={i}\n            style={{ height: height }}\n            className=\"flex w-full items-center justify-center\"\n          >\n            {i}\n          </span>\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n\nexport const RollingNumber: FC<RollingNumberProps> = ({\n  value,\n  prefix = '',\n}) => {\n  const formatted = prefix + value.toLocaleString();\n  const height =\n    typeof window !== 'undefined' && window.innerWidth < 640 ? 24 : 32;\n\n  return (\n    <div\n      className={cn(\n        'text-foreground flex items-center leading-none font-bold tabular-nums',\n        'h-[24px] sm:h-[32px]',\n      )}\n    >\n      {formatted.split('').map((char, index) => {\n        const isNumber = !isNaN(parseInt(char, 10));\n\n        if (!isNumber) {\n          return (\n            <span key={index} className=\"px-px\">\n              {char}\n            </span>\n          );\n        }\n\n        return <DigitColumn key={index} digit={Number(char)} height={height} />;\n      })}\n    </div>\n  );\n};\n\nconst RangeSlider: FC<RangeSliderProps> = ({\n  min,\n  max,\n  step = 1,\n  value,\n  onChange,\n}) => {\n  const trackRef = useRef<HTMLDivElement>(null);\n  const dragging = useRef<DragType>(null);\n\n  const percentFromValue = useCallback(\n    (v: number) => ((v - min) / (max - min)) * 100,\n    [min, max],\n  );\n\n  const valueFromX = useCallback(\n    (x: number) => {\n      if (!trackRef.current) return min;\n      const rect = trackRef.current.getBoundingClientRect();\n      const percent = Math.min(1, Math.max(0, (x - rect.left) / rect.width));\n      const raw = min + percent * (max - min);\n      return Math.round(raw / step) * step;\n    },\n    [min, max, step],\n  );\n\n  const minPercent = useMotionValue(0);\n  const maxPercent = useMotionValue(0);\n\n  const minP = percentFromValue(value[0]);\n  const maxP = percentFromValue(value[1]);\n\n  if (minPercent.get() !== minP) {\n    minPercent.set(minP);\n  }\n\n  if (maxPercent.get() !== maxP) {\n    maxPercent.set(maxP);\n  }\n\n  const rangeLeft = useTransform(minPercent, (v) => `${v}%`);\n  const rangeWidth = useTransform([minPercent, maxPercent], (latest) => {\n    const minV = Number(latest[0]);\n    const maxV = Number(latest[1]);\n    return `${maxV - minV}%`;\n  });\n\n  const thumbMinLeft = useTransform(minPercent, (v) => `calc(${v}% - 16px)`);\n  const thumbMaxLeft = useTransform(maxPercent, (v) => `calc(${v}% - 16px)`);\n\n  const handleMove = (e: React.PointerEvent) => {\n    if (!dragging.current) return;\n\n    const newValue = valueFromX(e.clientX);\n\n    if (dragging.current === 'min') {\n      const clamped = Math.min(newValue, value[1] - step);\n      onChange([clamped, value[1]]);\n    } else {\n      const clamped = Math.max(newValue, value[0] + step);\n      onChange([value[0], clamped]);\n    }\n  };\n\n  const stop = () => {\n    dragging.current = null;\n  };\n\n  return (\n    <div\n      className=\"relative flex h-14 w-full touch-none items-center px-4 select-none\"\n      onPointerMove={handleMove}\n      onPointerUp={stop}\n      onPointerLeave={stop}\n    >\n      <div\n        ref={trackRef}\n        className=\"bg-foreground/20 border-border absolute h-2 w-full rounded-lg border\"\n      >\n        <motion.div\n          className=\"bg-foreground absolute h-full rounded-lg\"\n          style={{\n            left: rangeLeft,\n            width: rangeWidth,\n          }}\n        />\n      </div>\n\n      <motion.div\n        onPointerDown={(e) => {\n          (e.target as HTMLElement).setPointerCapture(e.pointerId);\n          dragging.current = 'min';\n        }}\n        className=\"border-foreground bg-background absolute h-8 w-8 cursor-grab rounded-lg border-[6px] shadow-2xl active:cursor-grabbing\"\n        style={{ left: thumbMinLeft }}\n      />\n\n      <motion.div\n        onPointerDown={(e) => {\n          (e.target as HTMLElement).setPointerCapture(e.pointerId);\n          dragging.current = 'max';\n        }}\n        className=\"border-foreground bg-background absolute h-8 w-8 cursor-grab rounded-lg border-[6px] shadow-2xl active:cursor-grabbing\"\n        style={{ left: thumbMaxLeft }}\n      />\n    </div>\n  );\n};\n\nexport const PriceRangeCard: FC<PriceRangeCardProps> = ({\n  defaultRange = [800, 2400],\n  min = 0,\n  max = 5000,\n  step = 20,\n  prefix = '$',\n  onApply,\n  onCancel,\n}) => {\n  const [range, setRange] = useState<[number, number]>(defaultRange);\n\n  return (\n    <div className=\"border-border theme-injected bg-card w-full w-xs overflow-hidden rounded-lg border shadow-md sm:w-sm sm:max-w-sm\">\n      <div className=\"flex flex-col gap-4 p-5 sm:p-6\">\n        <h2 className=\"text-foreground text-xl font-extrabold tracking-tight\">\n          Price Range\n        </h2>\n\n        <RangeSlider\n          min={min}\n          max={max}\n          step={step}\n          value={range}\n          onChange={setRange}\n        />\n\n        <div className=\"mt-2 flex flex-col gap-3 sm:gap-4\">\n          {(['From', 'To'] as const).map((label, i) => (\n            <div\n              key={label}\n              className=\"bg-input/30 border-border flex flex-col gap-1 rounded-lg border p-4 shadow-xs\"\n            >\n              <span className=\"text-muted-foreground text-[10px] font-bold tracking-wider uppercase sm:text-xs\">\n                {label}\n              </span>\n              <div className=\"text-xl font-bold sm:text-2xl\">\n                <RollingNumber value={range[i]} prefix={prefix} />\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"flex gap-3 px-5 pt-2 pb-6 sm:gap-4 sm:px-6\">\n        <button\n          className=\"bg-primary text-primary-foreground flex-1 rounded-lg py-2.5 text-sm active:scale-95 sm:text-base\"\n          onClick={() => onApply?.(range)}\n        >\n          Apply\n        </button>\n\n        <button\n          onClick={() => {\n            setRange(defaultRange);\n            onCancel?.(defaultRange);\n          }}\n          className=\"border-border text-muted-foreground hover:bg-muted flex-1 rounded-lg border py-2.5 text-sm font-bold active:scale-95 sm:text-base\"\n        >\n          Cancel\n        </button>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "returns-calculator-snippet",
      "type": "registry:component",
      "title": "Returns Calculator Snippet",
      "description": "A responsive returns calculator card snippet that lets users quickly estimate investment outcomes, featuring clear inputs, smooth interactions, and instant visual feedback for confident decision-making.",
      "dependencies": [
        "@number-flow/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/returns-calculator-snippet.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useMemo, type FC, type ChangeEvent } from 'react';\nimport { motion } from 'motion/react';\nimport NumberFlow from '@number-flow/react';\n\n/* --- Types --- */\ninterface SliderProps {\n  value: number;\n  min: number;\n  max: number;\n  onChange: (val: number) => void;\n}\n\ninterface DonutProps {\n  invested: number;\n  returns: number;\n}\n\nexport interface ReturnsCalculatorProps {\n  initialMonthly?: number;\n  initialRate?: number;\n  initialYears?: number;\n  monthlyRange?: { min: number; max: number };\n  rateRange?: { min: number; max: number };\n  yearsRange?: { min: number; max: number };\n}\n\n/* --- Internal Components --- */\nconst AnimatedValue: FC<{\n  value: number | string;\n  prefix?: string;\n  suffix?: string;\n  className?: string;\n}> = ({ value, prefix, suffix, className }) => {\n  return (\n    <NumberFlow\n      value={Number(value)}\n      locales=\"en-IN\"\n      prefix={prefix}\n      suffix={suffix}\n      transformTiming={{\n        easing: 'ease-out',\n        duration: 500,\n      }}\n      className={`font-bold text-[#2B2B2B] dark:text-zinc-100 ${className || 'xs:text-lg text-base sm:text-xl lg:text-2xl'}`}\n    />\n  );\n};\n\nconst Slider: FC<SliderProps> = ({ value, min, max, onChange }) => {\n  const percent = ((value - min) / (max - min)) * 100;\n  return (\n    <div className=\"relative h-12 rounded-full border-b-[1.6px] border-[#E5E5E9] bg-white px-4 sm:h-14 dark:border-zinc-800 dark:bg-zinc-900\">\n      <div className=\"absolute inset-y-1/2 left-1/2 h-1.5 w-[90%] -translate-x-1/2 -translate-y-1/2 rounded-full bg-gray-200 dark:bg-zinc-700\" />\n      <motion.div\n        className=\"absolute inset-y-1/2 h-1.5 -translate-y-1/2 rounded-full bg-black dark:bg-zinc-100\"\n        style={{ width: `${percent * 0.9}%`, left: '5%' }}\n      />\n      <motion.div\n        className=\"absolute top-1/2 z-10 h-6 w-6 -translate-y-1/2 rounded-full border border-gray-200 bg-white shadow-xl sm:h-7 sm:w-7 dark:border-zinc-400 dark:bg-zinc-100\"\n        style={{ left: `calc(${5 + percent * 0.9}% - 12px)` }}\n        transition={{ type: 'spring', bounce: 0.2, duration: 0.3 }}\n      />\n      <input\n        title=\"range\"\n        type=\"range\"\n        min={min}\n        max={max}\n        value={value}\n        onChange={(e: ChangeEvent<HTMLInputElement>) =>\n          onChange(+e.target.value)\n        }\n        className=\"absolute inset-0 z-20 w-full cursor-pointer opacity-0\"\n      />\n    </div>\n  );\n};\n\nconst Donut: FC<DonutProps> = ({ invested, returns }) => {\n  const total = invested + returns;\n  const pReturns = total === 0 ? 0 : returns / total;\n  const pInvested = total === 0 ? 1 : invested / total;\n\n  const C = 2 * Math.PI * 54;\n\n  const gap = 16;\n  const showGap = pReturns > 0 && pInvested > 0;\n  const actualGap = showGap ? gap : 0;\n\n  const investedLength = Math.max(0, pInvested * C - actualGap);\n  const returnLength = Math.max(0, pReturns * C - actualGap);\n\n  return (\n    <div className=\"relative flex shrink-0 justify-center\">\n      <svg\n        width=\"120\"\n        height=\"120\"\n        viewBox=\"0 0 140 140\"\n        className=\"xs:w-[140px] xs:h-[140px] -rotate-90 sm:h-44 sm:w-44\"\n      >\n        <motion.circle\n          cx=\"70\"\n          cy=\"70\"\n          r=\"54\"\n          fill=\"none\"\n          stroke=\"#515158\"\n          className=\"dark:stroke-zinc-400\"\n          strokeWidth=\"20\"\n          strokeLinecap=\"round\"\n          animate={{\n            strokeDasharray: `${investedLength - 6} ${C}`,\n            strokeDashoffset: -(actualGap / 1.5),\n          }}\n          transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n        />\n        <motion.circle\n          cx=\"70\"\n          cy=\"70\"\n          r=\"54\"\n          fill=\"none\"\n          stroke=\"#D4D3DE\"\n          className=\"dark:stroke-zinc-800\"\n          strokeWidth=\"12\"\n          strokeLinecap={showGap ? 'round' : 'butt'}\n          animate={{\n            strokeDasharray: `${returnLength} ${C}`,\n            strokeDashoffset: -(pInvested * C + actualGap / 2),\n          }}\n          transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n        />\n      </svg>\n    </div>\n  );\n};\n\nexport const ReturnsCalculator: FC<ReturnsCalculatorProps> = ({\n  initialMonthly = 40000,\n  initialRate = 6,\n  initialYears = 15,\n  monthlyRange = { min: 5000, max: 100000 },\n  rateRange = { min: 1, max: 15 },\n  yearsRange = { min: 1, max: 30 },\n}) => {\n  const [monthly, setMonthly] = useState(initialMonthly);\n  const [rate, setRate] = useState(initialRate);\n  const [years, setYears] = useState(initialYears);\n\n  const invested = monthly * 12 * years;\n  const returns = useMemo(() => {\n    const r = rate / 100 / 12;\n    const n = years * 12;\n    if (r === 0) return 0;\n    return Math.round(monthly * ((Math.pow(1 + r, n) - 1) / r) - invested);\n  }, [monthly, rate, years, invested]);\n\n  return (\n    <div className=\"w-full max-w-lg space-y-8 rounded-[2rem] border-[1.6px] border-[#F0F0F0] bg-[#FEFEFE] p-5 shadow-xl sm:rounded-[2.5rem] md:p-8 lg:py-10 xl:p-10 dark:border-zinc-800 dark:bg-zinc-900\">\n      {/* Top Section */}\n      <div className=\"flex flex-col items-center gap-8 lg:items-start lg:gap-12 xl:flex-row xl:items-center\">\n        <Donut invested={invested} returns={returns} />\n\n        {/* Stats Section*/}\n        <div className=\"xs:grid-cols-2 grid w-full grid-cols-1 gap-6 lg:grid-cols-1\">\n          <div className=\"flex items-start gap-3 sm:gap-4\">\n            <span className=\"mt-1.5 h-3.5 w-3.5 shrink-0 rounded-full bg-[#D4D3DE] dark:bg-zinc-800\" />\n            <div className=\"flex flex-col gap-0.5\">\n              <p className=\"text-xs font-semibold tracking-wider text-[#838385] uppercase sm:text-sm dark:text-zinc-500\">\n                Invested\n              </p>\n              <AnimatedValue value={invested} prefix=\"₹\" />\n            </div>\n          </div>\n          <div className=\"flex items-start gap-3 sm:gap-4\">\n            <span className=\"mt-1.5 h-3.5 w-3.5 shrink-0 rounded-full bg-[#515158] dark:bg-zinc-400\" />\n            <div className=\"flex flex-col gap-0.5\">\n              <p className=\"text-xs font-semibold tracking-wider text-[#838385] uppercase sm:text-sm dark:text-zinc-500\">\n                Returns\n              </p>\n              <AnimatedValue value={returns} prefix=\"₹\" />\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Sliders Section */}\n      <div className=\"grid grid-cols-1 gap-4\">\n        {[\n          {\n            label: 'Monthly Investment',\n            val: (\n              <AnimatedValue\n                value={monthly}\n                prefix=\"₹\"\n                className=\"text-sm sm:text-base\"\n              />\n            ),\n            slider: (\n              <Slider\n                min={monthlyRange.min}\n                max={monthlyRange.max}\n                value={monthly}\n                onChange={setMonthly}\n              />\n            ),\n          },\n          {\n            label: 'Return Rate',\n            val: (\n              <AnimatedValue\n                value={rate}\n                suffix=\"%\"\n                className=\"text-sm sm:text-base\"\n              />\n            ),\n            slider: (\n              <Slider\n                min={rateRange.min}\n                max={rateRange.max}\n                value={rate}\n                onChange={setRate}\n              />\n            ),\n          },\n          {\n            label: 'Time Period',\n            val: (\n              <AnimatedValue\n                value={years}\n                suffix=\" Years\"\n                className=\"text-sm sm:text-base\"\n              />\n            ),\n            slider: (\n              <Slider\n                min={yearsRange.min}\n                max={yearsRange.max}\n                value={years}\n                onChange={setYears}\n              />\n            ),\n          },\n        ].map((item, idx) => (\n          <div\n            key={idx}\n            className=\"rounded-3xl border border-[#E5E5E9] bg-[#F4F4FB] transition-all hover:border-[#D4D3DE] sm:rounded-4xl dark:border-zinc-800/50 dark:bg-zinc-800/40 dark:hover:border-zinc-700\"\n          >\n            {item.slider}\n            <div className=\"flex items-center justify-between px-5 py-3\">\n              <span className=\"text-[10px] font-bold tracking-tight text-[#717077] uppercase sm:text-xs dark:text-zinc-400\">\n                {item.label}\n              </span>\n              {item.val}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "returns-calculator-snippet-base",
      "type": "registry:component",
      "title": "Returns Calculator Snippet (base)",
      "description": "Theme-ready base variant of A responsive returns calculator card snippet that lets users quickly estimate investment outcomes, featuring clear inputs, smooth interactions, and instant visual feedback for confident decision-making..",
      "dependencies": [
        "@number-flow/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/returns-calculator-snippet.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useMemo, type FC, type ChangeEvent } from 'react';\nimport { motion } from 'motion/react';\nimport NumberFlow from '@number-flow/react';\n\n/* --- Types --- */\ninterface SliderProps {\n  value: number;\n  min: number;\n  max: number;\n  onChange: (val: number) => void;\n}\n\ninterface DonutProps {\n  invested: number;\n  returns: number;\n}\n\nexport interface ReturnsCalculatorProps {\n  initialMonthly?: number;\n  initialRate?: number;\n  initialYears?: number;\n  monthlyRange?: { min: number; max: number };\n  rateRange?: { min: number; max: number };\n  yearsRange?: { min: number; max: number };\n}\n\n/* --- Internal Components --- */\nconst AnimatedValue: FC<{\n  value: number | string;\n  prefix?: string;\n  suffix?: string;\n  className?: string;\n}> = ({ value, prefix, suffix, className }) => {\n  return (\n    <NumberFlow\n      value={Number(value)}\n      locales=\"en-IN\"\n      prefix={prefix}\n      suffix={suffix}\n      transformTiming={{\n        easing: 'ease-out',\n        duration: 500,\n      }}\n      className={`text-foreground font-bold ${className || 'xs:text-lg text-base sm:text-xl lg:text-2xl'}`}\n    />\n  );\n};\n\nconst Slider: FC<SliderProps> = ({ value, min, max, onChange }) => {\n  const percent = ((value - min) / (max - min)) * 100;\n  return (\n    <div className=\"border-border bg-background relative h-12 rounded-full border-b px-4 sm:h-14\">\n      <div className=\"bg-muted absolute inset-y-1/2 left-1/2 h-1.5 w-[90%] -translate-x-1/2 -translate-y-1/2 rounded-full\" />\n      <motion.div\n        className=\"bg-foreground absolute inset-y-1/2 h-1.5 -translate-y-1/2 rounded-full\"\n        style={{ width: `${percent * 0.9}%`, left: '5%' }}\n      />\n      <motion.div\n        className=\"border-border bg-background absolute top-1/2 z-10 h-6 w-6 -translate-y-1/2 rounded-full border shadow-xl sm:h-7 sm:w-7\"\n        style={{ left: `calc(${5 + percent * 0.9}% - 12px)` }}\n        transition={{ type: 'spring', bounce: 0.2, duration: 0.3 }}\n      />\n      <input\n        title=\"range\"\n        type=\"range\"\n        min={min}\n        max={max}\n        value={value}\n        onChange={(e: ChangeEvent<HTMLInputElement>) =>\n          onChange(+e.target.value)\n        }\n        className=\"absolute inset-0 z-20 w-full cursor-pointer opacity-0\"\n      />\n    </div>\n  );\n};\n\nconst Donut: FC<DonutProps> = ({ invested, returns }) => {\n  const total = invested + returns;\n  const pReturns = total === 0 ? 0 : returns / total;\n  const pInvested = total === 0 ? 1 : invested / total;\n\n  const C = 2 * Math.PI * 54;\n\n  const gap = 16;\n  const showGap = pReturns > 0 && pInvested > 0;\n  const actualGap = showGap ? gap : 0;\n\n  const investedLength = Math.max(0, pInvested * C - actualGap);\n  const returnLength = Math.max(0, pReturns * C - actualGap);\n\n  return (\n    <div className=\"relative flex shrink-0 justify-center\">\n      <svg\n        width=\"120\"\n        height=\"120\"\n        viewBox=\"0 0 140 140\"\n        className=\"xs:w-[140px] xs:h-[140px] -rotate-90 sm:h-44 sm:w-44\"\n      >\n        <motion.circle\n          cx=\"70\"\n          cy=\"70\"\n          r=\"54\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          className=\"text-foreground\"\n          strokeWidth=\"20\"\n          strokeLinecap=\"round\"\n          animate={{\n            strokeDasharray: `${investedLength - 6} ${C}`,\n            strokeDashoffset: -(actualGap / 1.5),\n          }}\n          transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n        />\n        <motion.circle\n          cx=\"70\"\n          cy=\"70\"\n          r=\"54\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          className=\"text-muted\"\n          strokeWidth=\"12\"\n          strokeLinecap={showGap ? 'round' : 'butt'}\n          animate={{\n            strokeDasharray: `${returnLength} ${C}`,\n            strokeDashoffset: -(pInvested * C + actualGap / 2),\n          }}\n          transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n        />\n      </svg>\n    </div>\n  );\n};\n\nexport const ReturnsCalculator: FC<ReturnsCalculatorProps> = ({\n  initialMonthly = 40000,\n  initialRate = 6,\n  initialYears = 15,\n  monthlyRange = { min: 5000, max: 100000 },\n  rateRange = { min: 1, max: 15 },\n  yearsRange = { min: 1, max: 30 },\n}) => {\n  const [monthly, setMonthly] = useState(initialMonthly);\n  const [rate, setRate] = useState(initialRate);\n  const [years, setYears] = useState(initialYears);\n\n  const invested = monthly * 12 * years;\n  const returns = useMemo(() => {\n    const r = rate / 100 / 12;\n    const n = years * 12;\n    if (r === 0) return 0;\n    return Math.round(monthly * ((Math.pow(1 + r, n) - 1) / r) - invested);\n  }, [monthly, rate, years, invested]);\n\n  return (\n    <div className=\"theme-injected border-border bg-card w-full max-w-lg space-y-8 rounded-3xl border p-6 shadow-xl sm:rounded-[2.5rem] md:p-8 lg:py-10 xl:p-10\">\n      {/* Top Section */}\n      <div className=\"flex flex-col items-center gap-8 lg:items-start lg:gap-12 xl:flex-row xl:items-center\">\n        <Donut invested={invested} returns={returns} />\n\n        {/* Stats Section*/}\n        <div className=\"xs:grid-cols-2 grid w-full grid-cols-1 gap-6 lg:grid-cols-1\">\n          <div className=\"flex items-start gap-3 sm:gap-4\">\n            <span className=\"bg-muted mt-1.5 h-3.5 w-3.5 shrink-0 rounded-full\" />\n            <div className=\"flex flex-col gap-1\">\n              <p className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase sm:text-sm\">\n                Invested\n              </p>\n              <AnimatedValue value={invested} prefix=\"₹\" />\n            </div>\n          </div>\n          <div className=\"flex items-start gap-3 sm:gap-4\">\n            <span className=\"bg-foreground mt-1.5 h-3.5 w-3.5 shrink-0 rounded-full\" />\n            <div className=\"flex flex-col gap-1\">\n              <p className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase sm:text-sm\">\n                Returns\n              </p>\n              <AnimatedValue value={returns} prefix=\"₹\" />\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Sliders Section */}\n      <div className=\"grid grid-cols-1 gap-4\">\n        {[\n          {\n            label: 'Monthly Investment',\n            val: (\n              <AnimatedValue\n                value={monthly}\n                prefix=\"₹\"\n                className=\"text-sm sm:text-base\"\n              />\n            ),\n            slider: (\n              <Slider\n                min={monthlyRange.min}\n                max={monthlyRange.max}\n                value={monthly}\n                onChange={setMonthly}\n              />\n            ),\n          },\n          {\n            label: 'Return Rate',\n            val: (\n              <AnimatedValue\n                value={rate}\n                suffix=\"%\"\n                className=\"text-sm sm:text-base\"\n              />\n            ),\n            slider: (\n              <Slider\n                min={rateRange.min}\n                max={rateRange.max}\n                value={rate}\n                onChange={setRate}\n              />\n            ),\n          },\n          {\n            label: 'Time Period',\n            val: (\n              <AnimatedValue\n                value={years}\n                suffix=\" Years\"\n                className=\"text-sm sm:text-base\"\n              />\n            ),\n            slider: (\n              <Slider\n                min={yearsRange.min}\n                max={yearsRange.max}\n                value={years}\n                onChange={setYears}\n              />\n            ),\n          },\n        ].map((item, idx) => (\n          <div\n            key={idx}\n            className=\"border-border bg-muted/50 hover:border-input rounded-2xl border transition-all sm:rounded-4xl\"\n          >\n            {item.slider}\n            <div className=\"flex items-center justify-between px-4 py-4\">\n              <span className=\"text-muted-foreground text-[10px] font-bold tracking-tight uppercase sm:text-xs\">\n                {item.label}\n              </span>\n              {item.val}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "reveal-copy",
      "type": "registry:component",
      "title": "Reveal Copy",
      "description": "An animated reveal copy component that smoothly uncovers content with interactive motion.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/reveal-copy.tsx",
          "type": "registry:component",
          "content": "import { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { FaCopy } from 'react-icons/fa';\nimport { BsEyeFill } from 'react-icons/bs';\nimport { FaCheck } from 'react-icons/fa6';\n\ntype RevealAndCopyProps = {\n  cardNumber: string;\n  hiddenIndexes?: number[];\n  revealDuration?: number;\n  copiedDuration?: number;\n};\n\nexport const RevealAndCopy = ({\n  cardNumber,\n  hiddenIndexes = [1, 2],\n  revealDuration = 3000,\n  copiedDuration = 1200,\n}: RevealAndCopyProps) => {\n  const [revealed, setRevealed] = useState(false);\n  const [copied, setCopied] = useState(false);\n  const [timerActive, setTimerActive] = useState(false);\n\n  const parts = cardNumber.split(' ');\n\n  const resetAll = useCallback(() => {\n    setRevealed(false);\n    setCopied(false);\n    setTimerActive(false);\n  }, []);\n\n  useEffect(() => {\n    if (!revealed) return;\n\n    // eslint-disable-next-line react-hooks/set-state-in-effect\n    setTimerActive(true);\n\n    const timer = setTimeout(() => {\n      if (!copied) resetAll();\n    }, revealDuration);\n\n    return () => clearTimeout(timer);\n  }, [revealed, copied, revealDuration, resetAll]);\n\n  useEffect(() => {\n    if (!copied) return;\n\n    const timer = setTimeout(() => {\n      resetAll();\n    }, copiedDuration);\n\n    return () => clearTimeout(timer);\n  }, [copied, copiedDuration, resetAll]);\n\n  const handleCopy = async () => {\n    if (copied) return;\n\n    await navigator.clipboard.writeText(cardNumber);\n\n    setCopied(true);\n    setTimerActive(false);\n  };\n\n  return (\n    <div className=\"flex flex-col items-center justify-center gap-8 bg-white transition-colors duration-500 dark:bg-zinc-950\">\n      <div className=\"flex h-[70px] w-full max-w-[420px] items-center rounded-[20px] border-2 border-[#E5E4ED] bg-white px-3 shadow-sm transition-colors duration-500 dark:border-zinc-800 dark:bg-zinc-900\">\n        <div className=\"relative flex flex-1 items-center justify-between overflow-hidden text-[16px] tracking-[0.08em] sm:text-[22px] sm:tracking-[0.18em]\">\n          <AnimatePresence>\n            {revealed && (\n              <motion.div\n                key=\"shine\"\n                initial={{ left: '-60%' }}\n                animate={{ left: '160%' }}\n                transition={{\n                  delay: 0.35,\n                  duration: 1,\n                  ease: 'linear',\n                }}\n                className=\"pointer-events-none absolute inset-y-0 z-30 w-[60%] mix-blend-overlay dark:mix-blend-screen\"\n                style={{\n                  transform: 'skewX(-20deg)',\n                  background: `\n                    linear-gradient(\n                      90deg,\n                      transparent 0%,\n                      rgba(255,255,255,0.15) 20%,\n                      rgba(255,255,255,0.9) 50%,\n                      rgba(255,255,255,0.15) 80%,\n                      transparent 100%\n                    )\n                  `,\n                  filter: 'blur(6px)',\n                }}\n              />\n            )}\n          </AnimatePresence>\n\n          {parts.map((part, idx) => {\n            const isMasked = !revealed && hiddenIndexes.includes(idx);\n            const display = isMasked ? 'xxxx' : part;\n\n            return (\n              <div\n                key={idx}\n                className=\"relative flex flex-1 min-w-0 justify-center overflow-hidden font-bold\"\n              >\n                <div className=\"relative flex items-center\">\n                  <AnimatePresence mode=\"popLayout\" initial={false}>\n                    {display.split('').map((char, i) => (\n                      <motion.span\n                        key={`${display}-${i}`}\n                        initial={{\n                          opacity: 0,\n                          y: 12,\n                          scale: 0.5,\n                          filter: 'blur(4px)',\n                        }}\n                        animate={{\n                          opacity: 1,\n                          y: 0,\n                          scale: 1,\n                          filter: 'blur(0px)',\n                          transition: {\n                            type: 'spring',\n                            stiffness: 200,\n                            damping: 14,\n                            delay: i * 0.06,\n                          },\n                        }}\n                        exit={{\n                          opacity: 0,\n                          y: -12,\n                          scale: 0.5,\n                          filter: 'blur(4px)',\n                          transition: {\n                            delay: i * 0.06,\n                            duration: 0.18,\n                          },\n                        }}\n                        className=\"text-[#282828] tabular-nums dark:text-zinc-100\"\n                      >\n                        {char}\n                      </motion.span>\n                    ))}\n                  </AnimatePresence>\n                </div>\n              </div>\n            );\n          })}\n        </div>\n\n        <div className=\"relative ml-2 shrink-0 sm:ml-4 h-12 w-12\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!revealed && (\n              <motion.button\n                key=\"eye\"\n                onClick={() => setRevealed(true)}\n                initial={{ scale: 0.85, opacity: 0 }}\n                animate={{ scale: 1, opacity: 1 }}\n                exit={{ scale: 0.85, opacity: 0 }}\n                className=\"flex h-full w-full items-center justify-center rounded-2xl bg-[#E4E4FF] text-[#4E53CA] dark:bg-indigo-900/30 dark:text-indigo-400\"\n              >\n                <BsEyeFill size={22} />\n              </motion.button>\n            )}\n\n            {revealed && (\n              <motion.button\n                key=\"copy\"\n                onClick={handleCopy}\n                initial={{ scale: 0.85, opacity: 0 }}\n                animate={{ scale: 1, opacity: 1 }}\n                exit={{ scale: 0.85, opacity: 0 }}\n                className={`relative flex h-full w-full items-center justify-center rounded-2xl transition-colors duration-300 ${copied\n                  ? 'bg-[#2DBE50] text-white'\n                  : 'bg-[#CAF9D5] text-[#2DBE50] dark:bg-emerald-900/30 dark:text-emerald-400'\n                  }`}\n              >\n                {timerActive && !copied && (\n                  <svg\n                    className=\"pointer-events-none absolute inset-0 h-full w-full\"\n                    viewBox=\"0 0 48 48\"\n                  >\n                    <motion.rect\n                      x=\"1.5\"\n                      y=\"1.5\"\n                      width=\"45\"\n                      height=\"45\"\n                      rx=\"14\"\n                      ry=\"14\"\n                      fill=\"transparent\"\n                      stroke=\"currentColor\"\n                      strokeWidth=\"3\"\n                      strokeDasharray=\"180\"\n                      initial={{ strokeDashoffset: 180 }}\n                      animate={{ strokeDashoffset: 0 }}\n                      transition={{\n                        duration: revealDuration / 1000,\n                        ease: 'linear',\n                      }}\n                    />\n                  </svg>\n                )}\n\n                {copied ? <FaCheck size={22} /> : <FaCopy size={22} />}\n              </motion.button>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "reveal-copy-base",
      "type": "registry:component",
      "title": "Reveal Copy (base)",
      "description": "Theme-ready base variant of An animated reveal copy component that smoothly uncovers content with interactive motion..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/reveal-copy.tsx",
          "type": "registry:component",
          "content": "import { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { FaCopy } from 'react-icons/fa';\nimport { BsEyeFill } from 'react-icons/bs';\nimport { FaCheck } from 'react-icons/fa6';\n\ntype RevealAndCopyProps = {\n  cardNumber: string;\n  hiddenIndexes?: number[];\n  revealDuration?: number;\n  copiedDuration?: number;\n};\n\nexport const RevealAndCopy = ({\n  cardNumber,\n  hiddenIndexes = [1, 2],\n  revealDuration = 3000,\n  copiedDuration = 1200,\n}: RevealAndCopyProps) => {\n  const [revealed, setRevealed] = useState(false);\n  const [copied, setCopied] = useState(false);\n  const [timerActive, setTimerActive] = useState(false);\n\n  const parts = cardNumber.split(' ');\n\n  const resetAll = useCallback(() => {\n    setRevealed(false);\n    setCopied(false);\n    setTimerActive(false);\n  }, []);\n\n  useEffect(() => {\n    if (!revealed) return;\n    // eslint-disable-next-line react-hooks/set-state-in-effect\n    setTimerActive(true);\n\n    const timer = setTimeout(() => {\n      if (!copied) resetAll();\n    }, revealDuration);\n\n    return () => clearTimeout(timer);\n  }, [revealed, copied, revealDuration, resetAll]);\n\n  useEffect(() => {\n    if (!copied) return;\n\n    const timer = setTimeout(() => {\n      resetAll();\n    }, copiedDuration);\n\n    return () => clearTimeout(timer);\n  }, [copied, copiedDuration, resetAll]);\n\n  const handleCopy = async () => {\n    if (copied) return;\n\n    await navigator.clipboard.writeText(cardNumber);\n\n    setCopied(true);\n    setTimerActive(false);\n  };\n\n  return (\n    <div className=\"theme-injected  flex flex-col items-center justify-center gap-8 transition-colors duration-500\">\n      <div className=\"border-border bg-background flex h-[70px] w-full max-w-[420px] items-center rounded-lg border-2 px-3 shadow-sm transition-colors duration-500\">\n        <div className=\"relative flex flex-1 items-center justify-between overflow-hidden text-[16px] tracking-[0.08em] sm:text-[22px] sm:tracking-[0.18em]\">\n          <AnimatePresence>\n            {revealed && (\n              <motion.div\n                key=\"shine\"\n                initial={{ left: '-60%' }}\n                animate={{ left: '160%' }}\n                transition={{\n                  delay: 0.35,\n                  duration: 1,\n                  ease: 'linear',\n                }}\n                className=\"pointer-events-none absolute inset-y-0 z-30 w-[60%] mix-blend-overlay\"\n                style={{\n                  transform: 'skewX(-20deg)',\n                  background: `\n                    linear-gradient(\n                      90deg,\n                      transparent 0%,\n                      oklch(var(--background) / 0.15) 20%,\n                      oklch(var(--background) / 0.9) 50%,\n                      oklch(var(--background) / 0.15) 80%,\n                      transparent 100%\n                    )\n                  `,\n                  filter: 'blur(6px)',\n                }}\n              />\n            )}\n          </AnimatePresence>\n\n          {parts.map((part, idx) => {\n            const isMasked = !revealed && hiddenIndexes.includes(idx);\n            const display = isMasked ? 'xxxx' : part;\n\n            return (\n              <div\n                key={idx}\n                className=\"relative flex flex-1 min-w-0 justify-center overflow-hidden font-bold\"\n              >\n                <div className=\"relative flex items-center\">\n                  <AnimatePresence mode=\"popLayout\" initial={false}>\n                    {display.split('').map((char, i) => (\n                      <motion.span\n                        key={`${display}-${i}`}\n                        initial={{\n                          opacity: 0,\n                          y: 12,\n                          scale: 0.5,\n                          filter: 'blur(4px)',\n                        }}\n                        animate={{\n                          opacity: 1,\n                          y: 0,\n                          scale: 1,\n                          filter: 'blur(0px)',\n                          transition: {\n                            type: 'spring',\n                            stiffness: 200,\n                            damping: 14,\n                            delay: i * 0.06,\n                          },\n                        }}\n                        exit={{\n                          opacity: 0,\n                          y: -12,\n                          scale: 0.5,\n                          filter: 'blur(4px)',\n                          transition: {\n                            delay: i * 0.06,\n                            duration: 0.18,\n                          },\n                        }}\n                        className=\"text-foreground tabular-nums\"\n                      >\n                        {char}\n                      </motion.span>\n                    ))}\n                  </AnimatePresence>\n                </div>\n              </div>\n            );\n          })}\n        </div>\n\n        <div className=\"relative ml-2 shrink-0 sm:ml-4 h-12 w-12\">\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!revealed && (\n              <motion.button\n                key=\"eye\"\n                onClick={() => setRevealed(true)}\n                initial={{ scale: 0.85, opacity: 0 }}\n                animate={{ scale: 1, opacity: 1 }}\n                exit={{ scale: 0.85, opacity: 0 }}\n                className=\"bg-muted text-foreground flex h-full w-full items-center justify-center rounded-lg\"\n              >\n                <BsEyeFill size={22} />\n              </motion.button>\n            )}\n\n            {revealed && (\n              <motion.button\n                key=\"copy\"\n                onClick={handleCopy}\n                initial={{ scale: 0.85, opacity: 0 }}\n                animate={{ scale: 1, opacity: 1 }}\n                exit={{ scale: 0.85, opacity: 0 }}\n                className={`relative flex h-full w-full items-center justify-center rounded-lg transition-colors duration-300 ${\n                  copied\n                    ? 'bg-primary text-primary-foreground'\n                    : 'bg-secondary text-secondary-foreground'\n                }`}\n              >\n                {timerActive && !copied && (\n                  <svg\n                    className=\"pointer-events-none absolute inset-0 h-full w-full\"\n                    viewBox=\"0 0 48 48\"\n                  >\n                    <motion.rect\n                      x=\"1.5\"\n                      y=\"1.5\"\n                      width=\"45\"\n                      height=\"45\"\n                      rx=\"var(--radius)\"\n                      ry=\"var(--radius)\"\n                      fill=\"transparent\"\n                      className=\"stroke-secondary-foreground\"\n                      strokeWidth=\"3\"\n                      strokeDasharray=\"180\"\n                      initial={{ strokeDashoffset: 180 }}\n                      animate={{ strokeDashoffset: 0 }}\n                      transition={{\n                        duration: revealDuration / 1000,\n                        ease: 'linear',\n                      }}\n                    />\n                  </svg>\n                )}\n\n                {copied ? <FaCheck size={22} /> : <FaCopy size={22} />}\n              </motion.button>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "revealing-cards",
      "type": "registry:component",
      "title": "Revealing Cards",
      "description": "Interactive micro-interaction component for revealing cards.",
      "dependencies": [
        "framer-motion"
      ],
      "files": [
        {
          "path": "components/watermelon/revealing-cards.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport { motion, useMotionValue, type PanInfo } from \"framer-motion\";\nimport React, { useState } from \"react\";\n\ntype CardData = {\n  id: number;\n  z: number;\n  label: string;\n  date: string;\n  amount: string;\n  accentColor: string;\n};\n\nconst INITIAL_CARDS: CardData[] = [\n  {\n    id: 1,\n    z: 4,\n    label: \"Credit Card\",\n    date: \"Wed, 13 May\",\n    amount: \"$1,200\",\n    accentColor: \"#ef4444\",\n  },\n  {\n    id: 2,\n    z: 3,\n    label: \"Home Loan\",\n    date: \"Wed, 13 May\",\n    amount: \"$2,700\",\n    accentColor: \"#ef4444\",\n  },\n];\n\ninterface CardProps {\n  children: React.ReactNode;\n  updatePosition: () => void;\n}\nconst MAX_DRAG = 150;\nfunction Card({ children, updatePosition }: CardProps) {\n  const x = useMotionValue(0);\n  const y = useMotionValue(0);\n\n  function handleDragEnd(_: unknown, info: PanInfo) {\n    if (\n      Math.abs(info.offset.x) > MAX_DRAG ||\n      Math.abs(info.offset.y) > MAX_DRAG\n    ) {\n      updatePosition();\n    } else {\n      x.set(0);\n      y.set(0);\n    }\n  }\n\n  return (\n    <motion.div\n      style={{ x, y }}\n      drag\n      dragConstraints={{ top: 0, right: 0, bottom: 0, left: 0 }}\n      dragElastic={0.6}\n      whileTap={{ cursor: \"grabbing\" }}\n      onDragEnd={handleDragEnd}\n      className=\"absolute inset-0 cursor-grab\"\n    >\n      {children}\n    </motion.div>\n  );\n}\n\nexport default function SwipeableStackCards() {\n  const [cards, setCards] = useState<CardData[]>(INITIAL_CARDS);\n\n  const updatePosition = (id: number) => {\n    setCards((prev) => {\n      const newCards = [...prev];\n      const index = newCards.findIndex((card) => card.id === id);\n      const [card] = newCards.splice(index, 1);\n      newCards.unshift(card);\n      return newCards;\n    });\n  };\n\n  return (\n    <div className=\"flex min-h-screen items-center justify-center font-sans\">\n      <div className=\"relative h-[300px] w-[300px]\">\n        {cards.map((card, index) => (\n          <Card key={card.id} updatePosition={() => updatePosition(card.id)}>\n            <motion.div\n              style={{\n                borderRadius: \"32px\",\n                transformOrigin: \"0% 100%\",\n              }}\n              animate={{\n                rotateZ: -(cards.length - index - 1) * 10,\n                scale: 1 + index * 0.1 - cards.length * 0.1,\n              }}\n              initial={false}\n              transition={{ type: \"spring\", bounce: 0.1, duration: 0.5 }}\n              className=\"size-full overflow-hidden bg-white dark:bg-zinc-900 shadow-[0px_0px_0px_1px_rgba(0,0,0,0.03),0px_1px_2px_-1px_rgba(0,0,0,0.06),0px_2px_4px_0px_rgba(0,0,0,0.04)] dark:shadow-[0px_0px_0px_1px_rgba(255,255,255,0.06),0px_2px_8px_0px_rgba(0,0,0,0.4)] flex flex-col p-2\"\n            >\n              <div className=\"flex-1 flex h-full select-none flex-col p-4 pointer-events-none box-border\">\n                <p className=\"text-lg font-normal tracking-wide text-zinc-400 dark:text-zinc-500\">\n                  {card.label}\n                </p>\n\n                <p\n                  className=\"text-2xl font-bold leading-tight\"\n                  style={{ color: card.accentColor }}\n                >\n                  {card.date}\n                </p>\n\n                <p className=\"text-xl font-semibold text-zinc-900 dark:text-zinc-50\">\n                  {card.amount}\n                </p>\n\n                <div className=\"flex-1\" />\n\n                <div\n                  className=\"pointer-events-auto\"\n                  onClick={(e) => e.stopPropagation()}\n                ></div>\n              </div>\n              <button className=\"w-full cursor-pointer rounded-full bg-zinc-900 dark:bg-zinc-50 py-4 text-base font-semibold tracking-wide text-white dark:text-zinc-900 border-none\">\n                Pay Now\n              </button>\n            </motion.div>\n          </Card>\n        ))}\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "revealing-cards-base",
      "type": "registry:component",
      "title": "Revealing Cards (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component for revealing cards..",
      "dependencies": [
        "framer-motion"
      ],
      "files": [
        {
          "path": "components/watermelon/revealing-cards.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, useMotionValue, type PanInfo } from 'framer-motion';\nimport React, { useState } from 'react';\n\ntype CardData = {\n  id: number;\n  z: number;\n  label: string;\n  date: string;\n  amount: string;\n  accentColor: string;\n};\n\nconst INITIAL_CARDS: CardData[] = [\n  {\n    id: 1,\n    z: 4,\n    label: 'Credit Card',\n    date: 'Wed, 13 May',\n    amount: '$1,200',\n    accentColor: '#ef4444',\n  },\n  {\n    id: 2,\n    z: 3,\n    label: 'Home Loan',\n    date: 'Wed, 13 May',\n    amount: '$2,700',\n    accentColor: '#ef4444',\n  },\n];\n\ninterface CardProps {\n  children: React.ReactNode;\n  updatePosition: () => void;\n}\n\nconst MAX_DRAG = 150;\n\nfunction Card({ children, updatePosition }: CardProps) {\n  const x = useMotionValue(0);\n  const y = useMotionValue(0);\n\n  function handleDragEnd(_: unknown, info: PanInfo) {\n    if (\n      Math.abs(info.offset.x) > MAX_DRAG ||\n      Math.abs(info.offset.y) > MAX_DRAG\n    ) {\n      updatePosition();\n    } else {\n      x.set(0);\n      y.set(0);\n    }\n  }\n\n  return (\n    <motion.div\n      style={{ x, y }}\n      drag\n      dragConstraints={{ top: 0, right: 0, bottom: 0, left: 0 }}\n      dragElastic={0.6}\n      whileTap={{ cursor: 'grabbing' }}\n      onDragEnd={handleDragEnd}\n      className=\"absolute inset-0 cursor-grab\"\n    >\n      {children}\n    </motion.div>\n  );\n}\n\nexport default function SwipeableStackCards() {\n  const [cards, setCards] = useState<CardData[]>(INITIAL_CARDS);\n\n  const updatePosition = (id: number) => {\n    setCards((prev) => {\n      const newCards = [...prev];\n      const index = newCards.findIndex((card) => card.id === id);\n      const [card] = newCards.splice(index, 1);\n      newCards.unshift(card);\n      return newCards;\n    });\n  };\n\n  return (\n    <div className=\"theme-injected  flex min-h-screen items-center justify-center font-sans\">\n      <div className=\"relative h-[300px] w-[300px]\">\n        {cards.map((card, index) => (\n          <Card key={card.id} updatePosition={() => updatePosition(card.id)}>\n            <motion.div\n              style={{\n                borderRadius: '32px',\n                transformOrigin: '0% 100%',\n              }}\n              animate={{\n                rotateZ: -(cards.length - index - 1) * 10,\n                scale: 1 + index * 0.1 - cards.length * 0.1,\n              }}\n              initial={false}\n              transition={{ type: 'spring', bounce: 0.1, duration: 0.5 }}\n              className=\"border-border bg-card text-card-foreground flex size-full flex-col overflow-hidden rounded-[32px] border p-2 shadow-[0px_0px_0px_1px_hsl(var(--border)/0.5),0px_1px_2px_-1px_hsl(var(--foreground)/0.08),0px_2px_4px_0px_hsl(var(--foreground)/0.06)]\"\n            >\n              <div className=\"pointer-events-none box-border flex h-full flex-1 flex-col p-4 select-none\">\n                <p className=\"text-muted-foreground text-lg font-normal tracking-wide\">\n                  {card.label}\n                </p>\n\n                <p\n                  className=\"text-2xl leading-tight font-bold\"\n                  style={{ color: card.accentColor }}\n                >\n                  {card.date}\n                </p>\n\n                <p className=\"text-foreground text-xl font-semibold\">\n                  {card.amount}\n                </p>\n\n                <div className=\"flex-1\" />\n\n                <div\n                  className=\"pointer-events-auto\"\n                  onClick={(e) => e.stopPropagation()}\n                />\n              </div>\n\n              <button className=\"bg-primary text-primary-foreground w-full cursor-pointer rounded-full border-none py-4 text-base font-semibold tracking-wide\">\n                Pay Now\n              </button>\n            </motion.div>\n          </Card>\n        ))}\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "run-action-button",
      "type": "registry:component",
      "title": "Run Action Button",
      "description": "An animated action button that executes a sequence of steps with smooth visual transitions.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/run-action-button.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { Zap } from 'lucide-react';\nimport { HiBadgeCheck } from 'react-icons/hi';\nimport { IoCloseSharp } from 'react-icons/io5';\nimport { FaInbox } from 'react-icons/fa6';\nimport { RiBubbleChartFill } from 'react-icons/ri';\nimport { BsFileTextFill, BsSendFill, BsTagFill } from 'react-icons/bs';\nimport { TbClockHour12Filled } from 'react-icons/tb';\n\n\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n\nconst spring: Transition = {\n  type: 'spring',\n  stiffness: 260,\n  damping: 22,\n  mass: 0.8,\n};\nconst DEFAULT_STEPS = [\n  { id: 1, label: 'Importing Survey Data', icon: FaInbox },\n  { id: 2, label: 'Refining Responses', icon: RiBubbleChartFill },\n  { id: 3, label: 'Labelling Responses', icon: BsTagFill },\n  { id: 4, label: 'Analyzing Sentiment', icon: TbClockHour12Filled },\n  { id: 5, label: 'Creating Reports', icon: BsFileTextFill },\n  { id: 6, label: 'Sharing Survey Report', icon: BsSendFill },\n];\n\ntype StepItem = {\n  id: number;\n  label: string;\n  icon: React.ComponentType<any>;\n};\n\ntype RunActionButtonProps = {\n  steps?: StepItem[];\n};\n\nexport function RunActionButton({\n  steps = DEFAULT_STEPS,\n}: RunActionButtonProps) {\n  const [status, setStatus] = useState<'idle' | 'running' | 'done'>('idle');\n  const [currentStep, setCurrentStep] = useState(0);\n\n  const startAction = () => {\n    setStatus('running');\n    setCurrentStep(0);\n  };\n\n  const reset = () => {\n    setStatus('idle');\n    setCurrentStep(0);\n  };\n\n  useEffect(() => {\n    if (status !== 'running') return;\n\n    const interval = setInterval(() => {\n      setCurrentStep((prev) => {\n        if (prev < steps.length - 1) return prev + 1;\n        setStatus('done');\n        return prev;\n      });\n    }, 1200);\n\n    return () => clearInterval(interval);\n  }, [status, steps.length]);\n\n\n\n  const widths = {\n    idle: 180,\n    running: 360,\n    done: 200,\n  };\n\n  return (\n    <div className=\"flex items-center justify-center\">\n      <motion.div\n        initial={{ width: 180 }}\n        animate={{ width: widths[status] }}\n        transition={spring}\n        className={`relative flex h-[64px] items-center justify-between overflow-hidden rounded-full ${status === 'running'\n            ? 'border-2 border-dashed border-[#D6D6DD] dark:border-white/20'\n            : 'border-2 border-transparent'\n          } `}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {status === 'idle' && (\n            <motion.button\n              key=\"idle\"\n              onClick={startAction}\n              initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              transition={spring}\n              className=\"flex flex-1 items-center gap-2 rounded-full bg-[#F4F4F9] px-5 py-3 whitespace-nowrap dark:bg-zinc-800\"\n            >\n              <Zap className=\"h-6 w-6 text-[#26262B] dark:text-zinc-100\" />\n\n              <AnimatedText\n                text=\"Run Action\"\n                className=\"text-[18px] font-medium text-[#26262B] dark:text-zinc-100\"\n              />\n            </motion.button>\n          )}\n\n          {status === 'running' && (\n            <motion.div\n              key=\"running\"\n              initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              transition={spring}\n              className=\"flex flex-1 items-center justify-between gap-3 px-4 whitespace-nowrap\"\n            >\n              <div className=\"flex items-center gap-2\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    key={currentStep}\n                    initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                    transition={spring}\n                  >\n                    {React.createElement(steps[currentStep].icon, {\n                      className: 'w-6 h-6 text-[#28272A]  dark:text-zinc-100',\n                    })}\n                  </motion.div>\n                </AnimatePresence>\n                <AnimatedText\n                  text={steps[currentStep].label}\n                  className=\"text-[18px] font-bold text-[#28272A]  dark:text-zinc-100\"\n                />\n              </div>\n\n              <motion.button\n                onClick={reset}\n                initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                transition={{ ...spring, delay: 0.15 }}\n                className=\"ml-1 rounded-full bg-[#D6D5E2] dark:bg-white p-1.5\"\n              >\n                <IoCloseSharp className=\"h-4 w-4 text-white dark:text-black\" />\n              </motion.button>\n            </motion.div>\n          )}\n\n          {status === 'done' && (\n            <motion.button\n              key=\"done\"\n              onClick={reset}\n              initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              transition={spring}\n              className=\"flex flex-1 items-center gap-2 rounded-full bg-[#EAF9EA] dark:bg-green-200 px-5 py-3 whitespace-nowrap\"\n            >\n              <HiBadgeCheck className=\"h-6 w-6 text-[#22c55e]\" />\n\n              <AnimatedText\n                text=\"Action Done\"\n                className=\"text-[18px] font-bold text-[#22c55e]\"\n              />\n            </motion.button>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "run-action-button-base",
      "type": "registry:component",
      "title": "Run Action Button (base)",
      "description": "Theme-ready base variant of An animated action button that executes a sequence of steps with smooth visual transitions..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/run-action-button.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, type Transition } from 'motion/react';\nimport { Zap } from 'lucide-react';\nimport { HiBadgeCheck } from 'react-icons/hi';\nimport { IoCloseSharp } from 'react-icons/io5';\nimport { FaInbox } from 'react-icons/fa6';\nimport { RiBubbleChartFill } from 'react-icons/ri';\nimport { BsFileTextFill, BsSendFill, BsTagFill } from 'react-icons/bs';\nimport { TbClockHour12Filled } from 'react-icons/tb';\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n\nconst spring: Transition = {\n  type: 'spring',\n  stiffness: 260,\n  damping: 22,\n  mass: 0.8,\n};\n\nconst DEFAULT_STEPS = [\n  { id: 1, label: 'Importing Survey Data', icon: FaInbox },\n  { id: 2, label: 'Refining Responses', icon: RiBubbleChartFill },\n  { id: 3, label: 'Labelling Responses', icon: BsTagFill },\n  { id: 4, label: 'Analyzing Sentiment', icon: TbClockHour12Filled },\n  { id: 5, label: 'Creating Reports', icon: BsFileTextFill },\n  { id: 6, label: 'Sharing Survey Report', icon: BsSendFill },\n];\n\ntype StepItem = {\n  id: number;\n  label: string;\n  icon: React.ComponentType<any>;\n};\n\ntype RunActionButtonProps = {\n  steps?: StepItem[];\n};\n\nexport function RunActionButton({\n  steps = DEFAULT_STEPS,\n}: RunActionButtonProps) {\n  const [status, setStatus] = useState<'idle' | 'running' | 'done'>('idle');\n  const [currentStep, setCurrentStep] = useState(0);\n\n  const startAction = () => {\n    setStatus('running');\n    setCurrentStep(0);\n  };\n\n  const reset = () => {\n    setStatus('idle');\n    setCurrentStep(0);\n  };\n\n  useEffect(() => {\n    if (status !== 'running') return;\n\n    const interval = setInterval(() => {\n      setCurrentStep((prev) => {\n        if (prev < steps.length - 1) return prev + 1;\n        setStatus('done');\n        return prev;\n      });\n    }, 1200);\n\n    return () => clearInterval(interval);\n  }, [status, steps.length]);\n\n  const widths = {\n    idle: 180,\n    running: 360,\n    done: 200,\n  };\n\n  return (\n    <div className=\"theme-injected flex items-center justify-center\">\n      <motion.div\n        initial={{ width: 180 }}\n        animate={{ width: widths[status] }}\n        transition={spring}\n        className={`relative flex h-[64px] items-center justify-between overflow-hidden rounded-lg ${\n          status === 'running'\n            ? 'border-border border-2 border-dashed'\n            : 'border-2 border-transparent'\n        } `}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {status === 'idle' && (\n            <motion.button\n              key=\"idle\"\n              onClick={startAction}\n              initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              transition={spring}\n              className=\"bg-muted flex flex-1 items-center gap-2 rounded-lg px-5 py-3 whitespace-nowrap\"\n            >\n              <Zap className=\"text-foreground h-6 w-6\" />\n\n              <AnimatedText\n                text=\"Run Action\"\n                className=\"text-foreground text-[18px] font-medium\"\n              />\n            </motion.button>\n          )}\n\n          {status === 'running' && (\n            <motion.div\n              key=\"running\"\n              initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              transition={spring}\n              className=\"flex flex-1 items-center justify-between gap-3 px-4 whitespace-nowrap\"\n            >\n              <div className=\"flex items-center gap-2\">\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    key={currentStep}\n                    initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                    animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                    exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                    transition={spring}\n                  >\n                    {React.createElement(steps[currentStep].icon, {\n                      className: 'w-6 h-6 text-foreground',\n                    })}\n                  </motion.div>\n                </AnimatePresence>\n                <AnimatedText\n                  text={steps[currentStep].label}\n                  className=\"text-foreground text-[18px] font-bold\"\n                />\n              </div>\n\n              <motion.button\n                onClick={reset}\n                initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                transition={{ ...spring, delay: 0.15 }}\n                className=\"bg-secondary ml-1 rounded-lg p-1.5\"\n              >\n                <IoCloseSharp className=\"text-secondary-foreground h-4 w-4\" />\n              </motion.button>\n            </motion.div>\n          )}\n\n          {status === 'done' && (\n            <motion.button\n              key=\"done\"\n              onClick={reset}\n              initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n              transition={spring}\n              className=\"bg-accent flex flex-1 items-center gap-2 rounded-lg px-5 py-3 whitespace-nowrap\"\n            >\n              <HiBadgeCheck className=\"text-accent-foreground h-6 w-6\" />\n\n              <AnimatedText\n                text=\"Action Done\"\n                className=\"text-accent-foreground text-[18px] font-bold\"\n              />\n            </motion.button>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "run-widget",
      "type": "registry:component",
      "title": "Run Widget",
      "description": "An animated run widget that dynamically displays distance with smooth number transitions",
      "dependencies": [
        "@number-flow/react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/run-widget.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, useMotionValue, useMotionValueEvent } from 'motion/react';\nimport { HiOutlineArrowUpRight } from 'react-icons/hi2';\nimport { FaRunning } from 'react-icons/fa';\nimport NumberFlow from '@number-flow/react';\n\nconst TICK_GAP = 12;\n\nexport const RunWidget = () => {\n  const x = useMotionValue(-96);\n\n  const [miles, setMiles] = useState(() => {\n    const initial = Math.abs(-96) / (TICK_GAP * 10);\n    return Math.round(initial * 10) / 10;\n  });\n\n  useMotionValueEvent(x, 'change', (latest) => {\n    if (typeof latest !== 'number') return;\n\n    const calculated = Math.abs(latest) / (TICK_GAP * 10);\n\n    if (!Number.isFinite(calculated)) return;\n\n    const rounded = Math.round(calculated * 10) / 10;\n\n    setMiles((prev) => {\n      if (prev === rounded) return prev;\n      return rounded;\n    });\n  });\n\n  return (\n    <div className=\"relative flex h-[320px] w-[320px] flex-col justify-between overflow-hidden rounded-[42px] border-2 border-[#E7E5E1] bg-[#FEFEFE] p-[7px] shadow-lg dark:border-white/5 dark:bg-[#1C1C1C]\">\n      <div className=\"flex items-start justify-between px-3 py-3\">\n        <div className=\"flex flex-col justify-center\">\n          <div className=\"relative -ml-2 flex h-[76px] w-[180px] items-center overflow-hidden\">\n            <NumberFlow\n              value={miles}\n              format={{\n                minimumFractionDigits: 1,\n                maximumFractionDigits: 1,\n              }}\n              className=\"font-sans text-[84px] leading-none font-bold text-[#282828] tabular-nums dark:text-white\"\n              style={{\n                fontVariantNumeric: 'tabular-nums',\n                lineHeight: '1',\n              }}\n            />\n          </div>\n\n          <span className=\"mt-2 text-[24px] font-medium text-[#8C8C8A] dark:text-gray-500\">\n            miles\n          </span>\n        </div>\n\n        <button className=\"shrink-0 rounded-xl bg-[#8D8C85] p-2.5 text-white hover:bg-[#8F8D8B]/80 dark:bg-[#3A3A38] dark:hover:bg-[#4A4A48]\">\n          <HiOutlineArrowUpRight size={34} strokeWidth={3} />\n        </button>\n      </div>\n\n      <div className=\"relative -mx-8 flex h-24 items-center justify-center\">\n        <div className=\"absolute left-1/2 z-10 h-12 w-[4px] -translate-x-1/2 rounded-full bg-[#595753] dark:bg-white\" />\n\n        <motion.div\n          drag=\"x\"\n          dragConstraints={{ right: 0, left: -1200 }}\n          dragElastic={0.05}\n          style={{ x, left: '50%' }}\n          transition={{ type: 'spring', stiffness: 450, damping: 35 }}\n          className=\"absolute left-1/2 flex cursor-grab items-center active:cursor-grabbing\"\n        >\n          <div className=\"flex items-center gap-[12px]\">\n            {[...Array(200)].map((_, i) => (\n              <div\n                key={i}\n                className=\"h-9 w-1 flex-shrink-0 rounded-full bg-[#DFDDDC] dark:bg-white/20\"\n              />\n            ))}\n          </div>\n        </motion.div>\n      </div>\n\n      <button className=\"mt-3 flex w-full items-center justify-center gap-2 rounded-[8px] rounded-b-[32px] bg-[#F0ECE6] py-[18px] text-[22px] font-semibold text-[#2A2620] hover:bg-[#e9e4dc] dark:bg-white/10 dark:text-white dark:hover:bg-white/20\">\n        <FaRunning size={28} />\n        Begin Run\n      </button>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "run-widget-base",
      "type": "registry:component",
      "title": "Run Widget (base)",
      "description": "Theme-ready base variant of An animated run widget that dynamically displays distance with smooth number transitions.",
      "dependencies": [
        "@number-flow/react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/run-widget.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, useMotionValue, useMotionValueEvent } from 'motion/react';\nimport { HiOutlineArrowUpRight } from 'react-icons/hi2';\nimport { FaRunning } from 'react-icons/fa';\nimport NumberFlow from '@number-flow/react';\n\nconst TICK_GAP = 12;\n\nexport const RunWidget = () => {\n  const x = useMotionValue(-96);\n\n  const [miles, setMiles] = useState(() => {\n    const initial = Math.abs(-96) / (TICK_GAP * 10);\n    return Math.round(initial * 10) / 10;\n  });\n\n  useMotionValueEvent(x, 'change', (latest) => {\n    if (typeof latest !== 'number') return;\n\n    const calculated = Math.abs(latest) / (TICK_GAP * 10);\n\n    if (!Number.isFinite(calculated)) return;\n\n    const rounded = Math.round(calculated * 10) / 10;\n\n    setMiles((prev) => {\n      if (prev === rounded) return prev;\n      return rounded;\n    });\n  });\n\n  return (\n    <div className=\"border-border theme-injected bg-card relative flex h-[320px] w-[320px] flex-col justify-between overflow-hidden rounded-lg border-2 p-[7px] shadow-lg\">\n      <div className=\"flex items-start justify-between px-3 py-3\">\n        <div className=\"flex flex-col justify-center\">\n          <div className=\"relative -ml-2 flex h-[76px] w-[180px] items-center overflow-hidden\">\n            <NumberFlow\n              value={miles}\n              format={{\n                minimumFractionDigits: 1,\n                maximumFractionDigits: 1,\n              }}\n              className=\"text-foreground font-sans text-[84px] leading-none font-bold tabular-nums\"\n              style={{\n                fontVariantNumeric: 'tabular-nums',\n                lineHeight: '1',\n              }}\n            />\n          </div>\n\n          <span className=\"text-muted-foreground mt-2 text-[24px] font-medium\">\n            miles\n          </span>\n        </div>\n\n        <button className=\"bg-secondary text-secondary-foreground shrink-0 rounded-lg p-2.5 hover:opacity-80\">\n          <HiOutlineArrowUpRight size={34} strokeWidth={3} />\n        </button>\n      </div>\n\n      <div className=\"relative -mx-8 flex h-24 items-center justify-center\">\n        <div className=\"bg-foreground absolute left-1/2 z-10 h-12 w-[4px] -translate-x-1/2 rounded-lg\" />\n\n        <motion.div\n          drag=\"x\"\n          dragConstraints={{ right: 0, left: -1200 }}\n          dragElastic={0.05}\n          style={{ x, left: '50%' }}\n          transition={{ type: 'spring', stiffness: 450, damping: 35 }}\n          className=\"absolute left-1/2 flex cursor-grab items-center active:cursor-grabbing\"\n        >\n          <div className=\"flex items-center gap-[12px]\">\n            {[...Array(200)].map((_, i) => (\n              <div\n                key={i}\n                className=\"bg-foreground/20 h-9 w-1 flex-shrink-0 rounded-lg\"\n              />\n            ))}\n          </div>\n        </motion.div>\n      </div>\n\n      <button className=\"bg-accent text-accent-foreground mt-3 flex w-full items-center justify-center gap-2 rounded-lg py-[18px] text-[22px] font-semibold hover:opacity-90\">\n        <FaRunning size={28} />\n        Begin Run\n      </button>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "save-toggle",
      "type": "registry:component",
      "title": "Save Toggle",
      "description": "An animated save toggle button that smoothly transitions between multiple states.",
      "dependencies": [
        "motion",
        "next-themes",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/save-toggle.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { BsCheckCircleFill } from 'react-icons/bs';\nimport { cn } from '@/lib/utils';\nimport { useTheme } from 'next-themes';\n\ntype ButtonStatus = 'idle' | 'loading' | 'success' | 'saved';\ntype Size = 'sm' | 'md' | 'lg';\n\nconst SIZE_CONFIG = {\n  sm: {\n    height: 52,\n    circleWidth: 52,\n    idleWidth: 108,\n    savedWidth: 128,\n    text: 'text-[18px]',\n    icon: 'text-2xl',\n    spinner: 'w-7 h-7',\n    gap: 'gap-2',\n    padding: 'px-4',\n  },\n  md: {\n    height: 56,\n    circleWidth: 56,\n    idleWidth: 120,\n    savedWidth: 140,\n    text: 'text-[20px]',\n    icon: 'text-3xl',\n    spinner: 'w-8 h-8',\n    gap: 'gap-3',\n    padding: 'px-5',\n  },\n  lg: {\n    height: 68,\n    circleWidth: 68,\n    idleWidth: 144,\n    savedWidth: 168,\n    text: 'text-[22px]',\n    icon: 'text-[28px]',\n    spinner: 'w-9 h-9',\n    gap: 'gap-4',\n    padding: 'px-5',\n  },\n};\n\ninterface SaveToggleProps {\n  size?: Size;\n  idleText?: string;\n  savedText?: string;\n  loadingDuration?: number;\n  successDuration?: number;\n  onStatusChange?: (status: ButtonStatus) => void;\n}\n\nexport const SaveToggle: React.FC<SaveToggleProps> = ({\n  size = 'md',\n  idleText = 'Save',\n  savedText = 'Saved',\n  loadingDuration = 1000,\n  successDuration = 800,\n  onStatusChange,\n}) => {\n  const [status, setStatus] = useState<ButtonStatus>('idle');\n  const { theme } = useTheme();\n\n  const cfg = SIZE_CONFIG[size];\n\n  const stableWidth = Math.max(cfg.idleWidth, cfg.savedWidth);\n\n  useEffect(() => {\n    onStatusChange?.(status);\n  }, [status, onStatusChange]);\n\n  const handleClick = () => {\n    if (status === 'idle') {\n      setStatus('loading');\n\n      setTimeout(() => {\n        setStatus('success');\n\n        setTimeout(() => {\n          setStatus('saved');\n        }, successDuration);\n      }, loadingDuration);\n    } else if (status === 'saved') {\n      setStatus('idle');\n    }\n  };\n\n  const isCircle = status === 'loading' || status === 'success';\n\n  const getBackgroundColor = () => {\n    if (status === 'loading' || status === 'success') {\n      return theme === 'dark' ? '#ffffff' : '#18181b';\n    }\n    if (status === 'saved') {\n      return theme === 'dark' ? '#27272a' : '#ffffff';\n    }\n    return theme === 'dark' ? '#27272a' : '#E8E7E0';\n  };\n\n  const getBorderColor = () => {\n    if (status === 'saved') {\n      return theme === 'dark' ? '#ffffff10' : '#00000030';\n    }\n    return 'transparent';\n  };\n\n  const getCheckColor = () => {\n    if (status === 'success') {\n      return theme === 'dark' ? '#27272a' : '#ffffff';\n    }\n    return theme === 'dark' ? '#a1a1aa' : '#27272a';\n  };\n\n  return (\n    <div className=\"flex items-center justify-center p-10\">\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          stiffness: 400,\n          damping: 30,\n          mass: 1,\n        }}\n      >\n        <motion.button\n          onClick={handleClick}\n          initial={false}\n          animate={{\n            width: isCircle ? cfg.circleWidth : stableWidth,\n            height: cfg.height,\n            backgroundColor: getBackgroundColor(),\n          }}\n          style={{\n            borderWidth: status === 'saved' ? '2px' : '0',\n            borderColor: getBorderColor(),\n          }}\n          transition={{\n            type: 'spring',\n            stiffness: 200,\n            damping: 15,\n            mass: 1.2,\n            backgroundColor: {\n              duration: 0.2,\n            },\n          }}\n          className={cn(\n            'relative z-0 flex cursor-pointer items-center justify-center overflow-hidden rounded-full select-none focus:outline-none active:scale-[0.97]',\n          )}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {status === 'idle' && (\n              <motion.span\n                key=\"idle\"\n                initial={{ opacity: 0, y: 15 }}\n                animate={{ opacity: 1, y: 0 }}\n                exit={{ opacity: 0, y: -15, x: -20 }}\n                className={`absolute inset-0 flex items-center justify-center font-bold tracking-tight ${cfg.text} text-[#2C2A26] dark:text-zinc-200`}\n              >\n                {idleText}\n              </motion.span>\n            )}\n\n            {status === 'loading' && (\n              <motion.div\n                key=\"loading\"\n                initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                className=\"absolute inset-0 flex items-center justify-center\"\n              >\n                <motion.svg\n                  viewBox=\"0 0 26 26\"\n                  className={cfg.spinner}\n                  animate={{ rotate: 360 }}\n                  transition={{\n                    repeat: Infinity,\n                    duration: 0.7,\n                    ease: 'linear',\n                  }}\n                >\n                  <circle\n                    cx=\"13\"\n                    cy=\"13\"\n                    r=\"10\"\n                    stroke={theme === 'dark' ? '#52525b' : '#D0CCC6'}\n                    strokeWidth=\"3\"\n                    fill=\"none\"\n                  />\n                  <path\n                    d=\"M13 3 A10 10 0 0 1 23 13\"\n                    stroke={theme === 'dark' ? '#a1a1aa' : 'white'}\n                    strokeWidth=\"3\"\n                    strokeLinecap=\"round\"\n                    fill=\"none\"\n                  />\n                </motion.svg>\n              </motion.div>\n            )}\n\n            {(status === 'success' || status === 'saved') && (\n              <motion.div\n                key=\"check-state\"\n                layout\n                initial={\n                  status === 'success'\n                    ? { opacity: 0, scale: 0.5, filter: 'blur(4px)' }\n                    : { opacity: 1 }\n                }\n                animate={\n                  status === 'success'\n                    ? { opacity: 1, scale: 1.15, filter: 'blur(0px)' }\n                    : { opacity: 1, scale: 1, y: 0 }\n                }\n                exit={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                className={`absolute inset-0 flex items-center justify-center ${status === 'saved' ? `${cfg.gap} ${cfg.padding}` : ''\n                  }`}\n              >\n                <motion.div\n                  layout\n                  animate={{\n                    color: getCheckColor(),\n                  }}\n                >\n                  <BsCheckCircleFill className={`${cfg.icon} z-20`} />\n                </motion.div>\n\n                <AnimatePresence mode=\"popLayout\">\n                  {status === 'saved' && (\n                    <motion.span\n                      initial={{ opacity: 0, x: -10 }}\n                      animate={{ opacity: 1, x: 0 }}\n                      exit={{ opacity: 0 }}\n                      transition={{ delay: 0.1 }}\n                      className={`font-bold tracking-tight whitespace-nowrap ${cfg.text} z-20 text-zinc-900 dark:text-zinc-400`}\n                    >\n                      {savedText}\n                    </motion.span>\n                  )}\n                </AnimatePresence>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.button>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "save-toggle-base",
      "type": "registry:component",
      "title": "Save Toggle (base)",
      "description": "Theme-ready base variant of An animated save toggle button that smoothly transitions between multiple states..",
      "dependencies": [
        "motion",
        "next-themes",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/save-toggle.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { BsCheckCircleFill } from 'react-icons/bs';\nimport { cn } from '@/lib/utils';\nimport { useTheme } from 'next-themes';\n\ntype ButtonStatus = 'idle' | 'loading' | 'success' | 'saved';\ntype Size = 'sm' | 'md' | 'lg';\n\nconst SIZE_CONFIG = {\n  sm: {\n    height: 52,\n    circleWidth: 52,\n    idleWidth: 108,\n    savedWidth: 128,\n    text: 'text-[18px]',\n    icon: 'text-2xl',\n    spinner: 'w-7 h-7',\n    gap: 'gap-2',\n    padding: 'px-4',\n  },\n  md: {\n    height: 56,\n    circleWidth: 56,\n    idleWidth: 120,\n    savedWidth: 140,\n    text: 'text-[20px]',\n    icon: 'text-3xl',\n    spinner: 'w-8 h-8',\n    gap: 'gap-3',\n    padding: 'px-5',\n  },\n  lg: {\n    height: 68,\n    circleWidth: 68,\n    idleWidth: 144,\n    savedWidth: 168,\n    text: 'text-[22px]',\n    icon: 'text-[28px]',\n    spinner: 'w-9 h-9',\n    gap: 'gap-4',\n    padding: 'px-5',\n  },\n};\n\ninterface SaveToggleProps {\n  size?: Size;\n  idleText?: string;\n  savedText?: string;\n  loadingDuration?: number;\n  successDuration?: number;\n  onStatusChange?: (status: ButtonStatus) => void;\n}\n\nexport const SaveToggle: React.FC<SaveToggleProps> = ({\n  size = 'md',\n  idleText = 'Save',\n  savedText = 'Saved',\n  loadingDuration = 1000,\n  successDuration = 800,\n  onStatusChange,\n}) => {\n  const [status, setStatus] = useState<ButtonStatus>('idle');\n  const { theme } = useTheme();\n\n  const cfg = SIZE_CONFIG[size];\n\n  const stableWidth = Math.max(cfg.idleWidth, cfg.savedWidth);\n\n  useEffect(() => {\n    onStatusChange?.(status);\n  }, [status, onStatusChange]);\n\n  const handleClick = () => {\n    if (status === 'idle') {\n      setStatus('loading');\n\n      setTimeout(() => {\n        setStatus('success');\n\n        setTimeout(() => {\n          setStatus('saved');\n        }, successDuration);\n      }, loadingDuration);\n    } else if (status === 'saved') {\n      setStatus('idle');\n    }\n  };\n\n  const isCircle = status === 'loading' || status === 'success';\n\n  const getBackgroundColor = () => {\n    if (status === 'loading' || status === 'success') {\n      return theme === 'dark' ? 'bg-secondary' : 'bg-secondary';\n    }\n    if (status === 'saved') {\n      return theme === 'dark' ? 'bg-card' : 'bg-card';\n    }\n    return theme === 'dark' ? 'bg-primary' : 'bg-primary';\n  };\n\n  const getBorderColor = () => {\n    if (status === 'saved') {\n      return theme === 'dark' ? 'border-muted' : 'border-muted';\n    }\n    return 'border-border';\n  };\n\n  const getCheckColor = () => {\n    if (status === 'success') {\n      return theme === 'dark' ? 'text-primary' : 'text-primary';\n    }\n    return theme === 'dark' ? 'text-muted-foreground' : 'text-muted-foreground';\n  };\n\n  return (\n    <div className=\"theme-injected flex items-center justify-center p-10\">\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          stiffness: 400,\n          damping: 30,\n          mass: 1,\n        }}\n      >\n        <motion.button\n          onClick={handleClick}\n          initial={false}\n          animate={{\n            width: isCircle ? cfg.circleWidth : stableWidth,\n            height: cfg.height,\n          }}\n          style={{\n            borderWidth: status === 'saved' ? '2px' : '1px',\n          }}\n          transition={{\n            type: 'spring',\n            stiffness: 200,\n            damping: 15,\n            mass: 1.2,\n            backgroundColor: {\n              duration: 0.2,\n            },\n          }}\n          className={cn(\n            'relative z-0 flex cursor-pointer items-center justify-center overflow-hidden rounded-lg select-none focus:outline-none active:scale-[0.97]',\n            getBackgroundColor(),\n            getBorderColor(),\n          )}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {status === 'idle' && (\n              <motion.span\n                key=\"idle\"\n                initial={{ opacity: 0, y: 15 }}\n                animate={{ opacity: 1, y: 0 }}\n                exit={{ opacity: 0, y: -15, x: -20 }}\n                className={`absolute inset-0 flex items-center justify-center font-bold tracking-tight ${cfg.text} text-primary-foreground`}\n              >\n                {idleText}\n              </motion.span>\n            )}\n\n            {status === 'loading' && (\n              <motion.div\n                key=\"loading\"\n                initial={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0.8, filter: 'blur(4px)' }}\n                className=\"absolute inset-0 flex items-center justify-center\"\n              >\n                <motion.svg\n                  viewBox=\"0 0 26 26\"\n                  className={cfg.spinner}\n                  animate={{ rotate: 360 }}\n                  transition={{\n                    repeat: Infinity,\n                    duration: 0.7,\n                    ease: 'linear',\n                  }}\n                >\n                  <circle\n                    cx=\"13\"\n                    cy=\"13\"\n                    r=\"10\"\n                    className='stroke-primary'\n                    strokeWidth=\"3\"\n                    fill=\"none\"\n                  />\n                  <path\n                    d=\"M13 3 A10 10 0 0 1 23 13\"\n                    strokeWidth=\"3\"\n                    strokeLinecap=\"round\"\n                    fill=\"none\"\n                    className='stroke-muted'\n                  />\n                </motion.svg>\n              </motion.div>\n            )}\n\n            {(status === 'success' || status === 'saved') && (\n              <motion.div\n                key=\"check-state\"\n                layout\n                initial={\n                  status === 'success'\n                    ? { opacity: 0, scale: 0.5, filter: 'blur(4px)' }\n                    : { opacity: 1 }\n                }\n                animate={\n                  status === 'success'\n                    ? { opacity: 1, scale: 1.15, filter: 'blur(0px)' }\n                    : { opacity: 1, scale: 1, y: 0 }\n                }\n                exit={{ opacity: 0, y: 15, filter: 'blur(4px)' }}\n                className={`absolute inset-0 flex items-center justify-center ${\n                  status === 'saved' ? `${cfg.gap} ${cfg.padding}` : ''\n                }`}\n              >\n                <motion.div\n                  layout\n                  className={cn(getCheckColor())}\n                >\n                  <BsCheckCircleFill className={`${cfg.icon} z-20`} />\n                </motion.div>\n\n                <AnimatePresence mode=\"popLayout\">\n                  {status === 'saved' && (\n                    <motion.span\n                      initial={{ opacity: 0, x: -10 }}\n                      animate={{ opacity: 1, x: 0 }}\n                      exit={{ opacity: 0 }}\n                      transition={{ delay: 0.1 }}\n                      className={`font-bold tracking-tight whitespace-nowrap ${cfg.text} text-muted-foreground z-20`}\n                    >\n                      {savedText}\n                    </motion.span>\n                  )}\n                </AnimatePresence>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.button>\n      </MotionConfig>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "schedule-button",
      "type": "registry:component",
      "title": "Schedule Button",
      "description": "A tactile, interactive button for scheduling posts with date and time selection.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/schedule-button.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Cancel01Icon } from '@hugeicons/core-free-icons';\nimport { FaAngleDown } from 'react-icons/fa6';\nimport { BsCalendar3 } from 'react-icons/bs';\n\nexport const ScheduleButton = () => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <MotionConfig transition={{ type: 'spring', bounce: 0.25, duration: 0.7 }}>\n      <div className=\"relative flex flex-col items-center\">\n        <motion.div\n          layout\n          className=\"relative z-10 w-80 border bg-white dark:border-neutral-800 dark:bg-neutral-900 shadow-sm\"\n          style={{ borderRadius: 25 }}\n        >\n          <div className=\"p-2\">\n            <textarea\n              placeholder=\"What's up?\"\n              className=\"w-full resize-none bg-transparent p-2 text-neutral-800 outline-none dark:text-neutral-100 selection:bg-black/20 dark:selection:bg-white/20 font-sans\"\n            />\n          </div>\n\n          <div className=\"relative pt-10\">\n            <AnimatePresence>\n              {isOpen && (\n                <motion.div\n                  className=\"absolute top-0 size-full px-2\"\n                  initial={{ opacity: 0, y: 40, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, y: 40, filter: 'blur(4px)' }}\n                >\n                  <div className=\"relative flex h-10 items-center justify-between overflow-hidden rounded-full border bg-neutral-100 dark:border-neutral-700 dark:bg-neutral-800\">\n                    <div className=\"flex flex-1 items-center justify-between overflow-hidden rounded-full bg-white dark:bg-neutral-900\">\n                      <div className=\"flex h-10 w-full items-center justify-between border-r p-2 px-3 text-sm text-neutral-600 dark:border-neutral-700 dark:text-neutral-300\">\n                        <span className=\"truncate\">25, Dec 2024</span>\n                        <FaAngleDown\n                          size={12}\n                          className=\"shrink-0 text-neutral-400\"\n                        />\n                      </div>\n                      <div className=\"flex h-10 w-full items-center justify-between p-2 px-3 text-sm text-neutral-600 dark:text-neutral-300\">\n                        <span className=\"truncate\">9:30 AM</span>\n                        <FaAngleDown\n                          size={12}\n                          className=\"shrink-0 text-neutral-400\"\n                        />\n                      </div>\n                    </div>\n                    <button\n                      title=\"close\"\n                      className=\"flex h-10 w-10 shrink-0 items-center justify-center text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-200\"\n                      onClick={() => setIsOpen(false)}\n                    >\n                      <HugeiconsIcon\n                        icon={Cancel01Icon}\n                        size={18}\n                        strokeWidth={2}\n                      />\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n\n            <div className=\"relative flex items-center justify-end gap-2 p-2 px-3\">\n              <motion.button\n                layoutId=\"container\"\n                className=\"flex size-10 items-center justify-center border bg-neutral-100 text-neutral-500 dark:border-neutral-700 dark:bg-neutral-800\"\n                style={{\n                  borderRadius: 25,\n                  opacity: isOpen ? 0 : 1,\n                }}\n                onClick={() => setIsOpen(true)}\n              >\n                <motion.span\n                  layout=\"size\"\n                  initial={{\n                    opacity: 0,\n                  }}\n                  animate={{\n                    opacity: 1,\n                  }}\n                  exit={{\n                    opacity: 0,\n                  }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0,\n                    delay: 0.175,\n                    duration: 0.4,\n                  }}\n                >\n                  <BsCalendar3 size={18} />\n                </motion.span>\n              </motion.button>\n\n              <motion.button\n                className=\"origin-right bg-neutral-900 px-8 py-2 text-white dark:bg-neutral-100 dark:text-neutral-900 font-semibold\"\n                style={{ borderRadius: 25 }}\n                animate={{\n                  scale: isOpen ? 0.9 : 1,\n                  transition: {\n                    type: 'spring',\n                    bounce: 0,\n                    delay: isOpen ? 0.175 : 0,\n                    duration: 0.4,\n                  },\n                }}\n              >\n                Post\n              </motion.button>\n\n              <AnimatePresence>\n                {isOpen && (\n                  <div className=\"absolute inset-0 z-20 flex size-full items-center justify-center p-2 px-3\">\n                    <motion.button\n                      layoutId=\"container\"\n                      className=\"h-10 w-full bg-neutral-900 px-8 py-2 text-white dark:bg-neutral-100 dark:text-neutral-900 font-semibold\"\n                      style={{ borderRadius: 25 }}\n                    >\n                      <motion.span\n                        layout=\"size\"\n                        initial={{\n                          opacity: 0,\n                        }}\n                        animate={{\n                          opacity: 1,\n                        }}\n                        exit={{\n                          opacity: 0,\n                        }}\n                        transition={{\n                          type: 'spring',\n                          bounce: 0,\n                          delay: 0.175,\n                          duration: 0.4,\n                        }}\n                      >\n                        Schedule\n                      </motion.span>\n                    </motion.button>\n                  </div>\n                )}\n              </AnimatePresence>\n            </div>\n          </div>\n        </motion.div>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              layout\n              initial={{ opacity: 0, y: -40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -40 }}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.5,\n                delay: 0.1,\n              }}\n              className=\"relative z-0 mt-[-25px] flex w-80 items-center justify-center rounded-b-[25px] border border-t-0 bg-neutral-100 p-3 pt-8 pb-3 dark:border-neutral-700 dark:bg-neutral-800\"\n            >\n              <p className=\"text-[11px] font-medium text-neutral-500 text-center\">\n                Will be posted on 25 Dec 2024 at 9:30 AM\n              </p>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "schedule-button-base",
      "type": "registry:component",
      "title": "Schedule Button (base)",
      "description": "Theme-ready base variant of A tactile, interactive button for scheduling posts with date and time selection..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/schedule-button.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Cancel01Icon } from '@hugeicons/core-free-icons';\nimport { FaAngleDown } from 'react-icons/fa6';\nimport { BsCalendar3 } from 'react-icons/bs';\n\nexport const ScheduleButton = () => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <MotionConfig transition={{ type: 'spring', bounce: 0.25, duration: 0.7 }}>\n      <div className=\"relative flex flex-col items-center theme-injected font-sans\">\n        <motion.div\n          layout\n          className=\"relative z-10 w-80 border border-border bg-card rounded-3xl shadow-sm\"\n          // style={{ borderRadius: 25 }}\n        >\n          <div className=\"p-2\">\n            <textarea\n              placeholder=\"What's up?\"\n              className=\"w-full resize-none bg-transparent p-2 font-sans text-foreground outline-none selection:bg-black/20 dark:selection:bg-white/20\"\n            />\n          </div>\n\n          <div className=\"relative pt-10\">\n            <AnimatePresence>\n              {isOpen && (\n                <motion.div\n                  className=\"absolute top-0 size-full px-2\"\n                  initial={{ opacity: 0, y: 40, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, y: 40, filter: 'blur(4px)' }}\n                >\n                  <div className=\"relative flex h-10 items-center justify-between overflow-hidden rounded-3xl border border-border bg-muted\">\n                    <div className=\"flex flex-1 items-center justify-between overflow-hidden rounded-3xl bg-card\">\n                      <div className=\"flex h-10 w-full items-center justify-between border-r border-border p-2 px-3 font-sans text-sm text-muted-foreground\">\n                        <span className=\"truncate\">25, Dec 2024</span>\n                        <FaAngleDown\n                          size={12}\n                          className=\"shrink-0 text-muted-foreground\"\n                        />\n                      </div>\n                      <div className=\"flex h-10 w-full items-center justify-between p-2 px-3 font-sans text-sm text-muted-foreground\">\n                        <span className=\"truncate\">9:30 AM</span>\n                        <FaAngleDown\n                          size={12}\n                          className=\"shrink-0 text-muted-foreground\"\n                        />\n                      </div>\n                    </div>\n                    <button\n                      title=\"close\"\n                      className=\"flex h-10 w-10 shrink-0 items-center justify-center text-muted-foreground hover:text-foreground\"\n                      onClick={() => setIsOpen(false)}\n                    >\n                      <HugeiconsIcon\n                        icon={Cancel01Icon}\n                        size={18}\n                        strokeWidth={2}\n                      />\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n\n            <div className=\"relative flex items-center justify-end gap-2 p-2 px-3\">\n              <motion.button\n                layoutId=\"container\"\n                className=\"flex size-10 items-center justify-center border border-border bg-muted text-muted-foreground\"\n                style={{\n                  borderRadius: 25,\n                  opacity: isOpen ? 0 : 1,\n                }}\n                onClick={() => setIsOpen(true)}\n              >\n                <motion.span\n                  layout=\"size\"\n                  initial={{\n                    opacity: 0,\n                  }}\n                  animate={{\n                    opacity: 1,\n                  }}\n                  exit={{\n                    opacity: 0,\n                  }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0,\n                    delay: 0.175,\n                    duration: 0.4,\n                  }}\n                >\n                  <BsCalendar3 size={18} />\n                </motion.span>\n              </motion.button>\n\n              <motion.button\n                className=\"origin-right font-sans font-semibold bg-primary px-8 py-2 text-primary-foreground \"\n                style={{ borderRadius: 25 }}\n                animate={{\n                  scale: isOpen ? 0.9 : 1,\n                  transition: {\n                    type: 'spring',\n                    bounce: 0,\n                    delay: isOpen ? 0.175 : 0,\n                    duration: 0.4,\n                  },\n                }}\n              >\n                Post\n              </motion.button>\n\n              <AnimatePresence>\n                {isOpen && (\n                  <div className=\"absolute inset-0 z-20 flex size-full items-center justify-center p-2 px-3\">\n                    <motion.button\n                      layoutId=\"container\"\n                      className=\"h-10 w-full font-sans font-semibold bg-primary px-8 py-2 text-primary-foreground\"\n                      style={{ borderRadius: 25 }}\n                    >\n                      <motion.span\n                        layout=\"size\"\n                        initial={{\n                          opacity: 0,\n                        }}\n                        animate={{\n                          opacity: 1,\n                        }}\n                        exit={{\n                          opacity: 0,\n                        }}\n                        transition={{\n                          type: 'spring',\n                          bounce: 0,\n                          delay: 0.175,\n                          duration: 0.4,\n                        }}\n                      >\n                        Schedule\n                      </motion.span>\n                    </motion.button>\n                  </div>\n                )}\n              </AnimatePresence>\n            </div>\n          </div>\n        </motion.div>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              layout\n              initial={{ opacity: 0, y: -40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -40 }}\n              transition={{\n                type: 'spring',\n                bounce: 0,\n                duration: 0.5,\n                delay: 0.1,\n              }}\n              className=\"relative z-0 mt-[-25px] flex w-80 items-center justify-center rounded-b-3xl border border-border border-t-0 bg-muted p-3 pt-8 pb-3\"\n            >\n              <p className=\"font-sans text-[11px] font-medium text-muted-foreground text-center\">\n                Will be posted on 25 Dec 2024 at 9:30 AM\n              </p>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "schedule-date",
      "type": "registry:component",
      "title": "Schedule Date",
      "description": "Date scheduling dialog with calendar selection, time picking, and confirmations.",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/schedule-date.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight, Check, ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface DateRange {\n  start: Date | null;\n  end: Date | null;\n}\n\ninterface ScheduleDateProps {\n  onApply?: (range: DateRange) => void;\n  onCancel?: () => void;\n}\n\nconst PRESETS = [\n  { label: 'Today', id: 'today' },\n  { label: 'Yesterday', id: 'yesterday' },\n  { label: 'Last 7 Days', id: '7d' },\n  { label: 'Last 30 Days', id: '30d' },\n  { label: 'Last 365 Days', id: '365d' },\n  { label: 'Week to Date', id: 'wtd' },\n  { label: 'Month to Date', id: 'mtd' },\n  { label: 'Year to Date', id: 'ytd' },\n  { label: 'Custom', id: 'custom' },\n];\n\nconst DAYS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nexport const ScheduleDate: React.FC<ScheduleDateProps> = ({\n  onApply,\n  onCancel,\n}) => {\n  const [selectedPreset, setSelectedPreset] = useState('custom');\n  const [viewDate, setViewDate] = useState(new Date(2025, 9, 1));\n  const [range, setRange] = useState<DateRange>({\n    start: new Date(2025, 9, 15),\n    end: new Date(2025, 9, 25),\n  });\n\n  const handleDateClick = (date: Date) => {\n    if (!range.start || (range.start && range.end)) {\n      setRange({ start: date, end: null });\n      setSelectedPreset('custom');\n    } else {\n      if (date < range.start) {\n        setRange({ start: date, end: range.start });\n      } else {\n        setRange({ ...range, end: date });\n      }\n    }\n  };\n\n  const renderMonthGrid = (\n    monthDate: Date,\n    showLeftNav = false,\n    showRightNav = false,\n  ) => {\n    const year = monthDate.getFullYear();\n    const month = monthDate.getMonth();\n    const firstDay = (new Date(year, month, 1).getDay() + 6) % 7;\n    const daysInMonth = new Date(year, month + 1, 0).getDate();\n    const monthName = monthDate.toLocaleString('default', {\n      month: 'long',\n      year: 'numeric',\n    });\n\n    return (\n      <div className=\"min-w-56 flex-1\">\n        <div className=\"mb-4 flex items-center justify-between px-2\">\n          {showLeftNav ? (\n            <button\n              title=\"left\"\n              onClick={() => setViewDate(new Date(year, month - 1, 1))}\n              className=\"p-1 text-neutral-400 transition-colors hover:text-neutral-900 dark:text-neutral-500 dark:hover:text-white\"\n            >\n              <ChevronLeft size={18} strokeWidth={2.5} />\n            </button>\n          ) : (\n            <div className=\"w-7\" />\n          )}\n          <span className=\"text-[13px] font-semibold tracking-tight text-neutral-800 dark:text-neutral-200\">\n            {monthName}\n          </span>\n          {showRightNav ? (\n            <button\n              title=\"right\"\n              onClick={() => setViewDate(new Date(year, month + 1, 1))}\n              className=\"p-1 text-neutral-400 transition-colors hover:text-neutral-900 dark:text-neutral-500 dark:hover:text-white\"\n            >\n              <ChevronRight size={18} strokeWidth={2.5} />\n            </button>\n          ) : (\n            <div className=\"w-7\" />\n          )}\n        </div>\n\n        <div className=\"relative grid grid-cols-7 gap-y-1 text-center\">\n          {DAYS.map((d) => (\n            <span\n              key={d}\n              className=\"mb-2 text-[11px] font-medium text-neutral-400 dark:text-neutral-600\"\n            >\n              {d}\n            </span>\n          ))}\n          {Array.from({ length: firstDay }).map((_, i) => (\n            <div key={`empty-${i}`} className=\"h-8\" />\n          ))}\n          {Array.from({ length: daysInMonth }).map((_, i) => {\n            const day = i + 1;\n            const currentDayDate = new Date(year, month, day);\n            const isStart =\n              range.start?.toDateString() === currentDayDate.toDateString();\n            const isEnd =\n              range.end?.toDateString() === currentDayDate.toDateString();\n            const isInRange =\n              range.start &&\n              range.end &&\n              currentDayDate > range.start &&\n              currentDayDate < range.end;\n\n            return (\n              <div\n                key={day}\n                onClick={() => handleDateClick(currentDayDate)}\n                className=\"group relative flex h-8 cursor-pointer items-center justify-center\"\n              >\n                {(isInRange || isStart || isEnd) && (\n                  <div\n                    className={cn(\n                      'absolute z-0 h-8',\n                      'border-y border-neutral-200 bg-neutral-100 dark:border-white/5 dark:bg-neutral-900/50',\n                      isStart ? 'left-1/2 rounded-l-lg border-l' : 'left-0',\n                      isEnd ? 'right-1/2 rounded-r-lg border-r' : 'right-0',\n                      isInRange && !isStart && !isEnd ? 'w-full' : '',\n                    )}\n                  />\n                )}\n                {isStart || isEnd ? (\n                  <div className=\"absolute z-10 flex h-8 w-8 flex-col items-center justify-center rounded-lg border border-neutral-600 bg-linear-to-b from-neutral-700 to-neutral-900 shadow-xl dark:border-white/10 dark:from-neutral-800 dark:to-indigo-900/50\">\n                    <span className=\"text-xs font-bold text-white\">{day}</span>\n                    <motion.div\n                      layoutId=\"activeThumb\"\n                      className=\"absolute bottom-1 h-[1.5px] w-2 rounded-full bg-blue-400 shadow-[0_0_8px_#6366f1] dark:bg-indigo-500\"\n                    />\n                  </div>\n                ) : (\n                  <span\n                    className={cn(\n                      'relative z-10 text-[13px] font-normal transition-colors',\n                      isInRange\n                        ? 'text-neutral-900 dark:text-white'\n                        : 'text-neutral-600 group-hover:text-neutral-900 dark:text-neutral-400 dark:group-hover:text-white',\n                    )}\n                  >\n                    {day}\n                  </span>\n                )}\n              </div>\n            );\n          })}\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"mx-auto flex w-full max-w-195 flex-col overflow-hidden rounded-2xl border border-neutral-200 bg-white font-sans text-neutral-600 shadow-2xl dark:border-neutral-800 dark:bg-black dark:text-neutral-400\">\n      <div className=\"flex min-h-0 w-full flex-col md:min-h-105 md:flex-row\">\n        {/* Sidebar */}\n        <aside className=\"no-scrollbar flex w-full shrink-0 flex-row gap-1 overflow-x-auto border-b border-neutral-200 bg-neutral-50/50 py-3 md:w-52 md:flex-col md:border-r md:border-b-0 dark:border-neutral-800 dark:bg-neutral-950/20\">\n          {PRESETS.map((preset, idx) => (\n            <React.Fragment key={preset.id}>\n              {[2, 5, 8].includes(idx) && (\n                <div className=\"mx-3 my-1 hidden h-px bg-neutral-200 md:block dark:bg-neutral-800\" />\n              )}\n              <button\n                onClick={() => setSelectedPreset(preset.id)}\n                className={cn(\n                  'group mx-2 flex items-center justify-between rounded-lg px-3 py-1.5 text-xs whitespace-nowrap transition-all duration-200 md:mx-3 md:text-[13px]',\n                  selectedPreset === preset.id\n                    ? preset.id === 'custom'\n                      ? 'border border-neutral-300 bg-linear-to-b from-neutral-100 to-neutral-200 font-medium text-neutral-900 dark:border-neutral-700 dark:from-neutral-800 dark:to-neutral-900 dark:text-white'\n                      : 'bg-neutral-200 text-neutral-900 dark:bg-neutral-800 dark:text-white'\n                    : 'hover:bg-neutral-100 hover:text-neutral-900 dark:hover:bg-neutral-900 dark:hover:text-neutral-200',\n                )}\n              >\n                <span>{preset.label}</span>\n                {selectedPreset === preset.id && preset.id === 'custom' && (\n                  <motion.div\n                    initial={{ scale: 0 }}\n                    animate={{ scale: 1 }}\n                    className=\"ml-2\"\n                  >\n                    <Check size={12} />\n                  </motion.div>\n                )}\n              </button>\n            </React.Fragment>\n          ))}\n        </aside>\n        {/* Main Content */}\n        <main className=\"flex min-w-0 flex-1 flex-col gap-6 overflow-hidden bg-white p-4 md:p-5 dark:bg-transparent\">\n          {/* Inputs Area */}\n          <div className=\"grid shrink-0 grid-cols-1 gap-3 sm:grid-cols-2\">\n            <DateInput label=\"Start date\" date={range.start} />\n            <DateInput label=\"End date\" date={range.end} />\n          </div>\n\n          {/* Calendars Container */}\n          <div className=\"no-scrollbar flex snap-x snap-mandatory flex-row items-start gap-8 overflow-x-auto overflow-y-hidden pb-2 lg:gap-10\">\n            {/* Left Month */}\n            <div className=\"shrink-0 snap-start\">\n              {renderMonthGrid(viewDate, true, false)}\n            </div>\n\n            {/* Divider */}\n            <div className=\"hidden h-40 w-px shrink-0 self-center bg-neutral-200 opacity-50 lg:block dark:bg-neutral-800\" />\n\n            {/* Right Month */}\n            <div className=\"shrink-0 snap-start\">\n              {renderMonthGrid(\n                new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1),\n                false,\n                true,\n              )}\n            </div>\n          </div>\n        </main>\n      </div>\n\n      <footer className=\"flex h-16 shrink-0 items-center justify-end gap-3 border-t border-neutral-200 bg-neutral-50/50 px-6 dark:border-neutral-800 dark:bg-neutral-950/50\">\n        <button\n          onClick={onCancel}\n          className=\"rounded-full border border-neutral-200 px-4 py-1.5 text-xs font-medium text-neutral-500 transition-colors hover:bg-neutral-100 hover:text-neutral-900 dark:border-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-900 dark:hover:text-white\"\n        >\n          Cancel\n        </button>\n        <button\n          onClick={() => onApply?.(range)}\n          className=\"rounded-full bg-neutral-900 px-5 py-1.5 text-xs font-semibold text-white shadow-lg transition-all hover:opacity-90 active:scale-95 dark:bg-neutral-100 dark:text-black\"\n        >\n          Apply\n        </button>\n      </footer>\n    </div>\n  );\n};\n\nconst DateInput = ({ label, date }: { label: string; date: Date | null }) => (\n  <div className=\"flex flex-1 flex-col gap-1.5\">\n    <label className=\"ml-1 text-[12px] font-normal text-neutral-400 dark:text-neutral-500\">\n      {label}\n    </label>\n    <div className=\"flex cursor-pointer items-center justify-between rounded-xl border border-neutral-200 bg-neutral-50 px-3 py-2 text-xs text-neutral-600 transition-colors hover:border-neutral-300 md:text-[13px] dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-300 dark:hover:border-neutral-700\">\n      <span>\n        {date\n          ? date.toLocaleDateString('en-US', {\n              month: 'short',\n              day: 'numeric',\n              year: 'numeric',\n            })\n          : 'Select Date'}\n      </span>\n      <ChevronDown\n        size={14}\n        className=\"text-neutral-400 dark:text-neutral-500\"\n      />\n    </div>\n  </div>\n);\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "schedule-date-base",
      "type": "registry:component",
      "title": "Schedule Date (base)",
      "description": "Theme-ready base variant of Date scheduling dialog with calendar selection, time picking, and confirmations..",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/schedule-date.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight, Check, ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface DateRange {\n  start: Date | null;\n  end: Date | null;\n}\n\ninterface ScheduleDateProps {\n  onApply?: (range: DateRange) => void;\n  onCancel?: () => void;\n}\n\nconst PRESETS = [\n  { label: 'Today', id: 'today' },\n  { label: 'Yesterday', id: 'yesterday' },\n  { label: 'Last 7 Days', id: '7d' },\n  { label: 'Last 30 Days', id: '30d' },\n  { label: 'Last 365 Days', id: '365d' },\n  { label: 'Week to Date', id: 'wtd' },\n  { label: 'Month to Date', id: 'mtd' },\n  { label: 'Year to Date', id: 'ytd' },\n  { label: 'Custom', id: 'custom' },\n];\n\nconst DAYS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nexport const ScheduleDate: React.FC<ScheduleDateProps> = ({\n  onApply,\n  onCancel,\n}) => {\n  const [selectedPreset, setSelectedPreset] = useState('custom');\n  const [viewDate, setViewDate] = useState(new Date(2025, 9, 1));\n  const [range, setRange] = useState<DateRange>({\n    start: new Date(2025, 9, 15),\n    end: new Date(2025, 9, 25),\n  });\n\n  const handleDateClick = (date: Date) => {\n    if (!range.start || (range.start && range.end)) {\n      setRange({ start: date, end: null });\n      setSelectedPreset('custom');\n    } else {\n      if (date < range.start) {\n        setRange({ start: date, end: range.start });\n      } else {\n        setRange({ ...range, end: date });\n      }\n    }\n  };\n\n  const renderMonthGrid = (\n    monthDate: Date,\n    showLeftNav = false,\n    showRightNav = false,\n  ) => {\n    const year = monthDate.getFullYear();\n    const month = monthDate.getMonth();\n    const firstDay = (new Date(year, month, 1).getDay() + 6) % 7;\n    const daysInMonth = new Date(year, month + 1, 0).getDate();\n    const monthName = monthDate.toLocaleString('default', {\n      month: 'long',\n      year: 'numeric',\n    });\n\n    return (\n      <div className=\"min-w-56 flex-1\">\n        <div className=\"mb-4 flex items-center justify-between px-2\">\n          {showLeftNav ? (\n            <button\n              title=\"left\"\n              onClick={() => setViewDate(new Date(year, month - 1, 1))}\n              className=\"p-1 text-muted-foreground transition-colors hover:text-foreground\"\n            >\n              <ChevronLeft size={18} strokeWidth={2.5} />\n            </button>\n          ) : (\n            <div className=\"w-7\" />\n          )}\n          <span className=\"text-[13px] font-semibold tracking-tight text-foreground\">\n            {monthName}\n          </span>\n          {showRightNav ? (\n            <button\n              title=\"right\"\n              onClick={() => setViewDate(new Date(year, month + 1, 1))}\n              className=\"p-1 text-muted-foreground transition-colors hover:text-foreground\"\n            >\n              <ChevronRight size={18} strokeWidth={2.5} />\n            </button>\n          ) : (\n            <div className=\"w-7\" />\n          )}\n        </div>\n\n        <div className=\"relative grid grid-cols-7 gap-y-1 text-center\">\n          {DAYS.map((d) => (\n            <span\n              key={d}\n              className=\"mb-2 text-[11px] font-medium text-muted-foreground\"\n            >\n              {d}\n            </span>\n          ))}\n          {Array.from({ length: firstDay }).map((_, i) => (\n            <div key={`empty-${i}`} className=\"h-8\" />\n          ))}\n          {Array.from({ length: daysInMonth }).map((_, i) => {\n            const day = i + 1;\n            const currentDayDate = new Date(year, month, day);\n            const isStart =\n              range.start?.toDateString() === currentDayDate.toDateString();\n            const isEnd =\n              range.end?.toDateString() === currentDayDate.toDateString();\n            const isInRange =\n              range.start &&\n              range.end &&\n              currentDayDate > range.start &&\n              currentDayDate < range.end;\n\n            return (\n              <div\n                key={day}\n                onClick={() => handleDateClick(currentDayDate)}\n                className=\"group relative flex h-8 cursor-pointer items-center justify-center\"\n              >\n                {(isInRange || isStart || isEnd) && (\n                  <div\n                    className={cn(\n                      'absolute z-0 h-8',\n                      'border-y border-border bg-muted',\n                      isStart ? 'left-1/2 rounded-lg border-l' : 'left-0',\n                      isEnd ? 'right-1/2 rounded-lg border-r' : 'right-0',\n                      isInRange && !isStart && !isEnd ? 'w-full' : '',\n                    )}\n                  />\n                )}\n                {isStart || isEnd ? (\n                  <div className=\"absolute z-10 flex h-8 w-8 flex-col items-center justify-center rounded-lg border border-border bg-foreground shadow-xl\">\n                    <span className=\"text-xs font-bold text-background\">\n                      {day}\n                    </span>\n                    <motion.div\n                      layoutId=\"activeThumb\"\n                      className=\"absolute bottom-1 h-[1.5px] w-2 rounded-lg bg-background shadow\"\n                    />\n                  </div>\n                ) : (\n                  <span\n                    className={cn(\n                      'relative z-10 text-[13px] font-normal transition-colors',\n                      isInRange\n                        ? 'text-foreground'\n                        : 'text-muted-foreground group-hover:text-foreground',\n                    )}\n                  >\n                    {day}\n                  </span>\n                )}\n              </div>\n            );\n          })}\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"theme-injected mx-auto flex w-full max-w-195 flex-col overflow-hidden rounded-lg border border-border bg-background font-sans text-muted-foreground shadow-2xl\">\n      <div className=\"flex min-h-0 w-full flex-col md:min-h-105 md:flex-row\">\n        <aside className=\"no-scrollbar flex w-full shrink-0 flex-row gap-1 overflow-x-auto border-b border-border bg-muted py-3 md:w-52 md:flex-col md:border-r md:border-b-0\">\n          {PRESETS.map((preset, idx) => (\n            <React.Fragment key={preset.id}>\n              {[2, 5, 8].includes(idx) && (\n                <div className=\"mx-3 my-1 hidden h-px bg-border md:block\" />\n              )}\n              <button\n                onClick={() => setSelectedPreset(preset.id)}\n                className={cn(\n                  'group mx-2 flex items-center justify-between rounded-lg px-3 py-1.5 text-xs whitespace-nowrap transition-all duration-200 md:mx-3 md:text-[13px]',\n                  selectedPreset === preset.id\n                    ? preset.id === 'custom'\n                      ? 'border border-border bg-muted font-medium text-foreground'\n                      : 'bg-muted text-foreground'\n                    : 'hover:bg-muted hover:text-foreground',\n                )}\n              >\n                <span>{preset.label}</span>\n                {selectedPreset === preset.id && preset.id === 'custom' && (\n                  <motion.div\n                    initial={{ scale: 0 }}\n                    animate={{ scale: 1 }}\n                    className=\"ml-2\"\n                  >\n                    <Check size={12} />\n                  </motion.div>\n                )}\n              </button>\n            </React.Fragment>\n          ))}\n        </aside>\n\n        <main className=\"flex min-w-0 flex-1 flex-col gap-6 overflow-hidden bg-background p-4 md:p-5\">\n          <div className=\"grid shrink-0 grid-cols-1 gap-3 sm:grid-cols-2\">\n            <DateInput label=\"Start date\" date={range.start} />\n            <DateInput label=\"End date\" date={range.end} />\n          </div>\n\n          <div className=\"no-scrollbar flex snap-x snap-mandatory flex-row items-start gap-8 overflow-x-auto overflow-y-hidden pb-2 lg:gap-10\">\n            <div className=\"shrink-0 snap-start\">\n              {renderMonthGrid(viewDate, true, false)}\n            </div>\n\n            <div className=\"hidden h-40 w-px shrink-0 self-center bg-border opacity-50 lg:block\" />\n\n            <div className=\"shrink-0 snap-start\">\n              {renderMonthGrid(\n                new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1),\n                false,\n                true,\n              )}\n            </div>\n          </div>\n        </main>\n      </div>\n\n      <footer className=\"flex h-16 shrink-0 items-center justify-end gap-3 border-t border-border bg-muted px-6\">\n        <button\n          onClick={onCancel}\n          className=\"rounded-lg border border-border px-4 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n        >\n          Cancel\n        </button>\n        <button\n          onClick={() => onApply?.(range)}\n          className=\"rounded-lg bg-foreground px-5 py-1.5 text-xs font-semibold text-background shadow-lg transition-all hover:opacity-90 active:scale-95\"\n        >\n          Apply\n        </button>\n      </footer>\n    </div>\n  );\n};\n\nconst DateInput = ({ label, date }: { label: string; date: Date | null }) => (\n  <div className=\"flex flex-1 flex-col gap-1.5\">\n    <label className=\"ml-1 text-[12px] font-normal text-muted-foreground\">\n      {label}\n    </label>\n    <div className=\"flex cursor-pointer items-center justify-between rounded-lg border border-border bg-muted px-3 py-2 text-xs text-muted-foreground transition-colors hover:border-border md:text-[13px]\">\n      <span>\n        {date\n          ? date.toLocaleDateString('en-US', {\n              month: 'short',\n              day: 'numeric',\n              year: 'numeric',\n            })\n          : 'Select Date'}\n      </span>\n      <ChevronDown size={14} className=\"text-muted-foreground\" />\n    </div>\n  </div>\n);"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scroll-island",
      "type": "registry:component",
      "title": "Scroll Island",
      "description": "Floating scroll island providing progress, actions, and contextual indicators.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/scroll-island.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { AnimatePresence, motion, MotionConfig } from 'motion/react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport useMeasure from 'react-use-measure';\n\nexport interface Topic {\n  id: string;\n  title: string;\n  content: string;\n}\n\nexport interface ScrollIslandProps {\n  topics: Topic[];\n}\n\ndeclare module 'react' {\n  interface StyleHTMLAttributes<T> extends React.HTMLAttributes<T> {\n    jsx?: boolean;\n    global?: boolean;\n  }\n}\n\nexport function ScrollIsland({ topics }: ScrollIslandProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [scrollProgress, setScrollProgress] = useState(0);\n  const [activeTopicId, setActiveTopicId] = useState<string | null>(null);\n  const [mounted, setMounted] = useState(false);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  const isScrollIslandPage =\n    typeof window !== 'undefined' &&\n    window.location.pathname === '/components/scroll-island';\n\n  const [isMobile, setIsMobile] = useState(false);\n\n  useEffect(() => {\n    const check = () => setIsMobile(window.innerWidth < 768);\n    check();\n    window.addEventListener('resize', check);\n    return () => window.removeEventListener('resize', check);\n  }, []);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setMounted(true));\n\n    const el = contentRef.current;\n    if (!el) return;\n\n    const handleScroll = () => {\n      const scrollTop = el.scrollTop;\n      const scrollHeight = el.scrollHeight - el.clientHeight;\n\n      if (scrollHeight > 0) {\n        const progress = (scrollTop / scrollHeight) * 100;\n        setScrollProgress(Math.min(100, Math.max(0, progress)));\n      }\n    };\n\n    el.addEventListener('scroll', handleScroll);\n    handleScroll();\n\n    return () => el.removeEventListener('scroll', handleScroll);\n  }, []);\n\n  const handleTopicClick = (id: string) => {\n    setActiveTopicId(id);\n    setTimeout(() => setActiveTopicId(null), 1800);\n    setIsOpen(false);\n  };\n\n  const islandUI = (\n    <>\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          bounce: 0.2,\n          duration: 0.7,\n        }}\n      >\n        <div\n          className=\"pointer-events-none fixed top-72 z-9999 flex justify-center pt-6 sm:top-32\"\n          style={{\n            left: isMobile ? '0' : isScrollIslandPage ? '28%' : '20%',\n            width: '100%',\n          }}\n        >\n          <motion.div\n            className={cn(\n              'pointer-events-auto flex flex-col items-center overflow-hidden border border-white/10 bg-neutral-900 shadow-2xl',\n            )}\n            initial={{\n              borderRadius: 32,\n            }}\n            animate={{\n              height: bounds.height > 0 ? bounds.height : 'auto',\n              width: isOpen ? 400 : 240,\n              borderRadius: isOpen ? 24 : 32,\n            }}\n          >\n            <div\n              ref={ref}\n              className={cn(\n                'flex flex-col items-center  px-4 w-full',\n                isOpen && '',\n              )}\n            >\n              <div\n                className=\"group flex h-13 w-full cursor-pointer items-center justify-between gap-8 select-none\"\n                onClick={() => setIsOpen(!isOpen)}\n              >\n                <div className=\"flex items-center gap-2\">\n                  <motion.div\n                    layout\n                    className=\"relative h-7 w-7 shrink-0 rounded-full\"\n                    style={{\n                      background: `conic-gradient(white ${scrollProgress}%, #333 0)`,\n                    }}\n                  >\n                    <div className=\"absolute inset-[2.5px] rounded-full bg-black\" />\n                    <div className=\"absolute inset-0 flex items-center justify-center\"></div>\n                  </motion.div>\n\n                  <motion.span\n                    layout\n                    className=\"text-lg font-medium text-white\"\n                  >\n                    Index\n                  </motion.span>\n\n                  <motion.div layout animate={{ rotate: isOpen ? 180 : 0 }}>\n                    <ChevronDown\n                      size={20}\n                      className=\"text-neutral-400 group-hover:text-white\"\n                    />\n                  </motion.div>\n                </div>\n\n                <motion.div\n                  layout\n                  className=\"flex items-center justify-center rounded-full bg-zinc-800 px-2.5 text-lg tabular-nums font-bold text-zinc-200\"\n                >\n                  {Math.round(scrollProgress)}%\n                </motion.div>\n              </div>\n\n              <AnimatePresence mode=\"popLayout\">\n                {isOpen && (\n                  <motion.div\n                    initial={{ opacity: 0 }}\n                    animate={{ opacity: 1 }}\n                    exit={{ opacity: 0 }}\n                    className=\"custom-scrollbar max-h-[60vh] w-full overflow-y-auto pt-2 pb-4\"\n                  >\n                    <div className=\"mx-2 mb-2 h-px bg-white/5\" />\n                    {topics.map((topic) => (\n                      <button\n                        key={topic.id}\n                        onClick={() => {\n                          document.getElementById(topic.id)?.scrollIntoView({\n                            behavior: 'smooth',\n                            block: 'center',\n                          });\n                          handleTopicClick(topic.id);\n                        }}\n                        className=\"w-full truncate rounded-xl py-2 text-left text-sm text-zinc-400 hover:text-white\"\n                      >\n                        {topic.title}\n                      </button>\n                    ))}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        </div>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"fixed inset-0 z-9998 bg-black/40 backdrop-blur-sm\"\n              onClick={() => setIsOpen(false)}\n            />\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </>\n  );\n\n  return (\n    <div className=\"relative w-full\">\n      <main\n        ref={contentRef}\n        className=\"px- mx-auto h-[calc(100vh-6rem)] max-w-4xl overflow-y-auto pt-32 pb-20\"\n      >\n        {topics.map((topic) => (\n          <div\n            key={topic.id}\n            id={topic.id}\n            className={`mb-20 scroll-mt-32 rounded-2xl p-2 transition-all duration-500 ${activeTopicId === topic.id\n                ? 'animate-flash bg-zinc-100 dark:bg-zinc-900'\n                : ''\n              }`}\n          >\n            <h4 className=\"mb-6 text-3xl font-bold text-zinc-900 dark:text-zinc-50\">\n              {topic.title}\n            </h4>\n            <p className=\"text-lg leading-relaxed text-zinc-600 dark:text-zinc-400\">\n              {topic.content}\n            </p>\n          </div>\n        ))}\n      </main>\n\n      {mounted && createPortal(islandUI, document.body)}\n\n      <style jsx global>{`\n        @keyframes flash {\n          0%,\n          100% {\n            background-color: transparent;\n          }\n          50% {\n            background-color: rgba(255, 255, 255, 0.05);\n          }\n        }\n        .animate-flash {\n          animation: flash 0.6s ease-in-out 3;\n        }\n        .custom-scrollbar::-webkit-scrollbar {\n          width: 3px;\n        }\n        .custom-scrollbar::-webkit-scrollbar-thumb {\n          background: #333;\n          border-radius: 10px;\n        }\n      `}</style>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scroll-island-base",
      "type": "registry:component",
      "title": "Scroll Island (base)",
      "description": "Theme-ready base variant of Floating scroll island providing progress, actions, and contextual indicators..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/scroll-island.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { AnimatePresence, motion, MotionConfig } from 'motion/react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport useMeasure from 'react-use-measure';\n\nexport interface Topic {\n  id: string;\n  title: string;\n  content: string;\n}\n\nexport interface ScrollIslandProps {\n  topics: Topic[];\n}\n\ndeclare module 'react' {\n  interface StyleHTMLAttributes<T> extends React.HTMLAttributes<T> {\n    jsx?: boolean;\n    global?: boolean;\n  }\n}\n\nexport function ScrollIsland({ topics }: ScrollIslandProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [scrollProgress, setScrollProgress] = useState(0);\n  const [activeTopicId, setActiveTopicId] = useState<string | null>(null);\n  const [mounted, setMounted] = useState(false);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  const isScrollIslandPage =\n    typeof window !== 'undefined' &&\n    window.location.pathname === '/components/scroll-island';\n\n  const [isMobile, setIsMobile] = useState(false);\n\n  useEffect(() => {\n    const check = () => setIsMobile(window.innerWidth < 768);\n    check();\n    window.addEventListener('resize', check);\n    return () => window.removeEventListener('resize', check);\n  }, []);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setMounted(true));\n\n    const el = contentRef.current;\n    if (!el) return;\n\n    const handleScroll = () => {\n      const scrollTop = el.scrollTop;\n      const scrollHeight = el.scrollHeight - el.clientHeight;\n\n      if (scrollHeight > 0) {\n        const progress = (scrollTop / scrollHeight) * 100;\n        setScrollProgress(Math.min(100, Math.max(0, progress)));\n      }\n    };\n\n    el.addEventListener('scroll', handleScroll);\n    handleScroll();\n\n    return () => el.removeEventListener('scroll', handleScroll);\n  }, []);\n\n  const handleTopicClick = (id: string) => {\n    setActiveTopicId(id);\n    setTimeout(() => setActiveTopicId(null), 1800);\n    setIsOpen(false);\n  };\n\n  const islandUI = (\n    <>\n      <MotionConfig\n        transition={{\n          type: 'spring',\n          bounce: 0.2,\n          duration: 0.7,\n        }}\n      >\n        <div\n          className=\"theme-injected pointer-events-none fixed top-72 z-9999 flex justify-center pt-6 sm:top-32\"\n          style={{\n            left: isMobile ? '0' : isScrollIslandPage ? '28%' : '20%',\n            width: '100%',\n          }}\n        >\n          <motion.div\n            className={cn(\n              'border-border bg-background rounded-lg pointer-events-auto flex flex-col items-center overflow-hidden border shadow-2xl',\n            )}\n          \n            animate={{\n              height: bounds.height > 0 ? bounds.height : 'auto',\n              width: isOpen ? 400 : 240,\n          \n            }}\n          >\n            <div\n              ref={ref}\n              className={cn('flex w-full flex-col items-center px-4')}\n            >\n              <div\n                className=\"group flex h-13 w-full cursor-pointer items-center justify-between gap-8 select-none\"\n                onClick={() => setIsOpen(!isOpen)}\n              >\n                <div className=\"flex items-center gap-2\">\n                  <motion.div\n                    layout\n                    className=\"relative h-7 w-7 shrink-0 rounded-lg\"\n                    style={{\n                      background: `conic-gradient(\n    var(--foreground) 0% ${scrollProgress}%,\n    color-mix(in oklch, var(--muted-foreground) 30%, transparent) ${scrollProgress}% 100%\n  )`,\n                    }}\n                  >\n                    <div className=\"bg-background absolute inset-[2.5px] rounded-lg\" />\n                  </motion.div>\n\n                  <motion.span\n                    layout\n                    className=\"text-foreground text-lg font-medium\"\n                  >\n                    Index\n                  </motion.span>\n\n                  <motion.div layout animate={{ rotate: isOpen ? 180 : 0 }}>\n                    <ChevronDown\n                      size={20}\n                      className=\"text-muted-foreground group-hover:text-foreground\"\n                    />\n                  </motion.div>\n                </div>\n\n                <motion.div\n                  layout\n                  className=\"bg-muted text-foreground flex items-center justify-center rounded-lg px-2.5 text-lg font-bold tabular-nums\"\n                >\n                  {Math.round(scrollProgress)}%\n                </motion.div>\n              </div>\n\n              <AnimatePresence mode=\"popLayout\">\n                {isOpen && (\n                  <motion.div\n                    initial={{ opacity: 0 }}\n                    animate={{ opacity: 1 }}\n                    exit={{ opacity: 0 }}\n                    className=\"custom-scrollbar max-h-[60vh] w-full overflow-y-auto pt-2 pb-4\"\n                  >\n                    <div className=\"bg-border mx-2 mb-2 h-px\" />\n                    {topics.map((topic) => (\n                      <button\n                        key={topic.id}\n                        onClick={() => {\n                          document.getElementById(topic.id)?.scrollIntoView({\n                            behavior: 'smooth',\n                            block: 'center',\n                          });\n                          handleTopicClick(topic.id);\n                        }}\n                        className=\"text-muted-foreground hover:text-foreground w-full truncate rounded-lg py-2 text-left text-sm\"\n                      >\n                        {topic.title}\n                      </button>\n                    ))}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        </div>\n\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"bg-background/40 fixed inset-0 z-9998 backdrop-blur-sm\"\n              onClick={() => setIsOpen(false)}\n            />\n          )}\n        </AnimatePresence>\n      </MotionConfig>\n    </>\n  );\n\n  return (\n    <div className=\"theme-injected relative w-full\">\n      <main\n        ref={contentRef}\n        className=\"px- mx-auto h-[calc(100vh-6rem)] max-w-4xl overflow-y-auto pt-32 pb-20\"\n      >\n        {topics.map((topic) => (\n          <div\n            key={topic.id}\n            id={topic.id}\n            className={`mb-20 scroll-mt-32 rounded-lg p-2 transition-all duration-500 ${\n              activeTopicId === topic.id ? 'animate-flash bg-muted' : ''\n            }`}\n          >\n            <h4 className=\"text-foreground mb-6 text-3xl font-bold\">\n              {topic.title}\n            </h4>\n            <p className=\"text-muted-foreground text-lg leading-relaxed\">\n              {topic.content}\n            </p>\n          </div>\n        ))}\n      </main>\n\n      {mounted && createPortal(islandUI, document.body)}\n\n      <style jsx global>{`\n        @keyframes flash {\n          0%,\n          100% {\n            background-color: transparent;\n          }\n          50% {\n            background-color: oklch(var(--muted) / 0.5);\n          }\n        }\n        .animate-flash {\n          animation: flash 0.6s ease-in-out 3;\n        }\n        .custom-scrollbar::-webkit-scrollbar {\n          width: 3px;\n        }\n        .custom-scrollbar::-webkit-scrollbar-thumb {\n          background: oklch(var(--muted-foreground));\n          border-radius: 10px;\n        }\n      `}</style>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scrub-slider",
      "type": "registry:component",
      "title": "Scrub Slider",
      "description": "An animated scrub slider that responds smoothly to drag and scrub interactions.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/scrub-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useRef, useState, useEffect, useCallback, type FC } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useSpring,\n  animate,\n  type Transition,\n} from 'motion/react';\n\ninterface ScrubSliderProps {\n  initialValue?: number;\n  tickCount?: number;\n}\n\ninterface AnimatedNumberProps {\n  value: number;\n}\n\nconst SPRING: Transition = {\n  stiffness: 200,\n  damping: 25,\n};\n\nconst AnimatedNumber: FC<AnimatedNumberProps> = ({ value }) => {\n  const [display, setDisplay] = useState(value);\n\n  useEffect(() => {\n    const controls = animate(display, value, {\n      duration: 0.2,\n      onUpdate(latest) {\n        setDisplay(Math.round(latest));\n      },\n    });\n\n    return controls.stop;\n  }, [value, display]);\n\n  return <>{display}</>;\n};\n\nexport const ScrubSlider: FC<ScrubSliderProps> = ({\n  initialValue = 0,\n  tickCount = 32,\n}) => {\n  const sliderRef = useRef<HTMLDivElement>(null);\n\n  const x = useMotionValue(0);\n  const smoothX = useSpring(x, SPRING);\n\n  const [value, setValue] = useState(initialValue);\n  const [isDragging, setIsDragging] = useState(false);\n  const [step, setStep] = useState(0);\n  const [sliderLeft, setSliderLeft] = useState(0);\n  const [sliderWidth, setSliderWidth] = useState(0);\n\n  const padding = 16;\n\n  useEffect(() => {\n    if (!sliderRef.current) return;\n\n    const measure = () => {\n      const rect = sliderRef.current!.getBoundingClientRect();\n\n      const width = rect.width - padding * 2;\n      const newStep = width / (tickCount - 1);\n\n      setSliderLeft(rect.left);\n      setSliderWidth(width);\n      setStep(newStep);\n\n      x.set(initialValue * newStep + padding);\n    };\n\n    measure();\n\n    const resizeObserver = new ResizeObserver(measure);\n    resizeObserver.observe(sliderRef.current);\n\n    return () => resizeObserver.disconnect();\n  }, [tickCount, initialValue, x]);\n\n  const updateValue = useCallback(\n    (clientX: number) => {\n      if (!step) return;\n\n      let posX = clientX - sliderLeft - padding;\n\n      posX = Math.max(0, Math.min(posX, sliderWidth));\n\n      const snappedIndex = Math.round(posX / step);\n      const snappedX = snappedIndex * step;\n\n      setValue(snappedIndex);\n      x.set(snappedX + padding);\n    },\n    [step, sliderLeft, sliderWidth, x],\n  );\n\n  useEffect(() => {\n    const move = (e: MouseEvent) => {\n      if (!isDragging) return;\n      updateValue(e.clientX);\n    };\n\n    const up = () => setIsDragging(false);\n\n    window.addEventListener('mousemove', move);\n    window.addEventListener('mouseup', up);\n\n    return () => {\n      window.removeEventListener('mousemove', move);\n      window.removeEventListener('mouseup', up);\n    };\n  }, [isDragging, updateValue]);\n\n  useEffect(() => {\n    const move = (e: TouchEvent) => {\n      if (!isDragging) return;\n      updateValue(e.touches[0].clientX);\n    };\n\n    const end = () => setIsDragging(false);\n\n    window.addEventListener('touchmove', move);\n    window.addEventListener('touchend', end);\n\n    return () => {\n      window.removeEventListener('touchmove', move);\n      window.removeEventListener('touchend', end);\n    };\n  }, [isDragging, updateValue]);\n\n  return (\n    <div className=\"relative w-full max-w-md select-none\">\n      <motion.div\n        style={{ left: smoothX }}\n        className=\"pointer-events-none absolute -top-12 z-30 -translate-x-1/2\"\n      >\n        <motion.div\n          animate={{\n            y: isDragging ? -4 : 0,\n            scale: isDragging ? 1.05 : 1,\n          }}\n          transition={SPRING}\n          className=\"rounded-xl bg-gray-900 px-3 py-1.5 text-2xl font-semibold text-white shadow-sm dark:bg-zinc-100 dark:text-zinc-900\"\n        >\n          <AnimatedNumber value={value} />\n          °C\n        </motion.div>\n      </motion.div>\n\n      <div\n        ref={sliderRef}\n        onMouseDown={(e) => {\n          setIsDragging(true);\n          updateValue(e.clientX);\n        }}\n        onTouchStart={(e) => {\n          setIsDragging(true);\n          updateValue(e.touches[0].clientX);\n        }}\n        className=\"relative h-24 cursor-pointer touch-none overflow-hidden rounded-3xl border border-gray-200 bg-white shadow-md dark:border-zinc-800 dark:bg-zinc-900\"\n      >\n        <div className=\"absolute inset-4\">\n          {Array.from({ length: tickCount }).map((_, i) => (\n            <div\n              key={i}\n              className=\"absolute top-0 bottom-0 w-1 -translate-x-1/2 rounded-full bg-gray-300 dark:bg-zinc-700\"\n              style={{\n                left: i * step,\n              }}\n            />\n          ))}\n        </div>\n\n        <motion.div\n          style={{ left: smoothX }}\n          animate={{\n            scaleY: isDragging ? 1.15 : 1,\n          }}\n          transition={SPRING}\n          className=\"absolute top-4 bottom-4 w-1 -translate-x-1/2 rounded-full bg-black dark:bg-white\"\n        />\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scrub-slider-base",
      "type": "registry:component",
      "title": "Scrub Slider (base)",
      "description": "Theme-ready base variant of An animated scrub slider that responds smoothly to drag and scrub interactions..",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/scrub-slider.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useRef, useState, useEffect, useCallback, type FC } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useSpring,\n  animate,\n  type Transition,\n} from 'motion/react';\n\ninterface ScrubSliderProps {\n  initialValue?: number;\n  tickCount?: number;\n}\n\ninterface AnimatedNumberProps {\n  value: number;\n}\n\nconst SPRING: Transition = {\n  stiffness: 200,\n  damping: 25,\n};\n\nconst AnimatedNumber: FC<AnimatedNumberProps> = ({ value }) => {\n  const [display, setDisplay] = useState(value);\n\n  useEffect(() => {\n    const controls = animate(display, value, {\n      duration: 0.2,\n      onUpdate(latest) {\n        setDisplay(Math.round(latest));\n      },\n    });\n\n    return controls.stop;\n  }, [value, display]);\n\n  return <>{display}</>;\n};\n\nexport const ScrubSlider: FC<ScrubSliderProps> = ({\n  initialValue = 0,\n  tickCount = 32,\n}) => {\n  const sliderRef = useRef<HTMLDivElement>(null);\n\n  const x = useMotionValue(0);\n  const smoothX = useSpring(x, SPRING);\n\n  const [value, setValue] = useState(initialValue);\n  const [isDragging, setIsDragging] = useState(false);\n  const [step, setStep] = useState(0);\n  const [sliderLeft, setSliderLeft] = useState(0);\n  const [sliderWidth, setSliderWidth] = useState(0);\n\n  const padding = 16;\n\n  useEffect(() => {\n    if (!sliderRef.current) return;\n\n    const measure = () => {\n      const rect = sliderRef.current!.getBoundingClientRect();\n\n      const width = rect.width - padding * 2;\n      const newStep = width / (tickCount - 1);\n\n      setSliderLeft(rect.left);\n      setSliderWidth(width);\n      setStep(newStep);\n\n      x.set(initialValue * newStep + padding);\n    };\n\n    measure();\n\n    const resizeObserver = new ResizeObserver(measure);\n    resizeObserver.observe(sliderRef.current);\n\n    return () => resizeObserver.disconnect();\n  }, [tickCount, initialValue, x]);\n\n  const updateValue = useCallback(\n    (clientX: number) => {\n      if (!step) return;\n\n      let posX = clientX - sliderLeft - padding;\n\n      posX = Math.max(0, Math.min(posX, sliderWidth));\n\n      const snappedIndex = Math.round(posX / step);\n      const snappedX = snappedIndex * step;\n\n      setValue(snappedIndex);\n      x.set(snappedX + padding);\n    },\n    [step, sliderLeft, sliderWidth, x],\n  );\n\n  useEffect(() => {\n    const move = (e: MouseEvent) => {\n      if (!isDragging) return;\n      updateValue(e.clientX);\n    };\n\n    const up = () => setIsDragging(false);\n\n    window.addEventListener('mousemove', move);\n    window.addEventListener('mouseup', up);\n\n    return () => {\n      window.removeEventListener('mousemove', move);\n      window.removeEventListener('mouseup', up);\n    };\n  }, [isDragging, updateValue]);\n\n  useEffect(() => {\n    const move = (e: TouchEvent) => {\n      if (!isDragging) return;\n      updateValue(e.touches[0].clientX);\n    };\n\n    const end = () => setIsDragging(false);\n\n    window.addEventListener('touchmove', move);\n    window.addEventListener('touchend', end);\n\n    return () => {\n      window.removeEventListener('touchmove', move);\n      window.removeEventListener('touchend', end);\n    };\n  }, [isDragging, updateValue]);\n\n  return (\n    <div className=\"theme-injected relative w-full max-w-md select-none\">\n      <motion.div\n        style={{ left: smoothX }}\n        className=\"pointer-events-none absolute -top-12 z-30 -translate-x-1/2\"\n      >\n        <motion.div\n          animate={{\n            y: isDragging ? -4 : 0,\n            scale: isDragging ? 1.05 : 1,\n          }}\n          transition={SPRING}\n          className=\"bg-foreground text-background rounded-lg px-3 py-1.5 text-2xl font-semibold shadow-sm\"\n        >\n          <AnimatedNumber value={value} />\n          °C\n        </motion.div>\n      </motion.div>\n\n      <div\n        ref={sliderRef}\n        onMouseDown={(e) => {\n          setIsDragging(true);\n          updateValue(e.clientX);\n        }}\n        onTouchStart={(e) => {\n          setIsDragging(true);\n          updateValue(e.touches[0].clientX);\n        }}\n        className=\"border-border bg-background relative h-24 cursor-pointer touch-none overflow-hidden rounded-lg border shadow-md\"\n      >\n        <div className=\"absolute inset-4\">\n          {Array.from({ length: tickCount }).map((_, i) => (\n            <div\n              key={i}\n              className=\"bg-muted-foreground/50 absolute top-0 bottom-0 w-1 -translate-x-1/2 rounded-lg\"\n              style={{\n                left: i * step,\n              }}\n            />\n          ))}\n        </div>\n\n        <motion.div\n          style={{ left: smoothX }}\n          animate={{\n            scaleY: isDragging ? 1.15 : 1,\n          }}\n          transition={SPRING}\n          className=\"bg-foreground absolute top-4 bottom-4 w-1 -translate-x-1/2 rounded-lg\"\n        />\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-ai-agent",
      "type": "registry:component",
      "title": "Select AI Agent",
      "description": "Choose an AI agent quickly with options and smooth feedback.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/select-ai-agent.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { ArrowRight, ChevronUp, ChevronDown } from 'lucide-react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  ChatGptIcon,\n  ClaudeIcon,\n  GoogleGeminiIcon,\n} from '@hugeicons/core-free-icons';\n\nexport interface AIAgent {\n  id: string;\n  name: string;\n  icon: React.ReactNode;\n}\n\ninterface SelectAIAgentProps {\n  agents?: AIAgent[];\n  onSendMessage?: (message: string, agentId: string) => void;\n  className?: string;\n}\n\nconst AGENTS = [\n  {\n    id: 'chatgpt',\n    name: 'Chatgpt',\n    icon: (\n      <HugeiconsIcon\n        icon={ChatGptIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 'gemini',\n    name: 'Gemini',\n    icon: (\n      <HugeiconsIcon\n        icon={GoogleGeminiIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 'claude',\n    name: 'Claude',\n    icon: (\n      <HugeiconsIcon\n        icon={ClaudeIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n];\n\nexport const SelectAIAgent: React.FC<SelectAIAgentProps> = ({\n  agents = AGENTS,\n  onSendMessage,\n  className = '',\n}) => {\n  const [selectedAgent, setSelectedAgent] = useState<AIAgent>(agents[0]);\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n  const [message, setMessage] = useState('');\n  const [appType, setAppType] = useState<'Web App' | 'Mobile App'>('Web App');\n\n  return (\n    <div\n      className={`flex w-full flex-col items-center justify-center p-4 antialiased select-none sm:p-6 ${className}`}\n    >\n      <div className=\"relative z-40 w-full max-w-[95%] sm:max-w-110\">\n        <LayoutGroup>\n          <AnimatePresence>\n            {isMenuOpen && (\n              <motion.div\n                initial={{ opacity: 0, y: 10, filter: 'blur(8px)' }}\n                animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, y: 20, filter: 'blur(8px)' }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 400,\n                  damping: 30,\n                  mass: 0.8,\n                }}\n                className=\"absolute -top-16 left-0 z-0 flex w-fit origin-bottom-left gap-1 rounded-full border-[1.6px] border-[#E8E7ED] bg-white/90 p-1.5 backdrop-blur-xl sm:gap-2 dark:border-white/10 dark:bg-neutral-900/95\"\n              >\n                {agents.map((agent) => (\n                  <button\n                    key={agent.id}\n                    onClick={() => {\n                      setSelectedAgent(agent);\n                      setIsMenuOpen(false);\n                    }}\n                    className={`flex h-10 w-10 shrink-0 items-center justify-center rounded-full transition-all active:scale-95 sm:h-11 sm:w-11 dark:brightness-150 ${\n                      selectedAgent.id === agent.id\n                        ? 'border-[1.8px] border-[#E9E8EB] bg-white shadow-sm dark:border-white/20 dark:bg-white'\n                        : 'text-neutral-500 hover:bg-neutral-50 dark:text-neutral-400 dark:hover:bg-white/5'\n                    }`}\n                  >\n                    <div className=\"scale-110 sm:scale-125\">{agent.icon}</div>\n                  </button>\n                ))}\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <motion.div\n            layout\n            className=\"rounded-[28px] border border-[#E8E7EF]/70 bg-neutral-100 p-4 shadow-sm transition-all sm:rounded-[36px] sm:p-5 dark:border-white/10 dark:bg-neutral-900\"\n          >\n            <div className=\"flex items-start gap-3 sm:gap-4\">\n              <motion.button\n                layoutId={`agent-${selectedAgent.id}`}\n                onClick={() => setIsMenuOpen(!isMenuOpen)}\n                className=\"mt-1 flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center\"\n              >\n                <div className=\"dark:brightness- scale-[1.4] text-neutral-800 sm:scale-[1.6] dark:text-neutral-100 dark:brightness-125\">\n                  {selectedAgent.icon}\n                </div>\n              </motion.button>\n\n              <div className=\"ml-1 flex h-14 flex-1 flex-col gap-3 sm:h-18 sm:gap-5\">\n                <input\n                  type=\"text\"\n                  placeholder=\"Start a new project\"\n                  value={message}\n                  onChange={(e) => setMessage(e.target.value)}\n                  className=\"w-full border-none bg-transparent pt-1 text-lg font-medium text-black outline-none placeholder:text-[#C6C5CA] sm:text-[20px] dark:text-white dark:placeholder:text-neutral-600\"\n                />\n              </div>\n            </div>\n\n            <div className=\"mt-6 flex w-full items-center justify-between sm:mt-8\">\n              <motion.button\n                onClick={() =>\n                  setAppType((t) =>\n                    t === 'Web App' ? 'Mobile App' : 'Web App',\n                  )\n                }\n                className=\"flex items-center gap-2 overflow-hidden rounded-full border-[1.8px] border-[#E8E7EF] bg-white px-4 py-1.5 shadow-xs transition-all hover:bg-neutral-50 active:scale-95 sm:px-5 sm:py-2 dark:border-white/5 dark:bg-neutral-800 dark:hover:bg-neutral-800/50\"\n              >\n                <div className=\"relative h-5 overflow-hidden sm:h-6\">\n                  <AnimatedText\n                    text={appType}\n                    className=\"text-sm font-semibold whitespace-nowrap text-[#535256] sm:text-base dark:text-neutral-300\"\n                  />\n                </div>\n\n                <motion.div\n                  layout\n                  transition={{\n                    type: 'spring',\n                    stiffness: 260,\n                    damping: 26,\n                  }}\n                  className=\"flex flex-col -space-y-1 text-[#BDBCC3] dark:text-neutral-600\"\n                >\n                  <ChevronUp size={14} strokeWidth={3} />\n                  <ChevronDown size={14} strokeWidth={3} />\n                </motion.div>\n              </motion.button>\n\n              <button\n                title=\"send\"\n                onClick={() => onSendMessage?.(message, selectedAgent.id)}\n                className=\"flex h-10 w-10 items-center justify-center rounded-full bg-neutral-900 text-white shadow-md transition-all hover:scale-105 active:scale-90 sm:h-11 sm:w-11 dark:bg-white dark:text-black\"\n              >\n                <ArrowRight size={20} strokeWidth={2.5} />\n              </button>\n            </div>\n          </motion.div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span key={text} style={{ display: 'inline-flex ' }}>\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n                willChange: 'transform',\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-ai-agent-base",
      "type": "registry:component",
      "title": "Select AI Agent (base)",
      "description": "Theme-ready base variant of Choose an AI agent quickly with options and smooth feedback..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/select-ai-agent.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { ArrowRight, ChevronUp, ChevronDown } from 'lucide-react';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n  ChatGptIcon,\n  ClaudeIcon,\n  GoogleGeminiIcon,\n} from '@hugeicons/core-free-icons';\n\nexport interface AIAgent {\n  id: string;\n  name: string;\n  icon: React.ReactNode;\n}\n\ninterface SelectAIAgentProps {\n  agents?: AIAgent[];\n  onSendMessage?: (message: string, agentId: string) => void;\n  className?: string;\n}\n\nconst AGENTS = [\n  {\n    id: 'chatgpt',\n    name: 'Chatgpt',\n    icon: (\n      <HugeiconsIcon\n        icon={ChatGptIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 'gemini',\n    name: 'Gemini',\n    icon: (\n      <HugeiconsIcon\n        icon={GoogleGeminiIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n  {\n    id: 'claude',\n    name: 'Claude',\n    icon: (\n      <HugeiconsIcon\n        icon={ClaudeIcon}\n        size={24}\n        color=\"currentColor\"\n        strokeWidth={1.5}\n      />\n    ),\n  },\n];\n\nexport const SelectAIAgent: React.FC<SelectAIAgentProps> = ({\n  agents = AGENTS,\n  onSendMessage,\n  className = '',\n}) => {\n  const [selectedAgent, setSelectedAgent] = useState<AIAgent>(agents[0]);\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n  const [message, setMessage] = useState('');\n  const [appType, setAppType] = useState<'Web App' | 'Mobile App'>('Web App');\n\n  return (\n    <div\n      className={`theme-injected flex w-full flex-col items-center justify-center p-4 antialiased select-none sm:p-6 ${className}`}\n    >\n      <div className=\"relative z-40 w-full max-w-[95%] sm:max-w-110\">\n        <LayoutGroup>\n          <AnimatePresence>\n            {isMenuOpen && (\n              <motion.div\n                initial={{ opacity: 0, y: 10, filter: 'blur(8px)' }}\n                animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, y: 20, filter: 'blur(8px)' }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 400,\n                  damping: 30,\n                  mass: 0.8,\n                }}\n                className=\"border-border bg-background/90 absolute -top-16 left-0 z-0 flex w-fit origin-bottom-left gap-1 rounded-lg border p-1.5 backdrop-blur-xl sm:gap-2\"\n              >\n                {agents.map((agent) => (\n                  <button\n                    key={agent.id}\n                    onClick={() => {\n                      setSelectedAgent(agent);\n                      setIsMenuOpen(false);\n                    }}\n                    className={`flex h-10 w-10 shrink-0 items-center justify-center rounded-lg transition-all active:scale-95 sm:h-11 sm:w-11 ${\n                      selectedAgent.id === agent.id\n                        ? 'border-border bg-background border shadow-sm'\n                        : 'text-muted-foreground hover:bg-accent'\n                    }`}\n                  >\n                    <div className=\"scale-110 sm:scale-125\">{agent.icon}</div>\n                  </button>\n                ))}\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <motion.div\n            layout\n            className=\"border-border bg-muted border p-4 shadow-sm transition-all rounded-lg sm:p-5\"\n          >\n            <div className=\"flex items-start gap-3 sm:gap-4\">\n              <motion.button\n                layoutId={`agent-${selectedAgent.id}`}\n                onClick={() => setIsMenuOpen(!isMenuOpen)}\n                className=\"mt-1 flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center\"\n              >\n                <div className=\"text-foreground brightness-120  scale-[1.4] sm:scale-[1.6]\">\n                  {selectedAgent.icon}\n                </div>\n              </motion.button>\n\n              <div className=\"ml-1 flex h-14 flex-1 flex-col gap-3 sm:h-18 sm:gap-5\">\n                <input\n                  type=\"text\"\n                  placeholder=\"Start a new project\"\n                  value={message}\n                  onChange={(e) => setMessage(e.target.value)}\n                  className=\"text-foreground placeholder:text-muted-foreground w-full border-none bg-transparent pt-1 text-lg font-medium outline-none sm:text-[20px]\"\n                />\n              </div>\n            </div>\n\n            <div className=\"mt-6 flex w-full items-center justify-between sm:mt-8\">\n              <motion.button\n                onClick={() =>\n                  setAppType((t) =>\n                    t === 'Web App' ? 'Mobile App' : 'Web App',\n                  )\n                }\n                className=\"border-border bg-background hover:bg-accent/5 flex items-center gap-2 overflow-hidden rounded-lg border px-4 py-1.5 shadow-xs transition-all active:scale-95 sm:px-5 sm:py-2\"\n              >\n                <div className=\"relative h-5 overflow-hidden sm:h-6\">\n                  <AnimatedText\n                    text={appType}\n                    className=\"text-muted-foreground text-sm font-semibold whitespace-nowrap sm:text-base\"\n                  />\n                </div>\n\n                <motion.div\n                  layout\n                  transition={{\n                    type: 'spring',\n                    stiffness: 260,\n                    damping: 26,\n                  }}\n                  className=\"text-muted-foreground flex flex-col -space-y-1\"\n                >\n                  <ChevronUp size={14} strokeWidth={3} />\n                  <ChevronDown size={14} strokeWidth={3} />\n                </motion.div>\n              </motion.button>\n\n              <button\n                title=\"send\"\n                onClick={() => onSendMessage?.(message, selectedAgent.id)}\n                className=\"bg-primary text-primary-foreground flex h-10 w-10 items-center justify-center rounded-lg shadow-md transition-all hover:scale-105 active:scale-90 sm:h-11 sm:w-11\"\n              >\n                <ArrowRight size={20} strokeWidth={2.5} />\n              </button>\n            </div>\n          </motion.div>\n        </LayoutGroup>\n      </div>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span key={text} style={{ display: 'inline-flex ' }}>\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n                willChange: 'transform',\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "send-money",
      "type": "registry:component",
      "title": "Send Money",
      "description": "Quick send money interaction with confirmation, status, and feedback states.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/send-money.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Building2, CreditCard, Wallet, X } from 'lucide-react';\nimport { MdOutlineAddCard } from 'react-icons/md';\n\nexport type PaymentType = 'bank' | 'card' | 'wallet' | null;\n\nexport interface Card {\n  id: string;\n  last4: string;\n  brand: 'visa' | 'mastercard' | 'other';\n}\n\ninterface SendMoneyProps {\n  cards?: Card[];\n  onProceed?: (data: any) => void;\n}\n\n/* ---------------- Brand Icons ---------------- */\n\nconst VisaIcon = () => (\n  <span className=\"text-sm font-semibold text-neutral-900 italic dark:text-white\">\n    VISA\n  </span>\n);\n\nconst MasterCardIcon = () => (\n  <div className=\"flex -space-x-2\">\n    <div className=\"h-4 w-4 rounded-full bg-red-600\" />\n    <div className=\"h-4 w-4 rounded-full bg-amber-400\" />\n  </div>\n);\n\n/* ---------------- Shared UI ---------------- */\n\nconst cardContainer =\n  'rounded-2xl border transition-colors bg-neutral-100 border-neutral-200 dark:bg-neutral-800 dark:border-neutral-700';\n\nconst primaryButton =\n  'h-11 w-full rounded-2xl font-medium bg-neutral-900 text-white dark:bg-white dark:text-black';\n\nconst Header = ({\n  title,\n  icon: Icon,\n  onClose,\n  id,\n}: {\n  title: string;\n  icon: any;\n  onClose: () => void;\n  id: string;\n}) => (\n  <div className=\"mb-6 flex items-center justify-between gap-3\">\n    <div className=\"flex min-w-0 items-center gap-3\">\n      <motion.div\n        layoutId={`icon-${id}`}\n        transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n        className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-neutral-200 bg-neutral-100 text-neutral-400 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400\"\n      >\n        <Icon size={22} strokeWidth={1.4} />\n      </motion.div>\n      <motion.h2\n        layoutId={`title-${id}`}\n        transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n        className=\"truncate text-base font-medium text-neutral-600 dark:text-neutral-200\"\n      >\n        {title}\n      </motion.h2>\n    </div>\n\n    <button\n      onClick={onClose}\n      className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-neutral-100 text-neutral-500 dark:bg-neutral-800 dark:text-neutral-400\"\n    >\n      <X size={20} strokeWidth={3} />\n    </button>\n  </div>\n);\n\nconst InputField = ({ label, value, onChange }: any) => (\n  <div className=\"mb-4\">\n    <label className=\"mb-1 block text-sm text-neutral-500 dark:text-neutral-400\">\n      {label}\n    </label>\n    <input\n      value={value}\n      onChange={(e) => onChange(e.target.value)}\n      className=\"h-12 w-full rounded-xl border border-neutral-300 bg-white px-4 transition focus:border-neutral-900 focus:outline-none dark:border-neutral-700 dark:bg-neutral-900 dark:text-white dark:focus:border-neutral-500\"\n    />\n  </div>\n);\n\n/* ---------------- Views ---------------- */\n\nconst BankTransferView = ({ onClose, onProceed }: any) => {\n  const [formData, setFormData] = useState({ name: '', account: '', code: '' });\n\n  return (\n    <motion.div layout>\n      <Header\n        title=\"Bank Transfer\"\n        icon={Building2}\n        onClose={onClose}\n        id=\"bank\"\n      />\n      <motion.div\n        initial={{ opacity: 0, filter: 'blur(4px)', y: 20 }}\n        animate={{ opacity: 1, filter: 'blur(0px)', y: 0 }}\n        exit={{ opacity: 0, filter: 'blur(4px)', y: -20 }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.7 }}\n        className=\"\"\n      >\n        <InputField\n          label=\"Full Name\"\n          value={formData.name}\n          onChange={(v: string) => setFormData({ ...formData, name: v })}\n        />\n        <InputField\n          label=\"Account Number\"\n          value={formData.account}\n          onChange={(v: string) => setFormData({ ...formData, account: v })}\n        />\n        <InputField\n          label=\"Bank Code\"\n          value={formData.code}\n          onChange={(v: string) => setFormData({ ...formData, code: v })}\n        />\n        <button\n          onClick={() => onProceed({ type: 'bank', ...formData })}\n          className={`mt-5 ${primaryButton}`}\n        >\n          Proceed\n        </button>\n      </motion.div>\n    </motion.div>\n  );\n};\n\nconst CardView = ({ cards, onClose, onProceed }: any) => {\n  const [selected, setSelected] = useState(cards[0]?.id);\n\n  return (\n    <motion.div>\n      <Header\n        title=\"Debit/Credit Card\"\n        icon={CreditCard}\n        onClose={onClose}\n        id=\"card\"\n      />\n\n      <motion.div\n        initial={{ opacity: 0, filter: 'blur(4px)', y: 20 }}\n        animate={{ opacity: 1, filter: 'blur(0px)', y: 0 }}\n        exit={{ opacity: 0, filter: 'blur(4px)', y: -20 }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.7 }}\n        className=\"\"\n      >\n        <div className=\"mb-4 flex flex-wrap items-center justify-between gap-2\">\n          <span className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n            Available Cards\n          </span>\n          <button className=\"flex items-center gap-2 rounded-full border border-neutral-300 px-3 py-1 text-sm text-neutral-600 dark:border-neutral-700 dark:text-neutral-400\">\n            <MdOutlineAddCard size={18} />\n            Add Card\n          </button>\n        </div>\n\n        <div className=\"mb-6 space-y-3\">\n          {cards.map((card: Card) => (\n            <label\n              key={card.id}\n              onClick={() => setSelected(card.id)}\n              className={`flex h-14 cursor-pointer items-center justify-between rounded-xl border px-4 transition ${\n                selected === card.id\n                  ? 'border-neutral-300 bg-neutral-200 dark:border-neutral-600 dark:bg-neutral-800'\n                  : cardContainer\n              }`}\n            >\n              <div className=\"flex items-center gap-3\">\n                <div\n                  className={`flex h-5 w-5 items-center justify-center rounded-full border-2 ${\n                    selected === card.id\n                      ? 'border-neutral-900 dark:border-white'\n                      : 'border-neutral-400'\n                  }`}\n                >\n                  {selected === card.id && (\n                    <div className=\"h-2.5 w-2.5 rounded-full bg-neutral-900 dark:bg-white\" />\n                  )}\n                </div>\n\n                <span className=\"font-medium text-neutral-900 dark:text-white\">\n                  •••• {card.last4}\n                </span>\n              </div>\n\n              {card.brand === 'visa' ? <VisaIcon /> : <MasterCardIcon />}\n            </label>\n          ))}\n        </div>\n\n        <button\n          onClick={() => onProceed({ type: 'card', cardId: selected })}\n          className={primaryButton}\n        >\n          Proceed\n        </button>\n      </motion.div>\n    </motion.div>\n  );\n};\n\nconst WalletView = ({ onClose, onProceed }: any) => {\n  const [amount, setAmount] = useState('');\n\n  return (\n    <motion.div>\n      <Header title=\"Wallet\" icon={Wallet} onClose={onClose} id=\"wallet\" />\n\n      <motion.div\n        initial={{ opacity: 0, filter: 'blur(4px)', y: 20 }}\n        animate={{ opacity: 1, filter: 'blur(0px)', y: 0 }}\n        exit={{ opacity: 0, filter: 'blur(4px)', y: -20 }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.7 }}\n        className=\"\"\n      >\n        <div className=\"mb-5 rounded-2xl border border-neutral-200 bg-neutral-100 p-4 dark:border-neutral-700 dark:bg-neutral-800\">\n          <p className=\"mb-1 text-sm text-neutral-500 dark:text-neutral-400\">\n            Total Balance\n          </p>\n          <h3 className=\"text-2xl font-semibold text-neutral-900 dark:text-white\">\n            $12,450.00\n          </h3>\n        </div>\n\n        <InputField\n          label=\"Amount to Send\"\n          value={amount}\n          onChange={setAmount}\n        />\n\n        <button\n          onClick={() => onProceed({ type: 'wallet', amount })}\n          className={primaryButton}\n        >\n          Proceed\n        </button>\n      </motion.div>\n    </motion.div>\n  );\n};\n\n/* ---------------- Main ---------------- */\n\nexport const SendMoney: React.FC<SendMoneyProps> = ({\n  cards = [\n    { id: '1', last4: '6756', brand: 'visa' },\n    { id: '2', last4: '4632', brand: 'mastercard' },\n  ],\n  onProceed = () => {},\n}) => {\n  const [view, setView] = useState<PaymentType>(null);\n\n  return (\n    <div className=\"flex min-h-[60vh] w-full items-center justify-center bg-transparent p-4\">\n      <motion.div\n        layout\n        className=\"w-full max-w-[400px] rounded-3xl border border-neutral-200 bg-white p-5 shadow-lg transition-all sm:p-6 dark:border-neutral-800 dark:bg-neutral-900\"\n      >\n        <AnimatePresence mode=\"wait\">\n          {!view ? (\n            <motion.div>\n              <motion.h1\n                initial={{ opacity: 0, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, filter: 'blur(4px)' }}\n                transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n                className=\"mb-6 text-base text-neutral-500 dark:text-neutral-400\"\n              >\n                Send Money\n              </motion.h1>\n\n              <div className=\"space-y-2\">\n                {[\n                  {\n                    id: 'bank',\n                    title: 'Bank Transfer',\n                    sub: 'Transfer to bank account',\n                    icon: Building2,\n                  },\n                  {\n                    id: 'card',\n                    title: 'Debit/Credit Card',\n                    sub: 'Send money from your card',\n                    icon: CreditCard,\n                  },\n                  {\n                    id: 'wallet',\n                    title: 'Wallet',\n                    sub: 'Transfer from your wallet',\n                    icon: Wallet,\n                  },\n                ].map((opt) => (\n                  <button\n                    key={opt.id}\n                    onClick={() => setView(opt.id as PaymentType)}\n                    className=\"flex w-full items-start sm:items-center gap-3 rounded-2xl p-3 transition hover:bg-neutral-100 sm:gap-4 sm:p-4 dark:hover:bg-neutral-800\"\n                  >\n                    <motion.div\n                      layoutId={`icon-${opt.id}`}\n                      className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-neutral-200 bg-neutral-100 text-neutral-400 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400 sm:h-12 sm:w-12\"\n                    >\n                      <opt.icon size={22} className=\"sm:size-6\" />\n                    </motion.div>\n                    <div className=\"text-left\">\n                      <motion.p\n                        layoutId={`title-${opt.id}`}\n                        className=\"font-medium text-neutral-900 dark:text-white\"\n                      >\n                        {opt.title}\n                      </motion.p>\n                      <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n                        {opt.sub}\n                      </p>\n                    </div>\n                  </button>\n                ))}\n              </div>\n            </motion.div>\n          ) : (\n            <>\n              {view === 'bank' && (\n                <BankTransferView\n                  onClose={() => setView(null)}\n                  onProceed={onProceed}\n                />\n              )}\n              {view === 'card' && (\n                <CardView\n                  cards={cards}\n                  onClose={() => setView(null)}\n                  onProceed={onProceed}\n                />\n              )}\n              {view === 'wallet' && (\n                <WalletView\n                  onClose={() => setView(null)}\n                  onProceed={onProceed}\n                />\n              )}\n            </>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "send-money-base",
      "type": "registry:component",
      "title": "Send Money (base)",
      "description": "Theme-ready base variant of Quick send money interaction with confirmation, status, and feedback states..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/send-money.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Building2, CreditCard, Wallet, X } from 'lucide-react';\nimport { MdOutlineAddCard } from 'react-icons/md';\n\nexport type PaymentType = 'bank' | 'card' | 'wallet' | null;\n\nexport interface Card {\n  id: string;\n  last4: string;\n  brand: 'visa' | 'mastercard' | 'other';\n}\n\ninterface SendMoneyProps {\n  cards?: Card[];\n  onProceed?: (data: any) => void;\n}\n\n/* ---------------- Brand Icons ---------------- */\n\nconst VisaIcon = () => (\n  <span className=\"text-foreground text-sm font-semibold italic\">VISA</span>\n);\n\nconst MasterCardIcon = () => (\n  <div className=\"flex -space-x-2\">\n    <div className=\"bg-destructive h-4 w-4 rounded-lg\" />\n    <div className=\"bg-primary h-4 w-4 rounded-lg\" />\n  </div>\n);\n\n/* ---------------- Shared UI ---------------- */\n\nconst cardContainer =\n  'rounded-2xl border transition-colors bg-muted border-border';\n\nconst primaryButton =\n  'h-11 w-full rounded-2xl font-medium bg-primary text-primary-foreground';\n\nconst Header = ({\n  title,\n  icon: Icon,\n  onClose,\n  id,\n}: {\n  title: string;\n  icon: any;\n  onClose: () => void;\n  id: string;\n}) => (\n  <div className=\"mb-6 flex items-center justify-between gap-3\">\n    <div className=\"flex min-w-0 items-center gap-3\">\n      <motion.div\n        layoutId={`icon-${id}`}\n        transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n        className=\"border-border bg-muted text-muted-foreground flex h-11 w-11 shrink-0 items-center justify-center rounded-lg border\"\n      >\n        <Icon size={22} strokeWidth={1.4} />\n      </motion.div>\n      <motion.h2\n        layoutId={`title-${id}`}\n        transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n        className=\"truncate text-base font-medium\"\n      >\n        {title}\n      </motion.h2>\n    </div>\n\n    <button\n      onClick={onClose}\n      className=\"bg-muted text-muted-foreground flex h-9 w-9 shrink-0 items-center justify-center rounded-lg\"\n    >\n      <X size={20} strokeWidth={3} />\n    </button>\n  </div>\n);\n\nconst InputField = ({ label, value, onChange }: any) => (\n  <div className=\"mb-4\">\n    <label className=\"text-muted-foreground mb-1 block text-sm\">{label}</label>\n    <input\n      value={value}\n      onChange={(e) => onChange(e.target.value)}\n      className=\"border-border bg-background focus:border-primary text-foreground h-12 w-full rounded-lg border px-4 transition focus:outline-none\"\n    />\n  </div>\n);\n\n/* ---------------- Views ---------------- */\n\nconst BankTransferView = ({ onClose, onProceed }: any) => {\n  const [formData, setFormData] = useState({ name: '', account: '', code: '' });\n\n  return (\n    <motion.div layout>\n      <Header\n        title=\"Bank Transfer\"\n        icon={Building2}\n        onClose={onClose}\n        id=\"bank\"\n      />\n      <motion.div\n        initial={{ opacity: 0, filter: 'blur(4px)', y: 20 }}\n        animate={{ opacity: 1, filter: 'blur(0px)', y: 0 }}\n        exit={{ opacity: 0, filter: 'blur(4px)', y: -20 }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.7 }}\n      >\n        <InputField\n          label=\"Full Name\"\n          value={formData.name}\n          onChange={(v: string) => setFormData({ ...formData, name: v })}\n        />\n        <InputField\n          label=\"Account Number\"\n          value={formData.account}\n          onChange={(v: string) => setFormData({ ...formData, account: v })}\n        />\n        <InputField\n          label=\"Bank Code\"\n          value={formData.code}\n          onChange={(v: string) => setFormData({ ...formData, code: v })}\n        />\n        <button\n          onClick={() => onProceed({ type: 'bank', ...formData })}\n          className={`mt-5 ${primaryButton}`}\n        >\n          Proceed\n        </button>\n      </motion.div>\n    </motion.div>\n  );\n};\n\nconst CardView = ({ cards, onClose, onProceed }: any) => {\n  const [selected, setSelected] = useState(cards[0]?.id);\n\n  return (\n    <motion.div>\n      <Header\n        title=\"Debit/Credit Card\"\n        icon={CreditCard}\n        onClose={onClose}\n        id=\"card\"\n      />\n\n      <motion.div\n        initial={{ opacity: 0, filter: 'blur(4px)', y: 20 }}\n        animate={{ opacity: 1, filter: 'blur(0px)', y: 0 }}\n        exit={{ opacity: 0, filter: 'blur(4px)', y: -20 }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.7 }}\n      >\n        <div className=\"mb-4 flex flex-wrap items-center justify-between gap-2\">\n          <span className=\"text-muted-foreground text-sm\">Available Cards</span>\n          <button className=\"border-border text-muted-foreground flex items-center gap-2 rounded-lg border px-3 py-1 text-sm\">\n            <MdOutlineAddCard size={18} />\n            Add Card\n          </button>\n        </div>\n\n        <div className=\"mb-6 space-y-3\">\n          {cards.map((card: Card) => (\n            <label\n              key={card.id}\n              onClick={() => setSelected(card.id)}\n              className={`flex h-14 cursor-pointer items-center justify-between rounded-lg border px-4 transition ${\n                selected === card.id\n                  ? 'border-primary bg-accent'\n                  : cardContainer\n              }`}\n            >\n              <div className=\"flex items-center gap-3\">\n                <div\n                  className={`flex h-5 w-5 items-center justify-center rounded-lg border-2 ${\n                    selected === card.id\n                      ? 'border-primary'\n                      : 'border-muted-foreground'\n                  }`}\n                >\n                  {selected === card.id && (\n                    <div className=\"bg-primary h-2.5 w-2.5 rounded-lg\" />\n                  )}\n                </div>\n\n                <span className=\"text-foreground font-medium\">\n                  •••• {card.last4}\n                </span>\n              </div>\n\n              {card.brand === 'visa' ? <VisaIcon /> : <MasterCardIcon />}\n            </label>\n          ))}\n        </div>\n\n        <button\n          onClick={() => onProceed({ type: 'card', cardId: selected })}\n          className={primaryButton}\n        >\n          Proceed\n        </button>\n      </motion.div>\n    </motion.div>\n  );\n};\n\nconst WalletView = ({ onClose, onProceed }: any) => {\n  const [amount, setAmount] = useState('');\n\n  return (\n    <motion.div>\n      <Header title=\"Wallet\" icon={Wallet} onClose={onClose} id=\"wallet\" />\n\n      <motion.div\n        initial={{ opacity: 0, filter: 'blur(4px)', y: 20 }}\n        animate={{ opacity: 1, filter: 'blur(0px)', y: 0 }}\n        exit={{ opacity: 0, filter: 'blur(4px)', y: -20 }}\n        transition={{ type: 'spring', bounce: 0.4, duration: 0.7 }}\n      >\n        <div className=\"border-border bg-muted mb-5 rounded-2xl border p-4\">\n          <p className=\"text-muted-foreground mb-1 text-sm\">Total Balance</p>\n          <h3 className=\"text-foreground text-2xl font-semibold\">$12,450.00</h3>\n        </div>\n\n        <InputField\n          label=\"Amount to Send\"\n          value={amount}\n          onChange={setAmount}\n        />\n\n        <button\n          onClick={() => onProceed({ type: 'wallet', amount })}\n          className={primaryButton}\n        >\n          Proceed\n        </button>\n      </motion.div>\n    </motion.div>\n  );\n};\n\n/* ---------------- Main ---------------- */\n\nexport const SendMoney: React.FC<SendMoneyProps> = ({\n  cards = [\n    { id: '1', last4: '6756', brand: 'visa' },\n    { id: '2', last4: '4632', brand: 'mastercard' },\n  ],\n  onProceed = () => {},\n}) => {\n  const [view, setView] = useState<PaymentType>(null);\n\n  return (\n    <div className=\"theme-injected flex min-h-[60vh] w-full items-center justify-center bg-transparent p-4\">\n      <motion.div\n        layout\n        className=\"border-border bg-background w-full max-w-[400px] rounded-lg border p-5 shadow-lg transition-all sm:p-6\"\n      >\n        <AnimatePresence mode=\"wait\">\n          {!view ? (\n            <motion.div>\n              <motion.h1\n                initial={{ opacity: 0, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, filter: 'blur(4px)' }}\n                transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n                className=\"text-muted-foreground mb-6 text-base\"\n              >\n                Send Money\n              </motion.h1>\n\n              <div className=\"space-y-2\">\n                {[\n                  {\n                    id: 'bank',\n                    title: 'Bank Transfer',\n                    sub: 'Transfer to bank account',\n                    icon: Building2,\n                  },\n                  {\n                    id: 'card',\n                    title: 'Debit/Credit Card',\n                    sub: 'Send money from your card',\n                    icon: CreditCard,\n                  },\n                  {\n                    id: 'wallet',\n                    title: 'Wallet',\n                    sub: 'Transfer from your wallet',\n                    icon: Wallet,\n                  },\n                ].map((opt) => (\n                  <button\n                    key={opt.id}\n                    onClick={() => setView(opt.id as PaymentType)}\n                    className=\"hover:bg-accent/5 flex w-full items-center gap-3 rounded-lg p-3 transition sm:gap-4 sm:p-4\"\n                  >\n                    <motion.div\n                      layoutId={`icon-${opt.id}`}\n                      className=\"border-border bg-muted text-muted-foreground flex h-11 w-11 shrink-0 items-center justify-center rounded-lg border sm:h-12 sm:w-12\"\n                    >\n                      <opt.icon size={22} className=\"sm:size-6\" />\n                    </motion.div>\n                    <div className=\"text-left\">\n                      <motion.p\n                        layoutId={`title-${opt.id}`}\n                        className=\"text-foreground font-medium\"\n                      >\n                        {opt.title}\n                      </motion.p>\n                      <p className=\"text-muted-foreground text-sm\">{opt.sub}</p>\n                    </div>\n                  </button>\n                ))}\n              </div>\n            </motion.div>\n          ) : (\n            <>\n              {view === 'bank' && (\n                <BankTransferView\n                  onClose={() => setView(null)}\n                  onProceed={onProceed}\n                />\n              )}\n              {view === 'card' && (\n                <CardView\n                  cards={cards}\n                  onClose={() => setView(null)}\n                  onProceed={onProceed}\n                />\n              )}\n              {view === 'wallet' && (\n                <WalletView\n                  onClose={() => setView(null)}\n                  onProceed={onProceed}\n                />\n              )}\n            </>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "share-sheet",
      "type": "registry:component",
      "title": "share sheet",
      "description": "An animated share sheet widget that smoothly expands to reveal a list of users for quick link sharing.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/share-sheet.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { FiShare } from 'react-icons/fi';\nimport { cn } from '@/lib/utils';\n\ninterface User {\n  id: string;\n  name: string;\n  avatar: string;\n}\n\ninterface ShareSheetProps {\n  users: User[];\n  onShareComplete?: (user: User) => void;\n}\n\nconst springTransition = {\n  type: 'spring',\n  stiffness: 240,\n  damping: 20,\n  mass: 1,\n} as const;\n\nexport const ShareSheet = ({ users, onShareComplete }: ShareSheetProps) => {\n  const [status, setStatus] = useState<'idle' | 'open' | 'sending' | 'success'>(\n    'idle',\n  );\n  const [selectedUser, setSelectedUser] = useState<User | null>(null);\n  const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n  const radius = 22;\n  const circumference = 2 * Math.PI * radius;\n\n  const handleSelectUser = (user: User) => {\n    setSelectedUser(user);\n    setStatus('sending');\n\n    setTimeout(() => {\n      setStatus('success');\n\n      setTimeout(() => {\n        setStatus('idle');\n        setSelectedUser(null);\n        onShareComplete?.(user);\n      }, 800);\n    }, 1800);\n  };\n\n  return (\n    <div className=\"relative flex items-center justify-center\">\n      <motion.button\n        onClick={() => status === 'idle' && setStatus('open')}\n        className=\"relative flex h-14 w-14 items-center justify-center overflow-hidden rounded-[17px] bg-neutral-900 text-neutral-50 shadow-sm dark:bg-neutral-100 dark:text-neutral-900\"\n        initial={{ opacity: 0, scale: 0.8 }}\n        animate={{ opacity: 1, scale: 1 }}\n        transition={springTransition}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {status === 'idle' && (\n            <motion.div\n              key=\"share-icon\"\n              initial={{ opacity: 0, y: 40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -40 }}\n            >\n              <FiShare size={26} strokeWidth={2} />\n            </motion.div>\n          )}\n\n          {(status === 'sending' || status === 'success') && (\n            <motion.div\n              key=\"sending-container\"\n              initial={{ opacity: 0, y: 40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -40 }}\n              transition={{\n                type: 'spring',\n                stiffness: 400,\n                damping: 25,\n              }}\n              className=\"flex h-14 w-14 items-center justify-center overflow-hidden rounded-[17px] bg-neutral-900 text-neutral-50 shadow-sm dark:bg-neutral-100 dark:text-neutral-900\"\n            >\n              <div className=\"relative flex h-full w-full items-center justify-center overflow-hidden p-2\">\n                <svg className=\"pointer-events-none absolute inset-0 h-full w-full -rotate-90\">\n                  <circle\n                    cx=\"28\"\n                    cy=\"28\"\n                    r=\"22\"\n                    stroke=\"currentColor\"\n                    strokeOpacity=\"0.15\"\n                    strokeWidth=\"3\"\n                    fill=\"transparent\"\n                  />\n\n                  <motion.circle\n                    cx=\"28\"\n                    cy=\"28\"\n                    r=\"22\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"3\"\n                    fill=\"transparent\"\n                    strokeDasharray={circumference}\n                    initial={{ strokeDashoffset: circumference }}\n                    animate={{ strokeDashoffset: 0 }}\n                    transition={{ duration: 1.8, ease: 'easeInOut' }}\n                  />\n                </svg>\n\n                <motion.img\n                  key=\"sending-avatar\"\n                  layoutId=\"avatar-morph\"\n                  src={selectedUser?.avatar}\n                  className=\"absolute inset-0 m-auto size-10 rounded-full object-cover\"\n                  exit={{ opacity: 0, scale: 0.6 }}\n                  transition={{ duration: 0.3 }}\n                />\n\n                <AnimatePresence mode=\"wait\">\n                  {status === 'success' && (\n                    <motion.div\n                      key=\"success-check\"\n                      initial={{ scale: 0, opacity: 0 }}\n                      animate={{ scale: 1, opacity: 1 }}\n                      exit={{ scale: 0, opacity: 0 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 400,\n                        damping: 20,\n                      }}\n                      className=\"flex h-9 w-9 items-center justify-center\"\n                    >\n                      <svg\n                        width=\"24\"\n                        height=\"24\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"3.5\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      >\n                        <polyline points=\"20 6 9 17 4 12\" />\n                      </svg>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.button>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {status === 'open' && (\n          <motion.div\n            className=\"absolute w-[340px] rounded-[38px] bg-neutral-100 p-3 py-5 shadow-md transition-colors duration-300 dark:bg-neutral-900\"\n            initial={{ opacity: 0, scale: 0 }}\n            animate={{ opacity: 1, scale: 1 }}\n            exit={{ opacity: 0, scale: 0 }}\n            transition={springTransition}\n          >\n            <div className=\"relative flex flex-col\">\n              {users.map((user) => (\n                <motion.div\n                  layout\n                  key={user.id}\n                  onHoverStart={() => setHoveredId(user.id)}\n                  onHoverEnd={() => setHoveredId(null)}\n                  onClick={() => handleSelectUser(user)}\n                  className={cn(\n                    'group relative z-10 flex cursor-pointer items-center gap-3 p-2',\n                    hoveredId === user.id && 'px-0',\n                  )}\n                  animate={{\n                    x: hoveredId === user.id ? -10 : 0,\n                  }}\n                >\n                  {hoveredId === user.id && (\n                    <motion.div\n                      layoutId=\"hover-bg\"\n                      className=\"absolute inset-y-0 -right-6 -left-6 -z-10 rounded-[14px] border border-neutral-200 bg-white shadow-sm dark:border-neutral-800 dark:bg-neutral-800\"\n                      transition={springTransition}\n                    />\n                  )}\n\n                  <motion.div\n                    layout\n                    className=\"relative h-11 w-11 overflow-hidden\"\n                    animate={{\n                      borderRadius: hoveredId === user.id ? '12px' : '28px',\n                    }}\n                    transition={springTransition}\n                  >\n                    <motion.img\n                      layout\n                      layoutId={\n                        selectedUser?.id === user.id\n                          ? 'avatar-morph'\n                          : `img-${user.id}`\n                      }\n                      src={user.avatar}\n                      className=\"h-full w-full object-cover\"\n                    />\n                  </motion.div>\n\n                  <motion.span\n                    layout\n                    className=\"text-[17px] font-medium tracking-tight text-neutral-800 dark:text-neutral-200\"\n                  >\n                    {user.name}\n                  </motion.span>\n                </motion.div>\n              ))}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "share-sheet-base",
      "type": "registry:component",
      "title": "share sheet (base)",
      "description": "Theme-ready base variant of An animated share sheet widget that smoothly expands to reveal a list of users for quick link sharing..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/share-sheet.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { FiShare } from 'react-icons/fi';\nimport { cn } from '@/lib/utils';\n\ninterface User {\n  id: string;\n  name: string;\n  avatar: string;\n}\n\ninterface ShareSheetProps {\n  users: User[];\n  onShareComplete?: (user: User) => void;\n}\n\nconst springTransition = {\n  type: 'spring',\n  stiffness: 240,\n  damping: 20,\n  mass: 1,\n} as const;\n\nexport const ShareSheet = ({ users, onShareComplete }: ShareSheetProps) => {\n  const [status, setStatus] = useState<'idle' | 'open' | 'sending' | 'success'>(\n    'idle',\n  );\n  const [selectedUser, setSelectedUser] = useState<User | null>(null);\n  const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n  const radius = 22;\n  const circumference = 2 * Math.PI * radius;\n\n  const handleSelectUser = (user: User) => {\n    setSelectedUser(user);\n    setStatus('sending');\n\n    setTimeout(() => {\n      setStatus('success');\n\n      setTimeout(() => {\n        setStatus('idle');\n        setSelectedUser(null);\n        onShareComplete?.(user);\n      }, 800);\n    }, 1800);\n  };\n\n  return (\n    <div className=\"theme-injected relative flex items-center justify-center\">\n      <motion.button\n        onClick={() => status === 'idle' && setStatus('open')}\n        className=\"bg-foreground text-background relative flex h-14 w-14 items-center justify-center overflow-hidden rounded-lg shadow-sm\"\n        initial={{ opacity: 0, scale: 0.8 }}\n        animate={{ opacity: 1, scale: 1 }}\n        transition={springTransition}\n      >\n        <AnimatePresence mode=\"popLayout\" initial={false}>\n          {status === 'idle' && (\n            <motion.div\n              key=\"share-icon\"\n              initial={{ opacity: 0, y: 40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -40 }}\n            >\n              <FiShare size={26} strokeWidth={2} />\n            </motion.div>\n          )}\n\n          {(status === 'sending' || status === 'success') && (\n            <motion.div\n              key=\"sending-container\"\n              initial={{ opacity: 0, y: 40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -40 }}\n              transition={{\n                type: 'spring',\n                stiffness: 400,\n                damping: 25,\n              }}\n              className=\"bg-foreground text-background flex h-14 w-14 items-center justify-center overflow-hidden rounded-lg shadow-sm\"\n            >\n              <div className=\"relative flex h-full w-full items-center justify-center overflow-hidden p-2\">\n                <svg className=\"pointer-events-none absolute inset-0 h-full w-full -rotate-90\">\n                  <circle\n                    cx=\"28\"\n                    cy=\"28\"\n                    r=\"22\"\n                    stroke=\"currentColor\"\n                    strokeOpacity=\"0.15\"\n                    strokeWidth=\"3\"\n                    fill=\"transparent\"\n                  />\n\n                  <motion.circle\n                    cx=\"28\"\n                    cy=\"28\"\n                    r=\"22\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"3\"\n                    fill=\"transparent\"\n                    strokeDasharray={circumference}\n                    initial={{ strokeDashoffset: circumference }}\n                    animate={{ strokeDashoffset: 0 }}\n                    transition={{ duration: 1.8, ease: 'easeInOut' }}\n                  />\n                </svg>\n\n                <motion.img\n                  key=\"sending-avatar\"\n                  layoutId=\"avatar-morph\"\n                  src={selectedUser?.avatar}\n                  className=\"absolute inset-0 m-auto size-10 rounded-full object-cover\"\n                  exit={{ opacity: 0, scale: 0.6 }}\n                  transition={{ duration: 0.3 }}\n                />\n\n                <AnimatePresence mode=\"wait\">\n                  {status === 'success' && (\n                    <motion.div\n                      key=\"success-check\"\n                      initial={{ scale: 0, opacity: 0 }}\n                      animate={{ scale: 1, opacity: 1 }}\n                      exit={{ scale: 0, opacity: 0 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 400,\n                        damping: 20,\n                      }}\n                      className=\"flex h-9 w-9 items-center justify-center\"\n                    >\n                      <svg\n                        width=\"24\"\n                        height=\"24\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"3.5\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      >\n                        <polyline points=\"20 6 9 17 4 12\" />\n                      </svg>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.button>\n\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {status === 'open' && (\n          <motion.div\n            className=\"bg-muted absolute w-[340px] rounded-lg p-3 py-5 shadow-md transition-colors duration-300\"\n            initial={{ opacity: 0, scale: 0 }}\n            animate={{ opacity: 1, scale: 1 }}\n            exit={{ opacity: 0, scale: 0 }}\n            transition={springTransition}\n          >\n            <div className=\"relative flex flex-col\">\n              {users.map((user) => (\n                <motion.div\n                  layout\n                  key={user.id}\n                  onHoverStart={() => setHoveredId(user.id)}\n                  onHoverEnd={() => setHoveredId(null)}\n                  onClick={() => handleSelectUser(user)}\n                  className={cn(\n                    'group relative z-10 flex cursor-pointer items-center gap-3 p-2',\n                    hoveredId === user.id && 'px-0',\n                  )}\n                  animate={{\n                    x: hoveredId === user.id ? -10 : 0,\n                  }}\n                >\n                  {hoveredId === user.id && (\n                    <motion.div\n                      layoutId=\"hover-bg\"\n                      className=\"border-border bg-input absolute inset-y-0 -right-6 -left-6 -z-10 rounded-lg border shadow-sm\"\n                      transition={springTransition}\n                    />\n                  )}\n\n                  <motion.div\n                    layout\n                    className=\"relative h-11 w-11 overflow-hidden\"\n                    animate={{\n                      borderRadius:\n                        hoveredId === user.id\n                          ? 'var(--radius)'\n                          : 'var(--radius)',\n                    }}\n                    transition={springTransition}\n                  >\n                    <motion.img\n                      layout\n                      layoutId={\n                        selectedUser?.id === user.id\n                          ? 'avatar-morph'\n                          : `img-${user.id}`\n                      }\n                      src={user.avatar}\n                      className=\"h-full w-full object-cover\"\n                    />\n                  </motion.div>\n\n                  <motion.span\n                    layout\n                    className=\"text-foreground text-[17px] font-medium tracking-tight\"\n                  >\n                    {user.name}\n                  </motion.span>\n                </motion.div>\n              ))}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shimmer-button",
      "type": "registry:component",
      "title": "Shimmer Button",
      "description": "A button with an animated shimmer effect on hover.",
      "dependencies": [],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/shimmer-button.tsx",
          "type": "registry:component",
          "content": "import { cn } from \"@/lib/utils\";\n\ninterface ShimmerButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  children: React.ReactNode;\n}\n\nexport function ShimmerButton({ children, className, ...props }: ShimmerButtonProps) {\n  return (\n    <button\n      className={cn(\n        \"relative overflow-hidden px-6 py-3 rounded-lg font-medium\",\n        \"bg-primary text-primary-foreground\",\n        \"hover:shadow-lg transition-shadow duration-300\",\n        \"group\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"relative z-10\">{children}</span>\n      <div\n        className={cn(\n          \"absolute inset-0 -translate-x-full\",\n          \"bg-linear-to-r from-transparent via-white/20 to-transparent\",\n          \"group-hover:translate-x-full transition-transform duration-700\"\n        )}\n      />\n    </button>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shimmer-button-base",
      "type": "registry:component",
      "title": "Shimmer Button (base)",
      "description": "Theme-ready base variant of A button with an animated shimmer effect on hover..",
      "dependencies": [],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/shimmer-button.tsx",
          "type": "registry:component",
          "content": "import { cn } from \"@/lib/utils\";\n\ninterface ShimmerButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  children: React.ReactNode;\n}\n\nexport function ShimmerButton({ children, className, ...props }: ShimmerButtonProps) {\n  return (\n    <button\n      className={cn(\n        \"relative overflow-hidden px-6 py-3 rounded-lg font-medium\",\n        \"bg-primary text-primary-foreground\",\n        \"hover:shadow-lg transition-shadow duration-300\",\n        \"group\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"relative z-10\">{children}</span>\n      <div\n        className={cn(\n          \"absolute inset-0 -translate-x-full\",\n          \"bg-linear-to-r from-transparent via-white/20 to-transparent\",\n          \"group-hover:translate-x-full transition-transform duration-700\"\n        )}\n      />\n    </button>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "show-qr",
      "type": "registry:component",
      "title": "Show QR",
      "description": "A widget to show QR code.",
      "dependencies": [
        "lucide-react",
        "motion",
        "qrcode.react",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/show-qr.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { X, Link } from 'lucide-react';\nimport { IoQrCodeOutline } from 'react-icons/io5';\nimport {\n  AnimatePresence,\n  motion,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { useEffect, useState } from 'react';\nimport { QRCodeSVG } from 'qrcode.react';\nimport useMeasure from 'react-use-measure';\n\ninterface ShowQrProps {\n  value: string;\n  buttonLabel?: string;\n  onCopy?: () => void;\n}\n\nexport const ShowQr = ({\n  value,\n  buttonLabel = 'Show QR Code',\n  onCopy,\n}: ShowQrProps) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [isCopied, setIsCopied] = useState(false);\n\n  const [ref, bounds] = useMeasure();\n\n  useEffect(() => {\n    if (isCopied) {\n      const t = setTimeout(() => setIsCopied(false), 2000);\n      return () => clearTimeout(t);\n    }\n  }, [isCopied]);\n\n  const springConfig: Transition = {\n    type: 'spring',\n    bounce: 0.25,\n    visualDuration: 0.35,\n  };\n\n  const collapsedTransition: Transition = {\n    type: 'spring',\n    bounce: 0.15,\n    visualDuration: 0.35,\n  };\n\n  return (\n    <div className=\"flex w-full items-center justify-center overflow-hidden\">\n      <MotionConfig\n        transition={isExpanded ? springConfig : collapsedTransition}\n      >\n        <motion.div\n          initial={{\n            width: 180,\n          }}\n          animate={{\n            width: isExpanded ? 250 : 180,\n            height: isExpanded ? bounds.height : 48,\n          }}\n          className=\"overflow-hidden rounded-[32px] bg-[#F4F4F9] dark:bg-[#1C1C1E]\"\n        >\n          <div ref={ref} className=\"\">\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {!isExpanded ? (\n                <motion.div\n                  key=\"collapsed\"\n                  className=\"flex cursor-pointer items-center justify-center gap-1 px-4 py-3 font-medium text-neutral-900 dark:text-white\"\n                  onClick={() => setIsExpanded(true)}\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                >\n                  <IoQrCodeOutline className=\"size-6\" />\n                  <span>{buttonLabel}</span>\n                </motion.div>\n              ) : (\n                <motion.div\n                  key=\"expanded\"\n                  className=\"flex flex-col items-center gap-2 p-4 text-neutral-900 dark:text-white\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{\n                    opacity: 0,\n                    transition: {\n                      duration: 0.2,\n                      ease: 'easeOut',\n                    },\n                  }}\n                >\n                  <motion.div\n                    className=\"flex h-[220px] w-[220px] items-center justify-center rounded-3xl border border-gray-200 bg-white p-4 dark:border-white/10 dark:bg-[#0B0B0E]\"\n                    initial={{ opacity: 0, y: 60, scale: 1.2 }}\n                    animate={{ opacity: 1, y: 0, scale: 1 }}\n                  >\n                    <QRCodeSVG\n                      value={value}\n                      size={200}\n                      level=\"H\"\n                      fgColor=\"currentColor\"\n                      bgColor=\"transparent\"\n                      className=\"h-full w-full text-black dark:text-white\"\n                    />\n                  </motion.div>\n\n                  <div className=\"flex w-full items-center gap-2\">\n                    <motion.div\n                      className=\"flex flex-1 cursor-pointer items-center justify-center gap-1 rounded-full border border-gray-200 bg-white p-2 text-lg font-medium dark:border-white/10 dark:bg-neutral-950\"\n                      onClick={() => {\n                        navigator.clipboard.writeText(value);\n                        setIsCopied(true);\n                        onCopy?.();\n                      }}\n                      layout\n                    >\n                      <motion.div layout>\n                        <Link />\n                      </motion.div>\n                      <AnimatedText\n                        from=\"Copy\"\n                        to=\"Copied\"\n                        isCopied={isCopied}\n                      />\n                      <motion.span layout>Link</motion.span>\n                    </motion.div>\n\n                    <div\n                      className=\"flex cursor-pointer items-center justify-center rounded-full border border-gray-200 bg-white p-2 dark:border-white/10 dark:bg-neutral-950\"\n                      onClick={() => {\n                        setIsExpanded(false);\n                        setIsCopied(false);\n                      }}\n                    >\n                      <X />\n                    </div>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </motion.div>\n      </MotionConfig>\n    </div>\n  );\n};\n\nconst AnimatedText = ({\n  from,\n  to,\n  isCopied,\n}: {\n  from: string;\n  to: string;\n  isCopied: boolean;\n}) => {\n  const activeText = isCopied ? to : from;\n\n  return (\n    <div className=\"flex text-lg tracking-tight will-change-transform\">\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {activeText.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              layout\n              initial={{ opacity: 0, y: 5, scale: 0.7 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: -5, scale: 0.7 }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "show-qr-base",
      "type": "registry:component",
      "title": "Show QR (base)",
      "description": "Theme-ready base variant of A widget to show QR code..",
      "dependencies": [
        "lucide-react",
        "motion",
        "qrcode.react",
        "react-icons",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/show-qr.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { X, Link } from 'lucide-react';\nimport { IoQrCodeOutline } from 'react-icons/io5';\nimport {\n  AnimatePresence,\n  motion,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { useEffect, useState } from 'react';\nimport { QRCodeSVG } from 'qrcode.react';\nimport useMeasure from 'react-use-measure';\n\ninterface ShowQrProps {\n  value: string;\n  buttonLabel?: string;\n  onCopy?: () => void;\n}\n\nexport const ShowQr = ({\n  value,\n  buttonLabel = 'Show QR Code',\n  onCopy,\n}: ShowQrProps) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [isCopied, setIsCopied] = useState(false);\n\n  const [ref, bounds] = useMeasure();\n\n  useEffect(() => {\n    if (isCopied) {\n      const t = setTimeout(() => setIsCopied(false), 2000);\n      return () => clearTimeout(t);\n    }\n  }, [isCopied]);\n\n  const springConfig: Transition = {\n    type: 'spring',\n    bounce: 0.25,\n    visualDuration: 0.35,\n  };\n\n  const collapsedTransition: Transition = {\n    type: 'spring',\n    bounce: 0.15,\n    visualDuration: 0.35,\n  };\n\n  return (\n    <div className=\"theme-injected  flex w-full h-[500px] items-center justify-center overflow-hidden transition-colors\">\n      <MotionConfig\n        transition={isExpanded ? springConfig : collapsedTransition}\n      >\n        <motion.div\n          initial={{\n            width: 180,\n          }}\n          animate={{\n            width: isExpanded ? 250 : 180,\n            height: isExpanded ? bounds.height : 48,\n          }}\n          className=\"bg-muted overflow-hidden rounded-lg\"\n        >\n          <div ref={ref} className=\"\">\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {!isExpanded ? (\n                <motion.div\n                  key=\"collapsed\"\n                  className=\"text-foreground flex cursor-pointer items-center justify-center gap-1 px-4 py-3 font-medium\"\n                  onClick={() => setIsExpanded(true)}\n                  initial={{ opacity: 0, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, y: 0, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, filter: 'blur(4px)' }}\n                >\n                  <IoQrCodeOutline className=\"size-6\" />\n                  <span>{buttonLabel}</span>\n                </motion.div>\n              ) : (\n                <motion.div\n                  key=\"expanded\"\n                  className=\"text-foreground flex flex-col items-center gap-2 p-4\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{\n                    opacity: 0,\n                    transition: {\n                      duration: 0.2,\n                      ease: 'easeOut',\n                    },\n                  }}\n                >\n                  <motion.div\n                    className=\"border-border bg-background flex h-[220px] w-[220px] items-center justify-center rounded-lg border p-4\"\n                    initial={{ opacity: 0, y: 60, scale: 1.2 }}\n                    animate={{ opacity: 1, y: 0, scale: 1 }}\n                  >\n                    <QRCodeSVG\n                      value={value}\n                      size={200}\n                      level=\"H\"\n                      fgColor=\"currentColor\"\n                      bgColor=\"transparent\"\n                      className=\"text-foreground h-full w-full\"\n                    />\n                  </motion.div>\n\n                  <div className=\"flex w-full items-center gap-2\">\n                    <motion.div\n                      className=\"border-border bg-background flex flex-1 cursor-pointer items-center justify-center gap-1 rounded-lg border p-2 text-lg font-medium\"\n                      onClick={() => {\n                        navigator.clipboard.writeText(value);\n                        setIsCopied(true);\n                        onCopy?.();\n                      }}\n                      layout\n                    >\n                      <motion.div layout>\n                        <Link />\n                      </motion.div>\n                      <AnimatedText\n                        from=\"Copy\"\n                        to=\"Copied\"\n                        isCopied={isCopied}\n                      />\n                      <motion.span layout>Link</motion.span>\n                    </motion.div>\n\n                    <div\n                      className=\"border-border bg-background flex cursor-pointer items-center justify-center rounded-lg border p-2\"\n                      onClick={() => {\n                        setIsExpanded(false);\n                        setIsCopied(false);\n                      }}\n                    >\n                      <X />\n                    </div>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </motion.div>\n      </MotionConfig>\n    </div>\n  );\n};\n\nconst AnimatedText = ({\n  from,\n  to,\n  isCopied,\n}: {\n  from: string;\n  to: string;\n  isCopied: boolean;\n}) => {\n  const activeText = isCopied ? to : from;\n\n  return (\n    <div className=\"flex text-lg tracking-tight will-change-transform\">\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {activeText.split('').map((char, index) => {\n          const displayChar = char === ' ' ? '\\u00A0' : char;\n\n          return (\n            <motion.span\n              key={char + index}\n              layout\n              initial={{ opacity: 0, y: 5, scale: 0.7 }}\n              animate={{\n                opacity: 1,\n                y: 0,\n                scale: 1,\n                transition: {\n                  type: 'spring',\n                  stiffness: 200,\n                  damping: 20,\n                  delay: 0.03 * index,\n                },\n              }}\n              exit={{ opacity: 0, y: -5, scale: 0.7 }}\n            >\n              {displayChar}\n            </motion.span>\n          );\n        })}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shuffle-pinned-item",
      "type": "registry:component",
      "title": "Shuffle Pinned List",
      "description": "A dynamic list that promotes pinned items to a shuffleable hero header with spring animations and interactive pin toggles.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/shuffle-pinned-item.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n  type FC,\n} from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { Pin, ChevronsUpDown } from 'lucide-react';\nimport { BsChatFill } from 'react-icons/bs';\n\nexport interface ListItem {\n  id: string;\n  text: string;\n  isPinned: boolean;\n}\n\ninterface ShufflePinnedListProps {\n  items?: ListItem[];\n  onPinChange?: (updatedItems: ListItem[]) => void;\n  onShuffle?: (currentHeroItem?: ListItem) => void;\n}\n\nconst DEFAULT_ITEMS: ListItem[] = [\n  { id: '1', text: 'Daily Fitness Tracker', isPinned: false },\n  { id: '2', text: 'Voice Command Tips', isPinned: false },\n  { id: '3', text: 'iOS Shortcuts Guide', isPinned: false },\n  { id: '4', text: 'Focus Mode Ideas', isPinned: false },\n  { id: '5', text: '50 Productivity Hacks', isPinned: false },\n  { id: '6', text: 'Lunch Recipe Ideas', isPinned: false },\n  { id: '7', text: 'Snack Ideas For Kids', isPinned: false },\n];\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 400,\n  damping: 40,\n};\n\nexport const ShufflePinnedList: FC<ShufflePinnedListProps> = ({\n  items: propItems,\n  onPinChange,\n  onShuffle,\n}) => {\n  const [items, setItems] = useState<ListItem[]>(propItems ?? DEFAULT_ITEMS);\n  const [activePinnedIndex, setActivePinnedIndex] = useState<number>(0);\n  const [showFade, setShowFade] = useState(false);\n\n  const scrollRef = useRef<HTMLDivElement>(null);\n\n  const pinnedItems = useMemo(\n    () => items.filter((item) => item.isPinned),\n    [items],\n  );\n\n  const togglePin = useCallback(\n    (id: string) => {\n      setItems((prev) => {\n        const updated = prev.map((item) =>\n          item.id === id ? { ...item, isPinned: !item.isPinned } : item,\n        );\n\n        const toggledItem = prev.find((i) => i.id === id);\n\n        if (!toggledItem?.isPinned) {\n          const newPinnedItems = updated.filter((i) => i.isPinned);\n          const newIndex = newPinnedItems.findIndex((i) => i.id === id);\n          setActivePinnedIndex(newIndex);\n        }\n\n        if (toggledItem?.isPinned) {\n          const remainingPinned = updated.filter((i) => i.isPinned);\n          setActivePinnedIndex((current) =>\n            Math.min(current, Math.max(remainingPinned.length - 1, 0)),\n          );\n        }\n\n        onPinChange?.(updated);\n        return updated;\n      });\n    },\n    [onPinChange],\n  );\n\n  const shufflePinned = useCallback(() => {\n    if (pinnedItems.length <= 1) return;\n    setActivePinnedIndex((i) => (i + 1) % pinnedItems.length);\n    onShuffle?.(pinnedItems[(activePinnedIndex + 1) % pinnedItems.length]);\n  }, [pinnedItems, activePinnedIndex, onShuffle]);\n\n  const currentHeroItem = pinnedItems[activePinnedIndex];\n\n  useEffect(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const checkScroll = () => {\n      const isAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 1;\n      setShowFade(!isAtBottom);\n    };\n\n    checkScroll();\n    el.addEventListener('scroll', checkScroll);\n    window.addEventListener('resize', checkScroll);\n\n    return () => {\n      el.removeEventListener('scroll', checkScroll);\n      window.removeEventListener('resize', checkScroll);\n    };\n  }, [items]);\n\n  return (\n    <div className=\"relative h-[500px] w-xs overflow-hidden rounded-4xl border border-[#E5E5E9] bg-[#fefefe] px-4 py-4 sm:w-sm dark:border-neutral-800 dark:bg-neutral-900\">\n      <MotionConfig transition={springConfig}>\n        <motion.div\n          ref={scrollRef}\n          layout\n          className=\"no-scrollbar relative h-full overflow-y-scroll scroll-smooth\"\n        >\n          <div className=\"space-y-2\">\n            <motion.div\n              layout\n              className=\"overflow-hidden\"\n              transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n            >\n              <AnimatePresence mode=\"popLayout\">\n                {pinnedItems.length > 0 && (\n                  <motion.div\n                    key=\"open\"\n                    layout\n                    initial={{ opacity: 0, scale: 0.8, y: -20 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    exit={{ opacity: 0, scale: 0.8, y: -20 }}\n                    className=\"flex cursor-pointer items-center justify-between rounded-full bg-[#F6F5FA] p-3 py-2 dark:bg-neutral-800\"\n                    onClick={shufflePinned}\n                  >\n                    <div className=\"flex min-w-0 flex-1 items-center gap-4\">\n                      <div className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-white dark:bg-neutral-700\">\n                        <Pin\n                          className=\"h-5 w-5 text-[#D9D9DF] dark:text-neutral-400\"\n                          fill=\"currentColor\"\n                        />\n                      </div>\n                      <AnimatePresence mode=\"popLayout\">\n                        <motion.span\n                          key={currentHeroItem?.id}\n                          initial={{\n                            opacity: 0,\n                            scale: 0.7,\n                            filter: 'blur(8px)',\n                          }}\n                          animate={{\n                            opacity: 1,\n                            scale: 1,\n                            filter: 'blur(0px)',\n                          }}\n                          exit={{ opacity: 0, scale: 0.7, filter: 'blur(8px)' }}\n                          transition={{\n                            duration: 0.6,\n                            type: 'spring',\n                            bounce: 0,\n                          }}\n                          className=\"truncate text-lg font-bold text-[#29292D] dark:text-neutral-100\"\n                        >\n                          {currentHeroItem?.text}\n                        </motion.span>\n                      </AnimatePresence>\n                    </div>\n\n                    {pinnedItems.length > 1 && (\n                      <motion.button\n                        whileTap={{ scale: 0.95 }}\n                        className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-[#fefefe] text-gray-400 dark:bg-neutral-700 dark:text-neutral-400\"\n                      >\n                        <ChevronsUpDown className=\"h-6 w-6\" />\n                      </motion.button>\n                    )}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </motion.div>\n\n            <motion.h1\n              layout\n              className=\"px-2 text-base font-semibold text-[#ADACB4] dark:text-neutral-500\"\n            >\n              Today\n            </motion.h1>\n\n            <div className=\"w-full space-y-1\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {items.map((item) => {\n                  const isHighlighted = currentHeroItem?.id === item.id;\n                  return (\n                    <motion.div\n                      layout\n                      key={item.id}\n                      initial={{ opacity: 0, scale: 0.9 }}\n                      animate={{\n                        opacity: 1,\n                        scale: isHighlighted ? [1, 1.03, 1] : 1,\n                      }}\n                      exit={{ opacity: 0, scale: 0.9 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 400,\n                        damping: 30,\n                        scale: { duration: 0.3 },\n                      }}\n                      className=\"group relative flex cursor-default items-center justify-between overflow-hidden rounded-full p-2 px-2 transition-colors hover:bg-[#F6F5FA] dark:hover:bg-neutral-800\"\n                    >\n                      {isHighlighted && (\n                        <motion.div\n                          initial={{ opacity: 0 }}\n                          animate={{ opacity: [0, 1, 0] }}\n                          transition={{ duration: 1, times: [0, 0.2, 1] }}\n                          className=\"pointer-events-none absolute inset-0 bg-[#F6F5FA] dark:bg-neutral-800\"\n                        />\n                      )}\n\n                      <div className=\"relative z-10 flex min-w-0 flex-1 items-center gap-4\">\n                        <div className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-full border border-[#E5E5E9] bg-[#FEFEFE] pl-0.5 dark:border-neutral-700 dark:bg-neutral-800\">\n                          <BsChatFill\n                            className=\"h-5 w-5 text-[#D5D4E0] dark:text-neutral-500\"\n                            fill=\"currentColor\"\n                          />\n                        </div>\n                        <span className=\"truncate font-bold text-[#262626] dark:text-neutral-100\">\n                          {item.text}\n                        </span>\n                      </div>\n\n                      <button\n                        title=\"pin\"\n                        type=\"button\"\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          togglePin(item.id);\n                        }}\n                        className={`relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full transition-all ${\n                          item.isPinned\n                            ? 'text-[#6B6A72] opacity-100 dark:text-neutral-400'\n                            : 'text-[#ADACB8] opacity-0 group-hover:opacity-80 hover:text-[#6A6970] dark:text-neutral-500 dark:hover:text-neutral-300'\n                        }`}\n                      >\n                        <Pin className=\"h-5 w-5\" fill=\"currentColor\" />\n                      </button>\n                    </motion.div>\n                  );\n                })}\n              </AnimatePresence>\n            </div>\n          </div>\n        </motion.div>\n      </MotionConfig>\n\n      <AnimatePresence>\n        {showFade && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className=\"pointer-events-none absolute right-0 bottom-0 left-0 z-20 h-20 rounded-b-[40px] bg-gradient-to-t from-[#fefefe] via-[#fefefe]/90 to-transparent backdrop-blur-[2px] dark:from-neutral-900 dark:via-neutral-900/90\"\n          />\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shuffle-pinned-item-base",
      "type": "registry:component",
      "title": "Shuffle Pinned List (base)",
      "description": "Theme-ready base variant of A dynamic list that promotes pinned items to a shuffleable hero header with spring animations and interactive pin toggles..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/shuffle-pinned-item.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n  type FC,\n} from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { Pin, ChevronsUpDown } from 'lucide-react';\nimport { BsChatFill } from 'react-icons/bs';\n\nexport interface ListItem {\n  id: string;\n  text: string;\n  isPinned: boolean;\n}\n\ninterface ShufflePinnedListProps {\n  items?: ListItem[];\n  onPinChange?: (updatedItems: ListItem[]) => void;\n  onShuffle?: (currentHeroItem?: ListItem) => void;\n}\n\nconst DEFAULT_ITEMS: ListItem[] = [\n  { id: '1', text: 'Daily Fitness Tracker', isPinned: false },\n  { id: '2', text: 'Voice Command Tips', isPinned: false },\n  { id: '3', text: 'iOS Shortcuts Guide', isPinned: false },\n  { id: '4', text: 'Focus Mode Ideas', isPinned: false },\n  { id: '5', text: '50 Productivity Hacks', isPinned: false },\n  { id: '6', text: 'Lunch Recipe Ideas', isPinned: false },\n  { id: '7', text: 'Snack Ideas For Kids', isPinned: false },\n];\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 400,\n  damping: 40,\n};\n\nexport const ShufflePinnedList: FC<ShufflePinnedListProps> = ({\n  items: propItems,\n  onPinChange,\n  onShuffle,\n}) => {\n  const [items, setItems] = useState<ListItem[]>(propItems ?? DEFAULT_ITEMS);\n  const [activePinnedIndex, setActivePinnedIndex] = useState<number>(0);\n  const [showFade, setShowFade] = useState(false);\n\n  const scrollRef = useRef<HTMLDivElement>(null);\n\n  const pinnedItems = useMemo(\n    () => items.filter((item) => item.isPinned),\n    [items],\n  );\n\n  const togglePin = useCallback(\n    (id: string) => {\n      setItems((prev) => {\n        const updated = prev.map((item) =>\n          item.id === id ? { ...item, isPinned: !item.isPinned } : item,\n        );\n\n        const toggledItem = prev.find((i) => i.id === id);\n\n        if (!toggledItem?.isPinned) {\n          const newPinnedItems = updated.filter((i) => i.isPinned);\n          const newIndex = newPinnedItems.findIndex((i) => i.id === id);\n          setActivePinnedIndex(newIndex);\n        }\n\n        if (toggledItem?.isPinned) {\n          const remainingPinned = updated.filter((i) => i.isPinned);\n          setActivePinnedIndex((current) =>\n            Math.min(current, Math.max(remainingPinned.length - 1, 0)),\n          );\n        }\n\n        onPinChange?.(updated);\n        return updated;\n      });\n    },\n    [onPinChange],\n  );\n\n  const shufflePinned = useCallback(() => {\n    if (pinnedItems.length <= 1) return;\n    setActivePinnedIndex((i) => (i + 1) % pinnedItems.length);\n    onShuffle?.(pinnedItems[(activePinnedIndex + 1) % pinnedItems.length]);\n  }, [pinnedItems, activePinnedIndex, onShuffle]);\n\n  const currentHeroItem = pinnedItems[activePinnedIndex];\n\n  useEffect(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const checkScroll = () => {\n      const isAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 1;\n      setShowFade(!isAtBottom);\n    };\n\n    checkScroll();\n    el.addEventListener('scroll', checkScroll);\n    window.addEventListener('resize', checkScroll);\n\n    return () => {\n      el.removeEventListener('scroll', checkScroll);\n      window.removeEventListener('resize', checkScroll);\n    };\n  }, [items]);\n\n  return (\n    <div className=\"relative h-[500px] w-xs overflow-hidden rounded-4xl border border-border bg-card text-card-foreground shadow-sm px-4 py-4 sm:w-sm\">\n      <MotionConfig transition={springConfig}>\n        <motion.div\n          ref={scrollRef}\n          layout\n          className=\"no-scrollbar relative h-full overflow-y-scroll scroll-smooth\"\n        >\n          <div className=\"space-y-2\">\n            <motion.div\n              layout\n              className=\"overflow-hidden\"\n              transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n            >\n              <AnimatePresence mode=\"popLayout\">\n                {pinnedItems.length > 0 && (\n                  <motion.div\n                    key=\"open\"\n                    layout\n                    initial={{ opacity: 0, scale: 0.8, y: -20 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    exit={{ opacity: 0, scale: 0.8, y: -20 }}\n                    className=\"flex cursor-pointer items-center justify-between rounded-full bg-primary text-primary-foreground shadow-sm p-3 py-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n                    onClick={shufflePinned}\n                  >\n                    <div className=\"flex min-w-0 flex-1 items-center gap-4\">\n                      <div className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-primary-foreground/20 text-primary-foreground\">\n                        <Pin\n                          className=\"h-5 w-5\"\n                          fill=\"currentColor\"\n                        />\n                      </div>\n                      <AnimatePresence mode=\"popLayout\">\n                        <motion.span\n                          key={currentHeroItem?.id}\n                          initial={{\n                            opacity: 0,\n                            scale: 0.7,\n                            filter: 'blur(8px)',\n                          }}\n                          animate={{\n                            opacity: 1,\n                            scale: 1,\n                            filter: 'blur(0px)',\n                          }}\n                          exit={{ opacity: 0, scale: 0.7, filter: 'blur(8px)' }}\n                          transition={{\n                            duration: 0.6,\n                            type: 'spring',\n                            bounce: 0,\n                          }}\n                          className=\"truncate text-lg font-bold text-primary-foreground\"\n                        >\n                          {currentHeroItem?.text}\n                        </motion.span>\n                      </AnimatePresence>\n                    </div>\n\n                    {pinnedItems.length > 1 && (\n                      <motion.button\n                        whileTap={{ scale: 0.95 }}\n                        className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-primary-foreground/20 text-primary-foreground hover:bg-primary-foreground/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n                      >\n                        <ChevronsUpDown className=\"h-6 w-6\" />\n                      </motion.button>\n                    )}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </motion.div>\n\n            <motion.h1\n              layout\n              className=\"px-2 text-base font-semibold text-muted-foreground\"\n            >\n              Today\n            </motion.h1>\n\n            <div className=\"w-full space-y-1\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                {items.map((item) => {\n                  const isHighlighted = currentHeroItem?.id === item.id;\n                  return (\n                    <motion.div\n                      layout\n                      key={item.id}\n                      initial={{ opacity: 0, scale: 0.9 }}\n                      animate={{\n                        opacity: 1,\n                        scale: isHighlighted ? [1, 1.03, 1] : 1,\n                      }}\n                      exit={{ opacity: 0, scale: 0.9 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 400,\n                        damping: 30,\n                        scale: { duration: 0.3 },\n                      }}\n                      className=\"group relative flex cursor-default items-center justify-between overflow-hidden rounded-full p-2 px-2 transition-colors hover:bg-accent hover:text-accent-foreground\"\n                    >\n                      {isHighlighted && (\n                        <motion.div\n                          initial={{ opacity: 0 }}\n                          animate={{ opacity: [0, 1, 0] }}\n                          transition={{ duration: 1, times: [0, 0.2, 1] }}\n                          className=\"pointer-events-none absolute inset-0 bg-accent\"\n                        />\n                      )}\n\n                      <div className=\"relative z-10 flex min-w-0 flex-1 items-center gap-4\">\n                        <div className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-full border border-border bg-muted pl-0.5 group-hover:bg-background transition-colors\">\n                          <BsChatFill\n                            className=\"h-5 w-5 text-muted-foreground group-hover:text-accent-foreground transition-colors\"\n                            fill=\"currentColor\"\n                          />\n                        </div>\n                        <span className=\"truncate font-bold\">\n                          {item.text}\n                        </span>\n                      </div>\n\n                      <button\n                        title=\"pin\"\n                        type=\"button\"\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          togglePin(item.id);\n                        }}\n                        className={`relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${\n                          item.isPinned\n                            ? 'text-primary opacity-100'\n                            : 'text-muted-foreground opacity-0 group-hover:opacity-80 hover:text-primary hover:bg-primary/10'\n                        }`}\n                      >\n                        <Pin className=\"h-5 w-5\" fill=\"currentColor\" />\n                      </button>\n                    </motion.div>\n                  );\n                })}\n              </AnimatePresence>\n            </div>\n          </div>\n        </motion.div>\n      </MotionConfig>\n\n      <AnimatePresence>\n        {showFade && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className=\"pointer-events-none absolute right-0 bottom-0 left-0 z-20 h-20 rounded-b-[40px] bg-gradient-to-t from-card via-card/90 to-transparent backdrop-blur-[2px]\"\n          />\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "slot-picker",
      "type": "registry:component",
      "title": "Slot Picker",
      "description": "A premium scheduling component for managing time slots with fluid spring animations and tactile toggles.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/slot-picker.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Plus, X } from 'lucide-react';\n\ninterface TimeSlot {\n    id: string;\n    from: string;\n    to: string;\n}\n\ninterface DayData {\n    id: string;\n    label: string;\n    enabled: boolean;\n    slots: TimeSlot[];\n}\n\ninterface SlotPickerProps {\n    days: DayData[];\n    onUpdate?: (days: DayData[]) => void;\n}\n\nconst springConfig = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 30,\n    mass: 1\n} as const;\n\nexport const SlotPicker = ({ days: initialDays, onUpdate }: SlotPickerProps) => {\n    const [days, setDays] = useState<DayData[]>(initialDays);\n\n\n    const updateSlotValue = (dayId: string, slotId: string, field: 'from' | 'to', value: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === dayId) {\n                return {\n                    ...day,\n                    slots: day.slots.map((slot) =>\n                        slot.id === slotId ? { ...slot, [field]: value } : slot\n                    ),\n                };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    const toggleDay = (id: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === id) {\n                const enabled = !day.enabled;\n                const slots = enabled && day.slots.length === 0\n                    ? [{ id: Math.random().toString(), from: '7:00 AM', to: '8:00 AM' }]\n                    : day.slots;\n                return { ...day, enabled, slots };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    const addSlot = (dayId: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === dayId) {\n                return {\n                    ...day,\n                    slots: [...day.slots, { id: Math.random().toString(), from: '9:00 AM', to: '10:00 AM' }]\n                };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    const removeSlot = (dayId: string, slotId: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === dayId) {\n                const filteredSlots = day.slots.filter(s => s.id !== slotId);\n                return {\n                    ...day,\n                    slots: filteredSlots,\n                    enabled: filteredSlots.length > 0\n                };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    return (\n        <div className=\"flex flex-col gap-4 w-xs sm:w-sm px-3 py-1.5\">\n            <LayoutGroup>\n                {days.map((day) => (\n                    <motion.div\n                        layout\n                        key={day.id}\n                        initial={false}\n                        transition={springConfig}\n                        className={`overflow-hidden rounded-[16px] transition-colors duration-300 border-[1.6px] ${day.enabled\n                            ? 'bg-white border-[#E6E6E9] shadow-sm dark:bg-[#1C1C1F] dark:border-[#2C2C30] dark:shadow-lg'\n                            : 'bg-[#F6F5FA] border-transparent dark:bg-[#161618]'\n                            }`}\n                    >\n                        {/* Header */}\n                        <motion.div layout transition={springConfig} className=\"flex items-center justify-between px-5 h-[56px]\">\n                            <span className=\"text-[16px] font-semibold transition-colors text-[#68686F] dark:text-[#E1E1E6]\">\n                                {day.label}\n                            </span>\n\n                            <button title='switch'\n                                onClick={() => toggleDay(day.id)}\n                                className={`relative w-12 h-7 rounded-full transition-colors shadow-sm duration-300 ${day.enabled ? 'bg-[#515158] dark:bg-[#4B4B52]' : 'bg-[#E5E4EE] dark:bg-[#2C2C30]'}`}\n                            >\n                                <motion.div\n                                    layout\n                                    className=\"absolute top-1 left-1 w-5 h-5 bg-white rounded-full shadow-sm\"\n                                    animate={{ x: day.enabled ? 20 : 0 }}\n                                    transition={springConfig}\n                                />\n                            </button>\n                        </motion.div>\n\n                        {/* Slots Area */}\n                        <AnimatePresence>\n                            {day.enabled && (\n                                <motion.div\n                                    initial={{ height: 0, opacity: 0 }}\n                                    animate={{ height: 'auto', opacity: 1 }}\n                                    exit={{ height: 0, opacity: 0 }}\n                                    transition={springConfig}\n                                >\n                                    <div className=\"px-5 pb-5 flex flex-col gap-3\">\n                                        <AnimatePresence mode=\"popLayout\">\n                                            {day.slots.map((slot) => (\n                                                <motion.div\n                                                    key={slot.id}\n                                                    layout\n                                                    initial={{ opacity: 0, scale: 0.9, y: -10 }}\n                                                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                                                    exit={{ opacity: 0, scale: 0.9, y: -10 }}\n                                                    transition={springConfig}\n                                                    className=\"flex items-center gap-2\"\n                                                >\n                                                    <div className=\"flex items-center gap-2 flex-1\">\n                                                        <span className=\"text-[13px] w-8 text-[#ADACB3] dark:text-[#7C7C85]\">From</span>\n                                                        <input\n                                                            type=\"text\"\n                                                            value={slot.from}\n                                                            onChange={(e) => updateSlotValue(day.id, slot.id, 'from', e.target.value)}\n                                                            aria-label=\"Start time\"\n                                                            className=\"flex-1 w-24 border-[1.6px] rounded-md px-2 py-1 text-[14px] font-medium focus:outline-none uppercase transition-colors bg-[#FEFEFE] border-[#F0EFF3] text-[#6D6C71] focus:border-[#ADACB3] dark:bg-[#121214] dark:border-[#2C2C30] dark:text-[#E1E1E6] dark:focus:border-[#4B4B52]\"\n                                                        />\n\n                                                        <span className=\"text-[13px] text-[#ADACB3] dark:text-[#7C7C85]\">To</span>\n                                                        <input\n                                                            type=\"text\"\n                                                            value={slot.to}\n                                                            aria-label=\"End time\"\n                                                            onChange={(e) => updateSlotValue(day.id, slot.id, 'to', e.target.value)}\n                                                            className=\"flex-1 w-24 border-[1.6px] rounded-md px-2 py-1 text-[14px] font-medium focus:outline-none uppercase transition-colors bg-[#FEFEFE] border-[#F0EFF3] text-[#6D6C71] focus:border-[#ADACB3] dark:bg-[#121214] dark:border-[#2C2C30] dark:text-[#E1E1E6] dark:focus:border-[#4B4B52]\"\n                                                        />\n                                                    </div>\n                                                    <button title='close'\n                                                        onClick={() => removeSlot(day.id, slot.id)}\n                                                        className=\"p-2 transition-colors duration-300 rounded-md text-[#ADACB3] bg-[#F6F5FA] hover:bg-[#d1d0d4]/40 hover:text-[#9f9ea4] dark:text-[#7C7C85] dark:bg-[#2C2C30] dark:hover:bg-[#3A3A40] dark:hover:text-[#E1E1E6]\"\n                                                    >\n                                                        <X strokeWidth={2} size={18} />\n                                                    </button>\n                                                </motion.div>\n                                            ))}\n                                        </AnimatePresence>\n\n                                        <motion.button\n                                            layout\n                                            transition={springConfig}\n                                            onClick={() => addSlot(day.id)}\n                                            className=\"flex items-center justify-center gap-2.5 w-full py-1.5 mt-1 border-[1.2px] rounded-md text-[14px] font-semibold transition-colors duration-300 bg-[#F6F5FA] border-[#F5F4F9] text-[#6E6D74] hover:bg-[#efeded] dark:bg-[#2C2C30] dark:border-[#3A3A40] dark:text-[#E1E1E6] dark:hover:bg-[#3A3A40]\"\n                                        >\n                                            <Plus size={16} className=\"text-[#6E6D74] dark:text-[#E1E1E6]\" />\n                                            Add More\n                                        </motion.button>\n                                    </div>\n                                </motion.div>\n                            )}\n                        </AnimatePresence>\n                    </motion.div>\n                ))}\n            </LayoutGroup>\n        </div>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "slot-picker-base",
      "type": "registry:component",
      "title": "Slot Picker (base)",
      "description": "Theme-ready base variant of A premium scheduling component for managing time slots with fluid spring animations and tactile toggles..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/slot-picker.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { Plus, X } from 'lucide-react';\n\ninterface TimeSlot {\n    id: string;\n    from: string;\n    to: string;\n}\n\ninterface DayData {\n    id: string;\n    label: string;\n    enabled: boolean;\n    slots: TimeSlot[];\n}\n\ninterface SlotPickerProps {\n    days: DayData[];\n    onUpdate?: (days: DayData[]) => void;\n}\n\nconst springConfig = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 30,\n    mass: 1\n} as const;\n\nexport const SlotPicker = ({ days: initialDays, onUpdate }: SlotPickerProps) => {\n    const [days, setDays] = useState<DayData[]>(initialDays);\n\n\n    const updateSlotValue = (dayId: string, slotId: string, field: 'from' | 'to', value: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === dayId) {\n                return {\n                    ...day,\n                    slots: day.slots.map((slot) =>\n                        slot.id === slotId ? { ...slot, [field]: value } : slot\n                    ),\n                };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    const toggleDay = (id: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === id) {\n                const enabled = !day.enabled;\n                const slots = enabled && day.slots.length === 0\n                    ? [{ id: Math.random().toString(), from: '7:00 AM', to: '8:00 AM' }]\n                    : day.slots;\n                return { ...day, enabled, slots };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    const addSlot = (dayId: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === dayId) {\n                return {\n                    ...day,\n                    slots: [...day.slots, { id: Math.random().toString(), from: '9:00 AM', to: '10:00 AM' }]\n                };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    const removeSlot = (dayId: string, slotId: string) => {\n        const newDays = days.map((day) => {\n            if (day.id === dayId) {\n                const filteredSlots = day.slots.filter(s => s.id !== slotId);\n                return {\n                    ...day,\n                    slots: filteredSlots,\n                    enabled: filteredSlots.length > 0\n                };\n            }\n            return day;\n        });\n        setDays(newDays);\n        onUpdate?.(newDays);\n    };\n\n    return (\n        <div className=\"flex flex-col gap-4 w-xs sm:w-sm px-3 py-1.5 theme-injected font-sans\">\n            <LayoutGroup>\n                {days.map((day) => (\n                    <motion.div\n                        layout\n                        key={day.id}\n                        initial={false}\n                        transition={springConfig}\n                        className={`overflow-hidden rounded-3xl transition-colors duration-300 border-[1.6px] ${day.enabled\n                            ? 'bg-card border-border shadow-sm'\n                            : 'bg-muted border-transparent'\n                            }`}\n                    >\n                        {/* Header */}\n                        <motion.div layout transition={springConfig} className=\"flex items-center justify-between px-5 h-14\">\n                            <span className=\"font-sans text-[16px] font-semibold transition-colors text-foreground\">\n                                {day.label}\n                            </span>\n\n                            <button title='switch'\n                                onClick={() => toggleDay(day.id)}\n                                className={`relative w-12 h-7 rounded-full transition-colors shadow-sm duration-300 ${day.enabled ? 'bg-primary' : 'bg-input'}`}\n                            >\n                                <motion.div\n                                    layout\n                                    className=\"absolute top-1 left-1 w-5 h-5 bg-background rounded-full shadow-sm\"\n                                    animate={{ x: day.enabled ? 20 : 0 }}\n                                    transition={springConfig}\n                                />\n                            </button>\n                        </motion.div>\n\n                        {/* Slots Area */}\n                        <AnimatePresence>\n                            {day.enabled && (\n                                <motion.div\n                                    initial={{ height: 0, opacity: 0 }}\n                                    animate={{ height: 'auto', opacity: 1 }}\n                                    exit={{ height: 0, opacity: 0 }}\n                                    transition={springConfig}\n                                >\n                                    <div className=\"px-5 pb-5 flex flex-col gap-3\">\n                                        <AnimatePresence mode=\"popLayout\">\n                                            {day.slots.map((slot) => (\n                                                <motion.div\n                                                    key={slot.id}\n                                                    layout\n                                                    initial={{ opacity: 0, scale: 0.9, y: -10 }}\n                                                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                                                    exit={{ opacity: 0, scale: 0.9, y: -10 }}\n                                                    transition={springConfig}\n                                                    className=\"flex items-center gap-2\"\n                                                >\n                                                    <div className=\"flex items-center gap-2 flex-1\">\n                                                        <span className=\"font-sans text-[13px] w-8 text-muted-foreground\">From</span>\n                                                        <input\n                                                            type=\"text\"\n                                                            value={slot.from}\n                                                            onChange={(e) => updateSlotValue(day.id, slot.id, 'from', e.target.value)}\n                                                            aria-label=\"Start time\"\n                                                            className=\"font-sans flex-1 w-24 border-[1.6px] rounded-md px-2 py-1 text-[14px] font-medium focus:outline-none uppercase transition-colors bg-input border-border text-foreground focus:border-ring\"\n                                                        />\n\n                                                        <span className=\"font-sans text-[13px] text-muted-foreground\">To</span>\n                                                        <input\n                                                            type=\"text\"\n                                                            value={slot.to}\n                                                            aria-label=\"End time\"\n                                                            onChange={(e) => updateSlotValue(day.id, slot.id, 'to', e.target.value)}\n                                                            className=\"font-sans flex-1 w-24 border-[1.6px] rounded-md px-2 py-1 text-[14px] font-medium focus:outline-none uppercase transition-colors bg-input border-border text-foreground focus:border-ring\"\n                                                        />\n                                                    </div>\n                                                    <button title='close'\n                                                        onClick={() => removeSlot(day.id, slot.id)}\n                                                        className=\"p-2 transition-colors duration-300 rounded-md text-muted-foreground bg-muted hover:bg-background hover:text-foreground\"\n                                                    >\n                                                        <X strokeWidth={2} size={18} />\n                                                    </button>\n                                                </motion.div>\n                                            ))}\n                                        </AnimatePresence>\n\n                                        <motion.button\n                                            layout\n                                            transition={springConfig}\n                                            onClick={() => addSlot(day.id)}\n                                            className=\"font-sans flex items-center justify-center gap-2.5 w-full py-1.5 mt-1 border-[1.2px] rounded-md text-[14px] font-semibold transition-colors duration-300 bg-muted border-border text-muted-foreground hover:bg-background hover:text-foreground\"\n                                        >\n                                            <Plus size={16} className=\"text-muted-foreground\" />\n                                            Add More\n                                        </motion.button>\n                                    </div>\n                                </motion.div>\n                            )}\n                        </AnimatePresence>\n                    </motion.div>\n                ))}\n            </LayoutGroup>\n        </div>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-actions",
      "type": "registry:component",
      "title": "Split Actions",
      "description": "Interactive micro-interaction component for split actions.",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/split-actions.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { cn } from '@/lib/utils';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { type LucideIcon, Plus } from 'lucide-react';\nimport { useLayoutEffect, useRef, useState } from 'react';\n\ninterface Action {\n  icon: LucideIcon;\n  label: string;\n}\n\ninterface SplitActionsProps {\n  actions: Action[];\n  triggerIcon?: LucideIcon;\n}\n\nexport default function SplitActions({\n  actions,\n  triggerIcon: TriggerIcon = Plus,\n}: SplitActionsProps) {\n  const [isOpen, setIsOpen] = useState(false);\n\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n  const [positions, setPositions] = useState<number[]>([]);\n\n  useLayoutEffect(() => {\n    if (!isOpen) return;\n\n    const GAP = 8;\n\n    const calculatePositions = () => {\n      const widths = buttonRefs.current.map(\n        (button) => button?.offsetWidth ?? 0,\n      );\n\n      const totalWidth =\n        widths.reduce((sum, width) => sum + width, 0) +\n        GAP * (widths.length - 1);\n\n      let cursor = -totalWidth / 2;\n\n      const newPositions = widths.map((width) => {\n        const center = cursor + width / 2;\n        cursor += width + GAP;\n        return center;\n      });\n\n      setPositions(newPositions);\n    };\n\n    requestAnimationFrame(calculatePositions);\n\n    window.addEventListener('resize', calculatePositions);\n\n    return () => {\n      window.removeEventListener('resize', calculatePositions);\n    };\n  }, [actions, isOpen]);\n\n  return (\n    <div className=\"flex h-screen w-full items-center justify-center\">\n      <div\n        className=\"relative flex min-h-14 min-w-14 items-center justify-center\"\n        onClick={() => setIsOpen((prev) => !prev)}\n      >\n        <AnimatePresence mode=\"wait\">\n          {!isOpen && (\n            <motion.button\n              key=\"trigger\"\n              whileTap={{ scale: 1.15 }}\n              initial={{\n                scale: 0.5,\n                opacity: 0,\n                filter: 'blur(8px)',\n              }}\n              animate={{\n                scale: 1,\n                opacity: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                scale: 0.5,\n                opacity: 0,\n                filter: 'blur(8px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 220,\n                damping: 24,\n              }}\n              className=\"rounded-full bg-black p-2 text-white dark:bg-white dark:text-black\"\n            >\n              <TriggerIcon className=\"size-8 stroke-[3]\" />\n            </motion.button>\n          )}\n        </AnimatePresence>\n\n        <AnimatePresence mode=\"wait\">\n          {isOpen &&\n            actions.map((action, index) => (\n              <motion.button\n                key={action.label}\n                ref={(el) => {\n                  buttonRefs.current[index] = el;\n                }}\n                initial={{\n                  x: 0,\n                  scale: 0,\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                }}\n                animate={{\n                  x: positions[index] ?? 0,\n                  scale: 1,\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  x: 0,\n                  scale: 0.5,\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 220,\n                  damping: 24,\n                }}\n                className={cn(\n                  'absolute flex items-center gap-2 rounded-full bg-zinc-100 px-4 py-2 text-zinc-900',\n                  (positions[index] ?? 0) < 0 ? 'origin-right' : 'origin-left',\n                )}\n              >\n                <action.icon className=\"size-4 stroke-2\" />\n                <span className=\"text-lg font-medium\">{action.label}</span>\n              </motion.button>\n            ))}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-actions-base",
      "type": "registry:component",
      "title": "Split Actions (base)",
      "description": "Theme-ready base variant of Interactive micro-interaction component for split actions..",
      "dependencies": [
        "framer-motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/split-actions.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { cn } from '@/lib/utils';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { type LucideIcon, Plus } from 'lucide-react';\nimport { useLayoutEffect, useRef, useState } from 'react';\n\ninterface Action {\n  icon: LucideIcon;\n  label: string;\n}\n\ninterface SplitActionsProps {\n  actions: Action[];\n  triggerIcon?: LucideIcon;\n}\n\nexport default function SplitActions({\n  actions,\n  triggerIcon: TriggerIcon = Plus,\n}: SplitActionsProps) {\n  const [isOpen, setIsOpen] = useState(false);\n\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n  const [positions, setPositions] = useState<number[]>([]);\n\n  useLayoutEffect(() => {\n    if (!isOpen) return;\n\n    const GAP = 8;\n\n    const calculatePositions = () => {\n      const widths = buttonRefs.current.map(\n        (button) => button?.offsetWidth ?? 0,\n      );\n\n      const totalWidth =\n        widths.reduce((sum, width) => sum + width, 0) +\n        GAP * (widths.length - 1);\n\n      let cursor = -totalWidth / 2;\n\n      const newPositions = widths.map((width) => {\n        const center = cursor + width / 2;\n        cursor += width + GAP;\n        return center;\n      });\n\n      setPositions(newPositions);\n    };\n\n    requestAnimationFrame(calculatePositions);\n\n    window.addEventListener('resize', calculatePositions);\n\n    return () => {\n      window.removeEventListener('resize', calculatePositions);\n    };\n  }, [actions, isOpen]);\n\n  return (\n    <div className=\"theme-injected flex h-screen w-full items-center justify-center\">\n      <div\n        className=\"relative flex min-h-14 min-w-14 items-center justify-center\"\n        onClick={() => setIsOpen((prev) => !prev)}\n      >\n        <AnimatePresence mode=\"wait\">\n          {!isOpen && (\n            <motion.button\n              key=\"trigger\"\n              whileTap={{ scale: 1.15 }}\n              initial={{\n                scale: 0.5,\n                opacity: 0,\n                filter: 'blur(8px)',\n              }}\n              animate={{\n                scale: 1,\n                opacity: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                scale: 0.5,\n                opacity: 0,\n                filter: 'blur(8px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 220,\n                damping: 24,\n              }}\n              className=\"bg-primary text-primary-foreground rounded-full p-2\"\n            >\n              <TriggerIcon className=\"size-8 stroke-[3]\" />\n            </motion.button>\n          )}\n        </AnimatePresence>\n\n        <AnimatePresence mode=\"wait\">\n          {isOpen &&\n            actions.map((action, index) => (\n              <motion.button\n                key={action.label}\n                ref={(el) => {\n                  buttonRefs.current[index] = el;\n                }}\n                initial={{\n                  x: 0,\n                  scale: 0,\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                }}\n                animate={{\n                  x: positions[index] ?? 0,\n                  scale: 1,\n                  opacity: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  x: 0,\n                  scale: 0.5,\n                  opacity: 0,\n                  filter: 'blur(8px)',\n                }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 220,\n                  damping: 24,\n                }}\n                className={cn(\n                  'border-border bg-card text-card-foreground absolute flex items-center gap-2 rounded-full border px-4 py-2',\n                  (positions[index] ?? 0) < 0 ? 'origin-right' : 'origin-left',\n                )}\n              >\n                <action.icon className=\"size-4 stroke-2\" />\n                <span className=\"text-lg font-medium\">{action.label}</span>\n              </motion.button>\n            ))}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-button",
      "type": "registry:component",
      "title": "Split Button",
      "description": "A premium split button component with spring-driven layout transitions and tactile expansion behavior for quick multi-action workflows.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/split-button.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { type JSX, useState } from 'react';\nimport { motion, type Transition } from 'motion/react';\nimport { ArrowLeft01Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nconst SPRING: Transition = {\n  type: 'spring',\n  bounce: 0.55,\n  duration: 1,\n};\n\nexport interface SplitButtonProps {\n  mainButton?: string;\n  buttons?: string[];\n}\n\nexport default function SplitButton({\n  mainButton = 'New Project',\n  buttons = ['iOS', 'macOS', 'tvOS'],\n}: SplitButtonProps = {}): JSX.Element {\n  const [open, setOpen] = useState<boolean>(false);\n\n  return (\n    <div className=\"relative flex min-h-[60px] w-full items-center justify-center font-semibold\">\n      {/* MAIN BUTTON */}\n      <motion.button\n        layout\n        transition={SPRING}\n        onClick={() => setOpen(true)}\n        className=\"absolute z-10 rounded-full bg-neutral-200 whitespace-nowrap px-8 py-3 tracking-tight text-neutral-700 dark:bg-neutral-800 dark:text-neutral-200\"\n        initial={false}\n        animate={{\n          scaleX: open ? 1.5 : 1,\n          scaleY: open ? 0.9 : 1,\n          opacity: open ? 0 : 1,\n          filter: open ? 'blur(8px)' : 'blur(0px)',\n          pointerEvents: open ? 'none' : 'auto',\n        }}\n        whileHover={{ scale: 1 }}\n        whileTap={{ scale: 1.15 }}\n      >\n        {mainButton}\n      </motion.button>\n\n      {/* SPLIT ROW */}\n      <motion.div\n        layout\n        transition={SPRING}\n        className=\"absolute z-0 flex items-center justify-center gap-2\"\n        initial={false}\n        animate={{\n          scaleX: open ? 1 : 0.2,\n          scaleY: open ? 1 : 0.9,\n          opacity: open ? 1 : 0,\n          filter: open ? 'blur(0px)' : 'blur(8px)',\n          pointerEvents: open ? 'auto' : 'none',\n        }}\n      >\n        {/* BACK BUTTON */}\n        <motion.button\n          onClick={() => setOpen(false)}\n          className=\"flex items-center justify-center rounded-full bg-neutral-200 p-3 tracking-tight text-neutral-700 dark:bg-neutral-800 dark:text-neutral-200\"\n          whileHover={{ scale: 1 }}\n          whileTap={{ scale: 1.15 }}\n        >\n          <HugeiconsIcon icon={ArrowLeft01Icon} />\n        </motion.button>\n\n        {buttons.map((name, index) => {\n          return (\n            <motion.button\n              key={index}\n              onClick={() => {\n                setOpen(false);\n              }}\n              className=\"rounded-full bg-neutral-200 px-6 py-3 tracking-tight text-neutral-700 dark:bg-neutral-800 dark:text-neutral-200\"\n              whileHover={{ scale: 1 }}\n              whileTap={{ scale: 1.05 }}\n            >\n              {name}\n            </motion.button>\n          );\n        })}\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-button-base",
      "type": "registry:component",
      "title": "Split Button (base)",
      "description": "Theme-ready base variant of A premium split button component with spring-driven layout transitions and tactile expansion behavior for quick multi-action workflows..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/split-button.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { type JSX, useState } from 'react';\nimport { motion, type Transition } from 'motion/react';\nimport { ArrowLeft01Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nconst SPRING: Transition = {\n  type: 'spring',\n  bounce: 0.55,\n  duration: 1,\n};\n\nexport interface SplitButtonProps {\n  mainButton?: string;\n  buttons?: string[];\n}\n\nexport default function SplitButton({\n  mainButton = 'New Project',\n  buttons = ['iOS', 'macOS', 'tvOS'],\n}: SplitButtonProps = {}): JSX.Element {\n  const [open, setOpen] = useState<boolean>(false);\n\n  return (\n    <div className=\"relative flex min-h-[60px] w-full items-center justify-center font-semibold\">\n      <motion.button\n        layout\n        transition={SPRING}\n        onClick={() => setOpen(true)}\n        className=\"bg-muted text-muted-foreground border border-border absolute z-10 rounded-lg px-8 py-3 tracking-tight whitespace-nowrap\"\n        initial={false}\n        animate={{\n          scaleX: open ? 1.5 : 1,\n          scaleY: open ? 0.9 : 1,\n          opacity: open ? 0 : 1,\n          filter: open ? 'blur(8px)' : 'blur(0px)',\n          pointerEvents: open ? 'none' : 'auto',\n        }}\n        whileHover={{ scale: 1 }}\n        whileTap={{ scale: 1.15 }}\n      >\n        {mainButton}\n      </motion.button>\n\n      <motion.div\n        layout\n        transition={SPRING}\n        className=\"absolute z-0 flex items-center justify-center gap-2\"\n        initial={false}\n        animate={{\n          scaleX: open ? 1 : 0.2,\n          scaleY: open ? 1 : 0.9,\n          opacity: open ? 1 : 0,\n          filter: open ? 'blur(0px)' : 'blur(8px)',\n          pointerEvents: open ? 'auto' : 'none',\n        }}\n      >\n        <motion.button\n          onClick={() => setOpen(false)}\n          className=\"bg-muted text-muted-foreground border border-border flex items-center justify-center rounded-lg p-3 tracking-tight\"\n          whileHover={{ scale: 1 }}\n          whileTap={{ scale: 1.15 }}\n        >\n          <HugeiconsIcon icon={ArrowLeft01Icon} />\n        </motion.button>\n\n        {buttons.map((name, index) => {\n          return (\n            <motion.button\n              key={index}\n              onClick={() => {\n                setOpen(false);\n              }}\n              className=\"bg-muted text-muted-foreground border border-border rounded-lg px-6 py-3 tracking-tight\"\n              whileHover={{ scale: 1 }}\n              whileTap={{ scale: 1.05 }}\n            >\n              {name}\n            </motion.button>\n          );\n        })}\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-to-edit",
      "type": "registry:component",
      "title": "Split To edit",
      "description": "An animated input field that smoothly splits into editable segments during interaction",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/split-to-edit.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { Check, Pencil } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface SplitToEditProps {\n  initialHours?: number;\n  initialMinutes?: number;\n  onSave?: (hours: number, minutes: number) => void;\n}\n\nconst layoutConfig: Transition = {\n  type: 'spring',\n  stiffness: 450,\n  damping: 25,\n  mass: 2\n};\n\nconst collapsedConfig: Transition = {\n  type: 'spring',\n  stiffness: 450,\n  damping: 25,\n  mass: 1\n};\n\nexport const SplitToEdit: FC<SplitToEditProps> = ({\n  initialHours = 2,\n  initialMinutes = 30,\n  onSave,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const [hours, setHours] = useState<number>(initialHours);\n  const [minutes, setMinutes] = useState<number>(initialMinutes);\n\n  const [tempHours, setTempHours] = useState<string>(String(initialHours));\n  const [tempMinutes, setTempMinutes] = useState<string>(\n    String(initialMinutes),\n  );\n\n  const hoursInputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    requestAnimationFrame(() => {\n      setHours(initialHours);\n      setMinutes(initialMinutes);\n      setTempHours(String(initialHours));\n      setTempMinutes(String(initialMinutes));\n    });\n  }, [initialHours, initialMinutes]);\n\n  useEffect(() => {\n    if (isExpanded) {\n      const t = setTimeout(() => {\n        hoursInputRef.current?.focus();\n        hoursInputRef.current?.select();\n      }, 50);\n      return () => clearTimeout(t);\n    }\n  }, [isExpanded]);\n\n  const handleEdit = () => {\n    setTempHours(String(hours));\n    setTempMinutes(String(minutes));\n    setIsExpanded(true);\n  };\n\n  const handleSave = () => {\n    const h = Math.max(0, parseInt(tempHours) || 0);\n    const m = Math.min(59, Math.max(0, parseInt(tempMinutes) || 0));\n\n    setHours(h);\n    setMinutes(m);\n\n    setTempHours(String(h));\n    setTempMinutes(String(m));\n\n    setIsExpanded(false);\n\n    onSave?.(h, m);\n  };\n\n\n  const handleKeyPress = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter') handleSave();\n    if (e.key === 'Escape') setIsExpanded(false);\n  };\n\n  return (\n    <MotionConfig transition={isExpanded ? layoutConfig : collapsedConfig}>\n      <motion.div\n        layout\n        className={cn(\n          'flex items-center font-mono ',\n          isExpanded && 'gap-4',\n        )}\n      >\n        <motion.div\n          layout\n          animate={{\n            borderTopLeftRadius: 8,\n            borderBottomLeftRadius: 8,\n            borderTopRightRadius: isExpanded ? 8 : 0,\n            borderBottomRightRadius: isExpanded ? 8 : 0,\n          }}\n          className={cn(\n            'flex cursor-pointer items-center justify-end gap-1 bg-zinc-100 px-1 pl-2 dark:bg-zinc-800',\n            isExpanded && 'gap-5 px-3',\n          )}\n          onClick={!isExpanded ? handleEdit : undefined}\n        >\n          <motion.input\n            ref={hoursInputRef}\n            layout\n            value={tempHours}\n            onChange={(e) =>\n              setTempHours(e.target.value.replace(/\\D/g, '').slice(0, 2))\n            }\n            readOnly={!isExpanded}\n            onKeyDown={handleKeyPress}\n            className=\"h-10 w-[2ch] bg-transparent text-center font-mono text-xl font-semibold text-neutral-900 dark:text-zinc-200 outline-none\"\n          />\n\n          <motion.span layout className=\"text-lg font-medium text-zinc-500 dark:text-zinc-400\">\n            Hr.\n          </motion.span>\n        </motion.div>\n\n        <motion.div\n          layout\n          animate={{\n            borderTopLeftRadius: isExpanded ? 8 : 0,\n            borderBottomLeftRadius: isExpanded ? 8 : 0,\n            borderTopRightRadius: isExpanded ? 8 : 0,\n            borderBottomRightRadius: isExpanded ? 8 : 0,\n          }}\n          className={cn(\n            'flex cursor-pointer items-center justify-end gap-1 bg-zinc-100 px-1 dark:bg-zinc-800 will-change-transform',\n            isExpanded && 'gap-5 px-3',\n          )}\n          onClick={!isExpanded ? handleEdit : undefined}\n        >\n          <motion.input\n            layout\n            value={tempMinutes}\n            onChange={(e) =>\n              setTempMinutes(e.target.value.replace(/\\D/g, '').slice(0, 2))\n            }\n            readOnly={!isExpanded}\n            onKeyDown={handleKeyPress}\n            className=\"h-10 w-[2ch] bg-transparent text-center font-mono text-xl font-semibold text-zinc-900 dark:text-zinc-200 outline-none\"\n          />\n\n          <motion.span layout className=\"text-lg font-medium text-zinc-500 dark:text-zinc-400\">\n            Min.\n          </motion.span>\n        </motion.div>\n\n        <motion.div\n          layout\n          animate={{\n            borderTopLeftRadius: isExpanded ? 8 : 0,\n            borderBottomLeftRadius: isExpanded ? 8 : 0,\n            borderTopRightRadius: 8,\n            borderBottomRightRadius: 8,\n          }}\n          className=\"flex h-10 w-10 items-center justify-center bg-zinc-100 dark:bg-zinc-800 will-change-transform\"\n        >\n          <button\n            onClick={isExpanded ? handleSave : handleEdit}\n            className=\"cursor-pointer\"\n          >\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              <motion.div\n                key={isExpanded ? 'check' : 'pen'}\n                initial={{\n                  opacity: 0,\n                  scale: 0.25,\n                  filter: 'blur(4px)',\n                }}\n                animate={{\n                  opacity: 1,\n                  scale: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 0.25,\n                  filter: 'blur(4px)',\n                }}\n                transition={{\n                  type: 'spring',\n                  visualDuration: 0.25,\n                  bounce: 0,\n                }}\n              >\n                {isExpanded ? (\n                  <Check className=\"size-5 text-zinc-500\" />\n                ) : (\n                  <Pencil className=\"size-5 text-zinc-500 \" />\n                )}\n              </motion.div>\n            </AnimatePresence>\n          </button>\n        </motion.div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-to-edit-base",
      "type": "registry:component",
      "title": "Split To edit (base)",
      "description": "Theme-ready base variant of An animated input field that smoothly splits into editable segments during interaction.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/split-to-edit.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useRef, useEffect, type FC } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\nimport { Check, Pencil } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface SplitToEditProps {\n  initialHours?: number;\n  initialMinutes?: number;\n  onSave?: (hours: number, minutes: number) => void;\n}\n\nconst layoutConfig: Transition = {\n  type: 'spring',\n  stiffness: 450,\n  damping: 25,\n  mass: 2,\n};\n\nconst collapsedConfig: Transition = {\n  type: 'spring',\n  stiffness: 450,\n  damping: 25,\n  mass: 1,\n};\n\nexport const SplitToEdit: FC<SplitToEditProps> = ({\n  initialHours = 2,\n  initialMinutes = 30,\n  onSave,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const [hours, setHours] = useState<number>(initialHours);\n  const [minutes, setMinutes] = useState<number>(initialMinutes);\n\n  const [tempHours, setTempHours] = useState<string>(String(initialHours));\n  const [tempMinutes, setTempMinutes] = useState<string>(\n    String(initialMinutes),\n  );\n\n  const hoursInputRef = useRef<HTMLInputElement>(null);\n  const radius = 'var(--radius)';\n\n  useEffect(() => {\n    requestAnimationFrame(() => {\n      setHours(initialHours);\n      setMinutes(initialMinutes);\n      setTempHours(String(initialHours));\n      setTempMinutes(String(initialMinutes));\n    });\n  }, [initialHours, initialMinutes]);\n\n  useEffect(() => {\n    if (isExpanded) {\n      const t = setTimeout(() => {\n        hoursInputRef.current?.focus();\n        hoursInputRef.current?.select();\n      }, 50);\n      return () => clearTimeout(t);\n    }\n  }, [isExpanded]);\n\n  const handleEdit = () => {\n    setTempHours(String(hours));\n    setTempMinutes(String(minutes));\n    setIsExpanded(true);\n  };\n\n  const handleSave = () => {\n    const h = Math.max(0, parseInt(tempHours) || 0);\n    const m = Math.min(59, Math.max(0, parseInt(tempMinutes) || 0));\n\n    setHours(h);\n    setMinutes(m);\n\n    setTempHours(String(h));\n    setTempMinutes(String(m));\n\n    setIsExpanded(false);\n\n    onSave?.(h, m);\n  };\n\n  const handleKeyPress = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter') handleSave();\n    if (e.key === 'Escape') setIsExpanded(false);\n  };\n\n  return (\n    <MotionConfig transition={isExpanded ? layoutConfig : collapsedConfig}>\n      <motion.div\n        layout\n        className={cn(\n          'theme-injected flex items-center font-mono',\n          isExpanded && 'gap-4',\n        )}\n      >\n        <motion.div\n          layout\n          animate={{\n            borderTopLeftRadius: radius,\n            borderBottomLeftRadius: radius,\n            borderTopRightRadius: isExpanded ? radius : 0,\n            borderBottomRightRadius: isExpanded ? radius : 0,\n          }}\n          className={cn(\n            'bg-muted flex cursor-pointer items-center justify-end gap-1 px-1 pl-2',\n            isExpanded && 'gap-5 px-3',\n          )}\n          onClick={!isExpanded ? handleEdit : undefined}\n        >\n          <motion.input\n            ref={hoursInputRef}\n            layout\n            value={tempHours}\n            onChange={(e) =>\n              setTempHours(e.target.value.replace(/\\D/g, '').slice(0, 2))\n            }\n            readOnly={!isExpanded}\n            onKeyDown={handleKeyPress}\n            className=\"text-foreground h-10 w-[2ch] bg-transparent text-center font-mono text-xl font-semibold outline-none\"\n          />\n\n          <motion.span\n            layout\n            className=\"text-muted-foreground text-lg font-medium\"\n          >\n            Hr.\n          </motion.span>\n        </motion.div>\n\n        <motion.div\n          layout\n          animate={{\n            borderTopLeftRadius: isExpanded ? radius : 0,\n            borderBottomLeftRadius: isExpanded ? radius : 0,\n            borderTopRightRadius: isExpanded ? radius : 0,\n            borderBottomRightRadius: isExpanded ? radius : 0,\n          }}\n          className={cn(\n            'bg-muted flex cursor-pointer items-center justify-end gap-1 px-1 will-change-transform',\n            isExpanded && 'gap-5 px-3',\n          )}\n          onClick={!isExpanded ? handleEdit : undefined}\n        >\n          <motion.input\n            layout\n            value={tempMinutes}\n            onChange={(e) =>\n              setTempMinutes(e.target.value.replace(/\\D/g, '').slice(0, 2))\n            }\n            readOnly={!isExpanded}\n            onKeyDown={handleKeyPress}\n            className=\"text-foreground h-10 w-[2ch] bg-transparent text-center font-mono text-xl font-semibold outline-none\"\n          />\n\n          <motion.span\n            layout\n            className=\"text-muted-foreground text-lg font-medium\"\n          >\n            Min.\n          </motion.span>\n        </motion.div>\n\n        <motion.div\n          layout\n          animate={{\n            borderTopLeftRadius: isExpanded ? radius : 0,\n            borderBottomLeftRadius: isExpanded ? radius : 0,\n            borderTopRightRadius: radius,\n            borderBottomRightRadius: radius,\n          }}\n          className=\"bg-muted flex h-10 w-10 items-center justify-center will-change-transform\"\n        >\n          <button\n            onClick={isExpanded ? handleSave : handleEdit}\n            className=\"cursor-pointer\"\n          >\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              <motion.div\n                key={isExpanded ? 'check' : 'pen'}\n                initial={{\n                  opacity: 0,\n                  scale: 0.25,\n                  filter: 'blur(4px)',\n                }}\n                animate={{\n                  opacity: 1,\n                  scale: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 0.25,\n                  filter: 'blur(4px)',\n                }}\n                transition={{\n                  type: 'spring',\n                  visualDuration: 0.25,\n                  bounce: 0,\n                }}\n              >\n                {isExpanded ? (\n                  <Check className=\"text-muted-foreground size-5\" />\n                ) : (\n                  <Pencil className=\"text-muted-foreground size-5\" />\n                )}\n              </motion.div>\n            </AnimatePresence>\n          </button>\n        </motion.div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "status-picker",
      "type": "registry:component",
      "title": "Status Picker",
      "description": "An animated status picker that smoothly transitions between selectable states.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/status-picker.tsx",
          "type": "registry:component",
          "content": "import { CircleDashed, EllipsisIcon, X } from 'lucide-react';\nimport React from 'react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nexport interface StatusPickerItem {\n  id: number;\n  emoji: string;\n  name: string;\n}\n\ninterface StatusPickerProps {\n  items: StatusPickerItem[];\n  value?: number;\n  defaultValue?: number;\n  onChange?: (id: number) => void;\n}\n\nexport const StatusPicker: React.FC<StatusPickerProps> = ({\n  items,\n  value,\n  defaultValue = 0,\n  onChange,\n}) => {\n  const [open, setOpen] = React.useState(false);\n  const [hoveredIdx, setHoveredIdx] = React.useState(0);\n  const [internalStatus, setInternalStatus] = React.useState(defaultValue);\n\n  const isControlled = value !== undefined;\n  const status = isControlled ? value : internalStatus;\n\n  const setStatus = (id: number) => {\n    if (!isControlled) setInternalStatus(id);\n    onChange?.(id);\n  };\n\n  const activeItem = items.find((item) => item.id === status);\n\n  return (\n    <div className=\"flex w-full items-center justify-center\">\n      <div className=\"flex items-center justify-center\">\n        <motion.div\n          layout\n          className=\"relative flex cursor-pointer items-center justify-center gap-1 rounded-full bg-[#F4F4F9] px-4 py-2 dark:bg-zinc-800\"\n          onClick={() => {\n            setOpen(!open);\n          }}\n          transition={{\n            type: 'spring',\n            stiffness: 300,\n            damping: 18,\n          }}\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div className=\"relative flex min-w-14 cursor-pointer items-center justify-start gap-1 overflow-hidden\">\n              <div className=\"flex items-center justify-center gap-[4px]\">\n                <AnimatePresence mode=\"popLayout\" initial={false}>\n                  {status === 0 ? (\n                    <motion.div\n                      key=\"default\"\n                      className=\"relative\"\n                      initial={{ scale: 0.5, filter: 'blur(4px)', opacity: 0 }}\n                      animate={{ scale: 1, filter: 'blur(0px)', opacity: 1 }}\n                      exit={{ scale: 0.5, filter: 'blur(4px)', opacity: 0 }}\n                      transition={{ duration: 0.2 }}\n                    >\n                      <CircleDashed className=\"size-4 text-sm text-neutral-300\" />\n                      <div className=\"absolute inset-0 flex items-center justify-center\">\n                        <div className=\"size-2 rounded-full border border-neutral-300\" />\n                      </div>\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      key={`${status}-${activeItem?.emoji}`}\n                      className=\"flex size-6 items-center justify-center\"\n                      initial={{ scale: 0.5, filter: 'blur(2px)', opacity: 0 }}\n                      animate={{ scale: 1, filter: 'blur(0px)', opacity: 1 }}\n                      exit={{ scale: 0.5, filter: 'blur(2px)', opacity: 0 }}\n                      transition={{ duration: 0.2 }}\n                    >\n                      <span>{activeItem?.emoji}</span>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n\n                <span className=\"flex items-center justify-center text-sm font-medium text-neutral-700 dark:text-zinc-100\">\n                  <AnimatePresence mode=\"popLayout\" initial={false}>\n                    {(status !== 0\n                      ? (activeItem?.name.split('') ?? [])\n                      : 'Status'.split('')\n                    ).map((item, index) => {\n                      if (item === ' ') {\n                        return (\n                          <motion.span\n                            key={`${index}-${status}-space`}\n                            className=\"inline-block w-[0.3em]\"\n                          >\n                            &nbsp;\n                          </motion.span>\n                        );\n                      }\n\n                      return (\n                        <motion.span\n                          key={`${index}-${status}-${item}`}\n                          initial={{\n                            opacity: 0,\n                            y: 5,\n                            filter: 'blur(2px)',\n                            scale: 0.8,\n                          }}\n                          animate={{\n                            opacity: 1,\n                            y: 0,\n                            scale: 1,\n                            filter: 'blur(0px)',\n                            transition: {\n                              type: 'spring',\n                              stiffness: 300,\n                              damping: 25,\n                              delay: index * 0.04,\n                            },\n                          }}\n                          exit={{\n                            y: -8,\n                            opacity: 0,\n                            scale: 0.8,\n                            filter: 'blur(2px)',\n                            transition: {\n                              type: 'spring',\n                              stiffness: 300,\n                              damping: 25,\n                              delay: index * 0.03,\n                            },\n                          }}\n                          className=\"inline-block tracking-normal\"\n                        >\n                          {item}\n                        </motion.span>\n                      );\n                    })}\n                  </AnimatePresence>\n\n                  <AnimatePresence mode=\"popLayout\">\n                    {status !== 0 && (\n                      <motion.span\n                        className=\"ml-2 flex items-center justify-center rounded-full bg-gray-300 p-[4px] text-sm font-medium text-neutral-400 dark:bg-zinc-700\"\n                        key={`${status}-space`}\n                        initial={{\n                          opacity: 0,\n                          filter: 'blur(2px)',\n                          scale: 0.8,\n                        }}\n                        animate={{\n                          opacity: 1,\n                          scale: 1,\n                          filter: 'blur(0px)',\n                          transition: {\n                            duration: 0.2,\n                          },\n                        }}\n                        exit={{\n                          opacity: 0,\n                          scale: 0.8,\n                          filter: 'blur(4px)',\n                          transition: {\n                            duration: 0.1,\n                          },\n                        }}\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          setStatus(0);\n                        }}\n                      >\n                        <X className=\"size-2 text-sm text-white\" />\n                      </motion.span>\n                    )}\n                  </AnimatePresence>\n                </span>\n              </div>\n            </motion.div>\n          </AnimatePresence>\n\n          <AnimatePresence mode=\"popLayout\">\n            {open && (\n              <motion.div\n                className=\"absolute -translate-y-[100%] rounded-3xl border border-gray-100 bg-white p-1 dark:border-white/10 dark:bg-zinc-900\"\n                initial={{\n                  opacity: 0,\n                  scale: 0.5,\n                  filter: 'blur(2px)',\n                }}\n                animate={{\n                  opacity: 1,\n                  scale: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 0.5,\n                  filter: 'blur(4px)',\n                }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 300,\n                  damping: 18,\n                }}\n              >\n                <div className=\"flex items-center justify-center gap-1\">\n                  {items.map((item, index) => (\n                    <motion.div\n                      key={index}\n                      onMouseEnter={() => {\n                        setHoveredIdx(item.id);\n                      }}\n                      onMouseLeave={() => {\n                        setHoveredIdx(0);\n                      }}\n                      className=\"group relative flex cursor-pointer items-center justify-center gap-1 rounded-full bg-[#F4F4F9] p-2 dark:border-white/10 dark:bg-white/5\"\n                      whileHover={{ y: -2 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 300,\n                        damping: 18,\n                      }}\n                    >\n                      <AnimatePresence mode=\"popLayout\">\n                        {hoveredIdx === item.id && (\n                          <motion.div\n                            className=\"absolute -top-[40px] left-2 -translate-y-2 rounded-full border border-gray-100 bg-[#F4F4F9] dark:border-white/10 dark:bg-white/5\"\n                            initial={{\n                              opacity: 0,\n                              scale: 0.5,\n                              filter: 'blur(4px)',\n                            }}\n                            animate={{\n                              opacity: 1,\n                              scale: 1,\n                              filter: 'blur(0px)',\n                            }}\n                            exit={{\n                              opacity: 0,\n                              scale: 0.5,\n                              filter: 'blur(4px)',\n                            }}\n                            transition={{\n                              type: 'spring',\n                              stiffness: 300,\n                              damping: 23,\n                            }}\n                          >\n                            <div className=\"relative flex w-full flex-col items-center px-2 py-1\">\n                              <div className=\"text-sm font-medium whitespace-nowrap text-neutral-700 dark:text-zinc-100\">\n                                {item.name}\n                              </div>\n\n                              <div className=\"absolute -bottom-[12px] left-4\">\n                                <div className=\"h-[6px] w-[13px] rounded-b-full border bg-[#F4F4F9] dark:bg-zinc-800\" />\n                                <div className=\"size-1.5 -translate-x-[2px] translate-y-[1px] rounded-full border bg-[#F4F4F9] dark:bg-zinc-800\" />\n                              </div>\n                            </div>\n                          </motion.div>\n                        )}\n                      </AnimatePresence>\n\n                      <div\n                        className=\"flex size-6 items-center justify-center transition-all duration-200 ease-in-out group-hover:scale-110\"\n                        onClick={() => {\n                          setStatus(item.id);\n                        }}\n                      >\n                        <div>{item.emoji}</div>\n                      </div>\n                    </motion.div>\n                  ))}\n\n                  <div className=\"flex items-center justify-center gap-1 rounded-full bg-[#F4F4F9] dark:bg-zinc-800 p-2\">\n                    <EllipsisIcon className=\"size-6 text-sm text-neutral-400\" />\n                  </div>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "status-picker-base",
      "type": "registry:component",
      "title": "Status Picker (base)",
      "description": "Theme-ready base variant of An animated status picker that smoothly transitions between selectable states..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/status-picker.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { CircleDashed, EllipsisIcon, X } from 'lucide-react';\nimport React from 'react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nexport interface StatusPickerItem {\n  id: number;\n  emoji: string;\n  name: string;\n}\n\ninterface StatusPickerProps {\n  items: StatusPickerItem[];\n  value?: number;\n  defaultValue?: number;\n  onChange?: (id: number) => void;\n}\n\nexport const StatusPicker: React.FC<StatusPickerProps> = ({\n  items,\n  value,\n  defaultValue = 0,\n  onChange,\n}) => {\n  const [open, setOpen] = React.useState(false);\n  const [hoveredIdx, setHoveredIdx] = React.useState(0);\n  const [internalStatus, setInternalStatus] = React.useState(defaultValue);\n\n  const isControlled = value !== undefined;\n  const status = isControlled ? value : internalStatus;\n\n  const setStatus = (id: number) => {\n    if (!isControlled) setInternalStatus(id);\n    onChange?.(id);\n  };\n\n  const activeItem = items.find((item) => item.id === status);\n\n  return (\n    <div className=\"theme-injected h-[500px] flex w-full items-center justify-center\">\n      <div className=\"flex items-center justify-center\">\n        <motion.div\n          layout\n          className=\"bg-muted relative flex cursor-pointer items-center justify-center gap-1 rounded-lg px-4 py-2\"\n          onClick={() => {\n            setOpen(!open);\n          }}\n          transition={{\n            type: 'spring',\n            stiffness: 300,\n            damping: 18,\n          }}\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            <motion.div className=\"relative flex min-w-14 cursor-pointer items-center justify-start gap-1 overflow-hidden\">\n              <div className=\"flex items-center justify-center gap-[4px]\">\n                <AnimatePresence mode=\"popLayout\" initial={false}>\n                  {status === 0 ? (\n                    <motion.div\n                      key=\"default\"\n                      className=\"relative\"\n                      initial={{ scale: 0.5, filter: 'blur(4px)', opacity: 0 }}\n                      animate={{ scale: 1, filter: 'blur(0px)', opacity: 1 }}\n                      exit={{ scale: 0.5, filter: 'blur(4px)', opacity: 0 }}\n                      transition={{ duration: 0.2 }}\n                    >\n                      <CircleDashed className=\"text-muted-foreground size-4\" />\n                      <div className=\"absolute inset-0 flex items-center justify-center\">\n                        <div className=\"border-muted-foreground size-2 rounded-lg border\" />\n                      </div>\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      key={`${status}-${activeItem?.emoji}`}\n                      className=\"flex size-6 items-center justify-center\"\n                      initial={{ scale: 0.5, filter: 'blur(2px)', opacity: 0 }}\n                      animate={{ scale: 1, filter: 'blur(0px)', opacity: 1 }}\n                      exit={{ scale: 0.5, filter: 'blur(2px)', opacity: 0 }}\n                      transition={{ duration: 0.2 }}\n                    >\n                      <span>{activeItem?.emoji}</span>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n\n                <span className=\"text-foreground flex items-center justify-center text-sm font-medium\">\n                  <AnimatePresence mode=\"popLayout\" initial={false}>\n                    {(status !== 0\n                      ? (activeItem?.name.split('') ?? [])\n                      : 'Status'.split('')\n                    ).map((item, index) => {\n                      if (item === ' ') {\n                        return (\n                          <motion.span\n                            key={`${index}-${status}-space`}\n                            className=\"inline-block w-[0.3em]\"\n                          >\n                            &nbsp;\n                          </motion.span>\n                        );\n                      }\n\n                      return (\n                        <motion.span\n                          key={`${index}-${status}-${item}`}\n                          initial={{\n                            opacity: 0,\n                            y: 5,\n                            filter: 'blur(2px)',\n                            scale: 0.8,\n                          }}\n                          animate={{\n                            opacity: 1,\n                            y: 0,\n                            scale: 1,\n                            filter: 'blur(0px)',\n                            transition: {\n                              type: 'spring',\n                              stiffness: 300,\n                              damping: 25,\n                              delay: index * 0.04,\n                            },\n                          }}\n                          exit={{\n                            y: -8,\n                            opacity: 0,\n                            scale: 0.8,\n                            filter: 'blur(2px)',\n                            transition: {\n                              type: 'spring',\n                              stiffness: 300,\n                              damping: 25,\n                              delay: index * 0.03,\n                            },\n                          }}\n                          className=\"inline-block tracking-normal\"\n                        >\n                          {item}\n                        </motion.span>\n                      );\n                    })}\n                  </AnimatePresence>\n\n                  <AnimatePresence mode=\"popLayout\">\n                    {status !== 0 && (\n                      <motion.span\n                        className=\"bg-muted text-muted-foreground ml-2 flex items-center justify-center rounded-lg p-[4px] text-sm font-medium dark:bg-muted-foreground/15\"\n                        key={`${status}-space`}\n                        initial={{\n                          opacity: 0,\n                          filter: 'blur(2px)',\n                          scale: 0.8,\n                        }}\n                        animate={{\n                          opacity: 1,\n                          scale: 1,\n                          filter: 'blur(0px)',\n                          transition: {\n                            duration: 0.2,\n                          },\n                        }}\n                        exit={{\n                          opacity: 0,\n                          scale: 0.8,\n                          filter: 'blur(4px)',\n                          transition: {\n                            duration: 0.1,\n                          },\n                        }}\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          setStatus(0);\n                        }}\n                      >\n                        <X className=\"text-foreground size-2\" />\n                      </motion.span>\n                    )}\n                  </AnimatePresence>\n                </span>\n              </div>\n            </motion.div>\n          </AnimatePresence>\n\n          <AnimatePresence mode=\"popLayout\">\n            {open && (\n              <motion.div\n                className=\"border-border bg-background absolute -translate-y-[100%] rounded-lg border p-1\"\n                initial={{\n                  opacity: 0,\n                  scale: 0.5,\n                  filter: 'blur(2px)',\n                }}\n                animate={{\n                  opacity: 1,\n                  scale: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 0.5,\n                  filter: 'blur(4px)',\n                }}\n                transition={{\n                  type: 'spring',\n                  stiffness: 300,\n                  damping: 18,\n                }}\n              >\n                <div className=\"flex items-center justify-center gap-1\">\n                  {items.map((item, index) => (\n                    <motion.div\n                      key={index}\n                      onMouseEnter={() => {\n                        setHoveredIdx(item.id);\n                      }}\n                      onMouseLeave={() => {\n                        setHoveredIdx(0);\n                      }}\n                      className=\"group bg-muted relative flex cursor-pointer items-center justify-center gap-1 rounded-lg p-2\"\n                      whileHover={{ y: -2 }}\n                      transition={{\n                        type: 'spring',\n                        stiffness: 300,\n                        damping: 18,\n                      }}\n                    >\n                      <AnimatePresence mode=\"popLayout\">\n                        {hoveredIdx === item.id && (\n                          <motion.div\n                            className=\"border-border bg-muted absolute -top-[40px] left-2 -translate-y-2 rounded-lg border\"\n                            initial={{\n                              opacity: 0,\n                              scale: 0.5,\n                              filter: 'blur(4px)',\n                            }}\n                            animate={{\n                              opacity: 1,\n                              scale: 1,\n                              filter: 'blur(0px)',\n                            }}\n                            exit={{\n                              opacity: 0,\n                              scale: 0.5,\n                              filter: 'blur(4px)',\n                            }}\n                            transition={{\n                              type: 'spring',\n                              stiffness: 300,\n                              damping: 23,\n                            }}\n                          >\n                            <div className=\"relative flex w-full flex-col items-center px-2 py-1\">\n                              <div className=\"text-foreground text-sm font-medium whitespace-nowrap\">\n                                {item.name}\n                              </div>\n\n                              <div className=\"absolute -bottom-[12px] left-4\">\n                                <div className=\"border-border bg-muted h-[6px] w-[13px] rounded-b-full border\" />\n                                <div className=\"border-border bg-muted size-1.5 -translate-x-[2px] translate-y-[1px] rounded-lg border\" />\n                              </div>\n                            </div>\n                          </motion.div>\n                        )}\n                      </AnimatePresence>\n\n                      <div\n                        className=\"flex size-6 items-center justify-center transition-all duration-200 ease-in-out group-hover:scale-110\"\n                        onClick={() => {\n                          setStatus(item.id);\n                        }}\n                      >\n                        <div>{item.emoji}</div>\n                      </div>\n                    </motion.div>\n                  ))}\n\n                  <div className=\"bg-muted flex items-center justify-center gap-1 rounded-lg p-2\">\n                    <EllipsisIcon className=\"text-muted-foreground size-6\" />\n                  </div>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "step-indicator",
      "type": "registry:component",
      "title": "Step Indicator",
      "description": "An animated step indicator with a tooltip that highlights the current progress stage.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/step-indicator.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { cn } from '@/lib/utils';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useRef, useState } from 'react';\nimport type { IconType } from 'react-icons';\n\nexport type Step = {\n  id: string;\n  label: string;\n  icon: IconType;\n};\n\ninterface StepIndicatorProps {\n  steps: Step[];\n  tooltipDelay?: number;\n  onStepChange?: (index: number) => void;\n}\n\nexport const StepIndicator = ({\n  steps,\n  tooltipDelay = 0,\n  onStepChange,\n}: StepIndicatorProps) => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [coords, setCoords] = useState({ clipPath: '', translateX: 0 });\n\n  const measureRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n  const [isEntering, setIsEntering] = useState(true);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const calculatePosition = (index: number) => {\n    const activeLabel = measureRefs.current[index];\n    const activeButton = buttonRefs.current[index];\n\n    if (!activeLabel || !activeButton) return null;\n\n    const labelLeft = activeLabel.offsetLeft;\n    const labelWidth = activeLabel.offsetWidth;\n    const labelCenter = labelLeft + labelWidth / 2;\n\n    const buttonLeft = activeButton.offsetLeft;\n    const buttonWidth = activeButton.offsetWidth;\n    const buttonCenter = buttonLeft + buttonWidth / 2;\n\n    const totalWidth = measureRefs.current.reduce(\n      (acc, el) => acc + (el?.offsetWidth || 0),\n      0,\n    );\n\n    const cLeft = (labelLeft / totalWidth) * 100;\n    const cRight = 100 - ((labelLeft + labelWidth) / totalWidth) * 100;\n\n    return {\n      clipPath: `inset(0 ${cRight}% 0 ${cLeft}% round 9999px)`,\n      translateX: buttonCenter - labelCenter,\n    };\n  };\n\n  const handleShow = (index: number) => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n\n    const performUpdate = () => {\n      const newCoords = calculatePosition(index);\n      if (newCoords) {\n        setCoords(newCoords);\n        setActiveIndex(index);\n      }\n    };\n\n    if (activeIndex === null) {\n      setIsEntering(true);\n      if (tooltipDelay > 0) {\n        timeoutRef.current = setTimeout(performUpdate, tooltipDelay);\n      } else {\n        performUpdate();\n      }\n    } else {\n      setIsEntering(false);\n      performUpdate();\n    }\n  };\n\n  const handleHide = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setActiveIndex(null);\n    setCoords({ clipPath: '', translateX: 0 });\n    setIsEntering(true);\n  };\n\n  return (\n    <div className=\"flex w-full items-center justify-center px-4 py-20\">\n      <div className=\"w-full max-w-[420px]\">\n        <div\n          className=\"relative flex h-3 w-full items-center gap-3 px-1\"\n          onMouseLeave={handleHide}\n        >\n          <AnimatePresence>\n            {activeIndex !== null && coords.clipPath !== '' && (\n              <motion.div\n                className=\"pointer-events-none absolute bottom-10 left-0\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.2 }}\n              >\n                <motion.div\n                  className=\"flex bg-black dark:bg-white\"\n                  animate={{\n                    clipPath: coords.clipPath,\n                    x: coords.translateX,\n                  }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0,\n                    duration: isEntering ? 0 : 0.4,\n                  }}\n                  onUpdate={() => {\n                    if (isEntering) setIsEntering(false);\n                  }}\n                >\n                  <div className=\"inline-flex items-center justify-center\">\n                    {steps.map((step, index) => (\n                      <motion.div\n                        key={`real-${step.id}`}\n                        animate={{\n                          opacity: activeIndex === index ? 1 : 0,\n                          filter:\n                            activeIndex === index ? 'blur(0px)' : 'blur(4px)',\n                        }}\n                        transition={{ duration: 0.4 }}\n                        className=\"flex items-center justify-center gap-2 px-4 py-2 whitespace-nowrap text-white dark:text-black\"\n                      >\n                        <step.icon className=\"size-5\" />\n                        <span className=\"text-lg font-semibold\">\n                          {step.label}\n                        </span>\n                      </motion.div>\n                    ))}\n                  </div>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          {steps.map((step, index) => (\n            <button\n              key={step.id}\n              ref={(el) => {\n                buttonRefs.current[index] = el;\n              }}\n              onMouseEnter={() => handleShow(index)}\n              onFocus={() => handleShow(index)}\n              onBlur={(e) => {\n                if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n                  handleHide();\n                }\n              }}\n              onClick={() => onStepChange?.(index)}\n              className=\"group relative h-3 flex-1 cursor-pointer outline-none\"\n            >\n              <div\n                className={cn(\n                  'absolute inset-0 rounded-full bg-zinc-200 transition-colors duration-300 dark:bg-zinc-800',\n                  'group-focus-visible:ring-2 group-focus-visible:ring-zinc-400 group-focus-visible:ring-offset-4 dark:group-focus-visible:ring-offset-zinc-950',\n                  activeIndex === index && 'bg-zinc-800 dark:bg-zinc-100',\n                )}\n              />\n            </button>\n          ))}\n        </div>\n      </div>\n      <div\n        className=\"pointer-events-none absolute bottom-0 left-0 flex h-0 overflow-hidden whitespace-nowrap opacity-0\"\n        aria-hidden=\"true\"\n      >\n        {steps.map((step, index) => (\n          <div\n            key={`measure-${step.id}`}\n            ref={(el) => {\n              measureRefs.current[index] = el;\n            }}\n            className=\"flex items-center justify-center gap-2 px-4 py-2\"\n          >\n            <step.icon className=\"size-5\" />\n            <span className=\"text-lg font-semibold\">{step.label}</span>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "step-indicator-base",
      "type": "registry:component",
      "title": "Step Indicator (base)",
      "description": "Theme-ready base variant of An animated step indicator with a tooltip that highlights the current progress stage..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/step-indicator.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { cn } from '@/lib/utils';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useRef, useState } from 'react';\nimport type { IconType } from 'react-icons';\n\nexport type Step = {\n  id: string;\n  label: string;\n  icon: IconType;\n};\n\ninterface StepIndicatorProps {\n  steps: Step[];\n  tooltipDelay?: number;\n  onStepChange?: (index: number) => void;\n}\n\nexport const StepIndicator = ({\n  steps,\n  tooltipDelay = 0,\n  onStepChange,\n}: StepIndicatorProps) => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [coords, setCoords] = useState({ clipPath: '', translateX: 0 });\n\n  const measureRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n  const [isEntering, setIsEntering] = useState(true);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const calculatePosition = (index: number) => {\n    const activeLabel = measureRefs.current[index];\n    const activeButton = buttonRefs.current[index];\n\n    if (!activeLabel || !activeButton) return null;\n\n    const labelLeft = activeLabel.offsetLeft;\n    const labelWidth = activeLabel.offsetWidth;\n    const labelCenter = labelLeft + labelWidth / 2;\n\n    const buttonLeft = activeButton.offsetLeft;\n    const buttonWidth = activeButton.offsetWidth;\n    const buttonCenter = buttonLeft + buttonWidth / 2;\n\n    const totalWidth = measureRefs.current.reduce(\n      (acc, el) => acc + (el?.offsetWidth || 0),\n      0,\n    );\n\n    const cLeft = (labelLeft / totalWidth) * 100;\n    const cRight = 100 - ((labelLeft + labelWidth) / totalWidth) * 100;\n\n    return {\n      clipPath: `inset(0 ${cRight}% 0 ${cLeft}% round var(--radius))`,\n      translateX: buttonCenter - labelCenter,\n    };\n  };\n\n  const handleShow = (index: number) => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n\n    const performUpdate = () => {\n      const newCoords = calculatePosition(index);\n      if (newCoords) {\n        setCoords(newCoords);\n        setActiveIndex(index);\n      }\n    };\n\n    if (activeIndex === null) {\n      setIsEntering(true);\n      if (tooltipDelay > 0) {\n        timeoutRef.current = setTimeout(performUpdate, tooltipDelay);\n      } else {\n        performUpdate();\n      }\n    } else {\n      setIsEntering(false);\n      performUpdate();\n    }\n  };\n\n  const handleHide = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setActiveIndex(null);\n    setCoords({ clipPath: '', translateX: 0 });\n    setIsEntering(true);\n  };\n\n  return (\n    <div className=\"theme-injected flex w-full items-center justify-center px-4 py-20\">\n      <div className=\"w-full max-w-[420px]\">\n        <div\n          className=\"relative flex h-3 w-full items-center gap-3 px-1\"\n          onMouseLeave={handleHide}\n        >\n          <AnimatePresence>\n            {activeIndex !== null && coords.clipPath !== '' && (\n              <motion.div\n                className=\"pointer-events-none absolute bottom-10 left-0\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.2 }}\n              >\n                <motion.div\n                  className=\"bg-foreground flex\"\n                  animate={{\n                    clipPath: coords.clipPath,\n                    x: coords.translateX,\n                  }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0,\n                    duration: isEntering ? 0 : 0.4,\n                  }}\n                  onUpdate={() => {\n                    if (isEntering) setIsEntering(false);\n                  }}\n                >\n                  <div className=\"inline-flex items-center justify-center\">\n                    {steps.map((step, index) => (\n                      <motion.div\n                        key={`real-${step.id}`}\n                        animate={{\n                          opacity: activeIndex === index ? 1 : 0,\n                          filter:\n                            activeIndex === index ? 'blur(0px)' : 'blur(4px)',\n                        }}\n                        transition={{ duration: 0.4 }}\n                        className=\"text-background flex items-center justify-center gap-2 px-4 py-2 whitespace-nowrap\"\n                      >\n                        <step.icon className=\"size-5\" />\n                        <span className=\"text-lg font-semibold\">\n                          {step.label}\n                        </span>\n                      </motion.div>\n                    ))}\n                  </div>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          {steps.map((step, index) => (\n            <button\n              key={step.id}\n              ref={(el) => {\n                buttonRefs.current[index] = el;\n              }}\n              onMouseEnter={() => handleShow(index)}\n              onFocus={() => handleShow(index)}\n              onBlur={(e) => {\n                if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n                  handleHide();\n                }\n              }}\n              onClick={() => onStepChange?.(index)}\n              className=\"group relative h-3 flex-1 cursor-pointer outline-none\"\n            >\n              <div\n                className={cn(\n                  'bg-muted absolute inset-0 rounded-lg transition-colors duration-300',\n                  'group-focus-visible:ring-ring group-focus-visible:ring-offset-background group-focus-visible:ring-2 group-focus-visible:ring-offset-4',\n                  activeIndex === index && 'bg-foreground',\n                )}\n              />\n            </button>\n          ))}\n        </div>\n      </div>\n\n      <div\n        className=\"pointer-events-none absolute bottom-0 left-0 flex h-0 overflow-hidden whitespace-nowrap opacity-0\"\n        aria-hidden=\"true\"\n      >\n        {steps.map((step, index) => (\n          <div\n            key={`measure-${step.id}`}\n            ref={(el) => {\n              measureRefs.current[index] = el;\n            }}\n            className=\"flex items-center justify-center gap-2 px-4 py-2\"\n          >\n            <step.icon className=\"size-5\" />\n            <span className=\"text-lg font-semibold\">{step.label}</span>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "step-pager",
      "type": "registry:component",
      "title": "Step Pager",
      "description": "An animated step pager that visually highlights the current step with smooth icon transitions.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/step-pager.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { BsMusicNoteList } from 'react-icons/bs';\nimport { HiOutlineAdjustments } from 'react-icons/hi';\nimport { MdFavorite } from 'react-icons/md';\nimport { RiBubbleChartFill } from 'react-icons/ri';\n\nexport interface StepItem {\n  id: number;\n  label: string;\n  icon: React.ElementType;\n}\n\nconst defaultItems: StepItem[] = [\n  { id: 1, label: 'Explore', icon: RiBubbleChartFill },\n  { id: 2, label: 'Curate', icon: MdFavorite },\n  { id: 3, label: 'Mix', icon: HiOutlineAdjustments },\n  { id: 4, label: 'Play', icon: BsMusicNoteList },\n];\n\ninterface StepPagerProps {\n  steps?: StepItem[];\n  initialStep?: number;\n}\n\nexport const StepPager: React.FC<StepPagerProps> = ({\n  steps = defaultItems,\n  initialStep = 0,\n}) => {\n  const [activeIndex, setActiveIndex] = useState(initialStep);\n\n  const nextStep = () => setActiveIndex((prev) => (prev + 1) % steps.length);\n  const prevStep = () =>\n    setActiveIndex((prev) => (prev - 1 + steps.length) % steps.length);\n\n  return (\n    <div className=\"flex flex-col items-center gap-4 select-none\">\n      <div className=\"flex h-8 items-center justify-center\">\n        <AnimatedText\n          text={steps[activeIndex].label}\n          className=\"text-[26px] font-extrabold tracking-normal text-[#272727] dark:text-[#F4F4F5]\"\n          delayStep={0.03}\n        />\n      </div>\n\n      <div className=\"flex items-center gap-4\">\n        <button\n          title=\"left\"\n          onClick={prevStep}\n          className=\"flex h-14 w-14 cursor-pointer items-center justify-center rounded-full bg-[#F6F5FA] text-[#81808A] transition-all duration-250 hover:bg-gray-200 active:scale-95 dark:bg-zinc-800 dark:hover:bg-[#2A2A33]\"\n        >\n          <ChevronLeft size={26} strokeWidth={2.5} />\n        </button>\n\n        <div className=\"relative flex h-16 min-w-[140px] items-center justify-center gap-1 rounded-full border-2 border-[#ECECEF] bg-[#fefefe] px-4 dark:border-[#2A2A33] dark:bg-[#14141A]\">\n          {steps.map((step, index) => {\n            const isActive = index === activeIndex;\n            const Icon = step.icon;\n\n            return (\n              <div\n                key={step.id}\n                className=\"relative flex h-6 w-6 items-center justify-center\"\n              >\n                {isActive && (\n                  <motion.div\n                    layoutId=\"active-pill\"\n                    className=\"absolute inset-[-8px] z-0 rounded-full bg-transparent\"\n                    transition={{\n                      type: 'spring',\n                      stiffness: 300,\n                      damping: 30,\n                    }}\n                  />\n                )}\n\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    key={isActive ? 'active' : 'inactive'}\n                    className=\"relative z-10 flex cursor-pointer items-center justify-center\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(4px)',\n                      scale: isActive ? 0 : 1,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                      scale: 1,\n                      color: isActive ? '#262629' : '#CBD5E1',\n                    }}\n                    exit={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n                    transition={{ duration: 0.3, ease: 'easeOut' }}\n                    onClick={() => setActiveIndex(index)}\n                  >\n                    {isActive ? (\n                      <Icon size={26} className=\"dark:text-[#F4F4F5]\" />\n                    ) : (\n                      <div className=\"h-2.5 w-2.5 rounded-full bg-zinc-200 dark:bg-zinc-600\" />\n                    )}\n                  </motion.div>\n                </AnimatePresence>\n              </div>\n            );\n          })}\n        </div>\n\n        <button\n          title=\"right\"\n          onClick={nextStep}\n          className=\"flex h-14 w-14 cursor-pointer items-center justify-center rounded-full bg-[#F6F5FA] text-[#81808A] transition-all duration-250 hover:bg-gray-200 active:scale-95 dark:bg-zinc-800 dark:hover:bg-[#2A2A33]\"\n        >\n          <ChevronRight size={26} strokeWidth={2.5} />\n        </button>\n      </div>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\">\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "step-pager-base",
      "type": "registry:component",
      "title": "Step Pager (base)",
      "description": "Theme-ready base variant of An animated step pager that visually highlights the current step with smooth icon transitions..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/step-pager.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { BsMusicNoteList } from 'react-icons/bs';\nimport { HiOutlineAdjustments } from 'react-icons/hi';\nimport { MdFavorite } from 'react-icons/md';\nimport { RiBubbleChartFill } from 'react-icons/ri';\n\nexport interface StepItem {\n  id: number;\n  label: string;\n  icon: React.ElementType;\n}\n\nconst defaultItems: StepItem[] = [\n  { id: 1, label: 'Explore', icon: RiBubbleChartFill },\n  { id: 2, label: 'Curate', icon: MdFavorite },\n  { id: 3, label: 'Mix', icon: HiOutlineAdjustments },\n  { id: 4, label: 'Play', icon: BsMusicNoteList },\n];\n\ninterface StepPagerProps {\n  steps?: StepItem[];\n  initialStep?: number;\n}\n\nexport const StepPager: React.FC<StepPagerProps> = ({\n  steps = defaultItems,\n  initialStep = 0,\n}) => {\n  const [activeIndex, setActiveIndex] = useState(initialStep);\n\n  const nextStep = () => setActiveIndex((prev) => (prev + 1) % steps.length);\n  const prevStep = () =>\n    setActiveIndex((prev) => (prev - 1 + steps.length) % steps.length);\n\n  return (\n    <div className=\"theme-injected flex flex-col items-center gap-4 select-none\">\n      <div className=\"flex h-8 items-center justify-center\">\n        <AnimatedText\n          text={steps[activeIndex].label}\n          className=\"text-foreground text-[26px] font-extrabold tracking-normal\"\n          delayStep={0.03}\n        />\n      </div>\n\n      <div className=\"flex items-center gap-4\">\n        <button\n          title=\"left\"\n          onClick={prevStep}\n          className=\"bg-muted text-muted-foreground hover:bg-muted/50 flex h-14 w-14 cursor-pointer items-center justify-center rounded-lg transition-all duration-250 active:scale-95\"\n        >\n          <ChevronLeft size={26} strokeWidth={2.5} />\n        </button>\n\n        <div className=\"border-border bg-background relative flex h-16 min-w-[140px] items-center justify-center gap-1 rounded-lg border-2 px-4\">\n          {steps.map((step, index) => {\n            const isActive = index === activeIndex;\n            const Icon = step.icon;\n\n            return (\n              <div\n                key={step.id}\n                className=\"relative flex h-6 w-6 items-center justify-center\"\n              >\n                {isActive && (\n                  <motion.div\n                    layoutId=\"active-pill\"\n                    className=\"absolute inset-[-8px] z-0 rounded-lg bg-transparent\"\n                    transition={{\n                      type: 'spring',\n                      stiffness: 300,\n                      damping: 30,\n                    }}\n                  />\n                )}\n\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    key={isActive ? 'active' : 'inactive'}\n                    className=\"relative z-10 flex cursor-pointer items-center justify-center\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(4px)',\n                      scale: isActive ? 0 : 1,\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                      scale: 1,\n                      color: isActive\n                        ? 'oklch(var(--foreground))'\n                        : 'oklch(var(--muted-foreground))',\n                    }}\n                    exit={{ opacity: 0, filter: 'blur(4px)', scale: 0 }}\n                    transition={{ duration: 0.3, ease: 'easeOut' }}\n                    onClick={() => setActiveIndex(index)}\n                  >\n                    {isActive ? (\n                      <Icon size={26} className=\"text-foreground\" />\n                    ) : (\n                      <div className=\"bg-muted-foreground/50 h-2.5 w-2.5 rounded-lg\" />\n                    )}\n                  </motion.div>\n                </AnimatePresence>\n              </div>\n            );\n          })}\n        </div>\n\n        <button\n          title=\"right\"\n          onClick={nextStep}\n          className=\"bg-muted text-muted-foreground hover:bg-muted/50 flex h-14 w-14 cursor-pointer items-center justify-center rounded-lg transition-all duration-250 active:scale-95\"\n        >\n          <ChevronRight size={26} strokeWidth={2.5} />\n        </button>\n      </div>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\">\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stepper",
      "type": "registry:component",
      "title": "stepper",
      "description": "An animated numeric stepper with plu and minus controls and spring-based roling digit transitions.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/stepper.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { HiMinus, HiPlus } from 'react-icons/hi';\n\nexport interface StepperProps {\n  value?: number;\n  defaultValue?: number;\n  min?: number;\n  max?: number;\n  onChange?: (val: number) => void;\n}\n\nconst digitVariants = {\n  initial: (dir: number) => ({\n    y: dir > 0 ? 20 : -20,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n  animate: {\n    y: 0,\n    opacity: 1,\n    scale: 1,\n    z: 10,\n    filter: 'blur(0px)',\n  },\n  exit: (dir: number) => ({\n    y: dir > 0 ? -20 : 20,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n};\n\nexport function Stepper({\n  value,\n  defaultValue = 0,\n  min = 0,\n  max = 999,\n  onChange,\n}: StepperProps) {\n  const isControlled = value !== undefined;\n  const [internal, setInternal] = React.useState(defaultValue);\n  const [direction, setDirection] = React.useState(0);\n\n  const current = isControlled ? value! : internal;\n  const digits = current.toString().split('');\n\n  const [prevDigits, setPrevDigits] = React.useState<string[]>([]);\n  const [prevTicks, setPrevTicks] = React.useState<number[]>([]);\n\n  const len = digits.length;\n  const lenDiff = len - prevDigits.length;\n\n  const nextTicks = digits.map((digit, i) => {\n    const prevI = i - lenDiff;\n    const prevDigit = prevI >= 0 ? prevDigits[prevI] : undefined;\n    const prevTick = prevI >= 0 ? prevTicks[prevI] : 0;\n\n    return digit !== prevDigit ? (prevTick ?? 0) + 1 : (prevTick ?? 0);\n  });\n\n  if (prevDigits.join(\"\") !== digits.join(\"\")) {\n    setPrevTicks(nextTicks);\n    setPrevDigits(digits);\n  }\n\n  const step = (dir: number) => {\n    const next = Math.min(max, Math.max(min, current + dir));\n    if (next === current) return;\n    setDirection(dir);\n    if (!isControlled) setInternal(next);\n    onChange?.(next);\n  };\n\n  return (\n    <div className=\"flex w-full justify-center\">\n      <div className=\"flex items-center gap-3 rounded-full border-2 border-[#E6E6EF] bg-transparent px-1 py-1 shadow-sm sm:gap-5 dark:border-zinc-800\">\n        <motion.button\n          whileHover={{ scale: 1.05 }}\n          whileTap={{ scale: 0.92 }}\n          transition={{ type: 'spring', stiffness: 300, damping: 22 }}\n          onClick={() => step(-1)}\n          disabled={current <= min}\n          className=\"flex h-11 w-11 shrink-0 cursor-pointer items-center justify-center rounded-full bg-[#F0EFF6] text-[#5A5A63] disabled:opacity-50 sm:h-14 sm:w-14 dark:bg-zinc-800 dark:text-zinc-400\"\n        >\n          <HiMinus className=\"h-4 w-4 sm:h-5 sm:w-5\" />\n        </motion.button>\n\n        <div className=\"relative flex shrink-0 items-center justify-center gap-1 text-xl font-bold text-[#242426] perspective-midrange transform-3d sm:h-8 sm:text-3xl dark:text-white\">\n          {digits.map((digit, index) => (\n            <div\n              key={`${index}-${len}`}\n              className=\"relative w-3 transform-3d sm:h-8 sm:w-4\"\n            >\n              <AnimatePresence\n                mode=\"popLayout\"\n                initial={false}\n                custom={direction}\n              >\n                <motion.span\n                  key={nextTicks[index]}\n                  custom={direction}\n                  variants={digitVariants}\n                  initial=\"initial\"\n                  animate=\"animate\"\n                  exit=\"exit\"\n                  transition={{\n                    type: 'spring',\n                    stiffness: 200,\n                    damping: 16,\n                    mass: 1.2,\n                  }}\n                  className=\"absolute inset-0 flex items-center justify-center tabular-nums\"\n                >\n                  {digit}\n                </motion.span>\n              </AnimatePresence>\n            </div>\n          ))}\n        </div>\n\n        <motion.button\n          whileHover={{ scale: 1.05 }}\n          whileTap={{ scale: 0.92 }}\n          transition={{ type: 'spring', stiffness: 300, damping: 22 }}\n          onClick={() => step(1)}\n          disabled={current >= max}\n          className=\"flex h-11 w-11 shrink-0 cursor-pointer items-center justify-center rounded-full bg-[#F0EFF6] text-[#5A5A63] disabled:opacity-50 sm:h-14 sm:w-14 dark:bg-zinc-800 dark:text-zinc-400\"\n        >\n          <HiPlus className=\"h-4 w-4 sm:h-5 sm:w-5\" />\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stepper-base",
      "type": "registry:component",
      "title": "stepper (base)",
      "description": "Theme-ready base variant of An animated numeric stepper with plu and minus controls and spring-based roling digit transitions..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/stepper.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { HiMinus, HiPlus } from 'react-icons/hi';\n\nexport interface StepperProps {\n  value?: number;\n  defaultValue?: number;\n  min?: number;\n  max?: number;\n  onChange?: (val: number) => void;\n}\n\nconst digitVariants = {\n  initial: (dir: number) => ({\n    y: dir > 0 ? 20 : -20,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n  animate: {\n    y: 0,\n    opacity: 1,\n    scale: 1,\n    z: 10,\n    filter: 'blur(0px)',\n  },\n  exit: (dir: number) => ({\n    y: dir > 0 ? -20 : 20,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n};\n\nexport function Stepper({\n  value,\n  defaultValue = 0,\n  min = 0,\n  max = 999,\n  onChange,\n}: StepperProps) {\n  const isControlled = value !== undefined;\n  const [internal, setInternal] = React.useState(defaultValue);\n  const [direction, setDirection] = React.useState(0);\n\n  const current = isControlled ? value! : internal;\n  const digits = current.toString().split('');\n\n  const [prevDigits, setPrevDigits] = React.useState<string[]>([]);\n  const [prevTicks, setPrevTicks] = React.useState<number[]>([]);\n\n  const len = digits.length;\n  const lenDiff = len - prevDigits.length;\n\n  const nextTicks = digits.map((digit, i) => {\n    const prevI = i - lenDiff;\n    const prevDigit = prevI >= 0 ? prevDigits[prevI] : undefined;\n    const prevTick = prevI >= 0 ? prevTicks[prevI] : 0;\n\n    return digit !== prevDigit ? (prevTick ?? 0) + 1 : (prevTick ?? 0);\n  });\n\n  if (prevDigits.join(\"\") !== digits.join(\"\")) {\n    setPrevTicks(nextTicks);\n    setPrevDigits(digits);\n  }\n\n  const step = (dir: number) => {\n    const next = Math.min(max, Math.max(min, current + dir));\n    if (next === current) return;\n    setDirection(dir);\n    if (!isControlled) setInternal(next);\n    onChange?.(next);\n  };\n\n  return (\n    <div className=\"theme-injected flex w-full justify-center\">\n      <div className=\"border-border bg-primary flex items-center gap-3 rounded-lg border-2 px-1 py-1 shadow-sm sm:gap-5\">\n        <motion.button\n          whileHover={{ scale: 1.05 }}\n          whileTap={{ scale: 0.92 }}\n          transition={{ type: 'spring', stiffness: 300, damping: 22 }}\n          onClick={() => step(-1)}\n          disabled={current <= min}\n          className=\"bg-secondary text-secondary-foreground flex h-11 w-11 shrink-0 cursor-pointer items-center justify-center rounded-lg disabled:opacity-50 sm:h-14 sm:w-14\"\n        >\n          <HiMinus className=\"h-4 w-4 sm:h-5 sm:w-5\" />\n        </motion.button>\n\n        <div className=\"text-primary-foreground relative flex shrink-0 items-center justify-center gap-1 text-xl font-bold perspective-midrange transform-3d sm:h-8 sm:text-3xl\">\n          {digits.map((digit, index) => (\n            <div\n              key={`${index}-${len}`}\n              className=\"relative w-3 transform-3d sm:h-8 sm:w-4\"\n            >\n              <AnimatePresence\n                mode=\"popLayout\"\n                initial={false}\n                custom={direction}\n              >\n                <motion.span\n                  key={nextTicks[index]}\n                  custom={direction}\n                  variants={digitVariants}\n                  initial=\"initial\"\n                  animate=\"animate\"\n                  exit=\"exit\"\n                  transition={{\n                    type: 'spring',\n                    stiffness: 200,\n                    damping: 16,\n                    mass: 1.2,\n                  }}\n                  className=\"absolute inset-0 flex items-center justify-center tabular-nums\"\n                >\n                  {digit}\n                </motion.span>\n              </AnimatePresence>\n            </div>\n          ))}\n        </div>\n\n        <motion.button\n          whileHover={{ scale: 1.05 }}\n          whileTap={{ scale: 0.92 }}\n          transition={{ type: 'spring', stiffness: 300, damping: 22 }}\n          onClick={() => step(1)}\n          disabled={current >= max}\n          className=\"bg-secondary text-secondary-foreground flex h-11 w-11 shrink-0 cursor-pointer items-center justify-center rounded-lg disabled:opacity-50 sm:h-14 sm:w-14\"\n        >\n          <HiPlus className=\"h-4 w-4 sm:h-5 sm:w-5\" />\n        </motion.button>\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "subscription-calendar",
      "type": "registry:component",
      "title": "Subscription Calendar",
      "description": "Calendar card showing subscription cycles, renewals, and upcoming billing dates.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/subscription-calendar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport {\n  ChevronLeft,\n  ChevronRight,\n  Plus,\n  Search,\n  Download,\n  X,\n  Loader2,\n  Check,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { TbCube } from 'react-icons/tb';\n\n/* ---------- Types ---------- */\nexport interface SubscriptionDay {\n  date: number;\n  isMuted?: boolean;\n  isLogo?: React.ReactNode[];\n  indicators?: React.ReactNode[];\n}\n\nexport interface SubscriptionCalendarProps {\n  month: string;\n  year: number;\n  days: SubscriptionDay[];\n  monthlyTotal: number;\n  subscriptionsCount: number;\n  newCount: number;\n  onPrevMonth?: () => void;\n  onNextMonth?: () => void;\n}\n\n/* ---------- Motion ---------- */\nconst spring = {\n  type: 'spring',\n  stiffness: 420,\n  damping: 28,\n  mass: 0.6,\n} as const;\n\n/* ---------- Main Component ---------- */\nexport const SubscriptionCalendar: React.FC<SubscriptionCalendarProps> = ({\n  month,\n  year,\n  days,\n  monthlyTotal,\n  subscriptionsCount,\n  newCount,\n  onPrevMonth,\n  onNextMonth,\n}) => {\n  const [selectedId, setSelectedId] = useState<string | null>('day-28');\n  const [isAdding, setIsAdding] = useState(false);\n  const [isSearching, setIsSearching] = useState(false);\n  const [isSummaryOpen, setIsSummaryOpen] = useState(false);\n  const [isDownloading, setIsDownloading] = useState(false);\n\n  const handleDownload = () => {\n    setIsDownloading(true);\n    setTimeout(() => setIsDownloading(false), 2000);\n  };\n\n  return (\n    <motion.div\n      initial={{ scale: 0.96, opacity: 0 }}\n      animate={{ scale: 1, opacity: 1 }}\n      transition={spring}\n      className=\"relative w-full max-w-105 rounded-[26px] border border-zinc-200 bg-white p-4 shadow-2xl transition-all duration-500 sm:p-5 dark:border-[#1f1f1f] dark:bg-[#0f0f10]\"\n    >\n      <div className=\"mb-4 flex items-center justify-between gap-2\">\n        <div className=\"flex items-center gap-2 overflow-hidden sm:gap-3\">\n          <h2 className=\"truncate text-[12px] font-medium text-zinc-800 sm:text-[13px] dark:text-[#D8D8D8]\">\n            {month}, {year}\n          </h2>\n          <span className=\"xs:inline-block hidden cursor-default rounded-full border border-zinc-200 bg-transparent px-3 py-0.5 text-[10px] whitespace-nowrap text-zinc-500 dark:border-white/20 dark:text-[#a3a3a3]\">\n            Today\n          </span>\n          <div className=\"ml-1 flex items-center gap-1 sm:gap-2\">\n            <button\n              title=\"backward\"\n              onClick={onPrevMonth}\n              className=\"shrink-0 rounded-md p-1 text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-[#7c7b7b] dark:hover:bg-white/5 dark:hover:text-white\"\n            >\n              <ChevronLeft size={18} />\n            </button>\n            <button\n              title=\"forward\"\n              onClick={onNextMonth}\n              className=\"shrink-0 rounded-md p-1 text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-[#7c7b7b] dark:hover:bg-white/5 dark:hover:text-white\"\n            >\n              <ChevronRight size={18} />\n            </button>\n          </div>\n        </div>\n        <button\n          title=\"add event\"\n          onClick={() => setIsAdding(true)}\n          className=\"flex h-7 w-10 shrink-0 items-center justify-center rounded-full bg-[#fa6a2e] text-white shadow-[0_0_15px_rgba(250,106,46,0.2)] transition-transform hover:scale-105 active:scale-95 sm:h-7 sm:w-11 dark:text-black\"\n        >\n          <Plus size={16} />\n        </button>\n      </div>\n\n      <div className=\"\">\n        <AnimatePresence>\n          {isAdding && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.9, y: 10 }}\n              className=\"absolute inset-0 z-50 flex flex-col items-center justify-center rounded-[25px] bg-white/95 p-4 backdrop-blur-md sm:p-6 dark:bg-black/95\"\n            >\n              <button\n                onClick={() => setIsAdding(false)}\n                className=\"absolute top-4 right-4 text-zinc-400 hover:text-zinc-900 dark:hover:text-white\"\n              >\n                <X size={20} />\n              </button>\n              <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-orange-100 text-[#fa6a2e] dark:bg-orange-900/30\">\n                <Plus size={24} />\n              </div>\n              <h3 className=\"mb-1 text-sm font-bold text-zinc-900 dark:text-white\">\n                Quick Add Subscription\n              </h3>\n              <p className=\"mb-6 text-center text-[10px] text-zinc-500 dark:text-zinc-400\">\n                Enter the details of your new recurring payment.\n              </p>\n              <div className=\"flex w-full flex-col gap-2\">\n                <input\n                  type=\"text\"\n                  placeholder=\"Service Name (e.g. Netflix)\"\n                  className=\"w-full rounded-lg border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#fa6a2e] dark:border-zinc-800 dark:focus:border-[#fa6a2e]\"\n                />\n                <div className=\"xs:flex-row flex flex-col gap-2\">\n                  <input\n                    type=\"text\"\n                    placeholder=\"Amount\"\n                    className=\"flex-1 rounded-lg border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#fa6a2e] dark:border-zinc-800 dark:focus:border-[#fa6a2e]\"\n                  />\n                  <input\n                    type=\"text\"\n                    placeholder=\"Date\"\n                    className=\"xs:w-20 w-full rounded-lg border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#fa6a2e] dark:border-zinc-800 dark:focus:border-[#fa6a2e]\"\n                  />\n                </div>\n                <button\n                  onClick={() => setIsAdding(false)}\n                  className=\"mt-2 flex w-full items-center justify-center gap-2 rounded-lg bg-[#fa6a2e] py-2 text-[11px] font-bold text-white transition-opacity hover:opacity-90\"\n                >\n                  <Check size={14} /> Add Subscription\n                </button>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <AnimatePresence>\n          {isSearching && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.9, y: 10 }}\n              className=\"absolute inset-0 z-50 flex flex-col items-center justify-center rounded-[25px] bg-white/95 p-4 backdrop-blur-md sm:p-6 dark:bg-black/95\"\n            >\n              <button\n                onClick={() => setIsSearching(false)}\n                className=\"absolute top-4 right-4 text-zinc-400 hover:text-zinc-900 dark:hover:text-white\"\n              >\n                <X size={20} />\n              </button>\n              <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-zinc-100 text-zinc-500 dark:bg-zinc-800/30\">\n                <Search size={24} />\n              </div>\n              <h3 className=\"mb-1 text-sm font-bold text-zinc-900 dark:text-white\">\n                Search Subscriptions\n              </h3>\n              <div className=\"mt-4 w-full\">\n                <input\n                  autoFocus\n                  type=\"text\"\n                  placeholder=\"Type to search...\"\n                  className=\"w-full rounded-lg border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#fa6a2e] dark:border-zinc-800 dark:focus:border-[#fa6a2e]\"\n                />\n              </div>\n              <div className=\"mt-4 flex max-h-32 w-full flex-col gap-2 overflow-y-auto\">\n                <p className=\"text-center text-[10px] text-zinc-400\">\n                  Start typing to see results\n                </p>\n              </div>\n            </motion.div>\n          )}\n\n          {isSummaryOpen && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.9, y: 10 }}\n              className=\"absolute inset-0 z-50 flex flex-col items-center justify-center rounded-[25px] bg-white/95 p-4 backdrop-blur-md sm:p-6 dark:bg-black/95\"\n            >\n              <button\n                onClick={() => setIsSummaryOpen(false)}\n                className=\"absolute top-4 right-4 text-zinc-400 hover:text-zinc-900 dark:hover:text-white\"\n              >\n                <X size={20} />\n              </button>\n              <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-purple-100 text-purple-500 dark:bg-purple-900/30\">\n                <TbCube size={24} />\n              </div>\n              <h3 className=\"mb-1 text-sm font-bold text-zinc-900 dark:text-white\">\n                Monthly Summary\n              </h3>\n              <div className=\"mt-4 grid w-full grid-cols-2 gap-3\">\n                <div className=\"rounded-lg bg-zinc-50 p-3 dark:bg-zinc-900/50\">\n                  <div className=\"text-[9px] text-zinc-500\">Active</div>\n                  <div className=\"text-sm font-bold text-zinc-900 dark:text-white\">\n                    {subscriptionsCount}\n                  </div>\n                </div>\n                <div className=\"rounded-lg bg-zinc-50 p-3 dark:bg-zinc-900/50\">\n                  <div className=\"text-[9px] text-zinc-500\">New</div>\n                  <div className=\"text-sm font-bold text-zinc-900 dark:text-white\">\n                    {newCount}\n                  </div>\n                </div>\n                <div className=\"col-span-2 rounded-lg bg-orange-50 p-3 dark:bg-orange-950/20\">\n                  <div className=\"text-[9px] text-orange-600\">Total Spend</div>\n                  <div className=\"text-sm font-bold text-orange-600\">\n                    ${monthlyTotal.toFixed(2)}\n                  </div>\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <div>\n          <div className=\"mb-2 grid grid-cols-7 gap-1 text-[8px] font-semibold tracking-wider text-zinc-500 sm:text-[9px] dark:text-[#d4d4d4]\">\n            {['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'].map((d) => (\n              <div\n                key={d}\n                className=\"rounded-full border-zinc-100 bg-zinc-50 py-1.5 text-center dark:border-[#222] dark:bg-[#2A2A2A]/50\"\n              >\n                {d}\n              </div>\n            ))}\n          </div>\n          <div className=\"grid grid-cols-7 gap-1 sm:gap-1.5\">\n            {days.map((day, idx) => {\n              const uniqueId = `day-${day.date}-${idx}`;\n              const isActive = selectedId === uniqueId;\n\n              return (\n                <motion.button\n                  key={uniqueId}\n                  layout\n                  whileTap={{ scale: 0.95 }}\n                  onClick={() => setSelectedId(uniqueId)}\n                  transition={spring}\n                  className={`relative flex aspect-square flex-col items-center justify-center rounded-xl border text-[10px] font-medium transition-colors sm:h-12 sm:text-[11px] ${\n                    day.isMuted\n                      ? 'border-zinc-100 bg-zinc-50 text-zinc-300 dark:border-[#161616] dark:bg-[#0e0e0f] dark:text-[#333]'\n                      : 'border-zinc-100 bg-zinc-50/50 text-zinc-700 hover:border-zinc-300 dark:border-[#222] dark:bg-[#2A2A2A]/50 dark:text-[#d4d4d4] dark:hover:border-[#333]'\n                  }`}\n                >\n                  {isActive && (\n                    <motion.div\n                      layoutId=\"activeGlow\"\n                      className=\"absolute inset-0 z-0 rounded-xl border-[1.5px] border-[#b3522f] bg-orange-50 dark:bg-[#32211A]\"\n                      transition={spring}\n                    />\n                  )}\n\n                  <div className=\"relative z-10 flex flex-col items-center justify-start gap-0.5 sm:gap-1\">\n                    <span>{day.date}</span>\n                    <span className=\"scale-75 sm:scale-100\">{day.isLogo}</span>\n                  </div>\n\n                  {day.indicators && (\n                    <div className=\"absolute top-1 right-1 flex gap-0.5 sm:top-1.5 sm:right-1.5\">\n                      {day.indicators}\n                    </div>\n                  )}\n                </motion.button>\n              );\n            })}\n          </div>\n        </div>\n      </div>\n\n      {/* Footer Info*/}\n      <div className=\"mt-5 flex items-center justify-between gap-2 text-[8px] font-semibold tracking-widest text-zinc-400 sm:text-[9px] dark:text-[#555]\">\n        <div className=\"flex items-center gap-2 sm:gap-4\">\n          <span className=\"flex cursor-default items-center gap-1.5 transition-colors hover:text-[#a855f7]\">\n            <span className=\"h-1 w-1 rounded-full bg-[#a855f7] sm:h-1.5 sm:w-1.5\" />\n            MONTHLY\n          </span>\n          <span className=\"flex cursor-default items-center gap-1.5 transition-colors hover:text-[#facc15]\">\n            <span className=\"h-1 w-1 rounded-full bg-[#facc15] sm:h-1.5 sm:w-1.5\" />\n            YEARLY\n          </span>\n        </div>\n\n        <span className=\"whitespace-nowrap text-zinc-500 dark:text-[#666]\">\n          <span className=\"text-zinc-900 dark:text-[#ccc7c7]\">\n            {subscriptionsCount}\n          </span>{' '}\n          SUBS /{' '}\n          <span className=\"text-zinc-900 dark:text-[#ccc7c7]\">{newCount}</span>{' '}\n          NEW\n        </span>\n      </div>\n\n      {/* Bottom Bar*/}\n      <div className=\"mt-4 flex items-center justify-between gap-2 border-t border-zinc-100 pt-4 dark:border-[#1a1a1b]\">\n        <div className=\"flex gap-3 text-zinc-400 sm:gap-4 dark:text-[#555]\">\n          <Search\n            size={16}\n            onClick={() => setIsSearching(true)}\n            className=\"shrink-0 cursor-pointer transition-colors hover:text-zinc-900 dark:hover:text-white\"\n          />\n          <button\n            onClick={handleDownload}\n            disabled={isDownloading}\n            className=\"relative flex items-center justify-center transition-colors hover:text-zinc-900 dark:hover:text-white\"\n          >\n            {isDownloading ? (\n              <Loader2 size={16} className=\"animate-spin text-[#fa6a2e]\" />\n            ) : (\n              <Download size={16} className=\"shrink-0 cursor-pointer\" />\n            )}\n          </button>\n          <TbCube\n            size={16}\n            onClick={() => setIsSummaryOpen(true)}\n            className=\"shrink-0 cursor-pointer transition-colors hover:text-zinc-900 dark:hover:text-white\"\n          />\n        </div>\n\n        <div className=\"truncate text-[9px] font-medium text-zinc-500 sm:text-[10px] dark:text-[#666]\">\n          MONTHLY TOTAL :{' '}\n          <span className=\"ml-1 text-[11px] font-bold text-zinc-900 sm:text-[12px] dark:text-white\">\n            ${monthlyTotal.toFixed(2)}\n          </span>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "subscription-calendar-base",
      "type": "registry:component",
      "title": "Subscription Calendar (base)",
      "description": "Theme-ready base variant of Calendar card showing subscription cycles, renewals, and upcoming billing dates..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/subscription-calendar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport {\n  ChevronLeft,\n  ChevronRight,\n  Plus,\n  Search,\n  Download,\n  X,\n  Loader2,\n  Check,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { TbCube } from 'react-icons/tb';\n\n/* ---------- Types ---------- */\nexport interface SubscriptionDay {\n  date: number;\n  isMuted?: boolean;\n  isLogo?: React.ReactNode[];\n  indicators?: React.ReactNode[];\n}\n\nexport interface SubscriptionCalendarProps {\n  month: string;\n  year: number;\n  days: SubscriptionDay[];\n  monthlyTotal: number;\n  subscriptionsCount: number;\n  newCount: number;\n  onPrevMonth?: () => void;\n  onNextMonth?: () => void;\n}\n\n/* ---------- Motion ---------- */\nconst spring = {\n  type: 'spring',\n  stiffness: 420,\n  damping: 28,\n  mass: 0.6,\n} as const;\n\n/* ---------- Main Component ---------- */\nexport const SubscriptionCalendar: React.FC<SubscriptionCalendarProps> = ({\n  month,\n  year,\n  days,\n  monthlyTotal,\n  subscriptionsCount,\n  newCount,\n  onPrevMonth,\n  onNextMonth,\n}) => {\n  const [selectedId, setSelectedId] = useState<string | null>('day-28');\n  const [isAdding, setIsAdding] = useState(false);\n  const [isSearching, setIsSearching] = useState(false);\n  const [isSummaryOpen, setIsSummaryOpen] = useState(false);\n  const [isDownloading, setIsDownloading] = useState(false);\n\n  const handleDownload = () => {\n    setIsDownloading(true);\n    setTimeout(() => setIsDownloading(false), 2000);\n  };\n\n  return (\n    <motion.div\n      initial={{ scale: 0.96, opacity: 0 }}\n      animate={{ scale: 1, opacity: 1 }}\n      transition={spring}\n      className=\"theme-injected bg-card border-border relative w-full max-w-105 rounded-3xl border p-4 shadow-2xl transition-all duration-500 sm:p-5\"\n    >\n      <div className=\"mb-4 flex items-center justify-between gap-2\">\n        <div className=\"flex items-center gap-2 overflow-hidden sm:gap-3\">\n          <h2 className=\"text-foreground truncate text-xs font-medium sm:text-sm\">\n            {month}, {year}\n          </h2>\n          <span className=\"xs:inline-block border-input text-muted-foreground hidden cursor-default rounded-full border bg-transparent px-3 py-1 text-[10px] whitespace-nowrap\">\n            Today\n          </span>\n          <div className=\"ml-1 flex items-center gap-1 sm:gap-2\">\n            <button\n              title=\"backward\"\n              onClick={onPrevMonth}\n              className=\"hover:bg-muted text-muted-foreground hover:text-foreground shrink-0 rounded-md p-1 transition-colors\"\n            >\n              <ChevronLeft size={18} />\n            </button>\n            <button\n              title=\"forward\"\n              onClick={onNextMonth}\n              className=\"hover:bg-muted text-muted-foreground hover:text-foreground shrink-0 rounded-md p-1 transition-colors\"\n            >\n              <ChevronRight size={18} />\n            </button>\n          </div>\n        </div>\n        <button\n          title=\"add event\"\n          onClick={() => setIsAdding(true)}\n          className=\"bg-primary text-primary-foreground flex h-7 w-10 shrink-0 items-center justify-center rounded-full shadow-lg transition-transform hover:scale-105 active:scale-95 sm:h-7 sm:w-11\"\n        >\n          <Plus size={16} />\n        </button>\n      </div>\n\n      <div className=\"\">\n        <AnimatePresence>\n          {isAdding && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.9, y: 10 }}\n              className=\"bg-card/95 absolute inset-0 z-50 flex flex-col items-center justify-center rounded-[23px] p-4 backdrop-blur-md sm:p-6\"\n            >\n              <button\n                onClick={() => setIsAdding(false)}\n                className=\"text-muted-foreground hover:text-foreground absolute top-4 right-4\"\n              >\n                <X size={20} />\n              </button>\n              <div className=\"bg-primary/10 text-primary mb-4 flex h-12 w-12 items-center justify-center rounded-full\">\n                <Plus size={24} />\n              </div>\n              <h3 className=\"text-foreground mb-1 text-sm font-bold\">\n                Quick Add Subscription\n              </h3>\n              <p className=\"text-muted-foreground mb-6 text-center text-[10px]\">\n                Enter the details of your new recurring payment.\n              </p>\n              <div className=\"flex w-full flex-col gap-2\">\n                <input\n                  type=\"text\"\n                  placeholder=\"Service Name (e.g. Netflix)\"\n                  className=\"border-input bg-transparent w-full rounded-lg border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                />\n                <div className=\"flex flex-col gap-2 xs:flex-row\">\n                  <input\n                    type=\"text\"\n                    placeholder=\"Amount\"\n                    className=\"border-input bg-transparent flex-1 rounded-lg border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                  />\n                  <input\n                    type=\"text\"\n                    placeholder=\"Date\"\n                    className=\"border-input bg-transparent w-full rounded-lg border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary xs:w-20\"\n                  />\n                </div>\n                <button\n                  onClick={() => setIsAdding(false)}\n                  className=\"bg-primary text-primary-foreground mt-2 flex w-full items-center justify-center gap-2 rounded-lg py-2 text-[11px] font-bold transition-opacity hover:opacity-90\"\n                >\n                  <Check size={14} /> Add Subscription\n                </button>\n              </div>\n            </motion.div>\n          )}\n\n          {isSearching && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.9, y: 10 }}\n              className=\"bg-card/95 absolute inset-0 z-50 flex flex-col items-center justify-center rounded-[23px] p-4 backdrop-blur-md sm:p-6\"\n            >\n              <button\n                onClick={() => setIsSearching(false)}\n                className=\"text-muted-foreground hover:text-foreground absolute top-4 right-4\"\n              >\n                <X size={20} />\n              </button>\n              <div className=\"bg-muted text-muted-foreground mb-4 flex h-12 w-12 items-center justify-center rounded-full\">\n                <Search size={24} />\n              </div>\n              <h3 className=\"text-foreground mb-1 text-sm font-bold\">\n                Search Subscriptions\n              </h3>\n              <div className=\"mt-4 w-full\">\n                <input\n                  autoFocus\n                  type=\"text\"\n                  placeholder=\"Type to search...\"\n                  className=\"border-input bg-transparent w-full rounded-lg border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                />\n              </div>\n              <div className=\"mt-4 w-full text-center\">\n                <p className=\"text-muted-foreground text-[10px]\">Start typing to see results</p>\n              </div>\n            </motion.div>\n          )}\n\n          {isSummaryOpen && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.9, y: 10 }}\n              className=\"bg-card/95 absolute inset-0 z-50 flex flex-col items-center justify-center rounded-[23px] p-4 backdrop-blur-md sm:p-6\"\n            >\n              <button\n                onClick={() => setIsSummaryOpen(false)}\n                className=\"text-muted-foreground hover:text-foreground absolute top-4 right-4\"\n              >\n                <X size={20} />\n              </button>\n              <div className=\"bg-chart-2/10 text-chart-2 mb-4 flex h-12 w-12 items-center justify-center rounded-full\">\n                <TbCube size={24} />\n              </div>\n              <h3 className=\"text-foreground mb-1 text-sm font-bold\">\n                Monthly Summary\n              </h3>\n              <div className=\"mt-4 grid w-full grid-cols-2 gap-3\">\n                <div className=\"bg-muted/50 rounded-lg p-3\">\n                  <div className=\"text-muted-foreground text-[9px]\">Active</div>\n                  <div className=\"text-foreground text-sm font-bold\">{subscriptionsCount}</div>\n                </div>\n                <div className=\"bg-muted/50 rounded-lg p-3\">\n                  <div className=\"text-muted-foreground text-[9px]\">New</div>\n                  <div className=\"text-foreground text-sm font-bold\">{newCount}</div>\n                </div>\n                <div className=\"bg-primary/10 border-primary/20 col-span-2 rounded-lg border p-3 text-center\">\n                  <div className=\"text-primary text-[9px] font-medium\">Total Spend</div>\n                  <div className=\"text-primary text-base font-bold\">${monthlyTotal.toFixed(2)}</div>\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <div className=\"text-muted-foreground mb-2 grid grid-cols-7 gap-1 text-[8px] font-semibold tracking-wider sm:text-[9px]\">\n        {['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'].map((d) => (\n          <div\n            key={d}\n            className=\"bg-muted/60 border-border rounded-full border py-1.5 text-center\"\n          >\n            {d}\n          </div>\n        ))}\n      </div>\n      <div className=\"grid grid-cols-7 gap-1 sm:gap-1.5\">\n        {days.map((day, idx) => {\n          const uniqueId = `day-${day.date}-${idx}`;\n          const isActive = selectedId === uniqueId;\n\n          return (\n            <motion.button\n              key={uniqueId}\n              layout\n              whileTap={{ scale: 0.95 }}\n              onClick={() => setSelectedId(uniqueId)}\n              transition={spring}\n              className={`relative flex aspect-square flex-col items-center justify-center rounded-xl border text-[10px] font-medium transition-colors sm:h-12 sm:text-[11px] ${\n                day.isMuted\n                  ? 'bg-muted/40 border-border text-muted-foreground/60'\n                  : 'bg-muted/60 border-border text-foreground hover:border-input'\n              }`}\n            >\n              {isActive && (\n                <motion.div\n                  layoutId=\"activeGlow\"\n                  className=\"border-primary/50 bg-primary/10 absolute inset-0 z-0 rounded-xl border\"\n                  transition={spring}\n                />\n              )}\n\n              <div className=\"relative z-10 flex flex-col items-center justify-start gap-0.5 sm:gap-1\">\n                <span>{day.date}</span>\n                <span className=\"scale-75 sm:scale-100\">{day.isLogo}</span>\n              </div>\n\n              {day.indicators && (\n                <div className=\"absolute top-1 right-1 flex gap-0.5 sm:top-1.5 sm:right-1.5\">\n                  {day.indicators}\n                </div>\n              )}\n            </motion.button>\n          );\n        })}\n      </div>\n      </div>\n      {/* Footer Info*/}\n      <div className=\"text-muted-foreground mt-5 flex items-center justify-between gap-2 text-[8px] font-semibold tracking-widest sm:text-[9px]\">\n        <div className=\"flex items-center gap-2 sm:gap-4\">\n          <span className=\"hover:text-chart-2 flex cursor-default items-center gap-1.5 transition-colors\">\n            <span className=\"bg-chart-2 h-1 w-1 rounded-full sm:h-1.5 sm:w-1.5\" />\n            MONTHLY\n          </span>\n          <span className=\"hover:text-chart-4 flex cursor-default items-center gap-1.5 transition-colors\">\n            <span className=\"bg-chart-4 h-1 w-1 rounded-full sm:h-1.5 sm:w-1.5\" />\n            YEARLY\n          </span>\n        </div>\n\n        <span className=\"text-muted-foreground whitespace-nowrap\">\n          <span className=\"text-foreground\">{subscriptionsCount}</span> SUBS /{' '}\n          <span className=\"text-foreground\">{newCount}</span> NEW\n        </span>\n      </div>\n\n      {/* Bottom Bar*/}\n      <div className=\"border-border mt-4 flex items-center justify-between gap-2 border-t pt-4\">\n        <div className=\"text-muted-foreground flex gap-3 sm:gap-4\">\n          <Search\n            size={16}\n            onClick={() => setIsSearching(true)}\n            className=\"hover:text-foreground shrink-0 cursor-pointer transition-colors\"\n          />\n          <button\n            onClick={handleDownload}\n            disabled={isDownloading}\n            className=\"hover:text-foreground flex items-center justify-center transition-colors\"\n          >\n            {isDownloading ? (\n              <Loader2 size={16} className=\"text-primary animate-spin\" />\n            ) : (\n              <Download size={16} className=\"shrink-0 cursor-pointer\" />\n            )}\n          </button>\n          <TbCube\n            size={16}\n            onClick={() => setIsSummaryOpen(true)}\n            className=\"hover:text-foreground shrink-0 cursor-pointer transition-colors\"\n          />\n        </div>\n\n        <div className=\"text-muted-foreground truncate text-[9px] font-medium sm:text-[10px]\">\n          MONTHLY TOTAL :{' '}\n          <span className=\"text-foreground ml-1 text-[11px] font-bold sm:text-[12px]\">\n            ${monthlyTotal.toFixed(2)}\n          </span>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "swap-currency-card",
      "type": "registry:component",
      "title": "Swap Currency Card",
      "description": "A responsive interface component designed for instant user sentiment, featuring snappy visual cues that provide immediate confirmation upon interaction.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/swap-currency-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  type FC,\n  type ChangeEvent,\n} from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronDown, Check } from 'lucide-react';\n\n/* --- Types --- */\nexport interface Currency {\n  code: string;\n  countryCode: string;\n  flag: string;\n  rate: number;\n  name: string;\n}\n\ninterface SwapCurrencyCardProps {\n  currencies: Currency[];\n  defaultFromCode?: string;\n  defaultToCode?: string;\n  defaultAmount?: string;\n}\n\n/* --- Flag Component --- */\ninterface FlagIconProps {\n  countryCode: string;\n  emoji: string;\n}\n\nconst FlagIcon: FC<FlagIconProps> = ({ countryCode, emoji }) => {\n  const [imgError, setImgError] = useState(false);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setImgError(false));\n  }, [countryCode]);\n\n  if (!countryCode) return <span className=\"text-lg sm:text-xl\">{emoji}</span>;\n\n  const src =\n    countryCode === 'eu'\n      ? 'https://upload.wikimedia.org/wikipedia/commons/b/b7/Flag_of_Europe.svg'\n      : `https://flagcdn.com/${countryCode.toLowerCase()}.svg`;\n\n  return (\n    <div className=\"flex h-4 w-5 shrink-0 items-center justify-center overflow-hidden rounded-xs border border-gray-200 bg-transparent sm:h-5 sm:w-6 dark:border-zinc-700\">\n      {!imgError ? (\n        <img\n          src={src}\n          alt={countryCode}\n          className=\"h-full w-full object-cover\"\n          loading=\"lazy\"\n          onError={() => setImgError(true)}\n        />\n      ) : (\n        <span className=\"flex h-full w-full items-center justify-center text-xs leading-none sm:text-sm\">\n          {emoji}\n        </span>\n      )}\n    </div>\n  );\n};\n\n/* --- Dropdown --- */\ninterface DropdownProps {\n  selected: Currency;\n  onSelect: (currency: Currency) => void;\n  currencies: Currency[];\n}\n\nconst Dropdown: FC<DropdownProps> = ({ selected, onSelect, currencies }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const close = (e: MouseEvent) => {\n      if (ref.current && !ref.current.contains(e.target as Node)) {\n        setIsOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', close);\n    return () => document.removeEventListener('mousedown', close);\n  }, []);\n\n  return (\n    <div className=\"relative\" ref={ref}>\n      <button\n        onClick={() => setIsOpen((v) => !v)}\n        className=\"flex items-center gap-1.5 rounded-full border border-[#E5E5E9] bg-[#fefefe] px-2.5 py-1.5 transition-all active:scale-95 sm:gap-2 sm:px-3 sm:py-2 dark:border-zinc-700 dark:bg-zinc-800\"\n      >\n        <FlagIcon countryCode={selected.countryCode} emoji={selected.flag} />\n        <span className=\"text-xs font-semibold text-gray-700 sm:text-sm dark:text-zinc-200\">\n          {selected.code}\n        </span>\n        <ChevronDown\n          className={`h-4 w-4 text-gray-400 transition-transform sm:h-5 sm:w-5 ${\n            isOpen ? 'rotate-180' : ''\n          }`}\n        />\n      </button>\n\n      <AnimatePresence>\n        {isOpen && (\n          <motion.div\n            initial={{ opacity: 0, y: -8, scale: 0.96, filter: 'blur(4px)' }}\n            animate={{ opacity: 1, y: 0, scale: 1, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, y: -8, scale: 0.96, filter: 'blur(4px)' }}\n            transition={{ duration: 0.2 }}\n            className=\"absolute right-0 z-50 mt-2 w-40 rounded-xl border-[1.6px] border-[#E5E5E9] bg-white py-1 shadow-lg sm:w-48 sm:rounded-2xl dark:border-zinc-700 dark:bg-zinc-800\"\n          >\n            {currencies.map((currency) => (\n              <button\n                key={currency.code}\n                onClick={() => {\n                  onSelect(currency);\n                  setIsOpen(false);\n                }}\n                className=\"flex w-full items-center justify-between px-3 py-2 transition-colors hover:bg-gray-50 sm:px-4 sm:py-2.5 dark:hover:bg-zinc-700/50\"\n              >\n                <div className=\"flex items-center gap-2 sm:gap-3\">\n                  <FlagIcon\n                    countryCode={currency.countryCode}\n                    emoji={currency.flag}\n                  />\n                  <span className=\"text-xs font-medium text-gray-700 sm:text-sm dark:text-zinc-200\">\n                    {currency.code}\n                  </span>\n                </div>\n\n                {currency.code === selected.code && (\n                  <Check className=\"h-3.5 w-3.5 text-gray-400 sm:h-4 sm:w-4 dark:text-zinc-500\" />\n                )}\n              </button>\n            ))}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\n/* --- Animated Number --- */\ninterface AnimatedNumberProps {\n  value: string;\n}\n\nconst AnimatedNumber: FC<AnimatedNumberProps> = ({ value }) => {\n  const chars = String(value || '0').split('');\n\n  return (\n    <div className=\"flex items-center text-xl font-medium text-[#2F2F33] sm:text-2xl dark:text-zinc-100\">\n      {chars.map((char, i) => {\n        // Delay calculated from right-to-left (ones = 0 delay, tens = slightly longer, etc.)\n        const delay = (chars.length - 1 - i) * 0.03;\n        return <DigitColumn key={i} digit={char} delay={delay} />;\n      })}\n    </div>\n  );\n};\n\ninterface DigitColumnProps {\n  digit: string;\n  delay?: number;\n}\n\nconst DigitColumn: FC<DigitColumnProps> = ({ digit, delay = 0 }) => {\n  // Adjusted heights for mobile/desktop\n  const [digitHeight, setDigitHeight] = useState(28);\n\n  useEffect(() => {\n    const updateHeight = () => {\n      setDigitHeight(window.innerWidth < 640 ? 24 : 28);\n    };\n    updateHeight();\n    window.addEventListener('resize', updateHeight);\n    return () => window.removeEventListener('resize', updateHeight);\n  }, []);\n\n  const num = Number(digit);\n\n  if (Number.isNaN(num)) {\n    return (\n      <span className=\"inline-block w-[0.54em] text-center font-bold text-[#010103] dark:text-white\">\n        {digit}\n      </span>\n    );\n  }\n\n  return (\n    <div\n      className=\"relative flex items-center justify-center\"\n      style={{ height: digitHeight, width: '0.6em' }}\n    >\n      <AnimatePresence initial={false}>\n        <motion.span\n          key={digit}\n          initial={{ opacity: 0, y: -10, scale: 0.65, filter: 'blur(2px)' }}\n          animate={{ opacity: 1, y: 0, scale: 1, filter: 'blur(0px)' }}\n          exit={{ opacity: 0, y: 0, scale: 1, filter: 'blur(2px)' }}\n          transition={{\n            type: 'spring',\n            bounce: 0.2,\n            duration: 0.4,\n            delay: delay,\n          }}\n          className=\"absolute font-bold text-[#010103] dark:text-white\"\n        >\n          {digit}\n        </motion.span>\n      </AnimatePresence>\n    </div>\n  );\n};\n\n/* --- MAIN COMPONENT --- */\nexport const SwapCurrencyCard: FC<SwapCurrencyCardProps> = ({\n  currencies,\n  defaultFromCode = currencies[0].code,\n  defaultToCode = currencies[1].code,\n  defaultAmount = '10',\n}) => {\n  const fromDefault =\n    currencies.find((c) => c.code === defaultFromCode) || currencies[0];\n  const toDefault =\n    currencies.find((c) => c.code === defaultToCode) || currencies[1];\n\n  const [fromCurrency, setFromCurrency] = useState(fromDefault);\n  const [toCurrency, setToCurrency] = useState(toDefault);\n  const [fromAmount, setFromAmount] = useState(defaultAmount);\n  const [toAmount, setToAmount] = useState('');\n\n  const convert = useCallback(\n    (amount: string, from: Currency, to: Currency): string => {\n      const val = parseFloat(amount);\n      if (isNaN(val)) return '';\n      const usd = val / from.rate;\n      return (usd * to.rate).toFixed(2);\n    },\n    [],\n  );\n\n  useEffect(() => {\n    requestAnimationFrame(() =>\n      setToAmount(convert(fromAmount, fromCurrency, toCurrency)),\n    );\n  }, [convert, fromAmount, fromCurrency, toCurrency]);\n\n  const handleFromChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const val = e.target.value;\n    if (val === '' || /^\\d*\\.?\\d*$/.test(val)) {\n      setFromAmount(val);\n      setToAmount(convert(val, fromCurrency, toCurrency));\n    }\n  };\n\n  const handleToChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const val = e.target.value;\n    if (val === '' || /^\\d*\\.?\\d*$/.test(val)) {\n      setToAmount(val);\n      setFromAmount(convert(val, toCurrency, fromCurrency));\n    }\n  };\n\n  const rate = (toCurrency.rate / fromCurrency.rate).toFixed(2);\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, scale: 0.95, filter: 'blur(8px)' }}\n      animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n      transition={{ type: 'spring', stiffness: 200, damping: 20 }}\n      className=\"flex w-xs flex-col gap-5 rounded-[32px] border-[1.6px] border-[#E5E5E9] bg-[#FEFEFE] p-6 shadow-[0_32px_47px_-16px_rgba(0,0,0,0.1)] sm:w-sm sm:gap-6 sm:rounded-[40px] sm:p-8 dark:border-zinc-800 dark:bg-zinc-900 dark:shadow-[0_32px_60px_-16px_rgba(0,0,0,0.5)]\"\n    >\n      <h2 className=\"text-lg font-semibold text-[#898990] sm:text-[20px] dark:text-zinc-500\">\n        Swap Currency\n      </h2>\n\n      <div className=\"flex flex-col gap-1.5 sm:gap-2\">\n        {/* Input */}\n        <div className=\"flex items-center justify-between rounded-t-4xl rounded-b-2xl bg-[#F6F5FA] p-3.5 sm:rounded-t-[24px] sm:rounded-b-3xl sm:p-4 dark:bg-zinc-800/50\">\n          <div className=\"relative mr-2 flex-1\">\n            <AnimatedNumber value={fromAmount} />\n            <input\n              title=\"from\"\n              value={fromAmount}\n              onChange={handleFromChange}\n              className=\"absolute inset-0 w-full bg-transparent text-xl font-semibold tracking-[0.08em] text-transparent caret-[#2F2F33] outline-none sm:text-[24px] dark:caret-zinc-100\"\n            />\n          </div>\n\n          <Dropdown\n            selected={fromCurrency}\n            currencies={currencies}\n            onSelect={(c) => {\n              setFromCurrency(c);\n              setToAmount(convert(fromAmount, c, toCurrency));\n            }}\n          />\n        </div>\n\n        {/* Input Block 2 */}\n        <div className=\"flex items-center justify-between rounded-t-2xl rounded-b-4xl bg-[#F6F5FA] p-3.5 sm:rounded-t-3xl sm:rounded-b-[24px] sm:p-4 dark:bg-zinc-800/50\">\n          <div className=\"relative mr-2 flex-1\">\n            <AnimatedNumber value={toAmount} />\n            <input\n              title=\"to\"\n              value={toAmount}\n              onChange={handleToChange}\n              className=\"absolute inset-0 w-full bg-transparent text-xl font-semibold tracking-[0.08em] text-transparent caret-[#2F2F33] outline-none sm:text-[24px] dark:caret-zinc-100\"\n            />\n          </div>\n\n          <Dropdown\n            selected={toCurrency}\n            currencies={currencies}\n            onSelect={(c) => {\n              setToCurrency(c);\n              setToAmount(convert(fromAmount, fromCurrency, c));\n            }}\n          />\n        </div>\n      </div>\n\n      <button className=\"w-full rounded-2xl bg-[#262629] py-3.5 text-base font-semibold text-white shadow-lg transition hover:bg-black active:scale-[0.98] sm:rounded-[22px] sm:py-4 sm:text-[18px] dark:bg-zinc-100 dark:text-zinc-950 dark:hover:bg-white\">\n        Proceed\n      </button>\n\n      <div className=\"text-center text-sm font-medium text-[#9F9EA1] sm:text-base dark:text-zinc-500\">\n        1 {fromCurrency.code} ≈ {rate} {toCurrency.code}\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "swap-currency-card-base",
      "type": "registry:component",
      "title": "Swap Currency Card (base)",
      "description": "Theme-ready base variant of A responsive interface component designed for instant user sentiment, featuring snappy visual cues that provide immediate confirmation upon interaction..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/swap-currency-card.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  type FC,\n  type ChangeEvent,\n} from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronDown, Check } from 'lucide-react';\n\n/* --- Types --- */\nexport interface Currency {\n  code: string;\n  countryCode: string;\n  flag: string;\n  rate: number;\n  name: string;\n}\n\ninterface SwapCurrencyCardProps {\n  currencies: Currency[];\n  defaultFromCode?: string;\n  defaultToCode?: string;\n  defaultAmount?: string;\n}\n\n/* --- Flag Component --- */\ninterface FlagIconProps {\n  countryCode: string;\n  emoji: string;\n}\n\nconst FlagIcon: FC<FlagIconProps> = ({ countryCode, emoji }) => {\n  const [imgError, setImgError] = useState(false);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setImgError(false));\n  }, [countryCode]);\n\n  if (!countryCode) return <span className=\"text-lg sm:text-xl\">{emoji}</span>;\n\n  const src =\n    countryCode === 'eu'\n      ? 'https://upload.wikimedia.org/wikipedia/commons/b/b7/Flag_of_Europe.svg'\n      : `https://flagcdn.com/${countryCode.toLowerCase()}.svg`;\n\n  return (\n    <div className=\"border-border flex h-4 w-5 shrink-0 items-center justify-center overflow-hidden rounded-lg border bg-transparent sm:h-5 sm:w-6\">\n      {!imgError ? (\n        <img\n          src={src}\n          alt={countryCode}\n          className=\"h-full w-full object-cover\"\n          loading=\"lazy\"\n          onError={() => setImgError(true)}\n        />\n      ) : (\n        <span className=\"flex h-full w-full items-center justify-center text-xs leading-none sm:text-sm\">\n          {emoji}\n        </span>\n      )}\n    </div>\n  );\n};\n\n/* --- Dropdown --- */\ninterface DropdownProps {\n  selected: Currency;\n  onSelect: (currency: Currency) => void;\n  currencies: Currency[];\n}\n\nconst Dropdown: FC<DropdownProps> = ({ selected, onSelect, currencies }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const close = (e: MouseEvent) => {\n      if (ref.current && !ref.current.contains(e.target as Node)) {\n        setIsOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', close);\n    return () => document.removeEventListener('mousedown', close);\n  }, []);\n\n  return (\n    <div className=\"relative\" ref={ref}>\n      <button\n        onClick={() => setIsOpen((v) => !v)}\n        className=\"border-border bg-background flex items-center gap-1.5 rounded-lg border px-2.5 py-1.5 transition-all active:scale-95 sm:gap-2 sm:px-3 sm:py-2\"\n      >\n        <FlagIcon countryCode={selected.countryCode} emoji={selected.flag} />\n        <span className=\"text-foreground text-xs font-semibold sm:text-sm\">\n          {selected.code}\n        </span>\n        <ChevronDown\n          className={`text-muted-foreground h-4 w-4 transition-transform sm:h-5 sm:w-5 ${\n            isOpen ? 'rotate-180' : ''\n          }`}\n        />\n      </button>\n\n      <AnimatePresence>\n        {isOpen && (\n          <motion.div\n            initial={{ opacity: 0, y: -8, scale: 0.96, filter: 'blur(4px)' }}\n            animate={{ opacity: 1, y: 0, scale: 1, filter: 'blur(0px)' }}\n            exit={{ opacity: 0, y: -8, scale: 0.96, filter: 'blur(4px)' }}\n            transition={{ duration: 0.2 }}\n            className=\"border-border bg-card absolute right-0 z-50 mt-2 w-40 rounded-lg border-[1.6px] py-1 shadow-lg sm:w-48\"\n          >\n            {currencies.map((currency) => (\n              <button\n                key={currency.code}\n                onClick={() => {\n                  onSelect(currency);\n                  setIsOpen(false);\n                }}\n                className=\"hover:bg-muted flex w-full items-center justify-between px-3 py-2 transition-colors sm:px-4 sm:py-2.5\"\n              >\n                <div className=\"flex items-center gap-2 sm:gap-3\">\n                  <FlagIcon\n                    countryCode={currency.countryCode}\n                    emoji={currency.flag}\n                  />\n                  <span className=\"text-foreground text-xs font-medium sm:text-sm\">\n                    {currency.code}\n                  </span>\n                </div>\n\n                {currency.code === selected.code && (\n                  <Check className=\"text-muted-foreground h-3.5 w-3.5 sm:h-4 sm:w-4\" />\n                )}\n              </button>\n            ))}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\n/* --- Animated Number --- */\ninterface AnimatedNumberProps {\n  value: string;\n}\n\nconst AnimatedNumber: FC<AnimatedNumberProps> = ({ value }) => {\n  const chars = String(value || '0').split('');\n\n  return (\n    <div className=\"text-foreground flex items-center text-xl font-medium sm:text-2xl\">\n      {chars.map((char, i) => {\n        const delay = (chars.length - 1 - i) * 0.03;\n        return <DigitColumn key={i} digit={char} delay={delay} />;\n      })}\n    </div>\n  );\n};\n\ninterface DigitColumnProps {\n  digit: string;\n  delay?: number;\n}\n\nconst DigitColumn: FC<DigitColumnProps> = ({ digit, delay = 0 }) => {\n  const [digitHeight, setDigitHeight] = useState(28);\n\n  useEffect(() => {\n    const updateHeight = () => {\n      setDigitHeight(window.innerWidth < 640 ? 24 : 28);\n    };\n    updateHeight();\n    window.addEventListener('resize', updateHeight);\n    return () => window.removeEventListener('resize', updateHeight);\n  }, []);\n\n  const num = Number(digit);\n\n  if (Number.isNaN(num)) {\n    return (\n      <span className=\"text-foreground inline-block w-[0.54em] text-center font-bold\">\n        {digit}\n      </span>\n    );\n  }\n\n  return (\n    <div\n      className=\"relative flex items-center justify-center\"\n      style={{ height: digitHeight, width: '0.6em' }}\n    >\n      <AnimatePresence initial={false}>\n        <motion.span\n          key={digit}\n          initial={{ opacity: 0, y: -10, scale: 0.65, filter: 'blur(2px)' }}\n          animate={{ opacity: 1, y: 0, scale: 1, filter: 'blur(0px)' }}\n          exit={{ opacity: 0, y: 0, scale: 1, filter: 'blur(2px)' }}\n          transition={{\n            type: 'spring',\n            bounce: 0.2,\n            duration: 0.4,\n            delay: delay,\n          }}\n          className=\"text-foreground absolute font-bold\"\n        >\n          {digit}\n        </motion.span>\n      </AnimatePresence>\n    </div>\n  );\n};\n\n/* --- MAIN COMPONENT --- */\nexport const SwapCurrencyCard: FC<SwapCurrencyCardProps> = ({\n  currencies,\n  defaultFromCode = currencies[0].code,\n  defaultToCode = currencies[1].code,\n  defaultAmount = '10',\n}) => {\n  const fromDefault =\n    currencies.find((c) => c.code === defaultFromCode) || currencies[0];\n  const toDefault =\n    currencies.find((c) => c.code === defaultToCode) || currencies[1];\n\n  const [fromCurrency, setFromCurrency] = useState(fromDefault);\n  const [toCurrency, setToCurrency] = useState(toDefault);\n  const [fromAmount, setFromAmount] = useState(defaultAmount);\n  const [toAmount, setToAmount] = useState('');\n\n  const convert = useCallback(\n    (amount: string, from: Currency, to: Currency): string => {\n      const val = parseFloat(amount);\n      if (isNaN(val)) return '';\n      const usd = val / from.rate;\n      return (usd * to.rate).toFixed(2);\n    },\n    [],\n  );\n\n  useEffect(() => {\n    requestAnimationFrame(() =>\n      setToAmount(convert(fromAmount, fromCurrency, toCurrency)),\n    );\n  }, [convert, fromAmount, fromCurrency, toCurrency]);\n\n  const handleFromChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const val = e.target.value;\n    if (val === '' || /^\\d*\\.?\\d*$/.test(val)) {\n      setFromAmount(val);\n      setToAmount(convert(val, fromCurrency, toCurrency));\n    }\n  };\n\n  const handleToChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const val = e.target.value;\n    if (val === '' || /^\\d*\\.?\\d*$/.test(val)) {\n      setToAmount(val);\n      setFromAmount(convert(val, toCurrency, fromCurrency));\n    }\n  };\n\n  const rate = (toCurrency.rate / fromCurrency.rate).toFixed(2);\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, scale: 0.95, filter: 'blur(8px)' }}\n      animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n      transition={{ type: 'spring', stiffness: 200, damping: 20 }}\n      className=\"border-border theme-injected bg-card flex w-xs flex-col gap-5 rounded-lg border-[1.6px] p-6 shadow-lg sm:w-sm sm:gap-6 sm:p-8\"\n    >\n      <h2 className=\"text-muted-foreground text-lg font-semibold sm:text-[20px]\">\n        Swap Currency\n      </h2>\n\n      <div className=\"flex flex-col gap-1.5 sm:gap-2\">\n        <div className=\"bg-muted flex items-center justify-between rounded-lg p-3.5 sm:p-4\">\n          <div className=\"relative mr-2 flex-1\">\n            <AnimatedNumber value={fromAmount} />\n            <input\n              title=\"from\"\n              value={fromAmount}\n              onChange={handleFromChange}\n              className=\"caret-foreground absolute inset-0 w-full bg-transparent text-xl font-semibold tracking-[0.08em] text-transparent outline-none sm:text-[24px]\"\n            />\n          </div>\n\n          <Dropdown\n            selected={fromCurrency}\n            currencies={currencies}\n            onSelect={(c) => {\n              setFromCurrency(c);\n              setToAmount(convert(fromAmount, c, toCurrency));\n            }}\n          />\n        </div>\n\n        <div className=\"bg-muted flex items-center justify-between rounded-lg p-3.5 sm:p-4\">\n          <div className=\"relative mr-2 flex-1\">\n            <AnimatedNumber value={toAmount} />\n            <input\n              title=\"to\"\n              value={toAmount}\n              onChange={handleToChange}\n              className=\"caret-foreground absolute inset-0 w-full bg-transparent text-xl font-semibold tracking-[0.08em] text-transparent outline-none sm:text-[24px]\"\n            />\n          </div>\n\n          <Dropdown\n            selected={toCurrency}\n            currencies={currencies}\n            onSelect={(c) => {\n              setToCurrency(c);\n              setToAmount(convert(fromAmount, fromCurrency, c));\n            }}\n          />\n        </div>\n      </div>\n\n      <button className=\"bg-primary text-primary-foreground w-full rounded-lg py-3.5 text-base font-semibold shadow-lg transition hover:opacity-90 active:scale-[0.98] sm:py-4 sm:text-[18px]\">\n        Proceed\n      </button>\n\n      <div className=\"text-muted-foreground text-center text-sm font-medium sm:text-base\">\n        1 {fromCurrency.code} ≈ {rate} {toCurrency.code}\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "swap-form",
      "type": "registry:component",
      "title": "Swap Form",
      "description": "A dynamic authentication form that transitions between Sign In and Sign Up modes with elegant blur and scale effects.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/swap-form.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport { type FC } from \"react\";\nimport { AnimatePresence, motion, type Variants } from \"motion/react\";\nimport { FaGoogle, FaApple } from \"react-icons/fa\";\n\n/*  TYPES  */\n\ninterface SwapFormTexts {\n    signInTitle: string;\n    signUpTitle: string;\n    signInSubtitle: string;\n    signUpSubtitle: string;\n    signInButton: string;\n    signUpButton: string;\n    footerSignIn: string;\n    footerSignUp: string;\n    footerSignInCta: string;\n    footerSignUpCta: string;\n}\n\ninterface SwapFormProps {\n    isSignIn: boolean;\n    onModeChange: (isSignIn: boolean) => void;\n    texts?: Partial<SwapFormTexts>;\n}\n\n/*  DEFAULT TEXTS  */\n\nconst DEFAULT_TEXTS: SwapFormTexts = {\n    signInTitle: \"Sign In\",\n    signUpTitle: \"Create Account\",\n    signInSubtitle: \"Hey friend, welcome back!\",\n    signUpSubtitle: \"Just one more step to get started!\",\n    signInButton: \"Get Sign In Code\",\n    signUpButton: \"Create Account\",\n    footerSignIn: \"Don't have account?\",\n    footerSignUp: \"Already have account?\",\n    footerSignInCta: \"Create Account\",\n    footerSignUpCta: \"Sign In\",\n};\n\n/*  COMPONENT  */\n\nexport const SwapForm: FC<SwapFormProps> = ({\n    isSignIn,\n    onModeChange,\n    texts = {},\n}) => {\n    const mergedTexts = { ...DEFAULT_TEXTS, ...texts };\n\n    /* Animations */\n    const variants: Variants = {\n        initial: {\n            opacity: 0,\n            y: -30,\n            scale: 0.97,\n            filter: \"blur(4px)\",\n        },\n        animate: {\n            opacity: 1,\n            y: 0,\n            scale: 1,\n            filter: \"blur(0px)\",\n        },\n        exit: {\n            opacity: 0,\n            y: -30,\n            scale: 0.97,\n            filter: \"blur(4px)\",\n        },\n    };\n\n    return (\n        <AnimatePresence mode=\"wait\">\n            <motion.div\n                key={isSignIn ? \"signin\" : \"signup\"}\n                variants={variants}\n                initial=\"initial\"\n                animate=\"animate\"\n                exit=\"exit\"\n                transition={{\n                    ease: \"easeIn\",\n                    duration: 0.3,\n                }}\n                className=\"w-xs sm:w-sm bg-[#F6F5FA] dark:bg-zinc-900 shadow-[0_10px_20px_rgba(0,0,0,0.08)] rounded-[32px] overflow-hidden border-[1.5px] border-[#E6E6EF] dark:border-zinc-800 transition-colors\"\n            >\n                <div className=\"p-6 sm:p-8 pb-8 sm:pb-10 border-b-[1.2px] bg-[#FEFEFE] dark:bg-zinc-950 rounded-[28px] border-[#E6E6EF] dark:border-zinc-800 transition-colors\">\n                    <h2 className=\"text-2xl sm:text-3xl font-bold text-[#191919] dark:text-zinc-100 mb-1.5 sm:mb-2 text-center sm:text-left\">\n                        {isSignIn\n                            ? mergedTexts.signInTitle\n                            : mergedTexts.signUpTitle}\n                    </h2>\n\n                    <p className=\"text-[#ADADB0] dark:text-zinc-500 text-[15px] sm:text-[17px] mb-4 sm:mb-6 text-center sm:text-left\">\n                        {isSignIn\n                            ? mergedTexts.signInSubtitle\n                            : mergedTexts.signUpSubtitle}\n                    </p>\n\n                    {/* Social Buttons */}\n                    <div className=\"space-y-2.5 sm:space-y-3\">\n                        <button className=\"w-full flex shadow-sm items-center justify-center gap-2 sm:gap-3 py-3 px-4 border-[1.2px] border-[#E7E7E7] dark:border-zinc-800 rounded-xl font-medium text-[#131313] dark:text-zinc-200 bg-white dark:bg-zinc-900 hover:bg-gray-50 dark:hover:bg-zinc-800 transition-colors text-[15px] sm:text-base\">\n                            <FaGoogle className=\"text-lg sm:text-xl\" />\n                            Continue with Google\n                        </button>\n\n                        <button className=\"w-full flex shadow-sm items-center justify-center gap-2 sm:gap-3 py-3 px-4 border-[1.2px] border-[#E7E7E7] dark:border-zinc-800 rounded-xl font-medium text-[#131313] dark:text-zinc-200 bg-white dark:bg-zinc-900 hover:bg-gray-50 dark:hover:bg-zinc-800 transition-colors text-[15px] sm:text-base\">\n                            <FaApple className=\"text-[22px] sm:text-[26px]\" />\n                            Continue with Apple\n                        </button>\n                    </div>\n\n                    {/* Divider */}\n                    <div className=\"relative my-5 sm:my-6\">\n                        <div className=\"absolute inset-0 flex items-center\">\n                            <div className=\"w-full h-px bg-gradient-to-r from-transparent via-[#ECEBEE] dark:via-zinc-800 to-transparent\" />\n                        </div>\n                        <div className=\"relative flex justify-center text-xs uppercase\">\n                            <span className=\"bg-white dark:bg-zinc-950 text-[12px] sm:text-[14px] px-2 text-gray-400 dark:text-zinc-600\">\n                                OR\n                            </span>\n                        </div>\n                    </div>\n\n                    {/* Email */}\n                    <div className=\"space-y-6 sm:space-y-8\">\n                        <div>\n                            <label className=\"block text-sm font-medium text-[#0B0B0B] dark:text-zinc-300 mb-1.5\">\n                                Email\n                            </label>\n                            <input\n                                type=\"email\"\n                                placeholder=\"name@example.com\"\n                                className=\"w-full px-4 py-2.5 rounded-xl border-[1.2px] border-[#E7E7E7] dark:border-zinc-800 bg-white dark:bg-zinc-900 focus:ring-1 focus:ring-black dark:focus:ring-zinc-400 outline-none shadow-sm text-[15px] sm:text-base\"\n                            />\n                        </div>\n\n                        <motion.button\n                            whileHover={{ scale: 1.015 }}\n                            whileTap={{ scale: 0.97 }}\n                            transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\n                            className=\"w-full py-3 sm:py-3.5 bg-[#030303] dark:bg-zinc-100 text-[#FAFAFA] dark:text-zinc-900 rounded-xl font-semibold shadow-lg text-[15px] sm:text-base\"\n                        >\n                            {isSignIn\n                                ? mergedTexts.signInButton\n                                : mergedTexts.signUpButton}\n                        </motion.button>\n                    </div>\n                </div>\n\n                {/* Footer */}\n                <div className=\"bg-[#F6F5FA] dark:bg-zinc-900 py-3 sm:py-4 text-center\">\n                    <p className=\"text-[#a8a7b0] dark:text-zinc-500 text-[13px] sm:text-[14px]\">\n                        {isSignIn\n                            ? mergedTexts.footerSignIn\n                            : mergedTexts.footerSignUp}\n                        <button\n                            onClick={() => onModeChange(!isSignIn)}\n                            className=\"ml-1 font-medium text-black dark:text-white\"\n                        >\n                            {isSignIn\n                                ? mergedTexts.footerSignInCta\n                                : mergedTexts.footerSignUpCta}\n                        </button>\n                    </p>\n                </div>\n            </motion.div>\n        </AnimatePresence>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "swap-form-base",
      "type": "registry:component",
      "title": "Swap Form (base)",
      "description": "Theme-ready base variant of A dynamic authentication form that transitions between Sign In and Sign Up modes with elegant blur and scale effects..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/swap-form.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport { type FC } from \"react\";\nimport { AnimatePresence, motion, type Variants } from \"motion/react\";\nimport { FaGoogle, FaApple } from \"react-icons/fa\";\n\n/*  TYPES  */\n\ninterface SwapFormTexts {\n    signInTitle: string;\n    signUpTitle: string;\n    signInSubtitle: string;\n    signUpSubtitle: string;\n    signInButton: string;\n    signUpButton: string;\n    footerSignIn: string;\n    footerSignUp: string;\n    footerSignInCta: string;\n    footerSignUpCta: string;\n}\n\ninterface SwapFormProps {\n    isSignIn: boolean;\n    onModeChange: (isSignIn: boolean) => void;\n    texts?: Partial<SwapFormTexts>;\n}\n\n/*  DEFAULT TEXTS  */\n\nconst DEFAULT_TEXTS: SwapFormTexts = {\n    signInTitle: \"Sign In\",\n    signUpTitle: \"Create Account\",\n    signInSubtitle: \"Hey friend, welcome back!\",\n    signUpSubtitle: \"Just one more step to get started!\",\n    signInButton: \"Get Sign In Code\",\n    signUpButton: \"Create Account\",\n    footerSignIn: \"Don't have account?\",\n    footerSignUp: \"Already have account?\",\n    footerSignInCta: \"Create Account\",\n    footerSignUpCta: \"Sign In\",\n};\n\n/*  COMPONENT  */\n\nexport const SwapForm: FC<SwapFormProps> = ({\n    isSignIn,\n    onModeChange,\n    texts = {},\n}) => {\n    const mergedTexts = { ...DEFAULT_TEXTS, ...texts };\n\n    /* Animations */\n    const variants: Variants = {\n        initial: {\n            opacity: 0,\n            y: -30,\n            scale: 0.97,\n            filter: \"blur(4px)\",\n        },\n        animate: {\n            opacity: 1,\n            y: 0,\n            scale: 1,\n            filter: \"blur(0px)\",\n        },\n        exit: {\n            opacity: 0,\n            y: -30,\n            scale: 0.97,\n            filter: \"blur(4px)\",\n        },\n    };\n\n    return (\n        <AnimatePresence mode=\"wait\">\n            <motion.div\n                key={isSignIn ? \"signin\" : \"signup\"}\n                variants={variants}\n                initial=\"initial\"\n                animate=\"animate\"\n                exit=\"exit\"\n                transition={{\n                    ease: \"easeIn\",\n                    duration: 0.3,\n                }}\n                className=\"theme-injected font-sans w-xs sm:w-sm bg-muted shadow-[0_10px_20px_rgba(0,0,0,0.08)] rounded-2xl overflow-hidden border border-border transition-colors\"\n            >\n                <div className=\"p-6 sm:p-8 pb-8 sm:pb-10 border-b bg-card rounded-2xl border-border transition-colors\">\n                    <h2 className=\"font-sans text-2xl sm:text-3xl font-bold text-foreground mb-1.5 sm:mb-2 text-center sm:text-left\">\n                        {isSignIn\n                            ? mergedTexts.signInTitle\n                            : mergedTexts.signUpTitle}\n                    </h2>\n\n                    <p className=\"font-sans text-muted-foreground text-[15px] sm:text-[17px] mb-4 sm:mb-6 text-center sm:text-left\">\n                        {isSignIn\n                            ? mergedTexts.signInSubtitle\n                            : mergedTexts.signUpSubtitle}\n                    </p>\n\n                    {/* Social Buttons */}\n                    <div className=\"space-y-2.5 sm:space-y-3\">\n                        <button className=\"font-sans w-full flex shadow-sm items-center justify-center gap-2 sm:gap-3 py-3 px-4 border border-border rounded-xl font-medium text-foreground bg-card hover:bg-muted transition-colors text-[15px] sm:text-base\">\n                            <FaGoogle className=\"text-lg sm:text-xl\" />\n                            Continue with Google\n                        </button>\n\n                        <button className=\"font-sans w-full flex shadow-sm items-center justify-center gap-2 sm:gap-3 py-3 px-4 border border-border rounded-xl font-medium text-foreground bg-card hover:bg-muted transition-colors text-[15px] sm:text-base\">\n                            <FaApple className=\"text-[22px] sm:text-[26px]\" />\n                            Continue with Apple\n                        </button>\n                    </div>\n\n                    {/* Divider */}\n                    <div className=\"relative my-5 sm:my-6\">\n                        <div className=\"absolute inset-0 flex items-center\">\n                            <div className=\"w-full h-px bg-linear-to-r from-transparent via-border to-transparent\" />\n                        </div>\n                        <div className=\"relative flex justify-center text-xs uppercase\">\n                            <span className=\"bg-transparent font-sans text-[12px] sm:text-[14px] px-2 text-muted-foreground\">\n                                OR\n                            </span>\n                        </div>\n                    </div>\n\n                    {/* Email */}\n                    <div className=\"space-y-6 sm:space-y-8\">\n                        <div>\n                            <label className=\"font-sans block text-sm font-medium text-foreground mb-1.5\">\n                                Email\n                            </label>\n                            <input\n                                type=\"email\"\n                                placeholder=\"name@example.com\"\n                                className=\"font-sans w-full px-4 py-2.5 rounded-xl border border-border bg-input focus:ring-1 focus:ring-ring outline-none shadow-sm text-[15px] sm:text-base text-foreground\"\n                            />\n                        </div>\n\n                        <motion.button\n                            whileHover={{ scale: 1.015 }}\n                            whileTap={{ scale: 0.97 }}\n                            transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\n                            className=\"font-sans w-full py-3 sm:py-3.5 bg-primary text-primary-foreground rounded-xl font-semibold shadow-lg text-[15px] sm:text-base\"\n                        >\n                            {isSignIn\n                                ? mergedTexts.signInButton\n                                : mergedTexts.signUpButton}\n                        </motion.button>\n                    </div>\n                </div>\n\n                {/* Footer */}\n                <div className=\"bg-muted py-3 sm:py-4 text-center\">\n                    <p className=\"font-sans text-muted-foreground text-[13px] sm:text-[14px]\">\n                        {isSignIn\n                            ? mergedTexts.footerSignIn\n                            : mergedTexts.footerSignUp}\n                        <button\n                            onClick={() => onModeChange(!isSignIn)}\n                            className=\"ml-1 font-medium text-foreground\"\n                        >\n                            {isSignIn\n                                ? mergedTexts.footerSignInCta\n                                : mergedTexts.footerSignUpCta}\n                        </button>\n                    </p>\n                </div>\n            </motion.div>\n        </AnimatePresence>\n    );\n};"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-disclosure",
      "type": "registry:component",
      "title": "Switch Disclosure",
      "description": "A premium interactive disclosure component that pairs a primary switch with nested behavioral sub-options.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Transition,\n  MotionConfig,\n} from 'motion/react';\nimport { Check } from 'lucide-react';\nimport { RiBubbleChartFill } from 'react-icons/ri';\n\ninterface SwitchDisclosureProps {\n  title?: string;\n  subOptionLabel?: string;\n  defaultEnabled?: boolean;\n  defaultSubOptionChecked?: boolean;\n  onToggleChange?: (enabled: boolean) => void;\n  onSubOptionChange?: (checked: boolean) => void;\n}\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 800,\n  damping: 80,\n  mass: 5,\n};\nexport const SwitchDisclosure: React.FC<SwitchDisclosureProps> = ({\n  title = 'Predictive Completion',\n  subOptionLabel = 'Enable Inline Suggestions',\n  defaultEnabled = false,\n  defaultSubOptionChecked = false,\n  onToggleChange,\n  onSubOptionChange,\n}) => {\n  const [isEnabled, setIsEnabled] = useState(defaultEnabled);\n  const [isSubOptionChecked, setIsSubOptionChecked] = useState(\n    defaultSubOptionChecked,\n  );\n\n  const handleToggle = () => {\n    const next = !isEnabled;\n    setIsEnabled(next);\n    onToggleChange?.(next);\n  };\n\n  const handleSubOptionToggle = () => {\n    const next = !isSubOptionChecked;\n    setIsSubOptionChecked(next);\n    onSubOptionChange?.(next);\n  };\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <motion.div\n        layout\n        initial={false}\n        className={`w-[340px] overflow-hidden rounded-[35px] bg-transparent p-[5px] transition-colors duration-300 will-change-transform  ${\n          isEnabled\n            ? 'border-[1.5px] border-[#EBEBF0] dark:border-neutral-800 dark:bg-neutral-900'\n            : 'border border-transparent shadow-none'\n        }`}\n        style={{\n          borderRadius: 32,\n        }}\n      >\n        <div className=\"flex flex-col\">\n          <motion.div\n            layout\n            className=\"dark:bg-nuetral-800 flex cursor-pointer items-center justify-between rounded-[35px] bg-[#F6F5FA]  dark:bg-neutral-800 p-3 shadow-sm\"\n            onClick={handleToggle}\n          >\n            <div className=\"flex items-center gap-3\">\n              <div\n                className={`rounded-full p-2 text-[#ADACB8] transition-colors dark:text-neutral-500`}\n              >\n                <RiBubbleChartFill size={24} />\n              </div>\n              <span className=\"text-lg font-bold tracking-tight text-[#28272A] dark:text-neutral-100\">\n                {title}\n              </span>\n            </div>\n\n            <div\n              className={`relative h-7 w-12 rounded-full transition-colors duration-300 ${\n                isEnabled ? 'bg-[#EE2563]' : 'bg-gray-200 dark:bg-neutral-700'\n              }`}\n            >\n              <motion.div\n                transition={springConfig}\n                className=\"absolute top-1 left-1 h-5 w-5 rounded-full bg-white shadow-sm\"\n                animate={{ x: isEnabled ? 20 : 0 }}\n              />\n            </div>\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {isEnabled && (\n              <motion.div className=\"flex gap-4\" layout>\n                <motion.div\n                  initial={{ y: 10, opacity: 0, scale: 1.1 }}\n                  animate={{ y: 0, opacity: 1, scale: 1 }}\n                  className=\"group flex cursor-pointer items-center gap-3 p-4\"\n                  onClick={handleSubOptionToggle}\n                >\n                  <div\n                    className={`flex h-6 w-6 items-center justify-center rounded-lg border-2 transition-all ${\n                      isSubOptionChecked\n                        ? 'border-[#28272A] bg-[#28272A] dark:border-neutral-100 dark:bg-neutral-100'\n                        : 'border-[#EBEBF0] bg-white group-hover:border-gray-300 dark:border-neutral-800 dark:bg-neutral-950 dark:group-hover:border-neutral-700'\n                    }`}\n                  >\n                    <AnimatePresence>\n                      {isSubOptionChecked && (\n                        <motion.div\n                          initial={{\n                            scale: 1.2,\n                            opacity: 0,\n                            filter: 'blur(4px)',\n                          }}\n                          animate={{\n                            scale: 1,\n                            opacity: 1,\n                            filter: 'blur(0px)',\n                          }}\n                          exit={{ scale: 0.5, opacity: 0, filter: 'blur(4px)' }}\n                          whileTap={{ scale: 1.01 }}\n                        >\n                          <Check\n                            size={14}\n                            className=\"text-white dark:text-neutral-900\"\n                            strokeWidth={4}\n                          />\n                        </motion.div>\n                      )}\n                    </AnimatePresence>\n                  </div>\n\n                  <span className=\"text-[17px] font-semibold text-[#6C6B72] transition-colors group-hover:text-gray-800 dark:text-neutral-400 dark:group-hover:text-neutral-200\">\n                    {subOptionLabel}\n                  </span>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-disclosure-base",
      "type": "registry:component",
      "title": "Switch Disclosure (base)",
      "description": "Theme-ready base variant of A premium interactive disclosure component that pairs a primary switch with nested behavioral sub-options..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Transition,\n  MotionConfig,\n} from 'motion/react';\nimport { Check } from 'lucide-react';\nimport { RiBubbleChartFill } from 'react-icons/ri';\n\ninterface SwitchDisclosureProps {\n  title?: string;\n  subOptionLabel?: string;\n  defaultEnabled?: boolean;\n  defaultSubOptionChecked?: boolean;\n  onToggleChange?: (enabled: boolean) => void;\n  onSubOptionChange?: (checked: boolean) => void;\n}\n\nconst springConfig: Transition = {\n  type: 'spring',\n  stiffness: 800,\n  damping: 80,\n  mass: 5,\n};\nexport const SwitchDisclosure: React.FC<SwitchDisclosureProps> = ({\n  title = 'Predictive Completion',\n  subOptionLabel = 'Enable Inline Suggestions',\n  defaultEnabled = false,\n  defaultSubOptionChecked = false,\n  onToggleChange,\n  onSubOptionChange,\n}) => {\n  const [isEnabled, setIsEnabled] = useState(defaultEnabled);\n  const [isSubOptionChecked, setIsSubOptionChecked] = useState(\n    defaultSubOptionChecked,\n  );\n\n  const handleToggle = () => {\n    const next = !isEnabled;\n    setIsEnabled(next);\n    onToggleChange?.(next);\n  };\n\n  const handleSubOptionToggle = () => {\n    const next = !isSubOptionChecked;\n    setIsSubOptionChecked(next);\n    onSubOptionChange?.(next);\n  };\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <motion.div\n        layout\n        initial={false}\n        style={{ fontFamily: 'var(--font-sans)' }}\n        className={`theme-injected w-80 sm:w-96 overflow-hidden rounded-3xl p-1 transition-colors duration-300 will-change-transform ${\n          isEnabled\n            ? 'border border-border bg-card text-card-foreground shadow-sm'\n            : 'border border-transparent bg-transparent text-foreground shadow-none'\n        }`}\n      >\n        <div className=\"flex flex-col\">\n          <motion.div\n            layout\n            className=\"flex cursor-pointer items-center justify-between rounded-3xl border border-border bg-muted/40 p-3 shadow-xs\"\n            onClick={handleToggle}\n          >\n            <div className=\"flex items-center gap-3\">\n              <div className=\"rounded-full p-2 text-muted-foreground transition-colors\">\n                <RiBubbleChartFill size={24} />\n              </div>\n              <span className=\"text-lg font-bold tracking-tight text-foreground\">\n                {title}\n              </span>\n            </div>\n\n            <div\n              className={`relative h-7 w-12 rounded-full transition-colors duration-300 ${\n                isEnabled ? 'bg-primary' : 'bg-muted'\n              }`}\n            >\n              <motion.div\n                transition={springConfig}\n                className=\"absolute top-1 left-1 h-5 w-5 rounded-full bg-background shadow-sm\"\n                animate={{ x: isEnabled ? 20 : 0 }}\n              />\n            </div>\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {isEnabled && (\n              <motion.div className=\"flex gap-4\" layout>\n                <motion.div\n                  initial={{ y: 10, opacity: 0, scale: 1.1 }}\n                  animate={{ y: 0, opacity: 1, scale: 1 }}\n                  className=\"group flex cursor-pointer items-center gap-3 p-4\"\n                  onClick={handleSubOptionToggle}\n                >\n                  <div\n                    className={`flex h-6 w-6 items-center justify-center rounded-lg border-2 transition-all ${\n                      isSubOptionChecked\n                        ? 'border-foreground bg-foreground'\n                        : 'border-border bg-background group-hover:border-ring/40'\n                    }`}\n                  >\n                    <AnimatePresence>\n                      {isSubOptionChecked && (\n                        <motion.div\n                          initial={{\n                            scale: 1.2,\n                            opacity: 0,\n                            filter: 'blur(4px)',\n                          }}\n                          animate={{\n                            scale: 1,\n                            opacity: 1,\n                            filter: 'blur(0px)',\n                          }}\n                          exit={{ scale: 0.5, opacity: 0, filter: 'blur(4px)' }}\n                          whileTap={{ scale: 1.01 }}\n                        >\n                          <Check\n                            size={14}\n                            className=\"text-background\"\n                            strokeWidth={4}\n                          />\n                        </motion.div>\n                      )}\n                    </AnimatePresence>\n                  </div>\n\n                  <span className=\"text-base sm:text-lg font-semibold text-muted-foreground transition-colors group-hover:text-foreground\">\n                    {subOptionLabel}\n                  </span>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-mode",
      "type": "registry:component",
      "title": "Switch Mode",
      "description": "A premium, animated theme toggle switch with smooth spring physics and sliding icon states.",
      "dependencies": [
        "motion",
        "next-themes",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-mode.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport { useEffect, useState, type FC } from \"react\";\nimport { motion } from \"motion/react\";\nimport { IoMoon, IoMoonOutline, IoSunny, IoSunnyOutline } from \"react-icons/io5\";\nimport { useTheme } from \"next-themes\";\n\n/* --- Props --- */\ninterface SwitchModeProps {\n    width?: number;\n    height?: number;\n    darkColor?: string;\n    lightColor?: string;\n    knobDarkColor?: string;\n    knobLightColor?: string;\n    borderDarkColor?: string;\n    borderLightColor?: string;\n}\n\nexport const SwitchMode: FC<SwitchModeProps> = ({\n    width = 144,\n    height = 72,\n    darkColor = \"#0B0B0B\",\n    lightColor = \"#FFFFFF\",\n    knobDarkColor = \"#2A2A2E\",\n    knobLightColor = \"#F3F2F7\",\n    borderDarkColor = \"#4C4C50\",\n    borderLightColor = \"#D8D6E0\",\n}) => {\n    const [mounted, setMounted] = useState(false);\n    const { resolvedTheme, setTheme } = useTheme();\n\n    useEffect(() => {\n        requestAnimationFrame(() => setMounted(true));\n    }, []);\n\n    if (!mounted) {\n        return <div style={{ width, height }} className=\"rounded-full border-2 border-transparent\" />;\n    }\n\n    const isDark = resolvedTheme === \"dark\";\n    const iconSize = height * 0.45;\n\n    return (\n        <motion.button\n            onClick={() => setTheme(isDark ? \"light\" : \"dark\")}\n            className=\"relative flex items-center rounded-full border-2 transition-colors\"\n            style={{\n                width,\n                height,\n                borderColor: isDark ? borderDarkColor : borderLightColor,\n            }}\n        >\n            {/* TRACK */}\n            <motion.div\n                className=\"absolute inset-0 rounded-full\"\n                animate={{ backgroundColor: isDark ? darkColor : lightColor }}\n                transition={{ duration: 0.4 }}\n            />\n\n            {/* SLIDING KNOB */}\n            <motion.div\n                layout\n                layoutId=\"switch-knob\"\n                transition={{ type: \"spring\", stiffness: 260, damping: 20 }}\n                className=\"absolute rounded-full border-2 z-30\"\n                style={{\n                    width: height,\n                    height,\n                    right: isDark ? -2 : undefined,\n                    left: isDark ? undefined : -2,\n                    backgroundColor: isDark ? knobDarkColor : knobLightColor,\n                    borderColor: isDark ? borderDarkColor : borderLightColor,\n                }}\n            />\n\n            {/* SUN */}\n            <motion.div\n                className=\"relative z-30 flex items-center justify-center\"\n                style={{ width: height, height }}\n                animate={{ rotate: isDark ? 45 : 0 }}\n                transition={{ stiffness: 20 }}\n            >\n                {isDark ? (\n                    <IoSunnyOutline\n                        color=\"#8A8A8F\"\n                        fill=\"#8A8A8F\"\n                        stroke=\"#8A8A8F\"\n                        style={{ width: iconSize, height: iconSize }}\n                        className=\"transition-colors duration-200\"\n                    />\n                ) : (\n                    <IoSunny\n                        color=\"#686771\"\n                        fill=\"#686771\"\n                        style={{ width: iconSize, height: iconSize }}\n                        className=\"transition-colors duration-200\"\n                    />\n                )}\n            </motion.div>\n\n            {/* MOON */}\n            <motion.div\n                className=\"relative z-30 flex items-center justify-center\"\n                style={{ width: height, height }}\n                animate={{ rotate: isDark ? 0 : 15 }}\n                transition={{ stiffness: 20, damping: 14 }}\n            >\n                {isDark ? (\n                    <IoMoon\n                        color=\"#F4F4FB\"\n                        fill=\"#F4F4FB\"\n                        style={{ width: iconSize, height: iconSize }}\n                        className=\"transition-colors duration-200\"\n                    />\n                ) : (\n                    <IoMoonOutline\n                        color=\"#ABABB4\"\n                        fill=\"#ABABB4\"\n                        stroke=\"#ABABB4\"\n                        style={{ width: iconSize, height: iconSize }}\n                        className=\"transition-colors duration-200\"\n                    />\n                )}\n            </motion.div>\n        </motion.button>\n    );\n};\n\n\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-mode-base",
      "type": "registry:component",
      "title": "Switch Mode (base)",
      "description": "Theme-ready base variant of A premium, animated theme toggle switch with smooth spring physics and sliding icon states..",
      "dependencies": [
        "motion",
        "next-themes",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-mode.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useState, type FC } from 'react';\nimport { motion } from 'motion/react';\nimport {\n  IoMoon,\n  IoMoonOutline,\n  IoSunny,\n  IoSunnyOutline,\n} from 'react-icons/io5';\nimport { useTheme } from 'next-themes';\n\ninterface SwitchModeProps {\n  width?: number;\n  height?: number;\n}\n\nexport const SwitchMode: FC<SwitchModeProps> = ({\n  width = 144,\n  height = 72,\n}) => {\n  const [mounted, setMounted] = useState(false);\n  const { resolvedTheme, setTheme } = useTheme();\n\n  useEffect(() => {\n    requestAnimationFrame(() => setMounted(true));\n  }, []);\n\n  if (!mounted) {\n    return (\n      <div\n        style={{ width, height }}\n        className=\"theme-injected border-border rounded-lg border-2\"\n      />\n    );\n  }\n\n  const isDark = resolvedTheme === 'dark';\n  const iconSize = height * 0.45;\n\n  return (\n    <motion.button\n      onClick={() => setTheme(isDark ? 'light' : 'dark')}\n      className=\"theme-injected border-border bg-background relative flex items-center rounded-lg border-2 transition-colors\"\n      style={{ width, height }}\n    >\n      {/* TRACK */}\n      <motion.div\n        className=\"bg-background absolute inset-0 rounded-lg\"\n        transition={{ duration: 0.4 }}\n      />\n\n      {/* KNOB */}\n      <motion.div\n        layout\n        layoutId=\"switch-knob\"\n        transition={{ type: 'spring', stiffness: 260, damping: 20 }}\n        className=\"border-border bg-muted shadow-xs absolute z-30 rounded-lg border-2\"\n        style={{\n          width: height,\n          height,\n          right: isDark ? -2 : undefined,\n          left: isDark ? undefined : -2,\n        }}\n      />\n\n      {/* SUN */}\n      <motion.div\n        className=\"relative z-30 flex items-center justify-center\"\n        style={{ width: height, height }}\n        animate={{ rotate: isDark ? 45 : 0 }}\n        transition={{ stiffness: 20 }}\n      >\n        {isDark ? (\n          <IoSunnyOutline\n            className=\"text-muted-foreground transition-colors duration-200\"\n            style={{ width: iconSize, height: iconSize }}\n          />\n        ) : (\n          <IoSunny\n            className=\"text-foreground transition-colors duration-200\"\n            style={{ width: iconSize, height: iconSize }}\n          />\n        )}\n      </motion.div>\n\n      {/* MOON */}\n      <motion.div\n        className=\"relative z-30 flex items-center justify-center\"\n        style={{ width: height, height }}\n        animate={{ rotate: isDark ? 0 : 15 }}\n        transition={{ stiffness: 20, damping: 14 }}\n      >\n        {isDark ? (\n          <IoMoon\n            className=\"text-foreground transition-colors duration-200\"\n            style={{ width: iconSize, height: iconSize }}\n          />\n        ) : (\n          <IoMoonOutline\n            className=\"text-muted-foreground transition-colors duration-200\"\n            style={{ width: iconSize, height: iconSize }}\n          />\n        )}\n      </motion.div>\n    </motion.button>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tags",
      "type": "registry:component",
      "title": "Tags",
      "description": "A dynamic tag management component with smooth shared-layout transitions and auto-scrolling.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/tags.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { motion, MotionConfig } from 'motion/react';\nimport { X } from 'lucide-react';\n\nexport type Tag = {\n  id: string;\n  label: string;\n};\n\ntype TagsProps = {\n  tags?: Tag[];\n};\n\nconst DEFAULT_TAGS: Tag[] = [\n  { id: 'javascript', label: 'Javascript' },\n  { id: 'express', label: 'Express' },\n  { id: 'vue', label: 'Vue' },\n  { id: 'jest', label: 'Jest' },\n  { id: 'next', label: 'Next' },\n  { id: 'typescript', label: 'Typescript' },\n  { id: 'redis', label: 'Redis' },\n  { id: 'git', label: 'Git' },\n  { id: 'node', label: 'Node' },\n];\n\nexport function Tags({ tags = DEFAULT_TAGS }: TagsProps) {\n  const [selecteds, setSelecteds] = useState<Tag[]>([]);\n\n  const selectedsContainerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (selectedsContainerRef.current) {\n      selectedsContainerRef.current.scrollTo({\n        left: selectedsContainerRef.current.scrollWidth,\n        behavior: 'smooth',\n      });\n    }\n  }, [selecteds]);\n\n  const removeSelectedTag = (id: string) => {\n    setSelecteds((prev) => prev.filter((tag) => tag.id !== id));\n  };\n\n  const addSelectedTag = (tag: Tag) => {\n    setSelecteds((prev) => [...prev, tag]);\n  };\n\n  return (\n    <MotionConfig transition={{ type: 'spring', stiffness: 300, damping: 40 }}>\n      <div className=\"relative flex w-[340px] flex-col p-6 sm:w-sm\">\n        <motion.h2\n          layout\n          className=\"text-xl font-semibold text-black dark:text-white\"\n        >\n          TAGS\n        </motion.h2>\n        <motion.div\n          ref={selectedsContainerRef}\n          layout\n          className=\"mt-2 mb-3 flex min-h-14 w-full flex-wrap gap-1.5 rounded-2xl border-[1.6px] border-[#E5E5E5] bg-[#fefefe] p-1.5 dark:border-neutral-800 dark:bg-neutral-900\"\n        >\n          {selecteds.map((tag) => (\n            <motion.div\n              key={tag.id}\n              layoutId={`tag-${tag.id}`}\n              className=\"flex w-fit items-center gap-1 border-[1.6px] border-[#E5E5E5] bg-white py-1 pr-1 pl-3 dark:border-neutral-700 dark:bg-neutral-800\"\n              style={{ borderRadius: 10, zIndex: 20, }}\n            >\n              <motion.span\n                layoutId={`tag-${tag.id}-label`}\n                className=\"truncate font-medium text-gray-700 dark:text-neutral-200\"\n              >\n                {tag.label}\n              </motion.span>\n\n              <button\n                title=\"close\"\n                onClick={() => removeSelectedTag(tag.id)}\n                className=\"rounded-full p-1\"\n              >\n                <X className=\"size-5 text-gray-400 dark:text-neutral-400\" />\n              </button>\n            </motion.div>\n          ))}\n        </motion.div>\n        {tags.length > selecteds.length && (\n          <motion.div\n            layout\n            className=\"w-full rounded-2xl border-[1.6px] border-[#E5E5E5] bg-white p-2 dark:border-neutral-800 dark:bg-neutral-900\"\n          >\n            <motion.div className=\"flex flex-wrap gap-2\">\n              {tags\n                .filter(\n                  (tag) =>\n                    !selecteds.some((selected) => selected.id === tag.id),\n                )\n                .map((tag) => (\n                  <motion.button\n                    key={tag.id}\n                    layoutId={`tag-${tag.id}`}\n                    onClick={() => addSelectedTag(tag)}\n                    className=\"flex shrink-0 items-center gap-1 rounded-full bg-[#F4F4FB] px-4 py-2.5 dark:bg-neutral-700\"\n                    style={{ borderRadius: 10, zIndex: 10 }}\n                  >\n                    <motion.span\n                      layoutId={`tag-${tag.id}-label`}\n                      className=\"font-medium text-gray-700 dark:text-neutral-200\"\n                    >\n                      {tag.label}\n                    </motion.span>\n                  </motion.button>\n                ))}\n            </motion.div>\n          </motion.div>\n        )}\n      </div>\n    </MotionConfig>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tags-base",
      "type": "registry:component",
      "title": "Tags (base)",
      "description": "Theme-ready base variant of A dynamic tag management component with smooth shared-layout transitions and auto-scrolling..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/tags.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { motion, MotionConfig } from 'motion/react';\nimport { X } from 'lucide-react';\n\nexport type Tag = {\n  id: string;\n  label: string;\n};\n\ntype TagsProps = {\n  tags?: Tag[];\n};\n\nconst DEFAULT_TAGS: Tag[] = [\n  { id: 'javascript', label: 'Javascript' },\n  { id: 'express', label: 'Express' },\n  { id: 'vue', label: 'Vue' },\n  { id: 'jest', label: 'Jest' },\n  { id: 'next', label: 'Next' },\n  { id: 'typescript', label: 'Typescript' },\n  { id: 'redis', label: 'Redis' },\n  { id: 'git', label: 'Git' },\n  { id: 'node', label: 'Node' },\n];\n\nexport function Tags({ tags = DEFAULT_TAGS }: TagsProps) {\n  const [selecteds, setSelecteds] = useState<Tag[]>([]);\n\n  const selectedsContainerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (selectedsContainerRef.current) {\n      selectedsContainerRef.current.scrollTo({\n        left: selectedsContainerRef.current.scrollWidth,\n        behavior: 'smooth',\n      });\n    }\n  }, [selecteds]);\n\n  const removeSelectedTag = (id: string) => {\n    setSelecteds((prev) => prev.filter((tag) => tag.id !== id));\n  };\n\n  const addSelectedTag = (tag: Tag) => {\n    setSelecteds((prev) => [...prev, tag]);\n  };\n\n  return (\n    <MotionConfig transition={{ type: 'spring', stiffness: 300, damping: 40 }}>\n      <div className=\"theme-injected relative flex w-85 flex-col p-6 font-sans sm:w-sm\">\n        <motion.h2\n          layout\n          className=\"font-sans text-xl font-semibold text-foreground\"\n        >\n          TAGS\n        </motion.h2>\n        <motion.div\n          ref={selectedsContainerRef}\n          layout\n          className=\"mt-2 mb-3 flex min-h-14 w-full flex-wrap gap-1.5 rounded-2xl border-[1.6px] border-border bg-card p-1.5\"\n        >\n          {selecteds.map((tag) => (\n            <motion.div\n              key={tag.id}\n              layoutId={`tag-${tag.id}`}\n              className=\"flex w-fit items-center gap-1 border-[1.6px] border-border bg-background py-1 pr-1 pl-3\"\n              style={{ borderRadius: 10, zIndex: 20, }}\n            >\n              <motion.span\n                layoutId={`tag-${tag.id}-label`}\n                className=\"truncate font-sans font-medium text-foreground\"\n              >\n                {tag.label}\n              </motion.span>\n\n              <button\n                title=\"close\"\n                onClick={() => removeSelectedTag(tag.id)}\n                className=\"rounded-full p-1\"\n              >\n                <X className=\"size-5 text-muted-foreground\" />\n              </button>\n            </motion.div>\n          ))}\n        </motion.div>\n        {tags.length > selecteds.length && (\n          <motion.div\n            layout\n            className=\"w-full rounded-2xl border-[1.6px] border-border bg-card p-2\"\n          >\n            <motion.div className=\"flex flex-wrap gap-2\">\n              {tags\n                .filter(\n                  (tag) =>\n                    !selecteds.some((selected) => selected.id === tag.id),\n                )\n                .map((tag) => (\n                  <motion.button\n                    key={tag.id}\n                    layoutId={`tag-${tag.id}`}\n                    onClick={() => addSelectedTag(tag)}\n                    className=\"flex shrink-0 items-center gap-1 rounded-full bg-muted px-4 py-2.5 transition-colors hover:bg-background\"\n                    style={{ borderRadius: 10, zIndex: 10 }}\n                  >\n                    <motion.span\n                      layoutId={`tag-${tag.id}-label`}\n                      className=\"font-sans font-medium text-muted-foreground\"\n                    >\n                      {tag.label}\n                    </motion.span>\n                  </motion.button>\n                ))}\n            </motion.div>\n          </motion.div>\n        )}\n      </div>\n    </MotionConfig>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "task-widget-disclosure",
      "type": "registry:component",
      "title": "Task Widget Disclosure",
      "description": "An interactive task widget with smooth disclosure animations and detailed progress tracking.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/task-widget-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { MoreHorizontal, Check, ChevronDown } from 'lucide-react';\nimport { Flag01Icon, Settings03Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { BiSolidHourglassBottom } from 'react-icons/bi';\nimport { IoIosCheckmarkCircleOutline } from 'react-icons/io';\n\n// --- Types ---\nexport interface Subtask {\n  id: string;\n  title: string;\n  completed: boolean;\n}\n\nexport interface Assignee {\n  name: string;\n  avatar: string;\n  color: string;\n}\n\nexport interface TaskData {\n  title: string;\n  progress: number;\n  completedCount: number;\n  totalCount: number;\n  priority: string;\n  status: string;\n  subtasks: Subtask[];\n  assignees: Assignee[];\n}\n\ninterface Props {\n  data: TaskData;\n}\n\nexport const TaskWidget: React.FC<Props> = ({ data }) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  const Transition = {\n    ease: [0.25, 0.1, 0.25, 1],\n    duration: 0.3,\n  } as const;\n\n  return (\n    <LayoutGroup>\n      <motion.div\n        layout\n        initial={false}\n        onClick={() => setIsOpen(!isOpen)}\n        transition={Transition}\n        className={`relative w-full cursor-pointer overflow-hidden border-2 border-neutral-100 bg-white shadow-xl transition-colors select-none sm:w-[440px] dark:border-neutral-800 dark:bg-neutral-950 ${\n          isOpen\n            ? 'rounded-[24px] p-5 sm:rounded-[26px] sm:p-[22px]'\n            : 'rounded-[20px] p-3 sm:p-[12px]'\n        }`}\n      >\n        {/* --- Header Section --- */}\n        <div className=\"relative z-10 flex items-center justify-between gap-2\">\n          <motion.div\n            layout=\"position\"\n            transition={Transition}\n            className={`flex items-center gap-2 ${isOpen ? 'bg-transparent' : 'bg-neutral-50 dark:bg-neutral-900'} rounded-lg py-0.5 pr-2 pl-1.5 transition-colors sm:pr-2 sm:pl-1.5`}\n          >\n            <motion.div\n              layout\n              transition={Transition}\n              className={`my-0.5 flex items-center justify-center rounded-lg border-[1.7px] border-neutral-200 bg-white transition-colors dark:border-neutral-700 dark:bg-neutral-900 ${isOpen ? 'h-10 w-10 sm:h-12 sm:w-12' : 'size-7 sm:size-8'}`}\n            >\n              <HugeiconsIcon\n                icon={Settings03Icon}\n                size={isOpen ? 20 : 15}\n                className=\"text-neutral-400 sm:hidden dark:text-neutral-500\"\n                strokeWidth={1.5}\n              />\n              <HugeiconsIcon\n                icon={Settings03Icon}\n                size={isOpen ? 24 : 17}\n                className=\"hidden text-neutral-400 sm:block dark:text-neutral-500\"\n                strokeWidth={1.5}\n              />\n            </motion.div>\n            <motion.h2\n              layout\n              transition={Transition}\n              className={`origin-left font-sans font-semibold text-neutral-800 transition-colors dark:text-neutral-100 ${isOpen ? 'text-xl sm:text-3xl' : 'text-sm whitespace-nowrap sm:text-base'}`}\n            >\n              {data.title}\n            </motion.h2>\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <motion.div\n                key=\"collapsed-progress\"\n                initial={{ opacity: 0, scale: 0.9, x: 10 }}\n                animate={{ opacity: 1, scale: 1, x: 0 }}\n                exit={{ opacity: 0, scale: 0.9, x: 10 }}\n                transition={{ duration: 0.15 }}\n                className=\"flex items-center gap-3\"\n              >\n                <motion.div\n                  layoutId=\"progress-container\"\n                  className=\"relative h-2 w-16 overflow-hidden rounded-full bg-neutral-100 transition-colors sm:w-32 dark:bg-neutral-700\"\n                >\n                  <motion.div\n                    layoutId=\"progress-fill\"\n                    className=\"relative h-full overflow-hidden rounded-full bg-green-500\"\n                    style={{ width: `${data.progress}%` }}\n                  >\n                    <motion.div\n                      initial={{ x: '-100%' }}\n                      animate={{ x: '100%' }}\n                      transition={{\n                        repeat: Infinity,\n                        duration: 1.5,\n                        ease: 'linear',\n                      }}\n                      className=\"absolute inset-0 h-full w-full\"\n                      style={{\n                        background:\n                          'linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent)',\n                      }}\n                    />\n                  </motion.div>\n                </motion.div>\n                <motion.span\n                  layoutId=\"progress-text\"\n                  className=\"text-xs font-medium text-neutral-500 transition-colors sm:text-base dark:text-neutral-400\"\n                >\n                  {data.progress}%\n                </motion.span>\n              </motion.div>\n            ) : (\n              <motion.button\n                key=\"more-btn\"\n                initial={{ opacity: 0, scale: 0.8 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.8 }}\n                transition={{ duration: 0.15 }}\n                className=\"rounded-md border-2 border-neutral-100 bg-white p-1.5 px-1.5 text-black transition-colors dark:border-neutral-800 dark:bg-neutral-950 dark:text-white\"\n              >\n                <MoreHorizontal size={22} />\n              </motion.button>\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* --- Collapsed Sub-Header --- */}\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen && (\n            <motion.div\n              layout\n              initial={{ opacity: 0, y: 5 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: 5 }}\n              transition={{ duration: 0.15 }}\n              className=\"mt-3 flex items-center justify-between px-1\"\n            >\n              <div className=\"flex items-center gap-3 text-xs font-medium sm:gap-4 sm:text-sm\">\n                <div className=\"flex items-center gap-1 text-neutral-500 sm:gap-1.5 dark:text-neutral-400\">\n                  <motion.div\n                    layoutId=\"priority-icon\"\n                    className=\"flex items-center\"\n                  >\n                    <HugeiconsIcon\n                      icon={Flag01Icon}\n                      size={18}\n                      className=\"sm:hidden\"\n                      color=\"currentColor\"\n                      fill=\"currentColor\"\n                      strokeWidth={1.5}\n                    />\n                    <HugeiconsIcon\n                      icon={Flag01Icon}\n                      size={22}\n                      className=\"hidden sm:block\"\n                      color=\"currentColor\"\n                      fill=\"currentColor\"\n                      strokeWidth={1.5}\n                    />\n                  </motion.div>\n                  <motion.span layoutId=\"priority-text\">\n                    {data.priority}\n                  </motion.span>\n                </div>\n                <div className=\"flex items-center gap-1 text-neutral-500 sm:gap-1.5 dark:text-neutral-400\">\n                  <motion.div\n                    layoutId=\"status-icon\"\n                    className=\"flex items-center\"\n                  >\n                    <BiSolidHourglassBottom className=\"h-4 w-4 text-neutral-400 sm:h-[22px] sm:w-[22px]\" />\n                  </motion.div>\n                  <motion.span layoutId=\"status-text\">\n                    {data.status}\n                  </motion.span>\n                </div>\n              </div>\n              <div className=\"flex -space-x-2\">\n                {data.assignees.map((u, i) => (\n                  <motion.img\n                    layoutId={`avatar-${u.name}`}\n                    key={i}\n                    src={u.avatar}\n                    className=\"h-7 w-7 rounded-full border-2 border-neutral-200 shadow-lg sm:h-8 sm:w-8 dark:border-neutral-700\"\n                  />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* --- Expanded Content --- */}\n        <AnimatePresence mode=\"popLayout\">\n          {isOpen && (\n            <motion.div\n              layout\n              initial={{ opacity: 0, y: -20 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -20, transition: { duration: 0.1 } }}\n              transition={{ ...Transition, delay: 0.05 }}\n              className=\"mt-6 origin-top\"\n            >\n              {/* Progress Bar Container */}\n              <div className=\"mb-7 flex w-fit items-center gap-1.5 rounded-full border-[1.5px] border-neutral-200 bg-neutral-50/50 px-2 py-1 transition-colors sm:gap-2 sm:px-2.5 sm:py-1.5 dark:border-neutral-700 dark:bg-neutral-800/50\">\n                <div className=\"flex h-5 w-5 items-center justify-center rounded-full\">\n                  <IoIosCheckmarkCircleOutline\n                    size={24}\n                    className=\"text-neutral-300 dark:text-neutral-600\"\n                  />\n                </div>\n                <span className=\"text-sm font-semibold text-neutral-400 dark:text-neutral-500\">\n                  <span className=\"text-neutral-400 dark:text-neutral-500\">\n                    {data.completedCount}\n                  </span>{' '}\n                  of {data.totalCount}\n                </span>\n                <motion.div\n                  layoutId=\"progress-container\"\n                  className=\"mx-1 h-2 w-20 rounded-full bg-neutral-100 transition-colors sm:w-28 dark:bg-neutral-700\"\n                >\n                  <motion.div\n                    layoutId=\"progress-fill\"\n                    className=\"relative h-full overflow-hidden rounded-full bg-green-500\"\n                    style={{ width: `${data.progress}%` }}\n                  >\n                    <motion.div\n                      initial={{ x: '-100%' }}\n                      animate={{ x: '100%' }}\n                      transition={{\n                        repeat: Infinity,\n                        duration: 1.5,\n                        ease: 'linear',\n                      }}\n                      className=\"absolute inset-0 h-full w-full\"\n                      style={{\n                        background:\n                          'linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent)',\n                      }}\n                    />\n                  </motion.div>\n                </motion.div>\n                <motion.span\n                  layoutId=\"progress-text\"\n                  className=\"text-sm font-semibold text-neutral-600 dark:text-neutral-200\"\n                >\n                  {data.progress}%\n                </motion.span>\n              </div>\n\n              {/* Subtasks */}\n              <div className=\"relative mb-8 ml-6 flex flex-col gap-5\">\n                <motion.div\n                  initial={{ scaleY: 0 }}\n                  animate={{ scaleY: 1 }}\n                  className=\"absolute top-0 bottom-4 left-0 w-[1.7px] origin-top bg-neutral-300 transition-colors dark:bg-neutral-700\"\n                />\n                {data.subtasks.map((task, idx) => (\n                  <motion.div\n                    key={task.id}\n                    initial={{ opacity: 0, x: -10 }}\n                    animate={{ opacity: 1, x: 0 }}\n                    transition={{ delay: 0.1 + idx * 0.03 }}\n                    className=\"relative flex items-center pl-8\"\n                  >\n                    <div className=\"absolute top-[-10px] left-0 h-[30px] w-4 rounded-bl-xl border-b-[1.7px] border-l-[1.7px] border-neutral-300 transition-colors sm:w-5 dark:border-neutral-700\" />\n                    <div\n                      className={`flex h-5 w-5 items-center justify-center rounded-full border-[1.7px] transition-colors ${task.completed ? 'border-neutral-600 bg-neutral-600 dark:border-neutral-200 dark:bg-neutral-200' : 'border-neutral-300 bg-white dark:border-neutral-600 dark:bg-transparent'}`}\n                    >\n                      {task.completed && (\n                        <Check\n                          size={12}\n                          className=\"text-white dark:text-black\"\n                          strokeWidth={3}\n                        />\n                      )}\n                    </div>\n                    <span\n                      className={`ml-3 text-base font-medium transition-colors ${task.completed ? 'text-neutral-400 dark:text-neutral-500' : 'text-neutral-500 dark:text-neutral-300'}`}\n                    >\n                      {task.title}\n                    </span>\n                  </motion.div>\n                ))}\n              </div>\n\n              {/* Priority & Status */}\n              <div className=\"mb-6 space-y-4\">\n                {[\n                  {\n                    label: 'Priority',\n                    val: data.priority,\n                    icon: (\n                      <HugeiconsIcon\n                        icon={Flag01Icon}\n                        size={22}\n                        className=\"text-neutral-400\"\n                        strokeWidth={1.5}\n                      />\n                    ),\n                    badge:\n                      'bg-red-100 text-red-600 dark:bg-red-950 dark:text-red-400',\n                    chevronWrap: 'bg-red-50 dark:bg-neutral-900',\n                    chevron: 'text-red-700 dark:text-red-400',\n                    layoutId: 'priority',\n                  },\n                  {\n                    label: 'Status',\n                    val: data.status,\n                    icon: (\n                      <BiSolidHourglassBottom\n                        className=\"text-neutral-400\"\n                        size={22}\n                      />\n                    ),\n                    badge:\n                      'bg-amber-100 text-amber-700 dark:bg-amber-950 dark:text-amber-300',\n                    chevronWrap: 'bg-amber-50 dark:bg-neutral-900',\n                    chevron: 'text-amber-700 dark:text-amber-300',\n                    layoutId: 'status',\n                  },\n                ].map((item, i) => (\n                  <motion.div\n                    key={i}\n                    className=\"flex items-center gap-4 px-1 font-medium sm:gap-8\"\n                  >\n                    <div className=\"flex min-w-[80px] items-center gap-3 text-neutral-600 transition-colors sm:min-w-[100px] dark:text-neutral-200\">\n                      <motion.div\n                        layoutId={`${item.layoutId}-icon`}\n                        className=\"flex items-center\"\n                      >\n                        {item.icon}\n                      </motion.div>\n                      {item.label}\n                    </div>\n                    <div\n                      className={`${item.badge} flex items-center gap-2 rounded-lg px-3 py-1 text-sm font-bold opacity-85 transition-colors`}\n                    >\n                      <motion.span layoutId={`${item.layoutId}-text`}>\n                        {item.val}\n                      </motion.span>\n                      <span\n                        className={`${item.chevronWrap} border-0.5 flex items-center justify-center rounded-sm p-px transition-colors`}\n                      >\n                        <ChevronDown\n                          size={16}\n                          className={item.chevron}\n                          strokeWidth={2}\n                        />\n                      </span>\n                    </div>\n                  </motion.div>\n                ))}\n              </div>\n\n              {/* Assignees */}\n              <div className=\"flex flex-wrap gap-2\">\n                {data.assignees.map((user, i) => (\n                  <motion.div\n                    key={i}\n                    className=\"flex items-center gap-2 rounded-full border-[1.58px] border-neutral-200 py-1 pr-4 pl-1.5 shadow-sm transition-colors dark:border-neutral-700 dark:bg-neutral-800\"\n                  >\n                    <motion.img\n                      layoutId={`avatar-${user.name}`}\n                      title=\"avatar\"\n                      src={user.avatar}\n                      className=\"h-7 w-7 rounded-full object-cover\"\n                    />\n                    <span className=\"text-sm font-semibold text-neutral-500 transition-colors dark:text-neutral-200\">\n                      {user.name}\n                    </span>\n                  </motion.div>\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </LayoutGroup>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "task-widget-disclosure-base",
      "type": "registry:component",
      "title": "Task Widget Disclosure (base)",
      "description": "Theme-ready base variant of An interactive task widget with smooth disclosure animations and detailed progress tracking..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/task-widget-disclosure.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence, LayoutGroup } from 'motion/react';\nimport { MoreHorizontal, Check, ChevronDown } from 'lucide-react';\nimport { Flag01Icon, Settings03Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { BiSolidHourglassBottom } from 'react-icons/bi';\nimport { IoIosCheckmarkCircleOutline } from 'react-icons/io';\n\n// --- Types ---\nexport interface Subtask {\n  id: string;\n  title: string;\n  completed: boolean;\n}\n\nexport interface Assignee {\n  name: string;\n  avatar: string;\n  color: string;\n}\n\nexport interface TaskData {\n  title: string;\n  progress: number;\n  completedCount: number;\n  totalCount: number;\n  priority: string;\n  status: string;\n  subtasks: Subtask[];\n  assignees: Assignee[];\n}\n\ninterface Props {\n  data: TaskData;\n}\n\nexport const TaskWidget: React.FC<Props> = ({ data }) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  const Transition = {\n    ease: [0.25, 0.1, 0.25, 1],\n    duration: 0.3,\n  } as const;\n\n  return (\n    <LayoutGroup>\n      <motion.div\n        layout\n        initial={false}\n        onClick={() => setIsOpen(!isOpen)}\n        transition={Transition}\n        className={`theme-injected relative w-full cursor-pointer overflow-hidden border-2 border-border bg-card shadow-lg transition-colors select-none sm:w-[440px] dark:border-border dark:bg-card ${\n          isOpen\n            ? 'rounded-[24px] p-5 sm:rounded-[26px] sm:p-[22px]'\n            : 'rounded-[20px] p-3 sm:p-[12px]'\n        }`}\n      >\n        {/* --- Header Section --- */}\n        <div className=\"relative z-10 flex items-center justify-between gap-2\">\n          <motion.div\n            layout=\"position\"\n            transition={Transition}\n            className={`flex items-center gap-2 ${isOpen ? 'bg-transparent' : 'bg-muted dark:bg-muted'} rounded-3xl py-0.5 pr-2 pl-1.5 transition-colors sm:pr-2 sm:pl-1.5`}\n          >\n            <motion.div\n              layout\n              transition={Transition}\n              className={`my-0.5 flex items-center justify-center rounded-3xl border-[1.7px] border-border bg-card transition-colors dark:border-border dark:bg-card ${isOpen ? 'h-10 w-10 sm:h-12 sm:w-12' : 'size-7 sm:size-8'}`}\n            >\n              <HugeiconsIcon\n                icon={Settings03Icon}\n                size={isOpen ? 20 : 15}\n                className=\"text-muted-foreground sm:hidden dark:text-muted-foreground\"\n                strokeWidth={1.5}\n              />\n              <HugeiconsIcon\n                icon={Settings03Icon}\n                size={isOpen ? 24 : 17}\n                className=\"hidden text-muted-foreground sm:block dark:text-muted-foreground\"\n                strokeWidth={1.5}\n              />\n            </motion.div>\n            <motion.h2\n              layout\n              transition={Transition}\n              className={`origin-left font-sans font-semibold text-foreground transition-colors dark:text-foreground ${isOpen ? 'text-xl sm:text-3xl' : 'text-sm whitespace-nowrap sm:text-base'}`}\n            >\n              {data.title}\n            </motion.h2>\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <motion.div\n                key=\"collapsed-progress\"\n                initial={{ opacity: 0, scale: 0.9, x: 10 }}\n                animate={{ opacity: 1, scale: 1, x: 0 }}\n                exit={{ opacity: 0, scale: 0.9, x: 10 }}\n                transition={{ duration: 0.15 }}\n                className=\"flex items-center gap-3\"\n              >\n                <motion.div\n                  layoutId=\"progress-container\"\n                  className=\"relative h-2 w-16 overflow-hidden rounded-full bg-secondary transition-colors sm:w-32 dark:bg-secondary\"\n                >\n                  <motion.div\n                    layoutId=\"progress-fill\"\n                    className=\"relative h-full overflow-hidden rounded-full bg-primary\"\n                    style={{ width: `${data.progress}%` }}\n                  >\n                    <motion.div\n                      initial={{ x: '-100%' }}\n                      animate={{ x: '100%' }}\n                      transition={{\n                        repeat: Infinity,\n                        duration: 1.5,\n                        ease: 'linear',\n                      }}\n                      className=\"absolute inset-0 h-full w-full\"\n                      style={{\n                        background:\n                          'linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent)',\n                      }}\n                    />\n                  </motion.div>\n                </motion.div>\n                <motion.span\n                  layoutId=\"progress-text\"\n                  className=\"text-xs font-medium text-muted-foreground transition-colors sm:text-base dark:text-muted-foreground\"\n                >\n                  {data.progress}%\n                </motion.span>\n              </motion.div>\n            ) : (\n              <motion.button\n                key=\"more-btn\"\n                initial={{ opacity: 0, scale: 0.8 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.8 }}\n                transition={{ duration: 0.15 }}\n                className=\"rounded-3xl border-2 border-border bg-card p-1.5 px-1.5 text-foreground transition-colors dark:border-border dark:bg-card dark:text-foreground\"\n              >\n                <MoreHorizontal size={22} />\n              </motion.button>\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* --- Collapsed Sub-Header --- */}\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen && (\n            <motion.div\n              layout\n              initial={{ opacity: 0, y: 5 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: 5 }}\n              transition={{ duration: 0.15 }}\n              className=\"mt-3 flex items-center justify-between px-1\"\n            >\n              <div className=\"flex items-center gap-3 text-xs font-medium sm:gap-4 sm:text-sm\">\n                <div className=\"flex items-center gap-1 text-muted-foreground sm:gap-1.5 dark:text-muted-foreground\">\n                  <motion.div\n                    layoutId=\"priority-icon\"\n                    className=\"flex items-center\"\n                  >\n                    <HugeiconsIcon\n                      icon={Flag01Icon}\n                      size={18}\n                      className=\"sm:hidden\"\n                      color=\"currentColor\"\n                      fill=\"currentColor\"\n                      strokeWidth={1.5}\n                    />\n                    <HugeiconsIcon\n                      icon={Flag01Icon}\n                      size={22}\n                      className=\"hidden sm:block\"\n                      color=\"currentColor\"\n                      fill=\"currentColor\"\n                      strokeWidth={1.5}\n                    />\n                  </motion.div>\n                  <motion.span layoutId=\"priority-text\">\n                    {data.priority}\n                  </motion.span>\n                </div>\n                <div className=\"flex items-center gap-1 text-muted-foreground sm:gap-1.5 dark:text-muted-foreground\">\n                  <motion.div\n                    layoutId=\"status-icon\"\n                    className=\"flex items-center\"\n                  >\n                    <BiSolidHourglassBottom className=\"h-4 w-4 text-muted-foreground sm:h-[22px] sm:w-[22px]\" />\n                  </motion.div>\n                  <motion.span layoutId=\"status-text\">\n                    {data.status}\n                  </motion.span>\n                </div>\n              </div>\n              <div className=\"flex -space-x-2\">\n                {data.assignees.map((u, i) => (\n                  <motion.img\n                    layoutId={`avatar-${u.name}`}\n                    key={i}\n                    src={u.avatar}\n                    className=\"h-7 w-7 rounded-full border-2 border-border shadow-sm sm:h-8 sm:w-8 dark:border-border\"\n                  />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* --- Expanded Content --- */}\n        <AnimatePresence mode=\"popLayout\">\n          {isOpen && (\n            <motion.div\n              layout\n              initial={{ opacity: 0, y: -20 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -20, transition: { duration: 0.1 } }}\n              transition={{ ...Transition, delay: 0.05 }}\n              className=\"mt-6 origin-top\"\n            >\n              {/* Progress Bar Container */}\n              <div className=\"mb-7 flex w-fit items-center gap-1.5 rounded-full border-[1.5px] border-border bg-muted/50 px-2 py-1 transition-colors sm:gap-2 sm:px-2.5 sm:py-1.5 dark:border-border dark:bg-muted/50\">\n                <div className=\"flex h-5 w-5 items-center justify-center rounded-full\">\n                  <IoIosCheckmarkCircleOutline\n                    size={24}\n                    className=\"text-muted-foreground/50 dark:text-muted-foreground/50\"\n                  />\n                </div>\n                <span className=\"text-sm font-semibold text-muted-foreground dark:text-muted-foreground\">\n                  <span className=\"text-muted-foreground dark:text-muted-foreground\">\n                    {data.completedCount}\n                  </span>{' '}\n                  of {data.totalCount}\n                </span>\n                <motion.div\n                  layoutId=\"progress-container\"\n                  className=\"mx-1 h-2 w-20 rounded-full bg-secondary transition-colors sm:w-28 dark:bg-secondary\"\n                >\n                  <motion.div\n                    layoutId=\"progress-fill\"\n                    className=\"relative h-full overflow-hidden rounded-full bg-primary\"\n                    style={{ width: `${data.progress}%` }}\n                  >\n                    <motion.div\n                      initial={{ x: '-100%' }}\n                      animate={{ x: '100%' }}\n                      transition={{\n                        repeat: Infinity,\n                        duration: 1.5,\n                        ease: 'linear',\n                      }}\n                      className=\"absolute inset-0 h-full w-full\"\n                      style={{\n                        background:\n                          'linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent)',\n                      }}\n                    />\n                  </motion.div>\n                </motion.div>\n                <motion.span\n                  layoutId=\"progress-text\"\n                  className=\"text-sm font-semibold text-foreground dark:text-foreground\"\n                >\n                  {data.progress}%\n                </motion.span>\n              </div>\n\n              {/* Subtasks */}\n              <div className=\"relative mb-8 ml-6 flex flex-col gap-5\">\n                <motion.div\n                  initial={{ scaleY: 0 }}\n                  animate={{ scaleY: 1 }}\n                  className=\"absolute top-0 bottom-4 left-0 w-[1.7px] origin-top bg-border transition-colors dark:bg-border\"\n                />\n                {data.subtasks.map((task, idx) => (\n                  <motion.div\n                    key={task.id}\n                    initial={{ opacity: 0, x: -10 }}\n                    animate={{ opacity: 1, x: 0 }}\n                    transition={{ delay: 0.1 + idx * 0.03 }}\n                    className=\"relative flex items-center pl-8\"\n                  >\n                    <div className=\"absolute top-[-10px] left-0 h-[30px] w-4 rounded-bl-xl border-b-[1.7px] border-l-[1.7px] border-border transition-colors sm:w-5 dark:border-border\" />\n                    <div\n                      className={`flex h-5 w-5 items-center justify-center rounded-full border-[1.7px] transition-colors ${task.completed ? 'border-foreground bg-foreground dark:border-foreground dark:bg-foreground' : 'border-border bg-card dark:border-border dark:bg-transparent'}`}\n                    >\n                      {task.completed && (\n                        <Check\n                          size={12}\n                          className=\"text-card dark:text-card\"\n                          strokeWidth={3}\n                        />\n                      )}\n                    </div>\n                    <span\n                      className={`ml-3 text-base font-medium transition-colors ${task.completed ? 'text-muted-foreground dark:text-muted-foreground' : 'text-muted-foreground dark:text-muted-foreground'}`}\n                    >\n                      {task.title}\n                    </span>\n                  </motion.div>\n                ))}\n              </div>\n\n              {/* Priority & Status */}\n              <div className=\"mb-6 space-y-4\">\n                {[\n                  {\n                    label: 'Priority',\n                    val: data.priority,\n                    icon: (\n                      <HugeiconsIcon\n                        icon={Flag01Icon}\n                        size={22}\n                        className=\"text-muted-foreground\"\n                        strokeWidth={1.5}\n                      />\n                    ),\n                    badge:\n                      'bg-red-100 text-red-600 dark:bg-red-950 dark:text-red-400',\n                    chevronWrap: 'bg-red-50 dark:bg-muted',\n                    chevron: 'text-red-700 dark:text-red-400',\n                    layoutId: 'priority',\n                  },\n                  {\n                    label: 'Status',\n                    val: data.status,\n                    icon: (\n                      <BiSolidHourglassBottom\n                        className=\"text-muted-foreground\"\n                        size={22}\n                      />\n                    ),\n                    badge:\n                      'bg-amber-100 text-amber-700 dark:bg-amber-950 dark:text-amber-300',\n                    chevronWrap: 'bg-amber-50 dark:bg-muted',\n                    chevron: 'text-amber-700 dark:text-amber-300',\n                    layoutId: 'status',\n                  },\n                ].map((item, i) => (\n                  <motion.div\n                    key={i}\n                    className=\"flex items-center gap-4 px-1 font-medium sm:gap-8\"\n                  >\n                    <div className=\"flex min-w-[80px] items-center gap-3 text-foreground transition-colors sm:min-w-[100px] dark:text-foreground\">\n                      <motion.div\n                        layoutId={`${item.layoutId}-icon`}\n                        className=\"flex items-center\"\n                      >\n                        {item.icon}\n                      </motion.div>\n                      {item.label}\n                    </div>\n                    <div\n                      className={`${item.badge} flex items-center gap-2 rounded-2xl px-3 py-1 text-sm font-bold opacity-85 transition-colors`}\n                    >\n                      <motion.span layoutId={`${item.layoutId}-text`}>\n                        {item.val}\n                      </motion.span>\n                      <span\n                        className={`${item.chevronWrap} border-0.5 flex items-center justify-center rounded-2xl p-px transition-colors`}\n                      >\n                        <ChevronDown\n                          size={16}\n                          className={item.chevron}\n                          strokeWidth={2}\n                        />\n                      </span>\n                    </div>\n                  </motion.div>\n                ))}\n              </div>\n\n              {/* Assignees */}\n              <div className=\"flex flex-wrap gap-2\">\n                {data.assignees.map((user, i) => (\n                  <motion.div\n                    key={i}\n                    className=\"flex items-center gap-2 rounded-full border-[1.58px] border-border py-1 pr-4 pl-1.5 shadow-sm transition-colors dark:border-border dark:bg-muted\"\n                  >\n                    <motion.img\n                      layoutId={`avatar-${user.name}`}\n                      title=\"avatar\"\n                      src={user.avatar}\n                      className=\"h-7 w-7 rounded-full object-cover\"\n                    />\n                    <span className=\"text-sm font-semibold text-muted-foreground transition-colors dark:text-foreground\">\n                      {user.name}\n                    </span>\n                  </motion.div>\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </motion.div>\n    </LayoutGroup>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "time-undo-action",
      "type": "registry:component",
      "title": "Timed Undo Action",
      "description": "An animated timed undo button that provides a visual countdown before an action is finalized.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/time-undo-action.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Undo2 } from 'lucide-react';\nimport { useEffect, useState, type FC, type ReactNode } from 'react';\nimport { AnimatePresence, motion, MotionConfig } from 'motion/react';\nimport useMeasure from 'react-use-measure';\n\nexport interface TimedUndoActionProps {\n  initialSeconds?: number;\n  deleteLabel?: string;\n  undoLabel?: string;\n  icon?: ReactNode;\n}\n\nexport const TimedUndoAction: FC<TimedUndoActionProps> = ({\n  initialSeconds = 10,\n  deleteLabel = 'Delete Account',\n  undoLabel = 'Cancel Delete',\n  icon,\n}) => {\n  const [isDeleting, setIsDeleting] = useState(false);\n  const [countDown, setCountDown] = useState(initialSeconds);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  const handleDelete = () => {\n    setIsDeleting((prev) => {\n      const next = !prev;\n\n      if (next) {\n        setCountDown(initialSeconds);\n      }\n\n      return next;\n    });\n  };\n\n  useEffect(() => {\n    if (!isDeleting) return;\n\n    const interval = setInterval(() => {\n      setCountDown((prev) => {\n        if (prev < 1) {\n          setIsDeleting(false);\n          return initialSeconds;\n        }\n        return prev - 1;\n      });\n    }, 1000);\n\n    return () => {\n      clearInterval(interval);\n    };\n  }, [isDeleting, initialSeconds]);\n\n  return (\n    <div className=\"flex w-full items-center justify-center font-sans\">\n      <div className=\"flex flex-col items-center justify-center will-change-transform\">\n        <MotionConfig\n          transition={{\n            type: 'spring',\n            stiffness: 250,\n            damping: 22,\n          }}\n        >\n          <motion.div\n            className={cn(\n              'relative flex cursor-pointer items-center justify-start overflow-hidden rounded-full bg-red-500 transition-colors duration-300 dark:bg-red-500',\n              isDeleting && 'bg-red-500/10 dark:bg-red-500/20',\n            )}\n            animate={{\n              width: bounds.width > 0 ? bounds.width : 'auto',\n            }}\n            onClick={handleDelete}\n          >\n            <div\n              className={cn(\n                'flex items-center justify-center gap-2 px-6 py-3',\n                isDeleting && 'px-3',\n              )}\n              ref={ref}\n            >\n              <AnimatePresence mode=\"popLayout\">\n                {isDeleting && (\n                  <motion.div\n                    className=\"rounded-full bg-red-500 p-2\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                  >\n                    {icon ?? <Undo2 className=\"size-5 text-white\" />}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n\n              <div className=\"flex items-center justify-center gap-2\">\n                <AnimatedText\n                  text={isDeleting ? undoLabel : deleteLabel}\n                  className={cn(\n                    'z-10 text-lg',\n                    isDeleting ? 'text-red-400' : 'text-neutral-50',\n                  )}\n                />\n              </div>\n\n              <AnimatePresence mode=\"popLayout\">\n                {isDeleting && (\n                  <motion.div\n                    className=\"flex items-center justify-center rounded-full bg-red-500 px-3 py-1 text-neutral-50 tabular-nums\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                  >\n                    <AnimatePresence mode=\"popLayout\">\n                      <motion.span\n                        key={countDown}\n                        className=\"text-lg\"\n                        initial={{\n                          opacity: 0,\n                          y: -20,\n                          filter: 'blur(2px)',\n                          scale: 0.5,\n                        }}\n                        animate={{\n                          opacity: 1,\n                          y: 0,\n                          filter: 'blur(0px)',\n                          scale: 1,\n                        }}\n                        exit={{\n                          opacity: 0,\n                          y: 20,\n                          filter: 'blur(2px)',\n                          scale: 0.5,\n                        }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 240,\n                          damping: 20,\n                          mass: 1,\n                        }}\n                      >\n                        {countDown}\n                      </motion.span>\n                    </AnimatePresence>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex ', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n\nexport default TimedUndoAction;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "time-undo-action-base",
      "type": "registry:component",
      "title": "Timed Undo Action (base)",
      "description": "Theme-ready base variant of An animated timed undo button that provides a visual countdown before an action is finalized..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-use-measure"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "components/watermelon/time-undo-action.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Undo2 } from 'lucide-react';\nimport { useEffect, useState, type FC, type ReactNode } from 'react';\nimport { AnimatePresence, motion, MotionConfig } from 'motion/react';\nimport useMeasure from 'react-use-measure';\n\nexport interface TimedUndoActionProps {\n  initialSeconds?: number;\n  deleteLabel?: string;\n  undoLabel?: string;\n  icon?: ReactNode;\n}\n\nexport const TimedUndoAction: FC<TimedUndoActionProps> = ({\n  initialSeconds = 10,\n  deleteLabel = 'Delete Account',\n  undoLabel = 'Cancel Delete',\n  icon,\n}) => {\n  const [isDeleting, setIsDeleting] = useState(false);\n  const [countDown, setCountDown] = useState(initialSeconds);\n  const [ref, bounds] = useMeasure({ offsetSize: true });\n\n  const handleDelete = () => {\n    setIsDeleting((prev) => {\n      const next = !prev;\n\n      if (next) {\n        setCountDown(initialSeconds);\n      }\n\n      return next;\n    });\n  };\n\n  useEffect(() => {\n    if (!isDeleting) return;\n\n    const interval = setInterval(() => {\n      setCountDown((prev) => {\n        if (prev < 1) {\n          setIsDeleting(false);\n          return initialSeconds;\n        }\n        return prev - 1;\n      });\n    }, 1000);\n\n    return () => {\n      clearInterval(interval);\n    };\n  }, [isDeleting, initialSeconds]);\n\n  return (\n    <div className=\"flex w-full items-center justify-center font-sans\">\n      <div className=\"flex flex-col items-center justify-center will-change-transform\">\n        <MotionConfig\n          transition={{\n            type: 'spring',\n            stiffness: 250,\n            damping: 22,\n          }}\n        >\n          <motion.div\n            className={cn(\n              'bg-destructive relative flex cursor-pointer items-center justify-start overflow-hidden rounded-lg transition-colors duration-300',\n              isDeleting && 'bg-destructive/10',\n            )}\n            animate={{\n              width: bounds.width > 0 ? bounds.width : 'auto',\n            }}\n            onClick={handleDelete}\n          >\n            <div\n              className={cn(\n                'flex items-center justify-center gap-2 px-6 py-3',\n                isDeleting && 'px-3',\n              )}\n              ref={ref}\n            >\n              <AnimatePresence mode=\"popLayout\">\n                {isDeleting && (\n                  <motion.div\n                    className=\"bg-destructive rounded-lg p-2\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                  >\n                    {icon ?? (\n                      <Undo2 className=\"text-destructive-foreground size-5\" />\n                    )}\n                  </motion.div>\n                )}\n              </AnimatePresence>\n\n              <div className=\"flex items-center justify-center gap-2\">\n                <AnimatedText\n                  text={isDeleting ? undoLabel : deleteLabel}\n                  className={cn(\n                    'z-10 text-lg',\n                    isDeleting\n                      ? 'text-destructive'\n                      : 'text-destructive-foreground',\n                  )}\n                />\n              </div>\n\n              <AnimatePresence mode=\"popLayout\">\n                {isDeleting && (\n                  <motion.div\n                    className=\"bg-destructive text-destructive-foreground flex items-center justify-center rounded-lg px-3 py-1 tabular-nums\"\n                    initial={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                    animate={{\n                      opacity: 1,\n                      filter: 'blur(0px)',\n                    }}\n                    exit={{\n                      opacity: 0,\n                      filter: 'blur(2px)',\n                    }}\n                  >\n                    <AnimatePresence mode=\"popLayout\">\n                      <motion.span\n                        key={countDown}\n                        className=\"text-lg\"\n                        initial={{\n                          opacity: 0,\n                          y: -20,\n                          filter: 'blur(2px)',\n                          scale: 0.5,\n                        }}\n                        animate={{\n                          opacity: 1,\n                          y: 0,\n                          filter: 'blur(0px)',\n                          scale: 1,\n                        }}\n                        exit={{\n                          opacity: 0,\n                          y: 20,\n                          filter: 'blur(2px)',\n                          scale: 0.5,\n                        }}\n                        transition={{\n                          type: 'spring',\n                          stiffness: 240,\n                          damping: 20,\n                          mass: 1,\n                        }}\n                      >\n                        {countDown}\n                      </motion.span>\n                    </AnimatePresence>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n          </motion.div>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n\nfunction AnimatedText({\n  text,\n  className,\n  delayStep = 0.014,\n}: {\n  text: string;\n  className?: string;\n  delayStep?: number;\n}) {\n  const chars = text.split('');\n\n  return (\n    <span className={className} style={{ display: 'inline-flex' }}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        <motion.span\n          key={text}\n          style={{ display: 'inline-flex ', willChange: 'transform' }}\n        >\n          {chars.map((char, i) => (\n            <motion.span\n              key={i}\n              initial={{\n                y: 10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              animate={{\n                y: 0,\n                opacity: 1,\n                scale: 1,\n                filter: 'blur(0px)',\n              }}\n              exit={{\n                y: -10,\n                opacity: 0,\n                scale: 0.5,\n                filter: 'blur(2px)',\n              }}\n              transition={{\n                type: 'spring',\n                stiffness: 240,\n                damping: 16,\n                mass: 1.2,\n                delay: i * delayStep,\n              }}\n              style={{\n                display: 'inline-block',\n                whiteSpace: char === ' ' ? 'pre' : undefined,\n              }}\n            >\n              {char}\n            </motion.span>\n          ))}\n        </motion.span>\n      </AnimatePresence>\n    </span>\n  );\n}\n\nexport default TimedUndoAction;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-navbar",
      "type": "registry:component",
      "title": "Tooltip Navbar",
      "description": "Tooltip design recreated with smooth animations and interactive feedback.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-navbar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useRef, useState, type ReactNode } from 'react';\nexport type TooltipItem = {\n  icon: ReactNode;\n  label: string;\n  labelHasKeyword?: (string | ReactNode)[] | false;\n  hasBadge?: boolean;\n};\n\nimport {\n  MessageCircle,\n  Inbox,\n  Circle,\n  Crosshair,\n  Download,\n  Menu,\n  CommandIcon,\n} from 'lucide-react';\n\n\ninterface TooltipNavbarProps {\n  items: TooltipItem[];\n  tooltipDelay?: number;//in ms\n}\n\nconst DEFAULT_ITEMS: TooltipItem[] = [\n  {\n    icon: <MessageCircle className=\"h-full w-full\" />,\n    label: 'Comment',\n    labelHasKeyword: ['C'],\n    hasBadge: false,\n  },\n  {\n    icon: <Inbox className=\"h-full w-full\" />,\n    label: 'Inbox',\n    labelHasKeyword: ['I'],\n    hasBadge: true,\n  },\n  {\n    icon: <Circle className=\"h-full w-full\" />,\n    label: 'Record',\n    labelHasKeyword: ['R'],\n    hasBadge: false,\n  },\n  {\n    icon: <Crosshair className=\"h-full w-full\" />,\n    label: 'Focus Mode',\n    labelHasKeyword: ['F'],\n    hasBadge: false,\n  },\n  {\n    icon: <Download className=\"h-full w-full\" />,\n    label: 'Share',\n    labelHasKeyword: ['S'],\n    hasBadge: false,\n  },\n  {\n    icon: <Menu className=\"h-full w-full\" />,\n    label: 'Menu',\n    labelHasKeyword: ['M'],\n    hasBadge: false,\n  },\n];\nexport const TooltipNavbar = ({ items = DEFAULT_ITEMS, tooltipDelay = 300 }: TooltipNavbarProps) => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [coords, setCoords] = useState({ clipPath: '', translateX: 0 });\n\n  const measureRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n  const [isEntering, setIsEntering] = useState(true);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const calculatePosition = (index: number) => {\n    const activeLabel = measureRefs.current[index];\n    const activeIcon = buttonRefs.current[index];\n\n    if (!activeLabel || !activeIcon) return null;\n\n    const labelLeft = activeLabel.offsetLeft;\n    const labelWidth = activeLabel.offsetWidth;\n    const labelCenter = labelLeft + labelWidth / 2;\n\n    const iconLeft = activeIcon.offsetLeft;\n    const iconWidth = activeIcon.offsetWidth;\n    const iconCenter = iconLeft + iconWidth / 2;\n\n    const totalWidth = measureRefs.current.reduce(\n      (acc, el) => acc + (el?.offsetWidth || 0),\n      0,\n    );\n\n    const cLeft = (labelLeft / totalWidth) * 100;\n    const cRight = 100 - ((labelLeft + labelWidth) / totalWidth) * 100;\n\n    return {\n      clipPath: `inset(0 ${cRight}% 0 ${cLeft}% round 8px)`,\n      translateX: iconCenter - labelCenter,\n    };\n  };\n\n  const handleMouseEnter = (index: number) => {\n    const newCoords = calculatePosition(index);\n    if (!newCoords) return;\n\n    if (activeIndex === null) {\n      if (timeoutRef.current) clearTimeout(timeoutRef.current);\n      setIsEntering(true);\n\n      timeoutRef.current = setTimeout(() => {\n        setCoords(newCoords);\n        setActiveIndex(index);\n      }, tooltipDelay);\n    } else {\n      setCoords(newCoords);\n      setActiveIndex(index);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setActiveIndex(null);\n    setCoords({ clipPath: '', translateX: 0 });\n    setIsEntering(true);\n  };\n\n  return (\n    <div >\n      <div className=\"flex items-center justify-center\">\n        <div className=\"relative text-white\" onMouseLeave={handleMouseLeave}>\n          <AnimatePresence>\n            {activeIndex !== null && coords.clipPath !== '' && (\n              <motion.div\n                className=\"absolute bottom-16 left-0 \"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.2 }}\n              >\n                <motion.div\n                  className=\"flex bg-black dark:bg-neutral-800\"\n                  animate={{\n                    clipPath: coords.clipPath,\n                    x: coords.translateX,\n                  }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0,\n\n                    duration: isEntering ? 0 : 0.4,\n                  }}\n                  onUpdate={() => {\n                    if (isEntering) {\n                      setIsEntering(false);\n                    }\n                  }}\n                >\n                  <div className=\"inline-flex h-8 items-center justify-center\">\n                    {items.map((item, index) => (\n                      <div\n                        key={`real-${index}`}\n                        className=\"flex items-center justify-center gap-1 px-2 text-sm font-medium whitespace-nowrap \"\n                      >\n                        <span className=\"text-white\">{item.label}</span>\n                        {item.hasBadge && (\n                          <div className=\"flex items-center gap-0.5 text-white/40\">\n                            <span className=\"flex items-center justify-center rounded-sm border border-white/20 p-1\">\n                              <CommandIcon className=\"size-3 text-neutral-500\" />\n                            </span>\n                          </div>\n                        )}\n                        {item.labelHasKeyword && (\n                          <div className=\"flex items-center gap-0.5 text-white/40\">\n                            {item.labelHasKeyword.map((key, i) => (\n                              <span\n                                key={i}\n                                className=\"flex items-center justify-center rounded-sm border border-white/20 px-1 tabular-nums\"\n                              >\n                                {key}\n                              </span>\n                            ))}\n                          </div>\n                        )}\n                      </div>\n                    ))}\n                  </div>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <div className=\"z-10 inline-flex items-center justify-center rounded-full bg-black/95 p-2 backdrop-blur dark:bg-neutral-800\">\n            {items.map((item, index) => (\n              <button\n                key={index}\n                onMouseEnter={() => handleMouseEnter(index)}\n                ref={(el) => {\n                  buttonRefs.current[index] = el;\n                }}\n                className=\"flex cursor-pointer items-center justify-center rounded-full transition-colors hover:bg-white/10 \"\n              >\n                <div className=\"flex size-10 items-center justify-center p-1.5 dark:text-neutral-200\">\n                  {item.icon}\n                </div>\n                <span className=\"sr-only\">{item.label}</span>\n              </button>\n            ))}\n          </div>\n        </div>\n      </div>\n\n      <div className=\"pointer-events-none absolute bottom-0 left-0 flex h-0 overflow-hidden whitespace-nowrap opacity-0\">\n        {items.map((item, index) => (\n          <div\n            key={`measure-${index}`}\n            ref={(el) => {\n              measureRefs.current[index] = el;\n            }}\n            className=\"flex items-center justify-center gap-1 px-2 text-sm font-medium whitespace-nowrap\"\n          >\n            <span>{item.label}</span>\n            {item.hasBadge && (\n              <div className=\"flex items-center gap-0.5 text-white/40\">\n                <span className=\"flex items-center justify-center rounded-sm border border-white/20 p-1\">\n                  <CommandIcon className=\"size-3 text-neutral-500\" />\n                </span>\n              </div>\n            )}\n            {item.labelHasKeyword && (\n              <div className=\"flex items-center gap-0.5 text-white/40\">\n                {item.labelHasKeyword.map((key, i) => (\n                  <span\n                    key={i}\n                    className=\"flex items-center justify-center rounded-sm border border-white/20 px-1 tabular-nums\"\n                  >\n                    {typeof key === 'string' ? key : '⌘'}\n                  </span>\n                ))}\n              </div>\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-navbar-base",
      "type": "registry:component",
      "title": "Tooltip Navbar (base)",
      "description": "Theme-ready base variant of Tooltip design recreated with smooth animations and interactive feedback..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-navbar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useRef, useState, type ReactNode } from 'react';\nexport type TooltipItem = {\n  icon: ReactNode;\n  label: string;\n  labelHasKeyword?: (string | ReactNode)[] | false;\n  hasBadge?: boolean;\n};\n\nimport {\n  MessageCircle,\n  Inbox,\n  Circle,\n  Crosshair,\n  Download,\n  Menu,\n  CommandIcon,\n} from 'lucide-react';\n\ninterface TooltipNavbarProps {\n  items: TooltipItem[];\n  tooltipDelay?: number;\n}\n\nconst DEFAULT_ITEMS: TooltipItem[] = [\n  {\n    icon: <MessageCircle className=\"h-full w-full\" />,\n    label: 'Comment',\n    labelHasKeyword: ['C'],\n    hasBadge: false,\n  },\n  {\n    icon: <Inbox className=\"h-full w-full\" />,\n    label: 'Inbox',\n    labelHasKeyword: ['I'],\n    hasBadge: true,\n  },\n  {\n    icon: <Circle className=\"h-full w-full\" />,\n    label: 'Record',\n    labelHasKeyword: ['R'],\n    hasBadge: false,\n  },\n  {\n    icon: <Crosshair className=\"h-full w-full\" />,\n    label: 'Focus Mode',\n    labelHasKeyword: ['F'],\n    hasBadge: false,\n  },\n  {\n    icon: <Download className=\"h-full w-full\" />,\n    label: 'Share',\n    labelHasKeyword: ['S'],\n    hasBadge: false,\n  },\n  {\n    icon: <Menu className=\"h-full w-full\" />,\n    label: 'Menu',\n    labelHasKeyword: ['M'],\n    hasBadge: false,\n  },\n];\n\nexport const TooltipNavbar = ({\n  items = DEFAULT_ITEMS,\n  tooltipDelay = 300,\n}: TooltipNavbarProps) => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [coords, setCoords] = useState({ clipPath: '', translateX: 0 });\n\n  const measureRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n  const [isEntering, setIsEntering] = useState(true);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const calculatePosition = (index: number) => {\n    const activeLabel = measureRefs.current[index];\n    const activeIcon = buttonRefs.current[index];\n\n    if (!activeLabel || !activeIcon) return null;\n\n    const labelLeft = activeLabel.offsetLeft;\n    const labelWidth = activeLabel.offsetWidth;\n    const labelCenter = labelLeft + labelWidth / 2;\n\n    const iconLeft = activeIcon.offsetLeft;\n    const iconWidth = activeIcon.offsetWidth;\n    const iconCenter = iconLeft + iconWidth / 2;\n\n    const totalWidth = measureRefs.current.reduce(\n      (acc, el) => acc + (el?.offsetWidth || 0),\n      0,\n    );\n\n    const cLeft = (labelLeft / totalWidth) * 100;\n    const cRight = 100 - ((labelLeft + labelWidth) / totalWidth) * 100;\n\n    return {\n      clipPath: `inset(0 ${cRight}% 0 ${cLeft}% round 8px)`,\n      translateX: iconCenter - labelCenter,\n    };\n  };\n\n  const handleMouseEnter = (index: number) => {\n    const newCoords = calculatePosition(index);\n    if (!newCoords) return;\n\n    if (activeIndex === null) {\n      if (timeoutRef.current) clearTimeout(timeoutRef.current);\n      setIsEntering(true);\n\n      timeoutRef.current = setTimeout(() => {\n        setCoords(newCoords);\n        setActiveIndex(index);\n      }, tooltipDelay);\n    } else {\n      setCoords(newCoords);\n      setActiveIndex(index);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setActiveIndex(null);\n    setCoords({ clipPath: '', translateX: 0 });\n    setIsEntering(true);\n  };\n\n  return (\n    <div className=\"theme-injected\">\n      <div className=\"flex items-center justify-center\">\n        <div\n          className=\"text-foreground relative\"\n          onMouseLeave={handleMouseLeave}\n        >\n          <AnimatePresence>\n            {activeIndex !== null && coords.clipPath !== '' && (\n              <motion.div\n                className=\"absolute bottom-16 left-0\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.2 }}\n              >\n                <motion.div\n                  className=\"bg-muted text-muted-foreground flex rounded-lg \"\n                  animate={{\n                    clipPath: coords.clipPath,\n                    x: coords.translateX,\n                  }}\n                  transition={{\n                    type: 'spring',\n                    bounce: 0,\n                    duration: isEntering ? 0 : 0.4,\n                  }}\n                  onUpdate={() => {\n                    if (isEntering) {\n                      setIsEntering(false);\n                    }\n                  }}\n                >\n                  <div className=\"inline-flex h-8 items-center justify-center\">\n                    {items.map((item, index) => (\n                      <div\n                        key={`real-${index}`}\n                        className=\"flex items-center justify-center gap-1 px-2 text-sm font-medium whitespace-nowrap\"\n                      >\n                        <span className=\"text-muted-foreground\">{item.label}</span>\n                        {item.hasBadge && (\n                          <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                            <span className=\"border-border flex items-center justify-center rounded-lg border p-1\">\n                              <CommandIcon className=\"text-muted-foreground size-3\" />\n                            </span>\n                          </div>\n                        )}\n                        {item.labelHasKeyword && (\n                          <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                            {item.labelHasKeyword.map((key, i) => (\n                              <span\n                                key={i}\n                                className=\"border-border flex items-center justify-center rounded-lg border px-1 tabular-nums\"\n                              >\n                                {key}\n                              </span>\n                            ))}\n                          </div>\n                        )}\n                      </div>\n                    ))}\n                  </div>\n                </motion.div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          <div className=\"bg-muted border-border z-10 inline-flex items-center justify-center rounded-lg border p-2 backdrop-blur\">\n            {items.map((item, index) => (\n              <button\n                key={index}\n                onMouseEnter={() => handleMouseEnter(index)}\n                ref={(el) => {\n                  buttonRefs.current[index] = el;\n                }}\n                className=\"hover:bg-accent flex cursor-pointer items-center justify-center rounded-lg transition-colors\"\n              >\n                <div className=\"text-muted-foreground flex size-10 items-center justify-center p-1.5\">\n                  {item.icon}\n                </div>\n                <span className=\"sr-only\">{item.label}</span>\n              </button>\n            ))}\n          </div>\n        </div>\n      </div>\n\n      <div className=\"pointer-events-none absolute bottom-0 left-0 flex h-0 overflow-hidden whitespace-nowrap opacity-0\">\n        {items.map((item, index) => (\n          <div\n            key={`measure-${index}`}\n            ref={(el) => {\n              measureRefs.current[index] = el;\n            }}\n            className=\"flex items-center justify-center gap-1 px-2 text-sm font-medium whitespace-nowrap\"\n          >\n            <span>{item.label}</span>\n            {item.hasBadge && (\n              <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                <span className=\"border-border flex items-center justify-center rounded-lg border p-1\">\n                  <CommandIcon className=\"text-muted-foreground size-3\" />\n                </span>\n              </div>\n            )}\n            {item.labelHasKeyword && (\n              <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                {item.labelHasKeyword.map((key, i) => (\n                  <span\n                    key={i}\n                    className=\"border-border flex items-center justify-center rounded-lg border px-1 tabular-nums\"\n                  >\n                    {typeof key === 'string' ? key : '⌘'}\n                  </span>\n                ))}\n              </div>\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "trade-summary",
      "type": "registry:component",
      "title": "Trade Summary",
      "description": "Concise trade summary card showing positions, performance, and key metrics.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/trade-summary.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  ChevronDown,\n  Search,\n  Plus,\n  MoreHorizontal,\n  Download,\n  RefreshCcw,\n  ChevronLeft,\n  ChevronRight,\n  MoreVertical,\n  X,\n  Check,\n  Loader2,\n  Trash2,\n  Copy,\n  Edit2,\n} from 'lucide-react';\n\n/* ---------- Types ---------- */\nexport interface TradeItem {\n  id: string;\n  asset: string;\n  session: string;\n  market: string;\n  strategy: string;\n  description: string;\n  pnl: number;\n  sparklineData: number[];\n  tags: string[];\n  contracts: number;\n  side: 'LONG' | 'SHORT';\n}\n\ninterface TradeSummaryProps {\n  date: string;\n  trades: TradeItem[];\n  onAddTrade?: () => void;\n}\n\n/* ---------- Sub-components ---------- */\nconst Sparkline: React.FC<{ data: number[]; color: string }> = ({\n  data,\n  color,\n}) => {\n  const width = 80;\n  const height = 24;\n  const padding = 2;\n\n  const min = Math.min(...data);\n  const max = Math.max(...data);\n  const range = max - min || 1;\n\n  const points = data\n    .map((d, i) => {\n      const x = (i / (data.length - 1)) * width;\n      const y = height - padding - ((d - min) / range) * (height - 2 * padding);\n      return `${x},${y}`;\n    })\n    .join(' ');\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox={`0 0 ${width} ${height}`}\n      className=\"overflow-visible\"\n    >\n      <motion.polyline\n        fill=\"none\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        points={points}\n        initial={{ pathLength: 0, opacity: 0 }}\n        animate={{ pathLength: 1, opacity: 1 }}\n        transition={{ duration: 1.2, ease: 'easeOut' }}\n      />\n    </svg>\n  );\n};\n\nconst FilterButton: React.FC<{ label: string }> = ({ label }) => (\n  <button className=\"flex items-center gap-1.5 rounded-md border border-gray-200 bg-transparent px-2 py-1 text-[11px] whitespace-nowrap text-zinc-500 transition-colors duration-200 hover:text-zinc-900 dark:border-[#2d2d2d] dark:text-[#a3a3a3] dark:hover:text-white\">\n    {label}\n    <ChevronDown size={12} className=\"mt-0.5\" />\n  </button>\n);\n\nconst TradeCard: React.FC<{\n  trade: TradeItem;\n  isSelected: boolean;\n  onSelect: () => void;\n  isMenuOpen: boolean;\n  onMenuToggle: () => void;\n}> = ({ trade, isSelected, onSelect, isMenuOpen, onMenuToggle }) => {\n  const isPositive = trade.pnl >= 0;\n  const accentColor = isPositive ? '#22c55e' : '#ef4444';\n\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, y: 10 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, scale: 0.98 }}\n      whileHover={{ y: -1 }}\n      className={`group relative border-b border-gray-100 bg-transparent px-1 py-4 transition-all duration-300 last:border-0 dark:border-[#1c1c1c] ${isSelected ? 'rounded-xl bg-zinc-50/50 dark:bg-white/[0.02]' : ''}`}\n    >\n      <div className=\"flex items-start gap-2.5 sm:gap-3.5\">\n        <div className=\"pt-1\">\n          <button\n            onClick={onSelect}\n            className={`flex h-4 w-4 items-center justify-center rounded border-2 transition-all duration-200 ${isSelected ? 'border-[#FA692E] bg-[#FA692E] dark:border-[#FA692E]' : 'border-gray-200 group-hover:border-gray-400 dark:border-[#2d2d2d] dark:group-hover:border-[#4d4d4d]'}`}\n          >\n            {isSelected && <Check size={10} className=\"text-white\" />}\n          </button>\n        </div>\n\n        <div className=\"min-w-0 flex-1\">\n          <div className=\"mb-1 flex items-start justify-between gap-2\">\n            <div className=\"truncate\">\n              <h3 className=\"truncate text-sm font-medium tracking-tight text-zinc-800 sm:text-base dark:text-[#C4C4C4]\">\n                {trade.asset}\n              </h3>\n              <div className=\"mt-0 flex items-center gap-1 text-[8px] font-bold tracking-wider text-zinc-400 uppercase sm:gap-1.5 sm:text-[9px] dark:text-[#5F5F5F]\">\n                <span>{trade.session}</span>\n                <span>•</span>\n                <span className=\"truncate\">{trade.market}</span>\n              </div>\n            </div>\n\n            <div className=\"flex shrink-0 items-center gap-2 sm:gap-4\">\n              <div className=\"flex items-center gap-2 sm:gap-3\">\n                <div className=\"xs:block hidden\">\n                  <Sparkline data={trade.sparklineData} color={accentColor} />\n                </div>\n                <span\n                  className={`text-sm font-bold sm:text-base ${isPositive ? 'text-[#15CA25]' : 'text-red-500'} tabular-nums`}\n                >\n                  {isPositive ? '+' : ''}$\n                  {Math.abs(trade.pnl).toLocaleString(undefined, {\n                    minimumFractionDigits: 2,\n                  })}\n                </span>\n              </div>\n              <div className=\"relative\">\n                <button\n                  title=\"more\"\n                  onClick={onMenuToggle}\n                  className={`text-zinc-400 transition-colors duration-300 hover:text-zinc-600 dark:text-[#f1f1f1]/70 dark:hover:text-[#575656] ${isMenuOpen ? 'text-zinc-900 dark:text-white' : ''}`}\n                >\n                  <MoreHorizontal size={16} />\n                </button>\n                <AnimatePresence>\n                  {isMenuOpen && (\n                    <motion.div\n                      initial={{ opacity: 0, scale: 0.95, y: -5 }}\n                      animate={{ opacity: 1, scale: 1, y: 0 }}\n                      exit={{ opacity: 0, scale: 0.95, y: -5 }}\n                      className=\"absolute top-full right-0 z-50 mt-1 w-32 origin-top-right rounded-xl border border-zinc-200 bg-white shadow-xl backdrop-blur-md dark:border-zinc-800 dark:bg-[#1a1a1a]/95\"\n                    >\n                      <div className=\"p-1.5\">\n                        <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\">\n                          <Edit2 size={12} /> Edit Trade\n                        </button>\n                        <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\">\n                          <Copy size={12} /> Duplicate\n                        </button>\n                        <div className=\"my-1 h-px bg-zinc-100 dark:bg-zinc-800\" />\n                        <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-500/10\">\n                          <Trash2 size={12} /> Remove\n                        </button>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"mt-2 sm:mt-3\">\n            <h4 className=\"text-[11px] font-medium text-zinc-700 sm:text-[12px] dark:text-[#C4C4C4]\">\n              {trade.strategy}\n            </h4>\n            <p className=\"mt-0.5 line-clamp-2 max-w-full text-[11px] leading-relaxed text-zinc-500 sm:line-clamp-none sm:text-[12px] dark:text-[#6A6A6A]\">\n              {trade.description}\n            </p>\n          </div>\n\n          <div className=\"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n            <div className=\"flex flex-wrap gap-1.5\">\n              {trade.tags.map((tag) => (\n                <span\n                  key={tag}\n                  className=\"cursor-default rounded-full border border-zinc-200 bg-zinc-100 px-2 py-0.5 text-[9px] text-zinc-500 transition-colors hover:bg-zinc-200 sm:text-[10px] dark:border-[#828282]/70 dark:bg-[#1c1c1c] dark:text-[#828282] dark:hover:text-white\"\n                >\n                  {tag}\n                </span>\n              ))}\n            </div>\n\n            <div className=\"flex items-center justify-between gap-2 sm:justify-end\">\n              <span className=\"rounded-full border-[0.5px] border-purple-200 bg-purple-50 px-2 pt-1 pb-0.5 text-[8px] font-bold tracking-widest text-purple-600 uppercase dark:border-[#8b5cf6]/70 dark:bg-[#292232] dark:text-[#8b5cf6]\">\n                {trade.contracts} CTRS\n              </span>\n              <span\n                className={`rounded-full border-[0.5px] px-2 pt-1 pb-0.5 text-[8px] font-bold tracking-widest uppercase ${\n                  trade.side === 'LONG'\n                    ? 'border-green-200 bg-green-50 text-[#15CA25] dark:border-[#15CA25]/70 dark:bg-[#172C19]'\n                    : 'border-red-200 bg-red-50 text-red-500 dark:border-red-500/70 dark:bg-red-900/20'\n                }`}\n              >\n                {trade.side}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\n/* ---------- Main ---------- */\nexport const TradeSummary: React.FC<TradeSummaryProps> = ({\n  date,\n  trades,\n  onAddTrade,\n}) => {\n  const DATES = ['JAN 12', 'JAN 11', 'JAN 10'];\n  const [isAddingTrade, setIsAddingTrade] = React.useState(false);\n  const [selectedIds, setSelectedIds] = React.useState<string[]>([]);\n  const [activeDate, setActiveDate] = React.useState(DATES[0]);\n  const [isDownloading, setIsDownloading] = React.useState(false);\n  const [isRefreshing, setIsRefreshing] = React.useState(false);\n  const [activeMenuId, setActiveMenuId] = React.useState<string | null>(null);\n  const [isGlobalMenuOpen, setIsGlobalMenuOpen] = React.useState(false);\n\n  const totalPnl = trades.reduce((acc, curr) => acc + curr.pnl, 0);\n  const isPositiveTotal = totalPnl >= 0;\n\n  const toggleSelect = (id: string) => {\n    setSelectedIds((prev) =>\n      prev.includes(id) ? prev.filter((i) => i !== id) : [...prev, id]\n    );\n  };\n\n  const handleRefresh = () => {\n    setIsRefreshing(true);\n    setTimeout(() => setIsRefreshing(false), 2000);\n  };\n\n  const handleDownload = () => {\n    setIsDownloading(true);\n    setTimeout(() => setIsDownloading(false), 2000);\n  };\n\n  return (\n    <div className=\"w-full max-w-130\">\n      <div className=\"flex flex-col overflow-hidden rounded-[24px] border border-zinc-200 bg-white shadow-xl transition-all duration-500 dark:border-[#1c1c1c] dark:bg-[#0a0a0a]\">\n        {/* Top Header */}\n        <header className=\"flex flex-wrap items-center justify-between gap-2 px-3 py-3 sm:px-4\">\n          <div className=\"flex flex-wrap items-center gap-1.5 text-sm tracking-normal sm:gap-2\">\n            <span className=\"text-[12px] font-medium text-zinc-900 sm:text-[14px] dark:text-[#E4E4E4]\">\n              Today\n            </span>\n            <span className=\"text-xs font-bold text-zinc-300 dark:text-[#525252]\">\n              /\n            </span>\n            <span className=\"text-[8px] font-bold tracking-widest text-zinc-500 uppercase sm:text-[9px] sm:tracking-[0.2em] dark:text-[#a3a3a3]\">\n              {date}\n            </span>\n            <span className=\"mx-0.5 text-zinc-300 dark:text-[#525252]\">•</span>\n            <span\n              className={`text-[10px] font-bold sm:text-[11px] ${isPositiveTotal ? 'text-[#15CA25]' : 'text-red-500'}`}\n            >\n              {isPositiveTotal ? '+' : ''}\n              {totalPnl.toLocaleString(undefined, {\n                style: 'currency',\n                currency: 'USD',\n              })}\n            </span>\n          </div>\n\n          <button\n            onClick={() => setIsAddingTrade(true)}\n            className=\"flex items-center gap-1.5 rounded-full bg-[#FA692E] px-3 py-1.5 text-[10px] font-bold text-white shadow-md transition-all hover:bg-[#ea6733] active:scale-95 sm:py-2 sm:text-[12px] dark:text-black/70\"\n          >\n            <Plus size={14} className=\"sm:h-4 sm:w-4\" />\n            Add Trade\n          </button>\n        </header>\n\n        <AnimatePresence>\n          {isAddingTrade && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"absolute inset-0 z-[60] flex items-center justify-center bg-zinc-950/20 px-4 backdrop-blur-sm\"\n            >\n              <motion.div\n                initial={{ opacity: 0, scale: 0.95, y: 10 }}\n                animate={{ opacity: 1, scale: 1, y: 0 }}\n                exit={{ opacity: 0, scale: 0.95, y: 10 }}\n                className=\"relative w-full max-w-sm rounded-[24px] border border-zinc-200 bg-white p-6 shadow-2xl dark:border-zinc-800 dark:bg-[#0a0a0a]\"\n              >\n                <button\n                  onClick={() => setIsAddingTrade(false)}\n                  className=\"absolute top-4 right-4 text-zinc-400 hover:text-zinc-900 dark:hover:text-white\"\n                >\n                  <X size={20} />\n                </button>\n                <div className=\"mb-6\">\n                  <h3 className=\"text-sm font-bold text-zinc-900 dark:text-white\">\n                    Record New Trade\n                  </h3>\n                  <p className=\"mt-1 text-[10px] text-zinc-500\">\n                    Add manually executed trades to your journal.\n                  </p>\n                </div>\n                <div className=\"grid gap-3\">\n                  <input\n                    type=\"text\"\n                    placeholder=\"Asset (e.g. E-Mini S&P 500)\"\n                    className=\"w-full rounded-xl border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#FA692E] dark:border-zinc-800 dark:focus:border-[#FA692E]\"\n                  />\n                  <div className=\"grid grid-cols-2 gap-3\">\n                    <input\n                      type=\"text\"\n                      placeholder=\"Side (LONG/SHORT)\"\n                      className=\"w-full rounded-xl border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#FA692E] dark:border-zinc-800 dark:focus:border-[#FA692E]\"\n                    />\n                    <input\n                      type=\"text\"\n                      placeholder=\"Contracts\"\n                      className=\"w-full rounded-xl border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#FA692E] dark:border-zinc-800 dark:focus:border-[#FA692E]\"\n                    />\n                  </div>\n                  <textarea\n                    rows={3}\n                    placeholder=\"Brief description of the setup...\"\n                    className=\"w-full rounded-xl border border-zinc-200 bg-transparent px-3 py-2 text-[11px] outline-none focus:border-[#FA692E] dark:border-zinc-800 dark:focus:border-[#FA692E]\"\n                  />\n                </div>\n                <button\n                  onClick={() => {\n                    setIsAddingTrade(false);\n                    onAddTrade?.();\n                  }}\n                  className=\"mt-6 w-full rounded-xl bg-[#FA692E] py-2.5 text-[11px] font-bold text-white shadow-lg transition-all hover:bg-[#ea6733] active:scale-[0.98]\"\n                >\n                  Save Entry\n                </button>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Toolbar / Filters */}\n        <div className=\"flex flex-col items-stretch gap-3 rounded-t-[22px] bg-zinc-50 px-3 pt-4 pb-2.5 sm:flex-row sm:items-center sm:px-4 dark:bg-[#171717]\">\n          <div className=\"no-scrollbar flex items-center gap-2 overflow-x-auto pb-1 sm:pb-0\">\n            <FilterButton label=\"All results\" />\n            <FilterButton label=\"All strategies\" />\n            <FilterButton label=\"More\" />\n          </div>\n\n          <div className=\"group relative flex-1\">\n            <Search\n              className=\"absolute top-1/2 left-2.5 -translate-y-1/2 text-zinc-400 transition-colors group-focus-within:text-zinc-600 dark:text-[#525252] dark:group-focus-within:text-white/40\"\n              size={14}\n            />\n            <input\n              type=\"text\"\n              placeholder=\"Search trades...\"\n              className=\"w-full rounded-2xl border border-zinc-200 bg-white py-1.5 pr-3 pl-8 text-[12px] text-zinc-900 placeholder-zinc-400 transition-all focus:border-zinc-400 focus:outline-none dark:border-[#2d2d2d] dark:bg-[#141414] dark:text-white dark:placeholder-[#525252] dark:focus:border-[#4d4d4d]\"\n            />\n          </div>\n        </div>\n\n        {/* Trade List Container */}\n        <div className=\"min-h-87.5 flex-1 overflow-y-auto rounded-b-[22px] bg-zinc-50 px-3 pb-2 sm:min-h-100 sm:px-4 dark:bg-[#171717]\">\n          <AnimatePresence mode=\"popLayout\">\n            {trades.map((trade) => (\n              <TradeCard\n                key={trade.id}\n                trade={trade}\n                isSelected={selectedIds.includes(trade.id)}\n                onSelect={() => toggleSelect(trade.id)}\n                isMenuOpen={activeMenuId === trade.id}\n                onMenuToggle={() =>\n                  setActiveMenuId(activeMenuId === trade.id ? null : trade.id)\n                }\n              />\n            ))}\n          </AnimatePresence>\n        </div>\n\n        {/* Footer Navigation */}\n        <footer className=\"flex flex-col items-center justify-between gap-4 bg-white px-3 py-4 sm:flex-row sm:px-4 dark:bg-[#0a0a0a]\">\n          <div className=\"flex w-full items-center justify-center gap-4 sm:w-auto sm:justify-start\">\n            <div className=\"relative\">\n              <button\n                title=\"options\"\n                onClick={() => setIsGlobalMenuOpen(!isGlobalMenuOpen)}\n                className={`flex h-8 w-8 items-center justify-center rounded-lg text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-[#525252] dark:hover:bg-white/5 dark:hover:text-white ${isGlobalMenuOpen ? 'bg-zinc-100 text-zinc-900 dark:bg-white/5 dark:text-white' : ''}`}\n              >\n                <MoreVertical size={18} />\n              </button>\n              <AnimatePresence>\n                {isGlobalMenuOpen && (\n                  <motion.div\n                    initial={{ opacity: 0, scale: 0.95, y: 5 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    exit={{ opacity: 0, scale: 0.95, y: 5 }}\n                    className=\"absolute bottom-full left-0 z-50 mb-1 w-36 origin-bottom-left rounded-xl border border-zinc-200 bg-white shadow-xl backdrop-blur-md dark:border-zinc-800 dark:bg-[#1a1a1a]/95\"\n                  >\n                    <div className=\"p-1.5\">\n                      <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\">\n                        Analytics Settings\n                      </button>\n                      <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\">\n                        Export Config\n                      </button>\n                      <div className=\"my-1 h-px bg-zinc-100 dark:bg-zinc-800\" />\n                      <button className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\">\n                        History Labels\n                      </button>\n                    </div>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n            <div className=\"h-4 w-px bg-zinc-200 dark:bg-[#2d2d2d]\" />\n            <button\n              title=\"download\"\n              onClick={handleDownload}\n              disabled={isDownloading}\n              className=\"flex h-8 w-8 items-center justify-center rounded-lg text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-[#525252] dark:hover:bg-white/5 dark:hover:text-white\"\n            >\n              {isDownloading ? (\n                <Loader2 size={18} className=\"animate-spin text-[#FA692E]\" />\n              ) : (\n                <Download size={18} />\n              )}\n            </button>\n            <button\n              title=\"refresh\"\n              onClick={handleRefresh}\n              disabled={isRefreshing}\n              className=\"flex h-8 w-8 items-center justify-center rounded-lg text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-[#525252] dark:hover:bg-white/5 dark:hover:text-white\"\n            >\n              <RefreshCcw\n                size={18}\n                className={isRefreshing ? 'animate-spin text-[#FA692E]' : ''}\n              />\n            </button>\n          </div>\n\n          <div className=\"flex w-full items-center justify-center gap-3 sm:w-auto sm:justify-end\">\n            <button\n              title=\"backward\"\n              onClick={() => {\n                const currentIndex = DATES.indexOf(activeDate);\n                if (currentIndex > 0) setActiveDate(DATES[currentIndex - 1]);\n              }}\n              disabled={DATES.indexOf(activeDate) === 0}\n              className={`transition-colors ${DATES.indexOf(activeDate) === 0 ? 'cursor-not-allowed text-zinc-200 dark:text-[#2d2d2d]' : 'text-zinc-400 hover:text-zinc-900 dark:text-[#707070] dark:hover:text-white'}`}\n            >\n              < MoreVertical size={0} className=\"hidden\" /> {/* HACK: ensuring Lucide imports stay if I accidentally mess up elsewhere, but really just for ChevronLeft */}\n              <ChevronLeft size={18} />\n            </button>\n            <div className=\"flex items-center gap-2 text-[9px] font-bold tracking-widest uppercase sm:gap-3 sm:text-[10px]\">\n              {DATES.map((day) => (\n                <button\n                  key={day}\n                  onClick={() => setActiveDate(day)}\n                  className={`relative flex px-2 py-1.75 transition-colors ${activeDate === day ? 'text-orange-600 dark:text-[#BB4D25]' : 'text-zinc-400 hover:text-zinc-600 dark:text-[#707070] dark:hover:text-[#a3a3a3]'}`}\n                >\n                  {activeDate === day && (\n                    <motion.div\n                      layoutId=\"activeDayGlow\"\n                      className=\"absolute inset-0 rounded-md border border-orange-200 bg-orange-50 dark:border-[#BB4D25]/70 dark:bg-[#2C1B14]\"\n                      transition={{ type: 'spring', bounce: 0.2, duration: 0.6 }}\n                    />\n                  )}\n                  <span className=\"relative z-10\">{day}</span>\n                </button>\n              ))}\n            </div>\n            <button\n              title=\"forward\"\n              onClick={() => {\n                const currentIndex = DATES.indexOf(activeDate);\n                if (currentIndex < DATES.length - 1)\n                  setActiveDate(DATES[currentIndex + 1]);\n              }}\n              disabled={DATES.indexOf(activeDate) === DATES.length - 1}\n              className={`transition-colors ${DATES.indexOf(activeDate) === DATES.length - 1 ? 'cursor-not-allowed text-zinc-200 dark:text-[#2d2d2d]' : 'text-zinc-400 hover:text-zinc-900 dark:text-[#707070] dark:hover:text-white'}`}\n            >\n              <ChevronRight size={18} />\n            </button>\n          </div>\n        </footer>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "trade-summary-base",
      "type": "registry:component",
      "title": "Trade Summary (base)",
      "description": "Theme-ready base variant of Concise trade summary card showing positions, performance, and key metrics..",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/trade-summary.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  ChevronDown,\n  Search,\n  Plus,\n  MoreHorizontal,\n  Download,\n  RefreshCcw,\n  ChevronLeft,\n  ChevronRight,\n  MoreVertical,\n  X,\n  Check,\n  Loader2,\n  Trash2,\n  Copy,\n  Edit2,\n} from 'lucide-react';\n\n/* ---------- Types ---------- */\nexport interface TradeItem {\n  id: string;\n  asset: string;\n  session: string;\n  market: string;\n  strategy: string;\n  description: string;\n  pnl: number;\n  sparklineData: number[];\n  tags: string[];\n  contracts: number;\n  side: 'LONG' | 'SHORT';\n}\n\ninterface TradeSummaryProps {\n  date: string;\n  trades: TradeItem[];\n  onAddTrade?: () => void;\n}\n\n/* ---------- Sub-components ---------- */\nconst Sparkline: React.FC<{ data: number[]; lineClassName: string }> = ({\n  data,\n  lineClassName,\n}) => {\n  const width = 80;\n  const height = 24;\n  const padding = 2;\n\n  const min = Math.min(...data);\n  const max = Math.max(...data);\n  const range = max - min || 1;\n\n  const points = data\n    .map((d, i) => {\n      const x = (i / (data.length - 1)) * width;\n      const y = height - padding - ((d - min) / range) * (height - 2 * padding);\n      return `${x},${y}`;\n    })\n    .join(' ');\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox={`0 0 ${width} ${height}`}\n      className={`overflow-visible ${lineClassName}`}\n    >\n      <motion.polyline\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        points={points}\n        initial={{ pathLength: 0, opacity: 0 }}\n        animate={{ pathLength: 1, opacity: 1 }}\n        transition={{ duration: 1.2, ease: 'easeOut' }}\n      />\n    </svg>\n  );\n};\n\nconst FilterButton: React.FC<{ label: string }> = ({ label }) => (\n  <button className=\"border-border text-muted-foreground hover:text-foreground flex items-center gap-1.5 rounded-md border bg-transparent px-2 py-1 text-[11px] whitespace-nowrap transition-colors duration-200\">\n    {label}\n    <ChevronDown size={12} className=\"mt-0.5\" />\n  </button>\n);\n\nconst TradeCard: React.FC<{\n  trade: TradeItem;\n  isSelected: boolean;\n  onSelect: () => void;\n  isMenuOpen: boolean;\n  onMenuToggle: () => void;\n}> = ({ trade, isSelected, onSelect, isMenuOpen, onMenuToggle }) => {\n  const isPositive = trade.pnl >= 0;\n  const accentClass = isPositive ? 'text-chart-2' : 'text-destructive';\n\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, y: 10 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, scale: 0.98 }}\n      whileHover={{ y: -1 }}\n      className={`group border-border relative border-b bg-transparent px-1 py-4 transition-all duration-300 last:border-0 ${isSelected ? 'bg-muted/40' : ''}`}\n    >\n      <div className=\"flex items-start gap-2.5 sm:gap-3.5\">\n        <div className=\"pt-1\">\n          <button\n            onClick={onSelect}\n            className={`flex h-4 w-4 items-center justify-center rounded border-2 transition-all duration-200 ${isSelected ? 'bg-primary border-primary' : 'border-border group-hover:border-input'}`}\n          >\n            {isSelected && <Check size={10} className=\"text-primary-foreground\" />}\n          </button>\n        </div>\n\n        <div className=\"min-w-0 flex-1\">\n          <div className=\"mb-1 flex items-start justify-between gap-2\">\n            <div className=\"truncate\">\n              <h3 className=\"text-foreground truncate text-sm font-medium tracking-tight sm:text-base\">\n                {trade.asset}\n              </h3>\n              <div className=\"text-muted-foreground mt-0 flex items-center gap-1 text-[8px] font-bold tracking-wider uppercase sm:gap-1.5 sm:text-[9px]\">\n                <span>{trade.session}</span>\n                <span>•</span>\n                <span className=\"truncate\">{trade.market}</span>\n              </div>\n            </div>\n\n            <div className=\"flex shrink-0 items-center gap-2 sm:gap-4\">\n              <div className=\"flex items-center gap-2 sm:gap-3\">\n                <div className=\"xs:block hidden\">\n                  <Sparkline\n                    data={trade.sparklineData}\n                    lineClassName={accentClass}\n                  />\n                </div>\n                <span\n                  className={`text-sm font-bold sm:text-base ${isPositive ? 'text-chart-2' : 'text-destructive'} tabular-nums`}\n                >\n                  {isPositive ? '+' : ''}$\n                  {Math.abs(trade.pnl).toLocaleString(undefined, {\n                    minimumFractionDigits: 2,\n                  })}\n                </span>\n              </div>\n              <div className=\"relative\">\n                <button\n                  title=\"more\"\n                  onClick={onMenuToggle}\n                  className={`text-muted-foreground hover:text-foreground transition-colors duration-300 ${isMenuOpen ? 'text-foreground' : ''}`}\n                >\n                  <MoreHorizontal size={16} />\n                </button>\n                <AnimatePresence>\n                  {isMenuOpen && (\n                    <motion.div\n                      initial={{ opacity: 0, scale: 0.95, y: -5 }}\n                      animate={{ opacity: 1, scale: 1, y: 0 }}\n                      exit={{ opacity: 0, scale: 0.95, y: -5 }}\n                      className=\"bg-card/95 border-border absolute top-full right-0 z-50 mt-1 w-32 origin-top-right rounded-xl border shadow-xl backdrop-blur-md\"\n                    >\n                      <div className=\"p-1.5\">\n                        <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] transition-colors\">\n                          <Edit2 size={12} /> Edit Trade\n                        </button>\n                        <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] transition-colors\">\n                          <Copy size={12} /> Duplicate\n                        </button>\n                        <div className=\"bg-border my-1 h-px\" />\n                        <button className=\"hover:bg-destructive/10 text-destructive flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] transition-colors\">\n                          <Trash2 size={12} /> Remove\n                        </button>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"mt-2 sm:mt-3\">\n            <h4 className=\"text-foreground text-[11px] font-medium sm:text-[12px]\">\n              {trade.strategy}\n            </h4>\n            <p className=\"text-muted-foreground mt-1 line-clamp-2 max-w-full text-[11px] leading-relaxed sm:line-clamp-none sm:text-[12px]\">\n              {trade.description}\n            </p>\n          </div>\n\n          <div className=\"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n            <div className=\"flex flex-wrap gap-1.5\">\n              {trade.tags.map((tag) => (\n                <span\n                  key={tag}\n                  className=\"bg-muted border-border text-muted-foreground hover:bg-secondary hover:text-secondary-foreground cursor-default rounded-full border px-2 py-1 text-[9px] transition-colors sm:text-[10px]\"\n                >\n                  {tag}\n                </span>\n              ))}\n            </div>\n\n            <div className=\"flex items-center justify-between gap-2 sm:justify-end\">\n              <span className=\"bg-secondary border-border text-secondary-foreground rounded-full border px-2 py-1 text-[8px] font-bold tracking-widest uppercase\">\n                {trade.contracts} CTRS\n              </span>\n              <span\n                className={`rounded-full border-[0.5px] px-2 pt-1 pb-0.5 text-[8px] font-bold tracking-widest uppercase ${\n                  trade.side === 'LONG'\n                    ? 'text-chart-2 bg-chart-2/10 border-chart-2/40'\n                    : 'text-destructive bg-destructive/10 border-destructive/40'\n                }`}\n              >\n                {trade.side}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\n/* ---------- Main ---------- */\nexport const TradeSummary: React.FC<TradeSummaryProps> = ({\n  date,\n  trades,\n  onAddTrade,\n}) => {\n  const DATES = ['JAN 12', 'JAN 11', 'JAN 10'];\n  const [isAddingTrade, setIsAddingTrade] = React.useState(false);\n  const [selectedIds, setSelectedIds] = React.useState<string[]>([]);\n  const [activeDate, setActiveDate] = React.useState(DATES[0]);\n  const [isDownloading, setIsDownloading] = React.useState(false);\n  const [isRefreshing, setIsRefreshing] = React.useState(false);\n  const [activeMenuId, setActiveMenuId] = React.useState<string | null>(null);\n  const [isGlobalMenuOpen, setIsGlobalMenuOpen] = React.useState(false);\n\n  const totalPnl = trades.reduce((acc, curr) => acc + curr.pnl, 0);\n  const isPositiveTotal = totalPnl >= 0;\n\n  const toggleSelect = (id: string) => {\n    setSelectedIds((prev) =>\n      prev.includes(id) ? prev.filter((i) => i !== id) : [...prev, id]\n    );\n  };\n\n  const handleRefresh = () => {\n    setIsRefreshing(true);\n    setTimeout(() => setIsRefreshing(false), 2000);\n  };\n\n  const handleDownload = () => {\n    setIsDownloading(true);\n    setTimeout(() => setIsDownloading(false), 2000);\n  };\n\n  return (\n    <div className=\"theme-injected w-full max-w-130\">\n      <div className=\"bg-card border-border flex flex-col overflow-hidden rounded-3xl border shadow-xl transition-all duration-500\">\n        {/* Top Header */}\n        <header className=\"flex flex-wrap items-center justify-between gap-2 px-3 py-3 sm:px-4\">\n          <div className=\"flex flex-wrap items-center gap-1.5 text-sm tracking-normal sm:gap-2\">\n            <span className=\"text-foreground text-xs font-medium sm:text-sm\">\n              Today\n            </span>\n            <span className=\"text-border text-xs font-bold\">/</span>\n            <span className=\"text-muted-foreground text-[8px] font-bold tracking-widest uppercase sm:text-[9px] sm:tracking-[0.2em]\">\n              {date}\n            </span>\n            <span className=\"text-border mx-0.5\">•</span>\n            <span\n              className={`text-[10px] font-bold sm:text-[11px] ${isPositiveTotal ? 'text-chart-2' : 'text-destructive'}`}\n            >\n              {isPositiveTotal ? '+' : ''}\n              {totalPnl.toLocaleString(undefined, {\n                style: 'currency',\n                currency: 'USD',\n              })}\n            </span>\n          </div>\n\n          <button\n            onClick={() => setIsAddingTrade(true)}\n            className=\"bg-primary hover:bg-primary/90 text-primary-foreground flex items-center gap-1.5 rounded-full px-3 py-2 text-[10px] font-bold shadow-md transition-all active:scale-95 sm:text-[12px]\"\n          >\n            <Plus size={14} className=\"sm:h-4 sm:w-4\" />\n            Add Trade\n          </button>\n        </header>\n\n        <AnimatePresence>\n          {isAddingTrade && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"absolute inset-0 z-[60] flex items-center justify-center bg-black/20 px-4 backdrop-blur-sm\"\n            >\n              <motion.div\n                initial={{ opacity: 0, scale: 0.95, y: 10 }}\n                animate={{ opacity: 1, scale: 1, y: 0 }}\n                exit={{ opacity: 0, scale: 0.95, y: 10 }}\n                className=\"bg-card border-border relative w-full max-w-sm rounded-3xl border p-6 shadow-2xl\"\n              >\n                <button\n                  onClick={() => setIsAddingTrade(false)}\n                  className=\"text-muted-foreground hover:text-foreground absolute top-4 right-4\"\n                >\n                  <X size={20} />\n                </button>\n                <div className=\"mb-6\">\n                  <h3 className=\"text-foreground text-sm font-bold\">\n                    Record New Trade\n                  </h3>\n                  <p className=\"text-muted-foreground mt-1 text-[10px]\">\n                    Add manually executed trades to your journal.\n                  </p>\n                </div>\n                <div className=\"grid gap-3\">\n                  <input\n                    type=\"text\"\n                    placeholder=\"Asset (e.g. E-Mini S&P 500)\"\n                    className=\"border-input bg-transparent w-full rounded-xl border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                  />\n                  <div className=\"grid grid-cols-2 gap-3\">\n                    <input\n                      type=\"text\"\n                      placeholder=\"Side (LONG/SHORT)\"\n                      className=\"border-input bg-transparent w-full rounded-xl border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                    />\n                    <input\n                      type=\"text\"\n                      placeholder=\"Contracts\"\n                      className=\"border-input bg-transparent w-full rounded-xl border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                    />\n                  </div>\n                  <textarea\n                    rows={3}\n                    placeholder=\"Brief description of the setup...\"\n                    className=\"border-input bg-transparent w-full rounded-xl border px-3 py-2 text-[11px] outline-none focus:ring-1 focus:ring-primary\"\n                  />\n                </div>\n                <button\n                  onClick={() => {\n                    setIsAddingTrade(false);\n                    onAddTrade?.();\n                  }}\n                  className=\"bg-primary text-primary-foreground mt-6 w-full rounded-xl py-2.5 text-[11px] font-bold shadow-lg transition-all hover:opacity-90 active:scale-[0.98]\"\n                >\n                  Save Entry\n                </button>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Toolbar / Filters */}\n        <div className=\"bg-muted/60 flex flex-col items-stretch gap-3 rounded-t-3xl px-3 pt-4 pb-3 sm:flex-row sm:items-center sm:px-4\">\n          <div className=\"no-scrollbar flex items-center gap-2 overflow-x-auto pb-1 sm:pb-0\">\n            <FilterButton label=\"All results\" />\n            <FilterButton label=\"All strategies\" />\n            <FilterButton label=\"More\" />\n          </div>\n\n          <div className=\"group relative flex-1\">\n            <Search\n              className=\"text-muted-foreground group-focus-within:text-foreground absolute top-1/2 left-2.5 -translate-y-1/2 transition-colors\"\n              size={14}\n            />\n            <input\n              type=\"text\"\n              placeholder=\"Search trades...\"\n              className=\"bg-background border-input text-foreground placeholder:text-muted-foreground focus:border-ring w-full rounded-2xl border py-2 pr-3 pl-8 text-[12px] transition-all focus:outline-none\"\n            />\n          </div>\n        </div>\n\n        {/* Trade List Container */}\n        <div className=\"bg-muted/60 min-h-87.5 flex-1 overflow-y-auto rounded-b-3xl px-3 pb-2 sm:min-h-100 sm:px-4\">\n          <AnimatePresence mode=\"popLayout\">\n            {trades.map((trade) => (\n              <TradeCard\n                key={trade.id}\n                trade={trade}\n                isSelected={selectedIds.includes(trade.id)}\n                onSelect={() => toggleSelect(trade.id)}\n                isMenuOpen={activeMenuId === trade.id}\n                onMenuToggle={() =>\n                  setActiveMenuId(activeMenuId === trade.id ? null : trade.id)\n                }\n              />\n            ))}\n          </AnimatePresence>\n        </div>\n\n        {/* Footer Navigation */}\n        <footer className=\"bg-card flex flex-col items-center justify-between gap-4 px-3 py-4 sm:flex-row sm:px-4\">\n          <div className=\"flex w-full items-center justify-center gap-4 sm:w-auto sm:justify-start\">\n            <div className=\"relative\">\n              <button\n                title=\"options\"\n                onClick={() => setIsGlobalMenuOpen(!isGlobalMenuOpen)}\n                className={`flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground ${isGlobalMenuOpen ? 'bg-muted text-foreground' : ''}`}\n              >\n                <MoreVertical size={18} />\n              </button>\n              <AnimatePresence>\n                {isGlobalMenuOpen && (\n                  <motion.div\n                    initial={{ opacity: 0, scale: 0.95, y: 5 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    exit={{ opacity: 0, scale: 0.95, y: 5 }}\n                    className=\"bg-card/95 border-border absolute bottom-full left-0 z-50 mb-1 w-36 origin-bottom-left rounded-xl border shadow-xl backdrop-blur-md\"\n                  >\n                    <div className=\"p-1.5\">\n                      <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] transition-colors\">\n                        Analytics Settings\n                      </button>\n                      <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] transition-colors\">\n                        Export Config\n                      </button>\n                      <div className=\"bg-border my-1 h-px\" />\n                      <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-[10px] transition-colors\">\n                        History Labels\n                      </button>\n                    </div>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n            <div className=\"bg-border h-4 w-px\" />\n            <button\n              title=\"download\"\n              onClick={handleDownload}\n              disabled={isDownloading}\n              className=\"flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n            >\n              {isDownloading ? (\n                <Loader2 size={18} className=\"text-primary animate-spin\" />\n              ) : (\n                <Download size={18} />\n              )}\n            </button>\n            <button\n              title=\"refresh\"\n              onClick={handleRefresh}\n              disabled={isRefreshing}\n              className=\"flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n            >\n              <RefreshCcw\n                size={18}\n                className={isRefreshing ? 'text-primary animate-spin' : ''}\n              />\n            </button>\n          </div>\n\n          <div className=\"flex w-full items-center justify-center gap-3 sm:w-auto sm:justify-end\">\n            <button\n              title=\"backward\"\n              onClick={() => {\n                const currentIndex = DATES.indexOf(activeDate);\n                if (currentIndex > 0) setActiveDate(DATES[currentIndex - 1]);\n              }}\n              disabled={DATES.indexOf(activeDate) === 0}\n              className={`transition-colors ${DATES.indexOf(activeDate) === 0 ? 'text-border cursor-not-allowed' : 'text-muted-foreground hover:text-foreground'}`}\n            >\n              <ChevronLeft size={18} />\n            </button>\n            <div className=\"flex items-center gap-2 text-[9px] font-bold tracking-widest uppercase sm:gap-3 sm:text-[10px]\">\n              {DATES.map((day) => (\n                <button\n                  key={day}\n                  onClick={() => setActiveDate(day)}\n                  className={`relative flex px-2 py-2 transition-colors ${activeDate === day ? 'text-primary' : 'text-muted-foreground hover:text-foreground'}`}\n                >\n                  {activeDate === day && (\n                    <motion.div\n                      layoutId=\"activeDayGlowBase\"\n                      className=\"bg-primary/10 border-primary/40 absolute inset-0 rounded-md border\"\n                      transition={{ type: 'spring', bounce: 0.2, duration: 0.6 }}\n                    />\n                  )}\n                  <span className=\"relative z-10\">{day}</span>\n                </button>\n              ))}\n            </div>\n            <button\n              title=\"forward\"\n              onClick={() => {\n                const currentIndex = DATES.indexOf(activeDate);\n                if (currentIndex < DATES.length - 1)\n                  setActiveDate(DATES[currentIndex + 1]);\n              }}\n              disabled={DATES.indexOf(activeDate) === DATES.length - 1}\n              className={`transition-colors ${DATES.indexOf(activeDate) === DATES.length - 1 ? 'text-border cursor-not-allowed' : 'text-muted-foreground hover:text-foreground'}`}\n            >\n              <ChevronRight size={18} />\n            </button>\n          </div>\n        </footer>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "transaction-list",
      "type": "registry:component",
      "title": "Transaction List",
      "description": "An animated transaction list with smooth expand and collapse transitions for detailed views.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/transaction-list.tsx",
          "type": "registry:component",
          "content": "import {\n  AnimatePresence,\n  motion,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\n\nimport { useState } from 'react';\nimport { ArrowRight, X } from 'lucide-react';\nimport useMeasure from 'react-use-measure';\n\nexport interface Transaction {\n  id: string;\n  icon: React.ReactNode;\n  name: string;\n  category: string;\n  amount: string;\n  date: string;\n  time: string;\n  transactionId: string;\n  paymentMethod: string;\n  cardNumber: string;\n  cardType: string;\n}\n\nconst springConfig: Transition = {\n  type: 'spring',\n  bounce: 0,\n  duration: 0.6,\n};\n\nconst opacityConfig: Transition = {\n  duration: 0.4,\n  ease: [0.19, 1, 0.22, 1],\n};\n\nexport function TransactionList({\n  transactions,\n}: {\n  transactions: Transaction[];\n}) {\n  const [open, setOpen] = useState<string | null>(null);\n  const isOpen = open === null;\n  const [ref, bounds] = useMeasure();\n\n  const selected = transactions.find((t) => t.id === open) ?? null;\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <motion.div\n        className=\"flex items-center justify-center overflow-hidden rounded-2xl border border-zinc-200 bg-zinc-100 shadow-sm dark:border-white/10 dark:bg-zinc-900\"\n        animate={{ height: bounds.height > 0 ? bounds.height : 'auto' }}\n      >\n        <div className=\"p-3\" ref={ref}>\n          <AnimatePresence mode=\"popLayout\">\n            {isOpen ? (\n              <motion.div\n                key=\"collapsed\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={opacityConfig}\n                className=\"flex w-64 flex-col gap-2\"\n              >\n                <span className=\"font-medium text-zinc-500 dark:text-zinc-100\">\n                  Transaction\n                </span>\n\n                {transactions.map((item) => (\n                  <TransactionItem\n                    key={item.id}\n                    data={item}\n                    onClick={() => setOpen(item.id)}\n                  />\n                ))}\n\n                <button className=\"flex items-center justify-center gap-1 rounded-sm py-1 text-zinc-700 dark:text-zinc-200\">\n                  <p className=\"text-sm\">All transactions</p>\n                  <ArrowRight size={14} />\n                </button>\n              </motion.div>\n            ) : (\n              selected && (\n                <motion.div exit={{ opacity: 0 }}>\n                  <TransactionItemExpanded\n                    data={selected}\n                    onClose={() => setOpen(null)}\n                  />\n                </motion.div>\n              )\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n}\n\nfunction TransactionItem({\n  data,\n  onClick,\n}: {\n  data: Transaction;\n  onClick: () => void;\n}) {\n  return (\n    <div className=\"flex w-64 cursor-pointer gap-2\" onClick={onClick}>\n      <motion.div\n        className=\"flex size-10 shrink-0 items-center justify-center rounded-full bg-zinc-800\"\n        layoutId={`icon-${data.id}`}\n      >\n        <div className=\"flex items-center justify-center\">{data.icon}</div>\n      </motion.div>\n\n      <div className=\"flex flex-1 flex-col justify-center text-xs\">\n        <motion.p\n          className=\"font-semibold text-zinc-700 dark:text-zinc-100\"\n          layoutId={`name-${data.id}`}\n        >\n          {data.name}\n        </motion.p>\n\n        <motion.p\n          className=\"text-zinc-500 dark:text-zinc-400\"\n          layoutId={`category-${data.id}`}\n        >\n          {data.category}\n        </motion.p>\n      </div>\n\n      <motion.p\n        className=\"flex items-center text-xs text-zinc-500 dark:text-zinc-400\"\n        layoutId={`amount-${data.id}`}\n      >\n        {data.amount}\n      </motion.p>\n    </div>\n  );\n}\n\nfunction TransactionItemExpanded({\n  data,\n  onClose,\n}: {\n  data: Transaction;\n  onClose: () => void;\n}) {\n  return (\n    <div className=\"flex w-64 flex-col gap-2\">\n      <div className=\"flex justify-between\">\n        <motion.div\n          className=\"flex size-10 items-center justify-center rounded-md bg-zinc-800\"\n          layoutId={`icon-${data.id}`}\n        >\n          {data.icon}\n        </motion.div>\n\n        <div\n          className=\"flex cursor-pointer items-center justify-center self-start rounded-full bg-zinc-300 p-2 dark:bg-zinc-700\"\n          onClick={onClose}\n        >\n          <X className=\"size-4\" />\n        </div>\n      </div>\n\n      <div className=\"flex justify-between\">\n        <div>\n          <motion.p\n            className=\"font-semibold text-zinc-700 dark:text-zinc-100\"\n            layoutId={`name-${data.id}`}\n          >\n            {data.name}\n          </motion.p>\n\n          <motion.p\n            className=\"text-sm text-zinc-500 dark:text-zinc-400\"\n            layoutId={`category-${data.id}`}\n          >\n            {data.category}\n          </motion.p>\n        </div>\n\n        <motion.p layoutId={`amount-${data.id}`}>{data.amount}</motion.p>\n      </div>\n\n      <motion.div\n        className=\"flex flex-col gap-2 text-xs\"\n        initial={{ opacity: 0 }}\n        animate={{ opacity: 1 }}\n        exit={{ opacity: 0 }}\n        transition={{\n          ...opacityConfig,\n          delay: 0.1,\n        }}\n      >\n        <div className=\"border border-dashed border-zinc-200 dark:border-white/20\" />\n\n        <p className=\"text-zinc-500 dark:text-zinc-400\">\n          #{data.transactionId}\n        </p>\n\n        <p className=\"text-zinc-500 dark:text-zinc-400\">{data.date}</p>\n\n        <p className=\"text-zinc-500 dark:text-zinc-400\">{data.time}</p>\n\n        <div className=\"border border-dashed border-zinc-200 dark:border-white/20\" />\n\n        <p className=\"text-zinc-500\">Paid Via {data.paymentMethod}</p>\n\n        <p className=\"text-zinc-500 dark:text-zinc-400\">\n          XXXX {data.cardNumber}{' '}\n          <span className=\"font-bold text-black uppercase italic dark:text-zinc-100\">\n            {data.cardType}\n          </span>\n        </p>\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "transaction-list-base",
      "type": "registry:component",
      "title": "Transaction List (base)",
      "description": "Theme-ready base variant of An animated transaction list with smooth expand and collapse transitions for detailed views..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-use-measure"
      ],
      "files": [
        {
          "path": "components/watermelon/transaction-list.tsx",
          "type": "registry:component",
          "content": "import {\n  AnimatePresence,\n  motion,\n  MotionConfig,\n  type Transition,\n} from 'motion/react';\n\nimport { useState } from 'react';\nimport { ArrowRight, X } from 'lucide-react';\nimport useMeasure from 'react-use-measure';\n\nexport interface Transaction {\n  id: string;\n  icon: React.ReactNode;\n  name: string;\n  category: string;\n  amount: string;\n  date: string;\n  time: string;\n  transactionId: string;\n  paymentMethod: string;\n  cardNumber: string;\n  cardType: string;\n}\n\nconst springConfig: Transition = {\n  type: 'spring',\n  bounce: 0,\n  duration: 0.6,\n};\n\nconst opacityConfig: Transition = {\n  duration: 0.4,\n  ease: [0.19, 1, 0.22, 1],\n};\n\nexport function TransactionList({\n  transactions,\n}: {\n  transactions: Transaction[];\n}) {\n  const [open, setOpen] = useState<string | null>(null);\n\n  const [ref, bounds] = useMeasure();\n\n  const selected = transactions.find((t) => t.id === open) ?? null;\n\n  return (\n    <MotionConfig transition={springConfig}>\n      <motion.div\n        className=\"theme-injected bg-muted border-border flex items-center justify-center overflow-hidden rounded-lg border shadow-sm\"\n        animate={{ height: bounds.height > 0 ? bounds.height : 'auto' }}\n      >\n        <div className=\"p-3\" ref={ref}>\n          <AnimatePresence mode=\"popLayout\">\n            {!open && (\n              <motion.div\n                key=\"collapsed\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={opacityConfig}\n                className=\"flex w-64 flex-col gap-2\"\n              >\n                <span className=\"text-muted-foreground font-medium\">\n                  Transaction\n                </span>\n\n                {transactions.map((item) => (\n                  <TransactionItem\n                    key={item.id}\n                    data={item}\n                    onClick={() => setOpen(item.id)}\n                  />\n                ))}\n\n                <button className=\"text-foreground flex items-center justify-center gap-1 rounded-sm py-1\">\n                  <p className=\"text-sm\">All transactions</p>\n                  <ArrowRight size={14} />\n                </button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n          <AnimatePresence mode=\"popLayout\">\n            {selected && (\n              <motion.div exit={{ opacity: 0,transition:{duration:0.1} }}>\n                <TransactionItemExpanded\n                  data={selected}\n                  onClose={() => setOpen(null)}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </motion.div>\n    </MotionConfig>\n  );\n}\n\nfunction TransactionItem({\n  data,\n  onClick,\n}: {\n  data: Transaction;\n  onClick: () => void;\n}) {\n  return (\n    <div className=\"flex w-64 cursor-pointer gap-2\" onClick={onClick}>\n      <motion.div\n        className=\"bg-foreground flex size-10 shrink-0 items-center justify-center rounded-lg\"\n        layoutId={`icon-${data.id}`}\n        layout=\"position\"\n      >\n        <div className=\"flex items-center justify-center\">\n          {data.icon}\n        </div>\n      </motion.div>\n\n      <div className=\"flex flex-1 flex-col justify-center text-xs\">\n        <motion.p\n          className=\"text-foreground font-semibold\"\n          layoutId={`name-${data.id}`}\n          layout=\"position\"\n        >\n          {data.name}\n        </motion.p>\n\n        <motion.p\n          className=\"text-muted-foreground\"\n          layoutId={`category-${data.id}`}\n          layout=\"position\"\n        >\n          {data.category}\n        </motion.p>\n      </div>\n\n      <motion.p\n        className=\"text-muted-foreground flex items-center text-xs\"\n        layoutId={`amount-${data.id}`}\n        layout=\"position\"\n      >\n        {data.amount}\n      </motion.p>\n    </div>\n  );\n}\n\nfunction TransactionItemExpanded({\n  data,\n  onClose,\n}: {\n  data: Transaction;\n  onClose: () => void;\n}) {\n  return (\n    <div className=\"flex w-64 flex-col gap-2\">\n      <div className=\"flex justify-between\">\n        <motion.div\n          className=\"bg-foreground flex size-10 items-center justify-center rounded-lg\"\n          layoutId={`icon-${data.id}`}\n          layout=\"position\"\n        >\n          {data.icon}\n        </motion.div>\n\n        <div\n          className=\"bg-muted flex cursor-pointer items-center justify-center self-start rounded-full p-2\"\n          onClick={onClose}\n        >\n          <X className=\"text-foreground size-4\" />\n        </div>\n      </div>\n\n      <div className=\"flex justify-between\">\n        <div>\n          <motion.p\n            className=\"text-foreground font-semibold\"\n            layoutId={`name-${data.id}`}\n            layout=\"position\"\n          >\n            {data.name}\n          </motion.p>\n\n          <motion.p\n            className=\"text-muted-foreground text-sm\"\n            layoutId={`category-${data.id}`}\n            layout=\"position\"\n          >\n            {data.category}\n          </motion.p>\n        </div>\n\n        <motion.p\n          layoutId={`amount-${data.id}`}\n          className=\"text-foreground\"\n          layout=\"position\"\n        >\n          {data.amount}\n        </motion.p>\n      </div>\n\n      <motion.div\n        className=\"flex flex-col gap-2 text-xs\"\n        initial={{ opacity: 0 }}\n        animate={{ opacity: 1 }}\n        exit={{ opacity: 0 }}\n        transition={{\n          ...opacityConfig,\n          delay: 0.1,\n        }}\n      >\n        <div className=\"border-border border border-dashed\" />\n\n        <p className=\"text-muted-foreground\">#{data.transactionId}</p>\n\n        <p className=\"text-muted-foreground\">{data.date}</p>\n\n        <p className=\"text-muted-foreground\">{data.time}</p>\n\n        <div className=\"border-border border border-dashed\" />\n\n        <p className=\"text-muted-foreground\">Paid Via {data.paymentMethod}</p>\n\n        <p className=\"text-muted-foreground\">\n          XXXX {data.cardNumber}{' '}\n          <span className=\"text-foreground font-bold uppercase italic\">\n            {data.cardType}\n          </span>\n        </p>\n      </motion.div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tree-menu",
      "type": "registry:component",
      "title": "Tree-menu",
      "description": "A nested tree navigation menu with animated level transitions and breadcrumb navigation.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/tree-menu.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, type FC } from 'react';\nimport { motion, AnimatePresence, type Variants } from 'motion/react';\nimport { TbArrowBackUp } from 'react-icons/tb';\n\nexport interface MenuItem {\n  id: string;\n  label: string;\n  children?: MenuItem[];\n}\n\ninterface TreeMenuProps {\n  menuData?: MenuItem[];\n  onSelect?: (item: MenuItem) => void;\n}\n\nexport const TreeMenu: FC<TreeMenuProps> = ({ menuData = [], onSelect }) => {\n  const [path, setPath] = useState<MenuItem[]>([]);\n  const [activeItemId, setActiveItemId] = useState<string | null>(null);\n  const clickedIndexRef = useRef<number | null>(null);\n\n  const currentItems =\n    path.length === 0 ? menuData : path[path.length - 1].children || [];\n\n  const handleNavigateForward = (item: MenuItem, index: number) => {\n    if (item.children?.length) {\n      clickedIndexRef.current = index;\n      setPath((prev) => [...prev, item]);\n      setActiveItemId(null); // Clear selection when navigating deeper\n    } else {\n      setActiveItemId(item.id);\n      if (onSelect) {\n        onSelect(item);\n      }\n    }\n  };\n\n  const handleNavigateBack = (index: number) => {\n    clickedIndexRef.current = null;\n    setPath((prev) => prev.slice(0, index));\n  };\n\n  const containerVariants: Variants = {\n    initial: { opacity: 0 },\n    animate: { opacity: 1, transition: { staggerChildren: 0.05 } },\n    exit: {},\n  };\n\n  const itemVariants: Variants = {\n    initial: { opacity: 0, y: 15 },\n    animate: { opacity: 1, y: 0 },\n    exit: (index: number) => {\n      const clicked = clickedIndexRef.current;\n      if (clicked !== null) {\n        if (index < clicked)\n          return {\n            opacity: 0,\n            y: -100,\n            transition: { duration: 0.3, ease: 'easeOut' },\n          };\n        if (index > clicked)\n          return {\n            opacity: 0,\n            y: 100,\n            transition: { duration: 0.3, ease: 'easeOut' },\n          };\n        return { opacity: 0, transition: { duration: 0.2 } };\n      }\n      return { opacity: 0, y: -10, transition: { duration: 0.2 } };\n    },\n  };\n\n  return (\n    <div className=\"flex min-h-full w-full flex-col items-center justify-center overflow-x-hidden bg-transparent pt-12 pb-20 transition-colors duration-300\">\n      <div className=\"flex min-h-100 w-full max-w-lg flex-col px-6 sm:px-10\">\n        {/* Breadcrumb */}\n        <div className=\"mb-8 flex flex-col items-start space-y-1\">\n          <AnimatePresence mode=\"popLayout\">\n            {path.map((item, idx) => (\n              <motion.button\n                key={`path-${item.id}`}\n                layout=\"position\"\n                initial={{ opacity: 0, x: -10 }}\n                animate={{ opacity: 1, x: 0 }}\n                exit={{ opacity: 0, x: -5, transition: { duration: 0.4 } }}\n                onClick={() => handleNavigateBack(idx)}\n                className=\"flex items-center gap-2 rounded-lg px-2 py-1 text-xl font-semibold text-neutral-400 transition-colors hover:bg-neutral-100 sm:text-2xl dark:text-neutral-500 dark:hover:bg-neutral-800\"\n                style={{ marginLeft: `${idx * 12}px` }}\n              >\n                <TbArrowBackUp size={20} />\n                <motion.span\n                  layoutId={`name-${item.id}`}\n                  className=\"inline-block max-w-50 truncate sm:max-w-xs\"\n                >\n                  {item.label}\n                </motion.span>\n              </motion.button>\n            ))}\n          </AnimatePresence>\n        </div>\n\n        {/* Menu List */}\n        <div className=\"relative\">\n          <AnimatePresence mode=\"popLayout\">\n            <motion.ul\n              key={path.length === 0 ? 'root' : path[path.length - 1].id}\n              variants={containerVariants}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              className=\"flex w-full flex-col items-start space-y-1\"\n              style={{ paddingLeft: `${path.length * 16}px` }}\n            >\n              {currentItems.map((item, index) => {\n                const hasChildren = !!item.children?.length;\n\n                return (\n                  <motion.li\n                    key={item.id}\n                    custom={index}\n                    variants={itemVariants}\n                    className=\"w-full\"\n                  >\n                    <button\n                      onClick={() => handleNavigateForward(item, index)}\n                      className={`group w-full rounded-xl px-4 py-3 text-left text-xl font-semibold transition-all duration-200 sm:text-2xl ${\n                        hasChildren\n                          ? 'text-neutral-900 hover:bg-neutral-100 hover:text-neutral-600 dark:text-neutral-100 dark:hover:bg-neutral-800 dark:hover:text-neutral-300'\n                          : activeItemId === item.id\n                            ? 'bg-neutral-100 text-neutral-900 dark:bg-neutral-800 dark:text-neutral-100'\n                            : 'text-neutral-500 hover:bg-neutral-50 hover:text-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-800/50 dark:hover:text-neutral-200'\n                      }`}\n                    >\n                      <motion.span\n                        layoutId={hasChildren ? `name-${item.id}` : undefined}\n                        className=\"inline-block\"\n                      >\n                        {item.label}\n                      </motion.span>\n                    </button>\n                  </motion.li>\n                );\n              })}\n            </motion.ul>\n          </AnimatePresence>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default TreeMenu;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tree-menu-base",
      "type": "registry:component",
      "title": "Tree-menu (base)",
      "description": "Theme-ready base variant of A nested tree navigation menu with animated level transitions and breadcrumb navigation..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/tree-menu.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useRef, type FC } from 'react';\nimport { motion, AnimatePresence, type Variants } from 'motion/react';\nimport { TbArrowBackUp } from 'react-icons/tb';\n\nexport interface MenuItem {\n  id: string;\n  label: string;\n  children?: MenuItem[];\n}\n\ninterface TreeMenuProps {\n  menuData?: MenuItem[];\n  onSelect?: (item: MenuItem) => void;\n}\n\nexport const TreeMenu: FC<TreeMenuProps> = ({ menuData = [], onSelect }) => {\n  const [path, setPath] = useState<MenuItem[]>([]);\n  const [activeItemId, setActiveItemId] = useState<string | null>(null);\n  const clickedIndexRef = useRef<number | null>(null);\n\n  const currentItems =\n    path.length === 0 ? menuData : path[path.length - 1].children || [];\n\n  const handleNavigateForward = (item: MenuItem, index: number) => {\n    if (item.children?.length) {\n      clickedIndexRef.current = index;\n      setPath((prev) => [...prev, item]);\n      setActiveItemId(null);\n    } else {\n      setActiveItemId(item.id);\n      if (onSelect) {\n        onSelect(item);\n      }\n    }\n  };\n\n  const handleNavigateBack = (index: number) => {\n    clickedIndexRef.current = null;\n    setPath((prev) => prev.slice(0, index));\n  };\n\n  const containerVariants: Variants = {\n    initial: { opacity: 0 },\n    animate: { opacity: 1, transition: { staggerChildren: 0.05 } },\n    exit: {},\n  };\n\n  const itemVariants: Variants = {\n    initial: { opacity: 0, y: 15 },\n    animate: { opacity: 1, y: 0 },\n    exit: (index: number) => {\n      const clicked = clickedIndexRef.current;\n      if (clicked !== null) {\n        if (index < clicked)\n          return {\n            opacity: 0,\n            y: -100,\n            transition: { duration: 0.3, ease: 'easeOut' },\n          };\n        if (index > clicked)\n          return {\n            opacity: 0,\n            y: 100,\n            transition: { duration: 0.3, ease: 'easeOut' },\n          };\n        return { opacity: 0, transition: { duration: 0.2 } };\n      }\n      return { opacity: 0, y: -10, transition: { duration: 0.2 } };\n    },\n  };\n\n  return (\n    <div className=\"theme-injected flex min-h-full w-full flex-col items-center justify-center overflow-x-hidden pt-12 pb-20 transition-colors duration-300\">\n      <div className=\"flex min-h-100 w-full max-w-lg flex-col px-6 sm:px-10\">\n        {/* Breadcrumb */}\n        <div className=\"mb-8 flex flex-col items-start space-y-1\">\n          <AnimatePresence mode=\"popLayout\">\n            {path.map((item, idx) => (\n              <motion.button\n                key={`path-${item.id}`}\n                layout=\"position\"\n                initial={{ opacity: 0, x: -10 }}\n                animate={{ opacity: 1, x: 0 }}\n                exit={{ opacity: 0, x: -5, transition: { duration: 0.4 } }}\n                onClick={() => handleNavigateBack(idx)}\n                className=\"text-muted-foreground hover:bg-muted/50  flex items-center gap-2 rounded-lg px-2 py-1 text-xl font-semibold transition-colors sm:text-2xl\"\n                style={{ marginLeft: `${idx * 12}px` }}\n              >\n                <TbArrowBackUp size={20} />\n                <motion.span\n                  layoutId={`name-${item.id}`}\n                  className=\"inline-block max-w-50 truncate sm:max-w-xs\"\n                >\n                  {item.label}\n                </motion.span>\n              </motion.button>\n            ))}\n          </AnimatePresence>\n        </div>\n\n        {/* Menu List */}\n        <div className=\"relative\">\n          <AnimatePresence mode=\"popLayout\">\n            <motion.ul\n              key={path.length === 0 ? 'root' : path[path.length - 1].id}\n              variants={containerVariants}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              className=\"flex w-full flex-col items-start space-y-1\"\n              style={{ paddingLeft: `${path.length * 16}px` }}\n            >\n              {currentItems.map((item, index) => {\n                const hasChildren = !!item.children?.length;\n\n                return (\n                  <motion.li\n                    key={item.id}\n                    custom={index}\n                    variants={itemVariants}\n                    className=\"w-full\"\n                  >\n                    <button\n                      onClick={() => handleNavigateForward(item, index)}\n                      className={`group w-full rounded-lg px-4 py-3 text-left text-xl font-semibold transition-all duration-200 sm:text-2xl ${\n                        hasChildren\n                          ? 'text-foreground hover:bg-muted/50 hover:text-foreground'\n                          : activeItemId === item.id\n                            ? 'bg-accent text-accent-foreground'\n                            : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n                      }`}\n                    >\n                      <motion.span\n                        layoutId={hasChildren ? `name-${item.id}` : undefined}\n                        className=\"inline-block\"\n                      >\n                        {item.label}\n                      </motion.span>\n                    </button>\n                  </motion.li>\n                );\n              })}\n            </motion.ul>\n          </AnimatePresence>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default TreeMenu;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "uniswap-dialog",
      "type": "registry:component",
      "title": "Uniswap Dialog",
      "description": "Interactive wallet interface with expandable cards featuring smooth layout animations and micro-interactions.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ],
      "files": [
        {
          "path": "components/watermelon/uniswap-dialog.tsx",
          "type": "registry:component",
          "content": "import { useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Search, X, Check, ChevronDown } from 'lucide-react';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/* utils */\nfunction cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\n/* types */\nexport type Country = {\n  name: string;\n  code: string;\n};\n\nexport type UniSwapDialogProps = {\n  value: Country;\n  onChange: (country: Country) => void;\n  countries?: Country[];\n  title?: string;\n};\n\n/* default countries */\nexport const DefaultCountries: Country[] = [\n  { name: 'Afghanistan', code: 'AF' },\n  { name: 'Åland Islands', code: 'AX' },\n  { name: 'Albania', code: 'AL' },\n  { name: 'Algeria', code: 'DZ' },\n  { name: 'American Samoa', code: 'AS' },\n  { name: 'Andorra', code: 'AD' },\n  { name: 'Angola', code: 'AO' },\n  { name: 'Australia', code: 'AU' },\n  { name: 'Austria', code: 'AT' },\n  { name: 'Belarus', code: 'BY' },\n  { name: 'Cyprus', code: 'CY' },\n  { name: 'India', code: 'IN' },\n  { name: 'Mauritius', code: 'MU' },\n  { name: 'Russia', code: 'RU' },\n  { name: 'United States', code: 'US' },\n];\n\n/* flag */\nconst Flag = ({ code }: { code: string }) => (\n  <img\n    src={`https://flagcdn.com/w160/${code.toLowerCase()}.png`}\n    alt={code}\n    className=\"h-6 w-6 shrink-0 rounded-full object-cover\"\n    loading=\"lazy\"\n  />\n);\n\n/* component */\nexport function UniSwapDialog({\n  value,\n  onChange,\n  countries = DefaultCountries,\n  title = 'Select your region',\n}: UniSwapDialogProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [search, setSearch] = useState('');\n\n  const filteredCountries = useMemo(() => {\n    return countries.filter((c) =>\n      c.name.toLowerCase().includes(search.toLowerCase()),\n    );\n  }, [countries, search]);\n\n  return (\n    <div className=\"relative w-max\">\n      {/* Trigger */}\n      <button\n        onClick={() => setIsOpen(true)}\n        className=\"flex items-center gap-2 rounded-full bg-gray-100 px-2 py-1.5 transition-colors hover:bg-gray-200 dark:bg-[#3A3A3A] dark:hover:bg-[#444]\"\n      >\n        <div className=\"h-6 w-6 shrink-0 overflow-hidden rounded-full border border-gray-200 dark:border-transparent\">\n          <Flag code={value.code} />\n        </div>\n        <ChevronDown size={16} className=\"text-gray-700 dark:text-white\" />\n      </button>\n\n      <AnimatePresence>\n        {isOpen && (\n          <>\n            {/* Backdrop */}\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsOpen(false)}\n              className=\"fixed inset-0 z-998 bg-black/20 backdrop-blur-[2px]\"\n            />\n\n            {/* Dialog Container */}\n            <div className=\"fixed inset-0 z-999 flex items-center justify-center p-4 pointer-events-none\">\n              <motion.div\n                initial={{\n                  opacity: 0,\n                  scale: 0.96,\n                  filter: 'blur(4px)',\n                }}\n                animate={{\n                  opacity: 1,\n                  scale: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 0.96,\n                  filter: 'blur(4px)',\n                }}\n                transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n                className=\"pointer-events-auto flex h-fit max-h-[520px] w-full max-w-[400px] flex-col overflow-hidden rounded-[28px] border border-gray-200 bg-white shadow-2xl sm:h-[520px] dark:border-[#282828] dark:bg-[#181818] dark:shadow-black/50\"\n              >\n                {/* Header */}\n                <div className=\"flex items-center justify-between p-4 pb-2\">\n                  <h2 className=\"px-1 text-sm font-medium text-gray-900 dark:text-white\">\n                    {title}\n                  </h2>\n                  <button\n                    title=\"close\"\n                    onClick={() => setIsOpen(false)}\n                    className=\"p-1 text-gray-500 transition-colors hover:text-gray-900 dark:text-white/80 dark:hover:text-white\"\n                  >\n                    <X size={18} />\n                  </button>\n                </div>\n\n                {/* Search */}\n                <div className=\"px-4 pb-3\">\n                  <div className=\"relative flex items-center\">\n                    <Search\n                      size={16}\n                      className=\"absolute left-3.5 text-gray-400 dark:text-[#8d8c8d]\"\n                    />\n                    <input\n                      autoFocus\n                      value={search}\n                      onChange={(e) => setSearch(e.target.value)}\n                      placeholder=\"Search by country or region\"\n                      className=\"w-full rounded-xl border border-gray-200 bg-gray-50 py-2.5 pr-4 pl-10 text-sm text-gray-900 placeholder-gray-400 transition-colors outline-none focus:border-gray-300 dark:border-[#8d8c8d]/30 dark:bg-[#282828] dark:text-white dark:placeholder-[#8d8c8d] dark:focus:border-[#444]\"\n                    />\n                  </div>\n                </div>\n\n                {/* List */}\n                <div className=\"custom-scrollbar flex-1 overflow-y-auto pb-4\">\n                  {filteredCountries.length === 0 ? (\n                    <div className=\"flex h-[150px] items-center justify-center text-sm text-gray-500 dark:text-[#8d8c8d]\">\n                      No countries found\n                    </div>\n                  ) : (\n                    filteredCountries.map((country) => (\n                      <button\n                        key={country.code}\n                        onClick={() => {\n                          onChange(country);\n                          setIsOpen(false);\n                          setSearch('');\n                        }}\n                        className={cn(\n                          'group flex w-full items-center justify-between px-4 py-2.5 transition-all',\n                          value.code === country.code\n                            ? 'bg-gray-100 dark:bg-[#3A3A3A]/50'\n                            : 'hover:bg-gray-50 dark:hover:bg-[#3A3A3A]/30',\n                        )}\n                      >\n                        <div className=\"flex items-center gap-3\">\n                          <div className=\"h-6 w-6 shrink-0 overflow-hidden rounded-full border border-gray-200 dark:border-transparent\">\n                            <Flag code={country.code} />\n                          </div>\n                          <span\n                            className={cn(\n                              'text-sm font-medium transition-colors',\n                              value.code === country.code\n                                ? 'text-gray-900 dark:text-white'\n                                : 'text-gray-500 group-hover:text-gray-900 dark:text-white/80 dark:group-hover:text-white',\n                            )}\n                          >\n                            {country.name}\n                          </span>\n                        </div>\n\n                        {value.code === country.code && (\n                          <Check\n                            size={16}\n                            className=\"text-gray-900 dark:text-white\"\n                          />\n                        )}\n                      </button>\n                    ))\n                  )}\n                </div>\n              </motion.div>\n            </div>\n          </>\n        )}\n      </AnimatePresence>\n\n      <style>{`\n        .custom-scrollbar::-webkit-scrollbar {\n          width: 4px;\n        }\n        .custom-scrollbar::-webkit-scrollbar-thumb {\n          background: #e5e7eb;\n          border-radius: 10px;\n        }\n        .dark .custom-scrollbar::-webkit-scrollbar-thumb {\n          background: #282828;\n        }\n        .custom-scrollbar::-webkit-scrollbar-track {\n          background: transparent;\n        }\n      `}</style>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "uniswap-dialog-base",
      "type": "registry:component",
      "title": "Uniswap Dialog (base)",
      "description": "Theme-ready base variant of Interactive wallet interface with expandable cards featuring smooth layout animations and micro-interactions..",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ],
      "files": [
        {
          "path": "components/watermelon/uniswap-dialog.tsx",
          "type": "registry:component",
          "content": "import { useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Search, X, Check, ChevronDown } from 'lucide-react';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/* utils */\nfunction cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\n/* types */\nexport type Country = {\n  name: string;\n  code: string;\n};\n\nexport type UniSwapDialogProps = {\n  value: Country;\n  onChange: (country: Country) => void;\n  countries?: Country[];\n  title?: string;\n};\n\n/* default countries */\nexport const DefaultCountries: Country[] = [\n  { name: 'Afghanistan', code: 'AF' },\n  { name: 'Åland Islands', code: 'AX' },\n  { name: 'Albania', code: 'AL' },\n  { name: 'Algeria', code: 'DZ' },\n  { name: 'American Samoa', code: 'AS' },\n  { name: 'Andorra', code: 'AD' },\n  { name: 'Angola', code: 'AO' },\n  { name: 'Australia', code: 'AU' },\n  { name: 'Austria', code: 'AT' },\n  { name: 'Belarus', code: 'BY' },\n  { name: 'Cyprus', code: 'CY' },\n  { name: 'India', code: 'IN' },\n  { name: 'Mauritius', code: 'MU' },\n  { name: 'Russia', code: 'RU' },\n  { name: 'United States', code: 'US' },\n];\n\n/* flag */\nconst Flag = ({ code }: { code: string }) => (\n  <img\n    src={`https://flagcdn.com/w160/${code.toLowerCase()}.png`}\n    alt={code}\n    className=\"h-6 w-6 shrink-0 rounded-full object-cover\"\n    loading=\"lazy\"\n  />\n);\n\n/* component */\nexport function UniSwapDialog({\n  value,\n  onChange,\n  countries = DefaultCountries,\n  title = 'Select your region',\n}: UniSwapDialogProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [search, setSearch] = useState('');\n\n  const filteredCountries = useMemo(() => {\n    return countries.filter((c) =>\n      c.name.toLowerCase().includes(search.toLowerCase()),\n    );\n  }, [countries, search]);\n\n  return (\n    <div className=\"relative w-max theme-injected font-sans\">\n      {/* Trigger */}\n      <button\n        onClick={() => setIsOpen(true)}\n        className=\"flex items-center gap-2 rounded-3xl bg-muted px-2 py-1.5 transition-colors hover:bg-muted/80\"\n      >\n        <div className=\"h-6 w-6 shrink-0 overflow-hidden rounded-full border border-border\">\n          <Flag code={value.code} />\n        </div>\n        <ChevronDown size={16} className=\"text-foreground\" />\n      </button>\n\n      <AnimatePresence>\n        {isOpen && (\n          <>\n            {/* Backdrop */}\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              onClick={() => setIsOpen(false)}\n              className=\"fixed inset-0 z-998 bg-background/30 backdrop-blur-sm\"\n            />\n\n            {/* Dialog Container */}\n            <div className=\"fixed inset-0 z-999 flex items-center justify-center p-4 pointer-events-none\">\n              <motion.div\n                initial={{\n                  opacity: 0,\n                  scale: 0.96,\n                  filter: 'blur(4px)',\n                }}\n                animate={{\n                  opacity: 1,\n                  scale: 1,\n                  filter: 'blur(0px)',\n                }}\n                exit={{\n                  opacity: 0,\n                  scale: 0.96,\n                  filter: 'blur(4px)',\n                }}\n                transition={{ type: 'spring', bounce: 0, duration: 0.3 }}\n                className=\"pointer-events-auto flex h-fit max-h-[520px] w-full max-w-[400px] flex-col overflow-hidden rounded-2xl border-2 border-border bg-card shadow-lg sm:h-[520px]\"\n              >\n                {/* Header */}\n                <div className=\"flex items-center justify-between p-4 pb-2\">\n                  <h2 className=\"px-1 text-sm font-medium text-foreground\">\n                    {title}\n                  </h2>\n                  <button\n                    title=\"close\"\n                    onClick={() => setIsOpen(false)}\n                    className=\"p-1 text-muted-foreground transition-colors hover:text-foreground\"\n                  >\n                    <X size={18} />\n                  </button>\n                </div>\n\n                {/* Search */}\n                <div className=\"px-4 pb-3\">\n                  <div className=\"relative flex items-center\">\n                    <Search\n                      size={16}\n                      className=\"absolute left-3.5 text-muted-foreground\"\n                    />\n                    <input\n                      autoFocus\n                      value={search}\n                      onChange={(e) => setSearch(e.target.value)}\n                      placeholder=\"Search by country or region\"\n                      className=\"w-full rounded-lg border-2 border-input bg-muted py-2.5 pr-4 pl-10 text-sm text-foreground placeholder-muted-foreground transition-colors outline-none focus:border-input\"\n                    />\n                  </div>\n                </div>\n\n                {/* List */}\n                <div className=\"custom-scrollbar flex-1 overflow-y-auto pb-4\">\n                  {filteredCountries.length === 0 ? (\n                    <div className=\"flex h-38 items-center justify-center text-sm text-muted-foreground\">\n                      No countries found\n                    </div>\n                  ) : (\n                    filteredCountries.map((country) => (\n                      <button\n                        key={country.code}\n                        onClick={() => {\n                          onChange(country);\n                          setIsOpen(false);\n                          setSearch('');\n                        }}\n                        className={cn(\n                          'group flex w-full items-center justify-between px-4 py-2.5 transition-all',\n                          value.code === country.code\n                            ? 'bg-muted'\n                            : 'hover:bg-muted/50',\n                        )}\n                      >\n                        <div className=\"flex items-center gap-3\">\n                          <div className=\"h-6 w-6 shrink-0 overflow-hidden rounded-full border-2 border-border\">\n                            <Flag code={country.code} />\n                          </div>\n                          <span\n                            className={cn(\n                              'text-sm font-medium transition-colors',\n                              value.code === country.code\n                                ? 'text-foreground'\n                                : 'text-muted-foreground group-hover:text-foreground',\n                            )}\n                          >\n                            {country.name}\n                          </span>\n                        </div>\n\n                        {value.code === country.code && (\n                          <Check\n                            size={16}\n                            className=\"text-foreground\"\n                          />\n                        )}\n                      </button>\n                    ))\n                  )}\n                </div>\n              </motion.div>\n            </div>\n          </>\n        )}\n      </AnimatePresence>\n\n      <style>{`\n        .custom-scrollbar::-webkit-scrollbar {\n          width: 4px;\n        }\n        .custom-scrollbar::-webkit-scrollbar-thumb {\n          background: hsl(var(--border));\n          border-radius: 10px;\n        }\n        .custom-scrollbar::-webkit-scrollbar-track {\n          background: transparent;\n        }\n      `}</style>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "vertical-tooltip-navbar",
      "type": "registry:component",
      "title": "Vertical Tooltip Navbar",
      "description": "A vertical tooltip menu with smooth clip-path animations that reveal tooltips on hover",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/vertical-tooltip-navbar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useRef, useState, type ReactNode } from 'react';\nimport { MessageCircle, Inbox, Circle, CommandIcon } from 'lucide-react';\n\nconst DEFAULT_ITEMS: TooltipItem[] = [\n  {\n    icon: <MessageCircle className=\"h-full w-full\" />,\n    label: 'Comment',\n    labelHasKeyword: ['C'],\n    hasBadge: false,\n  },\n  {\n    icon: <Inbox className=\"h-full w-full\" />,\n    label: 'Inbox',\n    labelHasKeyword: ['I'],\n    hasBadge: true,\n  },\n  {\n    icon: <Circle className=\"h-full w-full\" />,\n    label: 'Record',\n    labelHasKeyword: ['R'],\n    hasBadge: false,\n  },\n];\nexport type TooltipItem = {\n  icon: ReactNode;\n  label: string;\n  labelHasKeyword?: (string | ReactNode)[] | false;\n  hasBadge?: boolean;\n};\n\ninterface TooltipVerticalNavbarProps {\n  items: TooltipItem[];\n  tooltipDelay?: number;\n}\n\nexport const TooltipVerticalNavbar = ({\n  items = DEFAULT_ITEMS,\n  tooltipDelay = 300,\n}: TooltipVerticalNavbarProps) => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [coords, setCoords] = useState({ clipPath: '', translateY: 0 });\n\n  const measureRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n  const [isEntering, setIsEntering] = useState(true);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const calculatePosition = (index: number) => {\n    const activeLabel = measureRefs.current[index];\n    const activeIcon = buttonRefs.current[index];\n\n    if (!activeLabel || !activeIcon) return null;\n\n    const labelTop = activeLabel.offsetTop;\n    const labelHeight = activeLabel.offsetHeight;\n    const labelCenter = labelTop + labelHeight / 2;\n\n    const iconTop = activeIcon.offsetTop;\n    const iconHeight = activeIcon.offsetHeight;\n    const iconCenter = iconTop + iconHeight / 2;\n\n    const totalHeight = measureRefs.current.reduce(\n      (acc, el) => acc + (el?.offsetHeight || 0),\n      0,\n    );\n\n    const cTop = (labelTop / totalHeight) * 100;\n    const cBottom = 100 - ((labelTop + labelHeight) / totalHeight) * 100;\n\n    return {\n      clipPath: `inset(${cTop}% 0 ${cBottom}% 0 round 8px)`,\n      translateY: iconCenter - labelCenter,\n    };\n  };\n\n  const handleMouseEnter = (index: number) => {\n    const newCoords = calculatePosition(index);\n    if (!newCoords) return;\n\n    if (activeIndex === null) {\n      if (timeoutRef.current) clearTimeout(timeoutRef.current);\n      setIsEntering(true);\n\n      timeoutRef.current = setTimeout(() => {\n        setCoords(newCoords);\n        setActiveIndex(index);\n      }, tooltipDelay);\n    } else {\n      setCoords(newCoords);\n      setActiveIndex(index);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setActiveIndex(null);\n    setCoords({ clipPath: '', translateY: 0 });\n    setIsEntering(true);\n  };\n\n  return (\n    <div className=\"flex h-screen items-center px-8\">\n      <div className=\"relative text-white\" onMouseLeave={handleMouseLeave}>\n        <AnimatePresence>\n          {activeIndex !== null && coords.clipPath !== '' && (\n            <motion.div\n              className=\"absolute top-0 left-16\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={{ duration: 0.2 }}\n            >\n              <motion.div\n                className=\"bg-black dark:bg-neutral-800\"\n                animate={{\n                  clipPath: coords.clipPath,\n                  y: coords.translateY,\n                }}\n                transition={{\n                  type: 'spring',\n                  bounce: 0,\n                  duration: isEntering ? 0 : 0.4,\n                }}\n                onUpdate={() => {\n                  if (isEntering) {\n                    setIsEntering(false);\n                  }\n                }}\n              >\n                <div className=\"flex flex-col items-start justify-center\">\n                  {items.map((item, index) => (\n                    <div\n                      key={`real-${index}`}\n                      className=\"flex h-10 items-center justify-center gap-2 px-3 text-sm font-medium whitespace-nowrap\"\n                    >\n                      <span className=\"text-white\">{item.label}</span>\n                      {item.hasBadge && (\n                        <div className=\"flex items-center gap-0.5 text-white/40\">\n                          <span className=\"flex items-center justify-center rounded-sm border border-white/20 p-1\">\n                            <CommandIcon className=\"size-3 text-neutral-500\" />\n                          </span>\n                        </div>\n                      )}\n                      {item.labelHasKeyword && (\n                        <div className=\"flex items-center gap-0.5 text-white/40\">\n                          {item.labelHasKeyword.map((key, i) => (\n                            <span\n                              key={i}\n                              className=\"flex items-center justify-center rounded-sm border border-white/20 px-1 tabular-nums\"\n                            >\n                              {key}\n                            </span>\n                          ))}\n                        </div>\n                      )}\n                    </div>\n                  ))}\n                </div>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <div className=\"z-10 flex flex-col items-center justify-center rounded-full bg-black/95 p-2 backdrop-blur dark:bg-neutral-800\">\n          {items.map((item, index) => (\n            <button\n              key={index}\n              onMouseEnter={() => handleMouseEnter(index)}\n              ref={(el) => {\n                buttonRefs.current[index] = el;\n              }}\n              className=\"flex cursor-pointer items-center justify-center rounded-full transition-colors hover:bg-white/10\"\n            >\n              <div className=\"flex size-10 items-center justify-center p-1.5 dark:text-neutral-200\">\n                {item.icon}\n              </div>\n              <span className=\"sr-only\">{item.label}</span>\n            </button>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"pointer-events-none absolute top-0 left-0 flex flex-col overflow-hidden whitespace-nowrap opacity-0\">\n        {items.map((item, index) => (\n          <div\n            key={`measure-${index}`}\n            ref={(el) => {\n              measureRefs.current[index] = el;\n            }}\n            className=\"flex h-10 items-center justify-center gap-2 px-3 text-sm font-medium whitespace-nowrap\"\n          >\n            <span>{item.label}</span>\n            {item.hasBadge && (\n              <div className=\"flex items-center gap-0.5 text-white/40\">\n                <span className=\"flex items-center justify-center rounded-sm border border-white/20 p-1\">\n                  <CommandIcon className=\"size-3 text-neutral-500\" />\n                </span>\n              </div>\n            )}\n            {item.labelHasKeyword && (\n              <div className=\"flex items-center gap-0.5 text-white/40\">\n                {item.labelHasKeyword.map((key, i) => (\n                  <span\n                    key={i}\n                    className=\"flex items-center justify-center rounded-sm border border-white/20 px-1 tabular-nums\"\n                  >\n                    {typeof key === 'string' ? key : '⌘'}\n                  </span>\n                ))}\n              </div>\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "vertical-tooltip-navbar-base",
      "type": "registry:component",
      "title": "Vertical Tooltip Navbar (base)",
      "description": "Theme-ready base variant of A vertical tooltip menu with smooth clip-path animations that reveal tooltips on hover.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "components/watermelon/vertical-tooltip-navbar.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\nimport { useRef, useState, type ReactNode } from 'react';\nimport { MessageCircle, Inbox, Circle, CommandIcon } from 'lucide-react';\n\nconst DEFAULT_ITEMS: TooltipItem[] = [\n  {\n    icon: <MessageCircle className=\"h-full w-full\" />,\n    label: 'Comment',\n    labelHasKeyword: ['C'],\n    hasBadge: false,\n  },\n  {\n    icon: <Inbox className=\"h-full w-full\" />,\n    label: 'Inbox',\n    labelHasKeyword: ['I'],\n    hasBadge: true,\n  },\n  {\n    icon: <Circle className=\"h-full w-full\" />,\n    label: 'Record',\n    labelHasKeyword: ['R'],\n    hasBadge: false,\n  },\n];\n\nexport type TooltipItem = {\n  icon: ReactNode;\n  label: string;\n  labelHasKeyword?: (string | ReactNode)[] | false;\n  hasBadge?: boolean;\n};\n\ninterface TooltipVerticalNavbarProps {\n  items: TooltipItem[];\n  tooltipDelay?: number;\n}\n\nexport const TooltipVerticalNavbar = ({\n  items = DEFAULT_ITEMS,\n  tooltipDelay = 300,\n}: TooltipVerticalNavbarProps) => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [coords, setCoords] = useState({ clipPath: '', translateY: 0 });\n\n  const measureRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n  const [isEntering, setIsEntering] = useState(true);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const calculatePosition = (index: number) => {\n    const activeLabel = measureRefs.current[index];\n    const activeIcon = buttonRefs.current[index];\n\n    if (!activeLabel || !activeIcon) return null;\n\n    const labelTop = activeLabel.offsetTop;\n    const labelHeight = activeLabel.offsetHeight;\n    const labelCenter = labelTop + labelHeight / 2;\n\n    const iconTop = activeIcon.offsetTop;\n    const iconHeight = activeIcon.offsetHeight;\n    const iconCenter = iconTop + iconHeight / 2;\n\n    const totalHeight = measureRefs.current.reduce(\n      (acc, el) => acc + (el?.offsetHeight || 0),\n      0,\n    );\n\n    const cTop = (labelTop / totalHeight) * 100;\n    const cBottom = 100 - ((labelTop + labelHeight) / totalHeight) * 100;\n\n    return {\n      clipPath: `inset(${cTop}% 0 ${cBottom}% 0 round 8px)`,\n      translateY: iconCenter - labelCenter,\n    };\n  };\n\n  const handleMouseEnter = (index: number) => {\n    const newCoords = calculatePosition(index);\n    if (!newCoords) return;\n\n    if (activeIndex === null) {\n      if (timeoutRef.current) clearTimeout(timeoutRef.current);\n      setIsEntering(true);\n\n      timeoutRef.current = setTimeout(() => {\n        setCoords(newCoords);\n        setActiveIndex(index);\n      }, tooltipDelay);\n    } else {\n      setCoords(newCoords);\n      setActiveIndex(index);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setActiveIndex(null);\n    setCoords({ clipPath: '', translateY: 0 });\n    setIsEntering(true);\n  };\n\n  return (\n    <div className=\"theme-injected flex h-screen items-center px-8\">\n      <div className=\"text-foreground relative\" onMouseLeave={handleMouseLeave}>\n        <AnimatePresence>\n          {activeIndex !== null && coords.clipPath !== '' && (\n            <motion.div\n              className=\"absolute top-0 left-16\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={{ duration: 0.2 }}\n            >\n              <motion.div\n                className=\"bg-muted text-muted-foreground-foreground rounded-lg\"\n                animate={{\n                  clipPath: coords.clipPath,\n                  y: coords.translateY,\n                }}\n                transition={{\n                  type: 'spring',\n                  bounce: 0,\n                  duration: isEntering ? 0 : 0.4,\n                }}\n                onUpdate={() => {\n                  if (isEntering) {\n                    setIsEntering(false);\n                  }\n                }}\n              >\n                <div className=\"flex flex-col items-start justify-center\">\n                  {items.map((item, index) => (\n                    <div\n                      key={`real-${index}`}\n                      className=\"flex h-10 items-center justify-center gap-2 px-3 text-sm font-medium whitespace-nowrap\"\n                    >\n                      <span className=\"text-muted-foreground\">{item.label}</span>\n                      {item.hasBadge && (\n                        <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                          <span className=\"border-border flex items-center justify-center rounded-lg border p-1\">\n                            <CommandIcon className=\"text-muted-foreground size-3\" />\n                          </span>\n                        </div>\n                      )}\n                      {item.labelHasKeyword && (\n                        <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                          {item.labelHasKeyword.map((key, i) => (\n                            <span\n                              key={i}\n                              className=\"border-border flex items-center justify-center rounded-lg border px-1 tabular-nums\"\n                            >\n                              {key}\n                            </span>\n                          ))}\n                        </div>\n                      )}\n                    </div>\n                  ))}\n                </div>\n              </motion.div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <div className=\"bg-muted z-10 flex flex-col border border-border items-center justify-center rounded-lg p-2 backdrop-blur\">\n          {items.map((item, index) => (\n            <button\n              key={index}\n              onMouseEnter={() => handleMouseEnter(index)}\n              ref={(el) => {\n                buttonRefs.current[index] = el;\n              }}\n              className=\"hover:bg-accent flex cursor-pointer items-center justify-center rounded-lg transition-colors\"\n            >\n              <div className=\"text-muted-foreground flex size-10 items-center justify-center p-1.5\">\n                {item.icon}\n              </div>\n              <span className=\"sr-only\">{item.label}</span>\n            </button>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"pointer-events-none absolute top-0 left-0 flex flex-col overflow-hidden whitespace-nowrap opacity-0\">\n        {items.map((item, index) => (\n          <div\n            key={`measure-${index}`}\n            ref={(el) => {\n              measureRefs.current[index] = el;\n            }}\n            className=\"flex h-10 items-center justify-center gap-2 px-3 text-sm font-medium whitespace-nowrap\"\n          >\n            <span>{item.label}</span>\n            {item.hasBadge && (\n              <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                <span className=\"border-border flex items-center justify-center rounded-lg border p-1\">\n                  <CommandIcon className=\"text-muted-foreground size-3\" />\n                </span>\n              </div>\n            )}\n            {item.labelHasKeyword && (\n              <div className=\"text-muted-foreground flex items-center gap-0.5\">\n                {item.labelHasKeyword.map((key, i) => (\n                  <span\n                    key={i}\n                    className=\"border-border flex items-center justify-center rounded-lg border px-1 tabular-nums\"\n                  >\n                    {typeof key === 'string' ? key : '⌘'}\n                  </span>\n                ))}\n              </div>\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "view-on-map",
      "type": "registry:component",
      "title": "View On Map",
      "description": "Map view component displaying locations with zoom, pins, and directions.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/view-on-map.tsx",
          "type": "registry:component",
          "content": "import React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Loader2 } from 'lucide-react';\nimport { FaMap } from 'react-icons/fa6';\n\ninterface ViewOnMapProps {\n  locationName?: string;\n  address?: string;\n  mapImageUrl?: string;\n  className?: string;\n}\n\nexport const ViewOnMap: React.FC<ViewOnMapProps> = ({\n  address = 'Boston Public Garden',\n  mapImageUrl = 'https://images.unsplash.com/photo-1526778548025-fa2f459cd5ce?q=80&w=2000&auto=format&fit=crop',\n  className = '',\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [isMapLoaded, setIsMapLoaded] = useState(false);\n  const [isDark] = useState(false);\n\n  const toggleOpen = () => {\n    setIsOpen(!isOpen);\n    if (isOpen) setIsMapLoaded(false);\n  };\n\n  const springConfig = {\n    type: 'spring' as const,\n    stiffness: 400,\n    damping: 30,\n    mass: 0.8,\n  };\n\n  const publicMapUrl = `https://maps.google.com/maps?q=${encodeURIComponent(address)}&t=&z=16&ie=UTF8&iwloc=&output=embed`;\n\n  return (\n    <div className={`transition-colors duration-500`}>\n      <div\n        className={`flex min-h-full w-full flex-col items-center justify-center bg-transparent px-4`}\n      >\n        <div\n          className={`relative flex w-full items-center justify-center ${className}`}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {!isOpen ? (\n              /* --- PILL BUTTON --- */\n              <motion.div\n                key=\"button\"\n                layoutId=\"map-container\"\n                onClick={toggleOpen}\n                className=\"group relative flex cursor-pointer items-center justify-center overflow-hidden bg-[#E5E4EE] shadow-sm transition-colors duration-300 dark:bg-[#1C1C1E]\"\n                style={{ width: 180, height: 52, borderRadius: 26 }}\n                initial={{ opacity: 0, scale: 0.9 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.95 }}\n                transition={springConfig}\n                whileHover={{ scale: 1.02 }}\n                whileTap={{ scale: 0.98 }}\n              >\n                <motion.div\n                  layoutId=\"map-bg\"\n                  className=\"absolute inset-0 opacity-20 brightness-110 grayscale transition-opacity dark:opacity-10 dark:brightness-50\"\n                  style={{\n                    backgroundImage: `url(${mapImageUrl})`,\n                    backgroundSize: 'cover',\n                    backgroundPosition: 'center',\n                  }}\n                />\n\n                <motion.div className=\"relative z-10 flex items-center space-x-3 px-4 py-4\">\n                  <FaMap className=\"h-5 w-5 text-[#6A6973] transition-colors dark:text-white/60\" />\n                  <span className=\"text-[18px] font-semibold tracking-tight text-[#3D3C43] transition-colors dark:text-white\">\n                    View on Map\n                  </span>\n                </motion.div>\n              </motion.div>\n            ) : (\n              /* --- EXPANDED MAP --- */\n              <motion.div\n                key=\"map\"\n                layoutId=\"map-container\"\n                className=\"relative aspect-square w-[calc(100vw-64px)] overflow-hidden bg-[#DEDEDE] shadow-lg transition-colors duration-300 sm:w-[380px] dark:bg-[#141414]\"\n                style={{ borderRadius: 32 }}\n                transition={springConfig}\n              >\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  transition={{ delay: 0.15 }}\n                  className=\"absolute inset-0 h-full w-full brightness-[1.02] contrast-[1.05] grayscale-[0.9] saturate-[0.8] sepia-[0.1]\"\n                >\n                  <iframe\n                    title=\"Google Map\"\n                    width=\"100%\"\n                    height=\"100%\"\n                    style={{\n                      border: 0,\n                      filter: isDark\n                        ? 'invert(90%) hue-rotate(180deg)'\n                        : 'invert(15%) hue-rotate(180deg)',\n                    }}\n                    src={publicMapUrl}\n                    allowFullScreen\n                    onLoad={() => setIsMapLoaded(true)}\n                    className={`transition-opacity duration-700 ${isMapLoaded ? 'opacity-100' : 'opacity-0'}`}\n                  />\n                </motion.div>\n\n                {!isMapLoaded && (\n                  <div className=\"absolute inset-0 flex items-center justify-center bg-[#E5E5E7] transition-colors dark:bg-[#1C1C1E]\">\n                    <Loader2 className=\"h-8 w-8 animate-spin text-gray-400\" />\n                  </div>\n                )}\n\n                {/* CLOSE BUTTON  */}\n                <motion.button\n                  initial={{ opacity: 0, scale: 0.5 }}\n                  animate={{ opacity: 1, scale: 1 }}\n                  onClick={toggleOpen}\n                  className=\"absolute top-4 right-4 z-50 flex h-10 w-10 items-center justify-center rounded-full bg-white text-[#85848B] shadow-lg transition-all hover:bg-gray-50 active:scale-90 sm:top-6 sm:right-6 sm:h-11 sm:w-11 dark:bg-[#2A2A2D] dark:text-white dark:hover:bg-[#3A3A3D]\"\n                >\n                  <X className=\"h-5 w-5 sm:h-6 sm:w-6\" strokeWidth={3} />\n                </motion.button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "view-on-map-base",
      "type": "registry:component",
      "title": "View On Map (base)",
      "description": "Theme-ready base variant of Map view component displaying locations with zoom, pins, and directions..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/view-on-map.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Loader2 } from 'lucide-react';\nimport { FaMap } from 'react-icons/fa6';\n\ninterface ViewOnMapProps {\n  locationName?: string;\n  address?: string;\n  mapImageUrl?: string;\n  className?: string;\n}\n\nexport const ViewOnMap: React.FC<ViewOnMapProps> = ({\n  address = 'Boston Public Garden',\n  mapImageUrl = 'https://images.unsplash.com/photo-1526778548025-fa2f459cd5ce?q=80&w=2000&auto=format&fit=crop',\n  className = '',\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [isMapLoaded, setIsMapLoaded] = useState(false);\n  const [isDark] = useState(false);\n\n  const toggleOpen = () => {\n    setIsOpen(!isOpen);\n    if (isOpen) setIsMapLoaded(false);\n  };\n\n  const springConfig = {\n    type: 'spring' as const,\n    stiffness: 400,\n    damping: 30,\n    mass: 0.8,\n  };\n\n  const publicMapUrl = `https://maps.google.com/maps?q=${encodeURIComponent(address)}&t=&z=16&ie=UTF8&iwloc=&output=embed`;\n\n  return (\n    <div className=\"theme-injected transition-colors duration-500\">\n      <div className=\"flex min-h-full w-full flex-col items-center justify-center px-4\">\n        <div\n          className={`relative flex w-full items-center justify-center ${className}`}\n        >\n          <AnimatePresence mode=\"popLayout\">\n            {!isOpen ? (\n              <motion.div\n                key=\"button\"\n                layoutId=\"map-container\"\n                onClick={toggleOpen}\n                className=\"group bg-muted relative flex cursor-pointer items-center justify-center overflow-hidden shadow-sm transition-colors duration-300\"\n                style={{ width: 180, height: 52, borderRadius: 8 }}\n                initial={{ opacity: 0, scale: 0.9 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.95 }}\n                transition={springConfig}\n                whileHover={{ scale: 1.02 }}\n                whileTap={{ scale: 0.98 }}\n              >\n                <motion.div\n                  layoutId=\"map-bg\"\n                  className=\"absolute inset-0 opacity-20 brightness-110 grayscale transition-opacity\"\n                  style={{\n                    backgroundImage: `url(${mapImageUrl})`,\n                    backgroundSize: 'cover',\n                    backgroundPosition: 'center',\n                  }}\n                />\n\n                <motion.div className=\"relative z-10 flex items-center space-x-3 px-4 py-4\">\n                  <FaMap className=\"text-muted-foreground h-5 w-5 transition-colors\" />\n                  <span className=\"text-foreground text-[18px] font-semibold tracking-tight transition-colors\">\n                    View on Map\n                  </span>\n                </motion.div>\n              </motion.div>\n            ) : (\n              <motion.div\n                key=\"map\"\n                layoutId=\"map-container\"\n                className=\"bg-muted relative aspect-square w-[calc(100vw-64px)] overflow-hidden shadow-lg transition-colors duration-300 sm:w-[380px]\"\n                style={{ borderRadius: 32 }}\n                transition={springConfig}\n              >\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  transition={{ delay: 0.15 }}\n                  className=\"absolute inset-0 h-full w-full brightness-[1.02] contrast-[1.05] grayscale-[0.9] saturate-[0.8] sepia-[0.1]\"\n                >\n                  <iframe\n                    title=\"Google Map\"\n                    width=\"100%\"\n                    height=\"100%\"\n                    style={{\n                      border: 0,\n                      filter: isDark\n                        ? 'invert(90%) hue-rotate(180deg)'\n                        : 'invert(15%) hue-rotate(180deg)',\n                    }}\n                    src={publicMapUrl}\n                    allowFullScreen\n                    onLoad={() => setIsMapLoaded(true)}\n                    className={`transition-opacity duration-700 ${isMapLoaded ? 'opacity-100' : 'opacity-0'}`}\n                  />\n                </motion.div>\n\n                {!isMapLoaded && (\n                  <div className=\"bg-background absolute inset-0 flex items-center justify-center transition-colors\">\n                    <Loader2 className=\"text-muted-foreground h-8 w-8 animate-spin\" />\n                  </div>\n                )}\n\n                <motion.button\n                  initial={{ opacity: 0, scale: 0.5 }}\n                  animate={{ opacity: 1, scale: 1 }}\n                  onClick={toggleOpen}\n                  className=\"bg-background text-muted-foreground hover:bg-accent hover:text-accent-foreground absolute top-4 right-4 z-50 flex h-10 w-10 items-center justify-center rounded-lg shadow-lg transition-all active:scale-90 sm:top-6 sm:right-6 sm:h-11 sm:w-11\"\n                >\n                  <X className=\"h-5 w-5 sm:h-6 sm:w-6\" strokeWidth={3} />\n                </motion.button>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "voice-chat-disclosure",
      "type": "registry:component",
      "title": "Voice Chat Disclosure",
      "description": "An interactive, expandable voice chat pill with avatar stacking and animated voice indicators.",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/voice-chat-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type ReactNode } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { IoChevronDown } from 'react-icons/io5';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Cancel01Icon } from '@hugeicons/core-free-icons';\n\nexport interface User {\n  id: number;\n  name: string;\n  img: string;\n  active?: boolean;\n}\n\ntype IconRenderer = (props?: any) => ReactNode;\n\ninterface VoiceChatDisclosureProps {\n  users?: User[];\n  title?: string;\n  ctaText?: string;\n  helperText?: string;\n  closeIcon?: IconRenderer;\n}\n\nconst DEFAULT_USERS: User[] = [\n  {\n    id: 1,\n    name: 'Oğuz',\n    img: 'https://i.pravatar.cc/150?u=oguz',\n    active: true,\n  },\n  { id: 2, name: 'Ashish', img: 'https://i.pravatar.cc/150?u=ashish' },\n  { id: 3, name: 'Mariana', img: 'https://i.pravatar.cc/150?u=mariana' },\n  { id: 4, name: 'MDS', img: 'https://i.pravatar.cc/150?u=mds' },\n  { id: 5, name: 'Ana', img: 'https://i.pravatar.cc/150?u=ana' },\n  {\n    id: 6,\n    name: 'Natko',\n    img: 'https://i.pravatar.cc/150?u=natko',\n    active: true,\n  },\n];\n\nexport const VoiceChatDisclosure: React.FC<VoiceChatDisclosureProps> = ({\n  users = DEFAULT_USERS,\n  title = 'Voice Chat',\n  ctaText = 'Join Now',\n  helperText = 'Mic will be muted initially.',\n  closeIcon = (props) => (\n    <HugeiconsIcon icon={Cancel01Icon} size={20} strokeWidth={2} {...props} />\n  ),\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const bars = [0, 1, 2, 3];\n\n  return (\n    <MotionConfig\n      transition={{ type: 'spring', bounce: 0, visualDuration: 0.32 }}\n    >\n      <motion.div layout className=\"relative\">\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen && (\n            <motion.div\n              layout=\"position\"\n              className=\"absolute -top-4 -left-4 z-20 flex h-10 w-10 items-center justify-center rounded-full bg-neutral-900 shadow-lg dark:bg-neutral-100\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n            >\n              <div className=\"flex items-center gap-[3px]\">\n                {bars.map((i) => (\n                  <motion.div\n                    key={i}\n                    className=\"w-[2.5px] rounded-full bg-white dark:bg-neutral-900\"\n                    initial={{ height: 6 }}\n                    animate={{ height: [2, 16, 6] }}\n                    transition={{\n                      duration: 1,\n                      repeat: Infinity,\n                      delay: i * 0.15,\n                    }}\n                  />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <motion.div\n          layout\n          onClick={() => !isOpen && setIsOpen(true)}\n          className=\"cursor-pointer overflow-hidden border border-neutral-200 bg-white shadow-xl dark:border-neutral-700 dark:bg-neutral-900\"\n          style={{\n            width: isOpen ? 'min(320px, calc(100vw - 32px))' : 280,\n            height: isOpen ? 'auto' : 90,\n            borderRadius: isOpen ? 32 : 44,\n          }}\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <div className=\"flex h-[90px] items-center px-6\">\n                <div className=\"flex -space-x-3\">\n                  {users.slice(0, 4).map((user, idx) => (\n                    <motion.div\n                      key={user.id}\n                      layoutId={`avatar-${user.id}`}\n                      style={{ zIndex: 10 - idx }}\n                    >\n                      <motion.img\n                        layoutId={`avatar-img-${user.id}`}\n                        src={user.img}\n                        className=\"h-14 w-14 rounded-full border-4 border-white object-cover shadow-lg dark:border-neutral-900\"\n                      />\n                    </motion.div>\n                  ))}\n                </div>\n\n                <div className=\"ml-4 flex items-center gap-1 text-lg font-medium text-neutral-600 dark:text-neutral-400\">\n                  <span>+{users.length - 4}</span>\n                  <IoChevronDown />\n                </div>\n              </div>\n            ) : (\n              <motion.div layout className=\"flex flex-col\">\n                <div className=\"flex items-center justify-between border-b border-neutral-200 bg-neutral-100 px-4 py-3 sm:px-8 dark:border-neutral-700 dark:bg-neutral-800\">\n                  <div className=\"w-8\" />\n                  <h2 className=\"text-base font-semibold text-neutral-700 sm:text-lg dark:text-neutral-300 line-clamp-1\">\n                    {title}\n                  </h2>\n                  <button\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      setIsOpen(false);\n                    }}\n                    className=\"rounded-full bg-neutral-200 p-2 dark:bg-neutral-700\"\n                  >\n                    {closeIcon({\n                      className: 'text-neutral-600 size-4 sm:size-5 dark:text-neutral-300',\n                    })}\n                  </button>\n                </div>\n\n                <div className=\"grid grid-cols-4 gap-y-6 px-4 py-6 sm:gap-y-8 sm:px-6\">\n                  {users.map((user) => (\n                    <motion.div\n                      key={user.id}\n                      layoutId={`avatar-${user.id}`}\n                      className=\"relative flex flex-col items-center gap-2\"\n                    >\n                      <div className=\"relative\">\n                        <motion.img\n                          layoutId={`avatar-img-${user.id}`}\n                          src={user.img}\n                          className=\"h-11 w-11 rounded-full border border-neutral-200 object-cover shadow-md sm:h-[56px] sm:w-[56px] dark:border-neutral-700\"\n                        />\n\n                        {user.active && (\n                          <motion.div className=\"absolute -top-2 -right-2 flex h-6 w-6 items-center justify-center rounded-full bg-white shadow-xl sm:-top-3 sm:-right-3 sm:h-8 sm:w-8 dark:bg-neutral-800\">\n                            <div className=\"flex items-center gap-[2px]\">\n                              {bars.map((i) => (\n                                <motion.div\n                                  key={i}\n                                  className=\"w-[1.5px] rounded-full bg-neutral-700 sm:w-[2px] dark:bg-neutral-300\"\n                                  animate={{ height: [2, 10, 6] }}\n                                  transition={{\n                                    duration: 1,\n                                    repeat: Infinity,\n                                    delay: i * 0.2,\n                                  }}\n                                />\n                              ))}\n                            </div>\n                          </motion.div>\n                        )}\n                      </div>\n\n                      <span className=\"text-[11px] font-semibold text-neutral-700 sm:text-sm dark:text-neutral-400 truncate w-full text-center px-1\">\n                        {user.name}\n                      </span>\n                    </motion.div>\n                  ))}\n                </div>\n\n                <div className=\"px-4 pb-6 sm:px-6\">\n                  <button className=\"w-full rounded-xl bg-neutral-900 py-2.5 text-base text-white transition active:scale-[0.98] sm:py-3 sm:text-lg dark:bg-neutral-100 dark:text-neutral-900\">\n                    {ctaText}\n                  </button>\n                  <p className=\"mt-3 text-center text-xs text-neutral-500 sm:mt-4 sm:text-sm dark:text-neutral-500\">\n                    {helperText}\n                  </p>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "voice-chat-disclosure-base",
      "type": "registry:component",
      "title": "Voice Chat Disclosure (base)",
      "description": "Theme-ready base variant of An interactive, expandable voice chat pill with avatar stacking and animated voice indicators..",
      "dependencies": [
        "@hugeicons/core-free-icons",
        "@hugeicons/react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/voice-chat-disclosure.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, type ReactNode } from 'react';\nimport { motion, AnimatePresence, MotionConfig } from 'motion/react';\nimport { IoChevronDown } from 'react-icons/io5';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Cancel01Icon } from '@hugeicons/core-free-icons';\n\nexport interface User {\n  id: number;\n  name: string;\n  img: string;\n  active?: boolean;\n}\n\ntype IconRenderer = (props?: any) => ReactNode;\n\ninterface VoiceChatDisclosureProps {\n  users?: User[];\n  title?: string;\n  ctaText?: string;\n  helperText?: string;\n  closeIcon?: IconRenderer;\n}\n\nconst DEFAULT_USERS: User[] = [\n  {\n    id: 1,\n    name: 'Oğuz',\n    img: 'https://i.pravatar.cc/150?u=oguz',\n    active: true,\n  },\n  { id: 2, name: 'Ashish', img: 'https://i.pravatar.cc/150?u=ashish' },\n  { id: 3, name: 'Mariana', img: 'https://i.pravatar.cc/150?u=mariana' },\n  { id: 4, name: 'MDS', img: 'https://i.pravatar.cc/150?u=mds' },\n  { id: 5, name: 'Ana', img: 'https://i.pravatar.cc/150?u=ana' },\n  {\n    id: 6,\n    name: 'Natko',\n    img: 'https://i.pravatar.cc/150?u=natko',\n    active: true,\n  },\n];\n\nexport const VoiceChatDisclosure: React.FC<VoiceChatDisclosureProps> = ({\n  users = DEFAULT_USERS,\n  title = 'Voice Chat',\n  ctaText = 'Join Now',\n  helperText = 'Mic will be muted initially.',\n  closeIcon = (props) => (\n    <HugeiconsIcon icon={Cancel01Icon} size={20} strokeWidth={2} {...props} />\n  ),\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const bars = [0, 1, 2, 3];\n\n  return (\n    <MotionConfig\n      transition={{ type: 'spring', bounce: 0, visualDuration: 0.32 }}\n    >\n      <motion.div layout className=\"relative theme-injected font-sans\">\n        <AnimatePresence mode=\"popLayout\">\n          {!isOpen && (\n            <motion.div\n              layout=\"position\"\n              className=\"absolute -top-4 -left-4 z-20 flex h-10 w-10 items-center justify-center rounded-4xl bg-primary shadow-lg\"\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n            >\n              <div className=\"flex items-center gap-[3px]\">\n                {bars.map((i) => (\n                  <motion.div\n                    key={i}\n                    className=\"w-[2.5px] rounded-full bg-primary-foreground\"\n                    initial={{ height: 6 }}\n                    animate={{ height: [2, 16, 6] }}\n                    transition={{\n                      duration: 1,\n                      repeat: Infinity,\n                      delay: i * 0.15,\n                    }}\n                  />\n                ))}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        <motion.div\n          layout\n          onClick={() => !isOpen && setIsOpen(true)}\n          className=\"cursor-pointer overflow-hidden border border-border bg-card shadow-xl\"\n          style={{\n            width: isOpen ? 'min(320px, calc(100vw - 32px))' : 280,\n            height: isOpen ? 'auto' : 90,\n            borderRadius: isOpen ? 32 : 44,\n          }}\n        >\n          <AnimatePresence mode=\"popLayout\" initial={false}>\n            {!isOpen ? (\n              <div className=\"flex h-[90px] items-center px-6\">\n                <div className=\"flex -space-x-3\">\n                  {users.slice(0, 4).map((user, idx) => (\n                    <motion.div\n                      key={user.id}\n                      layoutId={`avatar-${user.id}`}\n                      style={{ zIndex: 10 - idx }}\n                    >\n                      <motion.img\n                        layoutId={`avatar-img-${user.id}`}\n                        src={user.img}\n                        className=\"h-14 w-14 rounded-full border-4 border-background object-cover shadow-lg\"\n                      />\n                    </motion.div>\n                  ))}\n                </div>\n\n                <div className=\"ml-4 flex items-center gap-1 font-sans text-lg font-medium text-muted-foreground\">\n                  <span>+{users.length - 4}</span>\n                  <IoChevronDown />\n                </div>\n              </div>\n            ) : (\n              <motion.div layout className=\"flex flex-col\">\n                <div className=\"flex items-center justify-between border-b border-border bg-muted px-4 py-3 sm:px-8\">\n                  <div className=\"w-8\" />\n                  <h2 className=\"font-sans text-base font-semibold text-foreground sm:text-lg truncate\">\n                    {title}\n                  </h2>\n                  <button\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      setIsOpen(false);\n                    }}\n                    className=\"rounded-full bg-background p-2 text-muted-foreground transition-colors hover:text-foreground\"\n                  >\n                    {closeIcon({\n                      className: 'text-current size-4 sm:size-5',\n                    })}\n                  </button>\n                </div>\n\n                <div className=\"grid grid-cols-4 gap-y-6 px-4 py-6 sm:gap-y-8 sm:px-6\">\n                  {users.map((user) => (\n                    <motion.div\n                      key={user.id}\n                      layoutId={`avatar-${user.id}`}\n                      className=\"relative flex flex-col items-center gap-2\"\n                    >\n                      <div className=\"relative\">\n                        <motion.img\n                          layoutId={`avatar-img-${user.id}`}\n                          src={user.img}\n                          className=\"h-11 w-11 rounded-full border border-border object-cover shadow-md sm:h-[56px] sm:w-[56px]\"\n                        />\n\n                        {user.active && (\n                          <motion.div className=\"absolute -top-2 -right-2 flex h-6 w-6 items-center justify-center rounded-full bg-background shadow-xl sm:-top-3 sm:-right-3 sm:h-8 sm:w-8\">\n                            <div className=\"flex items-center gap-[2px]\">\n                              {bars.map((i) => (\n                                <motion.div\n                                  key={i}\n                                  className=\"w-[1.5px] rounded-full bg-muted-foreground sm:w-[2px]\"\n                                  animate={{ height: [2, 10, 6] }}\n                                  transition={{\n                                    duration: 1,\n                                    repeat: Infinity,\n                                    delay: i * 0.2,\n                                  }}\n                                />\n                              ))}\n                            </div>\n                          </motion.div>\n                        )}\n                      </div>\n\n                      <span className=\"font-sans text-[11px] font-semibold text-muted-foreground sm:text-sm truncate w-full text-center px-1\">\n                        {user.name}\n                      </span>\n                    </motion.div>\n                  ))}\n                </div>\n\n                <div className=\"px-4 pb-6 sm:px-6\">\n                  <button className=\"w-full rounded-4xl bg-primary py-2.5 font-sans text-base font-semibold text-primary-foreground transition active:scale-[0.98] sm:py-3 sm:text-lg\">\n                    {ctaText}\n                  </button>\n                  <p className=\"mt-3 text-center font-sans text-xs text-muted-foreground sm:mt-4 sm:text-sm\">\n                    {helperText}\n                  </p>\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </motion.div>\n    </MotionConfig>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "voice-note",
      "type": "registry:component",
      "title": "Voice Note",
      "description": "Voice note interaction for recording, previewing, and managing audio snippets.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/voice-note.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence, type Transition, MotionConfig } from 'motion/react';\nimport { Mic, X, Play, Square } from 'lucide-react';\nimport { RiSendPlaneFill } from 'react-icons/ri';\nimport { FaCheck } from 'react-icons/fa6';\n\nexport const RecorderState = {\n  IDLE: 'IDLE',\n  RECORDING: 'RECORDING',\n  REVIEWING: 'REVIEWING',\n  PLAYING: 'PLAYING',\n} as const;\n\nexport type RecorderState = (typeof RecorderState)[keyof typeof RecorderState];\n\ninterface VoiceNoteRecorderProps {\n  onSend?: (data: { duration: number; blob: Blob | null }) => void;\n  onCancel?: () => void;\n  maxDuration?: number;\n}\n\nexport const VoiceNote: React.FC<VoiceNoteRecorderProps> = ({\n  onSend,\n  onCancel,\n  maxDuration = 4,\n}) => {\n  const [state, setState] = useState<RecorderState>(RecorderState.IDLE);\n  const [duration, setDuration] = useState(0);\n  const [playbackTime, setPlaybackTime] = useState(0);\n\n  const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n  const playbackTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n  const spring: Transition = { type: 'spring', stiffness: 400, damping: 40 }\n\n  const startRecording = () => {\n    setState(RecorderState.RECORDING);\n    setDuration(0);\n    timerRef.current = setInterval(() => {\n      setDuration((prev) => {\n        if (prev >= maxDuration) {\n          stopRecording();\n          return prev;\n        }\n        return prev + 1;\n      });\n    }, 1000);\n  };\n\n  const stopRecording = () => {\n    if (timerRef.current) clearInterval(timerRef.current);\n    setState(RecorderState.REVIEWING);\n  };\n\n  const cancelRecording = () => {\n    if (timerRef.current) clearInterval(timerRef.current);\n    if (playbackTimerRef.current) clearInterval(playbackTimerRef.current);\n    setDuration(0);\n    setPlaybackTime(0);\n    setState(RecorderState.IDLE);\n    onCancel?.();\n  };\n\n  const startPlayback = () => {\n    setState(RecorderState.PLAYING);\n    setPlaybackTime(duration);\n    playbackTimerRef.current = setInterval(() => {\n      setPlaybackTime((prev) => {\n        if (prev <= 0) {\n          stopPlayback();\n          return 0;\n        }\n        return prev - 1;\n      });\n    }, 1000);\n  };\n\n  const stopPlayback = () => {\n    if (playbackTimerRef.current) clearInterval(playbackTimerRef.current);\n    setPlaybackTime(0);\n    setState(RecorderState.REVIEWING);\n  };\n\n  const handleSend = () => {\n    onSend?.({ duration, blob: null });\n\n  };\n\n  const [barHeights, setBarHeights] = useState<number[][]>([]);\n\n  useEffect(() => {\n    const heights = [...Array(6)].map(() => [\n      8 + Math.random() * 6,\n      18 + Math.random() * 10,\n      12 + Math.random() * 8,\n      24 + Math.random() * 12,\n      10 + Math.random() * 6,\n    ]);\n    requestAnimationFrame(() => setBarHeights(heights));\n  }, []);\n\n\n  useEffect(() => {\n    return () => {\n      if (timerRef.current) clearInterval(timerRef.current);\n      if (playbackTimerRef.current) clearInterval(playbackTimerRef.current);\n    };\n  }, []);\n\n  const actionBtnClass = `w-16 h-16 rounded-full border-[1.6px]  flex items-center justify-center shrink-0 transition-colors duration-300 bg-[#fefefe] dark:bg-neutral-900 border-[#E8E7EF] dark:border-white/5`;\n\n  return (\n    <div className=\"flex min-h-full w-full flex-col items-center justify-center space-y-12 bg-transparent p-8 transition-colors duration-500\">\n      <div className=\"flex items-center gap-3\">\n        <MotionConfig transition={spring}>\n          <AnimatePresence mode=\"popLayout\">\n            {state !== RecorderState.IDLE && (\n              <motion.button\n                key=\"cancel-btn\"\n                initial={{ opacity: 0, filter: 'blur(4px)', x: '95px' }}\n                animate={{ opacity: 1, filter: 'blur(0)', x: '0px' }}\n                exit={{ opacity: 1, filter: 'blur(4px)', x: '95px' }}\n\n                onClick={cancelRecording}\n                className={actionBtnClass}\n              >\n                <X size={28} className=\"text-slate-700 dark:text-neutral-100\" />\n              </motion.button>\n            )}\n          </AnimatePresence>\n\n          <motion.div\n            animate={{\n              width: state === RecorderState.IDLE ? '65px' : '110px',\n            }}\n\n            className={`relative z-20 flex items-center justify-center overflow-hidden transition-colors duration-300 ${state === RecorderState.IDLE ? 'h-16 w-16' : 'h-16 px-6'} rounded-full border-[1.6px] ${state === RecorderState.RECORDING\n              ? 'border-none bg-[#FEE5E4] dark:bg-[#441010]'\n              : 'border-[#E8E7EF] bg-[#fefefe] dark:border-[#2d2d33] dark:bg-[#1a1a1e]'\n              } `}\n            style={{\n              borderRadius: 32,\n            }}\n          >\n            <AnimatePresence mode=\"popLayout\">\n              {state === RecorderState.RECORDING && (\n                <motion.svg\n                  className=\"pointer-events-none absolute inset-0 h-full w-full\"\n                  initial={{ opacity: 0, filter: 'blur(8px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0)' }}\n                  exit={{ opacity: 0, filter: 'blur(8px)' }}\n                >\n                  <motion.rect\n                    x=\"2\"\n                    y=\"2\"\n                    rx=\"30\"\n                    width=\"calc(100% - 4px)\"\n                    height=\"calc(100% - 4px)\"\n                    fill=\"none\"\n                    stroke=\"#ef4444\"\n                    strokeWidth=\"3\"\n                    pathLength={1}\n                    strokeDasharray=\"1\"\n                    strokeDashoffset=\"1\"\n                    strokeLinecap=\"round\"\n                    initial={{ strokeDashoffset: 1 }}\n                    animate={{ strokeDashoffset: 0 }}\n                    transition={{\n                      duration: maxDuration,\n                      ease: 'linear',\n                    }}\n                  />\n                </motion.svg>\n              )}\n            </AnimatePresence>\n\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {state === RecorderState.IDLE && (\n                <motion.button\n                  key=\"mic-icon\"\n                  initial={{ opacity: 0, filter: 'blur(8px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0)' }}\n                  exit={{ opacity: 0, filter: 'blur(8px)' }}\n                  onClick={startRecording}\n                  className=\"flex items-center justify-center\"\n                >\n                  <Mic\n                    size={28}\n                    className=\"text-slate-800 dark:text-neutral-100\"\n                  />\n                </motion.button>\n              )}\n\n              {state === RecorderState.RECORDING && (\n                <motion.div\n                  key=\"recording-ui\"\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"z-10 flex items-center gap-1.5\"\n                >\n                  {barHeights.map((heights, i) => (\n                    <motion.div\n                      key={i}\n                      animate={{ height: heights }}\n                      transition={{\n                        duration: 1,\n                        repeat: Infinity,\n                        ease: 'linear',\n                        delay: i * 0.08,\n                      }}\n                      style={{ originY: 1 }}\n                      className=\"w-1.5 rounded-full bg-[#FC3229]\"\n                    />\n                  ))}\n                </motion.div>\n              )}\n\n              {(state === RecorderState.REVIEWING ||\n                state === RecorderState.PLAYING) && (\n                  <motion.div\n                    key=\"review-ui\"\n                    initial={{ opacity: 0, y: 5 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    exit={{ opacity: 0, y: -5 }}\n                    className=\"z-10 flex items-center gap-2\"\n                  >\n                    <motion.button\n                      key={\n                        state === RecorderState.PLAYING ? 'stop-btn' : 'play-btn'\n                      }\n                      onClick={\n                        state === RecorderState.PLAYING\n                          ? stopPlayback\n                          : startPlayback\n                      }\n                      className={`flex h-10 w-10 items-center justify-center rounded-full transition-colors ${state === RecorderState.PLAYING\n                        ? 'bg-transparent text-red-500 dark:text-red-400'\n                        : 'text-slate-800 dark:text-neutral-100'\n                        } `}\n                      initial={{ opacity: 0, filter: 'blur(4px)', scale: 0.25 }}\n                      animate={{ opacity: 1, filter: 'blur(0)', scale: 1 }}\n                      exit={{ opacity: 0, filter: 'blur(4px)', scale: 0.25 }}\n                    >\n                      {state === RecorderState.PLAYING ? (\n                        <Square size={22} fill=\"currentColor\" />\n                      ) : (\n                        <Play size={22} fill=\"currentColor\" />\n                      )}\n                    </motion.button>\n                    <span className=\"flex items-center gap-0.5 justify-center text-[20px] font-bold text-[#282828] tabular-nums transition-colors dark:text-neutral-100\">\n                      <AnimatedNumber\n                        value={\n                          state === RecorderState.PLAYING\n                            ? playbackTime\n                            : duration\n                        }\n                      />\n                      <motion.span layout>s</motion.span>\n                    </span>\n                  </motion.div>\n                )}\n            </AnimatePresence>\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\">\n            {(state === RecorderState.RECORDING ||\n              state === RecorderState.REVIEWING ||\n              state === RecorderState.PLAYING) && (\n                <motion.button\n                  initial={{ opacity: 0, filter: 'blur(4px)', x: -95 }}\n                  animate={{ opacity: 1, filter: 'blur(0)', x: 0 }}\n                  exit={{ opacity: 0, filter: 'blur(4px)', x: -95 }}\n                  className={actionBtnClass}\n                >\n                  <AnimatePresence mode=\"popLayout\">\n                    <motion.div\n                      key={\n                        state === RecorderState.RECORDING\n                          ? 'check-btn'\n                          : state === RecorderState.REVIEWING ||\n                            state === RecorderState.PLAYING\n                            ? 'send-btn'\n                            : 'cancel-btn'\n                      }\n                      initial={{ opacity: 0, filter: 'blur(4px)', scale: 0.25 }}\n                      animate={{ opacity: 1, filter: 'blur(0)', scale: 1 }}\n                      exit={{ opacity: 0, filter: 'blur(4px)', scale: 0.25 }}\n                      onClick={\n                        state === RecorderState.RECORDING\n                          ? stopRecording\n                          : state === RecorderState.PLAYING\n                            ? startRecording : handleSend\n                      }\n                    >\n                      {state === RecorderState.RECORDING && (\n                        <FaCheck\n                          size={26}\n                          className=\"text-slate-700 dark:text-neutral-100\"\n                        />\n                      )}\n\n                      {(state === RecorderState.REVIEWING ||\n                        state === RecorderState.PLAYING) && (\n                          <RiSendPlaneFill\n                            size={26}\n                            className=\"text-[#272727] dark:text-neutral-100\"\n                          />\n                        )}\n                    </motion.div>\n                  </AnimatePresence>\n                </motion.button>\n              )}\n          </AnimatePresence>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n\ninterface AnimatedNumberProps {\n  value: number;\n  className?: string;\n}\n\nconst digitVariants = {\n  initial: (dir: number) => ({\n    y: dir > 0 ? 8 : -8,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n  animate: {\n    y: 0,\n    opacity: 1,\n    scale: 1,\n    z: 10,\n    filter: 'blur(0px)',\n  },\n  exit: (dir: number) => ({\n    y: dir > 0 ? -8 : 8,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n};\n\nexport function AnimatedNumber({ value, className }: AnimatedNumberProps) {\n  const [direction, setDirection] = React.useState(0);\n  const prevValueRef = React.useRef(value);\n\n  React.useEffect(() => {\n    const prev = prevValueRef.current;\n    if (value > prev) setDirection(1);\n    else if (value < prev) setDirection(-1);\n    prevValueRef.current = value;\n  }, [value]);\n\n  const digits = value.toString().split('');\n\n  const [prevDigits, setPrevDigits] = React.useState<string[]>([]);\n  const [prevTicks, setPrevTicks] = React.useState<number[]>([]);\n\n  const len = digits.length;\n  const lenDiff = len - prevDigits.length;\n\n  const nextTicks = digits.map((digit, i) => {\n    const prevI = i - lenDiff;\n    const prevDigit = prevI >= 0 ? prevDigits[prevI] : undefined;\n    const prevTick = prevI >= 0 ? prevTicks[prevI] : 0;\n    return digit !== prevDigit ? (prevTick ?? 0) + 1 : (prevTick ?? 0);\n  });\n\n  if (prevDigits.join(\"\") !== digits.join(\"\")) {\n    setPrevTicks(nextTicks);\n    setPrevDigits(digits);\n  }\n\n  return (\n    <div\n      className={`relative flex items-center justify-center gap-1 tabular-nums ${className ?? ''}`}\n    >\n      {digits.map((digit, index) => (\n        <div key={`${index}-${len}`} className=\"relative w-3\">\n          <AnimatePresence mode=\"popLayout\" initial={false} custom={direction}>\n            <motion.span\n              layout\n              key={nextTicks[index]}\n              custom={direction}\n              variants={digitVariants}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              transition={{\n                type: 'spring',\n                stiffness: 200,\n                damping: 16,\n                mass: 1.2,\n              }}\n              className=\"absolute inset-0 flex items-center justify-center\"\n            >\n              {digit}\n            </motion.span>\n          </AnimatePresence>\n        </div>\n      ))}\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "voice-note-base",
      "type": "registry:component",
      "title": "Voice Note (base)",
      "description": "Theme-ready base variant of Voice note interaction for recording, previewing, and managing audio snippets..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/voice-note.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport {\n  motion,\n  AnimatePresence,\n  type Transition,\n  MotionConfig,\n} from 'motion/react';\nimport { Mic, X, Play, Square } from 'lucide-react';\nimport { RiSendPlaneFill } from 'react-icons/ri';\nimport { FaCheck } from 'react-icons/fa6';\n\nexport const RecorderState = {\n  IDLE: 'IDLE',\n  RECORDING: 'RECORDING',\n  REVIEWING: 'REVIEWING',\n  PLAYING: 'PLAYING',\n} as const;\n\nexport type RecorderState = (typeof RecorderState)[keyof typeof RecorderState];\n\ninterface VoiceNoteRecorderProps {\n  onSend?: (data: { duration: number; blob: Blob | null }) => void;\n  onCancel?: () => void;\n  maxDuration?: number;\n}\n\nexport const VoiceNote: React.FC<VoiceNoteRecorderProps> = ({\n  onSend,\n  onCancel,\n  maxDuration = 4,\n}) => {\n  const [state, setState] = useState<RecorderState>(RecorderState.IDLE);\n  const [duration, setDuration] = useState(0);\n  const [playbackTime, setPlaybackTime] = useState(0);\n\n  const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n  const playbackTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n  const spring: Transition = { type: 'spring', stiffness: 400, damping: 40 };\n\n  const startRecording = () => {\n    setState(RecorderState.RECORDING);\n    setDuration(0);\n    timerRef.current = setInterval(() => {\n      setDuration((prev) => {\n        if (prev >= maxDuration) {\n          stopRecording();\n          return prev;\n        }\n        return prev + 1;\n      });\n    }, 1000);\n  };\n\n  const stopRecording = () => {\n    if (timerRef.current) clearInterval(timerRef.current);\n    setState(RecorderState.REVIEWING);\n  };\n\n  const cancelRecording = () => {\n    if (timerRef.current) clearInterval(timerRef.current);\n    if (playbackTimerRef.current) clearInterval(playbackTimerRef.current);\n    setDuration(0);\n    setPlaybackTime(0);\n    setState(RecorderState.IDLE);\n    onCancel?.();\n  };\n\n  const startPlayback = () => {\n    setState(RecorderState.PLAYING);\n    setPlaybackTime(duration);\n    playbackTimerRef.current = setInterval(() => {\n      setPlaybackTime((prev) => {\n        if (prev <= 0) {\n          stopPlayback();\n          return 0;\n        }\n        return prev - 1;\n      });\n    }, 1000);\n  };\n\n  const stopPlayback = () => {\n    if (playbackTimerRef.current) clearInterval(playbackTimerRef.current);\n    setPlaybackTime(0);\n    setState(RecorderState.REVIEWING);\n  };\n\n  const handleSend = () => {\n    onSend?.({ duration, blob: null });\n  };\n\n  const [barHeights, setBarHeights] = useState<number[][]>([]);\n\n  useEffect(() => {\n    const heights = [...Array(6)].map(() => [\n      8 + Math.random() * 6,\n      18 + Math.random() * 10,\n      12 + Math.random() * 8,\n      24 + Math.random() * 12,\n      10 + Math.random() * 6,\n    ]);\n    requestAnimationFrame(() => setBarHeights(heights));\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      if (timerRef.current) clearInterval(timerRef.current);\n      if (playbackTimerRef.current) clearInterval(playbackTimerRef.current);\n    };\n  }, []);\n\n  const actionBtnClass = `w-16 h-16 rounded-lg border flex items-center justify-center shrink-0 transition-colors duration-300 bg-background border-border`;\n\n  return (\n    <div className=\"theme-injected flex min-h-full w-full flex-col items-center justify-center space-y-12 bg-transparent p-8 transition-colors duration-500\">\n      <div className=\"flex items-center gap-3\">\n        <MotionConfig transition={spring}>\n          <AnimatePresence mode=\"popLayout\">\n            {state !== RecorderState.IDLE && (\n              <motion.button\n                key=\"cancel-btn\"\n                initial={{ opacity: 0, filter: 'blur(4px)', x: '95px' }}\n                animate={{ opacity: 1, filter: 'blur(0)', x: '0px' }}\n                exit={{ opacity: 1, filter: 'blur(4px)', x: '95px' }}\n                onClick={cancelRecording}\n                className={actionBtnClass}\n              >\n                <X size={28} className=\"text-muted-foreground\" />\n              </motion.button>\n            )}\n          </AnimatePresence>\n\n          <motion.div\n            animate={{\n              width: state === RecorderState.IDLE ? '65px' : '110px',\n            }}\n            className={`relative z-20 rounded-lg flex items-center justify-center overflow-hidden transition-colors duration-300 ${\n              state === RecorderState.IDLE ? 'h-16 w-16' : 'h-16 px-6'\n            } rounded-lg border ${\n              state === RecorderState.RECORDING\n                ? 'bg-destructive/10 border-none'\n                : 'border-border bg-background'\n            }`}\n           \n          >\n            <AnimatePresence mode=\"popLayout\">\n              {state === RecorderState.RECORDING && (\n                <motion.svg\n                  className=\"pointer-events-none absolute inset-0 h-full w-full\"\n                  initial={{ opacity: 0, filter: 'blur(8px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0)' }}\n                  exit={{ opacity: 0, filter: 'blur(8px)' }}\n                >\n                  <motion.rect\n                    x=\"2\"\n                    y=\"2\"\n                    rx=\"var(--radius)\"\n                    width=\"calc(100% - 4px)\"\n                    height=\"calc(100% - 4px)\"\n                    fill=\"none\"\n                    className=\"stroke-destructive\"\n                    strokeWidth=\"3\"\n                    pathLength={1}\n                    strokeDasharray=\"1\"\n                    strokeDashoffset=\"1\"\n                    strokeLinecap=\"round\"\n                    initial={{ strokeDashoffset: 1 }}\n                    animate={{ strokeDashoffset: 0 }}\n                    transition={{\n                      duration: maxDuration,\n                      ease: 'linear',\n                    }}\n                  />\n                </motion.svg>\n              )}\n            </AnimatePresence>\n\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              {state === RecorderState.IDLE && (\n                <motion.button\n                  key=\"mic-icon\"\n                  initial={{ opacity: 0, filter: 'blur(8px)' }}\n                  animate={{ opacity: 1, filter: 'blur(0)' }}\n                  exit={{ opacity: 0, filter: 'blur(8px)' }}\n                  onClick={startRecording}\n                  className=\"flex items-center justify-center\"\n                >\n                  <Mic size={28} className=\"text-foreground\" />\n                </motion.button>\n              )}\n\n              {state === RecorderState.RECORDING && (\n                <motion.div\n                  key=\"recording-ui\"\n                  className=\"z-10 flex items-center gap-1.5\"\n                >\n                  {barHeights.map((heights, i) => (\n                    <motion.div\n                      key={i}\n                      animate={{ height: heights }}\n                      transition={{\n                        duration: 1,\n                        repeat: Infinity,\n                        ease: 'linear',\n                        delay: i * 0.08,\n                      }}\n                      style={{ originY: 1 }}\n                      className=\"bg-destructive w-1.5 rounded-lg\"\n                    />\n                  ))}\n                </motion.div>\n              )}\n\n              {(state === RecorderState.REVIEWING ||\n                state === RecorderState.PLAYING) && (\n                <motion.div\n                  key=\"review-ui\"\n                  initial={{ opacity: 0, y: 5 }}\n                  animate={{ opacity: 1, y: 0 }}\n                  exit={{ opacity: 0, y: -5 }}\n                  className=\"z-10 flex items-center gap-2\"\n                >\n                  <motion.button\n                    onClick={\n                      state === RecorderState.PLAYING\n                        ? stopPlayback\n                        : startPlayback\n                    }\n                    className={`flex h-10 w-10 items-center justify-center rounded-lg transition-colors ${\n                      state === RecorderState.PLAYING\n                        ? 'text-destructive'\n                        : 'text-foreground'\n                    }`}\n                  >\n                    {state === RecorderState.PLAYING ? (\n                      <Square size={22} fill=\"currentColor\" />\n                    ) : (\n                      <Play size={22} fill=\"currentColor\" />\n                    )}\n                  </motion.button>\n\n                  <span className=\"text-foreground flex items-center justify-center gap-0.5 text-[20px] font-bold tabular-nums transition-colors\">\n                    <AnimatedNumber\n                      value={\n                        state === RecorderState.PLAYING\n                          ? playbackTime\n                          : duration\n                      }\n                    />\n                    <motion.span layout>s</motion.span>\n                  </span>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\">\n            {(state === RecorderState.RECORDING ||\n              state === RecorderState.REVIEWING ||\n              state === RecorderState.PLAYING) && (\n              <motion.button\n                initial={{ opacity: 0, filter: 'blur(4px)', x: -95 }}\n                animate={{ opacity: 1, filter: 'blur(0)', x: 0 }}\n                exit={{ opacity: 0, filter: 'blur(4px)', x: -95 }}\n                className={actionBtnClass}\n              >\n                <AnimatePresence mode=\"popLayout\">\n                  <motion.div\n                    onClick={\n                      state === RecorderState.RECORDING\n                        ? stopRecording\n                        : state === RecorderState.PLAYING\n                          ? startRecording\n                          : handleSend\n                    }\n                  >\n                    {state === RecorderState.RECORDING && (\n                      <FaCheck size={26} className=\"text-muted-foreground\" />\n                    )}\n\n                    {(state === RecorderState.REVIEWING ||\n                      state === RecorderState.PLAYING) && (\n                      <RiSendPlaneFill size={26} className=\"text-foreground\" />\n                    )}\n                  </motion.div>\n                </AnimatePresence>\n              </motion.button>\n            )}\n          </AnimatePresence>\n        </MotionConfig>\n      </div>\n    </div>\n  );\n};\n\n\n\ninterface AnimatedNumberProps {\n  value: number;\n  className?: string;\n}\n\nconst digitVariants = {\n  initial: (dir: number) => ({\n    y: dir > 0 ? 8 : -8,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n  animate: {\n    y: 0,\n    opacity: 1,\n    scale: 1,\n    z: 10,\n    filter: 'blur(0px)',\n  },\n  exit: (dir: number) => ({\n    y: dir > 0 ? -8 : 8,\n    opacity: 0,\n    scale: 0.5,\n    z: 0,\n    filter: 'blur(2px)',\n  }),\n};\n\nexport function AnimatedNumber({ value, className }: AnimatedNumberProps) {\n  const [direction, setDirection] = React.useState(0);\n  const prevValueRef = React.useRef(value);\n\n  React.useEffect(() => {\n    const prev = prevValueRef.current;\n    if (value > prev) setDirection(1);\n    else if (value < prev) setDirection(-1);\n    prevValueRef.current = value;\n  }, [value]);\n\n  const digits = value.toString().split('');\n\n  const [prevDigits, setPrevDigits] = React.useState<string[]>([]);\n  const [prevTicks, setPrevTicks] = React.useState<number[]>([]);\n\n  const len = digits.length;\n  const lenDiff = len - prevDigits.length;\n\n  const nextTicks = digits.map((digit, i) => {\n    const prevI = i - lenDiff;\n    const prevDigit = prevI >= 0 ? prevDigits[prevI] : undefined;\n    const prevTick = prevI >= 0 ? prevTicks[prevI] : 0;\n    return digit !== prevDigit ? (prevTick ?? 0) + 1 : (prevTick ?? 0);\n  });\n\n  if (prevDigits.join(\"\") !== digits.join(\"\")) {\n    setPrevTicks(nextTicks);\n    setPrevDigits(digits);\n  }\n\n  return (\n    <div\n      className={`relative flex items-center justify-center gap-1 tabular-nums ${className ?? ''}`}\n    >\n      {digits.map((digit, index) => (\n        <div key={`${index}-${len}`} className=\"relative w-3\">\n          <AnimatePresence mode=\"popLayout\" initial={false} custom={direction}>\n            <motion.span\n              layout\n              key={nextTicks[index]}\n              custom={direction}\n              variants={digitVariants}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              transition={{\n                type: 'spring',\n                stiffness: 200,\n                damping: 16,\n                mass: 1.2,\n              }}\n              className=\"absolute inset-0 flex items-center justify-center\"\n            >\n              {digit}\n            </motion.span>\n          </AnimatePresence>\n        </div>\n      ))}\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "voice-transcribe",
      "type": "registry:component",
      "title": "Voice Transcribe",
      "description": "Convert speech into text instantly with smooth, responsive Voice Transcribe.",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/voice-transcribe.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  TbMessageFilled,\n  TbPlayerPauseFilled,\n  TbPlayerPlayFilled,\n} from 'react-icons/tb';\n\ninterface VoiceMessageProps {\n  duration: number;\n  transcription: string;\n  waveformHeights?: number[];\n  className?: string;\n}\n\nconst DEFAULT_WAVEFORM = [\n  8, 12, 16, 12, 10, 18, 24, 16, 14, 20, 12, 16, 22, 18, 14, 10, 16, 24, 18, 14,\n  12, 10, 8, 12, 16, 14, 10,\n];\n\nexport const TranscribeVoiceMessage: React.FC<VoiceMessageProps> = ({\n  duration: initialDuration,\n  transcription,\n  waveformHeights = DEFAULT_WAVEFORM,\n  className = '',\n}) => {\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [currentTime, setCurrentTime] = useState(0);\n  const [showTranscription, setShowTranscription] = useState(false);\n  useEffect(() => {\n    if (!isPlaying) return;\n\n    let frameId: number;\n    const startTime = performance.now() - currentTime * 1000;\n\n    const tick = (now: number) => {\n      const nextTime = (now - startTime) / 1000;\n      if (nextTime >= initialDuration) {\n        setCurrentTime(initialDuration);\n        setIsPlaying(false);\n      } else {\n        setCurrentTime(nextTime);\n        frameId = requestAnimationFrame(tick);\n      }\n    };\n\n    frameId = requestAnimationFrame(tick);\n\n    return () => cancelAnimationFrame(frameId);\n  }, [isPlaying, initialDuration, currentTime]);\n\n  const handlePlayToggle = () => {\n    if (currentTime >= initialDuration) setCurrentTime(0);\n    setIsPlaying(!isPlaying);\n  };\n\n  const remainingTime = Math.ceil(initialDuration - currentTime);\n  const progressPercent = currentTime / initialDuration;\n\n  const words = transcription.split(' ');\n  const totalChars = transcription.length;\n  const isDone = currentTime >= initialDuration;\n\n  // When done, reveal everything avoiding any tricky zone calculations\n  const revealedCount = isDone\n    ? totalChars\n    : Math.floor(progressPercent * totalChars);\n\n  return (\n    <div\n      className={`flex w-full flex-col items-center justify-center p-2 antialiased select-none sm:p-4 ${className}`}\n    >\n      <div className=\"relative flex w-full max-w-fit items-center gap-2 sm:gap-4\">\n        {/* Transcription Icon Toggle */}\n        <button\n          title=\"Transcription\"\n          onClick={() => setShowTranscription(!showTranscription)}\n          className={`flex h-11 w-11 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300 sm:h-16 sm:w-16 ${showTranscription\n              ? 'border-neutral-200 bg-transparent text-neutral-900 dark:border-white/20 dark:text-white'\n              : 'border-transparent bg-neutral-100 text-neutral-900 hover:bg-neutral-200 dark:bg-neutral-800 dark:text-white dark:hover:bg-neutral-700'\n            }`}\n        >\n          <TbMessageFilled size={22} className=\"sm:hidden\" />\n          <TbMessageFilled size={28} className=\"hidden sm:block\" />\n        </button>\n\n        {/* Main Player Pill */}\n        <div className=\"flex items-center gap-2 rounded-full border border-black/5 bg-neutral-100 px-3 py-2 shadow-sm transition-colors sm:gap-3 sm:px-4 sm:py-3 dark:border-white/5 dark:bg-neutral-800\">\n          <button\n            onClick={handlePlayToggle}\n            className=\"flex h-7 w-7 items-center justify-center text-neutral-900 transition-all active:scale-90 sm:h-8 sm:w-8 dark:text-white\"\n          >\n            {isPlaying ? (\n              <motion.div\n                initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                transition={{ duration: 0.3 }}\n              >\n                <TbPlayerPauseFilled size={24} className=\"sm:w-5.5\" />\n              </motion.div>\n            ) : (\n              <motion.div\n                initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                transition={{ duration: 0.3 }}\n              >\n                <TbPlayerPlayFilled\n                  size={24}\n                  className=\"ml-0.5 sm:ml-1 sm:w-5.5\"\n                />\n              </motion.div>\n            )}\n          </button>\n\n          {/* Waveform */}\n          <div className=\"relative flex h-8 items-center gap-0.5 sm:h-10 sm:gap-[3.5px]\">\n            {/* Background (Unplayed) */}\n            {waveformHeights.map((h, i) => (\n              <motion.div\n                key={`bg-${i}`}\n                initial={{ height: h * 0.7 }}\n                animate={{ height: h }}\n                transition={{ duration: 0.1 }}\n                className=\"w-0.5 rounded-full bg-neutral-400 sm:w-1 dark:bg-neutral-700\"\n              />\n            ))}\n\n            {/* Foreground (Played) with continuous masking */}\n            <div\n              className=\"absolute inset-0 flex items-center gap-0.5 sm:gap-[3.5px]\"\n              style={{\n                clipPath: `inset(0 ${100 - progressPercent * 100}% 0 0)`,\n              }}\n            >\n              {waveformHeights.map((h, i) => (\n                <motion.div\n                  key={`fg-${i}`}\n                  initial={{ height: h * 0.7 }}\n                  animate={{ height: h }}\n                  transition={{ duration: 0.1 }}\n                  className=\"w-0.5 rounded-full bg-neutral-900 sm:w-1 dark:bg-white\"\n                />\n              ))}\n            </div>\n          </div>\n\n          {/* Timer */}\n          <div className=\"relative flex h-4 w-5 items-center justify-end text-xs font-bold text-neutral-500 sm:h-5 sm:w-[26px] sm:text-base dark:text-neutral-400\">\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              <motion.span\n                key={remainingTime}\n                initial={{ y: -15, scale: 0, filter: 'blur(8px)', opacity: 0 }}\n                animate={{ y: 0, scale: 1, filter: 'blur(0px)', opacity: 1 }}\n                exit={{ y: 15, scale: 0, filter: 'blur(8px)', opacity: 0 }}\n                transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n                className=\"inline-block tabular-nums\"\n              >\n                {remainingTime}\n              </motion.span>\n            </AnimatePresence>\n            <span>s</span>\n          </div>\n        </div>\n\n        {/* Transcription Bubble */}\n        <AnimatePresence>\n          {showTranscription && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.85, y: 8, filter: 'blur(8px)' }}\n              animate={{ opacity: 1, scale: 1, y: 0, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.85, y: 8, filter: 'blur(8px)' }}\n              transition={{ type: 'spring', damping: 25, stiffness: 400 }}\n              className=\"pointer-events-none absolute bottom-[170%] left-0 z-20 origin-bottom-left\"\n            >\n              <div className=\"relative\">\n                <motion.div\n                  layout\n                  transition={{ type: 'spring', damping: 32, stiffness: 300 }}\n                  className=\"w-[calc(100vw-5rem)] max-w-60 overflow-hidden rounded-2xl border border-neutral-200 bg-neutral-50 px-4 py-4 shadow-xl sm:max-w-70 sm:rounded-[28px] sm:px-6 sm:py-5 dark:border-white/10 dark:bg-neutral-800\"\n                >\n                  <p className=\"flex flex-wrap text-sm leading-relaxed font-bold tracking-tight wrap-break-word text-neutral-900 sm:text-lg dark:text-white\">\n                    {(() => {\n                      let globalIndex = 0;\n                      return words.map((word, wIdx) => {\n                        const wordChars = word.split('');\n                        const wordNode = (\n                          <span\n                            key={wIdx}\n                            className=\"mr-[0.25em] inline-flex whitespace-nowrap\"\n                          >\n                            {wordChars.map((char, cIdx) => {\n                              const isRevealed = globalIndex < revealedCount;\n                              globalIndex++;\n                              return (\n                                <motion.span\n                                  key={cIdx}\n                                  initial={false}\n                                  animate={{\n                                    opacity: isRevealed ? 1 : 0,\n                                  }}\n                                  transition={{\n                                    ease: 'easeOut',\n                                    duration: 0.1,\n                                  }}\n                                  className=\"inline-block\"\n                                >\n                                  {char}\n                                </motion.span>\n                              );\n                            })}\n                          </span>\n                        );\n                        // Increment for the space between words\n                        globalIndex++;\n                        return wordNode;\n                      });\n                    })()}\n                  </p>\n                </motion.div>\n\n                {/* Speech Bubble Connectors */}\n                <div className=\"absolute -bottom-9 left-4 flex flex-col items-center gap-1.5\">\n                  <div className=\"ml-3 h-3.5 w-3.5 rounded-full bg-neutral-50 shadow-md sm:h-4 sm:w-4 dark:bg-neutral-800\" />\n                  <div className=\"h-1.5 w-1.5 rounded-full bg-neutral-50 shadow-md sm:h-2 sm:w-2 dark:bg-neutral-800\" />\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "voice-transcribe-base",
      "type": "registry:component",
      "title": "Voice Transcribe (base)",
      "description": "Theme-ready base variant of Convert speech into text instantly with smooth, responsive Voice Transcribe..",
      "dependencies": [
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/voice-transcribe.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n  TbMessageFilled,\n  TbPlayerPauseFilled,\n  TbPlayerPlayFilled,\n} from 'react-icons/tb';\n\ninterface VoiceMessageProps {\n  duration: number;\n  transcription: string;\n  waveformHeights?: number[];\n  className?: string;\n}\n\nconst DEFAULT_WAVEFORM = [\n  8, 12, 16, 12, 10, 18, 24, 16, 14, 20, 12, 16, 22, 18, 14, 10, 16, 24, 18, 14,\n  12, 10, 8, 12, 16, 14, 10,\n];\n\nexport const TranscribeVoiceMessage: React.FC<VoiceMessageProps> = ({\n  duration: initialDuration,\n  transcription,\n  waveformHeights = DEFAULT_WAVEFORM,\n  className = '',\n}) => {\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [currentTime, setCurrentTime] = useState(0);\n  const [showTranscription, setShowTranscription] = useState(false);\n\n  useEffect(() => {\n    if (!isPlaying) return;\n\n    let frameId: number;\n    const startTime = performance.now() - currentTime * 1000;\n\n    const tick = (now: number) => {\n      const nextTime = (now - startTime) / 1000;\n      if (nextTime >= initialDuration) {\n        setCurrentTime(initialDuration);\n        setIsPlaying(false);\n      } else {\n        setCurrentTime(nextTime);\n        frameId = requestAnimationFrame(tick);\n      }\n    };\n\n    frameId = requestAnimationFrame(tick);\n\n    return () => cancelAnimationFrame(frameId);\n  }, [isPlaying, initialDuration, currentTime]);\n\n  const handlePlayToggle = () => {\n    if (currentTime >= initialDuration) setCurrentTime(0);\n    setIsPlaying(!isPlaying);\n  };\n\n  const remainingTime = Math.ceil(initialDuration - currentTime);\n  const progressPercent = currentTime / initialDuration;\n\n  const words = transcription.split(' ');\n  const totalChars = transcription.length;\n  const isDone = currentTime >= initialDuration;\n\n  const revealedCount = isDone\n    ? totalChars\n    : Math.floor(progressPercent * totalChars);\n\n  return (\n    <div\n      className={`theme-injected flex w-full flex-col items-center justify-center p-2 antialiased select-none sm:p-4 ${className}`}\n    >\n      <div className=\"relative flex w-full max-w-fit items-center gap-2 sm:gap-4\">\n        <button\n          title=\"Transcription\"\n          onClick={() => setShowTranscription(!showTranscription)}\n          className={`flex h-11 w-11 shrink-0 items-center justify-center rounded-lg border-2 transition-all duration-300 sm:h-16 sm:w-16 ${\n            showTranscription\n              ? 'border-border text-foreground bg-transparent'\n              : 'bg-muted text-foreground hover:bg-accent border-transparent'\n          }`}\n        >\n          <TbMessageFilled size={22} className=\"sm:hidden\" />\n          <TbMessageFilled size={28} className=\"hidden sm:block\" />\n        </button>\n\n        <div className=\"border-border bg-muted flex items-center gap-2 rounded-lg border px-3 py-2 shadow-sm transition-colors sm:gap-3 sm:px-4 sm:py-3\">\n          <button\n            onClick={handlePlayToggle}\n            className=\"text-foreground flex h-7 w-7 items-center justify-center transition-all active:scale-90 sm:h-8 sm:w-8\"\n          >\n            {isPlaying ? (\n              <motion.div\n                initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                transition={{ duration: 0.3 }}\n              >\n                <TbPlayerPauseFilled size={24} className=\"sm:w-5.5\" />\n              </motion.div>\n            ) : (\n              <motion.div\n                initial={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                exit={{ opacity: 0, scale: 0, filter: 'blur(4px)' }}\n                transition={{ duration: 0.3 }}\n              >\n                <TbPlayerPlayFilled\n                  size={24}\n                  className=\"ml-0.5 sm:ml-1 sm:w-5.5\"\n                />\n              </motion.div>\n            )}\n          </button>\n\n          <div className=\"relative flex h-8 items-center gap-0.5 sm:h-10 sm:gap-[3.5px]\">\n            {waveformHeights.map((h, i) => (\n              <motion.div\n                key={`bg-${i}`}\n                initial={{ height: h * 0.7 }}\n                animate={{ height: h }}\n                transition={{ duration: 0.1 }}\n                className=\"bg-muted-foreground/50 w-0.5 rounded-lg sm:w-1\"\n              />\n            ))}\n\n            <div\n              className=\"absolute inset-0 flex items-center gap-0.5 sm:gap-[3.5px]\"\n              style={{\n                clipPath: `inset(0 ${100 - progressPercent * 100}% 0 0)`,\n              }}\n            >\n              {waveformHeights.map((h, i) => (\n                <motion.div\n                  key={`fg-${i}`}\n                  initial={{ height: h * 0.7 }}\n                  animate={{ height: h }}\n                  transition={{ duration: 0.1 }}\n                  className=\"bg-foreground w-0.5 rounded-lg sm:w-1\"\n                />\n              ))}\n            </div>\n          </div>\n\n          <div className=\"text-muted-foreground relative flex h-4 w-5 items-center justify-end text-xs font-bold sm:h-5 sm:w-[26px] sm:text-base\">\n            <AnimatePresence mode=\"popLayout\" initial={false}>\n              <motion.span\n                key={remainingTime}\n                initial={{ y: -15, scale: 0, filter: 'blur(8px)', opacity: 0 }}\n                animate={{ y: 0, scale: 1, filter: 'blur(0px)', opacity: 1 }}\n                exit={{ y: 15, scale: 0, filter: 'blur(8px)', opacity: 0 }}\n                transition={{ type: 'spring', bounce: 0.3, duration: 0.7 }}\n                className=\"inline-block tabular-nums\"\n              >\n                {remainingTime}\n              </motion.span>\n            </AnimatePresence>\n            <span>s</span>\n          </div>\n        </div>\n\n        <AnimatePresence>\n          {showTranscription && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.85, y: 8, filter: 'blur(8px)' }}\n              animate={{ opacity: 1, scale: 1, y: 0, filter: 'blur(0px)' }}\n              exit={{ opacity: 0, scale: 0.85, y: 8, filter: 'blur(8px)' }}\n              transition={{ type: 'spring', damping: 25, stiffness: 400 }}\n              className=\"pointer-events-none absolute bottom-[170%] left-0 z-20 origin-bottom-left\"\n            >\n              <div className=\"relative\">\n                <motion.div\n                  layout\n                  transition={{ type: 'spring', damping: 32, stiffness: 300 }}\n                  className=\"border-border bg-card w-[calc(100vw-5rem)] max-w-60 overflow-hidden rounded-lg border px-4 py-4 shadow-xl sm:max-w-70 sm:px-6 sm:py-5\"\n                >\n                  <p className=\"text-foreground flex flex-wrap text-sm leading-relaxed font-bold tracking-tight wrap-break-word sm:text-lg\">\n                    {(() => {\n                      let globalIndex = 0;\n                      return words.map((word, wIdx) => {\n                        const wordChars = word.split('');\n                        const wordNode = (\n                          <span\n                            key={wIdx}\n                            className=\"mr-[0.25em] inline-flex whitespace-nowrap\"\n                          >\n                            {wordChars.map((char, cIdx) => {\n                              const isRevealed = globalIndex < revealedCount;\n                              globalIndex++;\n                              return (\n                                <motion.span\n                                  key={cIdx}\n                                  initial={false}\n                                  animate={{\n                                    opacity: isRevealed ? 1 : 0,\n                                  }}\n                                  transition={{\n                                    ease: 'easeOut',\n                                    duration: 0.1,\n                                  }}\n                                  className=\"inline-block\"\n                                >\n                                  {char}\n                                </motion.span>\n                              );\n                            })}\n                          </span>\n                        );\n                        globalIndex++;\n                        return wordNode;\n                      });\n                    })()}\n                  </p>\n                </motion.div>\n\n                <div className=\"absolute -bottom-9 left-4 flex flex-col items-center gap-1.5\">\n                  <div className=\"bg-card ml-3 h-3.5 w-3.5 rounded-lg shadow-md sm:h-4 sm:w-4\" />\n                  <div className=\"bg-card h-1.5 w-1.5 rounded-lg shadow-md sm:h-2 sm:w-2\" />\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "waveform-scrub",
      "type": "registry:component",
      "title": "Waveform Scrub",
      "description": "Interactive waveform scrubber enabling precise audio navigation and playback control.",
      "dependencies": [
        "framer-motion",
        "next-themes",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/waveform-scrub.tsx",
          "type": "registry:component",
          "content": "\"use client\";\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  useMotionValueEvent,\n  AnimatePresence,\n} from 'framer-motion';\nimport {\n  TbPlayerPauseFilled,\n  TbPlayerPlayFilled,\n  TbRotateClockwise2,\n} from 'react-icons/tb';\nimport { useTheme } from 'next-themes';\n\ninterface WaveformScrubProps {\n  duration?: number;\n  fileName?: string;\n  waveformHeights?: number[];\n}\n\nconst DEFAULT_WAVEFORM = [\n  4, 7, 9, 6, 11, 14, 12, 8, 5, 10, 15, 13, 11, 9, 6, 10, 12, 9, 7, 5, 8, 12,\n  10, 7, 6, 9, 13, 11, 8, 6, 5, 11, 8, 6, 5, 11, 8, 6, 5, 8, 5, 10, 15, 13, 11,\n  9,\n];\n\nexport const WaveformScrub: React.FC<WaveformScrubProps> = ({\n  duration = 30,\n  fileName = 'Mom.mp3',\n  waveformHeights = DEFAULT_WAVEFORM,\n}) => {\n  const [currentTime, setCurrentTime] = useState(0);\n  const [isPlaying, setIsPlaying] = useState(false);\n  const { theme } = useTheme();\n  const [containerWidth, setContainerWidth] = useState(0);\n\n  const waveformRef = useRef<HTMLDivElement>(null);\n  const x = useMotionValue(0);\n  const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n  const isDark = theme === 'dark';\n\n  const isFinished = currentTime >= duration;\n\n  useEffect(() => {\n    const updateWidth = () => {\n      if (waveformRef.current) {\n        const newWidth = waveformRef.current.offsetWidth;\n        setContainerWidth(newWidth);\n        x.set((currentTime / duration) * newWidth);\n      }\n    };\n\n    updateWidth();\n    window.addEventListener('resize', updateWidth);\n    return () => window.removeEventListener('resize', updateWidth);\n  }, [duration, currentTime, x]);\n\n  useEffect(() => {\n    if (isPlaying && currentTime < duration) {\n      timerRef.current = setInterval(() => {\n        setCurrentTime((prev) => {\n          const next = Math.min(prev + 0.1, duration);\n          x.set((next / duration) * containerWidth);\n          if (next >= duration) setIsPlaying(false);\n          return next;\n        });\n      }, 100);\n    } else {\n      if (timerRef.current) clearInterval(timerRef.current);\n    }\n    return () => {\n      if (timerRef.current) clearInterval(timerRef.current);\n    };\n  }, [isPlaying, duration, x, containerWidth, currentTime]);\n\n  useMotionValueEvent(x, 'change', (latest) => {\n    if (!isPlaying && containerWidth > 0) {\n      const progress = latest / containerWidth;\n      setCurrentTime(progress * duration);\n    }\n  });\n\n  const activeProgress = useTransform(\n    x,\n    [0, containerWidth || 1],\n    ['0%', '100%'],\n  );\n  const displayTime = Math.round(duration - currentTime);\n\n  const handleTogglePlay = () => {\n    if (isFinished) {\n      setCurrentTime(0);\n      x.set(0);\n      setIsPlaying(true);\n    } else {\n      setIsPlaying(!isPlaying);\n    }\n  };\n\n  return (\n    <div className=\"w-full px-4\">\n      <div className=\"flex min-h-full flex-col items-center justify-center bg-transparent py-10 font-sans antialiased\">\n        <div className=\"w-full max-w-110 rounded-[24px] bg-neutral-100 px-2 pt-4 pb-3 shadow-sm transition-colors duration-300 dark:bg-neutral-900\">\n          <div className=\"mb-4 flex items-center justify-between px-2 pr-4\">\n            <div className=\"flex items-center gap-2 overflow-hidden\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                <motion.button\n                  key={isFinished ? 'reset' : isPlaying ? 'pause' : 'play'}\n                  initial={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n                  transition={{\n                    type: 'spring',\n                    duration: 0.3,\n                    bounce: 0,\n                  }}\n                  onClick={handleTogglePlay}\n                  className=\"shrink-0 cursor-pointer text-neutral-500 dark:text-neutral-100 z-20\"\n                >\n                  {isFinished ? (\n                    <TbRotateClockwise2 size={22} />\n                  ) : isPlaying ? (\n                    <TbPlayerPauseFilled size={22} />\n                  ) : (\n                    <TbPlayerPlayFilled size={22} />\n                  )}\n                </motion.button>\n              </AnimatePresence>\n              <span className=\"truncate text-[17px] font-normal tracking-tight text-neutral-500 transition-colors sm:text-[19px] dark:text-neutral-100\">\n                {fileName}\n              </span>\n            </div>\n            <span className=\"shrink-0 text-[18px] font-semibold text-neutral-500 tabular-nums transition-colors sm:text-[20px] dark:text-neutral-100\">\n              {displayTime}s\n            </span>\n          </div>\n\n          <div className=\"relative flex h-17 items-center justify-center rounded-3xl border-[1.6px] border-[#fefefe]/70 bg-[#fefefe] shadow-[inset_0_1px_4px_rgba(0,0,0,0.02)] dark:border-[#0A0A0A]/70 dark:bg-neutral-800\">\n            <motion.div\n              style={{\n                width: activeProgress,\n                backgroundImage: `linear-gradient(-45deg, ${isDark ? '#FFF' : '#000'} 25%, transparent 25%, transparent 50%, ${isDark ? '#FFF' : '#000'} 50%, ${isDark ? '#FFF' : '#000'} 75%, transparent 75%, transparent)`,\n                backgroundSize: '4px 4px',\n              }}\n              animate={{\n                backgroundPositionX: ['0px', '4px'],\n              }}\n              transition={{\n                repeat: Infinity,\n                duration: 0.5,\n                ease: 'linear',\n              }}\n              className=\"pointer-events-none absolute inset-y-0 left-0 rounded-l-3xl opacity-[0.04] transition-opacity dark:opacity-[0.1]\"\n            />\n\n            <div ref={waveformRef} className=\"relative mx-2 h-7 w-full\">\n              <div className=\"absolute inset-0 flex w-full items-center justify-between\">\n                {waveformHeights.map((h, i) => (\n                  <div\n                    key={i}\n                    className=\"w-1 shrink-0 rounded-full bg-neutral-200 transition-colors sm:w-0.75 dark:bg-neutral-400\"\n                    style={{ height: h * 1.6 }}\n                  />\n                ))}\n              </div>\n\n              <motion.div\n                style={{ width: activeProgress }}\n                className=\"pointer-events-none absolute inset-y-0 left-0 z-10 overflow-hidden\"\n              >\n                <div\n                  className=\"flex h-full items-center justify-between\"\n                  style={{ width: containerWidth }}\n                >\n                  {waveformHeights.map((h, i) => (\n                    <div\n                      key={i}\n                      className=\"w-1 shrink-0 rounded-full bg-neutral-800 transition-colors sm:w-0.75 dark:bg-neutral-100\"\n                      style={{ height: h * 1.6 }}\n                    />\n                  ))}\n                </div>\n              </motion.div>\n\n              <motion.div\n                drag=\"x\"\n                dragConstraints={{ left: 0, right: containerWidth }}\n                dragElastic={0}\n                dragMomentum={false}\n                onDragStart={() => setIsPlaying(false)}\n                style={{ x, left: -10 }}\n                className=\"absolute top-full z-10 flex h-40 -translate-y-[85%] cursor-grab flex-col items-center active:cursor-grabbing\"\n              >\n                <div\n                  className=\"h-4.5 w-5.5 bg-[#1C1C1E] shadow-[0_4px_20px_rgba(0,0,0,0.3)] transition-colors dark:bg-white\"\n                  style={{\n                    clipPath: `polygon(15% 0%, 85% 0%, 100% 20%, 100% 60%, 60% 100%, 40% 100%, 0% 60%, 0% 20%)`,\n                  }}\n                />\n                <div className=\"w-1 flex-1 rounded-b-full bg-[#1C1C1E] shadow-md transition-colors dark:bg-white\" />\n              </motion.div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "waveform-scrub-base",
      "type": "registry:component",
      "title": "Waveform Scrub (base)",
      "description": "Theme-ready base variant of Interactive waveform scrubber enabling precise audio navigation and playback control..",
      "dependencies": [
        "framer-motion",
        "next-themes",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/waveform-scrub.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  useMotionValueEvent,\n  AnimatePresence,\n} from 'framer-motion';\nimport {\n  TbPlayerPauseFilled,\n  TbPlayerPlayFilled,\n  TbRotateClockwise2,\n} from 'react-icons/tb';\nimport { useTheme } from 'next-themes';\n\ninterface WaveformScrubProps {\n  duration?: number;\n  fileName?: string;\n  waveformHeights?: number[];\n}\n\nconst DEFAULT_WAVEFORM = [\n  4, 7, 9, 6, 11, 14, 12, 8, 5, 10, 15, 13, 11, 9, 6, 10, 12, 9, 7, 5, 8, 12,\n  10, 7, 6, 9, 13, 11, 8, 6, 5, 11, 8, 6, 5, 11, 8, 6, 5, 8, 5, 10, 15, 13, 11,\n  9,\n];\n\nexport const WaveformScrub: React.FC<WaveformScrubProps> = ({\n  duration = 30,\n  fileName = 'Mom.mp3',\n  waveformHeights = DEFAULT_WAVEFORM,\n}) => {\n  const [currentTime, setCurrentTime] = useState(0);\n  const [isPlaying, setIsPlaying] = useState(false);\n  const { theme } = useTheme();\n  const [containerWidth, setContainerWidth] = useState(0);\n\n  const waveformRef = useRef<HTMLDivElement>(null);\n  const x = useMotionValue(0);\n  const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n  const isDark = theme === 'dark';\n\n  const isFinished = currentTime >= duration;\n\n  useEffect(() => {\n    const updateWidth = () => {\n      if (waveformRef.current) {\n        const newWidth = waveformRef.current.offsetWidth;\n        setContainerWidth(newWidth);\n        x.set((currentTime / duration) * newWidth);\n      }\n    };\n\n    updateWidth();\n    window.addEventListener('resize', updateWidth);\n    return () => window.removeEventListener('resize', updateWidth);\n  }, [duration, currentTime, x]);\n\n  useEffect(() => {\n    if (isPlaying && currentTime < duration) {\n      timerRef.current = setInterval(() => {\n        setCurrentTime((prev) => {\n          const next = Math.min(prev + 0.1, duration);\n          x.set((next / duration) * containerWidth);\n          if (next >= duration) setIsPlaying(false);\n          return next;\n        });\n      }, 100);\n    } else {\n      if (timerRef.current) clearInterval(timerRef.current);\n    }\n    return () => {\n      if (timerRef.current) clearInterval(timerRef.current);\n    };\n  }, [isPlaying, duration, x, containerWidth, currentTime]);\n\n  useMotionValueEvent(x, 'change', (latest) => {\n    if (!isPlaying && containerWidth > 0) {\n      const progress = latest / containerWidth;\n      setCurrentTime(progress * duration);\n    }\n  });\n\n  const activeProgress = useTransform(\n    x,\n    [0, containerWidth || 1],\n    ['0%', '100%'],\n  );\n  const displayTime = Math.round(duration - currentTime);\n\n  const handleTogglePlay = () => {\n    if (isFinished) {\n      setCurrentTime(0);\n      x.set(0);\n      setIsPlaying(true);\n    } else {\n      setIsPlaying(!isPlaying);\n    }\n  };\n\n  return (\n    <div className=\"theme-injected w-full px-4\">\n      <div className=\" flex min-h-full flex-col items-center justify-center py-10 font-sans antialiased\">\n        <div className=\"bg-muted w-full max-w-110 rounded-lg px-2 pt-4 pb-3 shadow-sm transition-colors duration-300\">\n          <div className=\"mb-4 flex items-center justify-between px-2 pr-4\">\n            <div className=\"flex items-center gap-2 overflow-hidden\">\n              <AnimatePresence mode=\"popLayout\" initial={false}>\n                <motion.button\n                  key={isFinished ? 'reset' : isPlaying ? 'pause' : 'play'}\n                  initial={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n                  animate={{ opacity: 1, scale: 1, filter: 'blur(0px)' }}\n                  exit={{ opacity: 0, scale: 0.25, filter: 'blur(4px)' }}\n                  transition={{\n                    type: 'spring',\n                    duration: 0.3,\n                    bounce: 0,\n                  }}\n                  onClick={handleTogglePlay}\n                  className=\"text-muted-foreground z-20 shrink-0 cursor-pointer\"\n                >\n                  {isFinished ? (\n                    <TbRotateClockwise2 size={22} />\n                  ) : isPlaying ? (\n                    <TbPlayerPauseFilled size={22} />\n                  ) : (\n                    <TbPlayerPlayFilled size={22} />\n                  )}\n                </motion.button>\n              </AnimatePresence>\n              <span className=\"text-muted-foreground truncate text-[17px] font-normal tracking-tight transition-colors sm:text-[19px]\">\n                {fileName}\n              </span>\n            </div>\n            <span className=\"text-muted-foreground shrink-0 text-[18px] font-semibold tabular-nums transition-colors sm:text-[20px]\">\n              {displayTime}s\n            </span>\n          </div>\n\n          <div className=\"border-border bg-background relative flex h-17 items-center justify-center rounded-lg border shadow-[inset_0_1px_4px_hsl(var(--foreground)/0.05)]\">\n            <motion.div\n              style={{\n                width: activeProgress,\n                backgroundImage: `linear-gradient(-45deg, ${isDark ? 'hsl(var(--foreground))' : 'hsl(var(--foreground))'} 25%, transparent 25%, transparent 50%, ${isDark ? 'hsl(var(--foreground))' : 'hsl(var(--foreground))'} 50%, ${isDark ? 'hsl(var(--foreground))' : 'hsl(var(--foreground))'} 75%, transparent 75%, transparent)`,\n                backgroundSize: '4px 4px',\n              }}\n              animate={{\n                backgroundPositionX: ['0px', '4px'],\n              }}\n              transition={{\n                repeat: Infinity,\n                duration: 0.5,\n                ease: 'linear',\n              }}\n              className=\"pointer-events-none absolute inset-y-0 left-0 rounded-l-lg opacity-[0.05]\"\n            />\n\n            <div ref={waveformRef} className=\"relative mx-2 h-7 w-full\">\n              <div className=\"absolute inset-0 flex w-full items-center justify-between\">\n                {waveformHeights.map((h, i) => (\n                  <div\n                    key={i}\n                    className=\"bg-muted-foreground/50 w-1 shrink-0 rounded-lg transition-colors sm:w-0.75\"\n                    style={{ height: h * 1.6 }}\n                  />\n                ))}\n              </div>\n\n              <motion.div\n                style={{ width: activeProgress }}\n                className=\"pointer-events-none absolute inset-y-0 left-0 z-10 overflow-hidden\"\n              >\n                <div\n                  className=\"flex h-full items-center justify-between\"\n                  style={{ width: containerWidth }}\n                >\n                  {waveformHeights.map((h, i) => (\n                    <div\n                      key={i}\n                      className=\"bg-foreground w-1 shrink-0 rounded-lg transition-colors sm:w-0.75\"\n                      style={{ height: h * 1.6 }}\n                    />\n                  ))}\n                </div>\n              </motion.div>\n\n              <motion.div\n                drag=\"x\"\n                dragConstraints={{ left: 0, right: containerWidth }}\n                dragElastic={0}\n                dragMomentum={false}\n                onDragStart={() => setIsPlaying(false)}\n                style={{ x, left: -10 }}\n                className=\"absolute top-full z-10 flex h-40 -translate-y-[85%] cursor-grab flex-col items-center active:cursor-grabbing\"\n              >\n                <div\n                  className=\"bg-foreground h-4.5 w-5.5 shadow-[0_4px_20px_hsl(var(--foreground)/0.3)] transition-colors\"\n                  style={{\n                    clipPath: `polygon(15% 0%, 85% 0%, 100% 20%, 100% 60%, 60% 100%, 40% 100%, 0% 60%, 0% 20%)`,\n                  }}\n                />\n                <div className=\"bg-foreground w-1 flex-1 rounded-b-lg shadow-md transition-colors\" />\n              </motion.div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "weight-widget",
      "type": "registry:component",
      "title": "Weight Widget",
      "description": "A tactile, sliding scale component designed for precise weight input with a premium haptic feel.",
      "dependencies": [
        "motion",
        "next-themes"
      ],
      "files": [
        {
          "path": "components/watermelon/weight-widget.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useEffect, useState, useMemo } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useSpring,\n  useTransform,\n  type PanInfo,\n  MotionValue,\n} from 'motion/react';\nimport { useTheme } from 'next-themes';\n\ninterface WeightWidgetProps {\n  initialValue?: number;\n  min?: number;\n  max?: number;\n  onChange?: (value: number) => void;\n}\n\nexport const WeightWidget: React.FC<WeightWidgetProps> = ({\n  initialValue = 25,\n  min = 0,\n  max = 100,\n  onChange,\n}) => {\n  const { resolvedTheme } = useTheme();\n  const [mounted, setMounted] = useState(false);\n  const pixelsPerUnit = 80;\n\n  const x = useMotionValue(-initialValue * pixelsPerUnit);\n  const springConfig = { bounce: 0.45 };\n  const springX = useSpring(x, springConfig);\n\n  const [displayValue, setDisplayValue] = useState(initialValue);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setMounted(true));\n  }, []);\n\n  useEffect(() => {\n    const unsubscribe = springX.on('change', (latest) => {\n      const val = Math.abs(latest / pixelsPerUnit);\n      const roundedVal = Math.round(val);\n      if (roundedVal !== displayValue) {\n        setDisplayValue(roundedVal);\n        if (onChange) onChange(roundedVal);\n      }\n    });\n    return () => unsubscribe();\n  }, [springX, pixelsPerUnit, onChange, displayValue]);\n\n  const dragStartX = React.useRef(x.get());\n\n  const handlePanStart = () => {\n    dragStartX.current = x.get();\n  };\n\n  const handlePan = (_: any, info: PanInfo) => {\n    // Restrict visual drag movement to roughly one number space so it doesn't run away\n    const maxOffset = pixelsPerUnit;\n    const boundedOffset = Math.max(\n      -maxOffset,\n      Math.min(maxOffset, info.offset.x * 0.6),\n    );\n    const newX = dragStartX.current + boundedOffset;\n\n    const minX = -max * pixelsPerUnit;\n    const maxX = -min * pixelsPerUnit;\n    x.set(Math.max(minX, Math.min(maxX, newX)));\n  };\n\n  const handlePanEnd = (_: any, info: PanInfo) => {\n    const baseValue = Math.round(dragStartX.current / -pixelsPerUnit);\n    let direction = 0;\n\n    if (info.offset.x < -20 || info.velocity.x < -100) direction = 1;\n    else if (info.offset.x > 20 || info.velocity.x > 100) direction = -1;\n\n    const targetValue = Math.max(min, Math.min(max, baseValue + direction));\n    x.set(-targetValue * pixelsPerUnit);\n  };\n\n  const visibleRange = useMemo(() => {\n    const items = [];\n    const buffer = 5;\n    for (\n      let i = Math.max(min, displayValue - buffer);\n      i <= Math.min(max, displayValue + buffer);\n      i += 0.5\n    ) {\n      items.push(i);\n    }\n    return items;\n  }, [min, max, displayValue]);\n\n  if (!mounted) return null;\n\n  const isDark = resolvedTheme === 'dark';\n\n  return (\n    <div className=\"relative flex h-[220px] w-[220px] touch-none flex-col items-center overflow-hidden rounded-[28px] border-2 border-[#F0F0F0] bg-white font-sans shadow-lg transition-colors duration-300 select-none sm:h-[260px] sm:w-[260px] sm:rounded-[36px] dark:border-[#1E1E21] dark:bg-[#121214]\">\n      <div className=\"mt-5 text-base font-semibold tracking-wide text-[#94A3B8] capitalize transition-colors sm:mt-6 sm:text-xl dark:text-[#475569]\">\n        Weight\n      </div>\n\n      <div className=\"relative flex w-full flex-1 items-start justify-center\">\n        {/* Sliding Numbers Layer */}\n        <motion.div\n          onPanStart={handlePanStart}\n          onPan={handlePan}\n          onPanEnd={handlePanEnd}\n          className=\"absolute flex h-full w-full cursor-grab items-start active:cursor-grabbing\"\n          style={{ x: springX, left: '50%' }}\n        >\n          {visibleRange.map((i) => (\n            <DialItem\n              key={i}\n              value={i}\n              pixelsPerUnit={pixelsPerUnit}\n              scrollX={springX}\n              isDark={isDark}\n            />\n          ))}\n        </motion.div>\n\n        {/* Static Indicator */}\n        <div className=\"pointer-events-none absolute bottom-0 z-20 mb-1 flex flex-col items-center sm:mb-0\">\n          <div className=\"mb-1.5 h-[5px] w-[5px] rounded-full bg-black transition-colors sm:h-[6.5px] sm:w-[6.5px] dark:bg-white\" />\n          <svg\n            className=\"h-6 w-2 text-black transition-colors sm:h-9 sm:w-[10px] dark:text-white\"\n            viewBox=\"0 0 10 36\"\n            fill=\"none\"\n            preserveAspectRatio=\"none\"\n          >\n            <path\n              d=\"M 5 2 L 9 36 L 1 36 Z\"\n              fill=\"currentColor\"\n              stroke=\"currentColor\"\n              strokeWidth=\"2\"\n              strokeLinejoin=\"round\"\n            />\n          </svg>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst DialItem: React.FC<{\n  value: number;\n  pixelsPerUnit: number;\n  scrollX: MotionValue<number>;\n  isDark: boolean;\n}> = ({ value, pixelsPerUnit, scrollX, isDark }) => {\n  const isHalf = value % 1 !== 0;\n  const itemX = value * pixelsPerUnit;\n  const distance = useTransform(scrollX, (s: number) => Math.abs(s + itemX));\n\n  const opacity = useTransform(\n    distance,\n    [0, pixelsPerUnit * 2, pixelsPerUnit * 3],\n    [1, 0.4, 0],\n  );\n\n  const color = useTransform(\n    distance,\n    [0, pixelsPerUnit],\n    isDark ? ['#F8FAFC', '#334155'] : ['#25262B', '#CBD5E1'],\n  );\n\n  const scale = useTransform(distance, [0, pixelsPerUnit * 2], [1, 0.85]);\n\n  // Use a quadratic curve for true circular appearance instead of linear\n  const yOffset = useTransform(\n    distance,\n    [\n      0,\n      pixelsPerUnit * 0.5,\n      pixelsPerUnit,\n      pixelsPerUnit * 1.5,\n      pixelsPerUnit * 2,\n      pixelsPerUnit * 2.5,\n      pixelsPerUnit * 3,\n    ],\n    [0, 2, 7, 17, 32, 54, 88],\n  );\n\n  const rotate = useTransform(scrollX, (s: number) => {\n    const d = s + itemX;\n    return (d / pixelsPerUnit) * 12;\n  });\n\n  return (\n    <motion.div\n      className=\"absolute top-0 flex flex-col items-center\"\n      style={{\n        left: itemX,\n        x: '-50%',\n        opacity,\n        scale,\n        y: yOffset,\n        rotate,\n        transformOrigin: 'center 140px', // Adjusted for smaller card\n      }}\n    >\n      <motion.span\n        className={`text-[56px] font-bold tracking-tight sm:text-[68px] ${isHalf ? 'invisible' : ''}`}\n        style={{ color }}\n      >\n        {Math.floor(value)}\n      </motion.span>\n\n      <div className=\"mt-2 flex flex-col items-center sm:mt-4\">\n        <div\n          className={`h-5 w-[2.5px] rounded-full transition-colors sm:h-7 sm:w-[3px] ${isDark ? 'bg-[#2D2D30]' : 'bg-[#D6D5E1]'}`}\n        />\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "weight-widget-base",
      "type": "registry:component",
      "title": "Weight Widget (base)",
      "description": "Theme-ready base variant of A tactile, sliding scale component designed for precise weight input with a premium haptic feel..",
      "dependencies": [
        "motion",
        "next-themes"
      ],
      "files": [
        {
          "path": "components/watermelon/weight-widget.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport React, { useEffect, useState, useMemo } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useSpring,\n  useTransform,\n  type PanInfo,\n  MotionValue,\n} from 'motion/react';\nimport { useTheme } from 'next-themes';\n\ninterface WeightWidgetProps {\n  initialValue?: number;\n  min?: number;\n  max?: number;\n  onChange?: (value: number) => void;\n}\n\nexport const WeightWidget: React.FC<WeightWidgetProps> = ({\n  initialValue = 25,\n  min = 0,\n  max = 100,\n  onChange,\n}) => {\n  const { resolvedTheme } = useTheme();\n  const [mounted, setMounted] = useState(false);\n  const pixelsPerUnit = 80;\n\n  const x = useMotionValue(-initialValue * pixelsPerUnit);\n  const springConfig = { bounce: 0.45 };\n  const springX = useSpring(x, springConfig);\n\n  const [displayValue, setDisplayValue] = useState(initialValue);\n\n  useEffect(() => {\n    requestAnimationFrame(() => setMounted(true));\n  }, []);\n\n  useEffect(() => {\n    const unsubscribe = springX.on('change', (latest) => {\n      const val = Math.abs(latest / pixelsPerUnit);\n      const roundedVal = Math.round(val);\n      if (roundedVal !== displayValue) {\n        setDisplayValue(roundedVal);\n        if (onChange) onChange(roundedVal);\n      }\n    });\n    return () => unsubscribe();\n  }, [springX, pixelsPerUnit, onChange, displayValue]);\n\n  const dragStartX = React.useRef(x.get());\n\n  const handlePanStart = () => {\n    dragStartX.current = x.get();\n  };\n\n  const handlePan = (_: any, info: PanInfo) => {\n    const maxOffset = pixelsPerUnit;\n    const boundedOffset = Math.max(\n      -maxOffset,\n      Math.min(maxOffset, info.offset.x * 0.6),\n    );\n    const newX = dragStartX.current + boundedOffset;\n\n    const minX = -max * pixelsPerUnit;\n    const maxX = -min * pixelsPerUnit;\n    x.set(Math.max(minX, Math.min(maxX, newX)));\n  };\n\n  const handlePanEnd = (_: any, info: PanInfo) => {\n    const baseValue = Math.round(dragStartX.current / -pixelsPerUnit);\n    let direction = 0;\n\n    if (info.offset.x < -20 || info.velocity.x < -100) direction = 1;\n    else if (info.offset.x > 20 || info.velocity.x > 100) direction = -1;\n\n    const targetValue = Math.max(min, Math.min(max, baseValue + direction));\n    x.set(-targetValue * pixelsPerUnit);\n  };\n\n  const visibleRange = useMemo(() => {\n    const items = [];\n    const buffer = 5;\n    for (\n      let i = Math.max(min, displayValue - buffer);\n      i <= Math.min(max, displayValue + buffer);\n      i += 0.5\n    ) {\n      items.push(i);\n    }\n    return items;\n  }, [min, max, displayValue]);\n\n  if (!mounted) return null;\n\n  const isDark = resolvedTheme === 'dark';\n\n  return (\n    <div className=\"theme-injected border-border bg-card relative flex h-[220px] w-[220px] touch-none flex-col items-center overflow-hidden rounded-lg border-2 font-sans shadow-lg transition-colors duration-300 select-none sm:h-[260px] sm:w-[260px]\">\n      <div className=\"text-muted-foreground mt-5 text-base font-semibold tracking-wide capitalize transition-colors sm:mt-6 sm:text-xl\">\n        Weight\n      </div>\n\n      <div className=\"relative flex w-full flex-1 items-start justify-center\">\n        <motion.div\n          onPanStart={handlePanStart}\n          onPan={handlePan}\n          onPanEnd={handlePanEnd}\n          className=\"absolute flex h-full w-full cursor-grab items-start active:cursor-grabbing\"\n          style={{ x: springX, left: '50%' }}\n        >\n          {visibleRange.map((i) => (\n            <DialItem\n              key={i}\n              value={i}\n              pixelsPerUnit={pixelsPerUnit}\n              scrollX={springX}\n              isDark={isDark}\n            />\n          ))}\n        </motion.div>\n\n        <div className=\"pointer-events-none absolute bottom-0 z-20 mb-1 flex flex-col items-center sm:mb-0\">\n          <div className=\"bg-muted-foreground mb-1.5 h-[5px] w-[5px] rounded-lg transition-colors sm:h-[6.5px] sm:w-[6.5px]\" />\n          <svg\n            className=\"text-muted-foreground h-6 w-2 transition-colors sm:h-9 sm:w-[10px]\"\n            viewBox=\"0 0 10 36\"\n            fill=\"none\"\n            preserveAspectRatio=\"none\"\n          >\n            <path\n              d=\"M 5 2 L 9 36 L 1 36 Z\"\n              fill=\"currentColor\"\n              stroke=\"currentColor\"\n              strokeWidth=\"2\"\n              strokeLinejoin=\"round\"\n            />\n          </svg>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst DialItem: React.FC<{\n  value: number;\n  pixelsPerUnit: number;\n  scrollX: MotionValue<number>;\n  isDark: boolean;\n}> = ({ value, pixelsPerUnit, scrollX, isDark }) => {\n  const isHalf = value % 1 !== 0;\n  const itemX = value * pixelsPerUnit;\n  const distance = useTransform(scrollX, (s: number) => Math.abs(s + itemX));\n\n  const opacity = useTransform(\n    distance,\n    [0, pixelsPerUnit * 2, pixelsPerUnit * 3],\n    [1, 0.1, 0],\n  );\n\n  // const color = useTransform(\n  //   distance,\n  //   [0, pixelsPerUnit],\n  //   isDark\n  //     ? [\n  //         'oklch(var(--background) / 0.8)',\n  //         'oklch(var(--background) / 0)',\n  //       ]\n  //     : [\n  //         'oklch(var(--foreground) / 0.9)',\n  //         'oklch(var(--muted-foreground) / 0.5)',\n  //       ],\n  // );\n\n  const scale = useTransform(distance, [0, pixelsPerUnit * 2], [1, 0.85]);\n\n  const yOffset = useTransform(\n    distance,\n    [\n      0,\n      pixelsPerUnit * 0.5,\n      pixelsPerUnit,\n      pixelsPerUnit * 1.5,\n      pixelsPerUnit * 2,\n      pixelsPerUnit * 2.5,\n      pixelsPerUnit * 3,\n    ],\n    [0, 2, 7, 17, 32, 54, 88],\n  );\n\n  const rotate = useTransform(scrollX, (s: number) => {\n    const d = s + itemX;\n    return (d / pixelsPerUnit) * 12;\n  });\n\n  return (\n    <motion.div\n      className=\"absolute top-0 flex flex-col items-center\"\n      style={{\n        left: itemX,\n        x: '-50%',\n        opacity,\n        scale,\n        y: yOffset,\n        rotate,\n        transformOrigin: 'center 140px',\n      }}\n    >\n      <motion.span\n        className={`text-[56px] font-bold text-muted-foreground tracking-tight sm:text-[68px] ${\n          isHalf ? 'invisible' : ''\n        }`}\n        // style={{ color }}\n      >\n        {Math.floor(value)}\n      </motion.span>\n\n      <div className=\"mt-2 flex flex-col items-center sm:mt-4\">\n        <div\n          className={`h-5 w-[2.5px] rounded-lg transition-colors sm:h-7 sm:w-[3px] ${\n            isDark ? 'bg-foreground/20' : 'bg-foreground/20'\n          }`}\n        />\n      </div>\n    </motion.div>\n  );\n};\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "wiggling-cards",
      "type": "registry:component",
      "title": "Wiggling Cards",
      "description": "An animated card carousel with a playful wiggling effect during navigation.",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/wiggling-cards.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  useMotionTemplate,\n  type PanInfo,\n} from 'motion/react';\nimport {\n  ArrowUpRight,\n  ShoppingCart,\n  Users,\n  CreditCard,\n  BarChart3,\n} from 'lucide-react';\nimport { FaArrowUpLong } from 'react-icons/fa6';\n\nexport interface CardData {\n  id: number;\n  icon: React.ElementType;\n  percentage: string;\n  value: string;\n  label: string;\n}\n\nconst DEFAULT_CARDS: CardData[] = [\n  {\n    id: 0,\n    icon: CreditCard,\n    percentage: '2.15%',\n    value: '$2,374',\n    label: 'Weekly Expense',\n  },\n  {\n    id: 1,\n    icon: ShoppingCart,\n    percentage: '1.20%',\n    value: '$1,589',\n    label: 'Weekly Orders',\n  },\n  {\n    id: 2,\n    icon: Users,\n    percentage: '2.33%',\n    value: '$976',\n    label: 'Weekly Users',\n  },\n  {\n    id: 3,\n    icon: BarChart3,\n    percentage: '3.82%',\n    value: '$46,748',\n    label: 'Weekly Sales',\n  },\n];\n\nconst DRAG_BUFFER = 60;\nconst VELOCITY_THRESHOLD = 500;\n\nconst WigglingCard = ({ card, i, x, cardWidth, gap }: any) => {\n  const Icon = card.icon;\n  const center = -(i * (cardWidth + gap));\n\n  const distance = useTransform(x, (v: number) => v - center);\n\n  const rotate = useTransform(\n    distance,\n    [-cardWidth, -cardWidth * 0.1, 0, cardWidth * 0.1, cardWidth],\n    [10, 10, 0, -10, -10],\n  );\n\n  const blur = useTransform(\n    distance,\n    [-cardWidth, -cardWidth * 0.2, 0, cardWidth * 0.2, cardWidth],\n    [4, 2, 0, 2, 4],\n  );\n\n  const opacity = useTransform(\n    distance,\n    [-cardWidth, -cardWidth * 0.2, 0, cardWidth * 0.2, cardWidth],\n    [0, 0.8, 1, 0.8, 0],\n  );\n\n  const filter = useMotionTemplate`blur(${blur}px)`;\n\n  return (\n    <motion.div\n      key={card.id}\n      style={{\n        opacity,\n        rotate,\n        filter,\n        minWidth: cardWidth,\n      }}\n      className=\"relative flex h-72 flex-col justify-between rounded-[32px] border border-neutral-200 bg-white p-5 sm:h-80 sm:rounded-[40px] sm:p-6 dark:border-neutral-800 dark:bg-neutral-900\"\n    >\n      <div className=\"flex flex-col gap-6 sm:gap-10\">\n        <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-neutral-100 sm:h-20 sm:w-20 dark:bg-neutral-800\">\n          <Icon\n            className=\"h-10 w-10 text-neutral-900 sm:h-14 sm:w-14 dark:text-neutral-100\"\n            strokeWidth={1.5}\n          />\n        </div>\n\n        <div className=\"flex flex-col gap-1.5\">\n          <div className=\"flex w-fit items-center rounded-2xl bg-neutral-200 px-3 py-0.5 text-base font-medium text-neutral-600 sm:text-lg dark:bg-neutral-800 dark:text-neutral-300\">\n            <FaArrowUpLong className=\"mr-1 h-3 w-3\" />\n            {card.percentage}\n          </div>\n\n          <h2 className=\"text-3xl font-bold text-neutral-900 sm:text-[42px] dark:text-neutral-100\">\n            {card.value}\n          </h2>\n\n          <p className=\"text-lg font-medium text-neutral-700 sm:text-[20px] dark:text-neutral-300\">\n            {card.label}\n          </p>\n        </div>\n      </div>\n\n      <div className=\"absolute right-6 bottom-7 sm:right-7 sm:bottom-9\">\n        <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-neutral-200 sm:h-12 sm:w-12 dark:bg-neutral-800\">\n          <ArrowUpRight className=\"h-5 w-5 text-neutral-900 sm:h-6 sm:w-6 dark:text-neutral-100\" />\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\nexport function WigglingCards({ cards }: { cards?: CardData[] }) {\n  const data = cards ?? DEFAULT_CARDS;\n  const [index, setIndex] = useState(1);\n  const [dimensions, setDimensions] = useState({ cardWidth: 320, gap: 200 });\n\n  useEffect(() => {\n    const updateDimensions = () => {\n      const width = window.innerWidth;\n      if (width < 640) {\n        setDimensions({\n          cardWidth: Math.min(width - 64, 300),\n          gap: 40,\n        });\n      } else {\n        setDimensions({\n          cardWidth: 320,\n          gap: 200,\n        });\n      }\n    };\n\n    updateDimensions();\n    window.addEventListener('resize', updateDimensions);\n    return () => window.removeEventListener('resize', updateDimensions);\n  }, []);\n\n  const { cardWidth, gap } = dimensions;\n  const x = useMotionValue(-(index * (cardWidth + gap)));\n\n  const handleDragEnd = (_: any, info: PanInfo) => {\n    const offset = info.offset.x;\n    const velocity = info.velocity.x;\n\n    if (offset < -DRAG_BUFFER || velocity < -VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.min(prev + 1, data.length - 1));\n    } else if (offset > DRAG_BUFFER || velocity > VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.max(prev - 1, 0));\n    }\n  };\n\n  return (\n    <div className=\"flex flex-col items-center py-10\">\n      <div style={{ width: cardWidth + 40 }} className=\"relative mt-2\">\n        <motion.div\n          className=\"flex touch-pan-y\"\n          drag=\"x\"\n          dragConstraints={{\n            left: -(data.length - 1) * (cardWidth + gap),\n            right: 0,\n          }}\n          style={{\n            x,\n            gap: `${gap}px`,\n            perspective: 1000,\n          }}\n          animate={{\n            x: -(index * (cardWidth + gap)),\n          }}\n          transition={{\n            type: 'spring',\n            stiffness: 300,\n            damping: 40,\n          }}\n          onDragEnd={handleDragEnd}\n        >\n          {data.map((card, i) => (\n            <WigglingCard\n              key={card.id}\n              card={card}\n              i={i}\n              x={x}\n              cardWidth={cardWidth}\n              gap={gap}\n            />\n          ))}\n        </motion.div>\n      </div>\n\n      <div className=\"mt-8 flex gap-3\">\n        {data.map((_, i) => (\n          <button\n            key={i}\n            onClick={() => setIndex(i)}\n            className={`h-3 w-3 rounded-full transition-colors duration-200 ease-out ${\n              i === index\n                ? 'bg-neutral-500 dark:bg-neutral-400'\n                : 'bg-neutral-300 dark:bg-neutral-700'\n            }`}\n          />\n        ))}\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "wiggling-cards-base",
      "type": "registry:component",
      "title": "Wiggling Cards (base)",
      "description": "Theme-ready base variant of An animated card carousel with a playful wiggling effect during navigation..",
      "dependencies": [
        "lucide-react",
        "motion",
        "react-icons"
      ],
      "files": [
        {
          "path": "components/watermelon/wiggling-cards.tsx",
          "type": "registry:component",
          "content": "import React, { useState, useEffect } from 'react';\nimport {\n  motion,\n  useMotionValue,\n  useTransform,\n  useMotionTemplate,\n  type PanInfo,\n} from 'motion/react';\nimport {\n  ArrowUpRight,\n  ShoppingCart,\n  Users,\n  CreditCard,\n  BarChart3,\n} from 'lucide-react';\nimport { FaArrowUpLong } from 'react-icons/fa6';\n\nexport interface CardData {\n  id: number;\n  icon: React.ElementType;\n  percentage: string;\n  value: string;\n  label: string;\n}\n\nconst DEFAULT_CARDS: CardData[] = [\n  {\n    id: 0,\n    icon: CreditCard,\n    percentage: '2.15%',\n    value: '$2,374',\n    label: 'Weekly Expense',\n  },\n  {\n    id: 1,\n    icon: ShoppingCart,\n    percentage: '1.20%',\n    value: '$1,589',\n    label: 'Weekly Orders',\n  },\n  {\n    id: 2,\n    icon: Users,\n    percentage: '2.33%',\n    value: '$976',\n    label: 'Weekly Users',\n  },\n  {\n    id: 3,\n    icon: BarChart3,\n    percentage: '3.82%',\n    value: '$46,748',\n    label: 'Weekly Sales',\n  },\n];\n\nconst DRAG_BUFFER = 60;\nconst VELOCITY_THRESHOLD = 500;\n\nconst WigglingCard = ({ card, i, x, cardWidth, gap }: any) => {\n  const Icon = card.icon;\n  const center = -(i * (cardWidth + gap));\n\n  const distance = useTransform(x, (v: number) => v - center);\n\n  const rotate = useTransform(\n    distance,\n    [-cardWidth, -cardWidth * 0.1, 0, cardWidth * 0.1, cardWidth],\n    [10, 10, 0, -10, -10],\n  );\n\n  const blur = useTransform(\n    distance,\n    [-cardWidth, -cardWidth * 0.2, 0, cardWidth * 0.2, cardWidth],\n    [4, 2, 0, 2, 4],\n  );\n\n  const opacity = useTransform(\n    distance,\n    [-cardWidth, -cardWidth * 0.2, 0, cardWidth * 0.2, cardWidth],\n    [0, 0.8, 1, 0.8, 0],\n  );\n\n  const filter = useMotionTemplate`blur(${blur}px)`;\n\n  return (\n    <motion.div\n      key={card.id}\n      style={{\n        opacity,\n        rotate,\n        filter,\n        minWidth: cardWidth,\n      }}\n      className=\"theme-injected border-border bg-card relative shadow-sm flex h-72 flex-col justify-between rounded-xl border p-5 sm:h-80 sm:rounded-2xl sm:p-6\"\n    >\n      <div className=\"flex flex-col gap-6 sm:gap-10\">\n        <div className=\"bg-muted flex h-16 w-16 items-center justify-center rounded-xl sm:h-20 sm:w-20\">\n          <Icon\n            className=\"text-card-foreground h-10 w-10 sm:h-14 sm:w-14\"\n            strokeWidth={1.5}\n          />\n        </div>\n\n        <div className=\"flex flex-col gap-1.5\">\n          <div className=\"bg-muted text-muted-foreground flex w-fit items-center rounded-lg px-3 py-0.5 text-base font-medium sm:text-lg\">\n            <FaArrowUpLong className=\"mr-1 h-3 w-3\" />\n            {card.percentage}\n          </div>\n\n          <h2 className=\"text-card-foreground text-3xl font-bold sm:text-[42px]\">\n            {card.value}\n          </h2>\n\n          <p className=\"text-muted-foreground text-lg font-medium sm:text-[20px]\">\n            {card.label}\n          </p>\n        </div>\n      </div>\n\n      <div className=\"absolute right-6 bottom-7 sm:right-7 sm:bottom-9\">\n        <div className=\"bg-muted flex h-10 w-10 items-center justify-center rounded-lg sm:h-12 sm:w-12\">\n          <ArrowUpRight className=\"text-muted-foreground h-5 w-5 sm:h-6 sm:w-6\" />\n        </div>\n      </div>\n    </motion.div>\n  );\n};\n\nexport function WigglingCards({ cards }: { cards?: CardData[] }) {\n  const data = cards ?? DEFAULT_CARDS;\n  const [index, setIndex] = useState(1);\n  const [dimensions, setDimensions] = useState({ cardWidth: 320, gap: 200 });\n\n  useEffect(() => {\n    const updateDimensions = () => {\n      const width = window.innerWidth;\n      if (width < 640) {\n        setDimensions({\n          cardWidth: Math.min(width - 64, 300),\n          gap: 40,\n        });\n      } else {\n        setDimensions({\n          cardWidth: 320,\n          gap: 200,\n        });\n      }\n    };\n\n    updateDimensions();\n    window.addEventListener('resize', updateDimensions);\n    return () => window.removeEventListener('resize', updateDimensions);\n  }, []);\n\n  const { cardWidth, gap } = dimensions;\n  const x = useMotionValue(-(index * (cardWidth + gap)));\n\n  const handleDragEnd = (_: any, info: PanInfo) => {\n    const offset = info.offset.x;\n    const velocity = info.velocity.x;\n\n    if (offset < -DRAG_BUFFER || velocity < -VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.min(prev + 1, data.length - 1));\n    } else if (offset > DRAG_BUFFER || velocity > VELOCITY_THRESHOLD) {\n      setIndex((prev) => Math.max(prev - 1, 0));\n    }\n  };\n\n  return (\n    <div className=\"flex flex-col items-center py-10\">\n      <div style={{ width: cardWidth + 40 }} className=\"relative mt-2\">\n        <motion.div\n          className=\"flex touch-pan-y\"\n          drag=\"x\"\n          dragConstraints={{\n            left: -(data.length - 1) * (cardWidth + gap),\n            right: 0,\n          }}\n          style={{\n            x,\n            gap: `${gap}px`,\n            perspective: 1000,\n          }}\n          animate={{\n            x: -(index * (cardWidth + gap)),\n          }}\n          transition={{\n            type: 'spring',\n            stiffness: 300,\n            damping: 40,\n          }}\n          onDragEnd={handleDragEnd}\n        >\n          {data.map((card, i) => (\n            <WigglingCard\n              key={card.id}\n              card={card}\n              i={i}\n              x={x}\n              cardWidth={cardWidth}\n              gap={gap}\n            />\n          ))}\n        </motion.div>\n      </div>\n\n      <div className=\"mt-8 flex gap-3\">\n        {data.map((_, i) => (\n          <button\n            key={i}\n            onClick={() => setIndex(i)}\n            className={`h-3 w-3 rounded-lg transition-colors duration-200 ease-out ${\n              i === index ? 'bg-muted-foreground' : 'bg-muted'\n            }`}\n          />\n        ))}\n      </div>\n    </div>\n  );\n}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-1",
      "type": "registry:component",
      "title": "Accordion 1",
      "description": "Accordion 1. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-1.tsx",
          "type": "registry:component",
          "content": "import {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from \"@/components/base-ui/accordion\"\n\nconst items = [\n  {\n    value: \"item-1\",\n    title: \"How secure is my data?\",\n    content:\n      \"We use industry-standard encryption and secure infrastructure to protect your data at every step. Your information is never shared without your consent.\",\n  },\n  {\n    value: \"item-2\",\n    title: \"How do transactions work?\",\n    content:\n      \"Transactions are processed instantly and reflected in your account in real time. You can view detailed history and insights anytime.\",\n  },\n  {\n    value: \"item-3\",\n    title: \"Can I manage everything in one place?\",\n    content:\n      \"Yes - track activity, manage settings, and control your account from a single, unified dashboard designed for clarity and speed.\",\n  },\n] as const\n\nconst Accordion1 = () => {\n  return (\n    <Accordion className=\"w-full\"  type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem key={item.value} value={item.value}>\n          <AccordionTrigger className=\"flex-row-reverse justify-end gap-3 [&_[data-slot=accordion-trigger-icon]]:ml-0\">\n            {item.title}\n          </AccordionTrigger>\n          <AccordionContent className=\"pl-7 text-muted-foreground\">\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-2",
      "type": "registry:component",
      "title": "Accordion 2",
      "description": "Accordion 2. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-2.tsx",
          "type": "registry:component",
          "content": "import {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from '@/components/base-ui/accordion'\n\nconst items = [\n  {\n    value: \"item-1\",\n    title: \"How secure is my data?\",\n    content:\n      \"We use industry-standard encryption and secure infrastructure to protect your data at every step. Your information is never shared without your consent.\",\n  },\n  {\n    value: \"item-2\",\n    title: \"How do transactions work?\",\n    content:\n      \"Transactions are processed instantly and reflected in your account in real time. You can view detailed history and insights anytime.\",\n  },\n  {\n    value: \"item-3\",\n    title: \"Can I manage everything in one place?\",\n    content:\n      \"Yes - track activity, manage settings, and control your account from a single, unified dashboard designed for clarity and speed.\",\n  },\n] as const\n\nconst Accordion2 = () => {\n  return (\n    <Accordion className='w-full space-y-2' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='rounded-sm border-b-0 bg-card shadow-sm transition-shadow data-[state=open]:shadow-lg'\n        >\n          <AccordionTrigger className='px-5'>\n            {item.title}\n          </AccordionTrigger>\n          <AccordionContent className='px-5 text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-3",
      "type": "registry:component",
      "title": "Accordion 3",
      "description": "Accordion 3. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-3.tsx",
          "type": "registry:component",
          "content": "import {\n  AlertTriangleIcon,\n  ShieldAlertIcon,\n  WalletCardsIcon,\n} from 'lucide-react'\n\nimport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from '@/components/base-ui/accordion'\n\nconst items = [\n  {\n    value: 'item-1',\n    icon: WalletCardsIcon,\n    title: 'Why do payment settlements feel delayed?',\n    content:\n      'Settlement delays usually come from multiple banking layers, cutoff windows, and reconciliation checks between processors and internal ledgers. A fintech product needs clearer transaction states so users know whether funds are pending, processing, or fully available.'\n  },\n  {\n    value: 'item-2',\n    icon: ShieldAlertIcon,\n    title: 'How do we reduce false fraud alerts?',\n    content:\n      'False positives often happen when fraud rules are too rigid and do not account for user context. Better risk scoring, device intelligence, and behavior-based review flows help reduce unnecessary account blocks while still protecting sensitive transactions.'\n  },\n  {\n    value: 'item-3',\n    icon: AlertTriangleIcon,\n    title: 'What causes confusion around failed transfers?',\n    content:\n      'Users usually see a failure message without enough explanation. Stronger error mapping, retry guidance, and status updates tied to specific banking rails make failed transfer experiences easier to understand and recover from.'\n  }\n] as const\n\nconst Accordion3 = () => {\n  return (\n    <Accordion className='w-full' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => {\n        const Icon = item.icon\n\n        return (\n          <AccordionItem key={item.value} value={item.value}>\n            <AccordionTrigger>\n              <span className='flex items-center gap-4'>\n                <Icon className='size-4 shrink-0 text-muted-foreground' />\n                <span>{item.title}</span>\n              </span>\n            </AccordionTrigger>\n            <AccordionContent className='text-muted-foreground'>\n              {item.content}\n            </AccordionContent>\n          </AccordionItem>\n        )\n      })}\n    </Accordion>\n  )\n}\n\nexport default Accordion3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-4",
      "type": "registry:component",
      "title": "Accordion 4",
      "description": "Accordion 4. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-4.tsx",
          "type": "registry:component",
          "content": "import {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from '@/components/base-ui/accordion'\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nconst items = [\n  {\n    value: \"item-1\",\n    title: \"How secure is my data?\",\n    content:\n      \"We use industry-standard encryption and secure infrastructure to protect your data at every step. Your information is never shared without your consent.\",\n  },\n  {\n    value: \"item-2\",\n    title: \"How do transactions work?\",\n    content:\n      \"Transactions are processed instantly and reflected in your account in real time. You can view detailed history and insights anytime.\",\n  },\n  {\n    value: \"item-3\",\n    title: \"Can I manage everything in one place?\",\n    content:\n      \"Yes - track activity, manage settings, and control your account from a single, unified dashboard designed for clarity and speed.\",\n  },\n] as const\n\nconst Accordion4 = () => {\n  return (\n    <Accordion className='w-full space-y-2' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='rounded-sm border-b-0 bg-card shadow-sm transition-shadow data-[state=open]:shadow-lg'\n        >\n          <AccordionTrigger className='px-5 [&_[data-slot=accordion-trigger-icon]]:hidden'>\n            <span className='flex w-full items-center justify-between gap-4'>\n              <span>{item.title}</span>\n              <span className='relative size-3 shrink-0 text-muted-foreground'>\n                <PlusIcon className='absolute inset-0 size-3 group-aria-expanded/accordion-trigger:hidden' />\n                <MinusIcon className='absolute inset-0 hidden size-3 group-aria-expanded/accordion-trigger:block' />\n              </span>\n            </span>\n          </AccordionTrigger>\n          <AccordionContent className='px-5 text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-5",
      "type": "registry:component",
      "title": "Accordion 5",
      "description": "Accordion 5. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-5.tsx",
          "type": "registry:component",
          "content": "import {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from '@/components/base-ui/accordion'\n\nconst items = [\n  {\n    value: \"item-1\",\n    title: \"How secure is my data?\",\n    content:\n      \"We use industry-standard encryption and secure infrastructure to protect your data at every step. Your information is never shared without your consent.\",\n  },\n  {\n    value: \"item-2\",\n    title: \"How do transactions work?\",\n    content:\n      \"Transactions are processed instantly and reflected in your account in real time. You can view detailed history and insights anytime.\",\n  },\n  {\n    value: \"item-3\",\n    title: \"Can I manage everything in one place?\",\n    content:\n      \"Yes - track activity, manage settings, and control your account from a single, unified dashboard designed for clarity and speed.\",\n  },\n] as const\n\nconst Accordion5 = () => {\n  return (\n    <Accordion className='w-full' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='has-[button[aria-expanded=true]]:border-blue-600 not-last:has-[button[aria-expanded=true]]:border-b-2 dark:has-[button[aria-expanded=true]]:border-blue-400'\n        >\n          <AccordionTrigger className='hover:no-underline aria-expanded:text-blue-600 dark:aria-expanded:text-blue-400 [&[aria-expanded=true]>svg]:text-blue-600 dark:[&[aria-expanded=true]>svg]:text-blue-400'>\n            {item.title}\n          </AccordionTrigger>\n          <AccordionContent className='text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-6",
      "type": "registry:component",
      "title": "Accordion 6",
      "description": "Accordion 6. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-6.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport type { LucideIcon } from 'lucide-react'\nimport {\n  CalendarClockIcon,\n  HeartPulseIcon,\n  MinusIcon,\n  PlusIcon,\n  ShieldCheckIcon,\n} from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  icon: LucideIcon\n  title: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    icon: CalendarClockIcon,\n    title: 'Why are appointment slots disappearing so quickly?',\n    content:\n      'Appointment availability can change fast when multiple patients, staff members, and scheduling rules are interacting at once...'\n  },\n  {\n    value: 'item-2',\n    icon: ShieldCheckIcon,\n    title: 'How do we keep patient records secure?',\n    content:\n      'Patient records need strong access controls, encrypted storage, and clear audit trails...'\n  },\n  {\n    value: 'item-3',\n    icon: HeartPulseIcon,\n    title: 'What causes delays in lab result updates?',\n    content:\n      'Lab result delays often happen when data has to move between systems...'\n  }\n]\n\nconst Accordion6 = () => {\n  return (\n    <Accordion type=\"multiple\" defaultValue={[items[0].value]} className=\"w-full\">\n      {items.map((item) => {\n        const Icon = item.icon\n\n        return (\n          <AccordionItem key={item.value} value={item.value}>\n            \n            {/* ✅ Radix correct structure */}\n            <AccordionPrimitive.Header className=\"flex\">\n              <AccordionPrimitive.Trigger className=\"group flex flex-1 items-start gap-4 py-4 text-left text-sm font-medium\">\n                \n                <span className=\"relative mt-0.5 size-4 shrink-0 text-muted-foreground\">\n                  <PlusIcon className=\"absolute inset-0 group-data-[state=open]:hidden\" />\n                  <MinusIcon className=\"absolute inset-0 hidden group-data-[state=open]:block\" />\n                </span>\n\n                <span className=\"flex items-center gap-4\">\n                  <Icon className=\"size-4 shrink-0\" />\n                  {item.title}\n                </span>\n\n              </AccordionPrimitive.Trigger>\n            </AccordionPrimitive.Header>\n\n            <AccordionContent className=\"pl-8 text-muted-foreground\">\n              {item.content}\n            </AccordionContent>\n\n          </AccordionItem>\n        )\n      })}\n    </Accordion>\n  )\n}\n\nexport default Accordion6"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-7",
      "type": "registry:component",
      "title": "Accordion 7",
      "description": "Accordion 7. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [],
      "registryDependencies": [
        "accordion",
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-7.tsx",
          "type": "registry:component",
          "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/base-ui/accordion'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base-ui/avatar'\n\ntype AccordionItemData = {\n  value: string\n  name: string\n  role: string\n  avatarImage: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    name: 'Maya Chen',\n    role: 'Product Designer',\n    avatarImage: 'https://i.pravatar.cc/160?img=28',\n    content:\n      'Maya focuses on simplifying dense workflows into cleaner interfaces. She usually starts by reducing friction in onboarding, navigation, and handoff states before adding any visual polish.'\n  },\n  {\n    value: 'item-2',\n    name: 'Owen Brooks',\n    role: 'Engineering Lead',\n    avatarImage: 'https://i.pravatar.cc/160?img=30',\n    content:\n      'Owen cares most about predictable systems. His approach is to keep components easy to extend, remove brittle abstractions, and make shared patterns reliable before scaling them across a product.'\n  },\n  {\n    value: 'item-3',\n    name: 'Sara Patel',\n    role: 'Operations Manager',\n    avatarImage: 'https://i.pravatar.cc/160?img=32',\n    content:\n      'Sara looks for clarity in day-to-day workflows. She prefers interfaces that surface status, ownership, and next steps quickly so teams can move without guessing what needs attention.'\n  }\n]\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('')\n\nconst Accordion7 = () => {\n  return (\n    <Accordion className='w-full rounded-2xl border bg-background px-3' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem key={item.value} value={item.value} className='border-border/80'>\n          <AccordionTrigger className='items-center py-4 hover:no-underline'>\n            <span className='flex items-center gap-3'>\n              <Avatar className='size-10 rounded-full ring-1 ring-border/70'>\n                <AvatarImage src={item.avatarImage} alt={item.name} />\n                <AvatarFallback className='text-xs'>{getInitials(item.name)}</AvatarFallback>\n              </Avatar>\n\n              <span className='flex flex-col'>\n                <span className='text-sm font-medium'>{item.name}</span>\n                <span className='text-xs font-normal text-muted-foreground'>{item.role}</span>\n              </span>\n            </span>\n          </AccordionTrigger>\n\n          <AccordionContent className='pb-4 pl-13 text-sm leading-6 text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion7\n\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-8",
      "type": "registry:component",
      "title": "Accordion 8",
      "description": "Accordion 8. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-8.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport type { LucideIcon } from 'lucide-react'\nimport { GraduationCapIcon, LibraryBigIcon, PlusIcon, UsersIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  icon: LucideIcon\n  title: string\n  subtitle: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    icon: GraduationCapIcon,\n    title: 'Why do students struggle to stay on track?',\n    subtitle: 'Learning Journey',\n    content:\n      'Students usually lose momentum when lessons, deadlines, and progress signals are scattered across too many places. A stronger learning experience makes the next step visible and keeps milestones easy to review.'\n  },\n  {\n    value: 'item-2',\n    icon: LibraryBigIcon,\n    title: 'How should course materials be organized?',\n    subtitle: 'Curriculum Structure',\n    content:\n      'Course content works better when readings, assignments, and supporting resources are grouped by topic instead of being added as a long list. Clear structure helps learners spend more time studying and less time searching.'\n  },\n  {\n    value: 'item-3',\n    icon: UsersIcon,\n    title: 'What improves collaboration in cohort programs?',\n    subtitle: 'Community Experience',\n    content:\n      'Cohort learning becomes stronger when discussion spaces, peer feedback, and live session notes are connected to the same workflow. Students engage more when collaboration feels like part of the course instead of an extra step.'\n  }\n] as const\n\nconst Accordion8 = () => {\n  return (\n    <Accordion className='w-full' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => {\n        const Icon = item.icon\n\n        return (\n          <AccordionItem key={item.value} value={item.value}>\n            <AccordionPrimitive.Header className='flex'>\n              <AccordionPrimitive.Trigger\n                data-slot='accordion-trigger'\n                className='group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-none transition-all focus-visible:ring-[3px] aria-disabled:pointer-events-none aria-disabled:opacity-50'\n              >\n                <span className='flex items-center gap-4'>\n                  <span\n                    className='flex size-10 shrink-0 items-center justify-center rounded-md border'\n                    aria-hidden='true'\n                  >\n                    <Icon className='size-4' />\n                  </span>\n                  <span className='flex flex-col space-y-0.5'>\n                    <span>{item.title}</span>\n                    <span className='font-normal text-muted-foreground'>{item.subtitle}</span>\n                  </span>\n                </span>\n                <PlusIcon className='pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-aria-expanded/accordion-trigger:rotate-45' />\n              </AccordionPrimitive.Trigger>\n            </AccordionPrimitive.Header>\n            <AccordionContent className='text-muted-foreground'>\n              {item.content}\n            </AccordionContent>\n          </AccordionItem>\n        )\n      })}\n    </Accordion>\n  )\n}\n\nexport default Accordion8\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-9",
      "type": "registry:component",
      "title": "Accordion 9",
      "description": "Accordion 9. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-9.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport { ChevronDownIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  title: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    title: 'Why are property listings going stale so quickly?',\n    content:\n      'Listings usually become outdated when status changes, pricing updates, and agent notes are managed in separate places. A stronger real estate workflow keeps availability, media, and listing metadata synced across every channel.'\n  },\n  {\n    value: 'item-2',\n    title: 'How can brokers reduce friction during inquiry handoff?',\n    content:\n      'Lead handoff often breaks when inquiry details, preferred move-in dates, and follow-up history are incomplete. A better handoff flow gives every broker the right context before the first conversation starts.'\n  },\n  {\n    value: 'item-3',\n    title: 'What makes scheduling property visits harder than it should be?',\n    content:\n      'Scheduling gets messy when agent calendars, tenant availability, and buyer interest are not aligned in one place. Clearer availability windows and confirmation updates help visits feel coordinated instead of manual.'\n  }\n] as const\n\nconst Accordion9 = () => {\n  return (\n    <Accordion className='w-full space-y-2' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='rounded-md border bg-background shadow-sm transition-shadow has-[button[aria-expanded=true]]:shadow-md'\n        >\n          <AccordionPrimitive.Header className='flex'>\n            <AccordionPrimitive.Trigger\n              data-slot='accordion-trigger'\n              className='group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md px-5 py-4 text-left text-sm font-medium outline-none transition-all focus-visible:ring-[3px] aria-disabled:pointer-events-none aria-disabled:opacity-50'\n            >\n              <span className='flex items-center gap-3'>\n                <span className='relative size-4 shrink-0 text-muted-foreground'>\n                  <ChevronRightIcon className='absolute inset-0 size-4 group-aria-expanded/accordion-trigger:hidden' />\n                  <ChevronDownIcon className='absolute inset-0 hidden size-4 group-aria-expanded/accordion-trigger:block' />\n                </span>\n                <span>{item.title}</span>\n              </span>\n            </AccordionPrimitive.Trigger>\n          </AccordionPrimitive.Header>\n\n          <AccordionContent className='px-5 pl-12 text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion9\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-10",
      "type": "registry:component",
      "title": "Accordion 10",
      "description": "Accordion 10. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-10.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  title: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    title: 'Why do itinerary changes create so much confusion?',\n    content:\n      'Travel plans usually break down when flight updates, hotel changes, and local transfers are shown in different places. A better trip experience keeps every change in one timeline so travelers understand what changed and what action is needed.'\n  },\n  {\n    value: 'item-2',\n    title: 'How can booking support feel less reactive?',\n    content:\n      'Support works better when travelers can see booking status, policy details, and next-step guidance before they contact an agent. That context reduces repeat questions and helps teams focus on the cases that actually need intervention.'\n  },\n  {\n    value: 'item-3',\n    title: 'What makes multi-city planning harder than expected?',\n    content:\n      'Multi-city trips become difficult when reservations, check-in windows, and local logistics are managed separately. Stronger coordination tools help people compare timing, spot conflicts, and move through the journey with less friction.'\n  }\n] as const\n\nconst Accordion10 = () => {\n  return (\n    <Accordion className='w-full rounded-xl border' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem key={item.value} value={item.value}>\n          <AccordionPrimitive.Header className='flex'>\n            <AccordionPrimitive.Trigger\n              data-slot='accordion-trigger'\n              className='group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 px-5 py-4 text-left text-sm font-medium outline-none transition-all focus-visible:ring-[3px] aria-expanded:text-blue-600 dark:aria-expanded:text-blue-400 aria-disabled:pointer-events-none aria-disabled:opacity-50'\n            >\n              <span>{item.title}</span>\n              <span className='relative size-4 shrink-0 text-muted-foreground'>\n                <PlusIcon className='absolute inset-0 size-4 group-aria-expanded/accordion-trigger:hidden' />\n                <MinusIcon className='absolute inset-0 hidden size-4 group-aria-expanded/accordion-trigger:block' />\n              </span>\n            </AccordionPrimitive.Trigger>\n          </AccordionPrimitive.Header>\n\n          <AccordionContent className='px-5 text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion10\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-11",
      "type": "registry:component",
      "title": "Accordion 11",
      "description": "Accordion 11. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-11.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  title: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    title: 'Why do reservation updates create guest confusion?',\n    content:\n      'Hospitality systems often separate booking details, upgrade notes, and late arrival changes across multiple tools. A clearer reservation flow helps guests understand what changed before they arrive at the property.'\n  },\n  {\n    value: 'item-2',\n    title: 'How can hotel staff handle requests more efficiently?',\n    content:\n      'Service requests move faster when housekeeping, concierge, and front desk teams share the same status view. That visibility reduces repeated check-ins and helps staff resolve requests without extra handoff friction.'\n  },\n  {\n    value: 'item-3',\n    title: 'What causes delays during check-in peaks?',\n    content:\n      'Check-in bottlenecks usually happen when identity checks, payment confirmation, and room readiness are not aligned in one flow. Better pre-arrival coordination helps staff shorten wait times and reduce lobby congestion.'\n  }\n] as const\n\nconst Accordion11 = () => {\n  return (\n    <Accordion className='w-full space-y-2' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='rounded-md border border-border/80 bg-background px-5 transition-colors duration-200 has-[button[aria-expanded=true]]:bg-neutral-100 dark:has-[button[aria-expanded=true]]:bg-neutral-950/30'\n        >\n          <AccordionPrimitive.Header className='flex'>\n            <AccordionPrimitive.Trigger\n              data-slot='accordion-trigger'\n              className='group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 py-4 text-left text-sm font-medium outline-none transition-all focus-visible:ring-[3px] aria-disabled:pointer-events-none aria-disabled:opacity-50'\n            >\n              <span>{item.title}</span>\n\n              <span className='relative size-4 shrink-0 text-muted-foreground'>\n                <ChevronDownIcon className='absolute inset-0 size-4 group-aria-expanded/accordion-trigger:hidden' />\n                <ChevronUpIcon className='absolute inset-0 hidden size-4 group-aria-expanded/accordion-trigger:block' />\n              </span>\n            </AccordionPrimitive.Trigger>\n          </AccordionPrimitive.Header>\n\n          <AccordionContent className='text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-12",
      "type": "registry:component",
      "title": "Accordion 12",
      "description": "Accordion 12. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-12.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  title: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    title: 'Why do onboarding tasks get missed so often?',\n    content:\n      'HR onboarding usually breaks down when training, paperwork, and access setup live in separate tools. A stronger onboarding flow helps new hires see what is pending, who owns each step, and what needs to happen next.'\n  },\n  {\n    value: 'item-2',\n    title: 'How can managers keep performance reviews more consistent?',\n    content:\n      'Performance reviews become inconsistent when expectations, feedback notes, and historical context are scattered. Better review systems make goals visible, track feedback over time, and reduce bias introduced by missing context.'\n  },\n  {\n    value: 'item-3',\n    title: 'What makes time-off coordination harder for growing teams?',\n    content:\n      'Time-off planning gets messy when approvals, team coverage, and policy rules are not connected. A clearer HR workflow helps employees request leave confidently while giving managers enough visibility to plan around absences.'\n  }\n] as const\n\nconst Accordion12 = () => {\n  return (\n    <Accordion className='w-full space-y-2' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='rounded-md border border-transparent bg-background px-5 transition-[border-color,box-shadow] duration-200 has-[button[aria-expanded=true]]:border-border has-[button[aria-expanded=true]]:shadow-md'\n        >\n          <AccordionPrimitive.Header className='flex'>\n            <AccordionPrimitive.Trigger\n              data-slot='accordion-trigger'\n              className='group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-none transition-all hover:underline focus-visible:ring-[3px] aria-disabled:pointer-events-none aria-disabled:opacity-50'\n            >\n              {item.title}\n              <span className='relative size-4 shrink-0 text-muted-foreground'>\n                <ChevronDownIcon className='absolute inset-0 size-4 group-aria-expanded/accordion-trigger:hidden' />\n                <ChevronUpIcon className='absolute inset-0 hidden size-4 group-aria-expanded/accordion-trigger:block' />\n              </span>\n            </AccordionPrimitive.Trigger>\n          </AccordionPrimitive.Header>\n          <AccordionContent className='text-muted-foreground'>{item.content}</AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-13",
      "type": "registry:component",
      "title": "Accordion 13",
      "description": "Accordion 13. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-13.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react'\nimport { BookOpenIcon, GraduationCapIcon, UsersIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  icon: LucideIcon\n  title: string\n  content: string\n  media: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    icon: GraduationCapIcon,\n    title: 'How do students stay oriented in longer courses?',\n    content:\n      'Learning journeys feel smoother when weekly goals, lesson progress, and upcoming deadlines are visible in one place. Students usually stay more engaged when the platform clearly shows what has been completed and what comes next.',\n    media:\n      'https://images.unsplash.com/photo-1753892208880-7032f44ad6ea?auto=format&fit=crop&fm=jpg&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&ixlib=rb-4.1.0&q=60&w=1200'\n  },\n  {\n    value: 'item-2',\n    icon: BookOpenIcon,\n    title: 'What makes digital learning resources easier to use?',\n    content:\n      'Course materials work better when readings, notes, and assignments are grouped by topic instead of being scattered across separate pages. Clear structure helps learners spend more time studying and less time searching.',\n    media:\n      'https://images.unsplash.com/photo-1741707596390-2f0c75580ca5?auto=format&fit=crop&fm=jpg&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&ixlib=rb-4.1.0&q=60&w=1200'\n  },\n  {\n    value: 'item-3',\n    icon: UsersIcon,\n    title: 'How can cohort collaboration feel more natural?',\n    content:\n      'Peer interaction improves when discussion, feedback, and shared milestones are built into the same flow as the coursework. Students are more likely to participate when collaboration feels like part of learning instead of an extra destination.',\n    media:\n      'https://images.unsplash.com/photo-1741699427706-7bfb38c716d8?auto=format&fit=crop&fm=jpg&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&ixlib=rb-4.1.0&q=60&w=1200'\n  }\n] as const\n\nconst Accordion13 = () => {\n  return (\n    <Accordion className='w-full rounded-2xl border border-border/80 bg-background px-3' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => {\n        const Icon = item.icon\n\n        return (\n          <AccordionItem key={item.value} value={item.value} className='border-border/70'>\n            <AccordionTrigger className='items-center py-4 hover:no-underline'>\n              <span className='flex items-center gap-3'>\n                <span className='flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground'>\n                  <Icon className='size-4' />\n                </span>\n                <span className='text-sm font-medium'>{item.title}</span>\n              </span>\n            </AccordionTrigger>\n\n            <AccordionContent className='space-y-4 pb-4'>\n              <p className='text-sm leading-6 text-muted-foreground'>{item.content}</p>\n              <img\n                src={item.media}\n                alt={item.title}\n                className='h-52 w-full rounded-xl object-cover'\n                loading='lazy'\n              />\n            </AccordionContent>\n          </AccordionItem>\n        )\n      })}\n    </Accordion>\n  )\n}\n\nexport default Accordion13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-14",
      "type": "registry:component",
      "title": "Accordion 14",
      "description": "Accordion 14. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-14.tsx",
          "type": "registry:component",
          "content": "import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport { PlusIcon, XIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\n\ntype AccordionItemData = {\n  value: string\n  title: string\n  content: string\n}\n\nconst items: readonly AccordionItemData[] = [\n  {\n    value: 'item-1',\n    title: 'Why do support queues grow unexpectedly in SaaS products?',\n    content:\n      'Support queues usually spike when billing issues, onboarding blockers, and product questions all land in the same channel. Clearer triage and self-serve guidance help teams resolve simple requests before they become backlog.'\n  },\n  {\n    value: 'item-2',\n    title: 'How can onboarding flows reduce early drop-off?',\n    content:\n      'Early drop-off often happens when users are asked to do too much before they see value. Simpler setup, clearer progress states, and fewer decisions in the first session help new users stay engaged longer.'\n  },\n  {\n    value: 'item-3',\n    title: 'What makes feature discovery feel more natural?',\n    content:\n      'Feature discovery works best when guidance appears at the right moment instead of being packed into one tour. Small, contextual prompts help users learn the product without interrupting the task they came to complete.'\n  }\n] as const\n\nconst Accordion14 = () => {\n  return (\n    <Accordion className='w-full space-y-1.5' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => (\n        <AccordionItem\n          key={item.value}\n          value={item.value}\n          className='rounded-md border border-border/80 bg-background px-4'\n        >\n          <AccordionPrimitive.Header className='flex'>\n            <AccordionPrimitive.Trigger\n              data-slot='accordion-trigger'\n              className='group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 py-4 text-left text-sm font-medium outline-none transition-all hover:no-underline focus-visible:ring-[3px] aria-disabled:pointer-events-none aria-disabled:opacity-50'\n            >\n              <span className='pr-4'>{item.title}</span>\n\n              <span className='relative flex size-8 shrink-0 items-center justify-center rounded-full border border-border/70 text-muted-foreground transition-colors group-aria-expanded/accordion-trigger:bg-muted'>\n                <PlusIcon className='absolute inset-0 m-auto size-4 group-aria-expanded/accordion-trigger:hidden' />\n                <XIcon className='absolute inset-0 m-auto hidden size-4 group-aria-expanded/accordion-trigger:block' />\n              </span>\n            </AccordionPrimitive.Trigger>\n          </AccordionPrimitive.Header>\n\n          <AccordionContent className='pb-4 text-sm leading-6 text-muted-foreground'>\n            {item.content}\n          </AccordionContent>\n        </AccordionItem>\n      ))}\n    </Accordion>\n  )\n}\n\nexport default Accordion14\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-15",
      "type": "registry:component",
      "title": "Accordion 15",
      "description": "Accordion 15. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "@radix-ui/react-accordion",
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion",
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-15.tsx",
          "type": "registry:component",
          "content": "import type { ComponentType } from 'react'\nimport { ChevronDownIcon, ChevronUpIcon, ClipboardCheckIcon, FolderKanbanIcon, LifeBuoyIcon } from 'lucide-react'\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/base-ui/accordion'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/base-ui/collapsible'\n\ntype FaqItem = {\n  title: string\n  content: string\n}\n\ntype AccordionCategory = {\n  value: string\n  category: string\n  icon: ComponentType<{ className?: string }>\n  faqs: readonly FaqItem[]\n}\n\nconst items: readonly AccordionCategory[] = [\n  {\n    value: 'item-1',\n    category: 'Project Planning',\n    icon: FolderKanbanIcon,\n    faqs: [\n      {\n        title: 'Why do project timelines slip so often?',\n        content:\n          'Timelines usually drift when dependencies are hidden or ownership is unclear. Planning tools work better when milestones, blockers, and approvals are visible in one place instead of being split across multiple updates.'\n      },\n      {\n        title: 'How detailed should a kickoff plan be?',\n        content:\n          'A kickoff plan should be detailed enough to clarify scope, roles, and handoff points without turning into a long document nobody revisits. The best plans are easy to scan and easy to maintain.'\n      },\n      {\n        title: 'What helps teams prioritize requests better?',\n        content:\n          'Prioritization gets easier when business impact, effort, and urgency are evaluated together. A shared framework prevents every request from feeling equally important.'\n      }\n    ] as const\n  },\n  {\n    value: 'item-2',\n    category: 'Team Operations',\n    icon: ClipboardCheckIcon,\n    faqs: [\n      {\n        title: 'How can recurring processes stay consistent?',\n        content:\n          'Recurring operations are more reliable when the team has clear checklists, known owners, and visible status updates. Small process gaps are easier to catch when the workflow is standardized.'\n      },\n      {\n        title: 'What makes internal handoffs smoother?',\n        content:\n          'Handoffs improve when context is transferred with the work rather than explained later in messages. Teams move faster when next steps, due dates, and open questions are already attached to the task.'\n      },\n      {\n        title: 'How do we reduce follow-up overhead?',\n        content:\n          'Follow-up overhead usually grows when updates are scattered and responsibilities are implied instead of assigned. Better visibility removes the need for repeated status checks.'\n      }\n    ] as const\n  },\n  {\n    value: 'item-3',\n    category: 'Client Support',\n    icon: LifeBuoyIcon,\n    faqs: [\n      {\n        title: 'Why do support conversations lose context?',\n        content:\n          'Context gets lost when history, decisions, and issue details are spread across channels. Support workflows feel stronger when the full thread stays connected to the request.'\n      },\n      {\n        title: 'How can updates feel more proactive?',\n        content:\n          'Clients feel better informed when support teams share progress before being asked. Even short updates reduce uncertainty and make longer resolutions easier to tolerate.'\n      },\n      {\n        title: 'What helps escalations move faster?',\n        content:\n          'Escalations move faster when severity, reproduction details, and ownership are defined upfront. Clear escalation paths prevent issues from bouncing between teams.'\n      }\n    ] as const\n  }\n] as const\n\nconst Accordion15 = () => {\n  return (\n    <Accordion className='w-full rounded-xl border border-border/80' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => {\n        const Icon = item.icon\n\n        return (\n          <AccordionItem\n            key={item.value}\n            value={item.value}\n            className='outline-none first:rounded-t-xl last:rounded-b-xl'\n          >\n            <AccordionPrimitive.Header className='flex'>\n              <AccordionPrimitive.Trigger\n                data-slot='accordion-trigger'\n                className='group/accordion-trigger flex w-full items-center justify-between gap-4 px-5 py-4 text-left text-sm font-medium outline-none transition-all hover:no-underline aria-disabled:pointer-events-none aria-disabled:opacity-50'\n              >\n                <span className='flex items-center gap-3'>\n                  <Icon className='size-4 shrink-0 text-muted-foreground' />\n                  <span>{item.category}</span>\n                </span>\n\n                <span className='relative size-4 shrink-0 text-muted-foreground'>\n                  <ChevronDownIcon className='absolute inset-0 size-4 group-aria-expanded/accordion-trigger:hidden' />\n                  <ChevronUpIcon className='absolute inset-0 hidden size-4 group-aria-expanded/accordion-trigger:block' />\n                </span>\n              </AccordionPrimitive.Trigger>\n            </AccordionPrimitive.Header>\n\n            <AccordionContent className='pb-0'>\n              {item.faqs.map((faq) => (\n                <Collapsible\n                  key={faq.title}\n                  className='border-t border-border/70 px-5 transition-colors has-[button[aria-expanded=true]]:bg-neutral-200/60 dark:has-[button[aria-expanded=true]]:bg-neutral-800'\n                  defaultOpen={faq.title === item.faqs[0]?.title}\n                >\n                  <CollapsibleTrigger className='focus-visible:ring-ring/50 flex w-full items-center gap-3 py-4 text-left text-sm font-medium outline-none hover:no-underline focus-visible:ring-[3px]'>\n                    <ChevronDownIcon className='size-4 shrink-0 text-muted-foreground transition-transform data-[state=open]:rotate-180' />\n                    {faq.title}\n                  </CollapsibleTrigger>\n                  <CollapsibleContent className='overflow-hidden pb-4 pl-7 text-sm leading-6 text-muted-foreground'>\n                    {faq.content}\n                  </CollapsibleContent>\n                </Collapsible>\n              ))}\n            </AccordionContent>\n          </AccordionItem>\n        )\n      })}\n    </Accordion>\n  )\n}\n\nexport default Accordion15\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion-16",
      "type": "registry:component",
      "title": "Accordion 16",
      "description": "Accordion 16. A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "accordion",
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/accordion-16.tsx",
          "type": "registry:component",
          "content": "import { ChevronDownIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/base-ui/accordion'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/base-ui/collapsible'\n\ntype FaqItem = {\n  title: string\n  content: string\n  open?: boolean\n}\n\ntype AccordionCategory = {\n  value: string\n  category: string\n  faqs: readonly FaqItem[]\n}\n\nconst items: readonly AccordionCategory[] = [\n  {\n    value: 'item-1',\n    category: 'Campaign Planning',\n    faqs: [\n      {\n        title: 'Why do campaign launches miss their original dates?',\n        content:\n          'Launches usually slip when approvals, asset production, and messaging changes happen in parallel without one shared timeline. Campaign planning works better when teams can see dependencies before launch week arrives.',\n        open: true\n      },\n      {\n        title: 'How detailed should a campaign brief be?',\n        content:\n          'A useful brief should clarify audience, objective, core message, and success criteria without becoming too long to revisit. The best briefs guide decisions instead of documenting everything.'\n      },\n      {\n        title: 'What helps teams align on launch priorities?',\n        content:\n          'Priorities become clearer when every activity is tied to a measurable objective. That makes it easier to decide what is essential for launch and what can wait.'\n      }\n    ] as const\n  },\n  {\n    value: 'item-2',\n    category: 'Content Workflow',\n    faqs: [\n      {\n        title: 'Why do content reviews take longer than expected?',\n        content:\n          'Content reviews slow down when feedback is spread across separate docs, messages, and presentations. Teams move faster when edits, comments, and approvals happen in one workflow.',\n        open: true\n      },\n      {\n        title: 'How do we avoid duplicate content requests?',\n        content:\n          'Duplicate requests usually happen when briefs are not visible across teams. Shared intake and clear ownership reduce overlap and make planning easier.'\n      },\n      {\n        title: 'What makes handoff to design smoother?',\n        content:\n          'Handoffs improve when narrative, hierarchy, and usage context are already clear before design begins. That reduces revision loops and keeps execution focused.'\n      }\n    ] as const\n  },\n  {\n    value: 'item-3',\n    category: 'Performance Tracking',\n    faqs: [\n      {\n        title: 'Why do teams struggle to interpret campaign results?',\n        content:\n          'Results feel harder to interpret when traffic, conversion, and retention metrics live in different dashboards. Better reporting connects outcomes back to the campaign goal that mattered most.',\n        open: true\n      },\n      {\n        title: 'How often should reporting be shared?',\n        content:\n          'Reporting should be frequent enough to catch problems early, but not so frequent that teams are reacting to noise. A simple weekly rhythm is often easier to sustain.'\n      },\n      {\n        title: 'What makes insights more actionable?',\n        content:\n          'Insights are more useful when they lead to a specific next step. Reporting should make it obvious what to continue, what to adjust, and what to stop.'\n      }\n    ] as const\n  }\n] as const\n\nconst Accordion16 = () => {\n  return (\n    <Accordion className='w-full rounded-xl border border-border/80' type=\"multiple\" defaultValue={[items[0].value]}>\n      {items.map((item) => {\n        return (\n          <AccordionItem\n            key={item.value}\n            value={item.value}\n            className='first:rounded-t-xl last:rounded-b-xl'\n          >\n            <AccordionTrigger className='items-center px-5 py-4 hover:no-underline focus-visible:ring-0'>\n              <span>{item.category}</span>\n            </AccordionTrigger>\n\n            <AccordionContent className='pb-0'>\n              {item.faqs.map((faq) => (\n                <Collapsible\n                  key={faq.title}\n                  className='border-t border-border/70 px-6 transition-colors has-[button[aria-expanded=true]]:bg-neutral-200/60 dark:has-[button[aria-expanded=true]]:bg-neutral-800'\n                  defaultOpen={faq.open}\n                >\n                  <CollapsibleTrigger className='group/collapsible focus-visible:ring-ring/50 flex w-full items-center justify-between gap-3 py-4 text-left text-sm font-medium outline-none hover:no-underline focus-visible:ring-[3px]'>\n                    <span>{faq.title}</span>\n                    <ChevronDownIcon className='invisible size-4 shrink-0 text-muted-foreground group-data-[state=open]/collapsible:visible' />\n                  </CollapsibleTrigger>\n                  <CollapsibleContent className='overflow-hidden pb-4 text-sm leading-6 text-muted-foreground'>\n                    {faq.content}\n                  </CollapsibleContent>\n                </Collapsible>\n              ))}\n            </AccordionContent>\n          </AccordionItem>\n        )\n      })}\n    </Accordion>\n  )\n}\n\nexport default Accordion16\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-1",
      "type": "registry:component",
      "title": "Alert 1",
      "description": "Alert 1. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-1.tsx",
          "type": "registry:component",
          "content": "import { MdError } from 'react-icons/md';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert1 = () => {\n  return (\n    <Alert>\n      <MdError />\n      <AlertTitle className=\"flex-1\">You have a new message!</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-2",
      "type": "registry:component",
      "title": "Alert 2",
      "description": "Alert 2. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert",
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-2.tsx",
          "type": "registry:component",
          "content": "import { MdError } from 'react-icons/md';\n\nimport {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\nconst Alert2 = () => {\n  return (\n    <Alert className=\"flex items-start justify-between gap-3 sm:items-center\">\n      <Avatar className=\"shrink-0 rounded-full\">\n        <AvatarImage\n          src=\"https://github.com/shadcn.png\"\n          alt=\"Vansh Patel\"\n          className=\"rounded-full\"\n        />\n        <AvatarFallback className=\"text-xs\">VP</AvatarFallback>\n      </Avatar>\n\n      <div className=\"flex min-w-0 flex-1 flex-col justify-center leading-[1rem]\">\n        <AlertTitle>Vansh has replied on the mesasge.</AlertTitle>\n        <AlertDescription className=\"leading-[1rem]\">\n          5 unread messages waiting for you.\n        </AlertDescription>\n      </div>\n\n      <MdError className=\"shrink-0\" />\n    </Alert>\n  );\n};\n\nexport default Alert2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-3",
      "type": "registry:component",
      "title": "Alert 3",
      "description": "Alert 3. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-3.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { MdError } from 'react-icons/md';\nimport { RxCross2 } from 'react-icons/rx';\nimport {\n  Alert,\n  AlertDescription,\n  AlertTitle,\n} from '@/components/base-ui/alert';\n\nconst Alert3 = () => {\n  const [isActive, setIsActive] = useState(true);\n\n  if (!isActive) return null;\n\n  return (\n    <Alert className=\"flex justify-between\">\n      <MdError />\n      <div className=\"flex-1 flex-col justify-center gap-1\">\n        <AlertTitle>You have a new message!</AlertTitle>\n        <AlertDescription>12 unread messages waiting for you.</AlertDescription>\n      </div>\n      <button\n        className=\"cursor-pointer self-start\"\n        onClick={() => setIsActive(false)}\n      >\n        <RxCross2 className=\"size-4\" />\n        <span className=\"sr-only\">Close</span>\n      </button>\n    </Alert>\n  );\n};\n\nexport default Alert3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-4",
      "type": "registry:component",
      "title": "Alert 4",
      "description": "Alert 4. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-4.tsx",
          "type": "registry:component",
          "content": "import { FiArrowRight } from 'react-icons/fi';\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nimport { MdError } from 'react-icons/md';\nimport { buttonVariants } from '@/components/base-ui/button';\n\nconst Alert4 = () => {\n  return (\n    <Alert className=\"flex items-center justify-between border-teal-600 text-teal-600 dark:border-teal-400 dark:text-teal-400 [&>svg]:translate-y-0\">\n      <MdError />\n      <AlertTitle className=\"flex-1\">You have a new message!</AlertTitle>\n      <a\n        href=\"#\"\n        className={buttonVariants({\n          variant: 'link',\n          size: 'sm',\n          className:\n            'group h-7 rounded-lg text-teal-600 hover:bg-teal-600/10 dark:text-teal-400 dark:hover:bg-teal-400/10',\n        })}\n      >\n        Link\n        <FiArrowRight className=\"h-4 w-4 transition-transform duration-200 group-hover:translate-x-1\" />\n      </a>\n    </Alert>\n  );\n};\n\nexport default Alert4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-5",
      "type": "registry:component",
      "title": "Alert 5",
      "description": "Alert 5. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-5.tsx",
          "type": "registry:component",
          "content": "import { TbFileAlert } from 'react-icons/tb';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert5 = () => {\n  return (\n    <Alert className=\"flex items-stretch rounded-none p-0\">\n      <div className=\"bg-destructive/20 text-destructive border-destructive/20 flex items-center rounded-none border border-r p-2\">\n        <TbFileAlert className=\"size-4\" />\n      </div>\n      <AlertTitle className=\"p-3\">This file may harm your system!</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-6",
      "type": "registry:component",
      "title": "Alert 6",
      "description": "Alert 6. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert",
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-6.tsx",
          "type": "registry:component",
          "content": "import { TbFileAlert } from 'react-icons/tb';\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Avatar, AvatarFallback } from '@/components/base-ui/avatar';\n\nconst Alert6 = () => {\n  return (\n    <Alert className=\"flex items-center gap-3\">\n      <Avatar className=\"rounded-md\">\n        <AvatarFallback className=\"bg-destructive dark:bg-destructive/60 rounded-md text-white\">\n          <TbFileAlert className=\"size-4\" />\n        </AvatarFallback>\n      </Avatar>\n      <AlertTitle>This file may harm your system!</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-7",
      "type": "registry:component",
      "title": "Alert 7",
      "description": "Alert 7. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "progress"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect } from 'react';\nimport { MdOutlineFileUpload } from 'react-icons/md';\nimport { RxCross2 } from 'react-icons/rx';\n\nimport {\n  Alert,\n  AlertDescription,\n  AlertTitle,\n} from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport { Progress } from '@/components/base-ui/progress';\n\nconst Alert7 = () => {\n  const [isActive, setIsActive] = useState(true);\n  const [progress, setProgress] = useState(0);\n\n  useEffect(() => {\n    const timer = setTimeout(() => setProgress(50), 100);\n    return () => clearTimeout(timer);\n  }, []);\n\n  if (!isActive) return null;\n\n  return (\n    <Alert className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n      <div className=\"flex w-full items-start gap-3\">\n        <MdOutlineFileUpload className=\"size-5 shrink-0\" />\n\n        <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n          <div className=\"flex flex-col gap-1\">\n            <AlertTitle>Uploading your &apos;watermelon.png&apos;</AlertTitle>\n            <AlertDescription>\n              Please wait While we upload your image.\n            </AlertDescription>\n          </div>\n\n          <Progress\n            value={progress}\n            className=\"*:h-1.5 *:bg-cyan-600/20 dark:*:bg-cyan-400/20 [&_[data-slot=progress-indicator]]:bg-cyan-600! dark:[&_[data-slot=progress-indicator]]:bg-cyan-400!\"\n            aria-label=\"Upload Progress\"\n          />\n\n          <div className=\"flex items-center gap-4\">\n            <Button variant=\"ghost\" className=\"h-7 rounded-md px-2\">\n              Cancel\n            </Button>\n            <Button\n              variant=\"ghost\"\n              disabled\n              className=\"h-7 rounded-md px-2 text-cyan-600 hover:bg-cyan-600/10 hover:text-cyan-600 dark:text-cyan-400 dark:hover:bg-cyan-400/10 dark:hover:text-cyan-400\"\n            >\n              Upload another\n            </Button>\n          </div>\n        </div>\n\n        <button\n          className=\"size-4 shrink-0 cursor-pointer\"\n          onClick={() => setIsActive(false)}\n        >\n          <RxCross2 className=\"size-4\" />\n          <span className=\"sr-only\">Close</span>\n        </button>\n      </div>\n    </Alert>\n  );\n};\n\nexport default Alert7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-8",
      "type": "registry:component",
      "title": "Alert 8",
      "description": "Alert 8. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-8.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { MdError } from 'react-icons/md';\nimport { RxCross2 } from 'react-icons/rx';\n\nimport {\n  Alert,\n  AlertDescription,\n  AlertTitle,\n} from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\n\nconst Alert8 = () => {\n  const [isActive, setIsActive] = useState(true);\n\n  if (!isActive) return null;\n\n  return (\n    <Alert className=\"bg-primary text-primary-foreground flex flex-col gap-3 border-none sm:flex-row sm:items-start\">\n      <div className=\"flex w-full items-start gap-3\">\n        <MdError className=\"size-4 shrink-0\" />\n\n        <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n          <div className=\"flex flex-col gap-1\">\n            <AlertTitle>Update ready to install</AlertTitle>\n            <AlertDescription className=\"text-primary-foreground/70 text-wrap!\">\n              A new version is available with performance improvements and a\n              refreshed dashboard experience.\n            </AlertDescription>\n          </div>\n\n          <div className=\"flex shrink-0 items-center gap-3\">\n            <Button className=\"bg-secondary/10 hover:bg-secondary/20 focus-visible:bg-secondary/20 h-7 rounded-lg px-2\">\n             Later\n            </Button>\n            <Button variant=\"secondary\" className=\"h-7 rounded-lg px-2\">\n              Update now\n            </Button>\n          </div>\n        </div>\n\n        <button\n          className=\"size-5 shrink-0 cursor-pointer\"\n          onClick={() => setIsActive(false)}\n        >\n          <RxCross2 className=\"size-5\" />\n          <span className=\"sr-only\">Close</span>\n        </button>\n      </div>\n    </Alert>\n  );\n};\n\nexport default Alert8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-9",
      "type": "registry:component",
      "title": "Alert 9",
      "description": "Alert 9. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [],
      "registryDependencies": [
        "alert",
        "avatar",
        "progress"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState, useEffect } from 'react';\n\nimport {\n  Alert,\n  AlertDescription,\n  AlertTitle,\n} from '@/components/base-ui/alert';\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Progress } from '@/components/base-ui/progress';\n\nconst Alert9 = () => {\n  const [progress, setProgress] = useState(0);\n\n  useEffect(() => {\n    const timer = setTimeout(() => setProgress(50), 100);\n\n    return () => clearTimeout(timer);\n  }, []);\n\n  return (\n    <Alert className=\" flex gap-3\">\n      <Avatar className=\"rounded-full\">\n        <AvatarImage\n          src=\"https://github.com/shadcn.png\"\n          alt=\"Shadcn\"\n          className=\"rounded-full\"\n        />\n        <AvatarFallback className=\"text-xs\">VP</AvatarFallback>\n      </Avatar>\n\n      <div className=\"flex flex-1 flex-col gap-2\">\n        <div className=\"flex flex-col gap-1\">\n          <AlertTitle>@Shadcn assigned you a task</AlertTitle>\n          <AlertDescription>\n            Finalize the dashboard base-ui and submit it before tomorrow’s\n            review meeting.\n          </AlertDescription>\n        </div>\n\n        <Progress\n          value={progress}\n          className=\"*:h-2 *:bg-yellow-600/20 *:dark:bg-yellow-400/20 [&_[data-slot=progress-indicator]]:bg-yellow-600! dark:[&_[data-slot=progress-indicator]]:bg-yellow-400!\"\n          aria-label=\"Task progress\"\n        />\n      </div>\n    </Alert>\n  );\n};\n\nexport default Alert9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-10",
      "type": "registry:component",
      "title": "Alert 10",
      "description": "Alert 10. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-10.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { MdError } from 'react-icons/md';\nimport { RxCross2 } from 'react-icons/rx';\n\nimport {\n  Alert,\n  AlertDescription,\n  AlertTitle,\n} from '@/components/base-ui/alert';\n\nconst Alert10 = () => {\n  const [isActive, setIsActive] = useState(true);\n\n  if (!isActive) return null;\n\n  return (\n    <Alert className=\"border-accent-foreground/20 from-accent text-accent-foreground flex justify-between bg-gradient-to-b to-transparent to-50%\">\n      <MdError className=\"size-4\" />\n      <div className=\"flex flex-1 flex-col gap-1 leading-tight\">\n        <AlertTitle>Confirm your email to get started</AlertTitle>\n        <AlertDescription className=\"text-accent-foreground/60\">\n          A verification link has been sent to your email. Open it to activate\n          your account.\n        </AlertDescription>\n      </div>\n      <button\n        className=\"cursor-pointer self-start\"\n        onClick={() => setIsActive(false)}\n      >\n        <RxCross2 className=\"size-5\" />\n        <span className=\"sr-only\">Close</span>\n      </button>\n    </Alert>\n  );\n};\n\nexport default Alert10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-11",
      "type": "registry:component",
      "title": "Alert 11",
      "description": "Alert 11. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-11.tsx",
          "type": "registry:component",
          "content": "import { FaUserCheck } from 'react-icons/fa';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert11 = () => {\n  return (\n    <Alert className=\"rounded-md border-l-10 border-green-600 bg-green-600/10 text-green-600 dark:border-green-400 dark:bg-green-400/10 dark:text-green-400\">\n      <FaUserCheck className=\"size-4\" />\n      <AlertTitle>Welcome aboard! Your request is approved.</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-12",
      "type": "registry:component",
      "title": "Alert 12",
      "description": "Alert 12. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-12.tsx",
          "type": "registry:component",
          "content": "import { FaUserXmark } from 'react-icons/fa6';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert12 = () => {\n  return (\n    <Alert className=\"border-destructive bg-destructive/10 text-destructive rounded-none border-0 border-l-10\">\n      <FaUserXmark className=\"size-4\" />\n      <AlertTitle>Your request to join the team was declined.</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-13",
      "type": "registry:component",
      "title": "Alert 13",
      "description": "Alert 13. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-13.tsx",
          "type": "registry:component",
          "content": "import { MdError } from 'react-icons/md';\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\n\nconst Alert13 = () => {\n  return (\n    <Alert className=\"flex items-center justify-between [&>svg]:translate-y-0\">\n      <MdError className=\"size-4\" />\n      <AlertTitle className=\"flex-1\">You have a new message!</AlertTitle>\n      <Button variant=\"ghost\" className=\"cursor-pointer rounded-md px-2\">\n        Open\n      </Button>\n    </Alert>\n  );\n};\n\nexport default Alert13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-14",
      "type": "registry:component",
      "title": "Alert 14",
      "description": "Alert 14. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-14.tsx",
          "type": "registry:component",
          "content": "import { GoAlertFill } from 'react-icons/go';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert14 = () => {\n  return (\n    <Alert variant=\"destructive\">\n      <GoAlertFill className=\"size-4\" />\n      <AlertTitle>Oops! Something didn’t work as expected.</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-15",
      "type": "registry:component",
      "title": "Alert 15",
      "description": "Alert 15. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-15.tsx",
          "type": "registry:component",
          "content": "import { GoAlertFill } from 'react-icons/go';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert15 = () => {\n  return (\n    <Alert\n      variant=\"destructive\"\n      className=\"border-destructive bg-destructive/5\"\n    >\n      <GoAlertFill className=\"size-4\" />\n      <AlertTitle>We couldn’t process your payment.</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-16",
      "type": "registry:component",
      "title": "Alert 16",
      "description": "Alert 16. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-16.tsx",
          "type": "registry:component",
          "content": "import { Alert, AlertTitle } from '@/components/base-ui/alert';\n\nconst Alert16 = () => {\n  return (\n    <Alert className=\"bg-accent\">\n      <AlertTitle>You have a new message!</AlertTitle>\n    </Alert>\n  );\n};\n\nexport default Alert16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-17",
      "type": "registry:component",
      "title": "Alert 17",
      "description": "Alert 17. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-17.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert17 = () => {\n  return (\n    <Alert>\n      <MdError className=\"size-4\" />\n      <AlertTitle>Complete your profile</AlertTitle>\n      <AlertDescription>\n        Add your information to personalize your experience.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-18",
      "type": "registry:component",
      "title": "Alert 18",
      "description": "Alert 18. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-18.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert18 = () => {\n  return (\n    <Alert className=\"border-sky-600 bg-sky-600/10 text-sky-600 dark:border-sky-400 dark:bg-sky-400/10 dark:text-sky-400\">\n      <MdError />\n      <AlertTitle>Connect your tools</AlertTitle>\n      <AlertDescription className=\"text-sky-600/80 dark:text-sky-400/80\">\n        Integrate your favorite apps to streamline your workflow.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-19",
      "type": "registry:component",
      "title": "Alert 19",
      "description": "Alert 19. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-19.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { FaCheckCircle } from 'react-icons/fa';\nconst Alert19 = () => {\n  return (\n    <Alert className=\"border-green-600 bg-green-600/10 text-green-600 dark:border-green-400 dark:bg-green-400/10 dark:text-green-400\">\n      <FaCheckCircle />\n      <AlertTitle>Order placed successfully</AlertTitle>\n      <AlertDescription className=\"text-green-600/80 dark:text-green-400/80\">\n        Your order has been confirmed and is being processed.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-20",
      "type": "registry:component",
      "title": "Alert 20",
      "description": "Alert 20. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-20.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert20 = () => {\n  return (\n    <Alert className=\"border-yellow-600 bg-yellow-600/10 text-yellow-600 dark:border-yellow-400 dark:bg-yellow-400/10 dark:text-yellow-400\">\n      <MdError />\n      <AlertTitle>Your connection is unstable</AlertTitle>\n      <AlertDescription className=\"text-yellow-600/80 dark:text-yellow-400/80\">\n        Check your internet connection to avoid interruptions.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-21",
      "type": "registry:component",
      "title": "Alert 21",
      "description": "Alert 21. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-21.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert21 = () => {\n  return (\n    <Alert className=\"bg-primary/5 border-none\">\n      <MdError className=\"size-4\" />\n      <AlertTitle>Supported file formats</AlertTitle>\n      <AlertDescription>\n        You can upload files in PDF, DOCX, JPG, or PNG format for a smooth\n        experience.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-22",
      "type": "registry:component",
      "title": "Alert 22",
      "description": "Alert 22. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-22.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert22 = () => {\n  return (\n    <Alert className=\"border-none bg-sky-600/10 text-sky-600 dark:bg-sky-400/10 dark:text-sky-400\">\n      <MdError className=\"size-4\" />\n      <AlertTitle>Upload gbase-uidelines</AlertTitle>\n      <AlertDescription className=\"text-sky-600/80 dark:text-sky-400/80\">\n        Make sure your files are in PDF, DOCX, JPG, or PNG format and under 20MB\n        in size.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert22;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-23",
      "type": "registry:component",
      "title": "Alert 23",
      "description": "Alert 23. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-23.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { FaCheckCircle } from 'react-icons/fa';\n\nconst Alert23 = () => {\n  return (\n    <Alert className=\"border-none bg-green-600/10 text-green-600 dark:bg-green-400/10 dark:text-green-400\">\n      <FaCheckCircle className=\"size-4\" />\n      <AlertTitle>Upload completed</AlertTitle>\n      <AlertDescription className=\"text-green-600/80 dark:text-green-400/80\">\n        Your file has been added successfully and is ready to use.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert23;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-24",
      "type": "registry:component",
      "title": "Alert 24",
      "description": "Alert 24. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-24.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { GoAlertFill } from 'react-icons/go';\n\nconst Alert24 = () => {\n  return (\n    <Alert className=\"border-none bg-yellow-600/10 text-yellow-600 dark:bg-yellow-400/10 dark:text-yellow-400\">\n      <GoAlertFill className=\"size-4\" />\n      <AlertTitle>Large file detected</AlertTitle>\n      <AlertDescription className=\"text-yellow-600/80 dark:text-yellow-400/80\">\n        This file may take longer to upload. Consider optimizing it for a faster\n        experience.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert24;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-25",
      "type": "registry:component",
      "title": "Alert 25",
      "description": "Alert 25. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-25.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert25 = () => {\n  return (\n    <Alert className=\"bg-destructive/10 text-destructive border-none\">\n      <MdError className=\"size-4\" />\n      <AlertTitle>Action could not be completed</AlertTitle>\n      <AlertDescription className=\"text-destructive/80\">\n        We ran into an issue while processing your request. Please try again\n        shortly.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert25;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-26",
      "type": "registry:component",
      "title": "Alert 26",
      "description": "Alert 26. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-26.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert26 = () => {\n  return (\n    <Alert className=\"bg-primary text-primary-foreground border-none\">\n      <MdError className=\"size-4\" />\n      <AlertTitle>Updating your settings</AlertTitle>\n      <AlertDescription className=\"text-primary-foreground/80\">\n        Your changes will only take effect once you click \"Save changes.\"\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert26;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-27",
      "type": "registry:component",
      "title": "Alert 27",
      "description": "Alert 27. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-27.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { FaCheckCircle } from 'react-icons/fa';\n\nconst Alert27 = () => {\n  return (\n    <Alert className=\"border-none bg-green-600 text-white dark:bg-green-400\">\n      <FaCheckCircle className=\"size-4\" />\n      <AlertTitle>Preferences saved</AlertTitle>\n      <AlertDescription className=\"text-white/80\">\n        Your settings have been updated and applied successfully.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert27;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-28",
      "type": "registry:component",
      "title": "Alert 28",
      "description": "Alert 28. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-28.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { GoAlertFill } from 'react-icons/go';\n\nconst Alert28 = () => {\n  return (\n    <Alert className=\"border-none bg-yellow-600 text-white dark:bg-yellow-400\">\n      <GoAlertFill className=\"size-4\" />\n      <AlertTitle>Incomplete setup</AlertTitle>\n      <AlertDescription className=\"text-white/80\">\n        A few required fields are still empty. Fill them in to continue\n        smoothly.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert28;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-29",
      "type": "registry:component",
      "title": "Alert 29",
      "description": "Alert 29. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-29.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert29 = () => {\n  return (\n    <Alert className=\"border-none bg-blue-600 text-white dark:bg-blue-400\">\n      <MdError className=\"size-4\" />\n      <AlertTitle>Profile visibility enabled</AlertTitle>\n      <AlertDescription className=\"text-white/80\">\n        Your profile can be seen by others, including your basic details and\n        activity.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert29;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-30",
      "type": "registry:component",
      "title": "Alert 30",
      "description": "Alert 30. A component used to display important messages, notifications, or feedback to the user.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "components/watermelon/alert-30.tsx",
          "type": "registry:component",
          "content": "import {\n  Alert,\n  AlertTitle,\n  AlertDescription,\n} from '@/components/base-ui/alert';\nimport { MdError } from 'react-icons/md';\n\nconst Alert30 = () => {\n  return (\n    <Alert className=\"bg-destructive dark:bg-destructive/80 border-none text-white\">\n      <MdError className=\"size-4\" />\n      <AlertTitle>Failed to apply updates</AlertTitle>\n      <AlertDescription className=\"text-white/80\">\n        We couldn’t process your changes. Please refresh and try again.\n      </AlertDescription>\n    </Alert>\n  );\n};\n\nexport default Alert30;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-1",
      "type": "registry:component",
      "title": "Avatar 1",
      "description": "Avatar 1. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-1.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n};\n\nconst profile: Profile = {\n  name: 'Maya Chen',\n  avatar: 'https://assets.watermelon.sh/wm_olivia.png',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar1 = () => {\n  return (\n    <Avatar>\n      <AvatarImage src={profile.avatar} alt={profile.name} />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n    </Avatar>\n  );\n};\n\nexport default Avatar1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-2",
      "type": "registry:component",
      "title": "Avatar 2",
      "description": "Avatar 2. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-2.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n};\n\nconst profile: Profile = {\n  name: 'Alex Rivera',\n  avatar: 'https://assets.watermelon.sh/wm_alex.png',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar2 = () => {\n  return (\n    <Avatar className=\"ring-ring ring-2\">\n      <AvatarImage src={profile.avatar} alt={profile.name} />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n    </Avatar>\n  );\n};\n\nexport default Avatar2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-3",
      "type": "registry:component",
      "title": "Avatar 3",
      "description": "Avatar 3. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-3.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n};\n\nconst profile: Profile = {\n  name: 'Sara Patel',\n  avatar:     'https://assets.watermelon.sh/wm_mia.png',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar3 = () => {\n  return (\n    <Avatar className=\"rounded-sm\">\n      <AvatarImage\n        src={profile.avatar}\n        alt={profile.name}\n        className=\"rounded-sm\"\n      />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n    </Avatar>\n  );\n};\n\nexport default Avatar3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-4",
      "type": "registry:component",
      "title": "Avatar 4",
      "description": "Avatar 4. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-4.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n};\n\nconst profile: Profile = {\n  name: 'Emma Thompson',\n  avatar: 'https://assets.watermelon.sh/wm_emma.png',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar4 = () => {\n  return (\n    <Avatar className=\"size-12\">\n      <AvatarImage src={profile.avatar} alt={profile.name} />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n    </Avatar>\n  );\n};\n\nexport default Avatar4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-5",
      "type": "registry:component",
      "title": "Avatar 5",
      "description": "Avatar 5. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-5.tsx",
          "type": "registry:component",
          "content": "import { Avatar, AvatarFallback } from '@/components/base-ui/avatar';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype Profile = {\n  name: string;\n  role: string;\n};\n\nconst profile: Profile = {\n  name: 'Ethan Cole',\n  role: 'Support Lead',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar5 = () => {\n  return (\n    <TooltipProvider>\n      <Tooltip>\n        <TooltipTrigger>\n          <Avatar>\n            <AvatarFallback className=\"text-xs\">\n              {getInitials(profile.name)}\n            </AvatarFallback>\n          </Avatar>\n        </TooltipTrigger>\n        <TooltipContent className=\"px-2 py-1 text-[11px]\">\n          {profile.name} · {profile.role}\n        </TooltipContent>\n      </Tooltip>\n    </TooltipProvider>\n  );\n};\n\nexport default Avatar5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-6",
      "type": "registry:component",
      "title": "Avatar 6",
      "description": "Avatar 6. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-6.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { BriefcaseIcon } from 'lucide-react';\n\nimport { Avatar, AvatarFallback } from '@/components/base-ui/avatar';\n\ntype Profile = {\n  label: string;\n  icon: LucideIcon;\n};\n\nconst profile: Profile = {\n  label: 'Operations',\n  icon: BriefcaseIcon,\n};\n\nconst Avatar6 = () => {\n  const Icon = profile.icon;\n\n  return (\n    <Avatar>\n      <AvatarFallback className=\"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\">\n        <Icon className=\"size-4\" />\n      </AvatarFallback>\n    </Avatar>\n  );\n};\n\nexport default Avatar6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-7",
      "type": "registry:component",
      "title": "Avatar 7",
      "description": "Avatar 7. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-7.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarBadge,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n  status: string;\n};\n\nconst profile: Profile = {\n  name: 'Ben',\n  avatar: 'https://assets.watermelon.sh/wm_ben.png',\n  status: 'Available',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar7 = () => {\n  return (\n    <Avatar>\n      <AvatarImage src={profile.avatar} alt={profile.name} />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n      <AvatarBadge className=\"bg-emerald-500\">\n        <span className=\"sr-only\">{profile.status}</span>\n      </AvatarBadge>\n    </Avatar>\n  );\n};\n\nexport default Avatar7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-8",
      "type": "registry:component",
      "title": "Avatar 8",
      "description": "Avatar 8. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-8.tsx",
          "type": "registry:component",
          "content": "import { CheckIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarBadge,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n};\n\nconst profile: Profile = {\n  name: 'Josh',\n  avatar: 'https://assets.watermelon.sh/wm_josh.png',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar8 = () => {\n  return (\n    <Avatar className=\"ring-offset-background ring-2 ring-emerald-600 ring-offset-2 dark:ring-emerald-400\">\n      <AvatarImage src={profile.avatar} alt={profile.name} />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n      <AvatarBadge className=\"bg-emerald-600 text-white dark:bg-emerald-400\">\n        <CheckIcon className=\"size-2.5\" />\n      </AvatarBadge>\n    </Avatar>\n  );\n};\n\nexport default Avatar8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-9",
      "type": "registry:component",
      "title": "Avatar 9",
      "description": "Avatar 9. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-9.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarBadge,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n  status: string;\n};\n\nconst profile: Profile = {\n  name: 'Josh',\n  avatar: 'https://assets.watermelon.sh/wm_josh.png',\n  status: 'Available',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar9 = () => {\n  return (\n    <Avatar className=\"rounded-sm\">\n      <AvatarImage\n        src={profile.avatar}\n        alt={profile.name}\n        className=\"rounded-sm\"\n      />\n      <AvatarFallback className=\"text-xs\">\n        {getInitials(profile.name)}\n      </AvatarFallback>\n      <AvatarBadge className=\"top-0 right-0 bottom-auto translate-x-1/4 -translate-y-1/4 bg-amber-600 dark:bg-amber-400\">\n        <span className=\"sr-only\">{profile.status}</span>\n      </AvatarBadge>\n    </Avatar>\n  );\n};\n\nexport default Avatar9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-10",
      "type": "registry:component",
      "title": "Avatar 10",
      "description": "Avatar 10. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-10.tsx",
          "type": "registry:component",
          "content": "import { PlusCircleIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n  actionLabel: string;\n};\n\nconst profile: Profile = {\n  name: 'Emma',\n  avatar: 'https://assets.watermelon.sh/wm_emma.png',\n  actionLabel: 'Invite',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar10 = () => {\n  return (\n    <div className=\"relative w-fit\">\n      <Avatar className=\"size-10\">\n        <AvatarImage src={profile.avatar} alt={profile.name} />\n        <AvatarFallback className=\"text-xs\">\n          {getInitials(profile.name)}\n        </AvatarFallback>\n      </Avatar>\n      <button className=\"focus-visible:ring-ring/50 absolute -right-1 -bottom-1 inline-flex cursor-pointer items-center justify-center rounded-full focus-visible:ring-[3px] focus-visible:outline-none\">\n        <PlusCircleIcon className=\"text-background size-5 fill-slate-400\" />\n        <span className=\"sr-only\">{profile.actionLabel}</span>\n      </button>\n    </div>\n  );\n};\n\nexport default Avatar10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-11",
      "type": "registry:component",
      "title": "Avatar 11",
      "description": "Avatar 11. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-11.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Badge } from '@/components/base-ui/badge';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n  count: number;\n};\n\nconst profile: Profile = {\n  name: 'Olivia',\n  avatar: 'https://assets.watermelon.sh/wm_olivia.png',\n  count: 12,\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar11 = () => {\n  return (\n    <div className=\"relative w-fit\">\n      <Avatar className=\"size-10 rounded-full overflow-hidden\">\n        <AvatarImage\n          src={profile.avatar}\n          alt={profile.name}\n        />\n        <AvatarFallback className=\"text-xs\">\n          {getInitials(profile.name)}\n        </AvatarFallback>\n      </Avatar>\n      <Badge className=\"absolute -top-2.5 -right-2.5 h-5 min-w-5 bg-slate-700 px-1 text-white tabular-nums dark:bg-slate-200 dark:text-slate-900\">\n        {profile.count}\n      </Badge>\n    </div>\n  );\n};\n\nexport default Avatar11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-12",
      "type": "registry:component",
      "title": "Avatar 12",
      "description": "Avatar 12. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-12.tsx",
          "type": "registry:component",
          "content": "import { BadgeCheckIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  avatar: string;\n  status: string;\n};\n\nconst profile: Profile = {\n  name: 'Olivia',\n  avatar: 'https://assets.watermelon.sh/wm_olivia.png',\n  status: 'Verified',\n};\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar12 = () => {\n  return (\n    <div className=\"relative w-fit\">\n      <Avatar className=\"ring-border/70 size-10 ring-1\">\n        <AvatarImage src={profile.avatar} alt={profile.name} />\n        <AvatarFallback className=\"text-xs\">\n          {getInitials(profile.name)}\n        </AvatarFallback>\n      </Avatar>\n      <span className=\"absolute -top-1 -right-1\">\n        <span className=\"sr-only\">{profile.status}</span>\n        <BadgeCheckIcon className=\"text-background size-4.5 fill-sky-500\" />\n      </span>\n    </div>\n  );\n};\n\nexport default Avatar12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-13",
      "type": "registry:component",
      "title": "Avatar 13",
      "description": "Avatar 13. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-13.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar13 = () => {\n  return (\n    <TooltipProvider>\n      <div className=\"flex -space-x-2.5\">\n        {avatars.map((avatar) => (\n          <Tooltip key={avatar.name}>\n            <TooltipTrigger>\n              <Avatar className=\"ring-background shadow-sm ring-2\">\n                <AvatarImage src={avatar.src} alt={avatar.name} />\n                <AvatarFallback className=\"text-xs\">\n                  {getInitials(avatar.name)}\n                </AvatarFallback>\n              </Avatar>\n            </TooltipTrigger>\n            <TooltipContent className=\"px-2 py-1 text-[11px]\">\n              {avatar.name}\n            </TooltipContent>\n          </Tooltip>\n        ))}\n      </div>\n    </TooltipProvider>\n  );\n};\n\nexport default Avatar13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-14",
      "type": "registry:component",
      "title": "Avatar 14",
      "description": "Avatar 14. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-14.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarGroup,\n  AvatarGroupCount,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst overflowCount = 6;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar14 = () => {\n  return (\n    <AvatarGroup>\n      {avatars.map((avatar) => (\n        <Avatar key={avatar.name}>\n          <AvatarImage src={avatar.src} alt={avatar.name} />\n          <AvatarFallback className=\"text-xs\">\n            {getInitials(avatar.name)}\n          </AvatarFallback>\n        </Avatar>\n      ))}\n      <AvatarGroupCount className=\"text-xs\">+{overflowCount}</AvatarGroupCount>\n    </AvatarGroup>\n  );\n};\n\nexport default Avatar14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-15",
      "type": "registry:component",
      "title": "Avatar 15",
      "description": "Avatar 15. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-15.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar15 = () => {\n  return (\n    <div className=\"flex -space-x-2.5\">\n      {avatars.map((avatar) => (\n        <Avatar\n          key={avatar.name}\n          className=\"ring-background size-12 shadow-sm ring-2\"\n        >\n          <AvatarImage src={avatar.src} alt={avatar.name} />\n          <AvatarFallback>{getInitials(avatar.name)}</AvatarFallback>\n        </Avatar>\n      ))}\n    </div>\n  );\n};\n\nexport default Avatar15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-16",
      "type": "registry:component",
      "title": "Avatar 16",
      "description": "Avatar 16. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-16.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar16 = () => {\n  return (\n    <div className=\"flex -space-x-2\">\n      {avatars.map((avatar) => (\n        <Avatar\n          key={avatar.name}\n          className=\"ring-background ring-2 transition-all duration-300 ease-in-out hover:z-1 hover:-translate-y-1 hover:shadow-lg\"\n        >\n          <AvatarImage src={avatar.src} alt={avatar.name} />\n          <AvatarFallback className=\"text-xs\">\n            {getInitials(avatar.name)}\n          </AvatarFallback>\n        </Avatar>\n      ))}\n    </div>\n  );\n};\n\nexport default Avatar16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-17",
      "type": "registry:component",
      "title": "Avatar 17",
      "description": "Avatar 17. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-17.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar17 = () => {\n  return (\n    <div className=\"flex -space-x-2 hover:space-x-1\">\n      {avatars.map((avatar) => (\n        <Avatar\n          key={avatar.name}\n          className=\"ring-background ring-2 transition-all duration-300 ease-in-out\"\n        >\n          <AvatarImage src={avatar.src} alt={avatar.name} />\n          <AvatarFallback className=\"text-xs\">\n            {getInitials(avatar.name)}\n          </AvatarFallback>\n        </Avatar>\n      ))}\n    </div>\n  );\n};\n\nexport default Avatar17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-18",
      "type": "registry:component",
      "title": "Avatar 18",
      "description": "Avatar 18. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-18.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar18 = () => {\n  return (\n    <TooltipProvider>\n      <div className=\"group flex\">\n        {avatars.map((avatar) => (\n          <Tooltip key={avatar.name}>\n            <TooltipTrigger className=\"-ml-2 transition-[margin] duration-300 ease-in-out group-hover:ml-1 first:ml-0\">\n              <Avatar className=\"ring-background ring-2 transition-all duration-300 ease-in-out\">\n                <AvatarImage src={avatar.src} alt={avatar.name} />\n                <AvatarFallback className=\"text-xs\">\n                  {getInitials(avatar.name)}\n                </AvatarFallback>\n              </Avatar>\n            </TooltipTrigger>\n            <TooltipContent className=\"px-2 py-1 text-[11px]\">\n              {avatar.name}\n            </TooltipContent>\n          </Tooltip>\n        ))}\n      </div>\n    </TooltipProvider>\n  );\n};\n\nexport default Avatar18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-19",
      "type": "registry:component",
      "title": "Avatar 19",
      "description": "Avatar 19. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "dropdown-menu",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-19.tsx",
          "type": "registry:component",
          "content": "import { PlusIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar19 = () => {\n  return (\n    <TooltipProvider>\n      <div className=\"flex -space-x-2\">\n        {avatars.slice(0, 3).map((avatar) => (\n          <Tooltip key={avatar.name}>\n            <TooltipTrigger>\n              <Avatar className=\"ring-background ring-2\">\n                <AvatarImage src={avatar.src} alt={avatar.name} />\n                <AvatarFallback className=\"text-xs\">\n                  {getInitials(avatar.name)}\n                </AvatarFallback>\n              </Avatar>\n            </TooltipTrigger>\n            <TooltipContent className=\"px-2 py-1 text-[11px]\">\n              {avatar.name}\n            </TooltipContent>\n          </Tooltip>\n        ))}\n        <DropdownMenu>\n          <Tooltip>\n            <TooltipTrigger>\n              <DropdownMenuTrigger className=\"bg-muted has-focus-visible:ring-ring/50 ring-background flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full ring-2\">\n                <PlusIcon className=\"size-4\" />\n                <span className=\"sr-only\">Add</span>\n              </DropdownMenuTrigger>\n            </TooltipTrigger>\n            <TooltipContent className=\"px-2 py-1 text-[11px]\">\n              More people\n            </TooltipContent>\n          </Tooltip>\n          <DropdownMenuContent>\n            {avatars.slice(3).map((avatar) => (\n              <DropdownMenuItem key={avatar.name}>\n                <Avatar>\n                  <AvatarImage src={avatar.src} alt={avatar.name} />\n                  <AvatarFallback className=\"text-xs\">\n                    {getInitials(avatar.name)}\n                  </AvatarFallback>\n                </Avatar>\n                <span>{avatar.name}</span>\n              </DropdownMenuItem>\n            ))}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      </div>\n    </TooltipProvider>\n  );\n};\n\nexport default Avatar19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-20",
      "type": "registry:component",
      "title": "Avatar 20",
      "description": "Avatar 20. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-20.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst overflowCount = 3;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar20 = () => {\n  return (\n    <TooltipProvider>\n      <div className=\"bg-background border-border/70 w-fit flex items-center rounded-full border px-1.5 py-1 shadow-md\">\n        <div className=\"flex -space-x-2.5\">\n          {avatars.map((avatar) => (\n            <Tooltip key={avatar.name}>\n              <TooltipTrigger>\n                <Avatar className=\"ring-background shadow-sm ring-2\">\n                  <AvatarImage src={avatar.src} alt={avatar.name} />\n                  <AvatarFallback className=\"text-xs\">\n                    {getInitials(avatar.name)}\n                  </AvatarFallback>\n                </Avatar>\n              </TooltipTrigger>\n              <TooltipContent className=\"px-2 py-1 text-[11px]\">\n                {avatar.name}\n              </TooltipContent>\n            </Tooltip>\n          ))}\n        </div>\n        <Tooltip>\n          <TooltipTrigger>\n            <span className=\"text-muted-foreground bg-muted/50 flex items-center justify-center rounded-full px-2.5 py-1 text-xs shadow-none\">\n              +{overflowCount}\n            </span>\n          </TooltipTrigger>\n          <TooltipContent className=\"px-2 py-1 text-[11px]\">\n            More teammates\n          </TooltipContent>\n        </Tooltip>\n      </div>\n    </TooltipProvider>\n  );\n};\n\nexport default Avatar20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar-21",
      "type": "registry:component",
      "title": "Avatar 21",
      "description": "Avatar 21. Displays images, icons, or text in a circular or rounded shape.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/avatar-21.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\n\ntype Profile = {\n  name: string;\n  src: string;\n};\n\nconst avatars: readonly Profile[] = [\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    name: 'Mark',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    name: 'Olivia',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    name: 'Josh',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_emma.png',\n    name: 'Emma',\n  },\n] as const;\n\nconst getInitials = (name: string) =>\n  name\n    .split(/\\s+/)\n    .map((word) => word.slice(0, 1))\n    .join('');\n\nconst Avatar21 = () => {\n  return (\n    <div className=\"bg-background border-border/70 flex flex-wrap items-center w-fit justify-center rounded-full border px-1.5 py-1 shadow-sm\">\n      <div className=\"flex -space-x-1.5\">\n        {avatars.map((avatar) => (\n          <Avatar key={avatar.name} className=\"ring-background size-6 ring-2\">\n            <AvatarImage src={avatar.src} alt={avatar.name} />\n            <AvatarFallback className=\"text-xs\">\n              {getInitials(avatar.name)}\n            </AvatarFallback>\n          </Avatar>\n        ))}\n      </div>\n      <p className=\"text-muted-foreground px-2.5 text-xs\">\n        Used by <strong className=\"text-foreground font-medium\">12K+</strong>{' '}\n        product teams.\n      </p>\n    </div>\n  );\n};\n\nexport default Avatar21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-1",
      "type": "registry:component",
      "title": "Badge 1",
      "description": "Badge 1. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-1.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge1 = () => {\n  return <Badge variant=\"default\">Default</Badge>;\n};\n\nexport default Badge1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-2",
      "type": "registry:component",
      "title": "Badge 2",
      "description": "Badge 2. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-2.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge2 = () => {\n  return <Badge variant=\"secondary\">Secondary</Badge>;\n};\n\nexport default Badge2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-3",
      "type": "registry:component",
      "title": "Badge 3",
      "description": "Badge 3. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-3.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge3 = () => {\n  return <Badge variant=\"outline\">Outline</Badge>;\n};\n\nexport default Badge3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-4",
      "type": "registry:component",
      "title": "Badge 4",
      "description": "Badge 4. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-4.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge4 = () => {\n  return <Badge className=\"rounded-lg\">Rounded</Badge>;\n};\n\nexport default Badge4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-5",
      "type": "registry:component",
      "title": "Badge 5",
      "description": "Badge 5. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-5.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge5 = () => {\n  return <Badge className=\"px-4 py-2\">Lg</Badge>;\n};\n\nexport default Badge5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-6",
      "type": "registry:component",
      "title": "Badge 6",
      "description": "Badge 6. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-6.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge6 = () => {\n  return <Badge className=\"px-2 py-1\">Sm</Badge>;\n};\n\nexport default Badge6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-7",
      "type": "registry:component",
      "title": "Badge 7",
      "description": "Badge 7. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-7.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge7 = () => {\n  return (\n    <Badge variant=\"ghost\">\n      <span className=\"bg-primary size-2 rounded-full\" aria-hidden=\"true\" />\n      Dot Badge\n    </Badge>\n  );\n};\n\nexport default Badge7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-8",
      "type": "registry:component",
      "title": "Badge 8",
      "description": "Badge 8. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-8.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge8 = () => {\n  return <Badge variant=\"destructive\">Destructive</Badge>;\n};\n\nexport default Badge8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-9",
      "type": "registry:component",
      "title": "Badge 9",
      "description": "Badge 9. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-9.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge9 = () => {\n  return <Badge className=\"h-5 min-w-5 rounded-sm px-2 tabular-nums\">67</Badge>;\n};\n\nexport default Badge9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-10",
      "type": "registry:component",
      "title": "Badge 10",
      "description": "Badge 10. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-10.tsx",
          "type": "registry:component",
          "content": "import { FaRegStar } from 'react-icons/fa';\n\nimport { Badge } from '@/components/base-ui/badge';\n\nconst Badge10 = () => {\n  return (\n    <Badge>\n      <FaRegStar className=\"size-4\" />\n      Github\n    </Badge>\n  );\n};\n\nexport default Badge10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-11",
      "type": "registry:component",
      "title": "Badge 11",
      "description": "Badge 11. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-11.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { RxCross2 } from 'react-icons/rx';\n\nconst Badge11 = () => {\n  const [isActive, setIsActive] = useState(true);\n\n  if (!isActive) return null;\n\n  return (\n    <Badge>\n      Closable\n      <button\n        className=\"focus-visible:border-ring focus-visible:ring-ring/50 text-primary-foreground/60 hover:text-primary-foreground -my-px -ms-px -me-1 inline-flex size-4 shrink-0 cursor-pointer items-center justify-center rounded-lg p-0 transition-[color,box-shadow] outline-none focus-visible:ring-[3px]\"\n        aria-label=\"Close\"\n        onClick={() => setIsActive(false)}\n      >\n        <RxCross2 className=\"size-3\" aria-hidden=\"true\" />\n      </button>\n    </Badge>\n  );\n};\n\nexport default Badge11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-12",
      "type": "registry:component",
      "title": "Badge 12",
      "description": "Badge 12. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-12.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge12 = () => {\n  return (\n    <Badge className=\"border-none bg-sky-600/10 text-sky-600 focus-visible:ring-sky-600/20 focus-visible:outline-none dark:bg-sky-400/10 dark:text-sky-400 dark:focus-visible:ring-sky-400/40 [a&]:hover:bg-sky-600/5 dark:[a&]:hover:bg-sky-400/5\">\n      <span\n        className=\"size-2 rounded-full bg-sky-600 dark:bg-sky-400\"\n        aria-hidden=\"true\"\n      />\n      In Progress\n    </Badge>\n  );\n};\n\nexport default Badge12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-13",
      "type": "registry:component",
      "title": "Badge 13",
      "description": "Badge 13. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-13.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge13 = () => {\n  return (\n    <Badge className=\"bg-destructive/10 [a&]:hover:bg-destructive/5 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive border-none focus-visible:outline-none\">\n      <span className=\"bg-destructive size-2 rounded-full\" aria-hidden=\"true\" />\n      Cancelled\n    </Badge>\n  );\n};\n\nexport default Badge13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-14",
      "type": "registry:component",
      "title": "Badge 14",
      "description": "Badge 14. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-14.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { Badge } from '@/components/base-ui/badge';\n\nimport { FiArrowRight } from 'react-icons/fi';\n\nconst Badge14 = () => {\n  return (\n    <Badge asChild>\n      <a\n        href=\"#\"\n        className=\"group focus-visible:ring-ring/50 inline-flex items-center gap-1 focus-visible:ring-2 focus-visible:outline-0\"\n      >\n        Link\n        <FiArrowRight className=\"size-3 transition-transform duration-200 group-hover:translate-x-1\" />\n      </a>\n    </Badge>\n  );\n};\n\nexport default Badge14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-15",
      "type": "registry:component",
      "title": "Badge 15",
      "description": "Badge 15. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-15.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge15 = () => {\n  return (\n    <Badge className=\"border-none bg-green-600/10 text-green-600 focus-visible:ring-green-600/20 focus-visible:outline-none dark:bg-green-400/10 dark:text-green-400 dark:focus-visible:ring-green-400/40\">\n      <span\n        className=\"size-2 rounded-full bg-green-600 dark:bg-green-400\"\n        aria-hidden=\"true\"\n      />\n      Done\n    </Badge>\n  );\n};\n\nexport default Badge15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-16",
      "type": "registry:component",
      "title": "Badge 16",
      "description": "Badge 16. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-16.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge16 = () => {\n  return (\n    <Badge variant=\"outline\" className=\"rounded-md py-3.5 pr-2 pl-0.5\">\n      <img\n        src=\"https://github.com/shadcn.png\"\n        alt=\"Shadcn\"\n        className=\"size-6 rounded-sm\"\n      />\n      Shadcn\n    </Badge>\n  );\n};\n\nexport default Badge16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-17",
      "type": "registry:component",
      "title": "Badge 17",
      "description": "Badge 17. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-17.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport { MdError } from 'react-icons/md';\n\nconst Badge17 = () => {\n  return (\n    <Badge\n      variant=\"outline\"\n      className=\"rounded-sm border-sky-600 bg-sky-600/10 text-sky-600 dark:border-sky-400 dark:bg-sky-400/10 dark:text-sky-400 [a&]:hover:bg-sky-600/10\"\n    >\n      <MdError className=\"size-3\" />\n      Pending\n    </Badge>\n  );\n};\n\nexport default Badge17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-18",
      "type": "registry:component",
      "title": "Badge 18",
      "description": "Badge 18. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-18.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport { GoCheckCircleFill } from 'react-icons/go';\n\nconst Badge18 = () => {\n  return (\n    <Badge\n      variant=\"outline\"\n      className=\"rounded-sm border-green-600 bg-green-600/10 text-green-600 dark:border-green-400 dark:bg-green-400/10 dark:text-green-400\"\n    >\n      <GoCheckCircleFill className=\"size-3\" />\n      Done\n    </Badge>\n  );\n};\n\nexport default Badge18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-19",
      "type": "registry:component",
      "title": "Badge 19",
      "description": "Badge 19. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-19.tsx",
          "type": "registry:component",
          "content": "import { BsBanFill } from 'react-icons/bs';\n\nimport { Badge } from '@/components/base-ui/badge';\n\nconst Badge19 = () => {\n  return (\n    <Badge\n      variant=\"outline\"\n      className=\"text-destructive bg-destructive/10 border-destructive rounded-sm\"\n    >\n      <BsBanFill className=\"size-3\" />\n      Error\n    </Badge>\n  );\n};\n\nexport default Badge19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-20",
      "type": "registry:component",
      "title": "Badge 20",
      "description": "Badge 20. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-20.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge20 = () => {\n  return (\n    <div className=\"flex items-center justify-center rounded-full bg-gradient-to-r from-orange-400 via-rose-500 to-fuchsia-600 p-0.5 w-fit\">\n      <Badge className=\"bg-background hover:bg-background text-foreground border-none\">\n        Outline Gradient\n      </Badge>\n    </div>\n  );\n};\n\nexport default Badge20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-21",
      "type": "registry:component",
      "title": "Badge 21",
      "description": "Badge 21. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-21.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\n\nconst Badge21 = () => {\n  return (\n    <Badge className=\"rounded-sm border-transparent bg-gradient-to-r from-orange-400 via-rose-500 to-fuchsia-600 [background-size:105%] bg-center text-white\">\n      Linear Gradient\n    </Badge>\n  );\n};\n\nexport default Badge21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-22",
      "type": "registry:component",
      "title": "Badge 22",
      "description": "Badge 22. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-22.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { GoCheckCircleFill } from 'react-icons/go';\n\nconst Badge22 = () => {\n  const [selected, setSelected] = useState(false);\n\n  return (\n    <Badge\n      variant={selected ? 'secondary' : 'outline'}\n      onClick={() => setSelected((prev) => !prev)}\n      className=\" focus-visible:ring-ring/50 relative inline-flex cursor-pointer items-center justify-center gap-1 rounded-lg outline-none select-none focus-visible:ring-2\"\n    >\n      {selected && (\n        <GoCheckCircleFill\n          className=\"size-3 translate-y-[0.5px] text-green-600 dark:text-green-400\"\n          aria-hidden=\"true\"\n        />\n      )}\n\n      <span>{selected ? 'Selected' : 'Selectable'}</span>\n    </Badge>\n  );\n};\n\nexport default Badge22;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-23",
      "type": "registry:component",
      "title": "Badge 23",
      "description": "Badge 23. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "avatar",
        "badge"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-23.tsx",
          "type": "registry:component",
          "content": "import { FaShoppingCart } from 'react-icons/fa';\n\nimport { Avatar, AvatarFallback } from '@/components/base-ui/avatar';\nimport { Badge } from '@/components/ui/badge';\n\nconst Badge23 = () => {\n  return (\n    <div className=\"relative w-fit\">\n      <Avatar className=\"size-9 rounded-sm after:border-none\">\n        <AvatarFallback className=\"rounded-sm\">\n          <FaShoppingCart className=\"size-5\" />\n        </AvatarFallback>\n      </Avatar>\n      <Badge className=\"absolute -top-2.5 -right-2.5 h-5 min-w-5 px-1 tabular-nums\">\n        8\n      </Badge>\n    </div>\n  );\n};\n\nexport default Badge23;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge-24",
      "type": "registry:component",
      "title": "Badge 24",
      "description": "Badge 24. A small visual indicator used to highlight status, counts, or labels.",
      "dependencies": [],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "components/watermelon/badge-24.tsx",
          "type": "registry:component",
          "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/base-ui/avatar';\n\nconst Badge24 = () => {\n  return (\n    <div className=\"relative w-fit\">\n      <Avatar className=\"size-10\">\n        <AvatarImage\n          src=\"https://github.com/vanshpatel.png\"\n          alt=\"Vansh Patel\"\n        />\n        <AvatarFallback>VP</AvatarFallback>\n      </Avatar>\n      <span className=\"border-background absolute -right-0.5 -bottom-0.5 size-3 rounded-full border-2 bg-green-600 dark:bg-green-400\">\n        <span className=\"sr-only\">Online</span>\n      </span>\n    </div>\n  );\n};\n\nexport default Badge24;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-1",
      "type": "registry:component",
      "title": "Breadcrumb 1",
      "description": "Breadcrumb 1. Displays the hierarchical structure of a website or application.",
      "dependencies": [],
      "registryDependencies": [
        "breadcrumb"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-1.tsx",
          "type": "registry:component",
          "content": "import {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\n\ntype BreadcrumbSegment =\n  | {\n      label: string;\n      href: string;\n      current?: false;\n    }\n  | {\n      label: string;\n      current: true;\n      href?: never;\n    };\n\nconst segments: readonly BreadcrumbSegment[] = [\n  { label: 'Dashboard', href: '#' },\n  { label: 'Campaigns', href: '#' },\n  { label: 'Spring Launch', current: true },\n] as const;\n\nconst Breadcrumb1 = () => {\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"border-border/70 bg-background w-full max-w-full justify-center rounded-2xl border px-2 py-1.5 shadow-sm sm:w-fit sm:justify-start sm:rounded-full sm:px-3\">\n        {segments.map((segment, index) => (\n          <BreadcrumbItem key={segment.label}>\n            {'href' in segment ? (\n              <BreadcrumbLink href={segment.href}>\n                {segment.label}\n              </BreadcrumbLink>\n            ) : (\n              <BreadcrumbPage>{segment.label}</BreadcrumbPage>\n            )}\n            {index < segments.length - 1 ? <BreadcrumbSeparator /> : null}\n          </BreadcrumbItem>\n        ))}\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-2",
      "type": "registry:component",
      "title": "Breadcrumb 2",
      "description": "Breadcrumb 2. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "breadcrumb"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-2.tsx",
          "type": "registry:component",
          "content": "import { LayoutGridIcon } from 'lucide-react';\n\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\n\ntype BreadcrumbSegment =\n  | {\n      label: string;\n      href: string;\n      current?: false;\n    }\n  | {\n      label: string;\n      current: true;\n      href?: never;\n    };\n\nconst segments: readonly BreadcrumbSegment[] = [\n  { label: 'Portal', href: '#' },\n  { label: 'Orders', href: '#' },\n  { label: 'Shipment Status', current: true },\n] as const;\n\nconst Breadcrumb2 = () => {\n  const [home, ...rest] = segments;\n\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"px-1 py-1\">\n        {'href' in home ? (\n          <BreadcrumbItem>\n            <BreadcrumbLink\n              href={home.href}\n              className=\"flex items-center gap-2 font-medium\"\n            >\n              <LayoutGridIcon className=\"size-3.5\" />\n              {home.label}\n            </BreadcrumbLink>\n          </BreadcrumbItem>\n        ) : null}\n\n        {rest.map((segment) => (\n          <BreadcrumbItem key={segment.label}>\n            <BreadcrumbSeparator className=\"text-muted-foreground/70\">\n              /\n            </BreadcrumbSeparator>\n            {'href' in segment ? (\n              <BreadcrumbLink\n                href={segment.href}\n                className=\"text-muted-foreground\"\n              >\n                {segment.label}\n              </BreadcrumbLink>\n            ) : (\n              <BreadcrumbPage className=\"font-medium underline underline-offset-4\">\n                {segment.label}\n              </BreadcrumbPage>\n            )}\n          </BreadcrumbItem>\n        ))}\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-3",
      "type": "registry:component",
      "title": "Breadcrumb 3",
      "description": "Breadcrumb 3. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "breadcrumb"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-3.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport {\n  ChevronRightIcon,\n  FileTextIcon,\n  FolderIcon,\n  HomeIcon,\n} from 'lucide-react';\n\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\n\ntype BreadcrumbSegment =\n  | {\n      label: string;\n      href: string;\n      icon: LucideIcon;\n      current?: false;\n    }\n  | {\n      label: string;\n      icon: LucideIcon;\n      current: true;\n      href?: never;\n    };\n\nconst segments: readonly BreadcrumbSegment[] = [\n  { label: 'Home', href: '#', icon: HomeIcon },\n  { label: 'Reports', href: '#', icon: FolderIcon },\n  { label: 'Revenue Summary', icon: FileTextIcon, current: true },\n] as const;\n\nconst Breadcrumb3 = () => {\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"gap-1.5 text-sm\">\n        {segments.map((segment, index) => {\n          const Icon = segment.icon;\n\n          return (\n            <BreadcrumbItem key={segment.label}>\n              {'href' in segment ? (\n                <BreadcrumbLink\n                  href={segment.href}\n                  className=\"hover:text-foreground flex items-center gap-1.5 rounded-sm px-1 py-0.5\"\n                >\n                  <Icon className=\"text-muted-foreground size-3.5\" />\n                  {index === 0 ? (\n                    <span className=\"text-sm\">Home</span>\n                  ) : (\n                    segment.label\n                  )}\n                </BreadcrumbLink>\n              ) : (\n                <BreadcrumbPage className=\"flex items-center gap-1.5 rounded-sm px-1 py-0.5 font-medium\">\n                  <Icon className=\"text-foreground/80 size-3.5\" />\n                  {segment.label}\n                </BreadcrumbPage>\n              )}\n              {index < segments.length - 1 ? (\n                <BreadcrumbSeparator className=\"text-muted-foreground/70\">\n                  <ChevronRightIcon />\n                </BreadcrumbSeparator>\n              ) : null}\n            </BreadcrumbItem>\n          );\n        })}\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-4",
      "type": "registry:component",
      "title": "Breadcrumb 4",
      "description": "Breadcrumb 4. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "breadcrumb"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-4.tsx",
          "type": "registry:component",
          "content": "import { DotIcon } from 'lucide-react';\n\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\n\ntype BreadcrumbSegment =\n  | {\n      label: string;\n      href: string;\n      current?: false;\n    }\n  | {\n      label: string;\n      current: true;\n      href?: never;\n    };\n\nconst segments: readonly BreadcrumbSegment[] = [\n  { label: 'Library', href: '#' },\n  { label: 'Resources', href: '#' },\n  { label: 'Design Notes', current: true },\n] as const;\n\nconst Breadcrumb4 = () => {\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"gap-1.5 text-sm\">\n        {segments.map((segment, index) => (\n          <BreadcrumbItem key={segment.label}>\n            {'href' in segment ? (\n              <BreadcrumbLink\n                href={segment.href}\n                className=\"hover:text-foreground rounded-sm px-1.5 py-0.5\"\n              >\n                {segment.label}\n              </BreadcrumbLink>\n            ) : (\n              <BreadcrumbPage className=\"bg-muted/40 rounded-sm px-1.5 py-0.5 font-medium\">\n                {segment.label}\n              </BreadcrumbPage>\n            )}\n            {index < segments.length - 1 ? (\n              <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n                <DotIcon className=\"size-3.5\" />\n              </BreadcrumbSeparator>\n            ) : null}\n          </BreadcrumbItem>\n        ))}\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-5",
      "type": "registry:component",
      "title": "Breadcrumb 5",
      "description": "Breadcrumb 5. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "breadcrumb"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-5.tsx",
          "type": "registry:component",
          "content": "import { ArrowRightIcon } from 'lucide-react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\n\ntype BreadcrumbSegment =\n  | {\n      label: string;\n      href: string;\n      current?: false;\n    }\n  | {\n      label: string;\n      current: true;\n      href?: never;\n    };\n\nconst segments: readonly BreadcrumbSegment[] = [\n  { label: 'Workspace', href: '#' },\n  { label: 'Campaigns', href: '#' },\n  { label: 'Launch Assets', current: true },\n] as const;\n\nconst Breadcrumb5 = () => {\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"gap-1.5\">\n        {segments.map((segment, index) => (\n          <BreadcrumbItem key={segment.label}>\n            {'href' in segment ? (\n              <BreadcrumbLink href={segment.href}>\n                <Badge\n                  variant=\"outline\"\n                  className=\"border-border/70 text-muted-foreground hover:text-foreground px-2.5\"\n                >\n                  {segment.label}\n                </Badge>\n              </BreadcrumbLink>\n            ) : (\n              <BreadcrumbPage>\n                <Badge\n                  variant=\"outline\"\n                  className=\"border-foreground/20 bg-muted/30 text-foreground px-2.5 font-medium\"\n                >\n                  {segment.label}\n                </Badge>\n              </BreadcrumbPage>\n            )}\n            {index < segments.length - 1 ? (\n              <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n                <ArrowRightIcon className=\"size-3.5\" />\n              </BreadcrumbSeparator>\n            ) : null}\n          </BreadcrumbItem>\n        ))}\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-6",
      "type": "registry:component",
      "title": "Breadcrumb 6",
      "description": "Breadcrumb 6. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "breadcrumb",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-6.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { ChevronDownIcon, ChevronRightIcon, HomeIcon } from 'lucide-react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\ntype LinkSegment = {\n  label: string;\n  href: string;\n  icon?: LucideIcon;\n};\n\nconst rootSegment: LinkSegment = {\n  label: 'Home',\n  href: '#',\n  icon: HomeIcon,\n};\n\nconst sectionSegment: LinkSegment = {\n  label: 'Projects',\n  href: '#',\n};\n\nconst currentSegment = {\n  label: 'Design System',\n  options: ['Tokens', 'Components', 'Patterns'],\n} as const;\n\nconst Breadcrumb6 = () => {\n  const RootIcon = rootSegment.icon;\n\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"gap-1.5\">\n        <BreadcrumbItem>\n          <BreadcrumbLink href={rootSegment.href}>\n            <Badge\n              variant=\"outline\"\n              className=\"border-border/70 text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 px-2.5\"\n            >\n              {RootIcon ? <RootIcon className=\"size-3\" /> : null}\n              {rootSegment.label}\n            </Badge>\n          </BreadcrumbLink>\n        </BreadcrumbItem>\n        <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n          <ChevronRightIcon className=\"size-3.5\" />\n        </BreadcrumbSeparator>\n        <BreadcrumbItem>\n          <BreadcrumbLink href={sectionSegment.href}>\n            <Badge\n              variant=\"outline\"\n              className=\"border-border/70 text-muted-foreground hover:text-foreground px-2.5\"\n            >\n              {sectionSegment.label}\n            </Badge>\n          </BreadcrumbLink>\n        </BreadcrumbItem>\n        <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n          <ChevronRightIcon className=\"size-3.5\" />\n        </BreadcrumbSeparator>\n        <BreadcrumbItem>\n          <BreadcrumbPage>\n            <DropdownMenu>\n              <DropdownMenuTrigger className=\"text-foreground inline-flex items-center gap-1 rounded-sm px-1 py-0.5 font-medium outline-none\">\n                {currentSegment.label}\n                <ChevronDownIcon className=\"text-muted-foreground size-3.5\" />\n              </DropdownMenuTrigger>\n              <DropdownMenuContent align=\"start\">\n                {currentSegment.options.map((option) => (\n                  <DropdownMenuItem key={option}>{option}</DropdownMenuItem>\n                ))}\n              </DropdownMenuContent>\n            </DropdownMenu>\n          </BreadcrumbPage>\n        </BreadcrumbItem>\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-7",
      "type": "registry:component",
      "title": "Breadcrumb 7",
      "description": "Breadcrumb 7. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "breadcrumb",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport {\n  ChevronRightIcon,\n  FolderIcon,\n  FolderOpenIcon,\n  HomeIcon,\n} from 'lucide-react';\n\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\ntype RootSegment = {\n  label: string;\n  href: string;\n  icon: LucideIcon;\n};\n\nconst rootSegment: RootSegment = {\n  label: 'Home',\n  href: '#',\n  icon: HomeIcon,\n};\n\nconst currentLabel = 'Release Notes';\n\nconst menuOptions = ['Updates', 'Changelog', 'Archive'] as const;\n\nconst Breadcrumb7 = () => {\n  const [open, setOpen] = useState(false);\n  const RootIcon = rootSegment.icon;\n\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"gap-1.5 text-sm\">\n        <BreadcrumbItem>\n          <BreadcrumbLink\n            href={rootSegment.href}\n            className=\"hover:text-foreground flex items-center gap-1.5 rounded-sm px-1 py-0.5\"\n          >\n            <RootIcon className=\"text-muted-foreground size-3.5\" />\n            <span className=\"sr-only\">{rootSegment.label}</span>\n          </BreadcrumbLink>\n        </BreadcrumbItem>\n        <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n          <ChevronRightIcon className=\"size-3.5\" />\n        </BreadcrumbSeparator>\n        <BreadcrumbItem className=\"flex items-center\">\n          <DropdownMenu open={open} onOpenChange={setOpen}>\n            <DropdownMenuTrigger className=\"text-muted-foreground hover:text-foreground inline-flex cursor-pointer items-center gap-1 rounded-sm px-1 py-0.5 outline-none\">\n              {open ? (\n                <FolderOpenIcon className=\"size-3.5\" />\n              ) : (\n                <FolderIcon className=\"size-3.5\" />\n              )}\n              <span className=\"sr-only\">\n                {open ? 'Open section menu' : 'Open section menu'}\n              </span>\n            </DropdownMenuTrigger>\n            <DropdownMenuContent align=\"start\">\n              {menuOptions.map((option) => (\n                <DropdownMenuItem key={option}>{option}</DropdownMenuItem>\n              ))}\n            </DropdownMenuContent>\n          </DropdownMenu>\n        </BreadcrumbItem>\n        <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n          <ChevronRightIcon className=\"size-3.5\" />\n        </BreadcrumbSeparator>\n        <BreadcrumbItem>\n          <BreadcrumbPage className=\"rounded-sm px-1 py-0.5 font-medium\">\n            {currentLabel}\n          </BreadcrumbPage>\n        </BreadcrumbItem>\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb-8",
      "type": "registry:component",
      "title": "Breadcrumb 8",
      "description": "Breadcrumb 8. Displays the hierarchical structure of a website or application.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "breadcrumb"
      ],
      "files": [
        {
          "path": "components/watermelon/breadcrumb-8.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { HomeIcon } from 'lucide-react';\n\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} from '@/components/base-ui/breadcrumb';\n\ntype BreadcrumbSegment =\n  | {\n      label: string;\n      href: string;\n      current?: false;\n    }\n  | {\n      label: string;\n      current: true;\n      href?: never;\n    };\n\nconst rootSegment: { href: string; icon: LucideIcon; label: string } = {\n  href: '#',\n  icon: HomeIcon,\n  label: 'Home',\n};\n\nconst segments: readonly BreadcrumbSegment[] = [\n  { label: 'Workspace', href: '#' },\n  { label: 'Team Library', current: true },\n] as const;\n\nconst Breadcrumb8 = () => {\n  const RootIcon = rootSegment.icon;\n\n  return (\n    <Breadcrumb>\n      <BreadcrumbList className=\"border-border/70 h-9 gap-2.5 rounded-full border px-4 text-sm shadow-xs w-fit\">\n        <BreadcrumbItem>\n          <BreadcrumbLink\n            href={rootSegment.href}\n            className=\"hover:text-foreground rounded-sm p-0.5\"\n          >\n            <RootIcon className=\"size-3.5\" />\n            <span className=\"sr-only\">{rootSegment.label}</span>\n          </BreadcrumbLink>\n        </BreadcrumbItem>\n        {segments.map((segment) => (\n          <BreadcrumbItem key={segment.label}>\n            <BreadcrumbSeparator className=\"text-muted-foreground/60\">\n              /\n            </BreadcrumbSeparator>\n            {'href' in segment ? (\n              <BreadcrumbLink\n                href={segment.href}\n                className=\"hover:text-foreground\"\n              >\n                {segment.label}\n              </BreadcrumbLink>\n            ) : (\n              <BreadcrumbPage className=\"font-medium\">\n                {segment.label}\n              </BreadcrumbPage>\n            )}\n          </BreadcrumbItem>\n        ))}\n      </BreadcrumbList>\n    </Breadcrumb>\n  );\n};\n\nexport default Breadcrumb8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-1",
      "type": "registry:component",
      "title": "Button 1",
      "description": "Button 1. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-1.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\n\nconst Button1 = () => {\n  return <Button variant=\"default\">Default Button</Button>;\n};\n\nexport default Button1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-2",
      "type": "registry:component",
      "title": "Button 2",
      "description": "Button 2. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FiArrowLeft, FiArrowRight } from 'react-icons/fi';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button2 = () => {\n  return (\n    <div className=\"flex flex-wrap items-center gap-4\">\n      <Button variant=\"outline\" className=\"inline-flex items-center gap-2\">\n        <FiArrowLeft className=\"size-4\" />\n        Prev\n      </Button>\n\n      <Button variant=\"outline\" className=\"inline-flex items-center gap-2\">\n        Next\n        <FiArrowRight className=\"size-4\" />\n      </Button>\n    </div>\n  );\n};\n\nexport default Button2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-3",
      "type": "registry:component",
      "title": "Button 3",
      "description": "Button 3. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-3.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\n\nconst Button3 = () => {\n  return (\n    <div className=\"flex flex-wrap items-center gap-4\">\n      <Button variant=\"secondary\">Discard</Button>\n      <Button>Save</Button>\n    </div>\n  );\n};\n\nexport default Button3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-4",
      "type": "registry:component",
      "title": "Button 4",
      "description": "Button 4. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-4.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FiArrowRight } from 'react-icons/fi';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button4 = () => {\n  return (\n    <Button className=\" group inline-flex items-center gap-2 rounded-lg\">\n      Explore More\n      <FiArrowRight className=\"size-4 transition-transform duration-200 ease-out group-hover:translate-x-1 group-hover:scale-110\" />\n    </Button>\n  );\n};\n\nexport default Button4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-5",
      "type": "registry:component",
      "title": "Button 5",
      "description": "Button 5. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-5.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport { FaBan } from 'react-icons/fa';\n\nconst Button5 = () => {\n  return (\n    <Button disabled>\n      <FaBan className=\"size-4\" />\n      Disabed\n    </Button>\n  );\n};\n\nexport default Button5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-6",
      "type": "registry:component",
      "title": "Button 6",
      "description": "Button 6. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-6.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\n\nconst Button6 = () => {\n  return <Button size=\"sm\">Small Size</Button>;\n};\n\nexport default Button6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-7",
      "type": "registry:component",
      "title": "Button 7",
      "description": "Button 7. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-7.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\n\nconst Button7 = () => {\n  return <Button size=\"lg\">Size Large</Button>;\n};\n\nexport default Button7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-8",
      "type": "registry:component",
      "title": "Button 8",
      "description": "Button 8. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-8.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\n\nconst Button8 = () => {\n  return <Button className=\"h-6 px-2 py-0.5 text-xs\">Size Extra Small</Button>;\n};\n\nexport default Button8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-9",
      "type": "registry:component",
      "title": "Button 9",
      "description": "Button 9. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button9 = () => {\n  return (\n    <Button disabled className=\"inline-flex items-center gap-0.5\">\n      <span>Loading</span>\n\n      <span className=\"flex translate-y-[4px] gap-[2px]\">\n        <span className=\"size-1 animate-bounce rounded-full bg-current [animation-delay:-0.2s]\" />\n        <span className=\"size-1 animate-bounce rounded-full bg-current [animation-delay:-0.1s]\" />\n        <span className=\"size-1 animate-bounce rounded-full bg-current [animation-delay:0s]\" />\n      </span>\n    </Button>\n  );\n};\n\nexport default Button9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-10",
      "type": "registry:component",
      "title": "Button 10",
      "description": "Button 10. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-10.tsx",
          "type": "registry:component",
          "content": "import { BiSolidZap } from 'react-icons/bi';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button10 = () => {\n  return (\n    <Button className=\"bg-transparent bg-gradient-to-r from-sky-600 via-sky-500 to-sky-600 [background-size:200%_auto] [background-position:0%_center] text-white transition-[background-position] duration-500 ease-out hover:bg-transparent hover:[background-position:100%_center] focus-visible:ring-sky-600/20 dark:from-sky-400 dark:via-sky-300 dark:to-sky-400 dark:focus-visible:ring-sky-400/40\">\n      Upgrade <BiSolidZap />\n    </Button>\n  );\n};\n\nexport default Button10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-11",
      "type": "registry:component",
      "title": "Button 11",
      "description": "Button 11. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-11.tsx",
          "type": "registry:component",
          "content": "import { FaTrashAlt } from 'react-icons/fa';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button11 = () => {\n  return (\n    <Button className=\"text-destructive! border-destructive! bg-destructive/10 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40\">\n      <FaTrashAlt />\n      Delete\n    </Button>\n  );\n};\n\nexport default Button11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-12",
      "type": "registry:component",
      "title": "Button 12",
      "description": "Button 12. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-12.tsx",
          "type": "registry:component",
          "content": "import { FaRegStar } from 'react-icons/fa';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button12 = () => {\n  return (\n    <Button className=\"rounded-full\">\n      <FaRegStar />\n      Favorite\n    </Button>\n  );\n};\n\nexport default Button12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-13",
      "type": "registry:component",
      "title": "Button 13",
      "description": "Button 13. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-13.tsx",
          "type": "registry:component",
          "content": "import { IoCopy } from 'react-icons/io5';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button13 = () => {\n  return (\n    <Button className=\"border-blue-600 bg-blue-600/10 text-blue-600! hover:bg-blue-600/20 focus-visible:border-blue-600 focus-visible:ring-blue-600/20 dark:border-blue-400 dark:bg-blue-400/10 dark:text-blue-400! dark:hover:bg-blue-400/20 dark:focus-visible:border-blue-400 dark:focus-visible:ring-blue-400/40\">\n      <IoCopy />\n      Copy\n    </Button>\n  );\n};\n\nexport default Button13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-14",
      "type": "registry:component",
      "title": "Button 14",
      "description": "Button 14. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-14.tsx",
          "type": "registry:component",
          "content": "import { FaDownload } from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button14 = () => {\n  return (\n    <Button className=\"border-primary bg-primary/10 text-foreground border-dashed shadow-none\">\n      <FaDownload />\n      Download\n    </Button>\n  );\n};\n\nexport default Button14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-15",
      "type": "registry:component",
      "title": "Button 15",
      "description": "Button 15. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-15.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport { IoCopy } from 'react-icons/io5';\n\nconst Button15 = () => {\n  return (\n    <div className=\"flex h-12  items-center overflow-hidden rounded-lg border px-1\">\n      <p className=\"text-muted-foreground max-w-56 truncate overflow-hidden px-1 text-sm\">\n        https://watermelon-base-ui.com/\n      </p>\n      <Button\n        size=\"icon\"\n        className=\"rounded-lg bg-blue-600 text-white hover:bg-blue-600/90 focus-visible:ring-blue-600/20 dark:bg-blue-400/60 dark:focus-visible:ring-blue-400/40\"\n      >\n        <IoCopy />\n        <span className=\"sr-only\">Copy</span>\n      </Button>\n    </div>\n  );\n};\n\nexport default Button15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-16",
      "type": "registry:component",
      "title": "Button 16",
      "description": "Button 16. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-16.tsx",
          "type": "registry:component",
          "content": "import { IoSaveSharp } from 'react-icons/io5';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button16 = () => {\n  return (\n    <Button className=\"bg-blue-600/10 text-blue-600 hover:bg-blue-600/20 focus-visible:ring-blue-600/20 dark:bg-blue-400/10 dark:text-blue-400 dark:hover:bg-blue-400/20 dark:focus-visible:ring-blue-400/40\">\n      <IoSaveSharp />\n      Save\n    </Button>\n  );\n};\n\nexport default Button16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-17",
      "type": "registry:component",
      "title": "Button 17",
      "description": "Button 17. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-17.tsx",
          "type": "registry:component",
          "content": "import { IoWarning } from 'react-icons/io5';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button17 = () => {\n  return (\n    <Button className=\"bg-yellow-600/10 text-yellow-600 hover:bg-yellow-600/20 focus-visible:ring-yellow-600/20 dark:bg-yellow-400/10 dark:text-yellow-400 dark:hover:bg-yellow-400/20 dark:focus-visible:ring-yellow-400/40\">\n      <IoWarning />\n      Warning\n    </Button>\n  );\n};\n\nexport default Button17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-18",
      "type": "registry:component",
      "title": "Button 18",
      "description": "Button 18. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-18.tsx",
          "type": "registry:component",
          "content": "import { HiCheckCircle, HiXCircle } from 'react-icons/hi';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button18 = () => {\n  return (\n    <div className=\"flex flex-wrap items-center gap-4\">\n      <Button className=\"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 flex items-center gap-2 rounded-none\">\n        Cancel\n        <HiXCircle />\n      </Button>\n\n      <Button className=\"flex items-center gap-2 rounded-none bg-green-600/10 text-green-600 hover:bg-green-600/20 focus-visible:ring-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:hover:bg-green-400/20 dark:focus-visible:ring-green-400/40\">\n        Confirm\n        <HiCheckCircle />\n      </Button>\n    </div>\n  );\n};\n\nexport default Button18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-19",
      "type": "registry:component",
      "title": "Button 19",
      "description": "Button 19. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-19.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport { FiArrowLeft } from 'react-icons/fi';\n\nconst Button19 = () => {\n  return (\n    <Button variant=\"ghost\" className=\"group\">\n      <FiArrowLeft className=\"transition-transform duration-180 ease-in-out group-hover:-translate-x-1\" />\n      Back\n    </Button>\n  );\n};\n\nexport default Button19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-20",
      "type": "registry:component",
      "title": "Button 20",
      "description": "Button 20. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-20.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { buttonVariants } from '@/components/base-ui/button';\nimport { cn } from '@/lib/utils';\n\nconst Button20 = () => {\n  return (\n    <a\n      href=\"#\"\n      className={cn(\n        buttonVariants({ variant: 'link' }),\n        'after:bg-primary relative !no-underline after:absolute after:bottom-1.5 after:left-1/2 after:h-px after:w-[80%] after:origin-center after:-translate-x-1/2 after:scale-x-0 after:transition-transform after:duration-300 after:ease-in-out hover:after:scale-x-100',\n      )}\n    >\n      Message Us\n    </a>\n  );\n};\n\nexport default Button20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-21",
      "type": "registry:component",
      "title": "Button 21",
      "description": "Button 21. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-21.tsx",
          "type": "registry:component",
          "content": "import { FcGoogle } from 'react-icons/fc';\nimport { FaXTwitter, FaGithub, FaFacebook } from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button21 = () => {\n  return (\n    <div className=\"flex flex-wrap items-center justify-center gap-4\">\n      <Button variant=\"outline\" size=\"icon\" aria-label=\"Continue with Google\">\n        <FcGoogle className=\"size-5\" />\n      </Button>\n\n      <Button variant=\"outline\" size=\"icon\" aria-label=\"Continue with X\">\n        <FaXTwitter className=\"size-5 text-black dark:text-white\" />\n      </Button>\n\n      <Button variant=\"outline\" size=\"icon\" aria-label=\"Continue with Facebook\">\n        <FaFacebook className=\"size-5 text-[#1877F2]\" />\n      </Button>\n\n      <Button variant=\"outline\" size=\"icon\" aria-label=\"Continue with GitHub\">\n        <FaGithub className=\"size-5 text-black dark:text-white\" />\n      </Button>\n    </div>\n  );\n};\n\nexport default Button21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-22",
      "type": "registry:component",
      "title": "Button 22",
      "description": "Button 22. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-22.tsx",
          "type": "registry:component",
          "content": "import { FcGoogle } from 'react-icons/fc';\nimport { FaXTwitter, FaGithub, FaFacebook } from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button22 = () => {\n  return (\n    <div className=\"flex w-full max-w-56 flex-col justify-center gap-4\">\n      <Button\n        variant=\"outline\"\n        className=\"flex items-center gap-2 !border-red-500 bg-red-600/5 !text-red-600\"\n      >\n        <FcGoogle className=\"size-5\" />\n        <span className=\"flex flex-1 justify-center\">Continue with Google</span>\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        className=\"flex items-center gap-2 border-black bg-black/5 text-black dark:border-white dark:text-white\"\n      >\n        <FaXTwitter className=\"size-5\" />\n        <span className=\"flex flex-1 justify-center\">Continue with X</span>\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        className=\"flex items-center gap-2 !border-blue-600 bg-blue-600/5 !text-blue-600\"\n      >\n        <FaFacebook className=\"size-5 text-[#0866fe]\" />\n        <span className=\"flex flex-1 justify-center\">\n          Continue with Facebook\n        </span>\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        className=\"flex items-center gap-2 border-black bg-black/5 text-black dark:border-white dark:text-white\"\n      >\n        <FaGithub className=\"size-5\" />\n        <span className=\"flex flex-1 justify-center\">Continue with GitHub</span>\n      </Button>\n    </div>\n  );\n};\n\nexport default Button22;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-23",
      "type": "registry:component",
      "title": "Button 23",
      "description": "Button 23. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-23.tsx",
          "type": "registry:component",
          "content": "import { FaBell } from 'react-icons/fa';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button23 = () => {\n  return (\n    <Button variant=\"outline\" className=\"relative\">\n      <FaBell />\n      Inbox\n      <Badge\n        variant=\"destructive\"\n        className=\"absolute -top-2.5 -right-2.5 h-5 min-w-5 bg-red-600 px-1 text-white tabular-nums dark:bg-red-400\"\n      >\n        8\n      </Badge>\n    </Button>\n  );\n};\n\nexport default Button23;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-24",
      "type": "registry:component",
      "title": "Button 24",
      "description": "Button 24. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-24.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button24 = () => {\n  return (\n    <Button className=\"rounded-lg pl-1\">\n      <Avatar className=\"size-6\">\n        <AvatarImage\n          src=\"https://github.com/VanshPatel.png\"\n          alt=\"Hallie Richards\"\n          className=\"rounded-md\"\n        />\n        <AvatarFallback className=\"text-foreground text-xs\">VP</AvatarFallback>\n      </Avatar>\n      @VanshPatel\n    </Button>\n  );\n};\n\nexport default Button24;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-25",
      "type": "registry:component",
      "title": "Button 25",
      "description": "Button 25. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-25.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { ImSpinner2 } from 'react-icons/im';\n\nimport { Button } from '@/components/base-ui/button';\n\nimport { cn } from '@/lib/utils';\n\nconst Button25 = () => {\n  const [isLoading, setIsLoading] = useState(false);\n  const [status, setStatus] = useState<undefined | string>(undefined);\n\n  const handleClick = async () => {\n    setIsLoading(true);\n    setStatus(undefined);\n\n    try {\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n      setStatus(Math.random() > 0.5 ? 'Submitted!' : 'Rejected!');\n    } catch (error) {\n      setStatus('Rejected!');\n      console.error(error);\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  return (\n    <Button\n      variant=\"link\"\n      onClick={handleClick}\n      disabled={isLoading}\n      className={cn(\n        'flex cursor-pointer items-center gap-2 hover:no-underline',\n        {\n          'text-green-600 dark:text-green-400': status === 'Submitted!',\n          'text-destructive': status === 'Rejected!',\n        },\n      )}\n    >\n      {isLoading ? (\n        <>\n          <ImSpinner2 className=\"animate-spin\" />\n          Loading\n        </>\n      ) : status ? (\n        status\n      ) : (\n        'Click me'\n      )}\n    </Button>\n  );\n};\n\nexport default Button25;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-26",
      "type": "registry:component",
      "title": "Button 26",
      "description": "Button 26. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-26.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FiSun, FiMoon } from 'react-icons/fi';\n\nimport { Button } from '@/components/base-ui/button';\n\nimport { cn } from '@/lib/utils';\n\nconst Button26 = () => {\n  const [isDark, setIsDark] = useState(false);\n\n  return (\n    <Button\n      variant=\"outline\"\n      size=\"icon\"\n      onClick={() => setIsDark(!isDark)}\n      aria-label=\"Toggle dark mode\"\n      className={cn(\n        isDark\n          ? 'border-blue-600 text-blue-600! hover:bg-blue-600/10 focus-visible:border-blue-600 focus-visible:ring-blue-600/20 dark:border-blue-400 dark:text-blue-400! dark:hover:bg-blue-400/10 dark:focus-visible:border-blue-400 dark:focus-visible:ring-blue-400/40'\n          : 'border-yellow-600 text-yellow-600! hover:bg-yellow-600/10 focus-visible:border-yellow-600 focus-visible:ring-yellow-600/20 dark:border-yellow-400 dark:text-yellow-400! dark:hover:bg-yellow-400/10 dark:focus-visible:border-yellow-400 dark:focus-visible:ring-yellow-400/40',\n      )}\n    >\n      {isDark ? <FiMoon className=\"size-5\" /> : <FiSun className=\"size-5\" />}\n    </Button>\n  );\n};\n\nexport default Button26;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-27",
      "type": "registry:component",
      "title": "Button 27",
      "description": "Button 27. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-27.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FiMenu, FiX } from 'react-icons/fi';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button27 = () => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <Button\n      variant=\"ghost\"\n      size=\"icon\"\n      onClick={() => setIsOpen(!isOpen)}\n      aria-label=\"Toggle menu\"\n    >\n      {isOpen ? <FiX className=\"size-5\" /> : <FiMenu className=\"size-5\" />}\n    </Button>\n  );\n};\n\nexport default Button27;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-28",
      "type": "registry:component",
      "title": "Button 28",
      "description": "Button 28. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/button-28.tsx",
          "type": "registry:component",
          "content": "import { FiPlus } from 'react-icons/fi';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Button28 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"secondary\" size=\"icon\" className=\"rounded-full\">\n          <FiPlus className=\"size-5\" />\n          <span className=\"sr-only\">Add new item</span>\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"px-2 py-1 text-xs\">\n        Add new item\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Button28;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-29",
      "type": "registry:component",
      "title": "Button 29",
      "description": "Button 29. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-29.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FiBookmark } from 'react-icons/fi';\nimport { FaBookmark } from 'react-icons/fa';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button29 = () => {\n  const [bookmarked, setBookmarked] = useState(false);\n\n  return (\n    <Button\n      variant=\"outline\"\n      size=\"icon\"\n      onClick={() => setBookmarked(!bookmarked)}\n    >\n      {bookmarked ? (\n        <FaBookmark className=\"size-5 text-blue-600\" />\n      ) : (\n        <FiBookmark className=\"size-5\" />\n      )}\n      <span className=\"sr-only\">Bookmark</span>\n    </Button>\n  );\n};\n\nexport default Button29;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-30",
      "type": "registry:component",
      "title": "Button 30",
      "description": "Button 30. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-30.tsx",
          "type": "registry:component",
          "content": "import { FiAlertTriangle } from 'react-icons/fi';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button30 = () => {\n  return (\n    <Button\n      size=\"icon\"\n      className=\"from-destructive via-destructive/60 to-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 bg-transparent bg-gradient-to-r [background-size:200%_auto] text-white hover:bg-transparent hover:bg-[99%_center]\"\n    >\n      <FiAlertTriangle className=\"size-5\" />\n      <span className=\"sr-only\">Error</span>\n    </Button>\n  );\n};\n\nexport default Button30;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-31",
      "type": "registry:component",
      "title": "Button 31",
      "description": "Button 31. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-31.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\n\nconst Button31 = () => {\n  return (\n    <Button className=\"from-primary via-primary/60 to-primary bg-transparent bg-gradient-to-r [background-size:200%_auto] hover:bg-transparent hover:bg-[99%_center]\">\n      Get Started\n    </Button>\n  );\n};\n\nexport default Button31;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-32",
      "type": "registry:component",
      "title": "Button 32",
      "description": "Button 32. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-32.tsx",
          "type": "registry:component",
          "content": "import { IoShareOutline } from 'react-icons/io5';\n\nimport { Button } from '@/components/base-ui/button';\n\nconst Button32 = () => {\n  return (\n    <Button variant=\"outline\" className=\"   rounded-md px-2 h-10.5\">\n      <span className=\"bg-primary text-primary-foreground flex size-7 items-center justify-center rounded-md\">\n        <IoShareOutline />\n      </span>\n      Post\n    </Button>\n  );\n};\n\nexport default Button32;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-33",
      "type": "registry:component",
      "title": "Button 33",
      "description": "Button 33. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-33.tsx",
          "type": "registry:component",
          "content": "import { IoMailOpenOutline } from 'react-icons/io5';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button33 = () => {\n  return (\n    <Button variant=\"outline\">\n      <IoMailOpenOutline />\n      Inbox\n      <Badge variant=\"destructive\" className=\"px-1.5 py-px\">\n        99+\n      </Badge>\n    </Button>\n  );\n};\n\nexport default Button33;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-34",
      "type": "registry:component",
      "title": "Button 34",
      "description": "Button 34. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-34.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { IoCheckmarkOutline, IoCopyOutline } from 'react-icons/io5';\n\nimport { Button } from '@/components/base-ui/button';\n\nimport { cn } from '@/lib/utils';\n\nconst Button34 = () => {\n  const [copied, setCopied] = useState<boolean>(false);\n\n  const handleCopy = async () => {\n    try {\n      await navigator.clipboard.writeText('Thank you for using Watermelon UI!');\n      setCopied(true);\n      setTimeout(() => setCopied(false), 2000);\n    } catch (err) {\n      console.error('Failed to copy text: ', err);\n    }\n  };\n\n  return (\n    <Button\n      variant=\"outline\"\n      className=\"relative disabled:opacity-100\"\n      onClick={handleCopy}\n      disabled={copied}\n    >\n      <span\n        className={cn(\n          'transition-all',\n          copied ? 'scale-100 opacity-100' : 'scale-0 opacity-0',\n        )}\n      >\n        <IoCheckmarkOutline className=\"stroke-green-600 dark:stroke-green-400\" />\n      </span>\n      <span\n        className={cn(\n          'absolute left-3 transition-all',\n          copied ? 'scale-0 opacity-0' : 'scale-100 opacity-100',\n        )}\n      >\n        <IoCopyOutline />\n      </span>\n      {copied ? 'Copied!' : 'Copy'}\n    </Button>\n  );\n};\n\nexport default Button34;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-35",
      "type": "registry:component",
      "title": "Button 35",
      "description": "Button 35. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-35.tsx",
          "type": "registry:component",
          "content": "import { IoTrashOutline } from 'react-icons/io5';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button35 = () => {\n  return (\n    <Button className=\"from-destructive via-destructive/60 to-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 bg-transparent bg-gradient-to-r [background-size:200%_auto] text-white hover:bg-transparent hover:bg-[99%_center]\">\n      <IoTrashOutline />\n      Delete\n    </Button>\n  );\n};\n\nexport default Button35;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-36",
      "type": "registry:component",
      "title": "Button 36",
      "description": "Button 36. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-36.tsx",
          "type": "registry:component",
          "content": "import { IoMailOpenOutline } from 'react-icons/io5';\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button36 = () => {\n  return (\n    <Button variant=\"outline\" size=\"icon\" className=\"relative\">\n      <IoMailOpenOutline className=\"size-5\" />\n      <span className=\"sr-only\">Messages</span>\n      <Badge className=\"absolute -top-2.5 -right-2.5 h-5 min-w-5 px-1 tabular-nums\">\n        3\n      </Badge>\n    </Button>\n  );\n};\n\nexport default Button36;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-37",
      "type": "registry:component",
      "title": "Button 37",
      "description": "Button 37. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-37.tsx",
          "type": "registry:component",
          "content": "import { IoCheckmarkDoneOutline } from 'react-icons/io5';\nimport { Button } from '@/components/base-ui/button';\n\nconst Button37 = () => {\n  return (\n    <Button\n      size=\"icon\"\n      className=\"bg-green-600/10 text-green-600 hover:bg-green-600/20 focus-visible:ring-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:hover:bg-green-400/20 dark:focus-visible:ring-green-400/40\"\n    >\n      <IoCheckmarkDoneOutline className='size-4' />\n      <span className=\"sr-only\">Check</span>\n    </Button>\n  );\n};\n\nexport default Button37;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-38",
      "type": "registry:component",
      "title": "Button 38",
      "description": "Button 38. An interactive element used to trigger actions, submissions, or navigation.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-38.tsx",
          "type": "registry:component",
          "content": "\nimport { Button } from '@/components/base-ui/button';\nimport { FaBell } from 'react-icons/fa6';\n\nconst Button38 = () => {\n  return (\n    <Button variant=\"outline\" size=\"icon\" className=\"relative\">\n      <FaBell  />\n      <span className=\"absolute -top-0.5 -right-0.5 size-2 animate-bounce rounded-full bg-sky-600 dark:bg-sky-400\" />\n      <span className=\"sr-only\">Notifications</span>\n    </Button>\n  );\n};\n\nexport default Button38;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-1",
      "type": "registry:component",
      "title": "ButtonGroup 1",
      "description": "ButtonGroup 1. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-1.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { UploadIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\ntype ButtonGroupData = {\n  actionLabel: string;\n  countLabel: string;\n  icon: LucideIcon;\n};\n\nconst buttonGroup: ButtonGroupData = {\n  actionLabel: 'Upload',\n  countLabel: '24 files',\n  icon: UploadIcon,\n};\n\nconst ButtonGroup1 = () => {\n  const Icon = buttonGroup.icon;\n\n  return (\n    <div className=\"inline-flex w-fit -space-x-px rounded-md shadow-xs rtl:space-x-reverse\">\n      <Button\n        variant=\"outline\"\n        className=\"border-border/70 gap-2 rounded-none rounded-l-md px-3 shadow-none focus-visible:z-10\"\n      >\n        <Icon className=\"size-4\" />\n        {buttonGroup.actionLabel}\n      </Button>\n      <span className=\"border-border/70 bg-muted/20 text-muted-foreground flex items-center rounded-r-md border px-3 text-sm font-medium\">\n        {buttonGroup.countLabel}\n      </span>\n    </div>\n  );\n};\n\nexport default ButtonGroup1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-2",
      "type": "registry:component",
      "title": "ButtonGroup 2",
      "description": "ButtonGroup 2. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { BookmarkIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\nimport { cn } from '@/lib/utils';\n\ntype ButtonGroupData = {\n  activeCount: number;\n  inactiveCount: number;\n  actionLabel: string;\n  icon: LucideIcon;\n};\n\nconst buttonGroup: ButtonGroupData = {\n  activeCount: 19,\n  inactiveCount: 18,\n  actionLabel: 'Save',\n  icon: BookmarkIcon,\n};\n\nconst ButtonGroup2 = () => {\n  const [isSaved, setIsSaved] = useState(true);\n  const Icon = buttonGroup.icon;\n\n  return (\n    <div className=\"inline-flex w-fit -space-x-px rounded-md shadow-xs rtl:space-x-reverse\">\n      <Button\n        variant=\"outline\"\n        className=\"border-border/70 gap-2 rounded-none rounded-l-md shadow-none focus-visible:z-10\"\n        onClick={() => setIsSaved((current) => !current)}\n      >\n        <Icon\n          className={cn('size-4', {\n            'fill-foreground stroke-foreground': isSaved,\n          })}\n        />\n        {buttonGroup.actionLabel}\n      </Button>\n      <span className=\"border-border/70 bg-muted/20 text-muted-foreground flex items-center rounded-r-md border px-3 text-sm font-medium\">\n        {isSaved ? buttonGroup.activeCount : buttonGroup.inactiveCount}\n      </span>\n    </div>\n  );\n};\n\nexport default ButtonGroup2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-3",
      "type": "registry:component",
      "title": "ButtonGroup 3",
      "description": "ButtonGroup 3. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-3.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport {\n  Layers3Icon,\n  MessageSquareIcon,\n  PaletteIcon,\n  ScissorsIcon,\n  WandSparklesIcon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype ToolAction = {\n  icon: LucideIcon;\n  label: string;\n};\n\nconst actions: readonly ToolAction[] = [\n  { icon: Layers3Icon, label: 'Layers' },\n  { icon: MessageSquareIcon, label: 'Comment' },\n  { icon: PaletteIcon, label: 'Style' },\n  { icon: ScissorsIcon, label: 'Trim' },\n  { icon: WandSparklesIcon, label: 'Enhance' },\n] as const;\n\nconst ButtonGroup3 = () => {\n  return (\n    <TooltipProvider>\n      <div className=\"bg-muted/20 inline-flex w-fit -space-x-px rounded-md shadow-xs rtl:space-x-reverse\">\n        {actions.map((action, index) => {\n          const Icon = action.icon;\n          const isFirst = index === 0;\n          const isLast = index === actions.length - 1;\n\n          return (\n            <Tooltip key={action.label}>\n              <TooltipTrigger>\n                <Button\n                  className={[\n                    'border-border/70 bg-background hover:bg-muted/30 rounded-none px-3 shadow-none focus-visible:z-10',\n                    isFirst ? 'rounded-l-md' : '',\n                    isLast ? 'rounded-r-md' : '',\n                  ].join(' ')}\n                  variant=\"outline\"\n                >\n                  <Icon className=\"size-4\" />\n                  <span className=\"sr-only\">{action.label}</span>\n                </Button>\n              </TooltipTrigger>\n              <TooltipContent className=\"px-2 py-1 text-xs\">\n                {action.label}\n              </TooltipContent>\n            </Tooltip>\n          );\n        })}\n      </div>\n    </TooltipProvider>\n  );\n};\n\nexport default ButtonGroup3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-4",
      "type": "registry:component",
      "title": "ButtonGroup 4",
      "description": "ButtonGroup 4. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-4.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport {\n  ListRestartIcon,\n  PauseIcon,\n  PlayIcon,\n  SkipForwardIcon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype ControlAction = {\n  icon: LucideIcon;\n  label: string;\n};\n\nconst actions: readonly ControlAction[] = [\n  { icon: ListRestartIcon, label: 'Restart' },\n  { icon: PlayIcon, label: 'Play' },\n  { icon: PauseIcon, label: 'Pause' },\n  { icon: SkipForwardIcon, label: 'Next' },\n] as const;\n\nconst ButtonGroup4 = () => {\n  return (\n    <TooltipProvider>\n      <div className=\"divide-primary-foreground/20 inline-flex w-fit divide-x overflow-hidden rounded-full shadow-sm\">\n        {actions.map((action, index) => {\n          const Icon = action.icon;\n          const isFirst = index === 0;\n          const isLast = index === actions.length - 1;\n\n          return (\n            <Tooltip key={action.label}>\n              <TooltipTrigger>\n                <Button\n                  className={[\n                    'rounded-none px-4 py-3 shadow-none focus-visible:z-10',\n                    isFirst ? 'rounded-l-full' : '',\n                    isLast ? 'rounded-r-full' : '',\n                  ].join(' ')}\n                >\n                  <Icon className=\"size-4\" />\n                  <span className=\"sr-only\">{action.label}</span>\n                </Button>\n              </TooltipTrigger>\n              <TooltipContent className=\"px-2 py-1 text-xs\">\n                {action.label}\n              </TooltipContent>\n            </Tooltip>\n          );\n        })}\n      </div>\n    </TooltipProvider>\n  );\n};\n\nexport default ButtonGroup4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-5",
      "type": "registry:component",
      "title": "ButtonGroup 5",
      "description": "ButtonGroup 5. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-5.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport {\n  BookOpenIcon,\n  BriefcaseIcon,\n  LayoutGridIcon,\n  TerminalSquareIcon,\n} from 'lucide-react';\n\nimport { buttonVariants } from '@/components/base-ui/button';\nimport { cn } from '@/lib/utils';\n\ntype SocialAction = {\n  href: string;\n  hoverClassName: string;\n  icon: LucideIcon;\n  iconClassName: string;\n  label: string;\n};\n\nconst actions: readonly SocialAction[] = [\n  {\n    href: '#',\n    hoverClassName: 'hover:!bg-[#2563eb]/10',\n    icon: TerminalSquareIcon,\n    iconClassName: 'stroke-[#2563eb]',\n    label: 'Code',\n  },\n  {\n    href: '#',\n    hoverClassName: 'hover:!bg-[#16a34a]/10',\n    icon: BriefcaseIcon,\n    iconClassName: 'stroke-[#16a34a]',\n    label: 'Work',\n  },\n  {\n    href: '#',\n    hoverClassName: 'hover:!bg-[#dc2626]/10',\n    icon: LayoutGridIcon,\n    iconClassName: 'stroke-[#dc2626]',\n    label: 'Library',\n  },\n  {\n    href: '#',\n    hoverClassName: 'hover:!bg-[#ca8a04]/10',\n    icon: BookOpenIcon,\n    iconClassName: 'stroke-[#ca8a04]',\n    label: 'Docs',\n  },\n] as const;\n\nconst ButtonGroup5 = () => {\n  return (\n    <div className=\"inline-flex w-fit -space-x-px rounded-full shadow-xs rtl:space-x-reverse\">\n      {actions.map((action, index) => {\n        const Icon = action.icon;\n        const isFirst = index === 0;\n        const isLast = index === actions.length - 1;\n\n        return (\n          <a\n            key={action.label}\n            href={action.href}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            className={cn(\n              buttonVariants({ variant: 'outline', size: 'icon' }),\n              'border-border/70 bg-background size-9 rounded-none p-2.5 shadow-none focus-visible:z-10',\n              action.hoverClassName,\n              isFirst ? 'rounded-l-full' : '',\n              isLast ? 'rounded-r-full' : '',\n            )}\n          >\n            <Icon className={action.iconClassName} />\n            <span className=\"sr-only\">{action.label}</span>\n          </a>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default ButtonGroup5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-6",
      "type": "registry:component",
      "title": "ButtonGroup 6",
      "description": "ButtonGroup 6. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { MinusIcon, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\ntype ButtonGroupConfig = {\n  initialValue: number;\n  maxValue: number;\n  minValue: number;\n  step: number;\n  decrementIcon: LucideIcon;\n  decrementLabel: string;\n  incrementIcon: LucideIcon;\n  incrementLabel: string;\n};\n\nconst config: ButtonGroupConfig = {\n  initialValue: 2,\n  maxValue: 5,\n  minValue: 0,\n  step: 1,\n  decrementIcon: MinusIcon,\n  decrementLabel: 'Decrease quantity',\n  incrementIcon: PlusIcon,\n  incrementLabel: 'Increase quantity',\n};\n\nconst ButtonGroup6 = () => {\n  const [value, setValue] = useState<number>(config.initialValue);\n  const DecrementIcon = config.decrementIcon;\n  const IncrementIcon = config.incrementIcon;\n\n  const handleDecrease = () => {\n    setValue((current) => Math.max(config.minValue, current - config.step));\n  };\n\n  const handleIncrease = () => {\n    setValue((current) => Math.min(config.maxValue, current + config.step));\n  };\n\n  return (\n    <div className=\"inline-flex w-fit -space-x-px rounded-md shadow-xs rtl:space-x-reverse\">\n      <Button\n        variant=\"outline\"\n        size=\"icon\"\n        className=\"border-border/70 rounded-none rounded-l-md shadow-none focus-visible:z-10\"\n        onClick={handleDecrease}\n        disabled={value === config.minValue}\n      >\n        <DecrementIcon className=\"size-4\" />\n        <span className=\"sr-only\">{config.decrementLabel}</span>\n      </Button>\n      <span className=\"border-border/70 bg-muted/20 flex min-w-12 items-center justify-center border px-3 text-sm font-medium\">\n        {value}\n      </span>\n      <Button\n        variant=\"outline\"\n        size=\"icon\"\n        className=\"border-border/70 rounded-none rounded-r-md shadow-none focus-visible:z-10\"\n        onClick={handleIncrease}\n        disabled={value === config.maxValue}\n      >\n        <IncrementIcon className=\"size-4\" />\n        <span className=\"sr-only\">{config.incrementLabel}</span>\n      </Button>\n    </div>\n  );\n};\n\nexport default ButtonGroup6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-7",
      "type": "registry:component",
      "title": "ButtonGroup 7",
      "description": "ButtonGroup 7. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { MinusIcon, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\ntype ButtonGroupConfig = {\n  decrementIcon: LucideIcon;\n  decrementLabel: string;\n  incrementIcon: LucideIcon;\n  incrementLabel: string;\n  initialValue: number;\n  maxValue: number;\n  minValue: number;\n  step: number;\n  unit: string;\n};\n\nconst config: ButtonGroupConfig = {\n  decrementIcon: MinusIcon,\n  decrementLabel: 'Decrease width',\n  incrementIcon: PlusIcon,\n  incrementLabel: 'Increase width',\n  initialValue: 240,\n  maxValue: 320,\n  minValue: 120,\n  step: 8,\n  unit: 'px',\n};\n\nconst ButtonGroup7 = () => {\n  const [value, setValue] = useState<number>(config.initialValue);\n  const DecrementIcon = config.decrementIcon;\n  const IncrementIcon = config.incrementIcon;\n\n  const handleDecrease = () => {\n    setValue((current) => Math.max(config.minValue, current - config.step));\n  };\n\n  const handleIncrease = () => {\n    setValue((current) => Math.min(config.maxValue, current + config.step));\n  };\n\n  return (\n    <div className=\"divide-primary-foreground/20 inline-flex w-fit divide-x overflow-hidden rounded-xl shadow-xs\">\n      <Button\n        size=\"default\"\n        className=\"h-10 rounded-none rounded-l-xl px-3.5 shadow-none focus-visible:z-10\"\n        onClick={handleDecrease}\n        disabled={value === config.minValue}\n      >\n        <DecrementIcon className=\"size-4\" />\n        <span className=\"sr-only\">{config.decrementLabel}</span>\n      </Button>\n      <span className=\"bg-primary text-primary-foreground inline-flex h-10 min-w-20 items-center justify-center px-4 text-sm font-medium\">\n        {`${value}${config.unit}`}\n      </span>\n      <Button\n        size=\"default\"\n        className=\"h-10 rounded-none rounded-r-xl px-3.5 shadow-none focus-visible:z-10\"\n        onClick={handleIncrease}\n        disabled={value === config.maxValue}\n      >\n        <IncrementIcon className=\"size-4\" />\n        <span className=\"sr-only\">{config.incrementLabel}</span>\n      </Button>\n    </div>\n  );\n};\n\nexport default ButtonGroup7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-8",
      "type": "registry:component",
      "title": "ButtonGroup 8",
      "description": "ButtonGroup 8. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-8.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { ArrowUpRightIcon } from 'lucide-react';\n\nimport { buttonVariants } from '@/components/base-ui/button';\nimport { cn } from '@/lib/utils';\n\ntype ButtonGroupLink = {\n  href: string;\n  icon: LucideIcon;\n  iconLabel: string;\n  primaryLabel: string;\n};\n\nconst buttonGroup: ButtonGroupLink = {\n  href: '#',\n  icon: ArrowUpRightIcon,\n  iconLabel: 'Open external preview',\n  primaryLabel: 'Open preview',\n};\n\nconst ButtonGroup8 = () => {\n  const Icon = buttonGroup.icon;\n\n  return (\n    <div className=\"inline-flex w-fit -space-x-px rounded-md shadow-xs rtl:space-x-reverse\">\n      <a\n        href={buttonGroup.href}\n        className={cn(\n          buttonVariants({ variant: 'outline' }),\n          'border-border/70 rounded-none rounded-l-md shadow-none focus-visible:z-10',\n        )}\n      >\n        {buttonGroup.primaryLabel}\n      </a>\n      <a\n        href={buttonGroup.href}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        className={cn(\n          buttonVariants({ variant: 'outline', size: 'icon' }),\n          'border-border/70 rounded-none rounded-r-md shadow-none focus-visible:z-10',\n        )}\n      >\n        <Icon className=\"size-4\" />\n        <span className=\"sr-only\">{buttonGroup.iconLabel}</span>\n      </a>\n    </div>\n  );\n};\n\nexport default ButtonGroup8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-9",
      "type": "registry:component",
      "title": "ButtonGroup 9",
      "description": "ButtonGroup 9. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-9.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { ArchiveIcon, CopyPlusIcon, PencilRulerIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\ntype ActionButton = {\n  icon: LucideIcon;\n  label: string;\n};\n\nconst actions: readonly ActionButton[] = [\n  { icon: PencilRulerIcon, label: 'Customize' },\n  { icon: CopyPlusIcon, label: 'Clone' },\n  { icon: ArchiveIcon, label: 'Archive' },\n] as const;\n\nconst ButtonGroup9 = () => {\n  return (\n    <div className=\"inline-flex w-fit -space-x-px rounded-full shadow-xs rtl:space-x-reverse\">\n      {actions.map((action, index) => {\n        const Icon = action.icon;\n        const isFirst = index === 0;\n        const isLast = index === actions.length - 1;\n\n        return (\n          <Button\n            key={action.label}\n            variant=\"outline\"\n            className={[\n              'border-border/70 bg-background text-foreground hover:[&_svg]:text-muted-foreground h-7 gap-1.5 rounded-none px-2.5 text-[0.8rem] shadow-none focus-visible:z-10 sm:h-8 sm:gap-2 sm:px-3 sm:text-sm',\n              isFirst ? 'rounded-l-full' : '',\n              isLast ? 'rounded-r-full' : '',\n            ].join(' ')}\n          >\n            <Icon className=\"text-muted-foreground size-3.5 transition-colors sm:size-4\" />\n            {action.label}\n          </Button>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default ButtonGroup9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-10",
      "type": "registry:component",
      "title": "ButtonGroup 10",
      "description": "ButtonGroup 10. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-10.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport { RotateCcwIcon, RotateCwIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\ntype ActionButton = {\n  icon: LucideIcon;\n  label: string;\n};\n\nconst actions: readonly ActionButton[] = [\n  { icon: RotateCcwIcon, label: 'Rotate Left' },\n  { icon: RotateCwIcon, label: 'Rotate Right' },\n] as const;\n\nconst ButtonGroup10 = () => {\n  return (\n    <div className=\"inline-flex w-fit divide-x divide-white/10 overflow-hidden rounded-full bg-slate-900 text-white dark:divide-black/10 dark:bg-slate-100 dark:text-slate-900\">\n      {actions.map((action, index) => {\n        const Icon = action.icon;\n        const isFirst = index === 0;\n        const isLast = index === actions.length - 1;\n\n        return (\n          <Button\n            key={action.label}\n            size=\"icon\"\n            variant=\"outline\"\n            className={[\n              'rounded-none border-0 bg-transparent text-white shadow-none hover:bg-white/10 hover:text-white focus-visible:z-10 dark:text-slate-900 dark:hover:bg-black/5 dark:hover:text-slate-900 hover:[&_svg]:text-white dark:hover:[&_svg]:text-slate-900',\n              isFirst ? 'rounded-l-full' : '',\n              isLast ? 'rounded-r-full' : '',\n            ].join(' ')}\n          >\n            <Icon className=\"size-4 text-white dark:text-slate-900\" />\n            <span className=\"sr-only\">{action.label}</span>\n          </Button>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default ButtonGroup10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-11",
      "type": "registry:component",
      "title": "ButtonGroup 11",
      "description": "ButtonGroup 11. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-11.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useMemo, useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { ChevronDownIcon, SendIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\ntype ActionOption = {\n  description: string;\n  icon: LucideIcon;\n  label: string;\n  value: string;\n};\n\nconst options: readonly ActionOption[] = [\n  {\n    description:\n      'Send the update to everyone currently assigned to the thread.',\n    icon: SendIcon,\n    label: 'Send Update',\n    value: 'send',\n  },\n  {\n    description:\n      'Send the message and flag it for follow-up during the next review.',\n    icon: SendIcon,\n    label: 'Send and Review',\n    value: 'review',\n  },\n  {\n    description:\n      'Queue the message as a draft so the team can check it before sending.',\n    icon: SendIcon,\n    label: 'Save as Draft',\n    value: 'draft',\n  },\n] as const;\n\nconst ButtonGroup11 = () => {\n  const [selectedValue, setSelectedValue] = useState<ActionOption['value']>(\n    options[0].value,\n  );\n\n  const selectedOption = useMemo(\n    () =>\n      options.find((option) => option.value === selectedValue) ?? options[0],\n    [selectedValue],\n  );\n\n  const SelectedIcon = selectedOption.icon;\n\n  return (\n    <div className=\"divide-primary-foreground/20 inline-flex w-fit divide-x overflow-hidden rounded-md shadow-xs\">\n      <Button className=\"gap-2 rounded-none rounded-l-md px-3.5 shadow-none focus-visible:z-10\">\n        <SelectedIcon className=\"size-4\" />\n        {selectedOption.label}\n      </Button>\n      <DropdownMenu>\n        <DropdownMenuTrigger>\n          <Button\n            size=\"icon\"\n            className=\"rounded-none rounded-r-md shadow-none focus-visible:z-10\"\n          >\n            <ChevronDownIcon className=\"size-4\" />\n            <span className=\"sr-only\">Select action</span>\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent\n          side=\"bottom\"\n          sideOffset={4}\n          align=\"end\"\n          className=\"w-80 max-w-[calc(100vw-2rem)]\"\n        >\n          <DropdownMenuRadioGroup\n            value={selectedValue}\n            onValueChange={(value) =>\n              setSelectedValue(value as ActionOption['value'])\n            }\n          >\n            {options.map((option) => {\n              const Icon = option.icon;\n\n              return (\n                <DropdownMenuRadioItem\n                  key={option.value}\n                  value={option.value}\n                  className=\"items-start [&>span]:pt-1.5\"\n                >\n                  <div className=\"flex gap-2\">\n                    <Icon className=\"text-muted-foreground mt-0.5 size-4\" />\n                    <div className=\"flex flex-col gap-1\">\n                      <span className=\"text-sm font-medium\">\n                        {option.label}\n                      </span>\n                      <span className=\"text-muted-foreground text-xs\">\n                        {option.description}\n                      </span>\n                    </div>\n                  </div>\n                </DropdownMenuRadioItem>\n              );\n            })}\n          </DropdownMenuRadioGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default ButtonGroup11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group-12",
      "type": "registry:component",
      "title": "ButtonGroup 12",
      "description": "ButtonGroup 12. A group of buttons that are displayed together.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/button-group-12.tsx",
          "type": "registry:component",
          "content": "import type { LucideIcon } from 'lucide-react';\nimport {\n  FolderKanbanIcon,\n  SlidersHorizontalIcon,\n  SparklesIcon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\n\ntype ActionButton = {\n  icon: LucideIcon;\n  label: string;\n};\n\nconst actions: readonly ActionButton[] = [\n  { icon: SlidersHorizontalIcon, label: 'Controls' },\n  { icon: FolderKanbanIcon, label: 'Projects' },\n  { icon: SparklesIcon, label: 'Insights' },\n] as const;\n\nconst ButtonGroup12 = () => {\n  return (\n    <div className=\"bg-muted/20 inline-flex w-fit rounded-md p-1 ring-1 ring-border/70 dark:bg-muted/40 dark:ring-border/60 rtl:space-x-reverse\">\n      {actions.map((action, index) => {\n        const Icon = action.icon;\n        const isFirst = index === 0;\n        const isLast = index === actions.length - 1;\n\n        return (\n          <Button\n            key={action.label}\n            variant=\"ghost\"\n            className={[\n              'h-7 gap-1.5 rounded-none px-2.5 text-[0.8rem] text-muted-foreground hover:bg-transparent! hover:text-foreground focus-visible:z-10 dark:text-muted-foreground dark:hover:bg-transparent! dark:hover:text-foreground sm:h-8 sm:gap-2 sm:px-3 sm:text-sm',\n              isFirst ? 'rounded-l-md' : '',\n              isLast ? 'rounded-r-md' : '',\n            ].join(' ')}\n          >\n            <Icon className=\"size-3.5 sm:size-4\" />\n            {action.label}\n          </Button>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default ButtonGroup12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-1",
      "type": "registry:component",
      "title": "Calendar 1",
      "description": "Calendar 1. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-1.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\n\nconst Calendar1: React.FC = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(new Date());\n\n  return (\n    <section className=\"flex flex-col items-center max-w-xs mx-auto\">\n      <Calendar\n        mode=\"single\"\n        defaultMonth={selectedDate}\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        classNames={{\n          today: \"!bg-transparent\",\n          day_button: \"!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0\"\n        }}\n        className=\"transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent\"\n      />\n      <p className=\"mt-4 text-center text-xs text-muted-foreground font-light tracking-wide\" role=\"region\">\n        Monthly date picker\n      </p>\n    </section>\n  );\n}\n\nexport default Calendar1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-2",
      "type": "registry:component",
      "title": "Calendar 2",
      "description": "Calendar 2. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-2.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\n\nconst Calendar2: React.FC = () => {\n  const [date, setDate] = useState<Date | undefined>(new Date());\n\n  return (\n    <div>\n      <Calendar\n        mode=\"single\"\n        defaultMonth={date}\n        numberOfMonths={2}\n        selected={date}\n        onSelect={setDate}\n        classNames={{\n          today: \"!bg-transparent\",\n          day_button: \"!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0\"\n        }}\n        className=\"!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent\"\n      />\n      <p className=\"text-muted-foreground mt-4 text-center text-xs\" role=\"region\">\n        Multi month calendar\n      </p>\n    </div>\n  );\n}\n\nexport default Calendar2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-3",
      "type": "registry:component",
      "title": "Calendar 3",
      "description": "Calendar 3. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-3.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst Calendar3 = () => {\n  const [dateRange, setDateRange] = useState<DateRange | undefined>({\n    from: new Date(2025, 5, 4),\n    to: new Date(2025, 5, 17)\n  })\n\n  return (\n    <div>\n      <Calendar\n        mode=\"range\"\n        selected={dateRange}\n        defaultMonth={dateRange?.from}\n        onSelect={setDateRange}\n        classNames={{\n          today: \"!bg-transparent\",\n          day_button: \"!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0\"\n        }}\n        className=\"!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent\"\n      />\n      <p className=\"text-muted-foreground mt-3 text-center text-xs\" role=\"region\">\n        Single month calendar with range selection\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-4",
      "type": "registry:component",
      "title": "Calendar 4",
      "description": "Calendar 4. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst initialDateRange: DateRange = {\n  from: new Date(2025, 4, 22),\n  to: new Date(2025, 5, 17)\n}\n\nconst Calendar4 = () => {\n  const [selectedDateRange, setSelectedDateRange] = useState<DateRange | undefined>(initialDateRange)\n\n  return (\n    <div>\n      <Calendar\n        mode='range'\n        defaultMonth={selectedDateRange?.from}\n        selected={selectedDateRange}\n        onSelect={setSelectedDateRange}\n        numberOfMonths={2}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Two-month range picker\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-5",
      "type": "registry:component",
      "title": "Calendar 5",
      "description": "Calendar 5. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-5.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst initialDateRange: DateRange = {\n  from: new Date(2025, 5, 8),\n  to: new Date(2025, 5, 17)\n}\n\nconst Calendar5 = () => {\n  const [selectedDateRange, setSelectedDateRange] = useState<DateRange | undefined>(initialDateRange)\n\n  return (\n    <div>\n      <Calendar\n        mode='range'\n        defaultMonth={selectedDateRange?.from}\n        selected={selectedDateRange}\n        onSelect={setSelectedDateRange}\n        numberOfMonths={1}\n        min={5}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Minimum 5-day range\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-6",
      "type": "registry:component",
      "title": "Calendar 6",
      "description": "Calendar 6. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-6.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst initialSelectedDate = new Date(2025, 5, 18)\nconst minimumAvailableDate = new Date(2025, 5, 12)\n\nconst Calendar6 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(initialSelectedDate)\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        defaultMonth={selectedDate}\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        disabled={{\n          before: minimumAvailableDate\n        }}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Past dates disabled\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar6\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-7",
      "type": "registry:component",
      "title": "Calendar 7",
      "description": "Calendar 7. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-7.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst initialDateRange: DateRange = {\n  from: new Date(2025, 5, 17),\n  to: new Date(2025, 5, 20)\n}\n\nconst disabledWeekend = {\n  dayOfWeek: [0, 6]\n}\n\nconst Calendar7 = () => {\n  const [selectedDateRange, setSelectedDateRange] = useState<DateRange | undefined>(initialDateRange)\n\n  return (\n    <div>\n      <Calendar\n        mode='range'\n        defaultMonth={selectedDateRange?.from}\n        selected={selectedDateRange}\n        onSelect={setSelectedDateRange}\n        disabled={disabledWeekend}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n        excludeDisabled\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Weekends unavailable\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar7\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-8",
      "type": "registry:component",
      "title": "Calendar 8",
      "description": "Calendar 8. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar",
        "card",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-8.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\nimport { enUS, hi } from 'react-day-picker/locale'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/base-ui/card'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/base-ui/select'\n\ntype CalendarLocale = 'en' | 'hi'\n\ntype LocalizedCopy = {\n  description: string\n  title: string\n}\n\nconst localizedStrings: Record<CalendarLocale, LocalizedCopy> = {\n  en: {\n    title: 'Book an appointment',\n    description: 'Select the dates for your appointment'\n  },\n  hi: {\n    title: '\\u0905\\u092A\\u0949\\u0907\\u0902\\u091F\\u092E\\u0947\\u0902\\u091F \\u092C\\u0941\\u0915 \\u0915\\u0930\\u0947\\u0902',\n    description:\n      '\\u0905\\u092A\\u0928\\u0940 \\u0905\\u092A\\u0949\\u0907\\u0902\\u091F\\u092E\\u0947\\u0902\\u091F \\u0915\\u0947 \\u0932\\u093F\\u090F \\u0924\\u093E\\u0930\\u0940\\u0916\\u0947\\u0902 \\u091A\\u0941\\u0928\\u0947\\u0902'\n  }\n}\n\nconst localeMap = {\n  en: enUS,\n  hi\n} as const\n\nconst numeralMap = {\n  en: 'latn',\n  hi: 'deva'\n} as const\n\nconst isCalendarLocale = (value: string | null): value is CalendarLocale => value === 'en' || value === 'hi'\n\nconst initialDateRange: DateRange = {\n  from: new Date(2025, 8, 9),\n  to: new Date(2025, 8, 17)\n}\n\nconst Calendar8 = () => {\n  const [selectedLocale, setSelectedLocale] = useState<CalendarLocale>('en')\n  const [selectedDateRange, setSelectedDateRange] = useState<DateRange | undefined>(initialDateRange)\n\n  return (\n    <div>\n      <Card className='w-2xs rounded-2xl border-border/60 shadow-sm'>\n        <CardHeader className='border-b border-border/60 pb-4'>\n          <CardTitle>{localizedStrings[selectedLocale].title}</CardTitle>\n          <CardDescription>{localizedStrings[selectedLocale].description}</CardDescription>\n          <CardAction>\n            <Select\n              value={selectedLocale}\n              onValueChange={(value) => {\n                if (!isCalendarLocale(value)) return\n                setSelectedLocale(value)\n              }}\n            >\n              <SelectTrigger className='h-9 w-[104px] rounded-full border-border/60' aria-label='Select language'>\n                <SelectValue placeholder='Language' />\n              </SelectTrigger>\n              <SelectContent align='end'>\n                <SelectItem value='hi'>Hindi</SelectItem>\n                <SelectItem value='en'>English</SelectItem>\n              </SelectContent>\n            </Select>\n          </CardAction>\n        </CardHeader>\n        <CardContent>\n          <Calendar\n            mode='range'\n            selected={selectedDateRange}\n            onSelect={setSelectedDateRange}\n            defaultMonth={selectedDateRange?.from}\n            locale={localeMap[selectedLocale]}\n            numerals={numeralMap[selectedLocale]}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='w-full !bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n            buttonVariant='outline'\n          />\n        </CardContent>\n      </Card>\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Localized range picker\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar8\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-9",
      "type": "registry:component",
      "title": "Calendar 9",
      "description": "Calendar 9. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-9.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst Calendar9 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(new Date())\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        defaultMonth={selectedDate}\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n        captionLayout='dropdown'\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Month and year selector\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar9\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-10",
      "type": "registry:component",
      "title": "Calendar 10",
      "description": "Calendar 10. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-10.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst Calendar10 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(new Date())\n\n  return (\n    <div className='@container mx-auto w-full max-w-md px-2 sm:px-0'>\n      <Calendar\n        mode='single'\n        defaultMonth={selectedDate}\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='w-full !border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent [--cell-size:clamp(--spacing(8),10cqw,--spacing(13))]'\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground sm:text-[11px]' role='region'>\n        Large cell calendar\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar10\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-11",
      "type": "registry:component",
      "title": "Calendar 11",
      "description": "Calendar 11. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "little-date",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-11.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { formatDateRange } from 'little-date'\nimport { PlusIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardContent, CardFooter } from '@/components/base-ui/card'\n\ntype CalendarEvent = {\n  className: string\n  from: string\n  title: string\n  to: string\n}\n\nconst events: readonly CalendarEvent[] = [\n  {\n    className: 'bg-sky-50 text-sky-950 after:bg-sky-500 dark:bg-sky-950/30 dark:text-sky-100',\n    title: 'Weekly Planning',\n    from: '2025-06-12T09:00:00',\n    to: '2025-06-12T10:00:00'\n  },\n  {\n    className: 'bg-emerald-50 text-emerald-950 after:bg-emerald-500 dark:bg-emerald-950/30 dark:text-emerald-100',\n    title: 'Design Review',\n    from: '2025-06-12T11:30:00',\n    to: '2025-06-12T12:30:00'\n  },\n  {\n    className: 'bg-amber-50 text-amber-950 after:bg-amber-500 dark:bg-amber-950/30 dark:text-amber-100',\n    title: 'Client Presentation',\n    from: '2025-06-12T14:00:00',\n    to: '2025-06-12T15:00:00'\n  }\n]\n\nconst Calendar11 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(new Date())\n\n  return (\n    <div>\n      <Card className='w-2xs rounded-2xl border-border/60 py-4 shadow-sm'>\n        <CardContent className='px-4'>\n          <Calendar\n            mode='single'\n            defaultMonth={selectedDate}\n            selected={selectedDate}\n            onSelect={setSelectedDate}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='w-full !bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n            required\n          />\n        </CardContent>\n        <CardFooter className='flex flex-col items-start gap-3 border-t border-border/60 px-4 pt-4!'>\n          <div className='flex w-full items-center justify-between px-1'>\n            <div className='text-sm font-medium'>\n              {selectedDate?.toLocaleDateString('en-US', {\n                day: 'numeric',\n                month: 'long',\n                year: 'numeric'\n              })}\n            </div>\n            <Button variant='ghost' size='icon' className='size-7 rounded-full' title='Add Event'>\n              <PlusIcon className='size-4' />\n              <span className='sr-only'>Add Event</span>\n            </Button>\n          </div>\n          <div className='flex w-full flex-col gap-2'>\n            {events.map(event => (\n              <div\n                key={event.title}\n                className={`relative rounded-lg p-2.5 pl-6 text-sm after:absolute after:inset-y-2.5 after:left-2 after:w-1 after:rounded-full ${event.className}`}\n              >\n                <div className='font-medium'>{event.title}</div>\n                <div className='text-xs text-muted-foreground'>\n                  {formatDateRange(new Date(event.from), new Date(event.to))}\n                </div>\n              </div>\n            ))}\n          </div>\n        </CardFooter>\n      </Card>\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Calendar with agenda list\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-12",
      "type": "registry:component",
      "title": "Calendar 12",
      "description": "Calendar 12. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-12.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst Calendar12 = () => {\n  const [selectedDates, setSelectedDates] = useState<Date[]>([new Date()])\n\n  return (\n    <div>\n      <Calendar\n        mode='multiple'\n        required\n        defaultMonth={selectedDates[0]}\n        selected={selectedDates}\n        onSelect={setSelectedDates}\n        max={5}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Multi-day selector\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-13",
      "type": "registry:component",
      "title": "Calendar 13",
      "description": "Calendar 13. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-13.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst initialSelectedDate: Date = new Date()\n\nconst calendarClassNames = {\n  day_button:\n    'rounded-full! !ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0 data-[selected-single=true]:bg-orange-500! data-[selected-single=true]:text-white! data-[selected-single=true]:dark:bg-orange-400!',\n  today: 'rounded-full! bg-muted/60!'\n} satisfies CalendarClassNames\n\nconst Calendar13 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(initialSelectedDate)\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        className='rounded-[1.75rem] border border-border/60 p-3 shadow-sm'\n        classNames={calendarClassNames}\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Rounded selected-day calendar\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-14",
      "type": "registry:component",
      "title": "Calendar 14",
      "description": "Calendar 14. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-14.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst initialSelectedDateRange: DateRange = {\n  from: new Date(2025, 5, 4),\n  to: new Date(2025, 5, 17)\n}\n\nconst calendarClassNames = {\n  range_start: 'rounded-l-full bg-orange-500/20 dark:bg-orange-400/10',\n  range_end: 'rounded-r-full bg-orange-500/20 dark:bg-orange-400/10',\n  day_button:\n    '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0 data-[range-end=true]:rounded-full! data-[range-start=true]:rounded-full! data-[range-start=true]:bg-orange-500! data-[range-start=true]:text-white! data-[range-start=true]:dark:bg-orange-400! data-[range-end=true]:bg-orange-500! data-[range-end=true]:text-white! data-[range-end=true]:dark:bg-orange-400! data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-orange-500/20 data-[range-middle=true]:dark:bg-orange-400/10 hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:rounded-l-none! data-[selected=true]:bg-orange-500/20! dark:data-[selected=true]:bg-orange-400/10! [&_button[data-range-middle=true]]:bg-transparent!'\n} satisfies CalendarClassNames\n\nconst Calendar14 = () => {\n  const [selectedDateRange, setSelectedDateRange] = useState<DateRange | undefined>(initialSelectedDateRange)\n\n  return (\n    <div>\n      <Calendar\n        mode='range'\n        defaultMonth={selectedDateRange?.from}\n        selected={selectedDateRange}\n        onSelect={setSelectedDateRange}\n        className='rounded-2xl border border-border/60 p-3 shadow-sm'\n        classNames={calendarClassNames}\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Soft range selection calendar\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar14\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-15",
      "type": "registry:component",
      "title": "Calendar 15",
      "description": "Calendar 15. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-15.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst initialSelectedDate: Date = new Date()\n\nconst calendarClassNames = {\n  month_caption: 'flex h-8 items-center justify-start px-1',\n  nav: 'absolute inset-x-0 top-0 flex w-full items-center justify-end',\n  today: '!bg-transparent',\n  day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n} satisfies CalendarClassNames\n\nconst Calendar15 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(initialSelectedDate)\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        selected={selectedDate}\n        defaultMonth={selectedDate}\n        onSelect={setSelectedDate}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n        classNames={calendarClassNames}\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Right-aligned month navigation\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar15\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-16",
      "type": "registry:component",
      "title": "Calendar 16",
      "description": "Calendar 16. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-16.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst initialSelectedDate: Date = new Date()\n\nconst calendarClassNames = {\n  month_caption: 'flex h-8 items-center justify-end px-1',\n  nav: 'absolute inset-x-0 top-0 flex w-full items-center justify-start',\n  today: '!bg-transparent',\n  day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n} satisfies CalendarClassNames\n\nconst Calendar16 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(initialSelectedDate)\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        selected={selectedDate}\n        defaultMonth={selectedDate}\n        onSelect={setSelectedDate}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n        classNames={calendarClassNames}\n      />\n      <p className='mt-3 text-center text-xs text-muted-foreground' role='region'>\n        Left-aligned month navigation\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar16\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-17",
      "type": "registry:component",
      "title": "Calendar 17",
      "description": "Calendar 17. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-17.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\n\nconst initialSelectedDate: Date = new Date()\n\nconst Calendar17 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        defaultMonth={selectedDate}\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='!border-0 !bg-transparent transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n        showWeekNumber\n      />\n      <p\n        className='text-muted-foreground mt-4 text-center text-[11px] tracking-wide uppercase'\n        role='region'\n      >\n        Calendar with week numbers\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar17\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-18",
      "type": "registry:component",
      "title": "Calendar 18",
      "description": "Calendar 18. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "calendar",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-18.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/base-ui/card'\n\nconst initialSelectedDate: Date = new Date()\nconst currentMonthDate: Date = new Date()\n\nconst Calendar18 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [visibleMonth, setVisibleMonth] = useState<Date | undefined>(\n    currentMonthDate\n  )\n\n  return (\n    <div>\n      <Card className='rounded-[1.75rem] border-border/60 bg-muted/10 shadow-sm'>\n        <CardHeader className='pb-4'>\n          <CardTitle className='text-[1rem]'>Book a session</CardTitle>\n          <CardDescription>Pick an available day</CardDescription>\n          <CardAction>\n            <Button\n              size='sm'\n              variant='outline'\n              className='h-8 rounded-full px-4'\n              onClick={() => {\n                const today = new Date()\n\n                setVisibleMonth(today)\n                setSelectedDate(today)\n              }}\n            >\n              Today\n            </Button>\n          </CardAction>\n        </CardHeader>\n        <CardContent>\n          <Calendar\n            mode='single'\n            month={visibleMonth}\n            onMonthChange={setVisibleMonth}\n            selected={selectedDate}\n            onSelect={setSelectedDate}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='!bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n          />\n        </CardContent>\n      </Card>\n      <p className='text-muted-foreground mt-4 text-center text-xs' role='region'>\n        Calendar with quick today jump\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar18\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-19",
      "type": "registry:component",
      "title": "Calendar 19",
      "description": "Calendar 19. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "date-fns",
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "card",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-19.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { type ChangeEvent, useId, useState } from 'react'\n\nimport { format } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardContent, CardHeader } from '@/components/base-ui/card'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\n\nconst initialSelectedDate: Date = new Date()\nconst initialDateInputValue: string = format(initialSelectedDate, 'yyyy-MM-dd')\n\nconst isValidDate = (value: Date): boolean => !Number.isNaN(value.getTime())\n\nconst Calendar19 = () => {\n  const id = useId()\n  const [visibleMonth, setVisibleMonth] = useState<Date>(initialSelectedDate)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [inputValue, setInputValue] = useState<string>(initialDateInputValue)\n\n  const handleDayPickerSelect = (nextDate: Date | undefined) => {\n    if (!nextDate) {\n      setInputValue('')\n      setSelectedDate(undefined)\n    } else {\n      setSelectedDate(nextDate)\n      setVisibleMonth(nextDate)\n      setInputValue(format(nextDate, 'yyyy-MM-dd'))\n    }\n  }\n\n  const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n    const { value } = e.target\n\n    setInputValue(value)\n\n    if (value) {\n      const parsedDate = new Date(value)\n\n      if (!isValidDate(parsedDate)) {\n        setSelectedDate(undefined)\n        return\n      }\n\n      setSelectedDate(parsedDate)\n      setVisibleMonth(parsedDate)\n    } else {\n      setSelectedDate(undefined)\n    }\n  }\n\n  return (\n    <div>\n      <Card className='w-full max-w-lg gap-5 rounded-[1.75rem] border-border/60 bg-muted/10 py-5 shadow-sm'>\n        <CardHeader className='flex flex-col items-start gap-3 border-b border-dashed border-border/60 px-4 pb-3!'>\n          <Label\n            htmlFor={id}\n            className='shrink-0 text-[11px] font-medium uppercase tracking-wide text-muted-foreground'\n          >\n            Enter date\n          </Label>\n          <div className='relative w-fit'>\n            <Input\n              id={id}\n              type='date'\n              value={inputValue}\n              onChange={handleInputChange}\n              className='peer h-9 w-full min-w-0 appearance-none rounded-full border-border/60 bg-background pl-9 text-sm shadow-xs [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none'\n              aria-label='Select date'\n            />\n            <div className='text-muted-foreground/80 pointer-events-none absolute inset-y-0 left-0 flex items-center justify-center pl-3 peer-disabled:opacity-50'>\n              <CalendarIcon size={16} aria-hidden='true' />\n            </div>\n          </div>\n        </CardHeader>\n        <CardContent className='px-5'>\n          <Calendar\n            mode='single'\n            selected={selectedDate}\n            onSelect={handleDayPickerSelect}\n            month={visibleMonth}\n            onMonthChange={setVisibleMonth}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='!bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n          />\n        </CardContent>\n      </Card>\n      <p className='text-muted-foreground mt-4 text-center text-xs' role='region'>\n        Calendar with date input\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar19\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-20",
      "type": "registry:component",
      "title": "Calendar 20",
      "description": "Calendar 20. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "card",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-20.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ClockIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardContent, CardHeader } from '@/components/base-ui/card'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\n\nconst initialSelectedDate: Date = new Date()\nconst initialSelectedTime = '12:00:00'\n\nconst Calendar20 = () => {\n  const id = useId()\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [selectedTime, setSelectedTime] = useState<string>(initialSelectedTime)\n\n  return (\n    <div>\n      <Card className='gap-5 rounded-[1.75rem] border-border/60 bg-muted/10 py-5 shadow-sm'>\n        <CardHeader className='flex flex-col items-start gap-3 border-b border-dashed border-border/60 px-4 pb-3!'>\n          <Label\n            htmlFor={id}\n            className='text-[11px] font-medium uppercase tracking-wide text-muted-foreground'\n          >\n            Enter time\n          </Label>\n          <div className='relative grow'>\n            <Input\n              id={id}\n              type='time'\n              step='1'\n              value={selectedTime}\n              onChange={(event) => setSelectedTime(event.target.value)}\n              className='peer h-9 appearance-none rounded-full border-border/60 bg-background pl-9 text-sm shadow-xs [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none'\n            />\n            <div className='text-muted-foreground/80 pointer-events-none absolute inset-y-0 left-0 flex items-center justify-center pl-3 peer-disabled:opacity-50'>\n              <ClockIcon size={16} aria-hidden='true' />\n            </div>\n          </div>\n        </CardHeader>\n        <CardContent className='px-5'>\n          <Calendar\n            mode='single'\n            selected={selectedDate}\n            onSelect={setSelectedDate}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='!bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n          />\n        </CardContent>\n      </Card>\n      <p className='text-muted-foreground mt-4 text-center text-xs' role='region'>\n        Calendar with time input\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar20\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-21",
      "type": "registry:component",
      "title": "Calendar 21",
      "description": "Calendar 21. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "date-fns",
        "lucide-react",
        "react-day-picker"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "collapsible",
        "scroll-area"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-21.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport {\n  type ComponentProps,\n  type Dispatch,\n  type HTMLAttributes,\n  type ReactNode,\n  type SetStateAction,\n  useEffect,\n  useRef,\n  useState\n} from 'react'\n\nimport { eachMonthOfInterval, eachYearOfInterval, endOfYear, format, isAfter, isBefore, startOfYear } from 'date-fns'\nimport { ChevronDownIcon } from 'lucide-react'\nimport type { CaptionLabelProps, MonthGridProps } from 'react-day-picker'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/base-ui/collapsible'\nimport { ScrollArea } from '@/components/base-ui/scroll-area'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\ntype MonthGridPanelProps = {\n  children: ReactNode\n  className?: string\n  currentMonth: number\n  currentYear: number\n  endDate: Date\n  isYearView: boolean\n  onMonthSelect: (selectedMonth: Date) => void\n  startDate: Date\n  years: readonly Date[]\n}\n\ntype CaptionLabelButtonProps = {\n  isYearView: boolean\n  setIsYearView: Dispatch<SetStateAction<boolean>>\n} & HTMLAttributes<HTMLSpanElement>\n\ntype CollapsibleYearProps = {\n  children: ReactNode\n  open?: boolean\n  title: string\n}\n\nconst initialSelectedDate: Date = new Date()\nconst minimumAvailableMonth: Date = new Date(1980, 6)\nconst maximumAvailableMonth: Date = new Date(2030, 6)\nconst yearOptions: readonly Date[] = eachYearOfInterval({\n  start: startOfYear(minimumAvailableMonth),\n  end: endOfYear(maximumAvailableMonth)\n})\n\nconst calendarClassNames = {\n  month_caption: 'ml-2.5 mr-20 justify-start',\n  nav: 'flex absolute w-fit right-0 items-center',\n  today: '!bg-transparent',\n  day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n} satisfies CalendarClassNames\n\nconst Calendar21 = () => {\n  const [visibleMonth, setVisibleMonth] = useState<Date>(initialSelectedDate)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [isYearView, setIsYearView] = useState<boolean>(false)\n\n  return (\n    <div>\n      <Calendar\n        mode='single'\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        month={visibleMonth}\n        onMonthChange={setVisibleMonth}\n        defaultMonth={initialSelectedDate}\n        startMonth={minimumAvailableMonth}\n        endMonth={maximumAvailableMonth}\n        className='overflow-hidden !border-0 !bg-transparent p-3 transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n        classNames={calendarClassNames}\n        components={{\n          CaptionLabel: (props: CaptionLabelProps) => (\n            <CaptionLabel isYearView={isYearView} setIsYearView={setIsYearView} {...props} />\n          ),\n          MonthGrid: (props: MonthGridProps) => {\n            return (\n              <MonthGrid\n                className={props.className}\n                isYearView={isYearView}\n                startDate={minimumAvailableMonth}\n                endDate={maximumAvailableMonth}\n                years={yearOptions}\n                currentYear={visibleMonth.getFullYear()}\n                currentMonth={visibleMonth.getMonth()}\n                onMonthSelect={(selectedMonth: Date) => {\n                  setVisibleMonth(selectedMonth)\n                  setIsYearView(false)\n                }}\n              >\n                {props.children}\n              </MonthGrid>\n            )\n          }\n        }}\n      />\n      <p className='text-muted-foreground mt-4 text-center text-xs' role='region'>\n        Calendar with advance selection{' '}\n        <a href='https://originbase-ui.com/calendar-date-picker' className='hover:text-primary underline' target='_blank'>\n          Origin UI\n        </a>\n      </p>\n    </div>\n  )\n}\n\nfunction MonthGrid({\n  className,\n  children,\n  isYearView,\n  startDate,\n  endDate,\n  years,\n  currentYear,\n  currentMonth,\n  onMonthSelect\n}: MonthGridPanelProps) {\n  const currentYearRef = useRef<HTMLDivElement>(null)\n  const currentMonthButtonRef = useRef<HTMLButtonElement>(null)\n  const scrollAreaRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (isYearView && currentYearRef.current && scrollAreaRef.current) {\n      const viewport = scrollAreaRef.current.querySelector<HTMLElement>(\n        '[data-radix-scroll-area-viewport]'\n      )\n\n      if (viewport) {\n        const yearTop = currentYearRef.current.offsetTop\n\n        viewport.scrollTop = yearTop\n      }\n\n      const focusTimeoutId = window.setTimeout(() => {\n        currentMonthButtonRef.current?.focus()\n      }, 100)\n\n      return () => window.clearTimeout(focusTimeoutId)\n    }\n  }, [isYearView])\n\n  return (\n    <div className='relative'>\n      <table className={className}>{children}</table>\n      {isYearView && (\n        <div className='absolute inset-0 z-20 -mx-3 -mb-3 rounded-b-[1.75rem] bg-background'>\n          <ScrollArea ref={scrollAreaRef} className='h-full'>\n            {years.map(year => {\n              const months = eachMonthOfInterval({\n                start: startOfYear(year),\n                end: endOfYear(year)\n              })\n\n              const isCurrentYear = year.getFullYear() === currentYear\n\n              return (\n                <div key={year.getFullYear()} ref={isCurrentYear ? currentYearRef : undefined}>\n                  <CollapsibleYear title={year.getFullYear().toString()} open={isCurrentYear}>\n                    <div className='grid grid-cols-3 gap-2'>\n                      {months.map(month => {\n                        const isDisabled = isBefore(month, startDate) || isAfter(month, endDate)\n                        const isCurrentMonth = month.getMonth() === currentMonth && year.getFullYear() === currentYear\n\n                        return (\n                          <Button\n                            key={month.getTime()}\n                            ref={isCurrentMonth ? currentMonthButtonRef : undefined}\n                            variant={isCurrentMonth ? 'default' : 'outline'}\n                            size='sm'\n                            className='h-8 rounded-full border-border/60'\n                            disabled={isDisabled}\n                            onClick={() => onMonthSelect(month)}\n                          >\n                            {format(month, 'MMM')}\n                          </Button>\n                        )\n                      })}\n                    </div>\n                  </CollapsibleYear>\n                </div>\n              )\n            })}\n          </ScrollArea>\n        </div>\n      )}\n    </div>\n  )\n}\n\nfunction CaptionLabel({\n  children,\n  isYearView,\n  setIsYearView\n}: CaptionLabelButtonProps) {\n  return (\n    <Button\n      className='data-[state=open]:text-muted-foreground/80 -ms-2 flex items-center gap-2 text-sm font-medium hover:bg-transparent [&[data-state=open]>svg]:rotate-180'\n      variant='ghost'\n      size='sm'\n      onClick={() => setIsYearView(prev => !prev)}\n      data-state={isYearView ? 'open' : 'closed'}\n    >\n      {children}\n      <ChevronDownIcon\n        className='text-muted-foreground/80 shrink-0 transition-transform duration-200'\n        aria-hidden='true'\n      />\n    </Button>\n  )\n}\n\nfunction CollapsibleYear({ title, children, open }: CollapsibleYearProps) {\n  return (\n    <Collapsible className='border-t border-border/60 px-2 py-1.5' defaultOpen={open}>\n      <CollapsibleTrigger className='flex w-full items-center justify-start gap-2 rounded-lg px-2 py-1.5 text-sm font-medium hover:bg-muted/30 data-[state=open]:[&_svg]:rotate-180'>\n        <ChevronDownIcon\n          className='text-muted-foreground/80 shrink-0 transition-transform duration-200'\n          aria-hidden='true'\n        />\n        {title}\n      </CollapsibleTrigger>\n      <CollapsibleContent className='data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden px-3 py-1 text-sm transition-all'>\n        {children}\n      </CollapsibleContent>\n    </Collapsible>\n  )\n}\n\nexport default Calendar21\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-22",
      "type": "registry:component",
      "title": "Calendar 22",
      "description": "Calendar 22. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "date-fns"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-22.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { addDays } from 'date-fns'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardContent, CardFooter } from '@/components/base-ui/card'\n\ntype DatePreset = {\n  label: string\n  value: DatePresetOffset\n}\n\ntype DatePresetOffset = -1 | 0 | 1 | 3 | 7 | 14\n\nconst initialSelectedDate: Date = new Date()\n\nconst datePresets: readonly DatePreset[] = [\n  { label: 'Today', value: 0 },\n  { label: 'Yesterday', value: -1 },\n  { label: 'Tomorrow', value: 1 },\n  { label: 'In 3 days', value: 3 },\n  { label: 'In a week', value: 7 },\n  { label: 'In 2 weeks', value: 14 }\n]\n\nconst Calendar22 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n\n  const handlePresetSelect = (presetOffset: DatePresetOffset) => {\n    const nextDate = addDays(new Date(), presetOffset)\n\n    setSelectedDate(nextDate)\n  }\n\n  return (\n    <div>\n      <Card className='max-w-xs rounded-[1.75rem] border-border/60 bg-muted/10 py-4 shadow-sm'>\n        <CardContent className='px-4'>\n          <Calendar\n            mode='single'\n            selected={selectedDate}\n            onSelect={setSelectedDate}\n            defaultMonth={selectedDate}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='w-full !bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n          />\n        </CardContent>\n        <CardFooter className='flex flex-wrap gap-2 border-t border-dashed border-border/60 px-4 !pt-4'>\n          {datePresets.map(preset => (\n            <Button\n              key={preset.value}\n              variant='outline'\n              size='sm'\n              className='h-8 flex-1 rounded-full border-border/60 bg-background'\n              onClick={() => handlePresetSelect(preset.value)}\n            >\n              {preset.label}\n            </Button>\n          ))}\n        </CardFooter>\n      </Card>\n      <p\n        className='text-muted-foreground mt-4 text-center text-[11px] uppercase tracking-wide'\n        role='region'\n      >\n        Calendar with presets\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar22\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-23",
      "type": "registry:component",
      "title": "Calendar 23",
      "description": "Calendar 23. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "date-fns",
        "react-day-picker"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-23.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport {\n  endOfMonth,\n  endOfYear,\n  startOfMonth,\n  startOfYear,\n  subDays,\n  subMonths,\n  subYears,\n  addDays,\n  addMonths\n} from 'date-fns'\nimport type { DateRange } from 'react-day-picker'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardContent, CardFooter } from '@/components/base-ui/card'\n\nconst DEFAULT_PRESET_INDEX = 3\n\ntype DateRangePreset = {\n  label: string\n  range: DateRange\n}\n\nconst getDateRangePresets = (baseDate: Date): readonly DateRangePreset[] => {\n  const previousMonth = subMonths(baseDate, 1)\n  const upcomingMonth = addMonths(baseDate, 1)\n  const previousYear = subYears(baseDate, 1)\n\n  return [\n    {\n      label: 'Today',\n      range: {\n        from: baseDate,\n        to: baseDate\n      }\n    },\n    {\n      label: 'Yesterday',\n      range: {\n        from: subDays(baseDate, 1),\n        to: subDays(baseDate, 1)\n      }\n    },\n    {\n      label: 'Tomorrow',\n      range: {\n        from: baseDate,\n        to: addDays(baseDate, 1)\n      }\n    },\n    {\n      label: 'Last 7 days',\n      range: {\n        from: subDays(baseDate, 6),\n        to: baseDate\n      }\n    },\n    {\n      label: 'Next 7 days',\n      range: {\n        from: addDays(baseDate, 1),\n        to: addDays(baseDate, 7)\n      }\n    },\n    {\n      label: 'Last 30 days',\n      range: {\n        from: subDays(baseDate, 29),\n        to: baseDate\n      }\n    },\n    {\n      label: 'Month to date',\n      range: {\n        from: startOfMonth(baseDate),\n        to: baseDate\n      }\n    },\n    {\n      label: 'Last month',\n      range: {\n        from: startOfMonth(previousMonth),\n        to: endOfMonth(previousMonth)\n      }\n    },\n    {\n      label: 'Next month',\n      range: {\n        from: startOfMonth(upcomingMonth),\n        to: endOfMonth(upcomingMonth)\n      }\n    },\n    {\n      label: 'Year to date',\n      range: {\n        from: startOfYear(baseDate),\n        to: baseDate\n      }\n    },\n    {\n      label: 'Last year',\n      range: {\n        from: startOfYear(previousYear),\n        to: endOfYear(previousYear)\n      }\n    }\n  ]\n}\n\nconst currentDate: Date = new Date()\nconst dateRangePresets: readonly DateRangePreset[] =\n  getDateRangePresets(currentDate)\nconst initialSelectedDateRange: DateRange = dateRangePresets[\n  DEFAULT_PRESET_INDEX\n]?.range ?? {\n  from: subDays(currentDate, 6),\n  to: currentDate\n}\n\nconst Calendar23 = () => {\n  const [visibleMonth, setVisibleMonth] = useState<Date>(currentDate)\n  const [selectedDateRange, setSelectedDateRange] = useState<\n    DateRange | undefined\n  >(initialSelectedDateRange)\n\n  const handlePresetSelect = (presetRange: DateRange) => {\n    setSelectedDateRange(presetRange)\n\n    if (presetRange.to) {\n      setVisibleMonth(presetRange.to)\n    }\n  }\n\n  const handleDateRangeSelect = (newDateRange: DateRange | undefined) => {\n    if (newDateRange) {\n      setSelectedDateRange(newDateRange)\n    }\n  }\n\n  return (\n    <div>\n      <Card className='max-w-xs rounded-[1.75rem] border-border/60 bg-muted/10 py-4 shadow-sm'>\n        <CardContent className='px-4'>\n          <Calendar\n            mode='range'\n            selected={selectedDateRange}\n            onSelect={handleDateRangeSelect}\n            month={visibleMonth}\n            onMonthChange={setVisibleMonth}\n            classNames={{\n              today: '!bg-transparent',\n              day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n            }}\n            className='w-full !bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent'\n          />\n        </CardContent>\n        <CardFooter className='flex flex-wrap gap-2 border-t border-dashed border-border/60 px-4 !pt-4'>\n          {dateRangePresets.map(preset => (\n            <Button\n              key={preset.label}\n              variant='outline'\n              size='sm'\n              className='h-8 rounded-full border-border/60 bg-background'\n              onClick={() => handlePresetSelect(preset.range)}\n            >\n              {preset.label}\n            </Button>\n          ))}\n        </CardFooter>\n      </Card>\n      <p\n        className='text-muted-foreground mt-4 text-center text-[11px] uppercase tracking-wide'\n        role='region'\n      >\n        Range calendar with presets\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar23\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-24",
      "type": "registry:component",
      "title": "Calendar 24",
      "description": "Calendar 24. A calendar component for displaying and selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "card",
        "scroll-area"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-24.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { type ComponentProps, useState } from 'react'\n\nimport { CircleCheckIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/components/base-ui/card'\nimport { ScrollArea } from '@/components/base-ui/scroll-area'\n\ntype TimeSlot = string\ntype CalendarFormatters = NonNullable<\n  ComponentProps<typeof Calendar>['formatters']\n>\ntype CalendarModifiers = NonNullable<ComponentProps<typeof Calendar>['modifiers']>\ntype CalendarModifiersClassNames = NonNullable<\n  ComponentProps<typeof Calendar>['modifiersClassNames']\n>\n\nconst initialSelectedDate: Date = new Date(2025, 5, 20)\nconst initialSelectedTime: TimeSlot = '10:00'\nconst bookedDates: Date[] = Array.from(\n  { length: 3 },\n  (_, index) => new Date(2025, 5, 17 + index)\n)\n\nconst timeSlots: readonly TimeSlot[] = Array.from({ length: 37 }, (_, index) => {\n  const totalMinutes = index * 15\n  const hour = Math.floor(totalMinutes / 60) + 9\n  const minute = totalMinutes % 60\n\n  return `${hour.toString().padStart(2, '0')}:${minute\n    .toString()\n    .padStart(2, '0')}`\n})\n\nconst formatAppointmentDate = (selectedDate: Date): string =>\n  selectedDate.toLocaleDateString('en-US', {\n    weekday: 'long',\n    day: 'numeric',\n    month: 'long'\n  })\n\nconst calendarModifiers = {\n  booked: bookedDates\n} satisfies CalendarModifiers\n\nconst calendarModifiersClassNames = {\n  booked: '[&>button]:line-through opacity-100'\n} satisfies CalendarModifiersClassNames\n\nconst calendarFormatters = {\n  formatWeekdayName: (date: Date): string =>\n    date.toLocaleString('en-US', { weekday: 'short' })\n} satisfies CalendarFormatters\n\nconst Calendar24 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [selectedTime, setSelectedTime] = useState<TimeSlot | null>(\n    initialSelectedTime\n  )\n\n  return (\n    <div>\n      <Card className='gap-0 rounded-[1.75rem] border-border/60 bg-muted/10 p-0 shadow-sm'>\n        <CardHeader className='flex h-max justify-center border-b border-dashed border-border/60 p-4!'>\n          <CardTitle className='text-[1rem]'>Book your appointment</CardTitle>\n        </CardHeader>\n        <CardContent className='relative flex flex-col p-0 max-[1439px]:items-center max-[1439px]:flex-col min-[1440px]:flex-row min-[1440px]:pr-48'>\n          <div className='p-3 sm:p-4 min-[1440px]:flex-1 min-[1440px]:p-6'>\n            <Calendar\n              mode='single'\n              selected={selectedDate}\n              onSelect={setSelectedDate}\n              defaultMonth={selectedDate}\n              disabled={bookedDates}\n              showOutsideDays={false}\n              modifiers={calendarModifiers}\n              modifiersClassNames={calendarModifiersClassNames}\n              classNames={{\n                today: '!bg-transparent',\n                day_button:\n                  '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n              }}\n              className='!bg-transparent p-0 !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent [--cell-size:--spacing(10)]'\n              formatters={calendarFormatters}\n            />\n          </div>\n          <div className='flex w-full flex-col gap-4 border-t border-dashed border-border/60 max-[1439px]:h-60 min-[1440px]:absolute min-[1440px]:inset-y-0 min-[1440px]:right-0 min-[1440px]:w-48 min-[1440px]:border-t-0 min-[1440px]:border-l'>\n            <ScrollArea className='h-full'>\n              <div className='flex flex-col gap-2 p-3 sm:p-4 min-[1440px]:p-6'>\n                {timeSlots.map(time => (\n                  <Button\n                    key={time}\n                    variant={selectedTime === time ? 'default' : 'outline'}\n                    onClick={() => setSelectedTime(time)}\n                    className={`h-9 w-full rounded-full border-border/60 shadow-none ${\n                      selectedTime === time\n                        ? 'bg-slate-900 text-white hover:bg-slate-950 dark:bg-slate-100 dark:text-slate-950 dark:hover:bg-slate-200'\n                        : 'bg-background'\n                    }`}\n                  >\n                    {time}\n                  </Button>\n                ))}\n              </div>\n            </ScrollArea>\n          </div>\n        </CardContent>\n        <CardFooter className='flex flex-col gap-4 border-t border-dashed border-border/60 px-6 py-5! md:flex-row'>\n          <div className='flex items-center gap-2 text-sm'>\n            {selectedDate && selectedTime ? (\n              <>\n                <CircleCheckIcon className='size-5 stroke-green-600 dark:stroke-green-400' />\n                <span>\n                  Your meeting is booked for{' '}\n                  <span className='font-medium'>\n                    {' '}\n                    {formatAppointmentDate(selectedDate)}{' '}\n                  </span>\n                  at <span className='font-medium'>{selectedTime}</span>.\n                </span>\n              </>\n            ) : (\n              <>Select a date and time for your meeting.</>\n            )}\n          </div>\n          <Button\n            disabled={!selectedDate || !selectedTime}\n            className='h-9 w-full rounded-full md:ml-auto md:w-auto'\n            variant='outline'\n          >\n            Continue\n          </Button>\n        </CardFooter>\n      </Card>\n      <p className='text-muted-foreground mt-4 text-center text-xs' role='region'>\n        Appointment calendar\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar24\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar-25",
      "type": "registry:component",
      "title": "Calendar 25",
      "description": "Calendar 25. A calendar component for displaying and selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "calendar"
      ],
      "files": [
        {
          "path": "components/watermelon/calendar-25.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { type ComponentProps, useState } from 'react'\n\nimport { Calendar, CalendarDayButton } from '@/components/base-ui/calendar'\n\ntype CalendarComponents = NonNullable<ComponentProps<typeof Calendar>['components']>\ntype CalendarDayButtonProps = ComponentProps<typeof CalendarDayButton>\n\nconst initialSelectedDate: Date = new Date()\nconst minimumAvailableDate: Date = new Date()\n\nfunction getPriceForDate(date: Date): number {\n  const seed = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate()\n  const randomValue = (seed * 9301 + 49297) % 233280\n\n  return Math.floor(50 + (randomValue / 233280) * 200)\n}\n\nconst calendarComponents = {\n  DayButton: ({ children, modifiers, day, ...props }: CalendarDayButtonProps) => {\n    const price = getPriceForDate(day.date)\n    const isLowPrice = price < 100\n\n    return (\n      <CalendarDayButton\n        day={day}\n        modifiers={modifiers}\n        {...props}\n        className='flex-col gap-0.5 px-1 py-1 sm:gap-1 sm:px-2 sm:py-2'\n      >\n        {children}\n        {!modifiers.outside && (\n          <span\n            className={\n              modifiers.selected\n                ? 'text-[0.6rem] leading-none text-zinc-100 opacity-100 sm:text-xs'\n                : isLowPrice\n                  ? 'text-[0.6rem] leading-none font-medium text-emerald-600 dark:text-emerald-400 sm:text-xs'\n                  : 'text-[0.6rem] leading-none text-muted-foreground sm:text-xs'\n            }\n          >\n            ${price}\n          </span>\n        )}\n      </CalendarDayButton>\n    )\n  }\n} satisfies CalendarComponents\n\nconst Calendar25 = () => {\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n\n  return (\n    <div className='mx-auto w-full max-w-[20rem] px-2 sm:max-w-[24rem] sm:px-0 md:max-w-[30rem] lg:max-w-[34rem] xl:max-w-[38rem]'>\n      <Calendar\n        mode='single'\n        selected={selectedDate}\n        onSelect={setSelectedDate}\n        showOutsideDays={false}\n        classNames={{\n          today: '!bg-transparent',\n          day_button: '!ring-0 !ring-offset-0 focus:!ring-0 focus-visible:!ring-0'\n        }}\n        className='w-full !border-0 !bg-transparent p-2 transition-all !ring-0 !ring-offset-0 focus:!ring-0 focus:!ring-offset-0 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_*]:!ring-0 [&_*]:!ring-offset-0 [&_*]:focus:!ring-0 [&_*]:focus-visible:!ring-0 [&_.rdp-day_today]:!bg-transparent [--cell-size:--spacing(7)] sm:p-3 sm:[--cell-size:--spacing(8)] md:p-3 md:[--cell-size:--spacing(9)] lg:[--cell-size:--spacing(10)] xl:[--cell-size:--spacing(12)]'\n        components={calendarComponents}\n        disabled={{ before: minimumAvailableDate }}\n      />\n      <p\n        className='text-muted-foreground mt-4 text-center text-[10px] uppercase tracking-wide sm:text-[11px]'\n        role='region'\n      >\n        Calendar with pricing\n      </p>\n    </div>\n  )\n}\n\nexport default Calendar25\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-1",
      "type": "registry:component",
      "title": "Card 1",
      "description": "Card 1. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/card-1.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\ntype FormField = {\n  id: string;\n  label: string;\n  placeholder?: string;\n  type: 'email' | 'password';\n};\n\nconst fields: readonly FormField[] = [\n  {\n    id: 'work-email',\n    label: 'Work email',\n    placeholder: 'team@studio.com',\n    type: 'email',\n  },\n  {\n    id: 'access-code',\n    label: 'Access code',\n    type: 'password',\n  },\n] as const;\n\nconst Card1 = () => {\n  return (\n    <Card className=\"border-border/60 bg-background/95 w-full max-w-md shadow-xl\">\n      <CardHeader className=\"space-y-1\">\n        <CardTitle className=\"text-xl\">Sign in to your workspace</CardTitle>\n        <CardDescription className=\"max-w-sm text-sm leading-6\">\n          Use your work details to continue to the project dashboard.\n        </CardDescription>\n      </CardHeader>\n      <CardContent>\n        <form>\n          <div className=\"flex flex-col gap-5\">\n            {fields.map((field) => (\n              <div key={field.id} className=\"grid gap-2\">\n                <div className=\"flex items-center\">\n                  <Label htmlFor={field.id} className=\"text-sm font-medium\">\n                    {field.label}\n                  </Label>\n                  {field.id === 'access-code' ? (\n                    <a\n                      href=\"#\"\n                      className=\"text-muted-foreground ml-auto inline-block text-sm underline-offset-4 hover:underline\"\n                    >\n                      Reset it\n                    </a>\n                  ) : null}\n                </div>\n                <Input\n                  id={field.id}\n                  type={field.type}\n                  placeholder={field.placeholder}\n                  className=\"border-border/70 h-11\"\n                />\n              </div>\n            ))}\n          </div>\n        </form>\n      </CardContent>\n      <CardFooter className=\"flex-col gap-2.5 pt-3\">\n        <Button\n          type=\"submit\"\n          className=\"h-11 w-full bg-sky-600 text-white hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\"\n        >\n          Continue\n        </Button>\n        <Button variant=\"outline\" className=\"border-border/70 h-11 w-full\">\n          Sign in with email link\n        </Button>\n        <div className=\"text-muted-foreground mt-3 text-center text-sm\">\n          New here?{' '}\n          <a href=\"#\" className=\"text-foreground underline underline-offset-4\">\n            Request access\n          </a>\n        </div>\n      </CardFooter>\n    </Card>\n  );\n};\n\nexport default Card1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-2",
      "type": "registry:component",
      "title": "Card 2",
      "description": "Card 2. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "card",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/card-2.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\ntype Collaborator = {\n  fallback: string;\n  name: string;\n  src: string;\n};\n\ntype NoteCardContent = {\n  description: string;\n  items: readonly string[];\n  summary: string;\n  title: string;\n};\n\nconst collaborators: readonly Collaborator[] = [\n  {\n    src: 'https://i.pravatar.cc/160?img=28',\n    fallback: 'MC',\n    name: 'Maya Chen',\n  },\n  {\n    src: 'https://i.pravatar.cc/160?img=41',\n    fallback: 'NG',\n    name: 'Noah Grant',\n  },\n  {\n    src: 'https://i.pravatar.cc/160?img=60',\n    fallback: 'AL',\n    name: 'Amara Lewis',\n  },\n  {\n    src: 'https://i.pravatar.cc/160?img=66',\n    fallback: 'CP',\n    name: 'Clara Patel',\n  },\n] as const;\n\nconst noteCard: NoteCardContent = {\n  description: 'Key points from the weekly planning review.',\n  items: [\n    'Finalize onboarding checklist before Friday.',\n    'Reduce the number of steps in the setup flow.',\n    'Prepare a lighter mobile navigation pattern.',\n    'Share updated mockups with the product team.',\n    'Review launch risks in the Monday standup.',\n  ],\n  summary:\n    'The team aligned on simplification, mobile polish, and a tighter launch checklist.',\n  title: 'Planning Recap',\n};\n\nconst Card2 = () => {\n  return (\n    <Card className=\"border-border/70 max-w-md shadow-sm\">\n      <CardHeader className=\"space-y-1\">\n        <CardTitle>{noteCard.title}</CardTitle>\n        <CardDescription>{noteCard.description}</CardDescription>\n      </CardHeader>\n      <CardContent className=\"space-y-4 text-sm\">\n        <p className=\"text-muted-foreground leading-6\">{noteCard.summary}</p>\n        <ol className=\"text-foreground flex list-decimal flex-col gap-2 pl-5\">\n          {noteCard.items.map((item) => (\n            <li key={item}>{item}</li>\n          ))}\n        </ol>\n      </CardContent>\n      <CardFooter className=\"border-border/60 flex items-center justify-between gap-4 border-t pt-5\">\n        <span className=\"text-muted-foreground text-sm\">\n          Reviewed by the project team\n        </span>\n        <TooltipProvider>\n          <div className=\"flex -space-x-2\">\n            {collaborators.map((collaborator) => (\n              <Tooltip key={collaborator.name}>\n                <TooltipTrigger>\n                  <Avatar className=\"ring-background ring-2 transition-all duration-300 ease-in-out\">\n                    <AvatarImage\n                      src={collaborator.src}\n                      alt={collaborator.name}\n                    />\n                    <AvatarFallback className=\"text-xs\">\n                      {collaborator.fallback}\n                    </AvatarFallback>\n                  </Avatar>\n                </TooltipTrigger>\n                <TooltipContent className=\"px-2 py-1 text-xs\">\n                  {collaborator.name}\n                </TooltipContent>\n              </Tooltip>\n            ))}\n          </div>\n        </TooltipProvider>\n      </CardFooter>\n    </Card>\n  );\n};\n\nexport default Card2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-3",
      "type": "registry:component",
      "title": "Card 3",
      "description": "Card 3. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-3.tsx",
          "type": "registry:component",
          "content": "import { CircleFadingPlusIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Card,\n  CardContent,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype TeamMember = {\n  fallback: string;\n  imageAlt: string;\n  name: string;\n  role: string;\n  src: string;\n};\n\nconst members: readonly TeamMember[] = [\n  {\n    fallback: 'MC',\n    imageAlt: 'Maya Chen',\n    name: 'Maya Chen',\n    role: 'Product Designer',\n    src: 'https://i.pravatar.cc/160?img=28',\n  },\n  {\n    fallback: 'EL',\n    imageAlt: 'Ethan Lewis',\n    name: 'Ethan Lewis',\n    role: 'Frontend Engineer',\n    src: 'https://i.pravatar.cc/160?img=36',\n  },\n  {\n    fallback: 'AP',\n    imageAlt: 'Ava Patel',\n    name: 'Ava Patel',\n    role: 'Brand Strategist',\n    src: 'https://i.pravatar.cc/160?img=52',\n  },\n] as const;\n\nconst Card3 = () => {\n  return (\n    <Card className=\"border-border/70 w-full max-w-lg shadow-sm\">\n      <CardHeader>\n        <CardTitle>Project Team</CardTitle>\n      </CardHeader>\n      <CardContent className=\"grid gap-3 sm:grid-cols-2\">\n        <button\n          type=\"button\"\n          className=\"border-border/50 bg-muted/15 hover:bg-muted/25 flex items-center gap-4 rounded-lg border border-dashed px-4 py-3 text-left transition-colors\"\n        >\n          <CircleFadingPlusIcon className=\"text-muted-foreground size-5\" />\n          <span className=\"text-sm font-semibold\">Invite teammate</span>\n        </button>\n        {members.map((member) => (\n          <div\n            key={member.name}\n            className=\"border-border/45 bg-background/70 flex items-center gap-4 rounded-lg border px-4 py-3\"\n          >\n            <Avatar>\n              <AvatarImage src={member.src} alt={member.imageAlt} />\n              <AvatarFallback className=\"text-xs\">\n                {member.fallback}\n              </AvatarFallback>\n            </Avatar>\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-semibold\">{member.name}</span>\n              <span className=\"text-muted-foreground text-sm\">\n                {member.role}\n              </span>\n            </div>\n          </div>\n        ))}\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-4",
      "type": "registry:component",
      "title": "Card 4",
      "description": "Card 4. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-4.tsx",
          "type": "registry:component",
          "content": "import {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype MediaCard = {\n  description: string;\n  imageAlt: string;\n  imageSrc: string;\n  title: string;\n};\n\nconst mediaCard: MediaCard = {\n  description:\n    'A still-life composition with geometric forms and warm neutral tones for a quieter editorial feel.',\n  imageAlt: 'Wooden hand and geometric shapes on beige background',\n  imageSrc:\n    'https://unsplash.com/photos/-De5IOMxxPM/download?force=true&w=1200',\n  title: 'Still Life Study',\n};\n\nconst Card4 = () => {\n  return (\n    <Card className=\"border-border/60 bg-muted/10 max-w-md p-2 shadow-sm\">\n      <CardHeader className=\"space-y-1 px-4 pt-3 pb-2\">\n        <CardTitle className=\"text-lg\">{mediaCard.title}</CardTitle>\n        <CardDescription className=\"max-w-sm text-sm leading-6\">\n          {mediaCard.description}\n        </CardDescription>\n      </CardHeader>\n      <CardContent className=\"px-2 pb-2\">\n        <img\n          src={mediaCard.imageSrc}\n          alt={mediaCard.imageAlt}\n          className=\"aspect-4/3 w-full rounded-xl object-cover\"\n        />\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-5",
      "type": "registry:component",
      "title": "Card 5",
      "description": "Card 5. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-5.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype MediaCard = {\n  description: string;\n  imageAlt: string;\n  imageSrc: string;\n  primaryAction: string;\n  secondaryAction: string;\n  title: string;\n};\n\nconst mediaCard: MediaCard = {\n  description:\n    'A high-contrast abstract light painting with a darker palette and a more cinematic surface.',\n  imageAlt: 'Red white and blue abstract light painting on black background',\n  imageSrc:\n    'https://unsplash.com/photos/fFVfa7ZDTCc/download?force=true&w=1200',\n  primaryAction: 'View Details',\n  secondaryAction: 'Save Reference',\n  title: 'Afterglow Motion',\n};\n\nconst Card5 = () => {\n  return (\n    <Card className=\"border-border/70 bg-muted/10 max-w-md overflow-hidden pt-0 shadow-sm\">\n      <CardContent className=\"px-0\">\n        <img\n          src={mediaCard.imageSrc}\n          alt={mediaCard.imageAlt}\n          className=\"aspect-4/3 h-72 w-full object-cover\"\n        />\n      </CardContent>\n      <CardHeader className=\"space-y-1 pb-4\">\n        <CardTitle className=\"text-lg\">{mediaCard.title}</CardTitle>\n        <CardDescription className=\"leading-6\">\n          {mediaCard.description}\n        </CardDescription>\n      </CardHeader>\n      <CardFooter className=\"border-border/60 gap-3 border-t pt-5 max-sm:flex-col max-sm:items-stretch\">\n        <Button className=\"bg-sky-600 text-white hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\">\n          {mediaCard.primaryAction}\n        </Button>\n        <Button variant=\"outline\">{mediaCard.secondaryAction}</Button>\n      </CardFooter>\n    </Card>\n  );\n};\n\nexport default Card5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-6",
      "type": "registry:component",
      "title": "Card 6",
      "description": "Card 6. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-6.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype MediaCard = {\n  ctaLabel: string;\n  description: string;\n  imageAlt: string;\n  imageSrc: string;\n  title: string;\n};\n\nconst mediaCard: MediaCard = {\n  ctaLabel: 'Open Collection',\n  description:\n    'A pastel gradient study with softer transitions and a cleaner editorial feel.',\n  imageAlt: 'Abstract pastel composition',\n  imageSrc: 'https://picsum.photos/seed/pastel-motion-field/1200/900',\n  title: 'Pastel Motion Field',\n};\n\nconst Card6 = () => {\n  return (\n    <Card className=\"border-border/70 max-w-lg overflow-hidden py-0 shadow-sm sm:flex-row sm:gap-0\">\n      <CardContent className=\"grow px-0\">\n        <img\n          src={mediaCard.imageSrc}\n          alt={mediaCard.imageAlt}\n          className=\"size-full object-cover sm:min-h-full sm:rounded-l-xl\"\n        />\n      </CardContent>\n      <div className=\"sm:min-w-60\">\n        <CardHeader className=\"space-y-1 py-6\">\n          <CardTitle>{mediaCard.title}</CardTitle>\n          <CardDescription className=\"leading-6\">\n            {mediaCard.description}\n          </CardDescription>\n        </CardHeader>\n        <CardFooter className=\"gap-3 py-4 rounded-none\">\n          <Button className=\"bg-sky-600 text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.35),inset_0_-2px_4px_rgba(0,0,0,0.18),0_6px_14px_rgba(14,165,233,0.22)] hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\">\n            {mediaCard.ctaLabel}\n          </Button>\n        </CardFooter>\n      </div>\n    </Card>\n  );\n};\n\nexport default Card6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-7",
      "type": "registry:component",
      "title": "Card 7",
      "description": "Card 7. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-7.tsx",
          "type": "registry:component",
          "content": "import {\n  Card,\n  CardContent,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype OverlayCard = {\n  description: string;\n  imageAlt: string;\n  imageSrc: string;\n  title: string;\n};\n\nconst overlayCard: OverlayCard = {\n  description:\n    'Build moodboards, gather visual references, and shape early concepts in one shared creative surface.',\n  imageAlt: 'Creative desk with sketches and materials',\n  imageSrc: 'https://picsum.photos/seed/creative-catalyst/1200/900',\n  title: 'Creative Catalyst',\n};\n\nconst Card7 = () => {\n  return (\n    <Card className=\"relative max-w-md overflow-hidden border-0 py-0 shadow-sm bg-black/50\">\n      <CardContent className=\"px-0\">\n        <img\n          src={overlayCard.imageSrc}\n          alt={overlayCard.imageAlt}\n          className=\"h-72 w-full object-cover opacity-90\"\n        />\n      </CardContent>\n      <div className=\"absolute overflow-hidden inset-x-0 bottom-0 h-40\" />\n      <div className=\"absolute inset-0 bg-linear-to-t from-black/60 via-black/20 to-transparent\" />\n      <div className=\"absolute inset-x-0 bottom-0 z-10\">\n        <CardHeader className=\"space-y-2 pb-4 text-white\">\n          <CardTitle className=\"text-xl [text-shadow:0_2px_10px_rgba(0,0,0,0.55)]\">{overlayCard.title}</CardTitle>\n          <p className=\"max-w-sm text-sm leading-5 text-white/80 [text-shadow:0_1px_6px_rgba(0,0,0,0.45)]\">\n            {overlayCard.description}\n          </p>\n        </CardHeader>\n      </div>\n    </Card>\n  );\n};\n\nexport default Card7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-8",
      "type": "registry:component",
      "title": "Card 8",
      "description": "Card 8. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-8.tsx",
          "type": "registry:component",
          "content": "import {\n  Card,\n  CardContent,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype TextCard = {\n  body: string;\n  title: string;\n};\n\nconst textCard: TextCard = {\n  body: 'A focused sprint for concepts, critique, and quick iterations. Bring one strong direction and refine it through shared feedback.',\n  title: 'Studio Review',\n};\n\nconst Card8 = () => {\n  return (\n    <Card className=\"border-border/70 max-w-md gap-0 bg-sky-50/70 shadow-sm dark:bg-neutral-950/20\">\n      <CardHeader className=\"pb-3\">\n        <CardTitle>{textCard.title}</CardTitle>\n      </CardHeader>\n      <CardContent className=\"text-muted-foreground text-sm leading-6\">\n        {textCard.body}\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-9",
      "type": "registry:component",
      "title": "Card 9",
      "description": "Card 9. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-9.tsx",
          "type": "registry:component",
          "content": "import {\n  Card,\n  CardContent,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype TextCard = {\n  body: string;\n  title: string;\n};\n\nconst textCard: TextCard = {\n  body: 'Map early concepts, align the team around one clear direction, and turn rough ideas into a sharper narrative.',\n  title: 'Concept Review',\n};\n\nconst Card9 = () => {\n  return (\n    <Card className=\"max-w-md gap-0 rounded-none border-sky-500/60 bg-transparent shadow-2xl\">\n      <CardHeader className=\"pb-3\">\n        <CardTitle className=\"text-sky-700 dark:text-sky-400\">\n          {textCard.title}\n        </CardTitle>\n      </CardHeader>\n      <CardContent className=\"text-muted-foreground text-sm leading-6\">\n        {textCard.body}\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-10",
      "type": "registry:component",
      "title": "Card 10",
      "description": "Card 10. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "card",
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/card-10.tsx",
          "type": "registry:component",
          "content": "import { Card, CardContent } from '@/components/base-ui/card';\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\ntype CardTab = {\n  content: string;\n  label: string;\n  value: 'overview' | 'activity' | 'files';\n};\n\nconst tabs: readonly CardTab[] = [\n  {\n    label: 'Overview',\n    value: 'overview',\n    content:\n      'Review the current project summary, key milestones, and the latest notes from the team before moving into detailed updates.',\n  },\n  {\n    label: 'Activity',\n    value: 'activity',\n    content:\n      'See the most recent edits, comments, and status changes so you can quickly understand what moved forward this week.',\n  },\n  {\n    label: 'Files',\n    value: 'files',\n    content:\n      'Browse shared assets, working drafts, and final exports collected for the project in one organized place. Share your files seamlessly with the team.',\n  },\n] as const;\n\nconst Card10 = () => {\n  return (\n    <Card className=\"border-border/70 w-max bg-neutral-100 shadow-sm dark:bg-neutral-900 py-3\">\n      <CardContent className=\"px-2\">\n        <Tabs defaultValue={tabs[0].value} className=\"w-full max-w-sm\">\n          <TabsList className=\"w-full justify-start gap-1 bg-transparent shadow-none\">\n            {tabs.map((tab) => (\n              <TabsTrigger\n                key={tab.value}\n                value={tab.value}\n                className=\"text-muted-foreground dark:data-[state=active]:border-border dark:data-[state=active]:bg-background dark:data-[state=active]:text-foreground h-9 rounded-md border border-transparent bg-transparent px-2 data-[state=active]:border-slate-300 data-[state=active]:bg-slate-100 data-[state=active]:text-slate-950 data-[state=active]:shadow-sm\"\n              >\n                {tab.label}\n              </TabsTrigger>\n            ))}\n          </TabsList>\n          {tabs.map((tab) => (\n            <TabsContent key={tab.value} value={tab.value}>\n              <p className=\"text-muted-foreground p-2 text-sm leading-6\">\n                {tab.content}\n              </p>\n            </TabsContent>\n          ))}\n        </Tabs>\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-11",
      "type": "registry:component",
      "title": "Card 11",
      "description": "Card 11. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-11.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport {\n  BadgeCheckIcon,\n  BookmarkIcon,\n  EllipsisIcon,\n  HeartIcon,\n  MessageCircleIcon,\n  SendIcon,\n} from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\nimport { cn } from '@/lib/utils';\n\ntype Profile = {\n  fallback: string;\n  handle: string;\n  imageAlt: string;\n  imageSrc: string;\n  name: string;\n};\n\ntype PostStat = {\n  icon: LucideIcon;\n  label: string;\n};\n\ntype SocialPost = {\n  body: string;\n  likes: string;\n  hashtags: readonly string[];\n  imageAlt: string;\n  imageSrc: string;\n  location: string;\n};\n\nconst profile: Profile = {\n  fallback: 'MC',\n  handle: '@maya.frames',\n  imageAlt: 'Maya Chen',\n  imageSrc: 'https://i.pravatar.cc/160?img=47',\n  name: 'Maya Chen',\n};\n\nconst post: SocialPost = {\n  body: 'Working through a softer visual direction today. The blur, color glow, and layered light helped the concept feel more cinematic without losing clarity.',\n  likes: '2,341 likes',\n  hashtags: ['#ColorStudy', '#LightPlay', '#VisualNotes'],\n  imageAlt: 'Abstract neon portrait with motion blur',\n  imageSrc:\n    'https://images.pexels.com/photos/29140599/pexels-photo-29140599.jpeg?auto=compress&cs=tinysrgb&w=1200',\n  location: 'Ahmedabad, India',\n};\n\nconst stats: readonly PostStat[] = [\n  { icon: HeartIcon, label: 'Like' },\n  { icon: MessageCircleIcon, label: 'Comment' },\n  { icon: SendIcon, label: 'Share' },\n] as const;\n\nconst Card11 = () => {\n  const [liked, setLiked] = useState<boolean>(true);\n\n  return (\n    <Card className=\"border-border/70 bg-background max-w-md overflow-hidden rounded-xl shadow-sm\">\n      <CardHeader className=\"flex items-center justify-between gap-3 px-4\">\n        <div className=\"flex items-center gap-3\">\n          <Avatar className=\"size-9\">\n            <AvatarImage src={profile.imageSrc} alt={profile.imageAlt} />\n            <AvatarFallback className=\"text-xs\">\n              {profile.fallback}\n            </AvatarFallback>\n          </Avatar>\n          <div className=\"flex flex-col gap-0.5\">\n            <CardTitle className=\"flex items-center gap-1 text-sm\">\n              {profile.name}{' '}\n              <BadgeCheckIcon className=\"size-4 fill-sky-600 stroke-white dark:fill-sky-400\" />\n            </CardTitle>\n            <span className=\"text-muted-foreground text-xs\">\n              {post.location}\n            </span>\n          </div>\n        </div>\n        <Button\n          variant=\"ghost\"\n          size=\"icon\"\n          aria-label=\"Toggle menu\"\n          className=\"size-8 rounded-full\"\n        >\n          <EllipsisIcon className=\"size-4\" />\n        </Button>\n      </CardHeader>\n      <CardContent className=\"space-y-3 px-0 text-sm\">\n        <img\n          src={post.imageSrc}\n          alt={post.imageAlt}\n          className=\"aspect-square w-full object-cover\"\n        />\n        <div className=\"space-y-3 px-4\">\n          <div className=\"flex items-center justify-between\">\n            <div className=\"flex items-center gap-1\">\n              {stats.map((stat) => {\n                const Icon = stat.icon;\n                const isLike = stat.label === 'Like';\n\n                return (\n                  <Button\n                    key={stat.label}\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    className=\"size-9 rounded-full\"\n                    onClick={\n                      isLike ? () => setLiked((current) => !current) : undefined\n                    }\n                  >\n                    <Icon\n                      className={cn(\n                        'size-5',\n                        isLike &&\n                          liked &&\n                          'fill-destructive stroke-destructive',\n                      )}\n                    />\n                    <span className=\"sr-only\">{stat.label}</span>\n                  </Button>\n                );\n              })}\n            </div>\n            <Button variant=\"ghost\" size=\"icon\" className=\"size-9 rounded-full\">\n              <BookmarkIcon className=\"size-5\" />\n              <span className=\"sr-only\">Save</span>\n            </Button>\n          </div>\n          <div className=\"space-y-1.5\">\n            <p className=\"text-foreground text-sm font-semibold\">\n              {post.likes}\n            </p>\n            <p className=\"text-foreground/90 leading-6\">\n              <span className=\"mr-1 font-semibold\">{profile.handle}</span>\n              {post.body}{' '}\n              {post.hashtags.map((tag) => (\n                <a\n                  key={tag}\n                  href=\"#\"\n                  className=\"text-sky-600 dark:text-sky-400\"\n                >\n                  {tag}{' '}\n                </a>\n              ))}\n            </p>\n          </div>\n        </div>\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-12",
      "type": "registry:component",
      "title": "Card 12",
      "description": "Card 12. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-12.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { HeartIcon } from 'lucide-react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\nimport { cn } from '@/lib/utils';\n\ntype ProductCard = {\n  colorLabel: string;\n  description: string;\n  imageAlt: string;\n  imageSrc: string;\n  price: string;\n  sizeLabel: string;\n  title: string;\n};\n\nconst product: ProductCard = {\n  colorLabel: 'Crimson / White',\n  description:\n    'A lightweight everyday runner with a bold profile, cushioned sole, and a shape that works on and off the track.',\n  imageAlt: 'Red running shoe on red background',\n  imageSrc:\n    'https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=1200&q=80',\n  price: '$84.00',\n  sizeLabel: 'EU 39',\n  title: 'Velocity Run One',\n};\n\nconst Card12 = () => {\n  const [liked, setLiked] = useState<boolean>(false);\n\n  return (\n    <div className=\"relative max-w-md overflow-hidden rounded-2xl shadow-lg\">\n      <div className=\"relative h-72\">\n        <img\n          src={product.imageSrc}\n          alt={product.imageAlt}\n          className=\"size-full object-cover\"\n        />\n        <div className=\"absolute inset-0 bg-linear-to-t from-black/10 via-transparent to-transparent\" />\n      </div>\n      <Button\n        size=\"icon\"\n        onClick={() => setLiked((current) => !current)}\n        className=\"absolute top-4 right-4 rounded-full border border-white/60 bg-white/85 text-slate-900 shadow-sm backdrop-blur-sm hover:bg-white dark:border-white/15 dark:bg-black/55 dark:text-slate-100 dark:hover:bg-black/70\"\n      >\n        <HeartIcon\n          className={cn(\n            'size-4',\n            liked ? 'fill-destructive stroke-destructive' : 'stroke-current',\n          )}\n        />\n        <span className=\"sr-only\">Like</span>\n      </Button>\n      <Card className=\"rounded-t-none border-none shadow-none\">\n        <CardHeader className=\"space-y-2\">\n          <CardTitle>{product.title}</CardTitle>\n          <CardDescription className=\"flex flex-wrap items-center gap-2\">\n            <Badge\n              variant=\"outline\"\n              className=\"border-border/70 bg-background/70 rounded-sm\"\n            >\n              {product.sizeLabel}\n            </Badge>\n            <Badge\n              variant=\"outline\"\n              className=\"border-border/70 bg-background/70 rounded-sm\"\n            >\n              {product.colorLabel}\n            </Badge>\n          </CardDescription>\n        </CardHeader>\n        <CardContent>\n          <p className=\"text-muted-foreground leading-6\">\n            {product.description}\n          </p>\n        </CardContent>\n        <CardFooter className=\"justify-between gap-3 max-sm:flex-col max-sm:items-stretch\">\n          <div className=\"flex flex-col\">\n            <span className=\"text-muted-foreground text-sm font-medium uppercase\">\n              Price\n            </span>\n            <span className=\"text-2xl font-semibold\">{product.price}</span>\n          </div>\n          <Button\n            size=\"lg\"\n            className=\"bg-sky-600 text-white hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\"\n          >\n            Add to cart\n          </Button>\n        </CardFooter>\n      </Card>\n    </div>\n  );\n};\n\nexport default Card12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-13",
      "type": "registry:component",
      "title": "Card 13",
      "description": "Card 13. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-13.tsx",
          "type": "registry:component",
          "content": "import { StarIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype Testimonial = {\n  avatarAlt: string;\n  avatarSrc: string;\n  fallback: string;\n  handle: string;\n  highlightedText: string;\n  name: string;\n  quoteEnd: string;\n  quoteStart: string;\n  rating: number;\n};\n\nconst testimonial: Testimonial = {\n  avatarAlt: 'Sara Gomez',\n  avatarSrc: 'https://i.pravatar.cc/160?img=32',\n  fallback: 'SG',\n  handle: '@sarag.design',\n  highlightedText:\n    'easy to adapt, clean to extend, and reliable inside real product work',\n  name: 'Sara Gomez',\n  quoteEnd:\n    'That combination made it much easier to move from idea to implementation without reworking everything later.',\n  quoteStart:\n    'This component set feels thoughtful from the start. The pieces are',\n  rating: 4,\n};\n\nconst Card13 = () => {\n  return (\n    <Card className=\"border-border/70 bg-background max-w-md rounded-none shadow-sm\">\n      <CardContent className=\"leading-7\">\n        <p>\n          {testimonial.quoteStart}{' '}\n          <span className=\"border border-dashed border-neutral-300 bg-neutral-50 px-1.5 py-0.5 dark:border-neutral-800 dark:bg-neutral-950/30\">\n            {testimonial.highlightedText}\n          </span>\n          . {testimonial.quoteEnd}\n        </p>\n      </CardContent>\n      <CardFooter className=\"border-border/60 rounded-none justify-between gap-3 border-t pt-5 max-sm:flex-col max-sm:items-stretch\">\n        <div className=\"flex items-center gap-3\">\n          <Avatar className=\"ring-ring ring-2\">\n            <AvatarImage\n              src={testimonial.avatarSrc}\n              alt={testimonial.avatarAlt}\n            />\n            <AvatarFallback className=\"text-xs\">\n              {testimonial.fallback}\n            </AvatarFallback>\n          </Avatar>\n          <div className=\"flex flex-col gap-0.5\">\n            <CardTitle className=\"text-sm\">{testimonial.name}</CardTitle>\n            <CardDescription>{testimonial.handle}</CardDescription>\n          </div>\n        </div>\n        <div className=\"flex items-center gap-1\">\n          {Array.from({ length: 5 }, (_, index) => {\n            const filled = index < testimonial.rating;\n\n            return (\n              <StarIcon\n                key={index}\n                className={\n                  filled\n                    ? 'size-5 fill-amber-500 stroke-amber-500 dark:fill-amber-400 dark:stroke-amber-400'\n                    : 'size-5 stroke-amber-500 dark:stroke-amber-400'\n                }\n              />\n            );\n          })}\n        </div>\n      </CardFooter>\n    </Card>\n  );\n};\n\nexport default Card13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-14",
      "type": "registry:component",
      "title": "Card 14",
      "description": "Card 14. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-14.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { SparklesIcon, XIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype PromoCard = {\n  ctaLabel: string;\n  icon: LucideIcon;\n  message: string;\n  title: string;\n};\n\nconst promoCard: PromoCard = {\n  ctaLabel: 'Book a review',\n  icon: SparklesIcon,\n  message:\n    'Share your early direction, open questions, or rough ideas and we will help shape them into a clearer next step.',\n  title: 'Need feedback on a concept?',\n};\n\nconst Card14 = () => {\n  const [isActive, setIsActive] = useState<boolean>(true);\n  const Icon = promoCard.icon;\n\n  if (!isActive) return null;\n\n  return (\n    <Card className=\"border-border/70 relative max-w-lg shadow-sm\">\n      <Button\n        variant=\"ghost\"\n        size=\"icon\"\n        onClick={() => setIsActive(false)}\n        className=\"absolute top-2 right-2 rounded-full\"\n      >\n        <XIcon className=\"size-4\" />\n        <span className=\"sr-only\">Close</span>\n      </Button>\n      <CardHeader className=\"items-center pb-3 text-center\">\n        <div className=\"mb-2 flex size-10 items-center justify-center rounded-full bg-sky-100 text-sky-700 dark:bg-sky-950/40 dark:text-sky-300\">\n          <Icon className=\"size-5\" />\n        </div>\n        <CardTitle>{promoCard.title}</CardTitle>\n      </CardHeader>\n      <CardContent className=\"flex flex-col gap-4 text-center\">\n        <p className=\"text-muted-foreground text-sm leading-6\">\n          {promoCard.message}\n        </p>\n        <Button className=\"self-center bg-sky-600 text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.35),inset_0_-2px_4px_rgba(0,0,0,0.18),0_8px_18px_rgba(14,165,233,0.24)] hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\">\n          {promoCard.ctaLabel}\n        </Button>\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Card14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card-15",
      "type": "registry:component",
      "title": "Card 15",
      "description": "Card 15. A card is a container that displays content in a structured and visually appealing way.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card"
      ],
      "files": [
        {
          "path": "components/watermelon/card-15.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\n\ntype GalleryCard = {\n  description: string;\n  imageAlt: string;\n  imageSrc: string;\n  primaryAction: string;\n  secondaryAction: string;\n  title: string;\n};\n\nconst cards: readonly GalleryCard[] = [\n  {\n    description:\n      'A calm abstract study with soft light, layered curves, and a quieter palette for editorial layouts and better readability.',\n    imageAlt: 'Soft blue abstract composition',\n    imageSrc: 'https://picsum.photos/seed/editorial-blue/1200/900',\n    primaryAction: 'View Piece',\n    secondaryAction: 'Save',\n    title: 'Still Blue Field',\n  },\n  {\n    description:\n      'Warm transitions and glowing orange tones create a softer gradient scene with a cinematic surface and improved contrast.',\n    imageAlt: 'Warm orange abstract composition',\n    imageSrc: 'https://picsum.photos/seed/editorial-sunset/1200/900',\n    primaryAction: 'View Piece',\n    secondaryAction: 'Save',\n    title: 'Warm Fade Study',\n  },\n  {\n    description:\n      'Deep indigo and violet layers build a more atmospheric composition suited to moodboards and cover art.',\n    imageAlt: 'Indigo and violet abstract composition',\n    imageSrc: 'https://picsum.photos/seed/editorial-cosmic/1200/900',\n    primaryAction: 'View Piece',\n    secondaryAction: 'Save',\n    title: 'Night Motion',\n  },\n] as const;\n\nconst Card15 = () => {\n  return (\n    <div className=\"flex *:rounded-none *:shadow-none max-xl:flex-col max-xl:*:not-last:border-b-0 max-xl:*:first:rounded-t-xl max-xl:*:last:rounded-b-xl xl:*:not-last:border-r-0 xl:*:first:rounded-l-xl xl:*:last:rounded-r-xl\">\n      {cards.map((card) => (\n        <Card\n          key={card.title}\n          className=\"border-border/70 overflow-hidden pt-0\"\n        >\n          <CardContent className=\"px-0\">\n            <img\n              src={card.imageSrc}\n              alt={card.imageAlt}\n              className=\"aspect-video w-[24rem] object-cover\"\n            />\n          </CardContent>\n          <CardHeader>\n            <CardTitle>{card.title}</CardTitle>\n            <CardDescription className=\"leading-6\">\n              {card.description}\n            </CardDescription>\n          </CardHeader>\n          <CardFooter className=\"gap-3 max-sm:flex-col max-sm:items-stretch rounded-none\">\n            <Button className=\"bg-sky-600 text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.35),inset_0_-2px_4px_rgba(0,0,0,0.18),0_8px_18px_rgba(14,165,233,0.24)] hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\">\n              {card.primaryAction}\n            </Button>\n            <Button variant=\"outline\">{card.secondaryAction}</Button>\n          </CardFooter>\n        </Card>\n      ))}\n    </div>\n  );\n};\n\nexport default Card15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-1",
      "type": "registry:component",
      "title": "Checkbox 1",
      "description": "Checkbox 1. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-1.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype CheckboxCopy = {\n  label: string\n}\n\nconst checkboxCopy: CheckboxCopy = {\n  label: 'Subscribe to product updates'\n}\n\nconst Checkbox1 = () => {\n  const id = useId()\n  const [isChecked, setIsChecked] = useState<boolean>(false)\n\n  return (\n    <div className='flex max-w-sm items-center gap-2.5'>\n      <Checkbox\n        id={id}\n        checked={isChecked}\n        onCheckedChange={(checked) => setIsChecked(checked === true)}\n        className='data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n      />\n      <Label htmlFor={id} className='text-sm leading-none font-medium'>\n        {checkboxCopy.label}\n      </Label>\n    </div>\n  )\n}\n\nexport default Checkbox1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-2",
      "type": "registry:component",
      "title": "Checkbox 2",
      "description": "Checkbox 2. A checkbox component for selecting options.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-2.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, MinusIcon } from 'lucide-react'\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\n\nimport { Label } from '@/components/base-ui/label'\nimport { cn } from '@/lib/utils'\n\ntype CheckboxRootProps = CheckboxPrimitive.Root.Props\ntype CheckboxCopy = {\n  description: string\n  label: string\n}\n\ntype IndeterminateCheckboxProps = CheckboxRootProps & {\n  checked: boolean\n  indeterminate?: boolean\n}\n\nconst checkboxCopy: CheckboxCopy = {\n  label: 'Enable beta features',\n  description: 'This state is useful when only part of a selection is complete.'\n}\n\nconst Checkbox = ({\n  className,\n  checked,\n  indeterminate = false,\n  ...props\n}: IndeterminateCheckboxProps) => {\n  return (\n    <CheckboxPrimitive.Root\n      data-slot='checkbox'\n      className={cn(\n        'peer relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border border-input bg-background text-muted-foreground outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-input/30 dark:text-muted-foreground data-checked:border-sky-600 data-checked:bg-background data-checked:text-sky-600 data-indeterminate:border-input data-indeterminate:bg-background data-indeterminate:text-muted-foreground dark:data-checked:border-sky-500 dark:data-checked:bg-background dark:data-checked:text-sky-400 dark:data-indeterminate:border-input dark:data-indeterminate:bg-input/30 dark:data-indeterminate:text-muted-foreground aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n        className\n      )}\n      checked={checked}\n      indeterminate={indeterminate}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator\n        data-slot='checkbox-indicator'\n        className='grid place-content-center text-current transition-none'\n      >\n        {indeterminate ? (\n          <MinusIcon className='size-2.5' />\n        ) : (\n          checked && <CheckIcon className='size-3.5' />\n        )}\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  )\n}\n\nconst Checkbox2 = () => {\n  const id = useId()\n  const [isChecked, setIsChecked] = useState<boolean>(false)\n  const [isIndeterminate, setIsIndeterminate] = useState<boolean>(true)\n\n  const handleCheckedChange = (checked: boolean) => {\n    setIsChecked(checked)\n    setIsIndeterminate(false)\n  }\n\n  return (\n    <div className='flex max-w-sm items-start gap-3'>\n      <Checkbox\n        id={id}\n        checked={isChecked}\n        indeterminate={isIndeterminate}\n        onCheckedChange={handleCheckedChange}\n        className='mt-0.5'\n      />\n      <div className='space-y-1'>\n        <Label htmlFor={id} className='text-sm font-medium'>\n          {checkboxCopy.label}\n        </Label>\n        <p className='text-muted-foreground text-xs'>\n          {checkboxCopy.description}\n        </p>\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-3",
      "type": "registry:component",
      "title": "Checkbox 3",
      "description": "Checkbox 3. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-3.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype CheckboxCopy = {\n  label: string\n}\n\nconst checkboxCopy: CheckboxCopy = {\n  label: 'Subscribe to product updates',\n}\n\nconst Checkbox3 = () => {\n  const id = useId()\n  const [isChecked, setIsChecked] = useState<boolean>(false)\n\n  return (\n    <div className='flex max-w-sm items-start gap-3'>\n      <Checkbox\n        id={id}\n        checked={isChecked}\n        onCheckedChange={(checked) => setIsChecked(checked === true)}\n        className='mt-0.5 border-dashed border-input data-checked:border-sky-600 data-checked:bg-sky-600 dark:border-input dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n      />\n      <div className='space-y-1'>\n        <Label htmlFor={id} className='text-sm font-medium'>\n          {checkboxCopy.label}\n        </Label>\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-4",
      "type": "registry:component",
      "title": "Checkbox 4",
      "description": "Checkbox 4. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype CheckboxCopy = {\n  label: string\n}\n\nconst checkboxCopy: CheckboxCopy = {\n  label: 'Review weekly tasks'\n}\n\nconst Checkbox4 = () => {\n  const id = useId()\n  const [isChecked, setIsChecked] = useState<boolean>(true)\n\n  return (\n    <div className='flex max-w-sm items-start gap-3'>\n      <Checkbox\n        id={id}\n        checked={isChecked}\n        onCheckedChange={(checked) => setIsChecked(checked === true)}\n        className='mt-0.5 data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n      />\n      <Label\n        htmlFor={id}\n        className={`text-sm font-medium transition-colors ${\n          isChecked ? 'text-muted-foreground line-through' : ''\n        }`}\n      >\n        {checkboxCopy.label}\n      </Label>\n    </div>\n  )\n}\n\nexport default Checkbox4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-5",
      "type": "registry:component",
      "title": "Checkbox 5",
      "description": "Checkbox 5. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-5.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\n\ntype CheckboxSizeOption = {\n  ariaLabel: string\n  className?: string\n  id: string\n}\n\nconst checkboxSizeOptions: readonly CheckboxSizeOption[] = [\n  {\n    id: 'default',\n    ariaLabel: 'Default checkbox size'\n  },\n  {\n    id: 'medium',\n    ariaLabel: 'Medium checkbox size',\n    className: 'size-5'\n  },\n  {\n    id: 'large',\n    ariaLabel: 'Large checkbox size',\n    className: 'size-6'\n  }\n]\n\nconst Checkbox5 = () => {\n  const [checkedSizes, setCheckedSizes] = useState<Record<string, boolean>>({\n    default: true,\n    medium: true,\n    large: true\n  })\n\n  const handleCheckedChange = (id: CheckboxSizeOption['id'], checked: boolean) => {\n    setCheckedSizes(previousState => ({\n      ...previousState,\n      [id]: checked\n    }))\n  }\n\n  return (\n    <div className='flex items-center gap-3'>\n      {checkboxSizeOptions.map(option => (\n        <Checkbox\n          key={option.id}\n          checked={checkedSizes[option.id]}\n          onCheckedChange={(checked) =>\n            handleCheckedChange(option.id, checked === true)\n          }\n          aria-label={option.ariaLabel}\n          className={`${option.className ?? ''} data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500`.trim()}\n        />\n      ))}\n    </div>\n  )\n}\n\nexport default Checkbox5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-6",
      "type": "registry:component",
      "title": "Checkbox 6",
      "description": "Checkbox 6. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "checkbox"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-6.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport { Checkbox } from '@/components/base-ui/checkbox'\n\nconst snacks = ['Salad', 'Wrap', 'Juice'] as const\n\ntype Snack = (typeof snacks)[number]\n\nconst Checkbox6 = () => {\n  const [selectedSnacks, setSelectedSnacks] = useState<Snack[]>([\n    'Salad',\n    'Wrap'\n  ])\n\n  const handleCheckedChange = (snack: Snack, checked: boolean) => {\n    setSelectedSnacks((previousSelectedSnacks) =>\n      checked\n        ? previousSelectedSnacks.includes(snack)\n          ? previousSelectedSnacks\n          : [...previousSelectedSnacks, snack]\n        : previousSelectedSnacks.filter((selectedSnack) => selectedSnack !== snack)\n    )\n  }\n\n  return (\n    <div className='flex items-center gap-2.5'>\n      {snacks.map((snack) => (\n        <Badge\n          key={snack}\n          variant='secondary'\n          className='relative rounded-lg px-3 py-4'\n        >\n          <Checkbox\n            id={snack}\n            checked={selectedSnacks.includes(snack)}\n            onCheckedChange={(checked) =>\n              handleCheckedChange(snack, checked === true)\n            }\n            className={`pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 ${\n              selectedSnacks.includes(snack)\n                ? 'opacity-100'\n                : 'opacity-0'\n            }`}\n          />\n          <label\n            htmlFor={snack}\n            className={`cursor-pointer select-none text-sm after:absolute after:inset-0 ${\n              selectedSnacks.includes(snack) ? 'pl-5' : ''\n            }`}\n          >\n            {snack}\n          </label>\n        </Badge>\n      ))}\n    </div>\n  )\n}\n\nexport default Checkbox6\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-7",
      "type": "registry:component",
      "title": "Checkbox 7",
      "description": "Checkbox 7. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-7.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype CheckboxCopy = {\n  description: string\n  label: string\n}\n\nconst checkboxCopy: CheckboxCopy = {\n  label: 'Subscribe to updates',\n  description: 'By clicking this checkbox, you agree to the terms and conditions.'\n}\n\nconst Checkbox7 = () => {\n  const id = useId()\n  const [isChecked, setIsChecked] = useState<boolean>(true)\n\n  return (\n    <div className='flex max-w-sm items-start gap-3'>\n      <Checkbox\n        id={id}\n        checked={isChecked}\n        onCheckedChange={(checked) => setIsChecked(checked === true)}\n        className='mt-0.5 data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n      />\n      <div className='grid gap-1.5'>\n        <Label htmlFor={id} className='text-sm leading-4 font-medium'>\n          {checkboxCopy.label}\n        </Label>\n        <p className='text-muted-foreground text-xs'>\n          {checkboxCopy.description}\n        </p>\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox7\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-8",
      "type": "registry:component",
      "title": "Checkbox 8",
      "description": "Checkbox 8. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-8.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\nconst technologies = ['Design', 'Marketing', 'Product'] as const\n\ntype Technology = (typeof technologies)[number]\n\nconst Checkbox8 = () => {\n  const [selectedTechnologies, setSelectedTechnologies] = useState<Technology[]>(\n    []\n  )\n\n  const handleCheckedChange = (technology: Technology, checked: boolean) => {\n    setSelectedTechnologies((previousSelectedTechnologies) =>\n      checked\n        ? previousSelectedTechnologies.includes(technology)\n          ? previousSelectedTechnologies\n          : [...previousSelectedTechnologies, technology]\n        : previousSelectedTechnologies.filter(\n            (selectedTechnology) => selectedTechnology !== technology\n          )\n    )\n  }\n\n  return (\n    <div className='space-y-4'>\n      <Label className='font-semibold'>Team roles</Label>\n      <div className='flex flex-wrap items-center gap-x-5 gap-y-2.5'>\n        {technologies.map((technology) => (\n          <div key={technology} className='flex items-center gap-2'>\n            <Checkbox\n              id={technology}\n              checked={selectedTechnologies.includes(technology)}\n              onCheckedChange={(checked) =>\n                handleCheckedChange(technology, checked === true)\n              }\n              className='data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n            />\n            <Label htmlFor={technology} className='text-sm'>\n              {technology}\n            </Label>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox8\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-9",
      "type": "registry:component",
      "title": "Checkbox 9",
      "description": "Checkbox 9. A checkbox component for selecting options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-9.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState, type ComponentType, type SVGProps } from 'react'\n\nimport { BriefcaseIcon, FolderKanbanIcon, PenToolIcon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype FocusOption = {\n  icon: ComponentType<SVGProps<SVGSVGElement>>\n  label: string\n}\n\nconst focusAreas: readonly FocusOption[] = [\n  { label: 'Planning', icon: FolderKanbanIcon },\n  { label: 'Design', icon: PenToolIcon },\n  { label: 'Operations', icon: BriefcaseIcon }\n]\n\nconst Checkbox9 = () => {\n  const [selectedFocusAreas, setSelectedFocusAreas] = useState<string[]>([])\n\n  const handleCheckedChange = (focusAreaLabel: string, checked: boolean) => {\n    setSelectedFocusAreas((previousSelectedFocusAreas) =>\n      checked\n        ? previousSelectedFocusAreas.includes(focusAreaLabel)\n          ? previousSelectedFocusAreas\n          : [...previousSelectedFocusAreas, focusAreaLabel]\n        : previousSelectedFocusAreas.filter(\n            (selectedFocusArea) => selectedFocusArea !== focusAreaLabel\n          )\n    )\n  }\n\n  return (\n    <div className='space-y-4'>\n      <Label className='font-semibold'>Focus areas</Label>\n      <div className='flex flex-col gap-3.5'>\n        {focusAreas.map(({ label, icon: Icon }) => (\n          <div key={label} className='flex items-center gap-2.5'>\n            <Checkbox\n              id={label}\n              checked={selectedFocusAreas.includes(label)}\n              onCheckedChange={(checked) =>\n                handleCheckedChange(label, checked === true)\n              }\n              className='data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n            />\n            <Label htmlFor={label} className='flex items-center gap-2 text-sm'>\n              <Icon className='size-4 text-muted-foreground' aria-hidden='true' />\n              {label}\n            </Label>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox9\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-10",
      "type": "registry:component",
      "title": "Checkbox 10",
      "description": "Checkbox 10. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-10.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\n\ntype CheckboxColorOption = {\n  ariaLabel: string\n  className: string\n  id: string\n}\n\nconst checkboxColorOptions: readonly CheckboxColorOption[] = [\n  {\n    id: 'destructive',\n    ariaLabel: 'Color destructive',\n    className:\n      'data-checked:border-destructive data-checked:bg-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:text-white'\n  },\n  {\n    id: 'info',\n    ariaLabel: 'Color info',\n    className:\n      'focus-visible:ring-sky-600/20 data-checked:border-sky-600 data-checked:bg-sky-600 dark:text-white dark:focus-visible:ring-sky-400/40 dark:data-checked:border-sky-400 dark:data-checked:bg-sky-400'\n  },\n  {\n    id: 'success',\n    ariaLabel: 'Color success',\n    className:\n      'focus-visible:ring-green-600/20 data-checked:border-green-600 data-checked:bg-green-600 dark:text-white dark:focus-visible:ring-green-400/40 dark:data-checked:border-green-400 dark:data-checked:bg-green-400'\n  }\n]\n\nconst Checkbox10 = () => {\n  const [checkedColors, setCheckedColors] = useState<Record<string, boolean>>({\n    destructive: true,\n    info: true,\n    success: true\n  })\n\n  const handleCheckedChange = (\n    id: CheckboxColorOption['id'],\n    checked: boolean\n  ) => {\n    setCheckedColors((previousCheckedColors) => ({\n      ...previousCheckedColors,\n      [id]: checked\n    }))\n  }\n\n  return (\n    <div className='flex items-center gap-3'>\n      {checkboxColorOptions.map((option) => (\n        <Checkbox\n          key={option.id}\n          checked={checkedColors[option.id]}\n          onCheckedChange={(checked) =>\n            handleCheckedChange(option.id, checked === true)\n          }\n          aria-label={option.ariaLabel}\n          className={`size-5 rounded-[6px] shadow-xs ${option.className}`}\n        />\n      ))}\n    </div>\n  )\n}\n\nexport default Checkbox10\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-11",
      "type": "registry:component",
      "title": "Checkbox 11",
      "description": "Checkbox 11. A checkbox component for selecting options.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-11.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport {\n  type ComponentType,\n  type SVGProps,\n  useState\n} from 'react'\n\nimport { DiamondIcon, HexagonIcon, TriangleIcon } from 'lucide-react'\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\n\ntype IconCheckboxOption = {\n  activeClassName: string\n  ariaLabel: string\n  icon: ComponentType<SVGProps<SVGSVGElement>>\n  id: string\n}\n\nconst iconCheckboxOptions: readonly IconCheckboxOption[] = [\n  {\n    id: 'triangle',\n    ariaLabel: 'Triangle icon',\n    icon: TriangleIcon,\n    activeClassName: 'fill-rose-500 stroke-rose-500 dark:fill-rose-400 dark:stroke-rose-400'\n  },\n  {\n    id: 'diamond',\n    ariaLabel: 'Diamond icon',\n    icon: DiamondIcon,\n    activeClassName:\n      'fill-cyan-500 stroke-cyan-500 dark:fill-cyan-400 dark:stroke-cyan-400'\n  },\n  {\n    id: 'hexagon',\n    ariaLabel: 'Hexagon icon',\n    icon: HexagonIcon,\n    activeClassName:\n      'fill-violet-500 stroke-violet-500 dark:fill-violet-400 dark:stroke-violet-400'\n  }\n]\n\nconst Checkbox11 = () => {\n  const [checkedIcons, setCheckedIcons] = useState<Record<string, boolean>>({\n    triangle: true,\n    diamond: true,\n    hexagon: true\n  })\n\n  const handleCheckedChange = (\n    id: IconCheckboxOption['id'],\n    checked: boolean\n  ) => {\n    setCheckedIcons((previousCheckedIcons) => ({\n      ...previousCheckedIcons,\n      [id]: checked\n    }))\n  }\n\n  return (\n    <div className='flex items-center gap-3'>\n      {iconCheckboxOptions.map((option) => {\n        const Icon = option.icon\n        const isChecked = checkedIcons[option.id]\n\n        return (\n          <CheckboxPrimitive.Root\n            key={option.id}\n            data-slot='checkbox'\n            checked={isChecked}\n            onCheckedChange={(checked) =>\n              handleCheckedChange(option.id, checked === true)\n            }\n            className='group rounded-md outline-none transition-transform hover:scale-[1.03] focus-visible:ring-3 focus-visible:ring-ring/50'\n            aria-label={option.ariaLabel}\n          >\n            <Icon\n              className={`size-5 stroke-1 transition-colors ${\n                isChecked ? option.activeClassName : ''\n              }`}\n            />\n          </CheckboxPrimitive.Root>\n        )\n      })}\n    </div>\n  )\n}\n\nexport default Checkbox11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-12",
      "type": "registry:component",
      "title": "Checkbox 12",
      "description": "Checkbox 12. A checkbox component for selecting options.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-12.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CircleCheckIcon } from 'lucide-react'\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\n\ntype CheckboxColorId = 'destructive' | 'info' | 'success'\n\ntype CheckboxColorOption = {\n  ariaLabel: string\n  className: string\n  id: CheckboxColorId\n}\n\nconst checkboxColorOptions: readonly CheckboxColorOption[] = [\n  {\n    id: 'destructive',\n    ariaLabel: 'Color destructive',\n    className:\n      'bg-destructive focus-visible:ring-destructive/20 data-checked:text-destructive dark:focus-visible:ring-destructive/40'\n  },\n  {\n    id: 'info',\n    ariaLabel: 'Color info',\n    className:\n      'bg-sky-600 focus-visible:ring-sky-600/20 data-checked:text-sky-600 dark:bg-sky-400 dark:focus-visible:ring-sky-400/40 dark:data-checked:text-sky-400'\n  },\n  {\n    id: 'success',\n    ariaLabel: 'Color success',\n    className:\n      'bg-green-600 focus-visible:ring-green-600/20 data-checked:text-green-600 dark:bg-green-400 dark:focus-visible:ring-green-400/40 dark:data-checked:text-green-400'\n  }\n]\n\nconst Checkbox12 = () => {\n  const [checkedColors, setCheckedColors] = useState<\n    Record<CheckboxColorId, boolean>\n  >({\n    destructive: true,\n    info: true,\n    success: true\n  })\n\n  const handleCheckedChange = (\n    id: CheckboxColorOption['id'],\n    checked: boolean\n  ) => {\n    setCheckedColors((previousCheckedColors) => ({\n      ...previousCheckedColors,\n      [id]: checked\n    }))\n  }\n\n  return (\n    <div className='flex items-center gap-3'>\n      {checkboxColorOptions.map((option) => (\n        <CheckboxPrimitive.Root\n          key={option.id}\n          data-slot='checkbox'\n          checked={checkedColors[option.id]}\n          onCheckedChange={(checked) =>\n            handleCheckedChange(option.id, checked === true)\n          }\n          className={`peer grid size-7 shrink-0 place-items-center rounded-full border border-transparent shadow-sm outline-none transition-all hover:scale-[1.02] focus-visible:ring-[3px] ${option.className}`}\n          aria-label={option.ariaLabel}\n        >\n          <CheckboxPrimitive.Indicator\n            data-slot='checkbox-indicator'\n            className='grid place-items-center text-current transition-none'\n          >\n            <CircleCheckIcon className='size-5 fill-white stroke-current' />\n          </CheckboxPrimitive.Indicator>\n        </CheckboxPrimitive.Root>\n      ))}\n    </div>\n  )\n}\n\nexport default Checkbox12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-13",
      "type": "registry:component",
      "title": "Checkbox 13",
      "description": "Checkbox 13. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-13.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\nconst settingOptions = [\n  {\n    id: 'auto-start',\n    label: 'Launch at startup',\n    description: 'Starting with your OS.'\n  },\n  {\n    id: 'auto-update',\n    label: 'Install updates automatically',\n    description: 'Download and install new version'\n  }\n] as const\n\ntype SettingOption = (typeof settingOptions)[number]\ntype SettingOptionId = SettingOption['id']\n\nconst initialCheckedSettings: Record<SettingOptionId, boolean> = {\n  'auto-start': true,\n  'auto-update': false\n}\n\nconst Checkbox13 = () => {\n  const [checkedSettings, setCheckedSettings] = useState<\n    Record<SettingOptionId, boolean>\n  >(\n    initialCheckedSettings\n  )\n\n  const handleCheckedChange = (id: SettingOptionId, checked: boolean) => {\n    setCheckedSettings((previousCheckedSettings) => ({\n      ...previousCheckedSettings,\n      [id]: checked\n    }))\n  }\n\n  return (\n    <div className='space-y-2.5'>\n      {settingOptions.map((option) => (\n        <Label\n          key={option.id}\n          htmlFor={option.id}\n          className={`hover:bg-accent/40 flex items-start gap-3 rounded-2xl border p-3.5 shadow-xs transition-colors ${\n            checkedSettings[option.id]\n              ? 'border-sky-600/70 bg-sky-50/80 dark:border-sky-900 dark:bg-sky-950'\n              : 'border-border/70 bg-background'\n          }`}\n        >\n          <Checkbox\n            id={option.id}\n            checked={checkedSettings[option.id]}\n            onCheckedChange={(checked) =>\n              handleCheckedChange(option.id, checked === true)\n            }\n            className='mt-0.5 data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n          />\n          <div className='grid gap-1 font-normal'>\n            <p className='text-sm leading-none font-medium'>{option.label}</p>\n            <p className='text-muted-foreground text-[13px] leading-5'>\n              {option.description}\n            </p>\n          </div>\n        </Label>\n      ))}\n    </div>\n  )\n}\n\nexport default Checkbox13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-14",
      "type": "registry:component",
      "title": "Checkbox 14",
      "description": "Checkbox 14. A checkbox component for selecting options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-14.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState, type ComponentType, type SVGProps } from 'react'\n\nimport { BadgeCheckIcon, BriefcaseBusinessIcon, PenToolIcon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype SkillOption = {\n  icon: ComponentType<SVGProps<SVGSVGElement>>\n  id: string\n  label: string\n}\n\nconst skills = [\n  { label: 'Frontend Engineering', icon: PenToolIcon },\n  { label: 'Business Insights', icon: BriefcaseBusinessIcon },\n  { label: 'Visual Branding', icon: BadgeCheckIcon }\n] as const satisfies readonly Omit<SkillOption, 'id'>[]\n\nconst skillOptions: readonly SkillOption[] = skills.map((skill) => ({\n  ...skill,\n  id: skill.label.toLowerCase().replace(/\\s+/g, '-')\n}))\n\nconst Checkbox14 = () => {\n  const [selectedSkills, setSelectedSkills] = useState<string[]>([])\n\n  const handleCheckedChange = (skillId: SkillOption['id'], checked: boolean) => {\n    setSelectedSkills((previousSelectedSkills) =>\n      checked\n        ? previousSelectedSkills.includes(skillId)\n          ? previousSelectedSkills\n          : [...previousSelectedSkills, skillId]\n        : previousSelectedSkills.filter(\n            (selectedSkillId) => selectedSkillId !== skillId\n          )\n    )\n  }\n\n  return (\n    <ul className='flex w-fit min-w-72 flex-col divide-y rounded-md border'>\n      {skillOptions.map(({ id, label, icon: Icon }) => (\n        <li key={id}>\n          <Label\n            htmlFor={id}\n            className='flex items-center justify-between gap-2 px-5 py-3'\n          >\n            <span className='flex items-center gap-2'>\n              <Icon className='size-4' /> {label}\n            </span>\n            <Checkbox\n              id={id}\n              checked={selectedSkills.includes(id)}\n              onCheckedChange={(checked) => handleCheckedChange(id, checked == true)}\n              className='data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n            />\n          </Label>\n        </li>\n      ))}\n    </ul>\n  )\n}\n\nexport default Checkbox14\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-15",
      "type": "registry:component",
      "title": "Checkbox 15",
      "description": "Checkbox 15. A checkbox component for selecting options.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-15.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { CheckIcon, MinusIcon } from 'lucide-react'\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\n\nimport { Label } from '@/components/base-ui/label'\nimport { cn } from '@/lib/utils'\n\nconst items = ['Module 1', 'Module 2', 'Module 3'] as const\n\ntype Item = (typeof items)[number]\ntype CheckboxRootProps = CheckboxPrimitive.Root.Props\n\nconst Checkbox = ({\n  checked,\n  className,\n  indeterminate = false,\n  ...props\n}: CheckboxRootProps) => {\n  return (\n    <CheckboxPrimitive.Root\n      data-slot='checkbox'\n      checked={checked}\n      indeterminate={indeterminate}\n      className={cn(\n        'peer relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border border-input bg-background outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-input/30 data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white data-indeterminate:border-input data-indeterminate:bg-background data-indeterminate:text-muted-foreground dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-indeterminate:border-input dark:data-indeterminate:bg-input/30 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n        className\n      )}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator\n        data-slot='checkbox-indicator'\n        className='grid place-content-center text-current transition-none'\n      >\n        {indeterminate ? (\n          <MinusIcon className='size-2.5' />\n        ) : checked ? (\n          <CheckIcon className='size-3.5' />\n        ) : null}\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  )\n}\n\nconst Checkbox15 = () => {\n  const [selectedItems, setSelectedItems] = useState<Item[]>([\n    'Module 1',\n    'Module 2'\n  ])\n\n  const allChildrenSelected = useMemo(\n    () => selectedItems.length === items.length,\n    [selectedItems]\n  )\n  const isParentIndeterminate = useMemo(\n    () => selectedItems.length > 0 && selectedItems.length < items.length,\n    [selectedItems]\n  )\n\n  const handleParentCheckedChange = (checked: boolean) => {\n    if (checked) {\n      setSelectedItems([...items])\n    } else {\n      setSelectedItems([])\n    }\n  }\n\n  const handleChildCheckedChange = (item: Item, checked: boolean) => {\n    setSelectedItems((previousSelectedItems) =>\n      checked\n        ? previousSelectedItems.includes(item)\n          ? previousSelectedItems\n          : [...previousSelectedItems, item]\n        : previousSelectedItems.filter((selectedItem) => selectedItem !== item)\n    )\n  }\n\n  return (\n    <div className='flex flex-col gap-4'>\n      <div className='flex items-center gap-2'>\n        <Checkbox\n          id='parent'\n          checked={allChildrenSelected}\n          indeterminate={isParentIndeterminate}\n          onCheckedChange={handleParentCheckedChange}\n        />\n        <Label htmlFor='parent' className='text-sm font-medium'>\n          Select all modules\n        </Label>\n      </div>\n      <div className='flex flex-col gap-2 pl-6'>\n        {items.map((item) => (\n          <div key={item} className='flex items-center gap-2'>\n            <Checkbox\n              id={item}\n              checked={selectedItems.includes(item)}\n              onCheckedChange={(checked) =>\n                handleChildCheckedChange(item, checked)\n              }\n            />\n            <Label htmlFor={item} className='text-sm'>\n              {item}\n            </Label>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox15\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox-16",
      "type": "registry:component",
      "title": "Checkbox 16",
      "description": "Checkbox 16. A checkbox component for selecting options.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/checkbox-16.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\n\ntype CheckboxCopy = {\n  description: string\n  label: string\n}\n\nconst checkboxCopy: CheckboxCopy = {\n  label: 'Receive email notifications',\n  description: 'You confirm that you have read and accepted the current usage gbase-uidelines.'\n}\n\nconst Checkbox16 = () => {\n  const id = useId()\n  const [isChecked, setIsChecked] = useState<boolean>(true)\n\n  const handleReset = () => {\n    setIsChecked(false)\n  }\n\n  return (\n    <div className='flex max-w-sm items-start gap-3.5'>\n      <Checkbox\n        id={id}\n        checked={isChecked}\n        onCheckedChange={(checked) => setIsChecked(checked === true)}\n        className='mt-0.5 data-checked:border-sky-600 data-checked:bg-sky-600 dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500'\n      />\n      <div className='grid gap-2.5'>\n        <Label htmlFor={id} className='text-sm leading-4 font-medium'>\n          {checkboxCopy.label}\n        </Label>\n        <p className='text-muted-foreground text-[13px] leading-5'>\n          {checkboxCopy.description}\n        </p>\n        <div className='flex flex-wrap gap-2'>\n          <Button variant='outline' size='sm' onClick={handleReset}>\n            Reset\n          </Button>\n          <Button\n            size='sm'\n            disabled={!isChecked}\n            className='bg-sky-600 text-white hover:bg-sky-700 dark:bg-sky-500 dark:text-slate-950 dark:hover:bg-sky-400'\n          >\n            Continue\n          </Button>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Checkbox16\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-1",
      "type": "registry:component",
      "title": "Collapsible 1",
      "description": "Collapsible 1. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-1.tsx",
          "type": "registry:component",
          "content": "import { ChevronsUpDownIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\n\ntype CollapsibleItem = {\n  label: string;\n};\n\ntype CollapsibleGroup = {\n  hiddenItems: readonly CollapsibleItem[];\n  leadItem: CollapsibleItem;\n  title: string;\n};\n\nconst group: CollapsibleGroup = {\n  hiddenItems: [{ label: 'project-brief.md' }, { label: 'brand-notes.md' }],\n  leadItem: { label: 'launch-plan.md' },\n  title: 'Studio team shared 3 notes',\n};\n\nconst Collapsible1 = () => {\n  return (\n    <Collapsible className=\"flex w-full max-w-[350px] flex-col gap-2 p-2\">\n      <div className=\"flex items-center justify-between gap-4 px-2 py-1\">\n        <div className=\"text-sm font-semibold\">{group.title}</div>\n        <CollapsibleTrigger>\n          <Button variant=\"ghost\" size=\"icon-sm\">\n            <ChevronsUpDownIcon className=\"size-4\" />\n            <span className=\"sr-only\">Toggle notes</span>\n          </Button>\n        </CollapsibleTrigger>\n      </div>\n      <div className=\"border-border/70 rounded-md border px-4 py-2 font-mono text-sm\">\n        {group.leadItem.label}\n      </div>\n      <CollapsibleContent className=\"flex flex-col gap-2\">\n        {group.hiddenItems.map((item) => (\n          <div\n            key={item.label}\n            className=\"border-border/70 rounded-md border px-4 py-2 font-mono text-sm\"\n          >\n            {item.label}\n          </div>\n        ))}\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nexport default Collapsible1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-2",
      "type": "registry:component",
      "title": "Collapsible 2",
      "description": "Collapsible 2. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport {\n  ChevronRightIcon,\n  FileIcon,\n  FolderIcon,\n  FolderOpenIcon,\n} from 'lucide-react';\n\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\n\ntype FileTreeItem =\n  | {\n      name: string;\n      type: 'file';\n      children?: never;\n    }\n  | {\n      children: readonly FileTreeItem[];\n      name: string;\n      type: 'folder';\n    };\n\nconst fileTree: readonly FileTreeItem[] = [\n  {\n    name: 'src',\n    type: 'folder',\n    children: [\n      {\n        name: 'sections',\n        type: 'folder',\n        children: [\n          { name: 'hero.tsx', type: 'file' },\n          { name: 'features.tsx', type: 'file' },\n          { name: 'pricing.tsx', type: 'file' },\n        ],\n      },\n      { name: 'layout.tsx', type: 'file' },\n    ],\n  },\n  {\n    name: 'content',\n    type: 'folder',\n    children: [{ name: 'copy.md', type: 'file' }],\n  },\n  {\n    name: 'styles',\n    type: 'folder',\n    children: [{ name: 'tokens.css', type: 'file' }],\n  },\n  {\n    name: 'site.config.ts',\n    type: 'file',\n  },\n] as const;\n\ntype FileTreeProps = {\n  item: FileTreeItem;\n  level: number;\n};\n\nconst FileTree = ({ item, level }: FileTreeProps) => {\n  if (item.type === 'file') {\n    return (\n      <div\n        className=\"text-muted-foreground flex items-center gap-2 rounded-md px-2 py-1 text-sm outline-none\"\n        style={{ paddingLeft: `${level === 0 ? 1.75 : 3.25}rem` }}\n      >\n        <FileIcon className=\"size-4 shrink-0\" />\n        <span>{item.name}</span>\n      </div>\n    );\n  }\n\n  return <FolderTree item={item} level={level} />;\n};\n\ntype FolderTreeProps = {\n  item: Extract<FileTreeItem, { type: 'folder' }>;\n  level: number;\n};\n\nconst FolderTree = ({ item, level }: FolderTreeProps) => {\n  const [open, setOpen] = useState<boolean>(false);\n\n  return (\n    <Collapsible\n      open={open}\n      onOpenChange={setOpen}\n      className=\"flex flex-col gap-1\"\n      style={{ paddingLeft: `${level === 0 ? 0 : 1.5}rem` }}\n    >\n      <CollapsibleTrigger className=\"hover:bg-muted/40 flex items-center gap-2 rounded-md px-2 py-1 text-sm outline-none\">\n        <ChevronRightIcon\n          className={`size-4 shrink-0 transition-transform ${open ? 'rotate-90' : ''}`}\n        />\n        {open ? (\n          <FolderOpenIcon className=\"text-muted-foreground size-4 shrink-0\" />\n        ) : (\n          <FolderIcon className=\"text-muted-foreground size-4 shrink-0\" />\n        )}\n        <span>{item.name}</span>\n      </CollapsibleTrigger>\n      <CollapsibleContent className=\"flex flex-col gap-1\">\n        {item.children.map((child) => (\n          <FileTree\n            key={`${item.name}-${child.name}`}\n            item={child}\n            level={level + 1}\n          />\n        ))}\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nconst Collapsible2 = () => {\n  return (\n    <div className=\"flex w-full max-w-56 flex-col gap-2 p-2\">\n      {fileTree.map((item) => (\n        <FileTree key={item.name} item={item} level={0} />\n      ))}\n    </div>\n  );\n};\n\nexport default Collapsible2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-3",
      "type": "registry:component",
      "title": "Collapsible 3",
      "description": "Collapsible 3. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-3.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { ChevronUpIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\n\ntype Task = {\n  fallback: string;\n  image: string;\n  name: string;\n  progress: number;\n  role: string;\n};\n\nconst tasks: readonly Task[] = [\n  {\n    image: 'https://i.pravatar.cc/160?img=21',\n    fallback: 'MC',\n    name: 'Maya Chen',\n    role: 'Product Designer',\n    progress: 88,\n  },\n  {\n    image: 'https://i.pravatar.cc/160?img=32',\n    fallback: 'OS',\n    name: 'Owen Scott',\n    role: 'Frontend Engineer',\n    progress: 64,\n  },\n  {\n    image: 'https://i.pravatar.cc/160?img=30',\n    fallback: 'AL',\n    name: 'Amara Lewis',\n    role: 'Research Lead',\n    progress: 76,\n  },\n  {\n    image: 'https://i.pravatar.cc/160?img=47',\n    fallback: 'JP',\n    name: 'Jordan Price',\n    role: 'Operations Analyst',\n    progress: 29,\n  },\n] as const;\n\nconst Collapsible3 = () => {\n  const [open, setOpen] = useState<boolean>(false);\n  const visibleTasks = tasks.slice(0, 2);\n  const hiddenTasks = tasks.slice(2);\n\n  return (\n    <Collapsible\n      open={open}\n      onOpenChange={setOpen}\n      className=\"flex w-full max-w-[350px] flex-col items-start gap-4 p-4\"\n    >\n      <div className=\"font-medium\">Today&apos;s team progress</div>\n      <ul className=\"flex w-full flex-col gap-3\">\n        {visibleTasks.map((task) => (\n          <li\n            key={task.name}\n            className=\"border-border/60 flex items-start gap-4 rounded-md border px-3 py-2\"\n          >\n            <Avatar>\n              <AvatarImage src={task.image} alt={task.name} />\n              <AvatarFallback>{task.fallback}</AvatarFallback>\n            </Avatar>\n            <div className=\"flex flex-1 flex-col\">\n              <div className=\"text-sm font-medium\">{task.name}</div>\n              <p className=\"text-muted-foreground text-xs\">{task.role}</p>\n            </div>\n            <span className=\"text-muted-foreground text-sm\">{`${task.progress}%`}</span>\n          </li>\n        ))}\n        <CollapsibleContent className=\"flex flex-col gap-3\">\n          {hiddenTasks.map((task) => (\n            <li\n              key={task.name}\n              className=\"border-border/60 flex items-start gap-4 rounded-md border px-3 py-2\"\n            >\n              <Avatar>\n                <AvatarImage src={task.image} alt={task.name} />\n                <AvatarFallback>{task.fallback}</AvatarFallback>\n              </Avatar>\n              <div className=\"flex flex-1 flex-col\">\n                <div className=\"text-sm font-medium\">{task.name}</div>\n                <p className=\"text-muted-foreground text-xs\">{task.role}</p>\n              </div>\n              <span className=\"text-muted-foreground text-sm\">{`${task.progress}%`}</span>\n            </li>\n          ))}\n        </CollapsibleContent>\n      </ul>\n      <CollapsibleTrigger>\n        <Button variant=\"outline\" size=\"sm\" className=\"border-border/70\">\n          <span>{open ? 'Show less' : 'Show more'}</span>\n          <ChevronUpIcon\n            className={`size-4 transition-transform ${open ? '' : 'rotate-180'}`}\n          />\n        </Button>\n      </CollapsibleTrigger>\n    </Collapsible>\n  );\n};\n\nexport default Collapsible3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-4",
      "type": "registry:component",
      "title": "Collapsible 4",
      "description": "Collapsible 4. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-4.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport {\n  ChevronRightIcon,\n  PanelsTopLeftIcon,\n  PlusIcon,\n  UserIcon,\n} from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\n\ntype UserProfile = {\n  avatarAlt: string;\n  avatarSrc: string;\n  bio: string;\n  fallback: string;\n  followers: number;\n  followed?: boolean;\n  name: string;\n  projects: number;\n};\n\nconst users: readonly UserProfile[] = [\n  {\n    avatarAlt: 'Maya Chen',\n    avatarSrc: 'https://i.pravatar.cc/160?img=21',\n    bio: 'Product designer focused on onboarding flows, product storytelling, and clean interface systems.',\n    fallback: 'MC',\n    followers: 142,\n    name: 'Maya Chen',\n    projects: 6,\n  },\n  {\n    avatarAlt: 'Owen Scott',\n    avatarSrc: 'https://i.pravatar.cc/160?img=32',\n    bio: 'Frontend engineer building flexible React systems with a focus on performance and implementation detail.',\n    fallback: 'OS',\n    followers: 108,\n    followed: true,\n    name: 'Owen Scott',\n    projects: 4,\n  },\n  {\n    avatarAlt: 'Amara Lewis',\n    avatarSrc: 'https://i.pravatar.cc/160?img=30',\n    bio: 'Research lead translating user patterns into practical design decisions for product and brand teams.',\n    fallback: 'AL',\n    followers: 91,\n    name: 'Amara Lewis',\n    projects: 5,\n  },\n] as const;\n\ntype Metric = {\n  icon: LucideIcon;\n  value: number;\n};\n\ntype UserRowProps = {\n  user: UserProfile;\n};\n\nconst UserRow = ({ user }: UserRowProps) => {\n  const [open, setOpen] = useState<boolean>(false);\n  const metrics: readonly Metric[] = [\n    { icon: UserIcon, value: user.followers },\n    { icon: PanelsTopLeftIcon, value: user.projects },\n  ] as const;\n\n  return (\n    <Collapsible\n      open={open}\n      onOpenChange={setOpen}\n      className=\"p-3\"\n    >\n      <CollapsibleTrigger className=\"flex w-full items-center justify-between gap-4\">\n        <div className=\"flex items-center gap-3\">\n          <Avatar>\n            <AvatarImage src={user.avatarSrc} alt={user.avatarAlt} />\n            <AvatarFallback>{user.fallback}</AvatarFallback>\n          </Avatar>\n          <span className=\"font-medium\">{user.name}</span>\n        </div>\n        <ChevronRightIcon\n          className={`size-4 transition-transform ${open ? 'rotate-90' : ''}`}\n        />\n      </CollapsibleTrigger>\n      <CollapsibleContent className=\"pt-3\">\n        <div className=\"flex flex-col gap-3\">\n          <p className=\"text-muted-foreground text-sm\">{user.bio}</p>\n          <div className=\"flex items-center justify-between gap-2\">\n            <div className=\"flex items-center gap-4\">\n              {metrics.map((metric) => {\n                const Icon = metric.icon;\n                const metricKey = `${user.name}-${metric.value}-${Icon.name}`;\n\n                return (\n                  <span key={metricKey} className=\"flex items-center gap-2\">\n                    <Icon className=\"text-muted-foreground size-4\" />\n                    <span className=\"text-sm\">{metric.value}</span>\n                  </span>\n                );\n              })}\n            </div>\n            {user.followed ? (\n              <Button\n                variant=\"outline\"\n                className=\"h-7 rounded-md px-3 py-1 text-xs\"\n              >\n                Following\n              </Button>\n            ) : (\n              <Button className=\"h-7 rounded-md bg-sky-600 px-3 py-1 text-xs text-white hover:bg-sky-700 dark:bg-sky-500 dark:hover:bg-sky-400\">\n                Follow\n                <PlusIcon className=\"size-3.5\" />\n              </Button>\n            )}\n          </div>\n        </div>\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nconst Collapsible4 = () => {\n  return (\n    <ul className=\"flex w-full max-w-[350px] flex-col gap-2.5\">\n      {users.map((user) => (\n        <li key={user.name}>\n          <UserRow user={user} />\n        </li>\n      ))}\n    </ul>\n  );\n};\n\nexport default Collapsible4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-5",
      "type": "registry:component",
      "title": "Collapsible 5",
      "description": "Collapsible 5. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "collapsible",
        "input",
        "label",
        "separator"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-5.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { ChevronDownIcon, StarIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport { Separator } from '@/components/base-ui/separator';\n\ntype PriceRange = {\n  maxPlaceholder: string;\n  minPlaceholder: string;\n};\n\ntype RatingOption = {\n  id: string;\n  value: number;\n};\n\ntype FilterOption = {\n  id: string;\n  label: string;\n};\n\nconst priceRange: PriceRange = {\n  maxPlaceholder: '1200',\n  minPlaceholder: '50',\n};\n\nconst ratings: readonly RatingOption[] = [\n  { id: 'rating-4', value: 4 },\n  { id: 'rating-3', value: 3 },\n  { id: 'rating-2', value: 2 },\n] as const;\n\nconst brands: readonly FilterOption[] = [\n  { id: 'brand-apple', label: 'Apple' },\n  { id: 'brand-samsung', label: 'Samsung' },\n  { id: 'brand-google', label: 'Google' },\n  { id: 'brand-oneplus', label: 'OnePlus' },\n  { id: 'brand-xiaomi', label: 'Xiaomi' },\n] as const;\n\nconst batterySizes: readonly FilterOption[] = [\n  { id: 'battery-3500', label: '3500mAh' },\n  { id: 'battery-4000', label: '4000mAh' },\n  { id: 'battery-5000', label: '5000mAh' },\n  { id: 'battery-6000', label: '6000mAh' },\n] as const;\n\ntype SectionShellProps = {\n  children: ReactNode;\n  title: string;\n};\n\nconst SectionShell = ({ children, title }: SectionShellProps) => {\n  const [open, setOpen] = useState<boolean>(false);\n\n  return (\n    <Collapsible\n      open={open}\n      onOpenChange={setOpen}\n      className=\"flex flex-col gap-2\"\n    >\n      <div className=\"hover:bg-muted/30 flex items-center justify-between gap-4 rounded-md px-2 py-1.5\">\n        <div className=\"text-sm font-semibold\">{title}</div>\n        <CollapsibleTrigger>\n          <Button variant=\"ghost\" size=\"icon-sm\">\n            <ChevronDownIcon\n              className={`text-muted-foreground size-4 transition-transform ${open ? 'rotate-180' : ''}`}\n            />\n            <span className=\"sr-only\">Toggle {title}</span>\n          </Button>\n        </CollapsibleTrigger>\n      </div>\n      <CollapsibleContent className=\"flex flex-col gap-2 px-1 pb-1\">\n        {children}\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nconst Collapsible5 = () => {\n  return (\n    <div className=\"border-border/70 bg-background w-full max-w-[350px] space-y-3 rounded-xl border p-3.5 shadow-sm\">\n      <SectionShell title=\"Price Range\">\n        <div className=\"flex items-center justify-between gap-4 px-1\">\n          <Label htmlFor=\"min-price\" className=\"shrink-0 text-sm font-medium\">\n            Min Price\n          </Label>\n          <Input\n            id=\"min-price\"\n            type=\"number\"\n            placeholder={priceRange.minPlaceholder}\n            className=\"border-border/70 bg-muted/20 h-9 max-w-56\"\n          />\n        </div>\n        <div className=\"flex items-center justify-between gap-4 px-1\">\n          <Label htmlFor=\"max-price\" className=\"shrink-0 text-sm font-medium\">\n            Max Price\n          </Label>\n          <Input\n            id=\"max-price\"\n            type=\"number\"\n            placeholder={priceRange.maxPlaceholder}\n            className=\"border-border/70 bg-muted/20 h-9 max-w-56\"\n          />\n        </div>\n      </SectionShell>\n      <Separator />\n      <SectionShell title=\"Customer Ratings\">\n        {ratings.map((rating) => (\n          <div\n            key={rating.id}\n            className=\"hover:bg-muted/20 flex items-center gap-2 rounded-md px-2 py-1\"\n          >\n            <Checkbox id={rating.id} />\n            <Label\n              htmlFor={rating.id}\n              className=\"flex shrink-0 items-center gap-1 text-sm font-medium\"\n            >\n              <span className=\"flex items-center gap-1\">\n                {rating.value}\n                <StarIcon className=\"size-4 fill-amber-500 stroke-amber-500 dark:fill-amber-400 dark:stroke-amber-400\" />\n              </span>\n              & Up\n            </Label>\n          </div>\n        ))}\n      </SectionShell>\n      <Separator />\n      <SectionShell title=\"Brand\">\n        {brands.map((brand) => (\n          <div\n            key={brand.id}\n            className=\"hover:bg-muted/20 flex items-center gap-2 rounded-md px-2 py-1\"\n          >\n            <Checkbox id={brand.id} />\n            <Label htmlFor={brand.id} className=\"shrink-0 text-sm font-medium\">\n              {brand.label}\n            </Label>\n          </div>\n        ))}\n      </SectionShell>\n      <Separator />\n      <SectionShell title=\"Battery\">\n        {batterySizes.map((battery) => (\n          <div\n            key={battery.id}\n            className=\"hover:bg-muted/20 flex items-center gap-2 rounded-md px-2 py-1\"\n          >\n            <Checkbox id={battery.id} />\n            <Label\n              htmlFor={battery.id}\n              className=\"shrink-0 text-sm font-medium\"\n            >\n              {battery.label}\n            </Label>\n          </div>\n        ))}\n      </SectionShell>\n    </div>\n  );\n};\n\nexport default Collapsible5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-6",
      "type": "registry:component",
      "title": "Collapsible 6",
      "description": "Collapsible 6. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [],
      "registryDependencies": [
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\n\ntype FaqItem = {\n  answer: string;\n  question: string;\n};\n\nconst faqItems: readonly FaqItem[] = [\n  {\n    question: 'How do I share the latest draft with my team?',\n    answer:\n      'Open the project, copy the review link, and send it to your team from the share panel. Everyone with access will see the latest saved version.',\n  },\n  {\n    question: 'Can I pause a review and come back later?',\n    answer:\n      'Yes. Your comments, selected screens, and review status stay saved so you can return later without starting over.',\n  },\n] as const;\n\ntype FaqRowProps = {\n  defaultOpen?: boolean;\n  item: FaqItem;\n};\n\nconst FaqRow = ({ defaultOpen = false, item }: FaqRowProps) => {\n  const [open, setOpen] = useState<boolean>(defaultOpen);\n\n  return (\n    <div className=\"border-border/60 space-y-1 border-b py-4 last:border-b-0\">\n      <p className=\"text-base font-medium tracking-tight\">{item.question}</p>\n      <Collapsible open={open} onOpenChange={setOpen} className=\"space-y-2\">\n        <CollapsibleContent>\n          <p className=\"text-muted-foreground max-w-[52ch] text-sm leading-6\">\n            {item.answer}\n          </p>\n        </CollapsibleContent>\n        <CollapsibleTrigger>\n          <span\n            className={`text-[10px] font-medium tracking-[0.12em] uppercase ${\n              open\n                ? 'text-rose-600 dark:text-rose-400'\n                : 'text-sky-600 dark:text-sky-400'\n            }`}\n          >\n            {open ? 'Hide answer' : 'Show answer'}\n          </span>\n        </CollapsibleTrigger>\n      </Collapsible>\n    </div>\n  );\n};\n\nconst Collapsible6 = () => {\n  return (\n    <div className=\"w-full max-w-[420px]\">\n      {faqItems.map((item, index) => (\n        <FaqRow key={item.question} item={item} defaultOpen={index === 0} />\n      ))}\n    </div>\n  );\n};\n\nexport default Collapsible6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-7",
      "type": "registry:component",
      "title": "Collapsible 7",
      "description": "Collapsible 7. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "collapsible"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { ChevronUpIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardAction,\n  CardContent,\n  CardTitle,\n} from '@/components/base-ui/card';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\n\ntype HelpCard = {\n  answer: string;\n  imageAlt: string;\n  imageSrc: string;\n  question: string;\n};\n\nconst helpCard: HelpCard = {\n  answer:\n    'Once your shipment is packed, we will send a delivery link by email. You can open it any time to see the courier status and the latest package movement.',\n  imageAlt: 'Package ready for shipment on a desk',\n  imageSrc:\n    'https://images.pexels.com/photos/6169132/pexels-photo-6169132.jpeg?auto=compress&cs=tinysrgb&w=1200',\n  question: 'How can I follow a shipment update?',\n};\n\nconst Collapsible7 = () => {\n  const [open, setOpen] = useState<boolean>(false);\n\n  return (\n    <Card className=\"border-border/70 w-full max-w-md overflow-hidden rounded-none p-0 shadow-xl\">\n      <Collapsible open={open} onOpenChange={setOpen}>\n        <div className=\"flex items-center justify-between px-6 py-5\">\n          <CardTitle className=\"text-base\">{helpCard.question}</CardTitle>\n          <CardAction>\n            <CollapsibleTrigger>\n              <Button variant=\"outline\" size=\"sm\" className=\"border-border/70\">\n                <span>{open ? 'Hide' : 'Show'}</span>\n                <ChevronUpIcon\n                  className={`size-4 transition-transform ${open ? '' : 'rotate-180'}`}\n                />\n              </Button>\n            </CollapsibleTrigger>\n          </CardAction>\n        </div>\n        <CollapsibleContent>\n          <CardContent className=\"space-y-3 px-0 pb-0\">\n            <p className=\"text-muted-foreground px-6 text-sm leading-6\">\n              {helpCard.answer}\n            </p>\n            <img\n              src={helpCard.imageSrc}\n              alt={helpCard.imageAlt}\n              className=\"aspect-video h-70 w-full object-cover\"\n            />\n          </CardContent>\n        </CollapsibleContent>\n      </Collapsible>\n    </Card>\n  );\n};\n\nexport default Collapsible7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-8",
      "type": "registry:component",
      "title": "Collapsible 8",
      "description": "Collapsible 8. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "collapsible",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-8.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport type { LucideIcon } from 'lucide-react';\nimport {\n  ChevronRightIcon,\n  DotIcon,\n  FolderKanbanIcon,\n  LogOutIcon,\n  SettingsIcon,\n  UserIcon,\n  UsersIcon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\ntype MenuLink = {\n  icon: LucideIcon;\n  label: string;\n};\n\ntype MenuSection = {\n  icon: LucideIcon;\n  items: readonly string[];\n  label: string;\n};\n\nconst primaryLinks: readonly MenuLink[] = [\n  { icon: UserIcon, label: 'Profile' },\n] as const;\n\nconst sections: readonly MenuSection[] = [\n  {\n    icon: SettingsIcon,\n    label: 'Settings',\n    items: ['Appearance', 'Notifications', 'Billing'],\n  },\n  {\n    icon: UsersIcon,\n    label: 'Workspace',\n    items: ['Members', 'Teams', 'Projects'],\n  },\n] as const;\n\nconst footerLink: MenuLink = {\n  icon: LogOutIcon,\n  label: 'Log out',\n};\n\ntype SectionRowProps = {\n  section: MenuSection;\n};\n\nconst SectionRow = ({ section }: SectionRowProps) => {\n  const [open, setOpen] = useState<boolean>(false);\n  const SectionIcon = section.icon;\n\n  return (\n    <Collapsible\n      open={open}\n      onOpenChange={setOpen}\n      className=\"flex flex-col gap-1\"\n    >\n      <CollapsibleTrigger className=\"hover:bg-accent hover:text-accent-foreground flex items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none\">\n        <div className=\"flex items-center gap-2\">\n          <SectionIcon className=\"text-muted-foreground size-4\" />\n          <span>{section.label}</span>\n        </div>\n        <ChevronRightIcon\n          className={`size-4 shrink-0 transition-transform ${open ? 'rotate-90' : ''}`}\n        />\n      </CollapsibleTrigger>\n      <CollapsibleContent className=\"pl-7\">\n        <div className=\"flex flex-col gap-1 py-1\">\n          {section.items.map((item) => (\n            <button\n              key={item}\n              type=\"button\"\n              className=\"text-muted-foreground hover:bg-accent hover:text-accent-foreground flex items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors\"\n            >\n              <DotIcon className=\"size-4\" />\n              <span>{item}</span>\n            </button>\n          ))}\n        </div>\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nconst Collapsible8 = () => {\n  const FooterIcon = footerLink.icon;\n\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger>\n        <Button variant=\"outline\" className=\"border-border/70\">\n          <FolderKanbanIcon className=\"size-4\" />\n          Workspace menu\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent className=\"w-60\">\n        {primaryLinks.map((link) => {\n          const LinkIcon = link.icon;\n\n          return (\n            <DropdownMenuItem\n              key={link.label}\n              className=\"text-sky-600 focus:text-sky-700 dark:text-sky-400 dark:focus:text-sky-300\"\n            >\n              <LinkIcon className=\"size-4\" />\n              <span>{link.label}</span>\n            </DropdownMenuItem>\n          );\n        })}\n        <DropdownMenuSeparator />\n        <div className=\"px-1 py-1\">\n          {sections.map((section) => (\n            <SectionRow key={section.label} section={section} />\n          ))}\n        </div>\n        <DropdownMenuSeparator />\n        <DropdownMenuItem variant=\"destructive\">\n          <FooterIcon className=\"size-4\" />\n          <span>{footerLink.label}</span>\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n};\n\nexport default Collapsible8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible-9",
      "type": "registry:component",
      "title": "Collapsible 9",
      "description": "Collapsible 9. A collapsible is a component that allows users to show or hide content.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "collapsible",
        "input",
        "label",
        "radio-group",
        "separator",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/collapsible-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId, useState } from 'react';\n\nimport type { ReactNode } from 'react';\nimport { ChevronDownIcon, CreditCardIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\nimport { Separator } from '@/components/base-ui/separator';\nimport { Textarea } from '@/components/base-ui/textarea';\n\ntype AddressField = {\n  id: string;\n  label: string;\n  placeholder?: string;\n  type: 'number' | 'text';\n};\n\ntype DeliveryOption = {\n  description: string;\n  label: string;\n  price: string;\n  value: string;\n};\n\nconst addressFields: readonly AddressField[] = [\n  { id: 'full-name', label: 'Full Name', type: 'text' },\n  { id: 'pin-code', label: 'Pin Code', type: 'number' },\n  { id: 'city-name', label: 'City', type: 'text' },\n  { id: 'landmark', label: 'Landmark', type: 'text' },\n] as const;\n\nconst deliveryOptions: readonly DeliveryOption[] = [\n  {\n    value: '1',\n    label: 'Standard 3-5 Days',\n    description: 'Friday, 15 June - Tuesday, 19 June',\n    price: 'Free',\n  },\n  {\n    value: '2',\n    label: 'Express',\n    description: 'Friday, 15 June - Sunday, 17 June',\n    price: '$5.00',\n  },\n  { value: '3', label: 'Overnight', description: 'Tomorrow', price: '$10.00' },\n] as const;\n\ntype SectionProps = {\n  children: ReactNode;\n  defaultOpen?: boolean;\n  title: string;\n};\n\nconst Section = ({ children, defaultOpen = false, title }: SectionProps) => {\n  const [open, setOpen] = useState<boolean>(defaultOpen);\n\n  return (\n    <Collapsible\n      open={open}\n      onOpenChange={setOpen}\n      className=\"flex flex-col gap-2\"\n    >\n      <div className=\"flex items-center justify-between gap-4 px-4\">\n        <div className=\"text-sm font-semibold\">{title}</div>\n        <CollapsibleTrigger>\n          <Button variant=\"ghost\" size=\"icon-sm\">\n            <ChevronDownIcon\n              className={`text-muted-foreground size-4 transition-transform ${open ? 'rotate-180' : ''}`}\n            />\n            <span className=\"sr-only\">Toggle {title}</span>\n          </Button>\n        </CollapsibleTrigger>\n      </div>\n      <CollapsibleContent className=\"flex flex-col gap-3 px-4 pt-3 pb-1\">\n        {children}\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nconst Collapsible9 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"flex w-full items-center justify-center space-y-3\">\n      <div className=\"border-border/70 w-full max-w-md space-y-3 rounded-md border py-4 shadow-sm\">\n        <Section title=\"Delivery Address\" defaultOpen={false}>\n          {addressFields.slice(0, 1).map((field) => (\n            <div key={field.id} className=\"group relative w-full\">\n              <label\n                htmlFor={field.id}\n                className=\"text-muted-foreground absolute top-1/2 block -translate-y-1/2 cursor-text px-2 text-sm transition-all group-focus-within:top-0 group-focus-within:text-xs group-focus-within:font-medium has-[+input:not(:placeholder-shown)]:top-0 has-[+input:not(:placeholder-shown)]:text-xs has-[+input:not(:placeholder-shown)]:font-medium\"\n              >\n                <span className=\"bg-background inline-flex px-1\">\n                  {field.label}\n                </span>\n              </label>\n              <Input\n                id={field.id}\n                type={field.type}\n                placeholder=\" \"\n                className=\"border-border/70 bg-muted/20 dark:bg-background\"\n              />\n            </div>\n          ))}\n          <div className=\"group relative w-full space-y-2\">\n            <label\n              htmlFor=\"address\"\n              className=\"text-muted-foreground absolute top-0 block translate-y-2 cursor-text px-2 text-sm transition-all group-focus-within:-translate-y-1/2 group-focus-within:text-xs group-focus-within:font-medium has-[+textarea:not(:placeholder-shown)]:-translate-y-1/2 has-[+textarea:not(:placeholder-shown)]:text-xs has-[+textarea:not(:placeholder-shown)]:font-medium\"\n            >\n              <span className=\"bg-background inline-flex px-1\">Address</span>\n            </label>\n            <Textarea\n              id=\"address\"\n              placeholder=\" \"\n              className=\"border-border/70 !bg-muted/20 dark:!bg-background\"\n            />\n          </div>\n          {addressFields.slice(1).map((field) => (\n            <div key={field.id} className=\"group relative w-full\">\n              <label\n                htmlFor={field.id}\n                className=\"text-muted-foreground absolute top-1/2 block -translate-y-1/2 cursor-text px-2 text-sm transition-all group-focus-within:top-0 group-focus-within:text-xs group-focus-within:font-medium has-[+input:not(:placeholder-shown)]:top-0 has-[+input:not(:placeholder-shown)]:text-xs has-[+input:not(:placeholder-shown)]:font-medium\"\n              >\n                <span className=\"bg-background inline-flex px-1\">\n                  {field.label}\n                </span>\n              </label>\n              <Input\n                id={field.id}\n                type={field.type}\n                placeholder=\" \"\n                className=\"border-border/70 bg-muted/20 dark:bg-background\"\n              />\n            </div>\n          ))}\n        </Section>\n        <Separator />\n        <Section title=\"Delivery Options\" defaultOpen={false}>\n          <RadioGroup\n            className=\"w-full gap-0 -space-y-px rounded-md shadow-xs\"\n            defaultValue=\"2\"\n          >\n            {deliveryOptions.map((option) => (\n              <div\n                key={`${id}-${option.value}`}\n                className=\"border-input has-data-[state=checked]:border-primary/30 has-data-[state=checked]:bg-muted/30 relative flex flex-col gap-4 border p-4 outline-none first:rounded-t-md last:rounded-b-md has-data-[state=checked]:z-10\"\n              >\n                <div className=\"flex items-center justify-between gap-1.5\">\n                  <div className=\"flex items-center gap-2\">\n                    <RadioGroupItem\n                      id={`${id}-${option.value}`}\n                      value={option.value}\n                      className=\"after:absolute after:inset-0\"\n                      aria-label={`plan-radio-${option.value}`}\n                      aria-describedby={`${id}-${option.value}-price`}\n                    />\n                    <div className=\"space-y-1\">\n                      <Label\n                        className=\"inline-flex items-center\"\n                        htmlFor={`${id}-${option.value}`}\n                      >\n                        {option.label}\n                      </Label>\n                      <p className=\"text-muted-foreground text-sm\">\n                        {option.description}\n                      </p>\n                    </div>\n                  </div>\n                  <div\n                    id={`${id}-${option.value}-price`}\n                    className=\"text-muted-foreground text-xs leading-[inherit]\"\n                  >\n                    {option.price}\n                  </div>\n                </div>\n              </div>\n            ))}\n          </RadioGroup>\n        </Section>\n        <Separator />\n        <Section title=\"Payment\" defaultOpen={false}>\n          <div className=\"w-full space-y-2\">\n            <Label>Card details</Label>\n            <div>\n              <div className=\"relative focus-within:z-1\">\n                <Input\n                  id={`number-${id}`}\n                  type=\"text\"\n                  placeholder=\"1234 1234 1234 1234\"\n                  className=\"peer border-border/70 bg-muted/20 dark:bg-background rounded-b-none pr-9 shadow-none\"\n                />\n                <div className=\"text-muted-foreground pointer-events-none absolute inset-y-0 right-0 flex items-center justify-center pr-3 peer-disabled:opacity-50\">\n                  <CreditCardIcon className=\"size-4\" />\n                  <span className=\"sr-only\">Card Provider</span>\n                </div>\n              </div>\n              <div className=\"-mt-px flex\">\n                <div className=\"min-w-0 flex-1 focus-within:z-1\">\n                  <Input\n                    id={`expiry-${id}`}\n                    type=\"text\"\n                    placeholder=\"MM / YY\"\n                    className=\"border-border/70 bg-muted/20 dark:bg-background rounded-t-none rounded-r-none shadow-none\"\n                  />\n                </div>\n                <div className=\"-ms-px min-w-0 flex-1 focus-within:z-1\">\n                  <Input\n                    id={`cvc-${id}`}\n                    type=\"text\"\n                    placeholder=\"CVC\"\n                    className=\"border-border/70 bg-muted/20 dark:bg-background rounded-t-none rounded-l-none shadow-none\"\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </Section>\n      </div>\n    </div>\n  );\n};\n\nexport default Collapsible9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-1",
      "type": "registry:component",
      "title": "Combobox 1",
      "description": "Combobox 1. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-1.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst frameworks = [\n  {\n    value: 'design',\n    label: 'Design'\n  },\n  {\n    value: 'engineering',\n    label: 'Engineering'\n  },\n  {\n    value: 'marketing',\n    label: 'Marketing'\n  },\n  {\n    value: 'operations',\n    label: 'Operations'\n  },\n  {\n    value: 'support',\n    label: 'Support'\n  }\n] as const\n\ntype FrameworkOption = (typeof frameworks)[number]\ntype FrameworkValue = FrameworkOption['value']\n\nconst isFrameworkValue = (value: string): value is FrameworkValue =>\n  frameworks.some((framework) => framework.value === value)\n\nconst frameworkLabelByValue: Record<FrameworkValue, FrameworkOption['label']> = {\n  design: 'Design',\n  engineering: 'Engineering',\n  marketing: 'Marketing',\n  operations: 'Operations',\n  support: 'Support'\n}\n\nconst Combobox1 = () => {\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedFramework, setSelectedFramework] = useState<FrameworkValue | ''>(\n    ''\n  )\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger\n        role='combobox'\n        aria-expanded={open}\n        className='flex h-10 w-full max-w-xs items-center justify-between rounded-xl border border-border/60 bg-background px-3 text-sm shadow-xs outline-none transition-colors hover:bg-accent/30 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50'\n        aria-label='Framework combobox'\n      >\n        {selectedFramework\n          ? frameworkLabelByValue[selectedFramework]\n          : 'Select team...'}\n        <ChevronsUpDownIcon className='size-4 opacity-50' />\n      </PopoverTrigger>\n      <PopoverContent className='w-[var(--radix-popover-trigger-width)] rounded-xl border-border/60 p-0 shadow-sm'>\n        <Command>\n          <CommandInput placeholder='Search team...' className='h-9' />\n          <CommandList>\n            <CommandEmpty>No team found.</CommandEmpty>\n            <CommandGroup>\n              {frameworks.map(framework => (\n                <CommandItem\n                  key={framework.value}\n                  value={framework.value}\n                  className='pr-2'\n                  data-checked={selectedFramework === framework.value}\n                  onSelect={currentValue => {\n                    if (currentValue === selectedFramework) {\n                      setSelectedFramework('')\n                      setOpen(false)\n                      return\n                    }\n\n                    if (!isFrameworkValue(currentValue)) {\n                      return\n                    }\n\n                    setSelectedFramework(currentValue)\n                    setOpen(false)\n                  }}\n                >\n                  {framework.label}\n                </CommandItem>\n              ))}\n            </CommandGroup>\n          </CommandList>\n        </Command>\n      </PopoverContent>\n    </Popover>\n  )\n}\n\nexport default Combobox1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-2",
      "type": "registry:component",
      "title": "Combobox 2",
      "description": "Combobox 2. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-2.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { Fragment, useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst items = [\n  {\n    continent: 'Product',\n    items: [{ value: 'Roadmap' }, { value: 'Research' }, { value: 'Launch' }]\n  },\n  {\n    continent: 'Design',\n    items: [{ value: 'Wireframes' }, { value: 'UI Kit' }, { value: 'Icons' }]\n  },\n  {\n    continent: 'Operations',\n    items: [{ value: 'Logistics' }, { value: 'Support' }, { value: 'Reports' }]\n  }\n] as const\n\ntype ComboboxGroup = (typeof items)[number]\ntype ComboboxValue = ComboboxGroup['items'][number]['value']\n\nconst isComboboxValue = (value: string): value is ComboboxValue =>\n  items.some((group) => group.items.some((item) => item.value === value))\n\nconst Combobox2 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedValue, setSelectedValue] = useState<ComboboxValue | ''>('')\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id}>Grouped combobox</Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-xl border border-input bg-background px-3 text-sm font-normal outline-offset-0 outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          {selectedValue ? (\n            <span className='flex min-w-0 items-center gap-2'>\n              <span className='truncate'>{selectedValue}</span>\n            </span>\n          ) : (\n            <span className='text-muted-foreground'>Select option</span>\n          )}\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 shrink-0 size-4'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent className='border-input w-full min-w-[var(--radix-popper-anchor-width)] p-0' align='start'>\n          <Command>\n            <CommandInput placeholder='Search option...' />\n            <CommandList>\n              <CommandEmpty>No option found.</CommandEmpty>\n              {items.map(group => (\n                <Fragment key={group.continent}>\n                  <CommandGroup heading={group.continent}>\n                    {group.items.map(item => (\n                      <CommandItem\n                        key={item.value}\n                        value={item.value}\n                        className='pr-2'\n                        data-checked={selectedValue === item.value}\n                        onSelect={currentValue => {\n                          if (!isComboboxValue(currentValue)) {\n                            return\n                          }\n\n                          setSelectedValue(currentValue)\n                          setOpen(false)\n                        }}\n                      >\n                        {item.value}\n                      </CommandItem>\n                    ))}\n                  </CommandGroup>\n                </Fragment>\n              ))}\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-3",
      "type": "registry:component",
      "title": "Combobox 3",
      "description": "Combobox 3. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-3.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { Fragment, useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nimport { cn } from '@/lib/utils'\n\ntype ComboboxItem = {\n  disabled?: boolean\n  value: string\n}\n\ntype ComboboxGroup = {\n  category: string\n  items: readonly ComboboxItem[]\n}\n\nconst items: readonly ComboboxGroup[] = [\n  {\n    category: 'Workspace',\n    items: [{ value: 'Overview' }, { value: 'Inbox' }, { value: 'Library' }]\n  },\n  {\n    category: 'Planning',\n    items: [\n      { value: 'Roadmap' },\n      { value: 'Timeline', disabled: true },\n      { value: 'Calendar' }\n    ]\n  },\n  {\n    category: 'People',\n    items: [\n      { value: 'Members' },\n      { value: 'Guests', disabled: true },\n      { value: 'Roles' }\n    ]\n  }\n] as const\n\ntype ComboboxValue = ComboboxItem['value']\n\nconst isComboboxValue = (value: string): value is ComboboxValue =>\n  items.some((group) => group.items.some((item) => item.value === value))\n\nconst Combobox3 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedValue, setSelectedValue] = useState<ComboboxValue | ''>('')\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Choose a workspace section\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-xl border border-border/60 bg-background px-3 text-sm font-normal shadow-xs outline-offset-0 outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          {selectedValue ? (\n            <span className='flex min-w-0 items-center gap-2'>\n              <span className='truncate'>{selectedValue}</span>\n            </span>\n          ) : (\n            <span className='text-muted-foreground'>Select section</span>\n          )}\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-full min-w-[var(--radix-popper-anchor-width)] rounded-xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Command>\n            <CommandInput placeholder='Search section...' className='h-9' />\n            <CommandList>\n              <CommandEmpty>No section found.</CommandEmpty>\n              {items.map(group => (\n                <Fragment key={group.category}>\n                  <CommandGroup heading={group.category}>\n                    {group.items.map(item => (\n                      <CommandItem\n                        key={item.value}\n                        value={item.value}\n                        data-checked={selectedValue === item.value}\n                        onSelect={currentValue => {\n                          if (item.disabled) {\n                            return\n                          }\n\n                          if (!isComboboxValue(currentValue)) {\n                            return\n                          }\n\n                          setSelectedValue(currentValue)\n                          setOpen(false)\n                        }}\n                        className={cn('pr-2', item.disabled && 'cursor-not-allowed opacity-50')}\n                        disabled={item.disabled ?? false}\n                      >\n                        {item.value}\n                      </CommandItem>\n                    ))}\n                  </CommandGroup>\n                </Fragment>\n              ))}\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-4",
      "type": "registry:component",
      "title": "Combobox 4",
      "description": "Combobox 4. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState, type ComponentType, type SVGProps } from 'react'\n\nimport {\n  BriefcaseIcon,\n  ChevronsUpDownIcon,\n  CodeIcon,\n  FolderKanbanIcon,\n  LayoutGridIcon,\n  ShieldCheckIcon,\n  UsersIcon\n} from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\ntype IndustryOption = {\n  icon: ComponentType<SVGProps<SVGSVGElement>>\n  label: string\n  value: string\n}\n\nconst industries = [\n  {\n    value: 'product',\n    label: 'Product',\n    icon: FolderKanbanIcon\n  },\n  {\n    value: 'design',\n    label: 'Design',\n    icon: CodeIcon\n  },\n  {\n    value: 'marketing',\n    label: 'Marketing',\n    icon: UsersIcon\n  },\n  {\n    value: 'operations',\n    label: 'Operations',\n    icon: LayoutGridIcon\n  },\n  {\n    value: 'support',\n    label: 'Support',\n    icon: BriefcaseIcon\n  },\n  {\n    value: 'legal',\n    label: 'Legal',\n    icon: ShieldCheckIcon\n  },\n  {\n    value: 'people',\n    label: 'People',\n    icon: BriefcaseIcon\n  }\n] as const satisfies readonly IndustryOption[]\n\ntype IndustryValue = (typeof industries)[number]['value']\ntype IndustryOptionMap = Record<IndustryValue, (typeof industries)[number]>\n\nconst industryByValue: IndustryOptionMap = {\n  product: industries[0],\n  design: industries[1],\n  marketing: industries[2],\n  operations: industries[3],\n  support: industries[4],\n  legal: industries[5],\n  people: industries[6]\n}\n\nconst isIndustryValue = (value: string): value is IndustryValue =>\n  industries.some((industry) => industry.value === value)\n\nconst Combobox4 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedIndustry, setSelectedIndustry] = useState<IndustryValue | ''>(\n    ''\n  )\n\n  const selectedIndustryOption = selectedIndustry\n    ? industryByValue[selectedIndustry]\n    : undefined\n  const SelectedIcon = selectedIndustryOption?.icon\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Choose a team area\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-3xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-offset-0 outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          {selectedIndustryOption ? (\n            <span className='flex min-w-0 items-center gap-2'>\n              {SelectedIcon && (\n                <SelectedIcon className='text-muted-foreground size-4' />\n              )}\n              <span className='truncate'>{selectedIndustryOption.label}</span>\n            </span>\n          ) : (\n            <span className='text-muted-foreground'>Select team area</span>\n          )}\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-full min-w-(--radix-popper-anchor-width) overflow-hidden rounded-2xl border border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Command className='rounded-3xl!'>\n            <CommandInput placeholder='Search team areas...' className='h-9 px-1' />\n            <CommandList>\n              <CommandEmpty>No team area found.</CommandEmpty>\n              <CommandGroup>\n                {industries.map((industry) => {\n                  const Icon = industry.icon\n\n                  return (\n                    <CommandItem\n                      key={industry.value}\n                      value={industry.value}\n                      data-checked={selectedIndustry === industry.value}\n                      onSelect={currentValue => {\n                        if (currentValue === selectedIndustry) {\n                          setSelectedIndustry('')\n                          setOpen(false)\n                          return\n                        }\n\n                        if (!isIndustryValue(currentValue)) {\n                          return\n                        }\n\n                        setSelectedIndustry(currentValue)\n                        setOpen(false)\n                      }}\n                      className='mt-1 rounded-md pr-2'\n                    >\n                      <div className='flex items-center gap-2'>\n                        <Icon className='text-muted-foreground size-4' />\n                        {industry.label}\n                      </div>\n                    </CommandItem>\n                  )\n                })}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-5",
      "type": "registry:component",
      "title": "Combobox 5",
      "description": "Combobox 5. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-5.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst frameworks = [\n  {\n    value: 'research',\n    label: 'Research'\n  },\n  {\n    value: 'planning',\n    label: 'Planning'\n  },\n  {\n    value: 'design',\n    label: 'Design'\n  },\n  {\n    value: 'testing',\n    label: 'Testing'\n  },\n  {\n    value: 'delivery',\n    label: 'Delivery'\n  }\n] as const\n\ntype FrameworkOption = (typeof frameworks)[number]\ntype FrameworkValue = FrameworkOption['value']\n\nconst frameworkLabelByValue: Record<FrameworkValue, FrameworkOption['label']> = {\n  research: 'Research',\n  planning: 'Planning',\n  design: 'Design',\n  testing: 'Testing',\n  delivery: 'Delivery'\n}\n\nconst isFrameworkValue = (value: string): value is FrameworkValue =>\n  frameworks.some((framework) => framework.value === value)\n\nconst Combobox5 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedFramework, setSelectedFramework] = useState<FrameworkValue | ''>(\n    ''\n  )\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Workflow stage\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-xl border border-border/60 bg-background px-3 text-sm shadow-xs outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          {selectedFramework ? (\n            frameworkLabelByValue[selectedFramework]\n          ) : (\n            <span className='text-muted-foreground'>Select stage</span>\n          )}\n          <ChevronsUpDownIcon className='size-4 opacity-50' />\n        </PopoverTrigger>\n        <PopoverContent className='w-[var(--radix-popover-trigger-width)] rounded-xl border-border/60 p-0 shadow-sm'>\n          <Command>\n            <CommandInput placeholder='Search stage...' className='h-9' />\n            <CommandList>\n              <CommandEmpty>No stage found.</CommandEmpty>\n              <CommandGroup>\n                {frameworks.map(framework => (\n                  <CommandItem\n                    key={framework.value}\n                    value={framework.value}\n                    className='pr-2'\n                    data-checked={selectedFramework === framework.value}\n                    onSelect={currentValue => {\n                      if (currentValue === selectedFramework) {\n                        setSelectedFramework('')\n                        setOpen(false)\n                        return\n                      }\n\n                      if (!isFrameworkValue(currentValue)) {\n                        return\n                      }\n\n                      setSelectedFramework(currentValue)\n                      setOpen(false)\n                    }}\n                  >\n                    {framework.label}\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-6",
      "type": "registry:component",
      "title": "Combobox 6",
      "description": "Combobox 6. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-6.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon, PlusIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList,\n  CommandSeparator\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst universities = [\n  {\n    value: 'atlas',\n    label: 'Atlas Workspace'\n  },\n  {\n    value: 'notion-lab',\n    label: 'Notion Lab'\n  },\n  {\n    value: 'north-star',\n    label: 'North Star'\n  },\n  {\n    value: 'field-note',\n    label: 'Field Note'\n  }\n] as const\n\ntype UniversityOption = (typeof universities)[number]\ntype UniversityValue = UniversityOption['value']\n\nconst universityLabelByValue: Record<UniversityValue, UniversityOption['label']> =\n  {\n    atlas: 'Atlas Workspace',\n    'notion-lab': 'Notion Lab',\n    'north-star': 'North Star',\n    'field-note': 'Field Note'\n  }\n\nconst isUniversityValue = (value: string): value is UniversityValue =>\n  universities.some((university) => university.value === value)\n\nconst Combobox6 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedUniversity, setSelectedUniversity] =\n    useState<UniversityValue>('atlas')\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Workspace picker\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-3xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-offset-0 outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span\n            className={cn(\n              'truncate',\n              !selectedUniversity && 'text-muted-foreground'\n            )}\n          >\n            {selectedUniversity ? (\n              universityLabelByValue[selectedUniversity]\n            ) : (\n              <span className='text-muted-foreground'>Select workspace</span>\n            )}\n          </span>\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-full min-w-(--radix-popper-anchor-width) overflow-hidden rounded-2xl border border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Command className='rounded-3xl!'>\n            <CommandInput placeholder='Find workspace' className='h-9 px-1' />\n            <CommandList>\n              <CommandEmpty>No workspace found.</CommandEmpty>\n              <CommandGroup>\n                {universities.map(university => (\n                  <CommandItem\n                    key={university.value}\n                    value={university.value}\n                    data-checked={selectedUniversity === university.value}\n                    onSelect={currentValue => {\n                      if (!isUniversityValue(currentValue)) {\n                        return\n                      }\n\n                      setSelectedUniversity(currentValue)\n                      setOpen(false)\n                    }}\n                    className='flex items-center rounded-md pr-2'\n                  >\n                    <span className='min-w-0 flex-1 truncate'>\n                      {university.label}\n                    </span>\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n              <CommandSeparator />\n              <CommandGroup>\n                <button\n                  type='button'\n                  className='hover:bg-accent/30 flex h-9 w-full items-center justify-start gap-2 rounded-md px-3 text-sm font-normal'\n                >\n                  <PlusIcon className='-ms-2 size-4 opacity-60' aria-hidden='true' />\n                  New workspace\n                </button>\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox6\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-7",
      "type": "registry:component",
      "title": "Combobox 7",
      "description": "Combobox 7. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-7.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useMemo, useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nimport { cn } from '@/lib/utils'\n\ntype TimezoneOption = {\n  label: string\n  numericOffset: number\n  value: string\n}\n\nconst Combobox7 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedTimezone, setSelectedTimezone] = useState<string>(\n    'Indian/Cocos'\n  )\n\n  const supportedTimezones = Intl.supportedValuesOf('timeZone')\n\n  const formattedTimezones = useMemo<TimezoneOption[]>(() => {\n    return supportedTimezones\n      .map((timezone) => {\n        const formatter = new Intl.DateTimeFormat('en', {\n          timeZone: timezone,\n          timeZoneName: 'shortOffset'\n        })\n\n        const parts = formatter.formatToParts(new Date())\n        const offset =\n          parts.find((part) => part.type === 'timeZoneName')?.value ?? ''\n        const formattedOffset = offset === 'GMT' ? 'GMT+0' : offset\n\n        return {\n          value: timezone,\n          label: `(${formattedOffset}) ${timezone.replace(/_/g, ' ')}`,\n          numericOffset: Number.parseInt(\n            formattedOffset.replace('GMT', '').replace('+', '') || '0',\n            10\n          )\n        }\n      })\n      .sort((firstTimezone, secondTimezone) => firstTimezone.numericOffset - secondTimezone.numericOffset)\n  }, [supportedTimezones])\n\n  const selectedTimezoneLabel =\n    formattedTimezones.find((timezone) => timezone.value === selectedTimezone)\n      ?.label ?? ''\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Timezone picker\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-xl border border-border/60 bg-background px-3.5 text-sm shadow-xs outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span className={cn('truncate', !selectedTimezone && 'text-muted-foreground')}>\n            {selectedTimezone ? (\n              selectedTimezoneLabel\n            ) : (\n              <span className='text-muted-foreground'>Select timezone</span>\n            )}\n          </span>\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent className='w-(--radix-popper-anchor-width) rounded-xl border-border/60 p-0 shadow-sm'>\n          <Command>\n            <CommandInput placeholder='Search timezone' className='h-9 px-1' />\n            <CommandList>\n              <CommandEmpty>No timezone found.</CommandEmpty>\n              <CommandGroup>\n                {formattedTimezones.map(({ value: timezoneValue, label }) => (\n                  <CommandItem\n                    key={timezoneValue}\n                    value={timezoneValue}\n                    data-checked={selectedTimezone === timezoneValue}\n                    onSelect={currentValue => {\n                      setSelectedTimezone(\n                        currentValue === selectedTimezone ? '' : currentValue\n                      )\n                      setOpen(false)\n                    }}\n                    className='rounded-md pr-2'\n                  >\n                    <span className='truncate'>{label}</span>\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox7\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-8",
      "type": "registry:component",
      "title": "Combobox 8",
      "description": "Combobox 8. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-8.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base-ui/avatar'\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype UserStatus = 'away' | 'busy' | 'offline' | 'online'\n\ntype UserOption = {\n  avatar: string\n  email: string\n  name: string\n  status: UserStatus\n}\n\nconst users = [\n  {\n    name: 'Maya Chen',\n    email: 'maya.chen@northstar.app',\n    avatar: 'https://i.pravatar.cc/160?img=32',\n    status: 'online'\n  },\n  {\n    name: 'Leo Grant',\n    email: 'leo.grant@fieldnote.co',\n    avatar: 'https://i.pravatar.cc/160?img=12',\n    status: 'offline'\n  },\n  {\n    name: 'Amara Lewis',\n    email: 'amara.lewis@atlas.team',\n    avatar: 'https://i.pravatar.cc/160?img=47',\n    status: 'away'\n  },\n  {\n    name: 'Noah Bennett',\n    email: 'noah.bennett@orbitmail.com',\n    avatar: 'https://i.pravatar.cc/160?img=15',\n    status: 'online'\n  },\n  {\n    name: 'Jade Morris',\n    email: 'jade.morris@studioflow.io',\n    avatar: 'https://i.pravatar.cc/160?img=5',\n    status: 'busy'\n  },\n  {\n    name: 'Elena Park',\n    email: 'elena.park@workframe.dev',\n    avatar: 'https://i.pravatar.cc/160?img=20',\n    status: 'online'\n  }\n] as const satisfies readonly UserOption[]\n\ntype UserName = (typeof users)[number]['name']\ntype UserRecord = (typeof users)[number]\n\nconst userByName: Record<UserName, UserRecord> = {\n  'Maya Chen': users[0],\n  'Leo Grant': users[1],\n  'Amara Lewis': users[2],\n  'Noah Bennett': users[3],\n  'Jade Morris': users[4],\n  'Elena Park': users[5]\n}\n\nconst isUserName = (value: string): value is UserName =>\n  users.some((user) => user.name === value)\n\nconst getInitials = (name: string): string =>\n  name\n    .split(' ')\n    .filter(Boolean)\n    .slice(0, 2)\n    .map((part) => part[0])\n    .join('')\n    .toUpperCase()\n\nconst statusClassNameByValue: Record<UserStatus, string> = {\n  online: 'bg-emerald-500',\n  offline: 'bg-slate-400',\n  away: 'bg-amber-400',\n  busy: 'bg-rose-500'\n}\n\nconst Combobox8 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedUserName, setSelectedUserName] = useState<UserName | ''>('')\n\n  const selectedUser: UserRecord | undefined = selectedUserName\n    ? userByName[selectedUserName]\n    : undefined\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Assignee picker\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-3xl border border-border/60 bg-background px-3.5 text-sm shadow-xs outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          {selectedUser ? (\n            <span className='flex min-w-0 items-center gap-2'>\n              <Avatar className='size-6'>\n                <AvatarImage src={selectedUser.avatar} alt={selectedUser.name} />\n                <AvatarFallback>{getInitials(selectedUser.name)}</AvatarFallback>\n              </Avatar>\n              <span className='truncate font-medium'>{selectedUser.name}</span>\n            </span>\n          ) : (\n            <span className='text-muted-foreground'>Select assignee</span>\n          )}\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent className='w-75 overflow-hidden rounded-2xl border border-border/60 p-0 shadow-sm'>\n          <Command className='rounded-3xl!'>\n            <CommandInput placeholder='Search assignee...' className='h-9 px-1' />\n            <CommandList>\n              <CommandEmpty>No assignee found.</CommandEmpty>\n              <CommandGroup>\n                {users.map((user) => (\n                  <CommandItem\n                    key={user.name}\n                    value={user.name}\n                    data-checked={selectedUserName === user.name}\n                    onSelect={(currentValue) => {\n                      if (currentValue === selectedUserName) {\n                        setSelectedUserName('')\n                        setOpen(false)\n                        return\n                      }\n\n                      if (!isUserName(currentValue)) {\n                        return\n                      }\n\n                      setSelectedUserName(currentValue)\n                      setOpen(false)\n                    }}\n                    className='rounded-lg pr-2'\n                  >\n                    <span className='flex min-w-0 flex-1 items-center gap-2'>\n                      <span className='relative shrink-0'>\n                        <Avatar className='size-7'>\n                          <AvatarImage src={user.avatar} alt={user.name} />\n                          <AvatarFallback>{getInitials(user.name)}</AvatarFallback>\n                        </Avatar>\n                        <span\n                          className={`absolute right-0 bottom-0 size-2 rounded-full ring-2 ring-background ${statusClassNameByValue[user.status]}`}\n                        />\n                      </span>\n                      <span className='flex min-w-0 flex-col'>\n                        <span className='truncate font-medium'>{user.name}</span>\n                        <span className='text-muted-foreground truncate text-sm'>\n                          {user.email}\n                        </span>\n                      </span>\n                    </span>\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox8\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-9",
      "type": "registry:component",
      "title": "Combobox 9",
      "description": "Combobox 9. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-9.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport {\n  Command,\n  CommandEmpty,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CountryOption = {\n  flag: string\n  label: string\n  value: string\n}\n\nconst countries = [\n  {\n    value: 'india',\n    label: 'India',\n    flag: 'https://flagcdn.com/w40/in.png'\n  },\n  {\n    value: 'japan',\n    label: 'Japan',\n    flag: 'https://flagcdn.com/w40/jp.png'\n  },\n  {\n    value: 'canada',\n    label: 'Canada',\n    flag: 'https://flagcdn.com/w40/ca.png'\n  },\n  {\n    value: 'germany',\n    label: 'Germany',\n    flag: 'https://flagcdn.com/w40/de.png'\n  },\n  {\n    value: 'brazil',\n    label: 'Brazil',\n    flag: 'https://flagcdn.com/w40/br.png'\n  },\n  {\n    value: 'france',\n    label: 'France',\n    flag: 'https://flagcdn.com/w40/fr.png'\n  }\n] as const satisfies readonly CountryOption[]\n\ntype CountryValue = (typeof countries)[number]['value']\n\nconst countryByValue: Record<CountryValue, (typeof countries)[number]> = {\n  india: countries[0],\n  japan: countries[1],\n  canada: countries[2],\n  germany: countries[3],\n  brazil: countries[4],\n  france: countries[5]\n}\n\nconst isCountryValue = (value: string): value is CountryValue =>\n  countries.some((country) => country.value === value)\n\nconst Combobox9 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedCountry, setSelectedCountry] = useState<CountryValue | ''>('')\n\n  const selectedCountryOption = selectedCountry\n    ? countryByValue[selectedCountry]\n    : undefined\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Country picker\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex h-10 w-full items-center justify-between rounded-xl border border-border/60 bg-background px-3.5 text-sm shadow-xs outline-none transition-colors hover:bg-accent/20 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          {selectedCountryOption ? (\n            <span className='flex min-w-0 items-center gap-2'>\n              <img\n                src={selectedCountryOption.flag}\n                alt={`${selectedCountryOption.label} flag`}\n                className='h-4 w-5 rounded-[2px] object-cover'\n              />\n              <span className='truncate'>{selectedCountryOption.label}</span>\n            </span>\n          ) : (\n            <span className='text-muted-foreground'>Select country</span>\n          )}\n          <ChevronDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-full min-w-(--radix-popper-anchor-width) rounded-xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Command>\n            <CommandInput placeholder='Search country...' className='h-9 px-1' />\n            <CommandList className='mt-2 rounded-lg px-1 pb-1'>\n              <CommandEmpty>No country found.</CommandEmpty>\n              {countries.map((country) => (\n                <CommandItem\n                  key={country.value}\n                  value={country.value}\n                  data-checked={selectedCountry === country.value}\n                  onSelect={(currentValue) => {\n                    if (currentValue === selectedCountry) {\n                      setSelectedCountry('')\n                      setOpen(false)\n                      return\n                    }\n\n                    if (!isCountryValue(currentValue)) {\n                      return\n                    }\n\n                    setSelectedCountry(currentValue)\n                    setOpen(false)\n                  }}\n                className='rounded-lg pr-2'\n                >\n                  <img\n                    src={country.flag}\n                    alt={`${country.label} flag`}\n                    className='h-4 w-5 rounded-[2px] object-cover'\n                  />\n                  <span className='min-w-0 flex-1 truncate'>{country.label}</span>\n                </CommandItem>\n              ))}\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox9\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-10",
      "type": "registry:component",
      "title": "Combobox 10",
      "description": "Combobox 10. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-10.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon, XIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst frameworks = [\n  { value: 'research', label: 'Research' },\n  { value: 'planning', label: 'Planning' },\n  { value: 'design', label: 'Design' },\n  { value: 'testing', label: 'Testing' },\n  { value: 'delivery', label: 'Delivery' },\n  { value: 'support', label: 'Support' },\n  { value: 'docs', label: 'Docs' },\n  { value: 'review', label: 'Review' }\n] as const\n\ntype FrameworkOption = (typeof frameworks)[number]\ntype FrameworkValue = FrameworkOption['value']\n\nconst frameworkByValue: Record<FrameworkValue, FrameworkOption['label']> = {\n  research: 'Research',\n  planning: 'Planning',\n  design: 'Design',\n  testing: 'Testing',\n  delivery: 'Delivery',\n  support: 'Support',\n  docs: 'Docs',\n  review: 'Review'\n}\n\nconst Combobox10 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedValues, setSelectedValues] = useState<FrameworkValue[]>([\n    'research',\n    'design'\n  ])\n\n  const toggleSelection = (value: FrameworkValue) => {\n    setSelectedValues((previousValues) =>\n      previousValues.includes(value)\n        ? previousValues.filter((selectedValue) => selectedValue !== value)\n        : [...previousValues, value]\n    )\n  }\n\n  const removeSelection = (value: FrameworkValue) => {\n    setSelectedValues((previousValues) =>\n      previousValues.filter((selectedValue) => selectedValue !== value)\n    )\n  }\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Workflow tags\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex min-h-10 w-full items-start justify-between rounded-xl border border-border/60 bg-background px-2 py-2 text-sm shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <div className='flex flex-wrap items-center gap-1.5 pr-2.5'>\n            {selectedValues.length > 0 ? (\n              selectedValues.map((value) => (\n                <Badge\n                  key={value}\n                  variant='outline'\n                  className='rounded-md border-border/60 bg-background pl-2.5 pr-1 py-3!'\n                >\n                  {frameworkByValue[value]}\n                  <button\n                    type='button'\n                    className='ml-0 inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground'\n                    onClick={(event) => {\n                      event.stopPropagation()\n                      removeSelection(value)\n                    }}\n                  >\n                    <XIcon className='size-3' />\n                  </button>\n                </Badge>\n              ))\n            ) : (\n              <span className='text-muted-foreground'>Select workflow tags</span>\n            )}\n          </div>\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 mt-1 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-(--radix-popper-anchor-width) rounded-xl border-border/60 p-0 shadow-sm'\n        >\n          <Command>\n            <CommandInput placeholder='Search workflow tags...' className='h-9 px-1' />\n            <CommandList>\n              <CommandEmpty>No workflow tag found.</CommandEmpty>\n              <CommandGroup>\n                {frameworks.map((framework) => (\n                  <CommandItem\n                    key={framework.value}\n                    value={framework.value}\n                    data-checked={selectedValues.includes(framework.value)}\n                    onSelect={() => toggleSelection(framework.value)}\n                    className='flex items-center rounded-md pr-2'\n                  >\n                    <span className='min-w-0 flex-1 truncate'>{framework.label}</span>\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox10\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-11",
      "type": "registry:component",
      "title": "Combobox 11",
      "description": "Combobox 11. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-11.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useMemo, useState } from 'react'\n\nimport { ChevronsUpDownIcon, XIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst frameworks = [\n  { value: 'research', label: 'Research' },\n  { value: 'planning', label: 'Planning' },\n  { value: 'design', label: 'Design' },\n  { value: 'testing', label: 'Testing' },\n  { value: 'delivery', label: 'Delivery' },\n  { value: 'support', label: 'Support' },\n  { value: 'docs', label: 'Docs' },\n  { value: 'review', label: 'Review' }\n] as const\n\ntype FrameworkOption = (typeof frameworks)[number]\ntype FrameworkValue = FrameworkOption['value']\n\nconst frameworkByValue: Record<FrameworkValue, FrameworkOption['label']> = {\n  research: 'Research',\n  planning: 'Planning',\n  design: 'Design',\n  testing: 'Testing',\n  delivery: 'Delivery',\n  support: 'Support',\n  docs: 'Docs',\n  review: 'Review'\n}\n\nconst MAX_SHOWN_ITEMS = 2\n\nconst Combobox11 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [expanded, setExpanded] = useState<boolean>(false)\n  const [selectedValues, setSelectedValues] = useState<FrameworkValue[]>([\n    'research',\n    'design',\n    'testing',\n    'delivery',\n    'docs'\n  ])\n\n  const toggleSelection = (value: FrameworkValue) => {\n    setSelectedValues((previousValues) =>\n      previousValues.includes(value)\n        ? previousValues.filter((selectedValue) => selectedValue !== value)\n        : [...previousValues, value]\n    )\n  }\n\n  const removeSelection = (value: FrameworkValue) => {\n    setSelectedValues((previousValues) =>\n      previousValues.filter((selectedValue) => selectedValue !== value)\n    )\n  }\n\n  const visibleItems = useMemo(\n    () =>\n      expanded ? selectedValues : selectedValues.slice(0, MAX_SHOWN_ITEMS),\n    [expanded, selectedValues]\n  )\n  const hiddenCount = selectedValues.length - visibleItems.length\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Expandable workflow tags\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex min-h-11 w-full items-start justify-between rounded-2xl border border-border/60 bg-background p-2 text-sm shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <div className='flex flex-wrap items-center gap-1.5 pr-3'>\n            {selectedValues.length > 0 ? (\n              <>\n                {visibleItems.map((value) => (\n                  <Badge\n                    key={value}\n                    variant='outline'\n                    className='rounded-lg border-border/60 bg-muted/20 px-2.5 pr-1 py-3 text-xs'\n                  >\n                    {frameworkByValue[value]}\n                    <button\n                      type='button'\n                      className='ml-0 inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground'\n                      onClick={(event) => {\n                        event.stopPropagation()\n                        removeSelection(value)\n                      }}\n                    >\n                      <XIcon className='size-3' />\n                    </button>\n                  </Badge>\n                ))}\n                {(hiddenCount > 0 || expanded) && (\n                <Badge\n                  variant='outline'\n                  onClick={(event) => {\n                    event.stopPropagation()\n                    setExpanded((previousExpanded) => !previousExpanded)\n                  }}\n                    className='rounded-lg border-dashed border-border/60 bg-transparent px-2.5 py-1 text-xs'\n                  >\n                    {expanded ? 'Show less' : `+${hiddenCount} more`}\n                  </Badge>\n                )}\n              </>\n            ) : (\n              <span className='text-muted-foreground mt-0.5'>Select workflow tags</span>\n            )}\n          </div>\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 mt-1 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent className='w-(--radix-popper-anchor-width) overflow-hidden rounded-2xl border border-border/60 p-0 shadow-sm'>\n          <Command className='rounded-2xl!'>\n            <CommandInput\n              placeholder='Search workflow tags...'\n              className='h-10 px-2'\n            />\n            <CommandList>\n              <CommandEmpty>No workflow tag found.</CommandEmpty>\n              <CommandGroup>\n                {frameworks.map((framework) => (\n                  <CommandItem\n                    key={framework.value}\n                    value={framework.value}\n                    data-checked={selectedValues.includes(framework.value)}\n                    onSelect={() => toggleSelection(framework.value)}\n                    className='flex items-center rounded-lg pr-2'\n                  >\n                    <span className='min-w-0 flex-1 truncate'>\n                      {framework.label}\n                    </span>\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox-12",
      "type": "registry:component",
      "title": "Combobox 12",
      "description": "Combobox 12. A combobox component for selecting from a list of options.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "command",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/combobox-12.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList\n} from '@/components/base-ui/command'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst workflowTags = [\n  { value: 'research', label: 'Research' },\n  { value: 'planning', label: 'Planning' },\n  { value: 'design', label: 'Design' },\n  { value: 'testing', label: 'Testing' },\n  { value: 'delivery', label: 'Delivery' },\n  { value: 'support', label: 'Support' },\n  { value: 'docs', label: 'Docs' },\n  { value: 'review', label: 'Review' }\n] as const\n\ntype WorkflowTag = (typeof workflowTags)[number]\ntype WorkflowTagValue = WorkflowTag['value']\n\nconst Combobox12 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedValues, setSelectedValues] = useState<WorkflowTagValue[]>([\n    'research',\n    'planning',\n    'design',\n    'testing'\n  ])\n\n  const toggleSelection = (value: WorkflowTagValue) => {\n    setSelectedValues((previousValues) =>\n      previousValues.includes(value)\n        ? previousValues.filter(\n            (selectedValue) => selectedValue !== value\n          )\n        : [...previousValues, value]\n    )\n  }\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='text-sm font-medium'>\n        Selected workflow count\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          role='combobox'\n          aria-expanded={open}\n          className='flex min-h-11 w-full items-center justify-between rounded-2xl border border-border/60 bg-background px-3.5 py-2 text-sm shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span className='flex items-center gap-2 text-left'>\n            {selectedValues.length > 0 ? (\n              <>\n                <Badge\n                  variant='outline'\n                  className='rounded-lg border-border/60 bg-muted/20 px-2 py-0.5 text-xs'\n                >\n                  {selectedValues.length}\n                </Badge>\n                <span>{selectedValues.length === 1 ? 'tag selected' : 'tags selected'}</span>\n              </>\n            ) : (\n              <span className='text-muted-foreground'>Select workflow tags</span>\n            )}\n          </span>\n          <ChevronsUpDownIcon\n            className='text-muted-foreground/80 size-4 shrink-0'\n            aria-hidden='true'\n          />\n        </PopoverTrigger>\n        <PopoverContent className='w-(--radix-popper-anchor-width) overflow-hidden rounded-2xl border border-border/60 p-0 shadow-sm'>\n          <Command className='rounded-2xl!'>\n            <CommandInput placeholder='Search workflow tags...' className='h-10 px-2' />\n            <CommandList>\n              <CommandEmpty>No workflow tag found.</CommandEmpty>\n              <CommandGroup>\n                {workflowTags.map((tag) => (\n                  <CommandItem\n                    key={tag.value}\n                    value={tag.value}\n                    data-checked={selectedValues.includes(tag.value)}\n                    onSelect={() => toggleSelection(tag.value)}\n                    className='flex items-center rounded-lg pr-2'\n                  >\n                    <span className='min-w-0 flex-1 truncate'>{tag.label}</span>\n                  </CommandItem>\n                ))}\n              </CommandGroup>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default Combobox12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-1",
      "type": "registry:component",
      "title": "DataTable 1",
      "description": "DataTable 1. A component for displaying and managing tabular data.",
      "dependencies": [],
      "registryDependencies": [
        "checkbox",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-1.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\nexport type ProjectInvoice = {\n  amount: number\n  client: string\n  email: string\n  id: string\n  status: 'draft' | 'paid' | 'pending' | 'review'\n}\n\nconst data: readonly ProjectInvoice[] = [\n  {\n    id: 'INV-001',\n    client: 'North Studio',\n    amount: 1240,\n    status: 'paid',\n    email: 'billing@northstudio.co'\n  },\n  {\n    id: 'INV-002',\n    client: 'Atlas Works',\n    amount: 540,\n    status: 'review',\n    email: 'accounts@atlasworks.io'\n  },\n  {\n    id: 'INV-003',\n    client: 'Paper Trail',\n    amount: 920,\n    status: 'pending',\n    email: 'hello@papertrail.design'\n  },\n  {\n    id: 'INV-004',\n    client: 'Luma Team',\n    amount: 1580,\n    status: 'paid',\n    email: 'finance@luma.team'\n  },\n  {\n    id: 'INV-005',\n    client: 'Mono Labs',\n    amount: 310,\n    status: 'draft',\n    email: 'ops@monolabs.dev'\n  }\n] as const\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst DataTable1 = () => {\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n\n  const allSelected = selectedIds.length === data.length\n  const someSelected = selectedIds.length > 0 && !allSelected\n\n  const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds])\n\n  const toggleAll = (checked: boolean) => {\n    setSelectedIds(checked ? data.map((item) => item.id) : [])\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 rounded-lg border border-border/60 bg-background overflow-x-auto'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220'>\n          <TableHeader>\n            <TableRow>\n              <TableHead className='h-11 w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              <TableHead className='h-11 bg-muted/20 font-medium'>Client</TableHead>\n              <TableHead className='h-11 bg-muted/20 font-medium'>Status</TableHead>\n              <TableHead className='h-11 bg-muted/20 font-medium'>Email</TableHead>\n              <TableHead className='h-11 bg-muted/20 text-right font-medium'>Amount</TableHead>\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((row) => {\n              const isSelected = selectedIdSet.has(row.id)\n\n              return (\n                <TableRow\n                  key={row.id}\n                  data-state={isSelected ? 'selected' : undefined}\n                  className='transition-colors hover:bg-muted/10'\n                >\n                  <TableCell className='py-3'>\n                    <Checkbox\n                      checked={isSelected}\n                      onCheckedChange={(value) => toggleRow(row.id, !!value)}\n                      aria-label={`Select ${row.client}`}\n                      className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                    />\n                  </TableCell>\n                  <TableCell className='py-3'>\n                    <div className='font-medium'>{row.client}</div>\n                  </TableCell>\n                  <TableCell className='py-3'>\n                    <div className='capitalize text-sm text-muted-foreground'>{row.status}</div>\n                  </TableCell>\n                  <TableCell className='py-3'>\n                    <div className='text-sm text-muted-foreground'>{row.email}</div>\n                  </TableCell>\n                  <TableCell className='py-3'>\n                    <div className='text-right font-medium'>{formatCurrency(row.amount)}</div>\n                  </TableCell>\n                </TableRow>\n              )\n            })}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-2",
      "type": "registry:component",
      "title": "DataTable 2",
      "description": "DataTable 2. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "checkbox",
        "select",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-2.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { Rows2Icon, Rows3Icon, Rows4Icon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue\n} from '@/components/base-ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\nimport { cn } from '@/lib/utils'\n\ntype Density = 'compact' | 'flexible' | 'standard'\n\ntype InvoiceStatus = 'failed' | 'paid' | 'processing' | 'review'\n\ntype ClientInvoice = {\n  amount: number\n  email: string\n  id: string\n  name: string\n  status: InvoiceStatus\n}\n\ntype DensityOption = {\n  icon: typeof Rows2Icon\n  label: string\n  value: Density\n}\n\nconst densityOptions: readonly DensityOption[] = [\n  {\n    value: 'compact',\n    label: 'Compact',\n    icon: Rows4Icon\n  },\n  {\n    value: 'standard',\n    label: 'Standard',\n    icon: Rows3Icon\n  },\n  {\n    value: 'flexible',\n    label: 'Flexible',\n    icon: Rows2Icon\n  }\n] as const\n\nconst data: readonly ClientInvoice[] = [\n  {\n    id: 'INV-101',\n    name: 'Aurora Lab',\n    amount: 699,\n    status: 'paid',\n    email: 'billing@auroralab.co'\n  },\n  {\n    id: 'INV-102',\n    name: 'Northline Studio',\n    amount: 242,\n    status: 'paid',\n    email: 'hello@northline.studio'\n  },\n  {\n    id: 'INV-103',\n    name: 'Metric House',\n    amount: 655,\n    status: 'processing',\n    email: 'ops@metrichouse.io'\n  },\n  {\n    id: 'INV-104',\n    name: 'Olive Systems',\n    amount: 874,\n    status: 'review',\n    email: 'team@olivesystems.dev'\n  },\n  {\n    id: 'INV-105',\n    name: 'Canvas Union',\n    amount: 541,\n    status: 'failed',\n    email: 'accounts@canvasunion.com'\n  }\n] as const\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst densityClasses: Record<Density, string> = {\n  compact: '[&_td]:py-2 [&_th]:py-2',\n  standard: '[&_td]:py-3 [&_th]:py-2.5',\n  flexible: '[&_td]:py-4 [&_th]:py-3'\n}\n\nconst DataTable2 = () => {\n  const [density, setDensity] = useState<Density>('standard')\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n\n  const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds])\n  const allSelected = selectedIds.length === data.length\n  const someSelected = selectedIds.length > 0 && !allSelected\n\n  const toggleAll = (checked: boolean) => {\n    setSelectedIds(checked ? data.map((item) => item.id) : [])\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='py-4'>\n        <Select value={density} onValueChange={(value) => setDensity(value as Density)}>\n          <SelectTrigger\n            className='w-full max-w-44 rounded-md border-border/60 bg-muted/20 shadow-none hover:bg-muted/30'\n            aria-label='Density select'\n          >\n            <SelectValue placeholder='Density' />\n          </SelectTrigger>\n          <SelectContent>\n            <SelectGroup>\n              <SelectLabel>Density</SelectLabel>\n              {densityOptions.map((option) => {\n                const Icon = option.icon\n\n                return (\n                  <SelectItem key={option.value} value={option.value}>\n                    <div className='flex items-center gap-2'>\n                      <Icon className='size-4 text-muted-foreground' />\n                      {option.label}\n                    </div>\n                  </SelectItem>\n                )\n              })}\n            </SelectGroup>\n          </SelectContent>\n        </Select>\n      </div>\n\n      <div className='overflow-hidden rounded-lg border border-border/60 bg-background'>\n        <Table\n          className={cn(\n            'mx-auto w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220',\n            densityClasses[density]\n          )}\n        >\n          <TableHeader>\n            <TableRow>\n              <TableHead className='w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all invoices'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              <TableHead className='bg-muted/20 font-medium'>Name</TableHead>\n              <TableHead className='bg-muted/20 font-medium'>Status</TableHead>\n              <TableHead className='bg-muted/20 font-medium'>Email</TableHead>\n              <TableHead className='bg-muted/20 text-right font-medium'>Amount</TableHead>\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((row) => {\n              const isSelected = selectedIdSet.has(row.id)\n\n              return (\n                <TableRow\n                  key={row.id}\n                  data-state={isSelected ? 'selected' : undefined}\n                  className='transition-colors hover:bg-muted/10'\n                >\n                  <TableCell>\n                    <Checkbox\n                      checked={isSelected}\n                      onCheckedChange={(value) => toggleRow(row.id, !!value)}\n                      aria-label={`Select ${row.name}`}\n                      className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                    />\n                  </TableCell>\n                  <TableCell>\n                    <div className='font-medium'>{row.name}</div>\n                  </TableCell>\n                  <TableCell>\n                    <div className='capitalize text-sm text-muted-foreground'>{row.status}</div>\n                  </TableCell>\n                  <TableCell>\n                    <div className='text-sm text-muted-foreground'>{row.email}</div>\n                  </TableCell>\n                  <TableCell>\n                    <div className='text-right font-medium'>{formatCurrency(row.amount)}</div>\n                  </TableCell>\n                </TableRow>\n              )\n            })}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-3",
      "type": "registry:component",
      "title": "DataTable 3",
      "description": "DataTable 3. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "checkbox",
        "dropdown-menu",
        "input",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-3.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { ChevronDownIcon, Columns3Icon, RefreshCcwIcon, SearchIcon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport {\n  DropdownMenu,\n  DropdownMenuCheckboxItem,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger\n} from '@/components/base-ui/dropdown-menu'\nimport { Input } from '@/components/base-ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype InvoiceStatus = 'failed' | 'paid' | 'processing' | 'review'\n\ntype ClientInvoice = {\n  amount: number\n  email: string\n  id: string\n  name: string\n  status: InvoiceStatus\n}\n\ntype ColumnKey = 'amount' | 'email' | 'name' | 'status'\n\ntype ColumnOption = {\n  key: ColumnKey\n  label: string\n}\n\nconst data: readonly ClientInvoice[] = [\n  {\n    id: 'INV-201',\n    name: 'Harbor Studio',\n    amount: 699,\n    status: 'paid',\n    email: 'hello@harborstudio.co'\n  },\n  {\n    id: 'INV-202',\n    name: 'Bright Matter',\n    amount: 242,\n    status: 'paid',\n    email: 'team@brightmatter.io'\n  },\n  {\n    id: 'INV-203',\n    name: 'Grain Works',\n    amount: 655,\n    status: 'processing',\n    email: 'ops@grainworks.design'\n  },\n  {\n    id: 'INV-204',\n    name: 'North Track',\n    amount: 874,\n    status: 'review',\n    email: 'finance@northtrack.app'\n  },\n  {\n    id: 'INV-205',\n    name: 'Common Unit',\n    amount: 541,\n    status: 'failed',\n    email: 'billing@commonunit.dev'\n  }\n] as const\n\nconst columnOptions: readonly ColumnOption[] = [\n  { key: 'name', label: 'Name' },\n  { key: 'status', label: 'Status' },\n  { key: 'email', label: 'Email' },\n  { key: 'amount', label: 'Amount' }\n] as const\n\nconst defaultVisibility: Record<ColumnKey, boolean> = {\n  name: true,\n  status: true,\n  email: true,\n  amount: true\n}\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst DataTable3 = () => {\n  const [searchQuery, setSearchQuery] = useState('')\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n  const [visibleColumns, setVisibleColumns] = useState<Record<ColumnKey, boolean>>(defaultVisibility)\n\n  const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds])\n  const allSelected = selectedIds.length === data.length\n  const someSelected = selectedIds.length > 0 && !allSelected\n\n  const filteredColumnOptions = useMemo(\n    () =>\n      columnOptions.filter((column) =>\n        column.label.toLowerCase().includes(searchQuery.trim().toLowerCase())\n      ),\n    [searchQuery]\n  )\n\n  const toggleAll = (checked: boolean) => {\n    setSelectedIds(checked ? data.map((item) => item.id) : [])\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const toggleColumn = (key: ColumnKey, checked: boolean) => {\n    setVisibleColumns((current) => ({\n      ...current,\n      [key]: checked\n    }))\n  }\n\n  const resetColumns = () => {\n    setVisibleColumns(defaultVisibility)\n    setSearchQuery('')\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='py-4'>\n        <DropdownMenu>\n          <DropdownMenuTrigger className='inline-flex w-full max-w-44 items-center justify-between gap-2 rounded-lg border border-border/60 bg-background px-4 py-2 text-sm font-medium text-foreground outline-none transition-colors hover:bg-muted/20'>\n            <span className='flex items-center gap-2'>\n              <Columns3Icon className='size-4 text-muted-foreground' />\n              Columns\n            </span>\n            <ChevronDownIcon className='size-4 text-muted-foreground' />\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align='start' className='w-56 rounded-lg border border-border/60 bg-background p-1 shadow-sm'>\n            <div className='relative px-0.5 py-0.5'>\n              <Input\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                className='rounded-md border-border/60 bg-background pl-8'\n                placeholder='Search columns'\n                onKeyDown={(e) => e.stopPropagation()}\n              />\n              <SearchIcon className='absolute inset-y-0 left-3 my-auto size-4 text-muted-foreground' />\n            </div>\n            <DropdownMenuSeparator />\n            {filteredColumnOptions.length > 0 ? (\n              filteredColumnOptions.map((column) => (\n                <DropdownMenuCheckboxItem\n                  key={column.key}\n                  checked={visibleColumns[column.key]}\n                  onCheckedChange={(value) => toggleColumn(column.key, !!value)}\n                  onSelect={(e) => e.preventDefault()}\n                >\n                  {column.label}\n                </DropdownMenuCheckboxItem>\n              ))\n            ) : (\n              <DropdownMenuItem disabled>No columns found</DropdownMenuItem>\n            )}\n            <DropdownMenuSeparator />\n            <DropdownMenuItem onClick={resetColumns}>\n              <RefreshCcwIcon className='size-4' />\n              Reset\n            </DropdownMenuItem>\n          </DropdownMenuContent>\n        </DropdownMenu>\n      </div>\n\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n          <TableHeader>\n            <TableRow>\n              <TableHead className='h-12 w-10 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground uppercase'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all invoices'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              {visibleColumns.name ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Name\n                </TableHead>\n              ) : null}\n              {visibleColumns.status ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Status\n                </TableHead>\n              ) : null}\n              {visibleColumns.email ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Email\n                </TableHead>\n              ) : null}\n              {visibleColumns.amount ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-right text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Amount\n                </TableHead>\n              ) : null}\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((row) => {\n              const isSelected = selectedIdSet.has(row.id)\n\n              return (\n                <TableRow\n                  key={row.id}\n                  data-state={isSelected ? 'selected' : undefined}\n                  className='transition-colors hover:bg-muted/20 data-[state=selected]:bg-muted/25'\n                >\n                  <TableCell className='py-3'>\n                    <Checkbox\n                      checked={isSelected}\n                      onCheckedChange={(value) => toggleRow(row.id, !!value)}\n                      aria-label={`Select ${row.name}`}\n                      className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                    />\n                  </TableCell>\n                  {visibleColumns.name ? (\n                    <TableCell className='py-3'>\n                      <div className='font-medium'>{row.name}</div>\n                    </TableCell>\n                  ) : null}\n                  {visibleColumns.status ? (\n                    <TableCell className='py-3'>\n                      <div className='capitalize text-sm text-muted-foreground'>{row.status}</div>\n                    </TableCell>\n                  ) : null}\n                  {visibleColumns.email ? (\n                    <TableCell className='py-3'>\n                      <div className='text-sm text-muted-foreground'>{row.email}</div>\n                    </TableCell>\n                  ) : null}\n                  {visibleColumns.amount ? (\n                    <TableCell className='py-3'>\n                      <div className='text-right font-medium'>{formatCurrency(row.amount)}</div>\n                    </TableCell>\n                  ) : null}\n                </TableRow>\n              )\n            })}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-4",
      "type": "registry:component",
      "title": "DataTable 4",
      "description": "DataTable 4. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "checkbox",
        "input",
        "label",
        "select",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { SearchIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base-ui/avatar'\nimport { Badge } from '@/components/base-ui/badge'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/base-ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype Availability = 'In Stock' | 'Limited' | 'Out of Stock'\n\ntype ProductItem = {\n  availability: Availability\n  fallback: string\n  id: string\n  price: number\n  product: string\n  productImage: string\n  rating: number\n}\n\ntype FilterState = {\n  availability: Availability | 'all'\n  maxPrice: string\n  maxRating: string\n  minPrice: string\n  minRating: string\n  product: string\n}\n\nconst items: readonly ProductItem[] = [\n  {\n    id: '1',\n    product: 'Ash Lounge Chair',\n    productImage: 'https://picsum.photos/seed/ash-lounge-chair/160/160',\n    fallback: 'AL',\n    price: 159,\n    availability: 'In Stock',\n    rating: 3.9\n  },\n  {\n    id: '2',\n    product: 'Velocity Runner',\n    productImage: 'https://picsum.photos/seed/velocity-runner/160/160',\n    fallback: 'VR',\n    price: 599,\n    availability: 'Limited',\n    rating: 4.4\n  },\n  {\n    id: '3',\n    product: 'Orbit Phone X',\n    productImage: 'https://picsum.photos/seed/orbit-phone-x/160/160',\n    fallback: 'OP',\n    price: 1299,\n    availability: 'Out of Stock',\n    rating: 3.5\n  },\n  {\n    id: '4',\n    product: 'Switch Dock Set',\n    productImage: 'https://picsum.photos/seed/switch-dock-set/160/160',\n    fallback: 'SD',\n    price: 499,\n    availability: 'In Stock',\n    rating: 4.9\n  },\n  {\n    id: '5',\n    product: 'Magic Pointer',\n    productImage: 'https://picsum.photos/seed/magic-pointer/160/160',\n    fallback: 'MP',\n    price: 970,\n    availability: 'Limited',\n    rating: 4.1\n  },\n  {\n    id: '6',\n    product: 'Pulse Watch',\n    productImage: 'https://picsum.photos/seed/pulse-watch/160/160',\n    fallback: 'PW',\n    price: 1500,\n    availability: 'Limited',\n    rating: 3.1\n  },\n  {\n    id: '7',\n    product: 'Terrain Watch',\n    productImage: 'https://picsum.photos/seed/terrain-watch/160/160',\n    fallback: 'TW',\n    price: 194,\n    availability: 'Out of Stock',\n    rating: 1.5\n  },\n  {\n    id: '8',\n    product: 'North Shade Glasses',\n    productImage: 'https://picsum.photos/seed/north-shade-glasses/160/160',\n    fallback: 'NS',\n    price: 199,\n    availability: 'Out of Stock',\n    rating: 2.4\n  }\n] as const\n\nconst defaultFilters: FilterState = {\n  product: '',\n  minPrice: '',\n  maxPrice: '',\n  availability: 'all',\n  minRating: '',\n  maxRating: ''\n}\n\nconst availabilityBadgeClass: Record<Availability, string> = {\n  'In Stock': 'border-none bg-green-600/10 text-green-600 dark:bg-green-400/10 dark:text-green-400',\n  'Out of Stock': 'border-none bg-destructive/10 text-destructive dark:bg-destructive/20',\n  Limited: 'border-none bg-amber-600/10 text-amber-600 dark:bg-amber-400/10 dark:text-amber-400'\n}\n\nconst toNumber = (value: string) => (value.trim() ? Number(value) : undefined)\n\nconst DataTable4 = () => {\n  const [filters, setFilters] = useState<FilterState>(defaultFilters)\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n\n  const filteredItems = useMemo(() => {\n    const productQuery = filters.product.trim().toLowerCase()\n    const minPrice = toNumber(filters.minPrice)\n    const maxPrice = toNumber(filters.maxPrice)\n    const minRating = toNumber(filters.minRating)\n    const maxRating = toNumber(filters.maxRating)\n\n    return items.filter((item) => {\n      const matchesProduct = productQuery ? item.product.toLowerCase().includes(productQuery) : true\n      const matchesAvailability =\n        filters.availability === 'all' ? true : item.availability === filters.availability\n      const matchesMinPrice = minPrice !== undefined ? item.price >= minPrice : true\n      const matchesMaxPrice = maxPrice !== undefined ? item.price <= maxPrice : true\n      const matchesMinRating = minRating !== undefined ? item.rating >= minRating : true\n      const matchesMaxRating = maxRating !== undefined ? item.rating <= maxRating : true\n\n      return (\n        matchesProduct &&\n        matchesAvailability &&\n        matchesMinPrice &&\n        matchesMaxPrice &&\n        matchesMinRating &&\n        matchesMaxRating\n      )\n    })\n  }, [filters])\n\n  const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds])\n  const visibleIds = filteredItems.map((item) => item.id)\n  const allSelected = visibleIds.length > 0 && visibleIds.every((id) => selectedIdSet.has(id))\n  const someSelected = visibleIds.some((id) => selectedIdSet.has(id)) && !allSelected\n\n  const updateFilter = <K extends keyof FilterState>(key: K, value: FilterState[K]) => {\n    setFilters((current) => ({\n      ...current,\n      [key]: value\n    }))\n  }\n\n  const toggleAll = (checked: boolean) => {\n    if (checked) {\n      setSelectedIds((current) => Array.from(new Set([...current, ...visibleIds])))\n      return\n    }\n\n    setSelectedIds((current) => current.filter((id) => !visibleIds.includes(id)))\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <div className='grid gap-3 border-b border-dashed border-border/60 px-4 py-5 md:grid-cols-[minmax(0,1.4fr)_repeat(3,minmax(0,1fr))]'>\n          <div className='space-y-2'>\n            <Label htmlFor='product-filter'>Product</Label>\n            <div className='relative'>\n              <Input\n                id='product-filter'\n                className='h-10 rounded-md border-border/60 pl-9'\n                value={filters.product}\n                onChange={(e) => updateFilter('product', e.target.value)}\n                placeholder='Search product'\n                type='text'\n              />\n              <div className='pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-muted-foreground'>\n                <SearchIcon size={16} />\n              </div>\n            </div>\n          </div>\n\n          <div className='space-y-2'>\n            <Label>Price</Label>\n            <div className='flex'>\n              <Input\n                className='h-10 rounded-r-none border-border/60'\n                value={filters.minPrice}\n                onChange={(e) => updateFilter('minPrice', e.target.value)}\n                placeholder='Min'\n                type='number'\n              />\n              <Input\n                className='-ms-px h-10 rounded-l-none border-border/60'\n                value={filters.maxPrice}\n                onChange={(e) => updateFilter('maxPrice', e.target.value)}\n                placeholder='Max'\n                type='number'\n              />\n            </div>\n          </div>\n\n          <div className='space-y-2'>\n            <Label htmlFor='availability-filter' >Availability</Label>\n            <Select\n              value={filters.availability}\n              onValueChange={(value) => updateFilter('availability', value as FilterState['availability'])}\n            >\n              <SelectTrigger id='availability-filter' className='h-10 w-full rounded-lg border-border/60 py-[19px]'>\n                <SelectValue />\n              </SelectTrigger>\n              <SelectContent>\n                <SelectItem value='all'>All</SelectItem>\n                <SelectItem value='In Stock'>In Stock</SelectItem>\n                <SelectItem value='Limited'>Limited</SelectItem>\n                <SelectItem value='Out of Stock'>Out of Stock</SelectItem>\n              </SelectContent>\n            </Select>\n          </div>\n\n          <div className='space-y-2'>\n            <Label>Rating</Label>\n            <div className='flex'>\n              <Input\n                className='h-10 rounded-r-none border-border/60'\n                value={filters.minRating}\n                onChange={(e) => updateFilter('minRating', e.target.value)}\n                placeholder='Min'\n                type='number'\n                step='0.1'\n              />\n              <Input\n                className='-ms-px h-10 rounded-l-none border-border/60'\n                value={filters.maxRating}\n                onChange={(e) => updateFilter('maxRating', e.target.value)}\n                placeholder='Max'\n                type='number'\n                step='0.1'\n              />\n            </div>\n          </div>\n        </div>\n\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto [&_td]:align-top'>\n          <TableHeader>\n            <TableRow>\n              <TableHead className='h-12 w-10 border-b border-dashed border-border/60 bg-transparent font-medium'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all products'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              <TableHead className='h-12 border-b border-dashed border-border/60 bg-transparent text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground'>\n                Sr. No\n              </TableHead>\n              <TableHead className='h-12 border-b border-dashed border-border/60 bg-transparent text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground'>\n                Product\n              </TableHead>\n              <TableHead className='h-12 border-b border-dashed border-border/60 bg-transparent text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground'>\n                Price\n              </TableHead>\n              <TableHead className='h-12 border-b border-dashed border-border/60 bg-transparent text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground'>\n                Availability\n              </TableHead>\n              <TableHead className='h-12 border-b border-dashed border-border/60 bg-transparent text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground'>\n                Rating\n              </TableHead>\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {filteredItems.length > 0 ? (\n              filteredItems.map((item) => {\n                const isSelected = selectedIdSet.has(item.id)\n\n                return (\n                <TableRow\n                  key={item.id}\n                  data-state={isSelected ? 'selected' : undefined}\n                  className='transition-colors hover:bg-muted/10 data-[state=selected]:bg-muted/15'\n                >\n                    <TableCell className='py-3.5'>\n                      <Checkbox\n                        checked={isSelected}\n                        onCheckedChange={(value) => toggleRow(item.id, !!value)}\n                        aria-label={`Select ${item.product}`}\n                        className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='text-sm text-muted-foreground'>{item.id}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='flex items-center gap-3'>\n                        <Avatar className='rounded-sm'>\n                          <AvatarImage src={item.productImage} alt={item.product} />\n                          <AvatarFallback className='text-xs'>{item.fallback}</AvatarFallback>\n                        </Avatar>\n                        <div className='font-medium'>{item.product}</div>\n                      </div>\n                    </TableCell>\n                    <TableCell className='py-3.5 font-medium'>${item.price}</TableCell>\n                    <TableCell className='py-3.5'>\n                      <Badge className={availabilityBadgeClass[item.availability]}>{item.availability}</Badge>\n                    </TableCell>\n                    <TableCell className='py-3.5 text-muted-foreground'>{item.rating.toFixed(1)}</TableCell>\n                  </TableRow>\n                )\n              })\n            ) : (\n              <TableRow>\n                <TableCell colSpan={6} className='h-24 text-center text-muted-foreground'>\n                  No results.\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-5",
      "type": "registry:component",
      "title": "DataTable 5",
      "description": "DataTable 5. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "checkbox",
        "dropdown-menu",
        "input",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-5.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { ChevronDownIcon, Columns3Icon, RefreshCcwIcon, SearchIcon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport {\n  DropdownMenu,\n  DropdownMenuCheckboxItem,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger\n} from '@/components/base-ui/dropdown-menu'\nimport { Input } from '@/components/base-ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype InvoiceStatus = 'failed' | 'paid' | 'processing' | 'review'\n\ntype ClientInvoice = {\n  amount: number\n  email: string\n  id: string\n  name: string\n  status: InvoiceStatus\n}\n\ntype ColumnKey = 'amount' | 'email' | 'name' | 'status'\n\ntype ColumnOption = {\n  key: ColumnKey\n  label: string\n}\n\nconst data: readonly ClientInvoice[] = [\n  {\n    id: 'INV-201',\n    name: 'Harbor Studio',\n    amount: 699,\n    status: 'paid',\n    email: 'hello@harborstudio.co'\n  },\n  {\n    id: 'INV-202',\n    name: 'Bright Matter',\n    amount: 242,\n    status: 'paid',\n    email: 'team@brightmatter.io'\n  },\n  {\n    id: 'INV-203',\n    name: 'Grain Works',\n    amount: 655,\n    status: 'processing',\n    email: 'ops@grainworks.design'\n  },\n  {\n    id: 'INV-204',\n    name: 'North Track',\n    amount: 874,\n    status: 'review',\n    email: 'finance@northtrack.app'\n  },\n  {\n    id: 'INV-205',\n    name: 'Common Unit',\n    amount: 541,\n    status: 'failed',\n    email: 'billing@commonunit.dev'\n  }\n] as const\n\nconst columnOptions: readonly ColumnOption[] = [\n  { key: 'name', label: 'Name' },\n  { key: 'status', label: 'Status' },\n  { key: 'email', label: 'Email' },\n  { key: 'amount', label: 'Amount' }\n] as const\n\nconst defaultVisibility: Record<ColumnKey, boolean> = {\n  name: true,\n  status: true,\n  email: true,\n  amount: true\n}\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst DataTable3 = () => {\n  const [searchQuery, setSearchQuery] = useState('')\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n  const [visibleColumns, setVisibleColumns] = useState<Record<ColumnKey, boolean>>(defaultVisibility)\n\n  const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds])\n  const allSelected = selectedIds.length === data.length\n  const someSelected = selectedIds.length > 0 && !allSelected\n\n  const filteredColumnOptions = useMemo(\n    () =>\n      columnOptions.filter((column) =>\n        column.label.toLowerCase().includes(searchQuery.trim().toLowerCase())\n      ),\n    [searchQuery]\n  )\n\n  const toggleAll = (checked: boolean) => {\n    setSelectedIds(checked ? data.map((item) => item.id) : [])\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const toggleColumn = (key: ColumnKey, checked: boolean) => {\n    setVisibleColumns((current) => ({\n      ...current,\n      [key]: checked\n    }))\n  }\n\n  const resetColumns = () => {\n    setVisibleColumns(defaultVisibility)\n    setSearchQuery('')\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='py-4'>\n        <DropdownMenu>\n          <DropdownMenuTrigger className='inline-flex w-full max-w-44 items-center justify-between gap-2 rounded-lg border border-border/60 bg-background px-4 py-2 text-sm font-medium text-foreground outline-none transition-colors hover:bg-muted/20'>\n            <span className='flex items-center gap-2'>\n              <Columns3Icon className='size-4 text-muted-foreground' />\n              Columns\n            </span>\n            <ChevronDownIcon className='size-4 text-muted-foreground' />\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align='start' className='w-56 rounded-lg border border-border/60 bg-background p-1 shadow-sm'>\n            <div className='relative px-0.5 py-0.5'>\n              <Input\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                className='rounded-md border-border/60 bg-background pl-8'\n                placeholder='Search columns'\n                onKeyDown={(e) => e.stopPropagation()}\n              />\n              <SearchIcon className='absolute inset-y-0 left-3 my-auto size-4 text-muted-foreground' />\n            </div>\n            <DropdownMenuSeparator />\n            {filteredColumnOptions.length > 0 ? (\n              filteredColumnOptions.map((column) => (\n                <DropdownMenuCheckboxItem\n                  key={column.key}\n                  checked={visibleColumns[column.key]}\n                  onCheckedChange={(value) => toggleColumn(column.key, !!value)}\n                  onSelect={(e) => e.preventDefault()}\n                >\n                  {column.label}\n                </DropdownMenuCheckboxItem>\n              ))\n            ) : (\n              <DropdownMenuItem disabled>No columns found</DropdownMenuItem>\n            )}\n            <DropdownMenuSeparator />\n            <DropdownMenuItem onClick={resetColumns}>\n              <RefreshCcwIcon className='size-4' />\n              Reset\n            </DropdownMenuItem>\n          </DropdownMenuContent>\n        </DropdownMenu>\n      </div>\n\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n          <TableHeader>\n            <TableRow>\n              <TableHead className='h-12 w-10 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground uppercase'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all invoices'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              {visibleColumns.name ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Name\n                </TableHead>\n              ) : null}\n              {visibleColumns.status ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Status\n                </TableHead>\n              ) : null}\n              {visibleColumns.email ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Email\n                </TableHead>\n              ) : null}\n              {visibleColumns.amount ? (\n                <TableHead className='h-12 border-b border-border/60 bg-transparent text-right text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                  Amount\n                </TableHead>\n              ) : null}\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((row) => {\n              const isSelected = selectedIdSet.has(row.id)\n\n              return (\n                <TableRow\n                  key={row.id}\n                  data-state={isSelected ? 'selected' : undefined}\n                  className='transition-colors hover:bg-muted/20 data-[state=selected]:bg-muted/25'\n                >\n                  <TableCell className='py-3'>\n                    <Checkbox\n                      checked={isSelected}\n                      onCheckedChange={(value) => toggleRow(row.id, !!value)}\n                      aria-label={`Select ${row.name}`}\n                      className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                    />\n                  </TableCell>\n                  {visibleColumns.name ? (\n                    <TableCell className='py-3'>\n                      <div className='font-medium'>{row.name}</div>\n                    </TableCell>\n                  ) : null}\n                  {visibleColumns.status ? (\n                    <TableCell className='py-3'>\n                      <div className='capitalize text-sm text-muted-foreground'>{row.status}</div>\n                    </TableCell>\n                  ) : null}\n                  {visibleColumns.email ? (\n                    <TableCell className='py-3'>\n                      <div className='text-sm text-muted-foreground'>{row.email}</div>\n                    </TableCell>\n                  ) : null}\n                  {visibleColumns.amount ? (\n                    <TableCell className='py-3'>\n                      <div className='text-right font-medium'>{formatCurrency(row.amount)}</div>\n                    </TableCell>\n                  ) : null}\n                </TableRow>\n              )\n            })}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-6",
      "type": "registry:component",
      "title": "DataTable 6",
      "description": "DataTable 6. A component for displaying and managing tabular data.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-6.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype InvoiceStatus = 'failed' | 'paid' | 'processing' | 'review'\n\ntype ClientInvoice = {\n  amount: number\n  dueDate: string\n  email: string\n  id: string\n  name: string\n  status: InvoiceStatus\n}\n\ntype ColumnKey = 'amount' | 'dueDate' | 'email' | 'name' | 'status'\n\ntype ColumnConfig = {\n  key: ColumnKey\n  label: string\n  minWidth: number\n}\n\ntype ColumnWidths = Record<ColumnKey, number>\n\ntype ResizeState = {\n  column: ColumnKey\n  startWidth: number\n  startX: number\n} | null\n\nconst data: readonly ClientInvoice[] = [\n  {\n    id: 'INV-401',\n    name: 'Shang Chain',\n    amount: 699,\n    status: 'paid',\n    email: 'shang07@yahoo.com',\n    dueDate: '2026-04-14'\n  },\n  {\n    id: 'INV-402',\n    name: 'Kevin Lincoln',\n    amount: 242,\n    status: 'paid',\n    email: 'kevinli09@gmail.com',\n    dueDate: '2026-04-18'\n  },\n  {\n    id: 'INV-403',\n    name: 'Milton Rose',\n    amount: 655,\n    status: 'processing',\n    email: 'rose96@gmail.com',\n    dueDate: '2026-04-20'\n  },\n  {\n    id: 'INV-404',\n    name: 'Silas Ryan',\n    amount: 874,\n    status: 'review',\n    email: 'silas22@gmail.com',\n    dueDate: '2026-04-24'\n  },\n  {\n    id: 'INV-405',\n    name: 'Ben Tenison',\n    amount: 541,\n    status: 'failed',\n    email: 'bent@hotmail.com',\n    dueDate: '2026-04-29'\n  }\n] as const\n\nconst columns: readonly ColumnConfig[] = [\n  { key: 'name', label: 'Name', minWidth: 170 },\n  { key: 'status', label: 'Status', minWidth: 120 },\n  { key: 'email', label: 'Email', minWidth: 220 },\n  { key: 'amount', label: 'Amount', minWidth: 120 },\n  { key: 'dueDate', label: 'Due Date', minWidth: 130 }\n] as const\n\nconst defaultWidths: ColumnWidths = {\n  name: 180,\n  status: 120,\n  email: 230,\n  amount: 120,\n  dueDate: 140\n}\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst DataTable6 = () => {\n  const [columnWidths, setColumnWidths] = useState<ColumnWidths>(defaultWidths)\n  const [resizeState, setResizeState] = useState<ResizeState>(null)\n  const resizeStateRef = useRef<ResizeState>(null)\n\n  const tableWidth = useMemo(\n    () => columns.reduce((total, column) => total + columnWidths[column.key], 0),\n    [columnWidths]\n  )\n\n  useEffect(() => {\n    resizeStateRef.current = resizeState\n  }, [resizeState])\n\n  useEffect(() => {\n    const handlePointerMove = (event: MouseEvent) => {\n      const currentResize = resizeStateRef.current\n\n      if (!currentResize) {\n        return\n      }\n\n      const column = columns.find((item) => item.key === currentResize.column)\n\n      if (!column) {\n        return\n      }\n\n      const nextWidth = Math.max(column.minWidth, currentResize.startWidth + (event.clientX - currentResize.startX))\n\n      setColumnWidths((current) => ({\n        ...current,\n        [currentResize.column]: nextWidth\n      }))\n    }\n\n    const handlePointerUp = () => {\n      setResizeState(null)\n    }\n\n    window.addEventListener('mousemove', handlePointerMove)\n    window.addEventListener('mouseup', handlePointerUp)\n\n    return () => {\n      window.removeEventListener('mousemove', handlePointerMove)\n      window.removeEventListener('mouseup', handlePointerUp)\n    }\n  }, [])\n\n  const startResize = (column: ColumnKey, event: ReactMouseEvent<HTMLButtonElement>) => {\n    event.preventDefault()\n    setResizeState({\n      column,\n      startX: event.clientX,\n      startWidth: columnWidths[column]\n    })\n  }\n\n  return (\n    <div className='max-w-5xl max-md:max-w-full'>\n      <div className='overflow-hidden rounded-lg border border-border/60 bg-background'>\n        <Table className='table-fixed' style={{ width: tableWidth }}>\n          <TableHeader>\n            <TableRow>\n              {columns.map((column) => {\n                const isResizing = resizeState?.column === column.key\n\n                return (\n                  <TableHead\n                    key={column.key}\n                    className='group/head relative h-11 bg-muted/20 font-medium'\n                    style={{ width: columnWidths[column.key] }}\n                  >\n                    <div className='truncate pr-4'>{column.label}</div>\n                    <button\n                      type='button'\n                      onDoubleClick={() =>\n                        setColumnWidths((current) => ({\n                          ...current,\n                          [column.key]: defaultWidths[column.key]\n                        }))\n                      }\n                      onMouseDown={(event) => startResize(column.key, event)}\n                      aria-label={`Resize ${column.label} column`}\n                      className='absolute top-0 right-0 h-full w-4 cursor-col-resize touch-none select-none'\n                    >\n                      <span\n                        className={`absolute inset-y-0 right-1 w-px bg-border transition-opacity ${\n                          isResizing ? 'opacity-100' : 'opacity-0 group-hover/head:opacity-100'\n                        }`}\n                      />\n                    </button>\n                  </TableHead>\n                )\n              })}\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((row) => (\n              <TableRow key={row.id} className='hover:bg-muted/10'>\n                <TableCell className='truncate py-3'>\n                  <div className='font-medium'>{row.name}</div>\n                </TableCell>\n                <TableCell className='truncate py-3'>\n                  <div className='capitalize text-sm text-muted-foreground'>{row.status}</div>\n                </TableCell>\n                <TableCell className='truncate py-3'>\n                  <div className='text-sm text-muted-foreground'>{row.email}</div>\n                </TableCell>\n                <TableCell className='truncate py-3'>\n                  <div className='font-medium'>{formatCurrency(row.amount)}</div>\n                </TableCell>\n                <TableCell className='truncate py-3'>\n                  <div className='text-muted-foreground'>{row.dueDate}</div>\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable6\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-7",
      "type": "registry:component",
      "title": "DataTable 7",
      "description": "DataTable 7. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "dropdown-menu",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-7.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { CSSProperties } from 'react'\nimport { useMemo, useState } from 'react'\n\nimport { ArrowLeftFromLineIcon, ArrowRightFromLineIcon, EllipsisIcon, PinOffIcon } from 'lucide-react'\n\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger\n} from '@/components/base-ui/dropdown-menu'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype Discontinued = 'no' | 'yes'\n\ntype ProductRow = {\n  category: string\n  discontinued: Discontinued\n  price: number\n  productId: number\n  productName: string\n  stockQuantity: number\n  supplier: string\n}\n\ntype ColumnKey = 'category' | 'discontinued' | 'price' | 'productName' | 'stockQuantity' | 'supplier'\n\ntype PinSide = false | 'left' | 'right'\n\ntype ColumnConfig = {\n  key: ColumnKey\n  label: string\n  width: number\n}\n\ntype PinnedState = Record<ColumnKey, PinSide>\n\nconst data: readonly ProductRow[] = [\n  {\n    productId: 1,\n    productName: 'Apple iPhone 14',\n    category: 'Smartphones',\n    stockQuantity: 4550,\n    price: 1500,\n    supplier: 'Dixon Electronics',\n    discontinued: 'no'\n  },\n  {\n    productId: 2,\n    productName: 'Metal Frame Table',\n    category: 'Furniture',\n    stockQuantity: 150,\n    price: 540,\n    supplier: 'Milton Furniture',\n    discontinued: 'no'\n  },\n  {\n    productId: 3,\n    productName: 'Xiaomi A Series',\n    category: 'Electronics',\n    stockQuantity: 1500,\n    price: 2200,\n    supplier: 'Xiaomi Electronics',\n    discontinued: 'yes'\n  },\n  {\n    productId: 4,\n    productName: 'RC Monster Truck',\n    category: 'Toys',\n    stockQuantity: 10500,\n    price: 250,\n    supplier: 'Lego Toys',\n    discontinued: 'no'\n  },\n  {\n    productId: 5,\n    productName: 'Glass Water Bottle',\n    category: 'Kitchenware',\n    stockQuantity: 5503,\n    price: 69,\n    supplier: 'Kitchen Essentials',\n    discontinued: 'no'\n  },\n  {\n    productId: 6,\n    productName: 'BenQ Monitor 24',\n    category: 'Electronics',\n    stockQuantity: 600,\n    price: 1000,\n    supplier: 'BenQ Electronics',\n    discontinued: 'yes'\n  }\n] as const\n\nconst columns: readonly ColumnConfig[] = [\n  { key: 'productName', label: 'Product Name', width: 220 },\n  { key: 'category', label: 'Category', width: 150 },\n  { key: 'stockQuantity', label: 'Stock Quantity', width: 150 },\n  { key: 'price', label: 'Price', width: 120 },\n  { key: 'supplier', label: 'Supplier', width: 190 },\n  { key: 'discontinued', label: 'Discontinued', width: 130 }\n] as const\n\nconst defaultPinnedState: PinnedState = {\n  productName: false,\n  category: false,\n  stockQuantity: false,\n  price: false,\n  supplier: false,\n  discontinued: false\n}\n\nconst formatCurrency = (price: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(price)\n\nconst DataTable7 = () => {\n  const [pinned, setPinned] = useState<PinnedState>(defaultPinnedState)\n\n  const leftPinnedColumns = useMemo(\n    () => columns.filter((column) => pinned[column.key] === 'left'),\n    [pinned]\n  )\n\n  const rightPinnedColumns = useMemo(\n    () => columns.filter((column) => pinned[column.key] === 'right'),\n    [pinned]\n  )\n\n  const leftOffsets = useMemo(() => {\n    return leftPinnedColumns\n      .reduce(\n        (acc, column) => {\n          acc.offsets[column.key] = acc.offset\n          return {\n            offsets: acc.offsets,\n            offset: acc.offset + column.width\n          }\n        },\n        { offsets: {} as Record<ColumnKey, number>, offset: 0 }\n      )\n      .offsets\n  }, [leftPinnedColumns])\n\n  const rightOffsets = useMemo(() => {\n    return [...rightPinnedColumns]\n      .reverse()\n      .reduce(\n        (acc, column) => {\n          acc.offsets[column.key] = acc.offset\n          return {\n            offsets: acc.offsets,\n            offset: acc.offset + column.width\n          }\n        },\n        { offsets: {} as Record<ColumnKey, number>, offset: 0 }\n      )\n      .offsets\n  }, [rightPinnedColumns])\n\n  const setPin = (key: ColumnKey, side: PinSide) => {\n    setPinned((current) => ({\n      ...current,\n      [key]: side\n    }))\n  }\n\n  const getPinnedStyles = (column: ColumnConfig): CSSProperties => {\n    const pinSide = pinned[column.key]\n\n    if (pinSide === 'left') {\n      return {\n        position: 'sticky',\n        left: leftOffsets[column.key],\n        width: column.width,\n        minWidth: column.width,\n        maxWidth: column.width,\n        zIndex: 2\n      }\n    }\n\n    if (pinSide === 'right') {\n      return {\n        position: 'sticky',\n        right: rightOffsets[column.key],\n        width: column.width,\n        minWidth: column.width,\n        maxWidth: column.width,\n        zIndex: 2\n      }\n    }\n\n    return {\n      width: column.width,\n      minWidth: column.width,\n      maxWidth: column.width\n    }\n  }\n\n  const renderCell = (row: ProductRow, key: ColumnKey) => {\n    switch (key) {\n      case 'productName':\n        return <div className='font-medium'>{row.productName}</div>\n      case 'category':\n        return row.category\n      case 'stockQuantity':\n        return row.stockQuantity.toLocaleString('en-US')\n      case 'price':\n        return formatCurrency(row.price)\n      case 'supplier':\n        return row.supplier\n      case 'discontinued':\n        return <span className='capitalize'>{row.discontinued}</span>\n    }\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-240 mx-auto'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <Table className='border-separate border-spacing-0 table-fixed w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-240 mx-auto'>\n          <TableHeader>\n            <TableRow className='[&>th]:border-b [&>th]:border-border/60'>\n              {columns.map((column) => {\n                const pinSide = pinned[column.key]\n\n                return (\n                  <TableHead\n                    key={column.key}\n                    className='relative h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'\n                    style={getPinnedStyles(column)}\n                    data-pinned={pinSide || undefined}\n                  >\n                    <div className='flex items-center justify-between gap-2'>\n                      <span className='truncate'>{column.label}</span>\n\n                      {pinSide ? (\n                        <button\n                          type='button'\n                          className='inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-background hover:text-foreground'\n                          onClick={() => setPin(column.key, false)}\n                          aria-label={`Unpin ${column.label} column`}\n                          title={`Unpin ${column.label} column`}\n                        >\n                          <PinOffIcon className='size-4 opacity-70' aria-hidden='true' />\n                        </button>\n                      ) : (\n                        <DropdownMenu>\n                          <DropdownMenuTrigger className='inline-flex size-7 items-center justify-center rounded-md text-muted-foreground outline-none transition-colors hover:bg-background hover:text-foreground'>\n                            <EllipsisIcon className='size-4 opacity-70' aria-hidden='true' />\n                          </DropdownMenuTrigger>\n                          <DropdownMenuContent align='end'>\n                            <DropdownMenuItem onClick={() => setPin(column.key, 'left')}>\n                              <ArrowLeftFromLineIcon className='size-4 opacity-70' aria-hidden='true' />\n                              Stick to left\n                            </DropdownMenuItem>\n                            <DropdownMenuItem onClick={() => setPin(column.key, 'right')}>\n                              <ArrowRightFromLineIcon className='size-4 opacity-70' aria-hidden='true' />\n                              Stick to right\n                            </DropdownMenuItem>\n                          </DropdownMenuContent>\n                        </DropdownMenu>\n                      )}\n                    </div>\n                  </TableHead>\n                )\n              })}\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((row) => (\n              <TableRow key={row.productId} className='[&>td]:border-b [&>td]:border-border/60 hover:bg-muted/10'>\n                {columns.map((column) => {\n                  const pinSide = pinned[column.key]\n\n                  return (\n                    <TableCell\n                      key={column.key}\n                      className='truncate bg-background py-3.5'\n                      style={getPinnedStyles(column)}\n                      data-pinned={pinSide || undefined}\n                    >\n                      {renderCell(row, column.key)}\n                    </TableCell>\n                  )\n                })}\n              </TableRow>\n            ))}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable7\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-8",
      "type": "registry:component",
      "title": "DataTable 8",
      "description": "DataTable 8. A component for displaying and managing tabular data.",
      "dependencies": [
        "@dnd-kit/core",
        "@dnd-kit/modifiers",
        "@dnd-kit/sortable",
        "@dnd-kit/utilities",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-8.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { ChevronDownIcon, ChevronUpIcon, GripVerticalIcon } from 'lucide-react'\n\nimport {\n  closestCenter,\n  DndContext,\n  KeyboardSensor,\n  MouseSensor,\n  TouchSensor,\n  useSensor,\n  useSensors,\n  type DragEndEvent\n} from '@dnd-kit/core'\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers'\nimport { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype Employee = {\n  department: string\n  dob: string\n  employeeId: number\n  firstName: string\n  hireDate: string\n  jobTitle: string\n  lastName: string\n  salary: number\n}\n\ntype ColumnKey = 'department' | 'dob' | 'firstName' | 'hireDate' | 'jobTitle' | 'lastName' | 'salary'\n\ntype SortDirection = 'asc' | 'desc'\n\ntype SortConfig = {\n  column: ColumnKey\n  direction: SortDirection\n}\n\ntype ColumnConfig = {\n  key: ColumnKey\n  label: string\n}\n\nconst data: readonly Employee[] = [\n  {\n    employeeId: 1,\n    firstName: 'John',\n    lastName: 'Doe',\n    jobTitle: 'Software Engineer',\n    department: 'Engineering',\n    dob: '1990-01-01',\n    hireDate: '2020-01-15',\n    salary: 80000\n  },\n  {\n    employeeId: 2,\n    firstName: 'Jane',\n    lastName: 'Smith',\n    jobTitle: 'Product Manager',\n    department: 'Product',\n    dob: '1985-05-20',\n    hireDate: '2019-03-10',\n    salary: 95000\n  },\n  {\n    employeeId: 3,\n    firstName: 'Alice',\n    lastName: 'Johnson',\n    jobTitle: 'UX Designer',\n    department: 'Design',\n    dob: '1992-07-30',\n    hireDate: '2021-06-01',\n    salary: 70000\n  },\n  {\n    employeeId: 4,\n    firstName: 'Bob',\n    lastName: 'Brown',\n    jobTitle: 'Data Analyst',\n    department: 'Analytics',\n    dob: '1988-11-15',\n    hireDate: '2018-09-20',\n    salary: 75000\n  }\n] as const\n\nconst defaultColumns: readonly ColumnConfig[] = [\n  { key: 'firstName', label: 'First Name' },\n  { key: 'lastName', label: 'Last Name' },\n  { key: 'jobTitle', label: 'Job Title' },\n  { key: 'department', label: 'Department' },\n  { key: 'dob', label: 'Date of Birth' },\n  { key: 'hireDate', label: 'Hire Date' },\n  { key: 'salary', label: 'Salary' }\n] as const\n\nconst formatCurrency = (salary: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(salary)\n\nconst renderValue = (employee: Employee, key: ColumnKey) => {\n  switch (key) {\n    case 'firstName':\n      return <div className='font-medium'>{employee.firstName}</div>\n    case 'lastName':\n      return employee.lastName\n    case 'jobTitle':\n      return employee.jobTitle\n    case 'department':\n      return employee.department\n    case 'dob':\n      return employee.dob\n    case 'hireDate':\n      return employee.hireDate\n    case 'salary':\n      return formatCurrency(employee.salary)\n  }\n}\n\nconst DraggableHeader = ({\n  column,\n  direction,\n  onToggleSort\n}: {\n  column: ColumnConfig\n  direction?: SortDirection\n  onToggleSort: (column: ColumnKey) => void\n}) => {\n  const { attributes, isDragging, listeners, setNodeRef, transform, transition } = useSortable({\n    id: column.key\n  })\n\n  return (\n    <TableHead\n      ref={setNodeRef}\n      className='relative h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'\n      style={{\n        opacity: isDragging ? 0.85 : 1,\n        transform: CSS.Transform.toString(transform),\n        transition\n      }}\n      aria-sort={direction === 'asc' ? 'ascending' : direction === 'desc' ? 'descending' : 'none'}\n    >\n      <div className='flex items-center justify-between gap-2'>\n        <div className='flex items-center gap-1'>\n          <Button\n            size='icon'\n            variant='ghost'\n            className='-ml-2 size-7 text-muted-foreground hover:bg-background hover:text-foreground'\n            {...attributes}\n            {...listeners}\n            aria-label='Drag to reorder'\n          >\n            <GripVerticalIcon className='size-4 opacity-60' aria-hidden='true' />\n          </Button>\n          <span className='truncate'>{column.label}</span>\n        </div>\n\n        <Button\n          size='icon'\n          variant='ghost'\n          className='group -mr-1 size-7 text-muted-foreground hover:bg-background hover:text-foreground'\n          onClick={() => onToggleSort(column.key)}\n          aria-label={`Sort by ${column.label}`}\n        >\n          {direction === 'asc' ? (\n            <ChevronUpIcon className='size-4 opacity-60' aria-hidden='true' />\n          ) : direction === 'desc' ? (\n            <ChevronDownIcon className='size-4 opacity-60' aria-hidden='true' />\n          ) : (\n            <ChevronUpIcon className='size-4 opacity-0 group-hover:opacity-60' aria-hidden='true' />\n          )}\n        </Button>\n      </div>\n    </TableHead>\n  )\n}\n\nconst DataTable8 = () => {\n  const [columnOrder, setColumnOrder] = useState<ColumnKey[]>(defaultColumns.map((column) => column.key))\n  const [sortConfig, setSortConfig] = useState<SortConfig>({\n    column: 'firstName',\n    direction: 'asc'\n  })\n\n  const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor), useSensor(KeyboardSensor))\n\n  const orderedColumns = useMemo(\n    () =>\n      columnOrder\n        .map((key) => defaultColumns.find((column) => column.key === key))\n        .filter((column): column is ColumnConfig => Boolean(column)),\n    [columnOrder]\n  )\n\n  const sortedData = useMemo(() => {\n    const sorted = [...data]\n\n    sorted.sort((left, right) => {\n      const leftValue = left[sortConfig.column]\n      const rightValue = right[sortConfig.column]\n\n      const comparison =\n        typeof leftValue === 'number' && typeof rightValue === 'number'\n          ? leftValue - rightValue\n          : String(leftValue).localeCompare(String(rightValue))\n\n      return sortConfig.direction === 'asc' ? comparison : -comparison\n    })\n\n    return sorted\n  }, [sortConfig])\n\n  const handleDragEnd = (event: DragEndEvent) => {\n    const { active, over } = event\n\n    if (!over || active.id === over.id) {\n      return\n    }\n\n    setColumnOrder((current) => {\n      const oldIndex = current.indexOf(active.id as ColumnKey)\n      const newIndex = current.indexOf(over.id as ColumnKey)\n\n      return arrayMove(current, oldIndex, newIndex)\n    })\n  }\n\n  const toggleSort = (column: ColumnKey) => {\n    setSortConfig((current) => {\n      if (current.column === column) {\n        return {\n          column,\n          direction: current.direction === 'asc' ? 'desc' : 'asc'\n        }\n      }\n\n      return {\n        column,\n        direction: 'asc'\n      }\n    })\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <DndContext\n          collisionDetection={closestCenter}\n          modifiers={[restrictToHorizontalAxis]}\n          onDragEnd={handleDragEnd}\n          sensors={sensors}\n        >\n          <Table>\n            <TableHeader>\n              <TableRow className='bg-muted/20 [&>th]:border-t-0'>\n                <SortableContext items={columnOrder} strategy={horizontalListSortingStrategy}>\n                  {orderedColumns.map((column) => (\n                    <DraggableHeader\n                      key={column.key}\n                      column={column}\n                      direction={sortConfig.column === column.key ? sortConfig.direction : undefined}\n                      onToggleSort={toggleSort}\n                    />\n                  ))}\n                </SortableContext>\n              </TableRow>\n            </TableHeader>\n            <TableBody>\n              {sortedData.map((employee) => (\n                <TableRow key={employee.employeeId} className='hover:bg-muted/10'>\n                  {orderedColumns.map((column) => (\n                    <TableCell key={column.key} className='truncate py-3.5'>\n                      {renderValue(employee, column.key)}\n                    </TableCell>\n                  ))}\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </DndContext>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable8\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-9",
      "type": "registry:component",
      "title": "DataTable 9",
      "description": "DataTable 9. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-9.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { Fragment, useMemo, useState } from 'react'\n\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype TeamMember = {\n  dob: string\n  email: string\n  hireDate: string\n  name: string\n  role: string\n}\n\ntype TeamRow = {\n  budget: number\n  department: string\n  location: string\n  members: readonly TeamMember[]\n  nextMilestone: string\n  teamId: string\n  teamName: string\n}\n\nconst data: readonly TeamRow[] = [\n  {\n    teamId: 'TEAM-01',\n    teamName: 'Digital Marketing',\n    department: 'Marketing',\n    location: 'London',\n    nextMilestone: 'Launch New Campaign',\n    budget: 30000,\n    members: [\n      {\n        name: 'Alice Johnson',\n        role: 'Lead Strategist',\n        email: 'alice.johnson@example.com',\n        hireDate: '2020-01-15',\n        dob: '1990-01-01'\n      },\n      {\n        name: 'Bob Smith',\n        role: 'Content Creator',\n        email: 'bob.smith@example.com',\n        hireDate: '2021-03-22',\n        dob: '1992-05-15'\n      },\n      {\n        name: 'Charlie Brown',\n        role: 'SEO Specialist',\n        email: 'charlie.brown@example.com',\n        hireDate: '2022-07-30',\n        dob: '1995-11-20'\n      }\n    ]\n  },\n  {\n    teamId: 'TEAM-02',\n    teamName: 'Product Development',\n    department: 'Engineering',\n    location: 'San Francisco',\n    nextMilestone: 'Release Version 2.0',\n    budget: 50000,\n    members: [\n      {\n        name: 'David Wilson',\n        role: 'Product Manager',\n        email: 'david.wilson@example.com',\n        hireDate: '2019-05-10',\n        dob: '1988-02-25'\n      },\n      {\n        name: 'Emma Johnson',\n        role: 'UX Designer',\n        email: 'emma.johnson@example.com',\n        hireDate: '2020-08-15',\n        dob: '1990-11-30'\n      },\n      {\n        name: 'Frank Miller',\n        role: 'QA Engineer',\n        email: 'frank.miller@example.com',\n        hireDate: '2021-01-20',\n        dob: '1993-06-10'\n      }\n    ]\n  },\n  {\n    teamId: 'TEAM-03',\n    teamName: 'Sales Team',\n    department: 'Sales',\n    location: 'New York',\n    nextMilestone: 'Close Q3 Deals',\n    budget: 40000,\n    members: [\n      {\n        name: 'Grace Lee',\n        role: 'Sales Executive',\n        email: 'grace.lee@example.com',\n        hireDate: '2021-05-12',\n        dob: '1995-03-22'\n      },\n      {\n        name: 'Henry Davis',\n        role: 'Account Manager',\n        email: 'henry.davis@example.com',\n        hireDate: '2020-11-01',\n        dob: '1992-07-15'\n      },\n      {\n        name: 'Ivy Garcia',\n        role: 'Sales Analyst',\n        email: 'ivy.garcia@example.com',\n        hireDate: '2021-09-15',\n        dob: '1994-02-10'\n      }\n    ]\n  }\n] as const\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst DataTable9 = () => {\n  const [expandedIds, setExpandedIds] = useState<string[]>([])\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n\n  const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds])\n  const allSelected = selectedIds.length === data.length\n  const someSelected = selectedIds.length > 0 && !allSelected\n\n  const toggleAll = (checked: boolean) => {\n    setSelectedIds(checked ? data.map((team) => team.teamId) : [])\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const toggleExpanded = (id: string) => {\n    setExpandedIds((current) => (current.includes(id) ? current.filter((item) => item !== id) : [...current, id]))\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <Table>\n          <TableHeader>\n            <TableRow className='hover:bg-transparent'>\n              <TableHead className='w-10 bg-muted/20 font-medium' />\n              <TableHead className='w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all teams'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Team Name\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Department\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Location\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Next Milestone\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Budget\n              </TableHead>\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.map((team) => {\n              const isExpanded = expandedIds.includes(team.teamId)\n              const isSelected = selectedIdSet.has(team.teamId)\n\n              return (\n                <Fragment key={team.teamId}>\n                  <TableRow\n                    data-state={isSelected ? 'selected' : undefined}\n                    className='hover:bg-muted/10 data-[state=selected]:bg-muted/20'\n                  >\n                    <TableCell className='w-10 py-0'>\n                      <Button\n                        className='size-7 text-muted-foreground hover:bg-background hover:text-foreground'\n                        onClick={() => toggleExpanded(team.teamId)}\n                        aria-expanded={isExpanded}\n                        aria-label={\n                          isExpanded ? `Collapse details for ${team.teamName}` : `Expand details for ${team.teamName}`\n                        }\n                        size='icon'\n                        variant='ghost'\n                      >\n                        {isExpanded ? (\n                          <ChevronUpIcon className='size-4 opacity-60' aria-hidden='true' />\n                        ) : (\n                          <ChevronDownIcon className='size-4 opacity-60' aria-hidden='true' />\n                        )}\n                      </Button>\n                    </TableCell>\n                    <TableCell className='w-10 py-3.5'>\n                      <Checkbox\n                        checked={isSelected}\n                        onCheckedChange={(value) => toggleRow(team.teamId, !!value)}\n                        aria-label={`Select ${team.teamName}`}\n                        className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='font-medium'>{team.teamName}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5 text-muted-foreground'>{team.department}</TableCell>\n                    <TableCell className='py-3.5 text-muted-foreground'>{team.location}</TableCell>\n                    <TableCell className='py-3.5'>{team.nextMilestone}</TableCell>\n                    <TableCell className='py-3.5 font-medium'>{formatCurrency(team.budget)}</TableCell>\n                  </TableRow>\n\n                  {isExpanded ? (\n                    <TableRow className='hover:bg-transparent'>\n                      <TableCell colSpan={7} className='p-0'>\n                        <Table className='bg-muted/5'>\n                          <TableHeader className='border-b border-border/60'>\n                            <TableRow className='bg-muted/10 hover:bg-muted/10'>\n                              <TableHead className='w-20' />\n                              <TableHead className='text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                                Member Name\n                              </TableHead>\n                              <TableHead className='text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                                Role\n                              </TableHead>\n                              <TableHead className='text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                                Email\n                              </TableHead>\n                              <TableHead className='text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                                Hire Date\n                              </TableHead>\n                              <TableHead className='text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                                Date of Birth\n                              </TableHead>\n                            </TableRow>\n                          </TableHeader>\n                          <TableBody>\n                            {team.members.map((member) => (\n                              <TableRow key={member.email} className='hover:bg-muted/10'>\n                                <TableCell />\n                                <TableCell className='py-3.5 font-medium'>{member.name}</TableCell>\n                                <TableCell className='py-3.5 text-muted-foreground'>{member.role}</TableCell>\n                                <TableCell className='py-3.5 text-muted-foreground'>{member.email}</TableCell>\n                                <TableCell className='py-3.5'>{member.hireDate}</TableCell>\n                                <TableCell className='py-3.5'>{member.dob}</TableCell>\n                              </TableRow>\n                            ))}\n                          </TableBody>\n                        </Table>\n                      </TableCell>\n                    </TableRow>\n                  ) : null}\n                </Fragment>\n              )\n            })}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable9\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-10",
      "type": "registry:component",
      "title": "DataTable 10",
      "description": "DataTable 10. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "checkbox",
        "label",
        "pagination",
        "select",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-10.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useId, useMemo, useState } from 'react'\n\nimport {\n  ChevronDownIcon,\n  ChevronFirstIcon,\n  ChevronLastIcon,\n  ChevronLeftIcon,\n  ChevronRightIcon,\n  ChevronUpIcon\n} from 'lucide-react'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport { Button } from '@/components/base-ui/button'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Label } from '@/components/base-ui/label'\nimport { Pagination, PaginationContent, PaginationItem } from '@/components/base-ui/pagination'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/base-ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\nimport { cn } from '@/lib/utils'\n\ntype Availability = 'In Stock' | 'Limited' | 'Out of Stock'\n\ntype ProductItem = {\n  availability: Availability\n  id: string\n  price: number\n  productName: string\n}\n\ntype SortDirection = 'asc' | 'desc'\n\ntype SortableColumn = 'availability' | 'price' | 'productName'\n\ntype SortConfig = {\n  column: SortableColumn\n  direction: SortDirection\n}\n\nconst data: readonly ProductItem[] = [\n  { id: 'PRD-101', productName: 'Atlas Phone X', price: 699, availability: 'In Stock' },\n  { id: 'PRD-102', productName: 'North Headphones', price: 242, availability: 'In Stock' },\n  { id: 'PRD-103', productName: 'Pulse Tablet Air', price: 655, availability: 'Limited' },\n  { id: 'PRD-104', productName: 'Studio Display 24', price: 874, availability: 'In Stock' },\n  { id: 'PRD-105', productName: 'Mono Charging Dock', price: 541, availability: 'Out of Stock' },\n  { id: 'PRD-106', productName: 'Trail Smartwatch', price: 319, availability: 'Limited' },\n  { id: 'PRD-107', productName: 'Luma Keyboard', price: 189, availability: 'In Stock' },\n  { id: 'PRD-108', productName: 'Vector Camera Mini', price: 999, availability: 'Out of Stock' },\n  { id: 'PRD-109', productName: 'Glass Speaker One', price: 420, availability: 'Limited' },\n  { id: 'PRD-110', productName: 'Orbit Mouse', price: 129, availability: 'In Stock' }\n] as const\n\nconst availabilityBadgeClass: Record<Availability, string> = {\n  'In Stock': 'border-none bg-green-600/10 text-green-600 dark:bg-green-400/10 dark:text-green-400',\n  'Out of Stock': 'border-none bg-destructive/10 text-destructive dark:bg-destructive/20',\n  Limited: 'border-none bg-amber-600/10 text-amber-600 dark:bg-amber-400/10 dark:text-amber-400'\n}\n\nconst formatCurrency = (price: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(price)\n\nconst DataTable10 = () => {\n  const id = useId()\n\n  const [pageIndex, setPageIndex] = useState(0)\n  const [pageSize, setPageSize] = useState(5)\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n  const [sortConfig, setSortConfig] = useState<SortConfig>({\n    column: 'productName',\n    direction: 'asc'\n  })\n\n  const sortedData = useMemo(() => {\n    const sorted = [...data]\n\n    sorted.sort((left, right) => {\n      const leftValue = left[sortConfig.column]\n      const rightValue = right[sortConfig.column]\n\n      const comparison =\n        typeof leftValue === 'number' && typeof rightValue === 'number'\n          ? leftValue - rightValue\n          : String(leftValue).localeCompare(String(rightValue))\n\n      return sortConfig.direction === 'asc' ? comparison : -comparison\n    })\n\n    return sorted\n  }, [sortConfig])\n\n  const pageCount = Math.max(1, Math.ceil(sortedData.length / pageSize))\n  const safePageIndex = Math.min(pageIndex, pageCount - 1)\n  const pageStart = safePageIndex * pageSize\n  const pageEnd = pageStart + pageSize\n  const paginatedData = sortedData.slice(pageStart, pageEnd)\n\n  const allSelectedOnPage =\n    paginatedData.length > 0 && paginatedData.every((item) => selectedIds.includes(item.id))\n  const someSelectedOnPage =\n    paginatedData.some((item) => selectedIds.includes(item.id)) && !allSelectedOnPage\n\n  const toggleAllOnPage = (checked: boolean) => {\n    if (checked) {\n      setSelectedIds((current) => Array.from(new Set([...current, ...paginatedData.map((item) => item.id)])))\n      return\n    }\n\n    setSelectedIds((current) => current.filter((id) => !paginatedData.some((item) => item.id === id)))\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const toggleSort = (column: SortableColumn) => {\n    setSortConfig((current) => {\n      if (current.column === column) {\n        return {\n          column,\n          direction: current.direction === 'asc' ? 'desc' : 'asc'\n        }\n      }\n\n      return {\n        column,\n        direction: 'asc'\n      }\n    })\n  }\n\n  const changePageSize = (value: string | null) => {\n    if (!value) {\n      return\n    }\n\n    setPageSize(Number(value))\n    setPageIndex(0)\n  }\n\n  const currentRangeStart = sortedData.length === 0 ? 0 : pageStart + 1\n  const currentRangeEnd = Math.min(pageEnd, sortedData.length)\n\n  return (\n    <div className='space-y-4 w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n          <TableHeader>\n            <TableRow className='hover:bg-transparent'>\n              <TableHead className='h-12 w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelectedOnPage}\n                  aria-checked={someSelectedOnPage ? 'mixed' : allSelectedOnPage}\n                  onCheckedChange={(value) => toggleAllOnPage(!!value)}\n                  aria-label='Select all products on this page'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n\n              {([\n                ['productName', 'Product Name'],\n                ['price', 'Price'],\n                ['availability', 'Availability']\n              ] as const).map(([column, label]) => {\n                const direction = sortConfig.column === column ? sortConfig.direction : undefined\n\n                return (\n                  <TableHead\n                    key={column}\n                    className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'\n                  >\n                    <button\n                      type='button'\n                      className={cn(\n                        'flex w-full items-center justify-between gap-2 text-left transition-opacity hover:opacity-80',\n                        column !== 'availability' && 'font-medium'\n                      )}\n                      onClick={() => toggleSort(column)}\n                    >\n                      <span>{label}</span>\n                      {direction === 'asc' ? (\n                        <ChevronUpIcon className='size-4 opacity-60' aria-hidden='true' />\n                      ) : direction === 'desc' ? (\n                        <ChevronDownIcon className='size-4 opacity-60' aria-hidden='true' />\n                      ) : null}\n                    </button>\n                  </TableHead>\n                )\n              })}\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {paginatedData.length > 0 ? (\n              paginatedData.map((item) => {\n                const isSelected = selectedIds.includes(item.id)\n\n                return (\n                  <TableRow\n                    key={item.id}\n                    data-state={isSelected ? 'selected' : undefined}\n                    className='hover:bg-muted/10 data-[state=selected]:bg-muted/20'\n                  >\n                    <TableCell className='py-3.5'>\n                      <Checkbox\n                        checked={isSelected}\n                        onCheckedChange={(value) => toggleRow(item.id, !!value)}\n                        aria-label={`Select ${item.productName}`}\n                        className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='font-medium'>{item.productName}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='font-medium'>{formatCurrency(item.price)}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Badge className={availabilityBadgeClass[item.availability]}>{item.availability}</Badge>\n                    </TableCell>\n                  </TableRow>\n                )\n              })\n            ) : (\n              <TableRow>\n                <TableCell colSpan={4} className='h-24 text-center'>\n                  No results.\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </div>\n\n      <div className='flex flex-col gap-4 rounded-xl border border-border/60 bg-background px-4 py-3 shadow-sm lg:flex-row lg:items-center lg:justify-between'>\n        <div className='flex items-center justify-center gap-3 lg:justify-start'>\n          <Label htmlFor={id} className='max-sm:sr-only'>\n            Rows per page\n          </Label>\n          <Select value={pageSize.toString()} onValueChange={changePageSize}>\n            <SelectTrigger id={id} className='h-9 w-fit whitespace-nowrap border-border/60 max-sm:w-full'>\n              <SelectValue placeholder='Select number of results' />\n            </SelectTrigger>\n            <SelectContent className='[&_*[role=option]]:pr-8 [&_*[role=option]]:pl-2 [&_*[role=option]>span]:right-2 [&_*[role=option]>span]:left-auto'>\n              {[5, 10, 25, 50].map((size) => (\n                <SelectItem key={size} value={size.toString()}>\n                  {size}\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        </div>\n\n        <div className='text-muted-foreground flex justify-center text-sm whitespace-nowrap lg:flex-1 lg:justify-end'>\n          <p className='text-sm whitespace-nowrap' aria-live='polite'>\n            <span className='text-foreground'>\n              {currentRangeStart}-{currentRangeEnd}\n            </span>{' '}\n            of <span className='text-foreground'>{sortedData.length}</span>\n          </p>\n        </div>\n\n        <div className='flex justify-center lg:justify-end'>\n          <Pagination>\n            <PaginationContent className='flex flex-wrap justify-center gap-1 sm:gap-2'>\n              <PaginationItem>\n                <Button\n                  size='icon'\n                  variant='outline'\n                  className='disabled:pointer-events-none disabled:opacity-50'\n                  onClick={() => setPageIndex(0)}\n                  disabled={safePageIndex === 0}\n                  aria-label='Go to first page'\n                >\n                  <ChevronFirstIcon aria-hidden='true' />\n                </Button>\n              </PaginationItem>\n\n              <PaginationItem>\n                <Button\n                  size='icon'\n                  variant='outline'\n                  className='disabled:pointer-events-none disabled:opacity-50'\n                  onClick={() => setPageIndex((current) => Math.max(current - 1, 0))}\n                  disabled={safePageIndex === 0}\n                  aria-label='Go to previous page'\n                >\n                  <ChevronLeftIcon aria-hidden='true' />\n                </Button>\n              </PaginationItem>\n\n              <PaginationItem>\n                <Button\n                  size='icon'\n                  variant='outline'\n                  className='disabled:pointer-events-none disabled:opacity-50'\n                  onClick={() => setPageIndex((current) => Math.min(current + 1, pageCount - 1))}\n                  disabled={safePageIndex >= pageCount - 1}\n                  aria-label='Go to next page'\n                >\n                  <ChevronRightIcon aria-hidden='true' />\n                </Button>\n              </PaginationItem>\n\n              <PaginationItem>\n                <Button\n                  size='icon'\n                  variant='outline'\n                  className='disabled:pointer-events-none disabled:opacity-50'\n                  onClick={() => setPageIndex(pageCount - 1)}\n                  disabled={safePageIndex >= pageCount - 1}\n                  aria-label='Go to last page'\n                >\n                  <ChevronLastIcon aria-hidden='true' />\n                </Button>\n              </PaginationItem>\n            </PaginationContent>\n          </Pagination>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable10\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-11",
      "type": "registry:component",
      "title": "DataTable 11",
      "description": "DataTable 11. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "checkbox",
        "pagination",
        "select",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-11.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport { Button } from '@/components/base-ui/button'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Pagination, PaginationContent, PaginationEllipsis, PaginationItem } from '@/components/base-ui/pagination'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/base-ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\nimport { usePagination } from '@/hooks/use-pagination'\nimport { cn } from '@/lib/utils'\n\ntype Availability = 'In Stock' | 'Limited' | 'Out of Stock'\n\ntype ProductItem = {\n  availability: Availability\n  id: string\n  price: number\n  productName: string\n}\n\ntype SortDirection = 'asc' | 'desc'\n\ntype SortableColumn = 'availability' | 'price' | 'productName'\n\ntype SortConfig = {\n  column: SortableColumn\n  direction: SortDirection\n}\n\nconst data: readonly ProductItem[] = [\n  { id: 'PRD-201', productName: 'Atlas Phone X', price: 699, availability: 'In Stock' },\n  { id: 'PRD-202', productName: 'North Headphones', price: 242, availability: 'In Stock' },\n  { id: 'PRD-203', productName: 'Pulse Tablet Air', price: 655, availability: 'Limited' },\n  { id: 'PRD-204', productName: 'Studio Display 24', price: 874, availability: 'In Stock' },\n  { id: 'PRD-205', productName: 'Mono Charging Dock', price: 541, availability: 'Out of Stock' },\n  { id: 'PRD-206', productName: 'Trail Smartwatch', price: 319, availability: 'Limited' },\n  { id: 'PRD-207', productName: 'Luma Keyboard', price: 189, availability: 'In Stock' },\n  { id: 'PRD-208', productName: 'Vector Camera Mini', price: 999, availability: 'Out of Stock' },\n  { id: 'PRD-209', productName: 'Glass Speaker One', price: 420, availability: 'Limited' },\n  { id: 'PRD-210', productName: 'Orbit Mouse', price: 129, availability: 'In Stock' },\n  { id: 'PRD-211', productName: 'Signal Router Max', price: 349, availability: 'Limited' },\n  { id: 'PRD-212', productName: 'Core Laptop Stand', price: 79, availability: 'In Stock' }\n] as const\n\nconst availabilityBadgeClass: Record<Availability, string> = {\n  'In Stock': 'border-none bg-green-600/10 text-green-600 dark:bg-green-400/10 dark:text-green-400',\n  'Out of Stock': 'border-none bg-destructive/10 text-destructive dark:bg-destructive/20',\n  Limited: 'border-none bg-amber-600/10 text-amber-600 dark:bg-amber-400/10 dark:text-amber-400'\n}\n\nconst formatCurrency = (price: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(price)\n\nconst DataTable11 = () => {\n  const [pageIndex, setPageIndex] = useState(0)\n  const [pageSize, setPageSize] = useState(5)\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n  const [sortConfig, setSortConfig] = useState<SortConfig>({\n    column: 'productName',\n    direction: 'asc'\n  })\n\n  const sortedData = useMemo(() => {\n    const sorted = [...data]\n\n    sorted.sort((left, right) => {\n      const leftValue = left[sortConfig.column]\n      const rightValue = right[sortConfig.column]\n\n      const comparison =\n        typeof leftValue === 'number' && typeof rightValue === 'number'\n          ? leftValue - rightValue\n          : String(leftValue).localeCompare(String(rightValue))\n\n      return sortConfig.direction === 'asc' ? comparison : -comparison\n    })\n\n    return sorted\n  }, [sortConfig])\n\n  const pageCount = Math.max(1, Math.ceil(sortedData.length / pageSize))\n  const safePageIndex = Math.min(pageIndex, pageCount - 1)\n  const currentPage = safePageIndex + 1\n  const pageStart = safePageIndex * pageSize\n  const pageEnd = pageStart + pageSize\n  const paginatedData = sortedData.slice(pageStart, pageEnd)\n\n  const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n    currentPage,\n    totalPages: pageCount,\n    paginationItemsToDisplay: 5\n  })\n\n  const allSelectedOnPage =\n    paginatedData.length > 0 && paginatedData.every((item) => selectedIds.includes(item.id))\n  const someSelectedOnPage =\n    paginatedData.some((item) => selectedIds.includes(item.id)) && !allSelectedOnPage\n\n  const toggleAllOnPage = (checked: boolean) => {\n    if (checked) {\n      setSelectedIds((current) => Array.from(new Set([...current, ...paginatedData.map((item) => item.id)])))\n      return\n    }\n\n    setSelectedIds((current) => current.filter((id) => !paginatedData.some((item) => item.id === id)))\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const toggleSort = (column: SortableColumn) => {\n    setSortConfig((current) => {\n      if (current.column === column) {\n        return {\n          column,\n          direction: current.direction === 'asc' ? 'desc' : 'asc'\n        }\n      }\n\n      return {\n        column,\n        direction: 'asc'\n      }\n    })\n  }\n\n  const changePageSize = (value: string | null) => {\n    if (!value) {\n      return\n    }\n\n    setPageSize(Number(value))\n    setPageIndex(0)\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto space-y-4'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n          <TableHeader>\n            <TableRow className='hover:bg-transparent'>\n              <TableHead className='h-12 w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelectedOnPage}\n                  aria-checked={someSelectedOnPage ? 'mixed' : allSelectedOnPage}\n                  onCheckedChange={(value) => toggleAllOnPage(!!value)}\n                  aria-label='Select all products on this page'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n\n              {([\n                ['productName', 'Product Name'],\n                ['price', 'Price'],\n                ['availability', 'Availability']\n              ] as const).map(([column, label]) => {\n                const direction = sortConfig.column === column ? sortConfig.direction : undefined\n\n                return (\n                  <TableHead\n                    key={column}\n                    className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'\n                  >\n                    <button\n                      type='button'\n                      className={cn(\n                        'flex w-full items-center justify-between gap-2 text-left transition-opacity hover:opacity-80',\n                        'font-medium'\n                      )}\n                      onClick={() => toggleSort(column)}\n                    >\n                      {label}\n                      {direction === 'asc' ? (\n                        <ChevronUpIcon className='size-4 opacity-60' aria-hidden='true' />\n                      ) : direction === 'desc' ? (\n                        <ChevronDownIcon className='size-4 opacity-60' aria-hidden='true' />\n                      ) : null}\n                    </button>\n                  </TableHead>\n                )\n              })}\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {paginatedData.length > 0 ? (\n              paginatedData.map((item) => {\n                const isSelected = selectedIds.includes(item.id)\n\n                return (\n                  <TableRow\n                    key={item.id}\n                    data-state={isSelected ? 'selected' : undefined}\n                    className='hover:bg-muted/10 data-[state=selected]:bg-muted/20'\n                  >\n                    <TableCell className='py-3.5'>\n                      <Checkbox\n                        checked={isSelected}\n                        onCheckedChange={(value) => toggleRow(item.id, !!value)}\n                        aria-label={`Select ${item.productName}`}\n                        className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='font-medium'>{item.productName}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='font-medium'>{formatCurrency(item.price)}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Badge className={availabilityBadgeClass[item.availability]}>{item.availability}</Badge>\n                    </TableCell>\n                  </TableRow>\n                )\n              })\n            ) : (\n              <TableRow>\n                <TableCell colSpan={4} className='h-24 text-center'>\n                  No results.\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </div>\n\n      <div className='flex items-center justify-between gap-3 rounded-xl border border-border/60 bg-background px-4 py-3 shadow-sm max-sm:flex-col'>\n        <p className='text-muted-foreground flex-1 text-sm whitespace-nowrap' aria-live='polite'>\n          Page <span className='text-foreground'>{currentPage}</span> of <span className='text-foreground'>{pageCount}</span>\n        </p>\n\n        <div className='grow'>\n          <Pagination>\n            <PaginationContent>\n              <PaginationItem>\n                <Button\n                  size='icon'\n                  variant='outline'\n                  className='disabled:pointer-events-none disabled:opacity-50'\n                  onClick={() => setPageIndex((current) => Math.max(current - 1, 0))}\n                  disabled={safePageIndex === 0}\n                  aria-label='Go to previous page'\n                >\n                  <ChevronLeftIcon aria-hidden='true' />\n                </Button>\n              </PaginationItem>\n\n              {showLeftEllipsis ? (\n                <PaginationItem>\n                  <PaginationEllipsis />\n                </PaginationItem>\n              ) : null}\n\n              {pages.map((page) => {\n                const isActive = page === currentPage\n\n                return (\n                  <PaginationItem key={page}>\n                    <Button\n                      size='icon'\n                      variant={isActive ? 'outline' : 'ghost'}\n                      onClick={() => setPageIndex(page - 1)}\n                      aria-current={isActive ? 'page' : undefined}\n                    >\n                      {page}\n                    </Button>\n                  </PaginationItem>\n                )\n              })}\n\n              {showRightEllipsis ? (\n                <PaginationItem>\n                  <PaginationEllipsis />\n                </PaginationItem>\n              ) : null}\n\n              <PaginationItem>\n                <Button\n                  size='icon'\n                  variant='outline'\n                  className='disabled:pointer-events-none disabled:opacity-50'\n                  onClick={() => setPageIndex((current) => Math.min(current + 1, pageCount - 1))}\n                  disabled={safePageIndex >= pageCount - 1}\n                  aria-label='Go to next page'\n                >\n                  <ChevronRightIcon aria-hidden='true' />\n                </Button>\n              </PaginationItem>\n            </PaginationContent>\n          </Pagination>\n        </div>\n\n        <div className='flex flex-1 justify-end'>\n          <Select value={pageSize.toString()} onValueChange={changePageSize}>\n            <SelectTrigger\n              id='results-per-page'\n              className='h-9 w-fit whitespace-nowrap border-border/60'\n              aria-label='Results per page'\n            >\n              <SelectValue placeholder='Select number of results' />\n            </SelectTrigger>\n            <SelectContent>\n              {[5, 10, 25, 50].map((size) => (\n                <SelectItem key={size} value={size.toString()}>\n                  {size} / page\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-12",
      "type": "registry:component",
      "title": "DataTable 12",
      "description": "DataTable 12. A component for displaying and managing tabular data.",
      "dependencies": [
        "lucide-react",
        "papaparse",
        "write-excel-file"
      ],
      "registryDependencies": [
        "badge",
        "checkbox",
        "dropdown-menu",
        "input",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-12.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useMemo, useState } from 'react'\n\nimport { DownloadIcon, FileSpreadsheetIcon, FileTextIcon } from 'lucide-react'\n\nimport Papa from 'papaparse'\nimport writeExcelFile from 'write-excel-file/browser'\n\nimport { Badge } from '@/components/base-ui/badge'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger\n} from '@/components/base-ui/dropdown-menu'\nimport { Input } from '@/components/base-ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype PaymentStatus = 'failed' | 'processing' | 'success'\n\ntype Payment = {\n  amount: number\n  email: string\n  id: string\n  name: string\n  status: PaymentStatus\n}\n\nconst data: readonly Payment[] = [\n  {\n    id: 'PAY-101',\n    name: 'Shang Chain',\n    amount: 699,\n    status: 'success',\n    email: 'shang07@yahoo.com'\n  },\n  {\n    id: 'PAY-102',\n    name: 'Kevin Lincoln',\n    amount: 242,\n    status: 'success',\n    email: 'kevinli09@gmail.com'\n  },\n  {\n    id: 'PAY-103',\n    name: 'Milton Rose',\n    amount: 655,\n    status: 'processing',\n    email: 'rose96@gmail.com'\n  },\n  {\n    id: 'PAY-104',\n    name: 'Silas Ryan',\n    amount: 874,\n    status: 'success',\n    email: 'silas22@gmail.com'\n  },\n  {\n    id: 'PAY-105',\n    name: 'Ben Tenison',\n    amount: 541,\n    status: 'failed',\n    email: 'bent@hotmail.com'\n  },\n  {\n    id: 'PAY-106',\n    name: 'Alice Cooper',\n    amount: 321,\n    status: 'processing',\n    email: 'alice@email.com'\n  },\n  {\n    id: 'PAY-107',\n    name: 'Bob Johnson',\n    amount: 789,\n    status: 'success',\n    email: 'bob.j@company.com'\n  },\n  {\n    id: 'PAY-108',\n    name: 'Carol Williams',\n    amount: 456,\n    status: 'processing',\n    email: 'carol.w@domain.org'\n  }\n] as const\n\nconst availabilityBadgeClass: Record<PaymentStatus, string> = {\n  success: 'border-none bg-green-600/10 text-green-600 dark:bg-green-400/10 dark:text-green-400',\n  failed: 'border-none bg-destructive/10 text-destructive dark:bg-destructive/20',\n  processing: 'border-none bg-amber-600/10 text-amber-600 dark:bg-amber-400/10 dark:text-amber-400'\n}\n\nconst formatCurrency = (amount: number) =>\n  new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD'\n  }).format(amount)\n\nconst DataTable12 = () => {\n  const [searchQuery, setSearchQuery] = useState('')\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n\n  const filteredData = useMemo(() => {\n    const query = searchQuery.trim().toLowerCase()\n\n    if (!query) {\n      return data\n    }\n\n    return data.filter((item) =>\n      [item.name, item.email, item.status, String(item.amount)].some((value) => value.toLowerCase().includes(query))\n    )\n  }, [searchQuery])\n\n  const allSelected = filteredData.length > 0 && filteredData.every((item) => selectedIds.includes(item.id))\n  const someSelected = filteredData.some((item) => selectedIds.includes(item.id)) && !allSelected\n\n  const selectedRows = data.filter((item) => selectedIds.includes(item.id))\n\n  const exportRows = (): Payment[] => [...(selectedRows.length > 0 ? selectedRows : filteredData)]\n\n  const toggleAll = (checked: boolean) => {\n    if (checked) {\n      setSelectedIds((current) => Array.from(new Set([...current, ...filteredData.map((item) => item.id)])))\n      return\n    }\n\n    setSelectedIds((current) => current.filter((id) => !filteredData.some((item) => item.id === id)))\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const downloadBlob = (blob: Blob, filename: string) => {\n    const link = document.createElement('a')\n    const url = URL.createObjectURL(blob)\n\n    link.setAttribute('href', url)\n    link.setAttribute('download', filename)\n    link.style.visibility = 'hidden'\n    document.body.appendChild(link)\n    link.click()\n    document.body.removeChild(link)\n    URL.revokeObjectURL(url)\n  }\n\n  const exportToCSV = () => {\n    const csv = Papa.unparse(exportRows(), { header: true })\n    downloadBlob(new Blob([csv], { type: 'text/csv;charset=utf-8;' }), `payments-export-${new Date().toISOString().split('T')[0]}.csv`)\n  }\n\n  const exportToExcel = async () => {\n    const rows = exportRows()\n    const sheetData = [\n      [\n        { value: 'ID', fontWeight: 'bold' as const },\n        { value: 'Name', fontWeight: 'bold' as const },\n        { value: 'Status', fontWeight: 'bold' as const },\n        { value: 'Email', fontWeight: 'bold' as const },\n        { value: 'Amount', fontWeight: 'bold' as const }\n      ],\n      ...rows.map((payment) => [\n        payment.id,\n        payment.name,\n        payment.status,\n        payment.email,\n        { value: payment.amount, format: '$#,##0.00' }\n      ])\n    ]\n\n    await writeExcelFile(sheetData, {\n      columns: [\n        { width: 14 },\n        { width: 22 },\n        { width: 16 },\n        { width: 30 },\n        { width: 16 }\n      ],\n      sheet: 'Payments'\n    }).toFile(`payments-export-${new Date().toISOString().split('T')[0]}.xlsx`)\n  }\n\n  const exportToJSON = () => {\n    const json = JSON.stringify(exportRows(), null, 2)\n    downloadBlob(new Blob([json], { type: 'application/json' }), `payments-export-${new Date().toISOString().split('T')[0]}.json`)\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n      <div className='flex justify-between gap-2 pb-4 max-sm:flex-col sm:items-center'>\n        <div className='flex items-center space-x-2'>\n          <Input\n            placeholder='Search all columns...'\n            value={searchQuery}\n            onChange={(event) => setSearchQuery(event.target.value)}\n            className='h-10 max-w-sm rounded-lg border-border/60 bg-muted/20 px-4'\n          />\n        </div>\n        <div className='flex items-center sm:space-x-2'>\n          <div className='text-muted-foreground text-sm'>\n            {selectedRows.length > 0 ? (\n              <span className='mr-2'>\n                {selectedRows.length} of {filteredData.length} row(s) selected\n              </span>\n            ) : null}\n          </div>\n          <DropdownMenu>\n            <DropdownMenuTrigger className='inline-flex h-10 min-w-28 items-center justify-center rounded-md border border-border/60 bg-background px-3 py-2 text-sm font-medium text-foreground outline-none transition-colors hover:bg-muted/20'>\n              <DownloadIcon className='mr-2 size-4' />\n              Export\n            </DropdownMenuTrigger>\n            <DropdownMenuContent align='end' className='w-52'>\n              <DropdownMenuItem onClick={exportToCSV} className='whitespace-nowrap'>\n                <FileTextIcon className='mr-2 size-4' />\n                Export as CSV\n              </DropdownMenuItem>\n              <DropdownMenuItem onClick={exportToExcel} className='whitespace-nowrap'>\n                <FileSpreadsheetIcon className='mr-2 size-4' />\n                Export as Excel\n              </DropdownMenuItem>\n              <DropdownMenuSeparator />\n              <DropdownMenuItem onClick={exportToJSON} className='whitespace-nowrap'>\n                <FileTextIcon className='mr-2 size-4' />\n                Export as JSON\n              </DropdownMenuItem>\n            </DropdownMenuContent>\n          </DropdownMenu>\n        </div>\n      </div>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n          <TableHeader>\n            <TableRow>\n              <TableHead className='h-12 w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all filtered rows'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Name\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Status\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Email\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-right text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Amount\n              </TableHead>\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {filteredData.length > 0 ? (\n              filteredData.map((item) => {\n                const isSelected = selectedIds.includes(item.id)\n\n                return (\n                  <TableRow\n                    key={item.id}\n                    data-state={isSelected ? 'selected' : undefined}\n                    className='hover:bg-muted/10 data-[state=selected]:bg-muted/20'\n                  >\n                    <TableCell className='py-3.5'>\n                      <Checkbox\n                        checked={isSelected}\n                        onCheckedChange={(value) => toggleRow(item.id, !!value)}\n                        aria-label={`Select ${item.name}`}\n                        className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='font-medium'>{item.name}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Badge className={availabilityBadgeClass[item.status]}>{item.status}</Badge>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='lowercase text-muted-foreground'>{item.email}</div>\n                    </TableCell>\n                    <TableCell className='py-3.5 text-right'>\n                      <div className='font-medium'>{formatCurrency(item.amount)}</div>\n                    </TableCell>\n                  </TableRow>\n                )\n              })\n            ) : (\n              <TableRow>\n                <TableCell colSpan={5} className='h-24 text-center'>\n                  No results.\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-13",
      "type": "registry:component",
      "title": "DataTable 13",
      "description": "DataTable 13. A component for displaying and managing tabular data.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "checkbox",
        "input",
        "select",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/data-table-13.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Checkbox } from '@/components/base-ui/checkbox'\nimport { Input } from '@/components/base-ui/input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/base-ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/base-ui/table'\n\ntype PersonStatus = 'active' | 'inactive' | 'pending'\n\ntype Person = {\n  email: string\n  firstName: string\n  id: string\n  lastName: string\n  progress: number\n  status: PersonStatus\n}\n\ntype PersonField = Exclude<keyof Person, 'id'>\n\nconst initialData: readonly Person[] = [\n  {\n    id: '1',\n    firstName: 'John',\n    lastName: 'Doe',\n    email: 'john.doe@example.com',\n    status: 'active',\n    progress: 75\n  },\n  {\n    id: '2',\n    firstName: 'Jane',\n    lastName: 'Smith',\n    email: 'jane.smith@example.com',\n    status: 'inactive',\n    progress: 45\n  },\n  {\n    id: '3',\n    firstName: 'Bob',\n    lastName: 'Johnson',\n    email: 'bob.johnson@example.com',\n    status: 'active',\n    progress: 90\n  },\n  {\n    id: '4',\n    firstName: 'Alice',\n    lastName: 'Brown',\n    email: 'alice.brown@example.com',\n    status: 'pending',\n    progress: 60\n  },\n  {\n    id: '5',\n    firstName: 'Charlie',\n    lastName: 'Wilson',\n    email: 'charlie.wilson@example.com',\n    status: 'active',\n    progress: 80\n  }\n] as const\n\nconst DataTable13 = () => {\n  const [data, setData] = useState<Person[]>([...initialData])\n  const [selectedIds, setSelectedIds] = useState<string[]>([])\n\n  const allSelected = data.length > 0 && selectedIds.length === data.length\n  const someSelected = selectedIds.length > 0 && !allSelected\n\n  const updateCell = <K extends PersonField>(id: string, field: K, value: Person[K]) => {\n    setData((current) =>\n      current.map((person) => (person.id === id ? { ...person, [field]: value } : person))\n    )\n  }\n\n  const toggleAll = (checked: boolean) => {\n    setSelectedIds(checked ? data.map((person) => person.id) : [])\n  }\n\n  const toggleRow = (id: string, checked: boolean) => {\n    setSelectedIds((current) => {\n      if (checked) {\n        return current.includes(id) ? current : [...current, id]\n      }\n\n      return current.filter((item) => item !== id)\n    })\n  }\n\n  const refreshData = () => {\n    setData([...initialData])\n    setSelectedIds([])\n  }\n\n  return (\n    <div className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto space-y-4'>\n      <div className='overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm'>\n        <Table className='w-60 sm:w-100 md:w-120 lg:w-160 2xl:w-220 mx-auto'>\n          <TableHeader>\n            <TableRow>\n              <TableHead className='h-12 w-10 bg-muted/20 font-medium'>\n                <Checkbox\n                  checked={allSelected}\n                  aria-checked={someSelected ? 'mixed' : allSelected}\n                  onCheckedChange={(value) => toggleAll(!!value)}\n                  aria-label='Select all rows'\n                  className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                />\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                First Name\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Last Name\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Email\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Status\n              </TableHead>\n              <TableHead className='h-12 bg-muted/20 text-[13px] font-medium tracking-[0.08em] text-muted-foreground'>\n                Progress\n              </TableHead>\n            </TableRow>\n          </TableHeader>\n          <TableBody>\n            {data.length > 0 ? (\n              data.map((person) => {\n                const isSelected = selectedIds.includes(person.id)\n\n                return (\n                  <TableRow\n                    key={person.id}\n                    data-state={isSelected ? 'selected' : undefined}\n                    className='hover:bg-muted/10 data-[state=selected]:bg-muted/20'\n                  >\n                    <TableCell className='py-3.5'>\n                      <Checkbox\n                        checked={isSelected}\n                        onCheckedChange={(value) => toggleRow(person.id, !!value)}\n                        aria-label={`Select ${person.firstName} ${person.lastName}`}\n                        className='after:hidden data-checked:border-sky-600 data-checked:bg-sky-600 data-checked:text-white dark:data-checked:border-sky-500 dark:data-checked:bg-sky-500 dark:data-checked:text-white'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Input\n                        value={person.firstName}\n                        onChange={(event) => updateCell(person.id, 'firstName', event.target.value)}\n                        className='h-8 rounded-md border border-border/40 bg-muted/50 px-1.5 focus-visible:bg-background focus-visible:ring-1 dark:border-border/30 dark:bg-muted/20'\n                        aria-label='Editable first name'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Input\n                        value={person.lastName}\n                        onChange={(event) => updateCell(person.id, 'lastName', event.target.value)}\n                        className='h-8 rounded-md border border-border/40 bg-muted/50 px-1.5 focus-visible:bg-background focus-visible:ring-1 dark:border-border/30 dark:bg-muted/20'\n                        aria-label='Editable last name'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Input\n                        value={person.email}\n                        onChange={(event) => updateCell(person.id, 'email', event.target.value)}\n                        className='h-8 rounded-md border border-border/40 bg-muted/50 px-1.5 focus-visible:bg-background focus-visible:ring-1 dark:border-border/30 dark:bg-muted/20'\n                        aria-label='Editable email'\n                      />\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <Select\n                        value={person.status}\n                        onValueChange={(value) => updateCell(person.id, 'status', value as PersonStatus)}\n                      >\n                        <SelectTrigger\n                          className='h-8 rounded-md border border-border/40 bg-muted/50 px-1.5 focus:bg-background focus:ring-1 dark:border-border/30 dark:bg-muted/20'\n                          aria-label='Editable status'\n                        >\n                          <SelectValue />\n                        </SelectTrigger>\n                        <SelectContent>\n                          <SelectItem value='active'>Active</SelectItem>\n                          <SelectItem value='inactive'>Inactive</SelectItem>\n                          <SelectItem value='pending'>Pending</SelectItem>\n                        </SelectContent>\n                      </Select>\n                    </TableCell>\n                    <TableCell className='py-3.5'>\n                      <div className='flex items-center gap-2'>\n                        <Input\n                          type='number'\n                          min='0'\n                          max='100'\n                          value={person.progress.toString()}\n                          onChange={(event) => {\n                            const nextValue = Number(event.target.value)\n                            const safeValue = Number.isNaN(nextValue) ? person.progress : Math.max(0, Math.min(100, nextValue))\n                            updateCell(person.id, 'progress', safeValue)\n                          }}\n                          className='h-8 w-20 rounded-md border border-border/40 bg-muted/50 px-1.5 focus-visible:bg-background focus-visible:ring-1 dark:border-border/30 dark:bg-muted/20'\n                          aria-label='Editable progress'\n                        />\n                        <span className='text-sm text-muted-foreground'>%</span>\n                      </div>\n                    </TableCell>\n                  </TableRow>\n                )\n              })\n            ) : (\n              <TableRow>\n                <TableCell colSpan={6} className='h-24 text-center'>\n                  No results.\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </div>\n\n      <div className='text-muted-foreground flex items-center justify-between gap-2 rounded-xl border border-border/60 bg-background px-4 py-3 text-sm shadow-sm max-md:flex-col'>\n        <div>{data.length} rows total</div>\n        <div className='flex items-center space-x-2'>\n          <Button variant='outline' size='sm' onClick={refreshData}>\n            Refresh Data\n          </Button>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default DataTable13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-1",
      "type": "registry:component",
      "title": "DatePicker 1",
      "description": "DatePicker 1. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-1.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst formatSelectedDate = (selectedDate: Date) =>\n  selectedDate.toLocaleDateString()\n\nconst calendarClassNames = {\n  day_button:\n    'rounded-full data-[selected=true]:rounded-full! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! data-[selected=true]:dark:bg-white! data-[selected=true]:dark:text-slate-950! hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! dark:data-[selected=true]:bg-white! dark:data-[selected=true]:text-slate-950!'\n} satisfies CalendarClassNames\n\nconst DatePicker1 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined)\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Schedule date\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          className='flex h-11 w-full items-center justify-between rounded-2xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span className={selectedDate ? 'text-foreground' : 'text-muted-foreground'}>\n            {selectedDate ? formatSelectedDate(selectedDate) : 'Pick a date'}\n          </span>\n          <ChevronDownIcon className='size-4 text-muted-foreground/80' />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Calendar\n            mode='single'\n            selected={selectedDate}\n            classNames={calendarClassNames}\n            onSelect={(date) => {\n              setSelectedDate(date)\n              setOpen(false)\n            }}\n          />\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default DatePicker1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-2",
      "type": "registry:component",
      "title": "DatePicker 2",
      "description": "DatePicker 2. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react",
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-2.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst formatDateRange = (range: DateRange) => {\n  if (range.from && range.to) {\n    return `${range.from.toLocaleDateString()} - ${range.to.toLocaleDateString()}`\n  }\n\n  if (range.from) {\n    return range.from.toLocaleDateString()\n  }\n\n  return 'Pick a date range'\n}\n\nconst DatePicker2 = () => {\n  const id = useId()\n  const [selectedRange, setSelectedRange] = useState<DateRange | undefined>(\n    undefined\n  )\n  const hasCompletedRange = Boolean(selectedRange?.from && selectedRange?.to)\n\n  const calendarClassNames = {\n    range_start: hasCompletedRange\n      ? 'relative isolate rounded-l-full bg-transparent before:hidden after:absolute after:inset-y-0 after:right-0 after:w-1/2 after:bg-slate-900/10 dark:after:bg-white/10'\n      : 'rounded-full bg-transparent after:hidden before:hidden',\n    range_end: hasCompletedRange\n      ? 'relative isolate rounded-r-full bg-transparent after:hidden before:absolute before:inset-y-0 before:left-0 before:w-1/2 before:bg-slate-900/10 dark:before:bg-white/10'\n      : 'rounded-full bg-transparent after:hidden before:hidden',\n    day_button:\n      'data-[range-end=true]:rounded-full! data-[range-start=true]:rounded-full! data-[range-start=true]:bg-slate-900! data-[range-start=true]:text-white! data-[range-start=true]:dark:bg-white! data-[range-start=true]:dark:text-slate-950! data-[range-end=true]:bg-slate-900! data-[range-end=true]:text-white! data-[range-end=true]:dark:bg-white! data-[range-end=true]:dark:text-slate-950! data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-slate-900/10 data-[range-middle=true]:dark:bg-white/10 hover:rounded-full',\n    today:\n      'rounded-full bg-muted/60! data-[selected=true]:rounded-full! data-[range-start=true]:bg-transparent! data-[range-end=true]:bg-transparent! data-[range-middle=true]:bg-transparent!'\n  } satisfies CalendarClassNames\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Date range\n      </Label>\n      <Popover>\n        <PopoverTrigger\n          id={id}\n          className='flex h-11 w-full items-center justify-between rounded-2xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span\n            className={\n              selectedRange?.from ? 'text-foreground' : 'text-muted-foreground'\n            }\n          >\n            {selectedRange ? formatDateRange(selectedRange) : 'Pick a date range'}\n          </span>\n          <ChevronDownIcon className='size-4 text-muted-foreground/80' />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Calendar\n            mode='range'\n            selected={selectedRange}\n            classNames={calendarClassNames}\n            onSelect={(range) => {\n              setSelectedRange(range)\n            }}\n          />\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default DatePicker2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-3",
      "type": "registry:component",
      "title": "DatePicker 3",
      "description": "DatePicker 3. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-3.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState } from 'react'\n\nimport { CalendarIcon, ChevronDownIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst formatSelectedDate = (selectedDate: Date) =>\n  selectedDate.toLocaleDateString()\n\nconst calendarClassNames = {\n  day_button:\n    'rounded-full data-[selected=true]:rounded-full! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! data-[selected=true]:dark:bg-white! data-[selected=true]:dark:text-slate-950! hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! dark:data-[selected=true]:bg-white! dark:data-[selected=true]:text-slate-950!'\n} satisfies CalendarClassNames\n\nconst DatePicker3 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined)\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Date with icon\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          className='flex h-11 w-full items-center justify-between rounded-2xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span\n            className={`flex items-center gap-2 ${selectedDate ? 'text-foreground' : 'text-muted-foreground'}`}\n          >\n            <CalendarIcon className='size-4' />\n            {selectedDate ? formatSelectedDate(selectedDate) : 'Pick a date'}\n          </span>\n          <ChevronDownIcon className='size-4 text-muted-foreground/80' />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Calendar\n            mode='single'\n            selected={selectedDate}\n            classNames={calendarClassNames}\n            onSelect={(date) => {\n              setSelectedDate(date)\n              setOpen(false)\n            }}\n          />\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default DatePicker3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-4",
      "type": "registry:component",
      "title": "DatePicker 4",
      "description": "DatePicker 4. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "input",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState, type ChangeEvent, type KeyboardEvent } from 'react'\n\nimport { CalendarIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nfunction formatDate(date: Date | undefined) {\n  if (!date) {\n    return ''\n  }\n\n  return date.toLocaleDateString('en-US', {\n    day: '2-digit',\n    month: 'long',\n    year: 'numeric'\n  })\n}\n\nfunction isValidDate(date: Date | undefined) {\n  if (!date) {\n    return false\n  }\n\n  return !isNaN(date.getTime())\n}\n\nconst calendarClassNames = {\n  day_button:\n    'rounded-full data-[selected=true]:rounded-full! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! data-[selected=true]:dark:bg-white! data-[selected=true]:dark:text-slate-950! hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! dark:data-[selected=true]:bg-white! dark:data-[selected=true]:text-slate-950!'\n} satisfies CalendarClassNames\n\nconst DatePicker4 = () => {\n  const id = useId()\n  const initialSelectedDate = new Date()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [visibleMonth, setVisibleMonth] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [inputValue, setInputValue] = useState<string>(\n    formatDate(initialSelectedDate)\n  )\n\n  const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n    const nextValue = event.target.value\n    const nextDate = new Date(nextValue)\n\n    setInputValue(nextValue)\n\n    if (isValidDate(nextDate)) {\n      setSelectedDate(nextDate)\n      setVisibleMonth(nextDate)\n    }\n  }\n\n  const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'ArrowDown') {\n      event.preventDefault()\n      setOpen(true)\n    }\n  }\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Date input\n      </Label>\n      <div className='relative flex gap-2'>\n        <Input\n          id={id}\n          value={inputValue}\n          placeholder='January 01, 2025'\n          className='h-11 rounded-2xl border-border/60 bg-background pr-11 shadow-xs'\n          onChange={handleInputChange}\n          onKeyDown={handleInputKeyDown}\n        />\n        <Popover open={open} onOpenChange={setOpen}>\n          <PopoverTrigger\n            id={`${id}-picker`}\n            className='absolute top-1/2 right-2 inline-flex size-7 -translate-y-1/2 items-center justify-center rounded-full text-muted-foreground/80 outline-none transition-colors hover:bg-accent/30 hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50'\n          >\n            <CalendarIcon className='size-3.5' />\n            <span className='sr-only'>Pick a date</span>\n          </PopoverTrigger>\n          <PopoverContent\n            className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n            align='end'\n            alignOffset={-8}\n            sideOffset={10}\n          >\n            <Calendar\n              mode='single'\n              selected={selectedDate}\n              month={visibleMonth}\n              classNames={calendarClassNames}\n              onMonthChange={setVisibleMonth}\n              onSelect={(date) => {\n                setSelectedDate(date)\n                setInputValue(formatDate(date))\n                setOpen(false)\n              }}\n            />\n          </PopoverContent>\n        </Popover>\n      </div>\n    </div>\n  )\n}\n\nexport default DatePicker4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-5",
      "type": "registry:component",
      "title": "DatePicker 5",
      "description": "DatePicker 5. A date picker component for selecting dates.",
      "dependencies": [
        "chrono-node",
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "input",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-5.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState, type ChangeEvent, type KeyboardEvent } from 'react'\n\nimport { parseDate } from 'chrono-node'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nfunction formatDate(date: Date | undefined) {\n  if (!date) {\n    return ''\n  }\n\n  return date.toLocaleDateString('en-US', {\n    day: '2-digit',\n    month: 'long',\n    year: 'numeric'\n  })\n}\n\nconst calendarClassNames = {\n  day_button:\n    'rounded-full data-[selected=true]:rounded-full! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! data-[selected=true]:dark:bg-white! data-[selected=true]:dark:text-slate-950! hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! dark:data-[selected=true]:bg-white! dark:data-[selected=true]:text-slate-950!'\n} satisfies CalendarClassNames\n\nconst DatePicker5 = () => {\n  const id = useId()\n  const initialInputValue = 'In 2 days'\n  const initialSelectedDate = parseDate(initialInputValue) ?? undefined\n  const [open, setOpen] = useState<boolean>(false)\n  const [inputValue, setInputValue] = useState<string>(initialInputValue)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n  const [visibleMonth, setVisibleMonth] = useState<Date | undefined>(\n    initialSelectedDate\n  )\n\n  const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n    const nextValue = event.target.value\n    const nextDate = parseDate(nextValue) ?? undefined\n\n    setInputValue(nextValue)\n\n    if (nextDate) {\n      setSelectedDate(nextDate)\n      setVisibleMonth(nextDate)\n    }\n  }\n\n  const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'ArrowDown') {\n      event.preventDefault()\n      setOpen(true)\n    }\n  }\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Natural date input\n      </Label>\n      <div className='relative flex gap-2'>\n        <Input\n          id={id}\n          value={inputValue}\n          placeholder='Tomorrow or next week'\n          className='h-11 rounded-2xl border-border/60 bg-background pr-11 shadow-xs'\n          onChange={handleInputChange}\n          onKeyDown={handleInputKeyDown}\n        />\n        <Popover open={open} onOpenChange={setOpen}>\n          <PopoverTrigger\n            id={`${id}-picker`}\n            className='absolute top-1/2 right-2 inline-flex size-7 -translate-y-1/2 items-center justify-center rounded-full text-muted-foreground/80 outline-none transition-colors hover:bg-accent/30 hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50'\n          >\n            <CalendarIcon className='size-3.5' />\n            <span className='sr-only'>Pick a date</span>\n          </PopoverTrigger>\n          <PopoverContent\n            className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n            align='end'\n            alignOffset={-8}\n            sideOffset={10}\n          >\n            <Calendar\n              mode='single'\n              selected={selectedDate}\n              month={visibleMonth}\n              classNames={calendarClassNames}\n              onMonthChange={setVisibleMonth}\n              onSelect={(date) => {\n                setSelectedDate(date)\n                setInputValue(formatDate(date))\n                setOpen(false)\n              }}\n            />\n          </PopoverContent>\n        </Popover>\n      </div>\n      <div className='text-muted-foreground px-1 text-xs'>\n        Your reminder is currently scheduled for{' '}\n        <span className='font-medium'>{formatDate(selectedDate)}</span>.\n      </div>\n    </div>\n  )\n}\n\nexport default DatePicker5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-6",
      "type": "registry:component",
      "title": "DatePicker 6",
      "description": "DatePicker 6. A date picker component for selecting dates.",
      "dependencies": [
        "little-date",
        "lucide-react",
        "react-day-picker"
      ],
      "registryDependencies": [
        "calendar",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-6.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState } from 'react'\n\nimport { formatDateRange } from 'little-date'\nimport { ChevronDownIcon } from 'lucide-react'\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst initialSelectedRange: DateRange = {\n  from: new Date(2025, 10, 20),\n  to: new Date(2025, 10, 24)\n}\n\nconst calendarClassNames = {\n  range_start: 'rounded-l-full bg-slate-900/10 dark:bg-white/10',\n  range_end: 'rounded-r-full bg-slate-900/10 dark:bg-white/10',\n  day_button:\n    'data-[range-end=true]:rounded-full! data-[range-start=true]:rounded-full! data-[range-start=true]:bg-slate-900! data-[range-start=true]:text-white! data-[range-start=true]:dark:bg-white! data-[range-start=true]:dark:text-slate-950! data-[range-end=true]:bg-slate-900! data-[range-end=true]:text-white! data-[range-end=true]:dark:bg-white! data-[range-end=true]:dark:text-slate-950! data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-slate-900/10 data-[range-middle=true]:dark:bg-white/10 hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:rounded-l-none! data-[selected=true]:bg-slate-900/10! dark:data-[selected=true]:bg-white/10!'\n} satisfies CalendarClassNames\n\nconst DatePicker6 = () => {\n  const id = useId()\n  const [selectedRange, setSelectedRange] = useState<DateRange | undefined>(\n    initialSelectedRange\n  )\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Short date range\n      </Label>\n      <Popover>\n        <PopoverTrigger\n          id={id}\n          className='flex h-11 w-full items-center justify-between rounded-2xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span\n            className={\n              selectedRange?.from ? 'text-foreground' : 'text-muted-foreground'\n            }\n          >\n            {selectedRange?.from && selectedRange?.to\n              ? formatDateRange(selectedRange.from, selectedRange.to, {\n                  includeTime: false\n                })\n              : 'Pick a date range'}\n          </span>\n          <ChevronDownIcon className='size-4 text-muted-foreground/80' />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Calendar\n            mode='range'\n            selected={selectedRange}\n            classNames={calendarClassNames}\n            onSelect={(range) => {\n              setSelectedRange(range)\n            }}\n          />\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default DatePicker6\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-7",
      "type": "registry:component",
      "title": "DatePicker 7",
      "description": "DatePicker 7. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "calendar",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-7.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport type { ComponentProps } from 'react'\nimport { useId, useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\ntype CalendarClassNames = NonNullable<ComponentProps<typeof Calendar>['classNames']>\n\nconst formatSelectedDate = (selectedDate: Date) =>\n  selectedDate.toLocaleDateString()\n\nconst calendarClassNames = {\n  day_button:\n    'rounded-full data-[selected=true]:rounded-full! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! data-[selected=true]:dark:bg-white! data-[selected=true]:dark:text-slate-950! hover:rounded-full',\n  today:\n    'rounded-full bg-muted/60! data-[selected=true]:bg-slate-900! data-[selected=true]:text-white! dark:data-[selected=true]:bg-white! dark:data-[selected=true]:text-slate-950!'\n} satisfies CalendarClassNames\n\nconst DatePicker7 = () => {\n  const id = useId()\n  const [open, setOpen] = useState<boolean>(false)\n  const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined)\n\n  return (\n    <div className='w-full max-w-xs space-y-2'>\n      <Label htmlFor={id} className='px-1 text-sm font-medium'>\n        Hidden outside days\n      </Label>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger\n          id={id}\n          className='flex h-11 w-full items-center justify-between rounded-2xl border border-border/60 bg-background px-3.5 text-sm font-normal shadow-xs outline-none transition-colors hover:bg-accent/10 focus-visible:ring-[3px] focus-visible:ring-ring/50'\n        >\n          <span className={selectedDate ? 'text-foreground' : 'text-muted-foreground'}>\n            {selectedDate ? formatSelectedDate(selectedDate) : 'Pick a date'}\n          </span>\n          <ChevronDownIcon className='size-4 text-muted-foreground/80' />\n        </PopoverTrigger>\n        <PopoverContent\n          className='w-auto overflow-hidden rounded-2xl border-border/60 p-0 shadow-sm'\n          align='start'\n        >\n          <Calendar\n            mode='single'\n            selected={selectedDate}\n            classNames={calendarClassNames}\n            showOutsideDays={false}\n            onSelect={(date) => {\n              setSelectedDate(date)\n              setOpen(false)\n            }}\n          />\n        </PopoverContent>\n      </Popover>\n    </div>\n  )\n}\n\nexport default DatePicker7\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-8",
      "type": "registry:component",
      "title": "DatePicker 8",
      "description": "DatePicker 8. A date picker component for selecting dates.",
      "dependencies": [],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-8.tsx",
          "type": "registry:component",
          "content": "\nimport { useId } from 'react';\nimport type { FC } from 'react';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst initialTimeValue = '10:10:00' as const;\n\nconst DatePicker8: FC = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"px-1 text-sm font-medium\">\n        Pick time\n      </Label>\n      <Input\n        type=\"time\"\n        id={id}\n        step={1}\n        defaultValue={initialTimeValue}\n        className=\"h-11 rounded-2xl border-border/60 bg-background shadow-xs appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n      />\n    </div>\n  );\n};\n\nexport default DatePicker8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-9",
      "type": "registry:component",
      "title": "DatePicker 9",
      "description": "DatePicker 9. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-9.tsx",
          "type": "registry:component",
          "content": "import { Clock8Icon } from 'lucide-react';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport type { FC } from 'react';\n\nconst initialTimeValue = '10:10:00' as const;\n\nconst DatePicker9: FC = () => {\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label htmlFor=\"time-picker\" className=\"px-1 text-sm font-semibold text-primary\">\n        Time input with start icon\n      </Label>\n      <div className=\"relative\">\n        <div className=\"text-muted-foreground pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 peer-disabled:opacity-50\">\n          <Clock8Icon className=\"size-5 text-primary/80\" />\n          <span className=\"sr-only\">User</span>\n        </div>\n        <Input\n          type=\"time\"\n          id=\"time-picker\"\n          step={1}\n          defaultValue={initialTimeValue}\n          className=\"peer h-11 rounded-2xl border-border/60 bg-background appearance-none pl-11 pr-3 shadow-xs focus:ring-2 focus:ring-primary/30 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default DatePicker9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-10",
      "type": "registry:component",
      "title": "DatePicker 10",
      "description": "DatePicker 10. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "input",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-10.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react';\nimport type { FC } from 'react';\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst initialTimeValue = '10:10:00' as const;\n\nconst DatePicker10: FC = () => {\n  const [open, setOpen] = useState<boolean>(false);\n  const [date, setDate] = useState<Date | undefined>(undefined);\n\n  return (\n    <div className=\"flex gap-6\">\n      <div className=\"flex flex-col gap-4\">\n        <Label htmlFor=\"date-picker\" className=\"px-1 text-sm font-semibold text-primary\">\n          Date picker\n        </Label>\n        <Popover open={open} onOpenChange={setOpen}>\n          <PopoverTrigger>\n            <Button variant=\"outline\" id=\"date-picker\" className=\"justify-between font-normal rounded-2xl h-11 shadow-xs border-border/60 focus:ring-2 focus:ring-primary/30\">\n              {date ? date.toLocaleDateString() : 'Pick a date'}\n              <ChevronDownIcon className=\"ml-2 size-4 text-primary/80\" />\n            </Button>\n          </PopoverTrigger>\n          <PopoverContent className=\"w-auto overflow-hidden p-0 rounded-2xl shadow-lg border-border/60\" align=\"start\">\n            <Calendar\n              mode=\"single\"\n              selected={date}\n              onSelect={d => {\n                setDate(d);\n                setOpen(false);\n              }}\n            />\n          </PopoverContent>\n        </Popover>\n      </div>\n      <div className=\"flex flex-col gap-4\">\n        <Label htmlFor=\"time-picker\" className=\"px-1 text-sm font-semibold text-primary\">\n          Time input\n        </Label>\n        <Input\n          type=\"time\"\n          id=\"time-picker\"\n          step={1}\n          defaultValue={initialTimeValue}\n          className=\"h-11 rounded-2xl border-border/60 bg-background appearance-none pl-4 pr-3 shadow-xs focus:ring-2 focus:ring-primary/30 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default DatePicker10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-11",
      "type": "registry:component",
      "title": "DatePicker 11",
      "description": "DatePicker 11. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "input",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-11.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react';\nimport type { FC } from 'react';\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst initialTimeFrom = '10:10:00' as const;\nconst initialTimeTo = '12:10:00' as const;\n\nconst DatePicker11: FC = () => {\n  const [open, setOpen] = useState<boolean>(false);\n  const [date, setDate] = useState<Date | undefined>(undefined);\n\n  return (\n    <div className=\"flex flex-col gap-7\">\n      <div className=\"flex w-full max-w-xs flex-col gap-4\">\n        <Label htmlFor=\"date\" className=\"px-1 text-sm font-semibold text-primary\">\n          Date\n        </Label>\n        <Popover open={open} onOpenChange={setOpen}>\n          <PopoverTrigger>\n            <Button variant=\"outline\" id=\"date\" className=\"w-full justify-between font-normal rounded-2xl h-11 shadow-xs border-border/60 focus:ring-2 focus:ring-primary/30\">\n              {date ? date.toLocaleDateString() : 'Pick a date'}\n              <ChevronDownIcon className=\"ml-2 size-4 text-primary/80\" />\n            </Button>\n          </PopoverTrigger>\n          <PopoverContent className=\"w-auto overflow-hidden p-0 rounded-2xl shadow-lg border-border/60\" align=\"start\">\n            <Calendar\n              mode=\"single\"\n              selected={date}\n              onSelect={d => {\n                setDate(d);\n                setOpen(false);\n              }}\n            />\n          </PopoverContent>\n        </Popover>\n      </div>\n      <div className=\"flex gap-6\">\n        <div className=\"flex flex-col gap-4\">\n          <Label htmlFor=\"time-from\" className=\"px-1 text-sm font-semibold text-primary\">\n            From\n          </Label>\n          <Input\n            type=\"time\"\n            id=\"time-from\"\n            step={1}\n            defaultValue={initialTimeFrom}\n            className=\"h-11 rounded-2xl border-border/60 bg-background appearance-none pl-4 pr-3 shadow-xs focus:ring-2 focus:ring-primary/30 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n          />\n        </div>\n        <div className=\"flex flex-col gap-4\">\n          <Label htmlFor=\"time-to\" className=\"px-1 text-sm font-semibold text-primary\">\n            To\n          </Label>\n          <Input\n            type=\"time\"\n            id=\"time-to\"\n            step={1}\n            defaultValue={initialTimeTo}\n            className=\"h-11 rounded-2xl border-border/60 bg-background appearance-none pl-4 pr-3 shadow-xs focus:ring-2 focus:ring-primary/30 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n          />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default DatePicker11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-12",
      "type": "registry:component",
      "title": "DatePicker 12",
      "description": "DatePicker 12. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "input",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-12.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react';\nimport type { FC } from 'react';\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport { Input } from '@/components/base-ui/input'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst initialTimeFrom = '10:10:00' as const;\nconst initialTimeTo = '18:10:00' as const;\n\nconst DatePicker12: FC = () => {\n  const [openFrom, setOpenFrom] = useState<boolean>(false);\n  const [openTo, setOpenTo] = useState<boolean>(false);\n  const [dateFrom, setDateFrom] = useState<Date | undefined>(new Date('2025-06-18'));\n  const [dateTo, setDateTo] = useState<Date | undefined>(new Date('2025-06-25'));\n\n  return (\n    <div className=\"flex w-full max-w-64 min-w-0 flex-col gap-7\">\n      <div className=\"flex gap-6\">\n        <div className=\"flex flex-1 flex-col gap-4\">\n          <Label htmlFor=\"date-from\" className=\"px-1 text-sm font-semibold text-primary\">\n            Start Date\n          </Label>\n          <Popover open={openFrom} onOpenChange={setOpenFrom}>\n            <PopoverTrigger>\n              <Button variant=\"outline\" id=\"date-from\" className=\"w-full justify-between font-normal rounded-2xl h-11 shadow-xs border-border/60 focus:ring-2 focus:ring-primary/30\">\n                {dateFrom\n                  ? dateFrom.toLocaleDateString('en-US', {\n                      day: '2-digit',\n                      month: 'short',\n                      year: 'numeric'\n                    })\n                  : 'Pick a date'}\n                <ChevronDownIcon className=\"ml-2 size-4 text-primary/80\" />\n              </Button>\n            </PopoverTrigger>\n            <PopoverContent className=\"w-auto overflow-hidden p-0 rounded-2xl shadow-lg border-border/60\" align=\"start\">\n              <Calendar\n                mode=\"single\"\n                selected={dateFrom}\n                onSelect={d => {\n                  setDateFrom(d);\n                  setOpenFrom(false);\n                }}\n              />\n            </PopoverContent>\n          </Popover>\n        </div>\n        <div className=\"flex flex-col gap-4\">\n          <Label htmlFor=\"time-from\" className=\"invisible px-1 text-sm font-semibold text-primary\">\n            Start Time\n          </Label>\n          <Input\n            type=\"time\"\n            id=\"time-from\"\n            step={1}\n            defaultValue={initialTimeFrom}\n            className=\"h-11 rounded-2xl border-border/60 bg-background appearance-none pl-4 pr-3 shadow-xs focus:ring-2 focus:ring-primary/30 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n          />\n        </div>\n      </div>\n      <div className=\"flex gap-6\">\n        <div className=\"flex flex-1 flex-col gap-4\">\n          <Label htmlFor=\"date-to\" className=\"px-1 text-sm font-semibold text-primary\">\n            End Date\n          </Label>\n          <Popover open={openTo} onOpenChange={setOpenTo}>\n            <PopoverTrigger>\n              <Button variant=\"outline\" id=\"date-to\" className=\"w-full justify-between font-normal rounded-2xl h-11 shadow-xs border-border/60 focus:ring-2 focus:ring-primary/30\">\n                {dateTo\n                  ? dateTo.toLocaleDateString('en-US', {\n                      day: '2-digit',\n                      month: 'short',\n                      year: 'numeric'\n                    })\n                  : 'Pick a date'}\n                <ChevronDownIcon className=\"ml-2 size-4 text-primary/80\" />\n              </Button>\n            </PopoverTrigger>\n            <PopoverContent className=\"w-auto overflow-hidden p-0 rounded-2xl shadow-lg border-border/60\" align=\"start\">\n              <Calendar\n                mode=\"single\"\n                selected={dateTo}\n                captionLayout=\"dropdown\"\n                onSelect={d => {\n                  setDateTo(d);\n                  setOpenTo(false);\n                }}\n                disabled={dateFrom ? { before: dateFrom } : undefined}\n              />\n            </PopoverContent>\n          </Popover>\n        </div>\n        <div className=\"flex flex-col gap-4\">\n          <Label htmlFor=\"time-to\" className=\"invisible px-1 text-sm font-semibold text-primary\">\n            End Time\n          </Label>\n          <Input\n            type=\"time\"\n            id=\"time-to\"\n            step={1}\n            defaultValue={initialTimeTo}\n            className=\"h-11 rounded-2xl border-border/60 bg-background appearance-none pl-4 pr-3 shadow-xs focus:ring-2 focus:ring-primary/30 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n          />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default DatePicker12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker-13",
      "type": "registry:component",
      "title": "DatePicker 13",
      "description": "DatePicker 13. A date picker component for selecting dates.",
      "dependencies": [
        "lucide-react",
        "react-day-picker",
        "recharts"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "card",
        "chart",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/date-picker-13.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState, useMemo } from 'react';\nimport type { FC } from 'react';\n\nimport { CalendarIcon } from 'lucide-react'\nimport type { DateRange } from 'react-day-picker'\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Calendar } from '@/components/base-ui/calendar'\nimport {\n  Card,\n  CardAction,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle\n} from '@/components/base-ui/card'\nimport type { ChartConfig } from '@/components/base-ui/chart'\nimport { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/base-ui/chart'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\n\nconst chartData = [\n  { date: '2025-01-01', visitors: 210 },\n  { date: '2025-01-02', visitors: 320 },\n  { date: '2025-01-03', visitors: 150 },\n  { date: '2025-01-04', visitors: 400 },\n  { date: '2025-01-05', visitors: 90 },\n  { date: '2025-01-06', visitors: 275 },\n  { date: '2025-01-07', visitors: 350 },\n  { date: '2025-01-08', visitors: 500 },\n  { date: '2025-01-09', visitors: 120 },\n  { date: '2025-01-10', visitors: 380 },\n  { date: '2025-01-11', visitors: 60 },\n  { date: '2025-01-12', visitors: 420 },\n  { date: '2025-01-13', visitors: 200 },\n  { date: '2025-01-14', visitors: 310 },\n  { date: '2025-01-15', visitors: 180 },\n  { date: '2025-01-16', visitors: 390 },\n  { date: '2025-01-17', visitors: 470 },\n  { date: '2025-01-18', visitors: 130 },\n  { date: '2025-01-19', visitors: 260 },\n  { date: '2025-01-20', visitors: 340 },\n  { date: '2025-01-21', visitors: 210 },\n  { date: '2025-01-22', visitors: 370 },\n  { date: '2025-01-23', visitors: 490 },\n  { date: '2025-01-24', visitors: 110 },\n  { date: '2025-01-25', visitors: 150 },\n  { date: '2025-01-26', visitors: 410 },\n  { date: '2025-01-27', visitors: 430 },\n  { date: '2025-01-28', visitors: 170 },\n  { date: '2025-01-29', visitors: 95 },\n  { date: '2025-01-30', visitors: 460 },\n  { date: '2025-01-31', visitors: 300 }\n];\n\nconst total = chartData.reduce((acc, curr) => acc + curr.visitors, 0)\n\nconst chartConfig = {\n  visitors: {\n    label: 'Visitors',\n    color: 'var(--color-primary)'\n  }\n} satisfies ChartConfig\n\nconst DatePicker13: FC = () => {\n  const [range, setRange] = useState<DateRange | undefined>({\n    from: new Date(2025, 0, 1),\n    to: new Date(2025, 0, 31)\n  })\n\n  const filteredData = useMemo(() => {\n    if (!range?.from && !range?.to) {\n      return chartData\n    }\n\n    return chartData.filter(item => {\n      const date = new Date(item.date)\n\n      return date >= range.from! && date <= range.to!\n    })\n  }, [range])\n\n  return (\n    <Card className='@container/card w-full max-w-xl rounded-3xl shadow-xl border border-border/60 bg-background/80 backdrop-blur-sm'>\n      <CardHeader className='flex flex-col border-b rounded-t-3xl @md/card:grid'>\n        <CardTitle>Sales Performance</CardTitle>\n        <CardDescription>Track your daily sales for the selected period.</CardDescription>\n        <CardAction className='mt-2 @md/card:mt-0'>\n          <Popover>\n            <PopoverTrigger>\n              <Button variant='outline' className='rounded-2xl'>\n                <CalendarIcon />\n                {range?.from && range?.to\n                  ? `${range.from.toLocaleDateString()} - ${range.to.toLocaleDateString()}`\n                  : 'January 2025'}\n              </Button>\n            </PopoverTrigger>\n            <PopoverContent className='w-auto overflow-hidden p-0' align='end'>\n              <Calendar\n                className='w-full r rounded-full'\n                mode='range'\n                defaultMonth={range?.from}\n                selected={range}\n                onSelect={setRange}\n                startMonth={range?.from}\n                fixedWeeks\n                showOutsideDays\n                disabled={{\n                  after: new Date(2025, 0, 31),\n                  before: new Date(2025, 0, 1)\n                }}\n              />\n            </PopoverContent>\n          </Popover>\n        </CardAction>\n      </CardHeader>\n      <CardContent className='px-4 rounded-b-2xl'>\n        <ChartContainer config={chartConfig} className='aspect-auto h-62 w-full rounded-2xl'>\n          <BarChart\n            accessibilityLayer\n            data={filteredData}\n            margin={{\n              left: 12,\n              right: 12\n            }}\n          >\n            <CartesianGrid vertical={false} />\n            <XAxis\n              dataKey='date'\n              tickLine={false}\n              axisLine={false}\n              tickMargin={8}\n              minTickGap={20}\n              tickFormatter={value => {\n                const date = new Date(value)\n                return date.toLocaleDateString('en-US', { day: 'numeric' })\n              }}\n            />\n            <ChartTooltip\n              content={\n                <ChartTooltipContent\n                  className='w-37.5'\n                  nameKey='visitors'\n                  labelFormatter={value => {\n                    return new Date(value).toLocaleDateString('en-US', {\n                      month: 'short',\n                      day: 'numeric',\n                      year: 'numeric'\n                    })\n                  }}\n                />\n              }\n            />\n            <Bar dataKey='visitors' fill=\"#3b82f6\" radius={8} />\n          </BarChart>\n        </ChartContainer>\n        <div className='mt-6 text-center text-sm leading-relaxed text-muted-foreground sm:text-base sm:leading-normal'>\n          Analyze your sales trends and adjust your strategy for better results.\n        </div>\n      </CardContent>\n      <CardFooter className='border-t rounded-b-3xl'>\n        <div className='text-sm'>\n          Total sales: <span className='font-semibold'>{total.toLocaleString()}</span> units in January.\n        </div>\n      </CardFooter>\n    </Card>\n  )\n}\n\nexport default DatePicker13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-1",
      "type": "registry:component",
      "title": "Dialog 1",
      "description": "Dialog 1. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "alert-dialog",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-1.tsx",
          "type": "registry:component",
          "content": "import {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n  AlertDialogTrigger,\n} from '@/components/base-ui/alert-dialog';\nimport { Button } from '@/components/base-ui/button';\n\nimport type { FC } from 'react';\n\nconst Dialog1: FC = () => {\n  return (\n    <AlertDialog>\n      <AlertDialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 shadow-sm transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Alert Dialog\n        </Button>\n      </AlertDialogTrigger>\n      <AlertDialogContent className=\"rounded-3xl border border-zinc-200 bg-zinc-50/95 shadow-2xl backdrop-blur-md dark:border-zinc-800 dark:bg-zinc-950/95 dark:backdrop-blur-md\">\n        <AlertDialogHeader>\n          <AlertDialogTitle className=\"text-zinc-900 dark:text-zinc-100\">\n            Are you absolutely sure?\n          </AlertDialogTitle>\n          <AlertDialogDescription className=\"text-zinc-600 dark:text-zinc-400\">\n            This action cannot be undone. This will permanently delete your\n            account and remove your data from our servers.\n          </AlertDialogDescription>\n        </AlertDialogHeader>\n        <AlertDialogFooter>\n          <AlertDialogCancel className=\"rounded-2xl border border-zinc-300 bg-zinc-100 text-zinc-800 shadow hover:bg-zinc-200 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-200 dark:hover:bg-zinc-700\">\n            Cancel\n          </AlertDialogCancel>\n          <AlertDialogAction className=\"rounded-full bg-zinc-900 px-7 py-2.5 font-semibold text-white shadow transition hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200\">\n            Continue\n          </AlertDialogAction>\n        </AlertDialogFooter>\n      </AlertDialogContent>\n    </AlertDialog>\n  );\n};\n\nexport default Dialog1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-2",
      "type": "registry:component",
      "title": "Dialog 2",
      "description": "Dialog 2. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-2.tsx",
          "type": "registry:component",
          "content": "import { InfoIcon } from 'lucide-react';\n\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n  AlertDialogTrigger,\n} from '@/components/base-ui/alert-dialog';\nimport { Button } from '@/components/base-ui/button';\nimport type { FC } from 'react';\n\nconst Dialog2: FC = () => {\n  return (\n    <AlertDialog>\n      <AlertDialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 shadow-sm transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Alert Dialog (With Icon)\n        </Button>\n      </AlertDialogTrigger>\n      <AlertDialogContent className=\"border-border/40 dark:border-border/60 rounded-2xl border bg-white p-6 shadow-lg dark:bg-neutral-900\">\n        <AlertDialogHeader className=\"place-items-start text-left\">\n          <div className=\"mb-3 flex size-8 items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900/30\">\n            <InfoIcon className=\"size-4 text-blue-600 dark:text-blue-400\" />\n          </div>\n          <AlertDialogTitle className=\"text-base font-semibold text-neutral-900 dark:text-neutral-100\">\n            Heads up!\n          </AlertDialogTitle>\n          <AlertDialogDescription className=\"text-sm text-neutral-600 dark:text-neutral-300\">\n            This is a minimal dialog for simple confirmations or information.\n            Please proceed if you understand.\n            <br />\n            <br />\n            <span className=\"mt-2 block\">\n              If you have any questions, feel free to contact support at{' '}\n              <a\n                href=\"mailto:support@example.com\"\n                className=\"text-blue-600 underline dark:text-blue-400\"\n              >\n                support@example.com\n              </a>\n              .\n            </span>\n            <span className=\"mt-2 block\">\n              Note: Your changes will not be saved unless you confirm this\n              action.\n            </span>\n          </AlertDialogDescription>\n        </AlertDialogHeader>\n        <AlertDialogFooter className=\"mx-0 justify-end bg-transparent px-0 pt-4 pb-2\">\n          <AlertDialogCancel className=\"border-border/30 dark:border-border/50 rounded-xl border bg-neutral-100 text-neutral-700 transition hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-200 dark:hover:bg-neutral-700\">\n            Cancel\n          </AlertDialogCancel>\n          <AlertDialogAction className=\"rounded-xl bg-blue-600! px-6 py-2 font-semibold text-white! shadow transition hover:bg-blue-700! dark:bg-blue-500! dark:hover:bg-blue-600!\">\n            OK\n          </AlertDialogAction>\n        </AlertDialogFooter>\n      </AlertDialogContent>\n    </AlertDialog>\n  );\n};\n\nexport default Dialog2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-3",
      "type": "registry:component",
      "title": "Dialog 3",
      "description": "Dialog 3. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "button",
        "checkbox",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-3.tsx",
          "type": "registry:component",
          "content": "import { TriangleAlertIcon } from 'lucide-react';\n\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n  AlertDialogTrigger,\n} from '@/components/base-ui/alert-dialog';\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog3 = () => {\n  return (\n    <AlertDialog>\n      <AlertDialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 shadow-sm transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Alert Dialog Destructive\n        </Button>\n      </AlertDialogTrigger>\n      <AlertDialogContent className=\"border-border/40 dark:border-border/60 rounded-xl border bg-white p-7 shadow-xl dark:bg-neutral-900\">\n        <AlertDialogHeader className=\"place-items-start text-left\">\n          <div className=\"mb-2 flex size-12 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30\">\n            <TriangleAlertIcon className=\"size-6 text-red-600 dark:text-red-400\" />\n          </div>\n          <AlertDialogTitle className=\"text-base font-semibold text-neutral-900 dark:text-neutral-100\">\n            Delete this workspace?\n          </AlertDialogTitle>\n          <AlertDialogDescription className=\"text-sm text-neutral-600 dark:text-neutral-300\">\n            This action is permanent and cannot be undone. All associated data\n            will be removed forever.\n            <span className=\"mt-5 flex items-center justify-start gap-3\">\n              <Checkbox\n                id=\"terms\"\n                className=\"border-neutral-400 bg-white data-[state=checked]:border-red-600 data-[state=checked]:bg-red-600 data-[state=checked]:text-white dark:border-neutral-500 dark:bg-neutral-800 dark:data-[state=checked]:border-red-500 dark:data-[state=checked]:bg-red-500\"\n              />\n              <Label\n                htmlFor=\"terms\"\n                className=\"text-sm text-neutral-700 dark:text-neutral-200\"\n              >\n                I understand that this action is irreversible\n              </Label>\n            </span>\n          </AlertDialogDescription>\n        </AlertDialogHeader>\n        <AlertDialogFooter className=\"mx-0 justify-end bg-transparent px-0 pt-4 pb-2\">\n          <AlertDialogCancel className=\"border-border/30 dark:border-border/50 rounded-xl border bg-neutral-100 text-neutral-700 transition hover:bg-neutral-200 dark:bg-neutral-800 dark:text-neutral-200 dark:hover:bg-neutral-700\">\n            Cancel\n          </AlertDialogCancel>\n          <AlertDialogAction className=\"rounded-xl bg-red-600 px-6 py-2 font-semibold text-white shadow transition hover:bg-red-700 dark:bg-red-500 dark:text-white dark:hover:bg-red-600\">\n            Delete\n          </AlertDialogAction>\n        </AlertDialogFooter>\n      </AlertDialogContent>\n    </AlertDialog>\n  );\n};\n\nexport default Dialog3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-4",
      "type": "registry:component",
      "title": "Dialog 4",
      "description": "Dialog 4. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "scroll-area"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-4.tsx",
          "type": "registry:component",
          "content": "import { ChevronLeftIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { ScrollArea } from '@/components/base-ui/scroll-area';\n\nconst Dialog4 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 shadow-sm transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Scrollable Dialog\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"border-border/40 dark:border-border/60 flex max-h-[min(650px,90vh)] flex-col gap-0 overflow-hidden rounded-xl border bg-white p-0 shadow-xl sm:max-w-md dark:bg-neutral-900\">\n        <DialogHeader className=\"px-6 pt-6 pb-4 text-left\">\n          <DialogTitle className=\"text-lg font-semibold text-neutral-900 dark:text-neutral-100\">\n            v2.0 Release Notes\n          </DialogTitle>\n        </DialogHeader>\n\n        <ScrollArea className=\"flex-1 overflow-y-auto\">\n          <div className=\"px-6 pb-6\">\n            <DialogDescription className=\"text-neutral-600 dark:text-neutral-400\">\n              <div className=\"space-y-4 [&_strong]:font-semibold [&_strong]:text-neutral-900 dark:[&_strong]:text-neutral-100\">\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Overview:</strong>\n                  </p>\n                  <p>\n                    We are excited to announce the release of Version 2.0! This\n                    major update brings significant performance improvements, a\n                    redesigned user interface, and highly requested features to\n                    streamline your workflow.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>New Features:</strong>\n                  </p>\n                  <ul className=\"list-inside list-disc space-y-1\">\n                    <li>Real-time collaboration with multi-user editing</li>\n                    <li>Advanced data visualization with interactive charts</li>\n                    <li>Global search with lightning-fast indexing</li>\n                    <li>Dark mode support across the entire platform</li>\n                    <li>Customizable dashboards with drag-and-drop tiles</li>\n                  </ul>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>UI Improvements:</strong>\n                  </p>\n                  <ul className=\"list-inside list-disc space-y-1\">\n                    <li>Streamlined navigation for faster access to tools</li>\n                    <li>Enhanced accessibility with full keyboard support</li>\n                    <li>Modernized component library with Glassmorphism</li>\n                    <li>Improved mobile responsiveness for all pages</li>\n                  </ul>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Performance:</strong>\n                  </p>\n                  <p>\n                    Load times have been reduced by up to 40% thanks to our new\n                    caching engine and optimized asset delivery pipeline.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Bug Fixes:</strong>\n                  </p>\n                  <ul className=\"list-inside list-disc space-y-1\">\n                    <li>Fixed intermittent login failures on slow networks</li>\n                    <li>Resolved memory leaks in the analytics engine</li>\n                    <li>Corrected layout issues in the export PDF feature</li>\n                    <li>Patched security vulnerabilities in API endpoints</li>\n                  </ul>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Known Issues:</strong>\n                  </p>\n                  <p>\n                    The legacy export format (CSV) is currently disabled for\n                    large datasets while we finish the migration to our new\n                    streaming service.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Support:</strong>\n                  </p>\n                  <p>\n                    If you encounter any issues with this release, please reach\n                    out to our 24/7 technical support team or visit the\n                    community forums.\n                  </p>\n                </div>\n              </div>\n            </DialogDescription>\n          </div>\n        </ScrollArea>\n\n        <DialogFooter className=\"border-border/30 dark:border-border/60 m-0 flex flex-col-reverse items-stretch gap-2 border-t bg-transparent p-4 sm:flex-row sm:items-center sm:justify-end sm:px-6 sm:pb-6\">\n          <DialogClose asChild>\n            <Button\n              variant=\"ghost\"\n              className=\"flex w-full items-center justify-center gap-2 rounded-lg px-5 py-2.5 font-medium text-neutral-700 shadow-none transition hover:bg-neutral-100 sm:w-auto dark:text-neutral-200 dark:hover:bg-neutral-800\"\n            >\n              <ChevronLeftIcon className=\"size-4\" />\n              Back\n            </Button>\n          </DialogClose>\n          <Button\n            type=\"button\"\n            className=\"w-full rounded-lg border-none bg-linear-to-r from-blue-600 to-blue-400 px-7 py-2.5 font-semibold text-white shadow-md transition hover:from-blue-700 hover:to-blue-500 sm:w-auto dark:from-blue-500 dark:to-blue-400 dark:text-white dark:hover:from-blue-600 dark:hover:to-blue-500\"\n          >\n            Read More\n          </Button>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-5",
      "type": "registry:component",
      "title": "Dialog 5",
      "description": "Dialog 5. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "scroll-area"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-5.tsx",
          "type": "registry:component",
          "content": "import { ChevronLeftIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { ScrollArea } from '@/components/base-ui/scroll-area';\n\nconst Dialog5 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 shadow-sm transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Sticky Header Dialog\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"border-border/40 dark:border-border/60 flex max-h-[min(650px,90vh)] flex-col gap-0 overflow-hidden rounded-xl border bg-white p-0 shadow-xl sm:max-w-md dark:bg-neutral-900\">\n        <DialogHeader className=\"border-border/30 dark:border-border/60 border-b px-6 py-4 text-left\">\n          <DialogTitle className=\"text-lg font-semibold text-neutral-900 dark:text-neutral-100\">\n            Terms of Service Update\n          </DialogTitle>\n        </DialogHeader>\n\n        <ScrollArea className=\"flex-1 overflow-y-auto\">\n          <div className=\"p-6\">\n            <DialogDescription className=\"text-neutral-600 dark:text-neutral-400\">\n              <div className=\"space-y-4 [&_strong]:font-semibold [&_strong]:text-neutral-900 dark:[&_strong]:text-neutral-100\">\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Effective Date:</strong> October 1, 2026\n                  </p>\n                  <p>\n                    We have updated our Terms of Service to provide clarity on\n                    our data retention policies and to introduce new guidelines\n                    for API usage.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>1. Privacy Policy Adjustments</strong>\n                  </p>\n                  <p>\n                    To comply with new global privacy regulations, we have\n                    detailed our data collection methods, offering users more\n                    granular control over what information is shared.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>2. API Rate Limits</strong>\n                  </p>\n                  <p>\n                    We are introducing new rate limits for standard tier users\n                    to ensure platform stability. The new limit is 1,000\n                    requests per minute.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>3. Acceptable Use Policy</strong>\n                  </p>\n                  <p>\n                    Our acceptable use guidelines have been expanded to\n                    explicitly prohibit automated scraping of user profiles\n                    without prior consent.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>4. Subscription Renewals</strong>\n                  </p>\n                  <p>\n                    Auto-renewal terms have been simplified. You will now\n                    receive a notification 7 days before any automatic charges\n                    are applied to your account.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>5. Dispute Resolution</strong>\n                  </p>\n                  <p>\n                    The governing law for arbitration has been updated to the\n                    state of Delaware. All informal dispute resolution steps\n                    must be exhausted before arbitration can commence.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Agreement:</strong>\n                  </p>\n                  <p>\n                    By continuing to access or use our services after the\n                    effective date, you agree to be bound by the revised Terms.\n                    If you do not agree, you must stop using the services.\n                  </p>\n                </div>\n              </div>\n            </DialogDescription>\n          </div>\n\n          <DialogFooter className=\"border-border/30 dark:border-border/60 z-10 m-0 flex flex-col-reverse items-stretch gap-2 border-t bg-neutral-50/50 p-4 sm:flex-row sm:items-center sm:justify-end sm:px-6 sm:pb-6 dark:bg-neutral-900/50\">\n            <DialogClose asChild>\n              <Button\n                variant=\"ghost\"\n                className=\"flex w-full items-center justify-center gap-2 rounded-lg px-5 py-2.5 font-medium text-neutral-700 shadow-none transition hover:bg-neutral-100 sm:w-auto dark:text-neutral-200 dark:hover:bg-neutral-800\"\n              >\n                <ChevronLeftIcon className=\"size-4\" />\n                Decline\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"button\"\n              className=\"w-full rounded-lg bg-linear-to-r from-blue-600 to-blue-400 px-7 py-2.5 font-semibold text-white shadow-md transition hover:from-blue-700 hover:to-blue-500 sm:w-auto dark:from-blue-500 dark:to-blue-400 dark:text-white dark:hover:from-blue-600 dark:hover:to-blue-500\"\n            >\n              I Agree\n            </Button>\n          </DialogFooter>\n        </ScrollArea>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-6",
      "type": "registry:component",
      "title": "Dialog 6",
      "description": "Dialog 6. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "scroll-area"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-6.tsx",
          "type": "registry:component",
          "content": "import { ChevronLeftIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { ScrollArea } from '@/components/base-ui/scroll-area';\n\nconst Dialog6 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button variant=\"outline\" className=\"shadow-sm\">\n          Sticky Footer Dialog\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"border-border/40 dark:border-border/60 flex max-h-[min(650px,90vh)] flex-col gap-0 overflow-hidden rounded-xl border bg-white p-0 shadow-xl sm:max-w-md dark:bg-neutral-900 [&_[data-slot=dialog-close]]:top-4 [&_[data-slot=dialog-close]]:right-6 [&_[data-slot=dialog-close]]:bg-white/50 [&_[data-slot=dialog-close]]:backdrop-blur-sm dark:[&_[data-slot=dialog-close]]:bg-neutral-900/50\">\n        {/* Scrollable Content (Header + Body) */}\n        <ScrollArea className=\"flex-1 overflow-y-auto\">\n          <DialogHeader className=\"border-border/30 dark:border-border/60 border-b px-6 py-4 pr-14 text-left\">\n            <DialogTitle className=\"text-lg font-semibold text-neutral-900 dark:text-neutral-100\">\n              Security Audit Report\n            </DialogTitle>\n          </DialogHeader>\n\n          <div className=\"p-6\">\n            <DialogDescription className=\"text-neutral-600 dark:text-neutral-400\">\n              <div className=\"space-y-4 [&_strong]:font-semibold [&_strong]:text-neutral-900 dark:[&_strong]:text-neutral-100\">\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Assessment Summary:</strong>\n                  </p>\n                  <p>\n                    Our latest comprehensive security audit completed on October\n                    5, 2026, revealed zero critical vulnerabilities. However,\n                    several moderate network configuration warnings require your\n                    attention.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>1. Authentication Mechanisms</strong>\n                  </p>\n                  <p>\n                    Multi-factor authentication (MFA) enforcement is active for\n                    92% of administrative accounts. We recommend strictly\n                    enforcing MFA policies for the remaining legacy accounts\n                    within 14 days.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>2. Data Encryption</strong>\n                  </p>\n                  <p>\n                    All data at rest is now encrypted using AES-256 standards.\n                    Transit encryption utilizing TLS 1.3 is fully operational\n                    across all public-facing endpoints without any fallback to\n                    older protocols.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>3. Access Controls</strong>\n                  </p>\n                  <p>\n                    Role-Based Access Control (RBAC) schemas are properly\n                    segregated. However, 3 development-tier service accounts\n                    have overly permissive access to production databases.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>4. Third-Party Dependencies</strong>\n                  </p>\n                  <p>\n                    Automated scanning detected 4 outdated npm packages with\n                    known, medium-severity CVEs. The engineering team has been\n                    notified to bump these dependencies in the next sprint.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>5. Incident Response Readiness</strong>\n                  </p>\n                  <p>\n                    Simulated penetration tests indicated a rapid identification\n                    and mitigation response time averaging 14 minutes, well\n                    below our 30-minute SLA threshold.\n                  </p>\n                </div>\n                <div className=\"space-y-1\">\n                  <p>\n                    <strong>Recommendation:</strong>\n                  </p>\n                  <p>\n                    Please review the attached detailed artifacts and action the\n                    remediations for the service accounts and outdated packages\n                    by the end of Q4.\n                  </p>\n                </div>\n              </div>\n            </DialogDescription>\n          </div>\n        </ScrollArea>\n\n        {/* Sticky Footer */}\n        <DialogFooter className=\"border-border/30 dark:border-border/60 z-10 m-0 flex-col-reverse items-stretch gap-2 border-t bg-neutral-50/50 p-4 sm:flex-row sm:items-center sm:justify-end sm:px-6 sm:pb-6 dark:bg-neutral-900/50\">\n          <DialogClose asChild>\n            <Button\n              variant=\"outline\"\n              className=\"flex w-full items-center justify-center gap-2 rounded-full px-5 py-2.5 font-medium shadow-none sm:w-auto\"\n            >\n              <ChevronLeftIcon className=\"size-4\" />\n              Close\n            </Button>\n          </DialogClose>\n          <Button\n            type=\"button\"\n            className=\"claymorphism-action w-full rounded-full border-none px-7 py-2.5 font-semibold focus:ring-2 focus:ring-blue-400 focus:ring-offset-2 focus:outline-none sm:w-auto dark:focus:ring-offset-neutral-900\"\n          >\n            Export PDF\n          </Button>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-7",
      "type": "registry:component",
      "title": "Dialog 7",
      "description": "Dialog 7. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "scroll-area"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-7.tsx",
          "type": "registry:component",
          "content": "import React from 'react';\nimport { ChevronLeftIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { ScrollArea } from '@/components/base-ui/scroll-area';\n\nconst Dialog7: React.FC = () => {\n  return (\n    <Dialog>\n      <DialogTrigger asChild>\n        <Button variant=\"outline\" className=\"shadow-md\">\n          Fullscreen Dialog\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"flex h-[calc(100vh-2rem)] w-[calc(100vw-2rem)] flex-col justify-between gap-0 overflow-hidden rounded-2xl p-0 shadow-2xl sm:max-w-[calc(100vw-2rem)]\">\n        <ScrollArea className=\"flex flex-col justify-between overflow-hidden\">\n          <DialogHeader className=\"contents space-y-0 text-left\">\n            <DialogTitle className=\"border-b px-6 py-6 text-2xl font-bold tracking-tight\">\n              Product Information\n            </DialogTitle>\n            <DialogDescription>\n              <div className=\"p-6\">\n                <div className=\"text-muted-foreground [&_strong]:text-foreground space-y-6 text-base [&_strong]:font-semibold\">\n                  <div className=\"space-y-2\">\n                    <p>\n                      <strong>Product Name:</strong> Watermelon UI Pro\n                    </p>\n                    <p className=\"leading-relaxed\">\n                      Watermelon UI Pro is a comprehensive, meticulously crafted\n                      component library designed to accelerate your development\n                      workflow and bring modern aesthetics to your Next.js\n                      applications instantly.\n                    </p>\n                  </div>\n                  <div className=\"space-y-2\">\n                    <p>\n                      <strong>Included Assets:</strong>\n                    </p>\n                    <ul className=\"ml-6 list-disc space-y-1\">\n                      <li>80+ Ready-to-use Advanced Components</li>\n                      <li>Fully Typed Next.js 14+ Integration</li>\n                      <li>Premium Claymorphism Design System</li>\n                      <li>Custom Framer Motion Animations</li>\n                      <li>Lifetime Free Updates</li>\n                      <li>Comprehensive Figma Master File</li>\n                    </ul>\n                  </div>\n                  <div className=\"space-y-2\">\n                    <p>\n                      <strong>Why Choose Watermelon:</strong>\n                    </p>\n                    <ul className=\"ml-6 list-disc space-y-1\">\n                      <li>\n                        Built natively for perfectly responsive modern layouts\n                      </li>\n                      <li>\n                        Easy customization through advanced Tailwind\n                        configurations\n                      </li>\n                      <li>Pixel-perfect spacing and typography constants</li>\n                      <li>\n                        Accessible out of the box with ARIA support and keyboard\n                        navigation\n                      </li>\n                      <li>\n                        Modular structure for keeping your bundle sizes\n                        absolutely minimal\n                      </li>\n                    </ul>\n                  </div>\n                  <div className=\"space-y-2\">\n                    <p>\n                      <strong>License Tier:</strong>\n                    </p>\n                    <p className=\"text-foreground text-lg font-medium\">\n                      $129.00{' '}\n                      <span className=\"text-muted-foreground text-sm font-normal\">\n                        (Unlimited Team License)\n                      </span>\n                    </p>\n                  </div>\n                  <div className=\"space-y-4 border-t pt-6\">\n                    <p className=\"text-lg\">\n                      <strong>Developer Feedback:</strong>\n                    </p>\n                    <div className=\"space-y-4\">\n                      <blockquote className=\"border-l-2 pl-4 italic\">\n                        &rdquo;Absolutely fantastic UI kit! Integrating it into\n                        our latest project saved us hundreds of hours and the\n                        final result looks world-class.&rdquo; - Alex R.\n                      </blockquote>\n                      <blockquote className=\"border-l-2 pl-4 italic\">\n                        &rdquo;Best purchase I&apos;ve made for my agency. The\n                        interactive elements feel so crisp and the code quality\n                        is just pristine.&rdquo; - Sarah L.\n                      </blockquote>\n                      <blockquote className=\"border-l-2 pl-4 italic\">\n                        &rdquo;Watermelon UI is a total game-changer for modern\n                        web aesthetics. Worth every cent!&rdquo; - David W.\n                      </blockquote>\n                    </div>\n                  </div>\n                  <div className=\"space-y-2 border-t pt-6\">\n                    <p>\n                      <strong>Refund Guarantee:</strong>\n                    </p>\n                    <p className=\"leading-relaxed\">\n                      We offer a confident 14-day money-back guarantee. If\n                      Watermelon doesn&apos;t dramatically improve your\n                      team&apos;s workflow, just let us know for a simple,\n                      no-questions-asked refund.\n                    </p>\n                  </div>\n                  <div className=\"space-y-2 border-t pt-6\">\n                    <p>\n                      <strong>Usage Terms:</strong>\n                    </p>\n                    <p className=\"leading-relaxed\">\n                      Licensed for unlimited personal and commercial projects.\n                      Redistribution or reselling of the raw source code\n                      components or templates is strictly prohibited.\n                    </p>\n                  </div>\n                </div>\n              </div>\n            </DialogDescription>\n          </DialogHeader>\n        </ScrollArea>\n        <DialogFooter className=\"bg-muted/40 flex-row items-center justify-end gap-3 border-t p-6 pb-10\">\n          <DialogClose asChild>\n            <Button variant=\"outline\" className=\"gap-2\">\n              <ChevronLeftIcon className=\"h-4 w-4\" />\n              Back\n            </Button>\n          </DialogClose>\n          <Button\n            type=\"button\"\n            className=\"mr-3 rounded-md border-none bg-blue-500 px-8 font-semibold text-white shadow-[inset_-4px_-4px_10px_rgba(0,0,0,0.2),inset_4px_4px_10px_rgba(255,255,255,0.4),6px_6px_16px_rgba(0,0,0,0.15)] transition-all duration-300 hover:scale-[1.02] hover:bg-blue-500 hover:brightness-110 active:scale-95 active:shadow-[inset_-2px_-2px_5px_rgba(0,0,0,0.2),inset_2px_2px_5px_rgba(255,255,255,0.4),2px_2px_5px_rgba(0,0,0,0.1)]\"\n          >\n            Read More\n          </Button>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-8",
      "type": "registry:component",
      "title": "Dialog 8",
      "description": "Dialog 8. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-8.tsx",
          "type": "registry:component",
          "content": "import React from 'react';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\n\nconst Dialog8: React.FC = () => {\n  return (\n    <Dialog>\n      <DialogTrigger asChild>\n        <Button variant=\"outline\" className=\"shadow-md\">\n          Terms & Conditions\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"bg-background sm:bg-background/95 flex max-h-[calc(100dvh-1.5rem)] w-[calc(100vw-1rem)] flex-col gap-0 overflow-hidden rounded-2xl border p-0 shadow-2xl sm:max-h-[70vh] sm:w-full sm:max-w-md sm:border-white/10 sm:backdrop-blur-xl\">\n        <DialogHeader className=\"bg-muted/20 shrink-0 border-b px-4 py-4 text-left sm:px-6\">\n          <DialogTitle className=\"text-xl font-bold tracking-tight\">\n            Terms and Conditions\n          </DialogTitle>\n        </DialogHeader>\n\n        <div className=\"text-muted-foreground flex-1 overflow-y-auto px-4 py-5 text-sm sm:px-6\">\n          <div className=\"space-y-5\">\n            <section className=\"space-y-2\">\n              <h3 className=\"text-foreground text-base font-semibold\">\n                1. Introduction & Acceptance\n              </h3>\n              <p className=\"leading-relaxed\">\n                Welcome to Watermelon. These Terms and Conditions strictly\n                govern your active use of the Watermelon platform, our\n                development products, and all associated services. By accessing\n                or using our services, you definitively acknowledge that you\n                have read, fully understood, and agree to be bound by these\n                complete terms.\n              </p>\n            </section>\n\n            <section className=\"space-y-2\">\n              <h3 className=\"text-foreground text-base font-semibold\">\n                2. Licensing & Usage\n              </h3>\n              <p className=\"leading-relaxed\">\n                Subject to your absolute compliance with these strict Terms,\n                Watermelon grants you a limited, non-exclusive,\n                non-transferable, and highly revocable license to systematically\n                access and use the platform for your personal or internal\n                enterprise purposes. You may not blindly reproduce, blindly\n                distribute, or mass-create derivative template works without\n                explicit and verified written permission.\n              </p>\n            </section>\n\n            <section className=\"space-y-2\">\n              <h3 className=\"text-foreground text-base font-semibold\">\n                3. User Obligations\n              </h3>\n              <ul className=\"marker:text-primary/70 list-disc space-y-1.5 pl-5\">\n                <li>\n                  Systematically provide strictly accurate and completely\n                  up-to-date registration profile information.\n                </li>\n                <li>\n                  Mainstream the absolute security, confidentiality, and\n                  rotational privacy of your credentials.\n                </li>\n                <li>\n                  Avoid any strict usage that blatantly violates applicable\n                  complex local or international jurisdictional laws.\n                </li>\n                <li>\n                  Do not forcefully deploy any aggressive automated systems,\n                  rogue bots, or continuous data scrapers on the active network\n                  infrastructure.\n                </li>\n              </ul>\n            </section>\n\n            <section className=\"space-y-2\">\n              <h3 className=\"text-foreground text-base font-semibold\">\n                4. System Reliability\n              </h3>\n              <p className=\"leading-relaxed\">\n                Watermelon expressly shall not be aggressively liable for any\n                indirect, incidental, special, highly consequential, or strict\n                punitive damages rapidly resulting from your absolute access to\n                or usage of, or sheer inability to consistently access or\n                reliably use, the platform services.\n              </p>\n            </section>\n          </div>\n          <p className=\"bg-muted/30 text-foreground/80 mt-6 rounded-xl p-4 text-xs leading-relaxed\">\n            For highly complete enterprise licensing details and advanced\n            liability strict limitations, please comprehensively read our full{' '}\n            <a href=\"#\" className=\"text-primary font-semibold hover:underline\">\n              Legal Master Agreement\n            </a>\n            .\n          </p>\n        </div>\n\n        <DialogFooter className=\"bg-muted/40 mx-0 mb-0 shrink-0 flex-col-reverse items-stretch gap-2 border-t px-4 py-3 sm:flex-row sm:items-center sm:justify-end sm:gap-3 sm:px-6 sm:py-4\">\n          <DialogClose asChild>\n            <Button variant=\"outline\" className=\"h-9 w-full px-5 sm:w-auto\">\n              Cancel\n            </Button>\n          </DialogClose>\n          <DialogClose asChild>\n            <Button\n              type=\"button\"\n              className=\"h-9 w-full bg-blue-600 px-6 text-white hover:bg-blue-700 sm:w-auto\"\n            >\n              I Agree\n            </Button>\n          </DialogClose>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-9",
      "type": "registry:component",
      "title": "Dialog 9",
      "description": "Dialog 9. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-9.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nimport React from 'react';\nimport type { FormEvent } from 'react';\n\nconst Dialog9: React.FC = () => {\n  const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    // You can add your subscribe logic here\n    // Example: show a toast or send API request\n  };\n\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"secondary\"\n          className=\"rounded-lg bg-blue-600 px-6 py-2 font-semibold text-white shadow-md hover:bg-blue-700\"\n        >\n          Subscribe\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border-0 bg-white p-6 shadow-2xl sm:max-w-lg dark:bg-zinc-900\">\n        <DialogHeader className=\"space-y-1.5 text-left\">\n          <DialogTitle className=\"text-2xl font-bold text-zinc-900 dark:text-white\">\n            Join Our Community\n          </DialogTitle>\n          <DialogDescription className=\"text-sm text-zinc-600 dark:text-zinc-400\">\n            Enter your email to receive exclusive updates and member-only\n            resources. We respect your privacy.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 flex flex-col items-start gap-3 sm:flex-row sm:items-end\"\n          onSubmit={handleSubmit}\n        >\n          <div className=\"flex w-full flex-1 flex-col gap-2 text-left\">\n            <Label\n              htmlFor=\"email\"\n              className=\"text-sm font-medium text-zinc-700 dark:text-zinc-200\"\n            >\n              Email Address\n            </Label>\n            <Input\n              type=\"email\"\n              id=\"email\"\n              name=\"email\"\n              placeholder=\"you@example.com\"\n              required\n              className=\"w-full rounded-lg border-zinc-300 focus:ring-2 focus:ring-blue-500 dark:border-zinc-700\"\n            />\n          </div>\n          <Button\n            type=\"submit\"\n            className=\"w-full rounded-lg bg-blue-600 px-6 py-2.5 font-semibold text-white shadow-md transition-colors hover:bg-blue-700 sm:w-auto\"\n          >\n            Join Now\n          </Button>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-10",
      "type": "registry:component",
      "title": "Dialog 10",
      "description": "Dialog 10. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "button",
        "checkbox",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-10.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport React from 'react';\nimport type { FormEvent } from 'react';\n\nconst avatars = [\n  {\n    src: 'https://randomuser.me/api/portraits/men/32.jpg',\n    fallback: 'JD',\n    name: 'John Doe',\n  },\n  {\n    src: 'https://randomuser.me/api/portraits/women/44.jpg',\n    fallback: 'AS',\n    name: 'Alice Smith',\n  },\n  {\n    src: 'https://randomuser.me/api/portraits/men/65.jpg',\n    fallback: 'BM',\n    name: 'Bob Martin',\n  },\n];\n\nconst Dialog10: React.FC = () => {\n  const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    // Add your referral logic here\n  };\n\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"secondary\"\n          className=\"rounded-xl border-0 bg-blue-600 px-7 py-2.5 font-bold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:bg-blue-700 focus:ring-4 focus:ring-blue-200\"\n        >\n          Refer & Earn\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border-0 bg-white p-6 shadow-2xl sm:max-w-xl dark:bg-zinc-900\">\n        <DialogHeader className=\"text-left\">\n          <DialogTitle className=\"text-2xl font-bold text-zinc-900 dark:text-white\">\n            Invite Friends & Unlock Rewards\n          </DialogTitle>\n          <DialogDescription className=\"text-sm text-zinc-600 dark:text-zinc-400\">\n            Invite your friends to join and you'll both receive exclusive\n            rewards.\n          </DialogDescription>\n        </DialogHeader>\n        <form className=\"mt-2 flex flex-col gap-4\" onSubmit={handleSubmit}>\n          <div className=\"flex flex-1 flex-col gap-2 text-left\">\n            <Label\n              htmlFor=\"email\"\n              className=\"text-sm font-medium text-zinc-700 dark:text-zinc-200\"\n            >\n              Friend's Email(s)\n            </Label>\n            <Input\n              type=\"text\"\n              id=\"email\"\n              name=\"email\"\n              placeholder=\"Enter emails, separated by commas\"\n              required\n              className=\"w-full rounded-lg border-zinc-300 focus:ring-2 focus:ring-blue-500 dark:border-zinc-700\"\n            />\n          </div>\n          <div className=\"flex items-center gap-3\">\n            <Checkbox id=\"terms\" />\n            <Label\n              htmlFor=\"terms\"\n              className=\"text-sm text-zinc-700 dark:text-zinc-200\"\n            >\n              I confirm my friends have consented to be invited.\n            </Label>\n          </div>\n          <div className=\"flex -space-x-2\">\n            {avatars.map((avatar, index) => (\n              <Avatar key={index} className=\"ring-background ring-2\">\n                <AvatarImage src={avatar.src} alt={avatar.name} />\n                <AvatarFallback className=\"text-xs\">\n                  {avatar.fallback}\n                </AvatarFallback>\n              </Avatar>\n            ))}\n            <Avatar className=\"ring-background ring-2\">\n              <AvatarFallback className=\"text-xs\">+10</AvatarFallback>\n            </Avatar>\n          </div>\n          <DialogFooter className=\"items-stretch gap-2 border-none bg-transparent shadow-none sm:items-center sm:justify-end\">\n            <DialogClose asChild>\n              <Button\n                variant=\"outline\"\n                className=\"w-full rounded-xl px-6 py-2 font-semibold sm:w-auto\"\n              >\n                Cancel\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-xl border-0 bg-blue-600 px-7 py-2.5 font-bold text-white shadow transition-all duration-200 hover:scale-105 hover:bg-blue-700 focus:ring-4 focus:ring-blue-200\"\n            >\n              Send Invites\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-11",
      "type": "registry:component",
      "title": "Dialog 11",
      "description": "Dialog 11. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "dialog",
        "label",
        "radio-group",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-11.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport { Frown, Meh, Smile, Laugh, Angry } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\nimport { Textarea } from '@/components/base-ui/textarea';\nimport React from 'react';\n\nconst Dialog11 = () => {\n  const id = useId();\n\n  const ratings = [\n    {\n      value: '1',\n      label: 'Very Dissatisfied',\n      icon: <Angry size={22} strokeWidth={2} />,\n    },\n    {\n      value: '2',\n      label: 'Dissatisfied',\n      icon: <Frown size={22} strokeWidth={2} />,\n    },\n    { value: '3', label: 'Neutral', icon: <Meh size={22} strokeWidth={2} /> },\n    {\n      value: '4',\n      label: 'Satisfied',\n      icon: <Smile size={22} strokeWidth={2} />,\n    },\n    {\n      value: '5',\n      label: 'Very Satisfied',\n      icon: <Laugh size={22} strokeWidth={2} />,\n    },\n  ];\n\n  const [selectedRating, setSelectedRating] = React.useState('3');\n\n  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    // Add your feedback logic here\n  };\n\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-lg border border-blue-200 bg-blue-50 px-6 py-2 font-medium text-blue-700 shadow-[inset_2px_2px_8px_0_rgba(255,255,255,0.18),_inset_-2px_-2px_8px_0_rgba(37,99,235,0.10)] transition-all hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-900 dark:text-blue-200 dark:hover:bg-blue-800\"\n          style={{\n            boxShadow:\n              'inset 2px 2px 8px 0 rgba(255,255,255,0.18), inset -2px -2px 8px 0 rgba(37,99,235,0.10), 0 2px 8px 0 rgba(37,99,235,0.08)',\n          }}\n        >\n          Feedback\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border-0 bg-white p-6 shadow-xl sm:max-w-md dark:bg-zinc-900\">\n        <DialogHeader className=\"text-left\">\n          <DialogTitle className=\"text-2xl font-bold text-zinc-900 dark:text-zinc-100\">\n            Feedback\n          </DialogTitle>\n          <DialogDescription className=\"text-sm text-zinc-600 dark:text-zinc-400\">\n            Help us improve by sharing your thoughts.\n          </DialogDescription>\n        </DialogHeader>\n        <form className=\"mt-2 flex flex-col gap-4\" onSubmit={handleSubmit}>\n          <fieldset className=\"mb-2 space-y-2 text-left\">\n            <legend className=\"text-sm font-medium text-zinc-700 dark:text-zinc-300\">\n              How was your experience today?\n            </legend>\n            <RadioGroup\n              className=\"mt-2 flex items-center justify-start gap-2\"\n              value={selectedRating}\n              name=\"rating\"\n              onValueChange={setSelectedRating}\n            >\n              {ratings.map((rating) => (\n                <label\n                  key={`${id}-${rating.value}`}\n                  className={`relative flex h-12 w-12 cursor-pointer items-center justify-center rounded-full border transition-all outline-none ${\n                    selectedRating === rating.value\n                      ? 'border-blue-600 bg-blue-50 ring-4 ring-blue-100 dark:border-blue-500 dark:bg-blue-500/10 dark:ring-blue-500/20'\n                      : 'border-zinc-300 bg-transparent hover:bg-zinc-100 dark:border-zinc-700 dark:hover:bg-zinc-800'\n                  }`}\n                  aria-checked={selectedRating === rating.value}\n                >\n                  <RadioGroupItem\n                    id={`${id}-${rating.value}`}\n                    value={rating.value}\n                    className=\"peer sr-only\"\n                  />\n                  <span\n                    className={`absolute inset-0 flex items-center justify-center transition-all duration-200 ${\n                      selectedRating === rating.value\n                        ? 'scale-110 text-blue-600 dark:text-blue-500'\n                        : 'text-zinc-500 dark:text-zinc-400'\n                    }`}\n                  >\n                    {rating.icon}\n                  </span>\n                </label>\n              ))}\n            </RadioGroup>\n          </fieldset>\n          <div className=\"grid gap-2 text-left\">\n            <Label\n              htmlFor=\"feedback-message\"\n              className=\"text-sm font-medium text-zinc-700 dark:text-zinc-200\"\n            >\n              Additional comments\n            </Label>\n            <Textarea\n              placeholder=\"Type your feedback here...\"\n              id=\"feedback-message\"\n              name=\"message\"\n              required\n              className=\"w-full rounded-lg border-zinc-300 bg-white text-zinc-900 placeholder:text-xs focus:ring-2 focus:ring-zinc-400 sm:placeholder:text-sm dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\"\n            />\n            <p className=\"text-right text-xs text-zinc-400\">0/500 characters</p>\n          </div>\n          <div className=\"flex items-center gap-3 text-left\">\n            <div className=\"relative\">\n              <Checkbox\n                id=\"consent\"\n                className=\"peer data-[state=checked]:border-blue-600 data-[state=checked]:bg-white data-[state=checked]:ring-2 data-[state=checked]:ring-blue-200\"\n              />\n              <style>{`\n                .peer[data-state=\"checked\"] svg {\n                  color: #2563eb !important;\n                  stroke: #2563eb !important;\n                }\n              `}</style>\n            </div>\n            <Label\n              htmlFor=\"consent\"\n              className=\"text-sm text-zinc-600 dark:text-zinc-300\"\n            >\n              I consent to being contacted about my feedback\n            </Label>\n          </div>\n          <DialogFooter className=\"gap-2 border-none bg-transparent shadow-none sm:justify-end\">\n            <DialogClose asChild>\n              <Button\n                variant=\"outline\"\n                className=\"w-full rounded-lg px-6 py-2.5 font-medium sm:w-auto\"\n              >\n                Cancel\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"w-full rounded-lg border-0 bg-green-600 px-6 py-2.5 font-semibold text-white shadow-[inset_2px_2px_8px_0_rgba(255,255,255,0.18),_inset_-2px_-2px_8px_0_rgba(22,163,74,0.10)] transition-all duration-200 hover:bg-green-700 sm:w-auto\"\n              style={{\n                boxShadow:\n                  'inset 2px 2px 8px 0 rgba(255,255,255,0.18), inset -2px -2px 8px 0 rgba(22,163,74,0.10), 0 2px 8px 0 rgba(22,163,74,0.08)',\n              }}\n            >\n              Submit\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-12",
      "type": "registry:component",
      "title": "Dialog 12",
      "description": "Dialog 12. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "input-otp",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dialog"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-12.tsx",
          "type": "registry:component",
          "content": "import React, { useEffect, useRef, useState } from 'react';\n\nimport { CheckIcon, MailIcon } from 'lucide-react';\n\nimport { OTPInput, type SlotProps } from 'input-otp';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\n\nimport { cn } from '@/lib/utils';\n\nconst CORRECT_CODE = '11208';\n\nconst Dialog12: React.FC = () => {\n  const [value, setValue] = useState<string>('');\n  const [hasGuessed, setHasGuessed] = useState<boolean | undefined>(undefined);\n  const inputRef = useRef<HTMLInputElement>(null);\n  const closeButtonRef = useRef<HTMLButtonElement>(null);\n\n  useEffect(() => {\n    if (hasGuessed) {\n      closeButtonRef.current?.focus();\n    }\n  }, [hasGuessed]);\n\n  async function onSubmit(e?: React.FormEvent<HTMLFormElement>) {\n    e?.preventDefault?.();\n    inputRef.current?.select();\n    await new Promise((r) => setTimeout(r, 100));\n    setHasGuessed(value === CORRECT_CODE);\n    setValue('');\n    setTimeout(() => {\n      inputRef.current?.blur();\n    }, 20);\n  }\n\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-2xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-700 shadow-xl transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-200 dark:hover:bg-zinc-800\"\n          style={{\n            boxShadow:\n              '0 6px 32px 0 rgba(24,24,27,0.16), 0 1.5px 6px 0 rgba(24,24,27,0.10)',\n          }}\n        >\n          Get OTP Code\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border bg-white p-6 shadow-2xl sm:max-w-md dark:bg-zinc-900\">\n        <div className=\"flex flex-col items-center gap-3\">\n          <div\n            className={cn(\n              'flex size-10 shrink-0 items-center justify-center rounded-2xl border border-zinc-200 bg-zinc-100 shadow-lg dark:border-zinc-700 dark:bg-zinc-800',\n              {\n                'border-zinc-300 bg-zinc-200 dark:border-zinc-600 dark:bg-zinc-700':\n                  hasGuessed,\n              },\n            )}\n            aria-hidden=\"true\"\n          >\n            {hasGuessed ? (\n              <CheckIcon\n                className=\"text-zinc-700 dark:text-zinc-200\"\n                strokeWidth={1}\n              />\n            ) : (\n              <MailIcon\n                className=\"text-zinc-400 dark:text-zinc-500\"\n                strokeWidth={1}\n              />\n            )}\n          </div>\n          <DialogHeader className=\"text-center\">\n            <DialogTitle className=\"text-base font-semibold text-zinc-900 dark:text-zinc-100\">\n              {hasGuessed ? 'OTP Verified' : 'Enter OTP Code'}\n            </DialogTitle>\n            <DialogDescription className=\"text-sm text-zinc-600 dark:text-zinc-300\">\n              {hasGuessed ? (\n                <span>\n                  Your code was accepted.\n                  <br />\n                  Welcome! Verification complete.\n                </span>\n              ) : (\n                <span>\n                  Enter the 5-digit code sent to{' '}\n                  <strong>exa**le@gmail.com</strong>.<br />\n                  This helps keep your account secure.\n                </span>\n              )}\n            </DialogDescription>\n          </DialogHeader>\n        </div>\n\n        {hasGuessed ? (\n          <div className=\"mt-4 text-center\">\n            <DialogClose>\n              <Button\n                type=\"button\"\n                ref={closeButtonRef}\n                className=\"rounded-2xl border-0 bg-zinc-800 px-6 py-2 font-semibold text-white shadow-xl transition-all duration-200 hover:bg-zinc-700\"\n              >\n                Continue\n              </Button>\n            </DialogClose>\n          </div>\n        ) : (\n          <div className=\"mt-2 space-y-4\">\n            <div className=\"flex justify-center\">\n              <OTPInput\n                id=\"confirmation-code\"\n                ref={inputRef}\n                value={value}\n                onChange={setValue}\n                containerClassName=\"flex items-center gap-3 has-disabled:opacity-50\"\n                maxLength={5}\n                onFocus={() => setHasGuessed(undefined)}\n                render={({ slots }) => (\n                  <div className=\"flex gap-2\">\n                    {slots.map((slot, idx) => (\n                      <Slot key={idx} {...slot} />\n                    ))}\n                  </div>\n                )}\n                onComplete={onSubmit}\n              />\n            </div>\n            {hasGuessed === false && (\n              <p\n                className=\"text-center text-xs text-red-500 dark:text-red-400\"\n                role=\"alert\"\n                aria-live=\"polite\"\n              >\n                Invalid code. Please try again.\n              </p>\n            )}\n            <p className=\"text-center text-xs text-zinc-500 dark:text-zinc-400\">\n              Didn&apos;t get a code?{' '}\n              <a\n                className=\"text-zinc-700 hover:underline dark:text-zinc-200\"\n                href=\"#\"\n              >\n                Resend\n              </a>\n            </p>\n          </div>\n        )}\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nfunction Slot(props: SlotProps) {\n  return (\n    <div\n      className={cn(\n        'border-input flex size-9 items-center justify-center rounded-2xl border bg-zinc-50 font-medium text-zinc-900 shadow-md transition-[color,box-shadow] dark:bg-zinc-800 dark:text-zinc-100',\n        {\n          'z-10 border-zinc-500 ring-[3px] ring-zinc-200/50': props.isActive,\n          'border-zinc-300 dark:border-zinc-700': !props.isActive,\n        },\n      )}\n      style={{\n        boxShadow: props.isActive\n          ? '0 4px 16px 0 rgba(24,24,27,0.10)'\n          : undefined,\n      }}\n    >\n      {props.char !== null && <div>{props.char}</div>}\n    </div>\n  );\n}\n\nexport default Dialog12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-13",
      "type": "registry:component",
      "title": "Dialog 13",
      "description": "Dialog 13. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "checkbox",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-13.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport type React from 'react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog13 = () => {\n  const id = useId();\n\n  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    // Add form submission logic here\n  };\n\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-teal-200 bg-teal-50 px-6 py-2 font-medium text-teal-800 transition-all hover:bg-teal-100 dark:border-cyan-800 dark:bg-cyan-950 dark:text-cyan-100 dark:hover:bg-cyan-900\"\n        >\n          Sign Up\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:max-w-md dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader className=\"space-y-1.5 text-left\">\n          <DialogTitle className=\"text-2xl font-bold text-zinc-900 dark:text-zinc-100\">\n            Create your account\n          </DialogTitle>\n          <DialogDescription className=\"text-sm text-zinc-600 dark:text-zinc-400\">\n            Sign up free to get started, no card needed.\n          </DialogDescription>\n        </DialogHeader>\n        <form className=\"mt-2 flex flex-col gap-4\" onSubmit={handleSubmit}>\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"first-name\">First name</Label>\n              <Input\n                id=\"first-name\"\n                name=\"firstname\"\n                placeholder=\"e.g. Alex\"\n                required\n              />\n            </div>\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"last-name\">Last name</Label>\n              <Input\n                id=\"last-name\"\n                name=\"lastname\"\n                placeholder=\"e.g. Smith\"\n                required\n              />\n            </div>\n          </div>\n          <div className=\"grid gap-2\">\n            <Label htmlFor=\"email\">Email address</Label>\n            <Input\n              type=\"email\"\n              id=\"email\"\n              name=\"useremail\"\n              placeholder=\"alex@email.com\"\n              required\n            />\n          </div>\n          <div className=\"grid gap-2\">\n            <Label htmlFor=\"password\">Create password</Label>\n            <Input\n              type=\"password\"\n              id=\"password\"\n              name=\"userpassword\"\n              placeholder=\"At least 8 characters\"\n              required\n            />\n          </div>\n          <div className=\"mt-1 flex items-start gap-3\">\n            <Checkbox\n              id={id}\n              className=\"mt-0.5 focus-visible:ring-teal-600/20 data-[state=checked]:border-teal-600 data-[state=checked]:bg-teal-600 dark:focus-visible:ring-cyan-500/40 dark:data-[state=checked]:border-cyan-500 dark:data-[state=checked]:bg-cyan-500\"\n              defaultChecked\n              required\n            />\n            <Label\n              htmlFor={id}\n              className=\"block text-sm leading-snug font-normal text-zinc-600 dark:text-zinc-300\"\n            >\n              <span className=\"inline\">\n                I agree to the{' '}\n                <a\n                  href=\"#\"\n                  className=\"font-medium text-zinc-900 underline transition-colors hover:no-underline dark:text-zinc-100\"\n                >\n                  Terms of Service\n                </a>{' '}\n                and{' '}\n                <a\n                  href=\"#\"\n                  className=\"font-medium text-zinc-900 underline transition-colors hover:no-underline dark:text-zinc-100\"\n                >\n                  Privacy Policy\n                </a>\n              </span>\n            </Label>\n          </div>\n          <DialogFooter className=\"m-0 mt-2 flex-col gap-3 border-none bg-transparent p-0 pt-4 sm:flex-col\">\n            <Button\n              type=\"submit\"\n              className=\"w-full rounded-xl bg-teal-600 py-2.5 font-semibold text-white shadow-md transition-all hover:bg-teal-700 focus-visible:ring-teal-600 dark:bg-cyan-600 dark:hover:bg-cyan-700 dark:focus-visible:ring-cyan-500\"\n            >\n              Create account\n            </Button>\n            <div className=\"flex items-center gap-4 before:h-px before:flex-1 before:bg-zinc-200 after:h-px after:flex-1 after:bg-zinc-200 dark:before:bg-zinc-700 dark:after:bg-zinc-700\">\n              <span className=\"text-xs font-medium tracking-wider text-zinc-400 uppercase dark:text-zinc-500\">\n                Or sign up with\n              </span>\n            </div>\n            <Button\n              variant=\"outline\"\n              className=\"flex w-full items-center gap-2 rounded-xl border border-zinc-200 bg-white py-2.5 font-medium text-zinc-900 shadow-sm transition-all hover:bg-zinc-50 focus-visible:ring-teal-600 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800 dark:focus-visible:ring-cyan-500\"\n            >\n              <img\n                src=\"https://api.iconify.design/logos:google-icon.svg\"\n                alt=\"Google Icon\"\n                className=\"size-4\"\n              />\n              Continue with Google\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-14",
      "type": "registry:component",
      "title": "Dialog 14",
      "description": "Dialog 14. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-14.tsx",
          "type": "registry:component",
          "content": "import { LogInIcon } from 'lucide-react';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport type React from 'react';\n\nconst Dialog14 = () => {\n  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    // Add sign-in logic here\n  };\n\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-blue-200 bg-blue-50 px-6 py-2 font-medium text-blue-800 transition-all hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-100 dark:hover:bg-blue-900\"\n        >\n          Sign In\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-8 shadow-xl sm:max-w-sm dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader className=\"items-center\">\n          <div className=\"mb-4 flex size-12 items-center justify-center rounded-full bg-blue-600/10 sm:mx-0 dark:bg-blue-400/10\">\n            <LogInIcon className=\"size-6 text-blue-600 dark:text-blue-400\" />\n          </div>\n          <DialogTitle className=\"text-lg font-semibold text-blue-900 dark:text-blue-100\">\n            Sign in to your account\n          </DialogTitle>\n          <DialogDescription className=\"text-center text-zinc-600 dark:text-zinc-300\">\n            Access your workspace and collaborate instantly.\n          </DialogDescription>\n        </DialogHeader>\n        <form className=\"mt-2 flex flex-col gap-4\" onSubmit={handleSubmit}>\n          <div className=\"grid gap-2\">\n            <Label htmlFor=\"email\">Email address</Label>\n            <Input\n              type=\"email\"\n              id=\"email\"\n              name=\"useremail\"\n              placeholder=\"you@email.com\"\n              required\n            />\n          </div>\n          <div className=\"grid gap-2\">\n            <Label htmlFor=\"password\">Password</Label>\n            <Input\n              type=\"password\"\n              id=\"password\"\n              name=\"userpassword\"\n              placeholder=\"Your password\"\n              required\n            />\n          </div>\n          <DialogFooter className=\"flex-col gap-3 border-none bg-transparent pt-4 sm:flex-col\">\n            <Button\n              type=\"submit\"\n              className=\"w-full rounded-xl bg-blue-600 py-2.5 font-semibold text-white transition-all hover:bg-blue-700 focus-visible:ring-blue-600 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus-visible:ring-blue-500\"\n            >\n              Sign In\n            </Button>\n            <div className=\"flex items-center gap-4 before:h-px before:flex-1 before:bg-zinc-200 after:h-px after:flex-1 after:bg-zinc-200 dark:before:bg-zinc-700 dark:after:bg-zinc-700\">\n              <span className=\"text-xs text-zinc-400 dark:text-zinc-500\">\n                Or sign in with\n              </span>\n            </div>\n            <div className=\"flex flex-wrap items-center justify-center gap-4\">\n              <Button\n                variant=\"outline\"\n                className=\"flex-1 border border-zinc-200 bg-white text-zinc-900 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700\"\n              >\n                <img\n                  src=\"https://api.iconify.design/logos:google-icon.svg\"\n                  alt=\"Google Icon\"\n                  className=\"size-4\"\n                />\n              </Button>\n              <Button\n                variant=\"outline\"\n                className=\"flex-1 border border-zinc-200 bg-white text-zinc-900 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700\"\n              >\n                <img\n                  src=\"https://api.iconify.design/simple-icons:x.svg\"\n                  alt=\"X Icon\"\n                  className=\"size-3 dark:invert\"\n                />\n              </Button>\n              <Button\n                variant=\"outline\"\n                className=\"flex-1 border border-zinc-200 bg-white text-zinc-900 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700\"\n              >\n                <img\n                  src=\"https://api.iconify.design/logos:facebook.svg\"\n                  alt=\"Facebook Icon\"\n                  className=\"size-4\"\n                />\n              </Button>\n              <Button\n                variant=\"outline\"\n                className=\"flex-1 border border-zinc-200 bg-white text-zinc-900 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700\"\n              >\n                <img\n                  src=\"https://api.iconify.design/logos:github-icon.svg\"\n                  alt=\"GitHub Icon\"\n                  className=\"size-4 dark:invert\"\n                />\n              </Button>\n            </div>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-15",
      "type": "registry:component",
      "title": "Dialog 15",
      "description": "Dialog 15. A dialog component for displaying important information or prompts.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-15.tsx",
          "type": "registry:component",
          "content": "import { UserPlusIcon } from 'lucide-react';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogContent,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\ntype Friend = {\n  src: string;\n  fallback: string;\n  name: string;\n  mail: string;\n};\n\nconst friends: Friend[] = [\n  {\n    src: 'https://images.unsplash.com/photo-1508214751196-bcfd4ca60f91?auto=format&fit=facearea&w=128&h=128&facepad=2&q=80',\n    fallback: 'AL',\n    name: 'Alex Lee',\n    mail: 'alex.lee@email.com',\n  },\n  {\n    src: 'https://images.unsplash.com/photo-1511367461989-f85a21fda167?auto=format&fit=facearea&w=128&h=128&facepad=2&q=80',\n    fallback: 'MS',\n    name: 'Maria Silva',\n    mail: 'maria.silva@email.com',\n  },\n  {\n    src: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=facearea&w=128&h=128&facepad=2&q=80',\n    fallback: 'JP',\n    name: 'John Park',\n    mail: 'john.park@email.com',\n  },\n  {\n    src: 'https://images.unsplash.com/photo-1517841905240-472988babdf9?auto=format&fit=facearea&w=128&h=128&facepad=2&q=80',\n    fallback: 'SK',\n    name: 'Sara Kim',\n    mail: 'sara.kim@email.com',\n  },\n  {\n    src: 'https://images.unsplash.com/photo-1465101046530-73398c7f28ca?auto=format&fit=facearea&w=128&h=128&facepad=2&q=80',\n    fallback: 'RM',\n    name: 'Ravi Mehra',\n    mail: 'ravi.mehra@email.com',\n  },\n  {\n    src: 'https://images.unsplash.com/photo-1529626455594-4ff0802cfb7e?auto=format&fit=facearea&w=128&h=128&facepad=2&q=80',\n    fallback: 'EL',\n    name: 'Emma Li',\n    mail: 'emma.li@email.com',\n  },\n];\n\nconst Dialog15 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Invite\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-8 shadow-xl sm:max-w-lg dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader className=\"text-center\">\n          <DialogTitle className=\"text-xl text-zinc-900 dark:text-zinc-100\">\n            Invite new members\n          </DialogTitle>\n        </DialogHeader>\n        <form\n          className=\"flex gap-4 max-sm:flex-col\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle invite */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"invite-name\">Name</Label>\n            <Input\n              id=\"invite-name\"\n              name=\"invite-name\"\n              placeholder=\"Full name\"\n              required\n            />\n            <Label htmlFor=\"invite-email\" className=\"mt-2\">\n              Email\n            </Label>\n            <Input\n              type=\"email\"\n              id=\"invite-email\"\n              name=\"invite-email\"\n              placeholder=\"name@email.com\"\n              required\n            />\n          </div>\n          <Button\n            type=\"submit\"\n            className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 sm:self-end dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n          >\n            Send Invite\n          </Button>\n        </form>\n        <p className=\"mt-2 text-zinc-700 dark:text-zinc-300\">Invite Friends</p>\n        <ul className=\"space-y-4\">\n          {friends.map((item, index) => (\n            <li key={index} className=\"flex items-center justify-between gap-3\">\n              <div className=\"flex items-center gap-3 max-[420px]:w-50\">\n                <Avatar className=\"size-10\">\n                  <AvatarImage src={item.src} alt={item.name} />\n                  <AvatarFallback className=\"text-xs\">\n                    {item.fallback}\n                  </AvatarFallback>\n                </Avatar>\n                <div className=\"flex flex-1 flex-col overflow-hidden\">\n                  <span className=\"text-zinc-900 dark:text-zinc-100\">\n                    {item.name}\n                  </span>\n                  <span className=\"truncate text-sm text-zinc-500 dark:text-zinc-400\">\n                    {item.mail}\n                  </span>\n                </div>\n              </div>\n              <Button\n                size=\"sm\"\n                className=\"rounded-lg bg-zinc-200 text-zinc-900 hover:bg-zinc-300 focus-visible:ring-zinc-400 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:focus-visible:ring-zinc-600\"\n              >\n                <UserPlusIcon className=\"mr-1 size-4\" />\n                Invite\n              </Button>\n            </li>\n          ))}\n        </ul>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-16",
      "type": "registry:component",
      "title": "Dialog 16",
      "description": "Dialog 16. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-16.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog16 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Top left align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:top-0 sm:left-0 sm:m-6 sm:max-w-[425px] sm:translate-x-0 sm:translate-y-0 dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-17",
      "type": "registry:component",
      "title": "Dialog 17",
      "description": "Dialog 17. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-17.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog17 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Top align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"top-0 mt-6 translate-y-0 rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:max-w-[425px] dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-18",
      "type": "registry:component",
      "title": "Dialog 18",
      "description": "Dialog 18. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-18.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog18 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Top right align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:top-0 sm:right-0 sm:left-auto sm:m-6 sm:max-w-[425px] sm:translate-x-0 sm:translate-y-0 dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-19",
      "type": "registry:component",
      "title": "Dialog 19",
      "description": "Dialog 19. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-19.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog19 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Middle left align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:left-0 sm:ml-6 sm:max-w-[425px] sm:translate-x-0 dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-20",
      "type": "registry:component",
      "title": "Dialog 20",
      "description": "Dialog 20. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-20.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog20 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Middle right align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:right-0 sm:left-auto sm:mr-6 sm:max-w-[425px] sm:translate-x-0 dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-21",
      "type": "registry:component",
      "title": "Dialog 21",
      "description": "Dialog 21. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-21.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog21 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Bottom left align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:top-auto sm:bottom-0 sm:left-0 sm:m-6 sm:max-w-[425px] sm:translate-x-0 sm:translate-y-0 dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-22",
      "type": "registry:component",
      "title": "Dialog 22",
      "description": "Dialog 22. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-22.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog22 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Bottom align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"top-auto bottom-0 mb-6 translate-y-0 rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:max-w-[425px] dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog22;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog-23",
      "type": "registry:component",
      "title": "Dialog 23",
      "description": "Dialog 23. A dialog component for displaying important information or prompts.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/dialog-23.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/base-ui/dialog';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst Dialog23 = () => {\n  return (\n    <Dialog>\n      <DialogTrigger>\n        <Button\n          variant=\"outline\"\n          className=\"rounded-xl border border-zinc-200 bg-zinc-50 px-6 py-2 font-medium text-zinc-800 transition-all hover:bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800\"\n        >\n          Bottom right align\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"rounded-2xl border border-zinc-200 bg-white p-6 shadow-xl sm:top-auto sm:right-0 sm:bottom-0 sm:left-auto sm:m-6 sm:max-w-[425px] sm:translate-x-0 sm:translate-y-0 dark:border-zinc-800 dark:bg-zinc-900\">\n        <DialogHeader>\n          <DialogTitle className=\"text-lg font-semibold text-zinc-900 dark:text-zinc-100\">\n            Profile settings\n          </DialogTitle>\n          <DialogDescription className=\"text-zinc-600 dark:text-zinc-300\">\n            Update your personal information and username below.\n          </DialogDescription>\n        </DialogHeader>\n        <form\n          className=\"mt-2 grid gap-4\"\n          onSubmit={(e) => {\n            e.preventDefault(); /* handle save */\n          }}\n        >\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-fullname\">Full name</Label>\n            <Input\n              id=\"profile-fullname\"\n              name=\"profile-fullname\"\n              placeholder=\"e.g. Jamie Smith\"\n              defaultValue=\"Alex Lee\"\n            />\n          </div>\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"profile-username\">Username</Label>\n            <Input\n              id=\"profile-username\"\n              name=\"profile-username\"\n              placeholder=\"e.g. jamie_smith\"\n              defaultValue=\"alexlee\"\n            />\n          </div>\n          <DialogFooter className=\"m-0 border-t border-zinc-200 bg-transparent p-0 pt-4 dark:border-zinc-800\">\n            <DialogClose>\n              <Button variant=\"outline\" className=\"w-full rounded-lg\">\n                Discard\n              </Button>\n            </DialogClose>\n            <Button\n              type=\"submit\"\n              className=\"rounded-lg bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:ring-zinc-800 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:focus-visible:ring-zinc-600\"\n            >\n              Update profile\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Dialog23;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-1",
      "type": "registry:component",
      "title": "Dropdown Menu 1",
      "description": "Dropdown Menu 1. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-1.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { FaUser, FaBell, FaLock, FaSignOutAlt, FaCog } from 'react-icons/fa';\n\nconst DropdownMenu1 = () => {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button variant=\"outline\">Open Panel</Button>\n      </DropdownMenuTrigger>\n\n      <DropdownMenuContent className=\"sm:w-64 w-60  space-y-1 \" align='center' >\n        <div className=\"px-2 \">\n          <p className=\"text-sm font-medium\">Dashboard</p>\n          <p className=\"text-muted-foreground text-xs\">\n            Manage your preferences\n          </p>\n        </div>\n\n        <DropdownMenuSeparator />\n\n        <DropdownMenuItem className=\"flex items-center gap-2 rounded-md\">\n          <FaUser className=\"text-sm\" />\n          <span>Account</span>\n        </DropdownMenuItem>\n\n        <DropdownMenuItem className=\"flex items-center gap-2 rounded-md\">\n          <FaBell className=\"text-sm\" />\n          <span>Notifications</span>\n        </DropdownMenuItem>\n\n        <DropdownMenuItem className=\"flex items-center gap-2 rounded-md\">\n          <FaLock className=\"text-sm\" />\n          <span>Privacy</span>\n        </DropdownMenuItem>\n\n        <DropdownMenuItem className=\"flex items-center gap-2 rounded-md\">\n          <FaCog className=\"text-sm\" />\n          <span>Preferences</span>\n        </DropdownMenuItem>\n\n        <DropdownMenuSeparator />\n\n        <DropdownMenuItem className=\"text-destructive flex items-center gap-2 rounded-md\" variant='destructive'>\n          <FaSignOutAlt className=\"text-sm\" />\n          <span>Logout</span>\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n};\n\nexport default DropdownMenu1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-2",
      "type": "registry:component",
      "title": "Dropdown Menu 2",
      "description": "Dropdown Menu 2. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-2.tsx",
          "type": "registry:component",
          "content": "import {\n  FaUserCircle,\n  FaWallet,\n  FaShieldAlt,\n  FaMoon,\n  FaSignOutAlt,\n} from 'react-icons/fa';\n\nimport { Button } from '@/components/ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nconst listItems = [\n  {\n    icon: FaUserCircle,\n    label: 'View Profile',\n    desc: 'See your public profile',\n  },\n  {\n    icon: FaWallet,\n    label: 'Wallet',\n    desc: 'Manage balance & payments',\n  },\n  {\n    icon: FaShieldAlt,\n    label: 'Security',\n    desc: 'Password & 2FA settings',\n  },\n  {\n    icon: FaMoon,\n    label: 'Appearance',\n    desc: 'Theme & display',\n  },\n  {\n    icon: FaSignOutAlt,\n    label: 'Logout',\n    desc: 'End your session',\n    danger: true,\n  },\n];\n\nconst DropdownMenu2 = () => {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button\n          variant=\"secondary\"\n          size=\"icon\"\n          className=\"overflow-hidden rounded-sm shadow-sm p-0\"\n        >\n          <img\n            src='https://assets.watermelon.sh/wm_alex.png'\n            alt=\"User Avatar\"\n            className=\"h-full w-full object-cover\"\n          />\n        </Button>\n      </DropdownMenuTrigger>\n\n      <DropdownMenuContent className=\"w-72 p-0\" align='center'>\n        <div className=\"bg-muted relative p-2\">\n          <p className=\"text-sm font-semibold\">Welcome back</p>\n          <p className=\"text-muted-foreground text-xs\">\n            Manage your account & settings\n          </p>\n          <div className=\"bg-border absolute bottom-0 left-0 h-px w-full shadow-[inset_0px_-0.5px_0px_-2px_rgba(255,255,255,1),inset_0px_-0.0px_2px_0px_rgba(0,0,0,0.1)]\" />\n        </div>\n        <div className='flex flex-col px-0.5 pb-1'>\n          {listItems.map((item, index) => (\n            <DropdownMenuItem\n              key={index}\n              variant={item.danger ? 'destructive' : 'default'}\n              className={`mt-1 flex items-start gap-3 rounded-md p-2 ${\n                item.danger ? 'text-destructive' : ''\n              }`}\n            >\n              <item.icon className=\"mt-0.5 shrink-0 text-sm\" />\n              <div className=\"flex flex-col\">\n                <span className=\"text-sm\">{item.label}</span>\n                <span className=\"text-muted-foreground text-xs\">\n                  {item.desc}\n                </span>\n              </div>\n            </DropdownMenuItem>\n          ))}\n        </div>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n};\n\nexport default DropdownMenu2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-3",
      "type": "registry:component",
      "title": "Dropdown Menu 3",
      "description": "Dropdown Menu 3. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-3.tsx",
          "type": "registry:component",
          "content": "import {\n  FaFont,\n  FaBold,\n  FaItalic,\n  FaUnderline,\n  FaHighlighter,\n} from 'react-icons/fa';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst listItems = [\n  {\n    icon: FaFont,\n    title: 'Font Style',\n    desc: 'Change typography',\n  },\n  {\n    icon: FaBold,\n    title: 'Bold Text',\n    desc: 'Make text stand out',\n  },\n  {\n    icon: FaItalic,\n    title: 'Italic Text',\n    desc: 'Add emphasis',\n  },\n  {\n    icon: FaUnderline,\n    title: 'Underline',\n    desc: 'Highlight importance',\n  },\n  {\n    icon: FaHighlighter,\n    title: 'Highlight',\n    desc: 'Mark key content',\n  },\n];\n\nconst DropdownMenu3 = () => {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"flex items-center justify-center rounded-sm shadow-xs\"\n        >\n          <FaFont className=\"text-sm\" />\n          <span className=\"sr-only\">Text tools</span>\n        </Button>\n      </DropdownMenuTrigger>\n\n      <DropdownMenuContent className=\"grid w-64 gap-1 p-1\" align='center'>\n        <div className=\"px-1 py-1\">\n          <p className=\"text-muted-foreground text-sm font-medium\">\n            Text Tools\n          </p>\n        </div>\n\n        {listItems.map((item, index) => (\n          <DropdownMenuItem\n            key={index}\n            className=\"hover:bg-accent/50! flex items-center gap-3 rounded-lg p-1\"\n          >\n            <div className=\"bg-muted flex h-8 w-8 items-center justify-center rounded-md\">\n              <item.icon className=\"text-sm\" />\n            </div>\n\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm\">{item.title}</span>\n              <span className=\"text-muted-foreground text-xs\">{item.desc}</span>\n            </div>\n          </DropdownMenuItem>\n        ))}\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n};\n\nexport default DropdownMenu3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-4",
      "type": "registry:component",
      "title": "Dropdown Menu 4",
      "description": "Dropdown Menu 4. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-4.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaRegEdit, FaRegCopy, FaRegStar, FaTrashAlt } from 'react-icons/fa';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst DropdownMenu4 = () => {\n  return (\n    <div >\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Options\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent\n          align=\"start\"\n          className=\"bg-popover w-56 rounded-lg border p-1 shadow-md\"\n        >\n          <DropdownMenuItem className=\"flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n            <FaRegEdit className=\"text-muted-foreground\" />\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-medium\">Edit</span>\n              <span className=\"text-muted-foreground text-xs\">\n                Modify details\n              </span>\n            </div>\n          </DropdownMenuItem>\n\n          <DropdownMenuItem className=\"flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n            <FaRegCopy className=\"text-muted-foreground\" />\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-medium\">Duplicate</span>\n              <span className=\"text-muted-foreground text-xs\">\n                Create a copy\n              </span>\n            </div>\n          </DropdownMenuItem>\n\n          <DropdownMenuItem className=\"flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n            <FaRegStar className=\"text-muted-foreground\" />\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-medium\">Favorite</span>\n              <span className=\"text-muted-foreground text-xs\">\n                Pin for quick access\n              </span>\n            </div>\n          </DropdownMenuItem>\n\n          <DropdownMenuSeparator className=\"my-1\" />\n\n          <DropdownMenuItem className=\"text-destructive   flex cursor-pointer items-center gap-3 rounded-lg p-2\" variant='destructive'>\n            <FaTrashAlt />\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-medium\">Delete</span>\n              <span className=\"text-xs opacity-70\">Permanently remove</span>\n            </div>\n          </DropdownMenuItem>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-5",
      "type": "registry:component",
      "title": "Dropdown Menu 5",
      "description": "Dropdown Menu 5. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-5.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  FaFolderOpen,\n  FaFileCirclePlus,\n  FaClockRotateLeft,\n  FaDownload,\n  FaGear,\n  FaRightFromBracket,\n} from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst DropdownMenu5 = () => {\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Workspace\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent\n          align=\"center\"\n          className=\"bg-popover w-64 rounded-lg border p-1 shadow-md\"\n        >\n          <DropdownMenuGroup>\n            <DropdownMenuItem className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n              <FaFileCirclePlus className=\"text-muted-foreground group-hover:text-foreground transition-all duration-200 group-hover:scale-110 group-hover:-rotate-6\" />\n              <span className=\"group-hover:text-foreground text-sm font-medium transition-colors\">\n                New File\n              </span>\n              <DropdownMenuShortcut>⌘ N</DropdownMenuShortcut>\n            </DropdownMenuItem>\n\n            <DropdownMenuItem className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n              <FaFolderOpen className=\"text-muted-foreground group-hover:text-foreground transition-all duration-200 group-hover:translate-x-1 group-hover:scale-105\" />\n              <span className=\"group-hover:text-foreground text-sm font-medium transition-colors\">\n                Open Project\n              </span>\n              <DropdownMenuShortcut>⌘ O</DropdownMenuShortcut>\n            </DropdownMenuItem>\n\n            <DropdownMenuSeparator className=\"my-1\" />\n\n            <DropdownMenuItem className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n              <FaClockRotateLeft className=\"text-muted-foreground group-hover:text-foreground transition-all duration-300 group-hover:rotate-180\" />\n              <span className=\"group-hover:text-foreground text-sm font-medium transition-colors\">\n                Recent\n              </span>\n              <DropdownMenuShortcut>⌘ R</DropdownMenuShortcut>\n            </DropdownMenuItem>\n\n            <DropdownMenuItem className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n              <FaDownload className=\"text-muted-foreground group-hover:text-foreground transition-all duration-200 group-hover:translate-y-[1px] group-hover:scale-105\" />\n              <span className=\"group-hover:text-foreground text-sm font-medium transition-colors\">\n                Downloads\n              </span>\n              <DropdownMenuShortcut>⌘ ⇧ D</DropdownMenuShortcut>\n            </DropdownMenuItem>\n          </DropdownMenuGroup>\n\n          <DropdownMenuSeparator className=\"my-1\" />\n\n          <DropdownMenuGroup>\n            <DropdownMenuItem className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-2\">\n              <FaGear className=\"text-muted-foreground group-hover:text-foreground transition-all duration-300 group-hover:rotate-90\" />\n              <span className=\"group-hover:text-foreground text-sm font-medium transition-colors\">\n                Settings\n              </span>\n              <DropdownMenuShortcut>⌘ ,</DropdownMenuShortcut>\n            </DropdownMenuItem>\n\n            <DropdownMenuItem\n              className=\"group text-destructive focus:text-destructive flex cursor-pointer items-center gap-3 rounded-lg p-2\"\n              variant=\"destructive\"\n            >\n              <FaRightFromBracket className=\"transition-all duration-200 group-hover:translate-x-1 group-hover:scale-110\" />\n              <span className=\"text-sm font-medium\">Logout</span>\n              <DropdownMenuShortcut>⌘ ⇧ Q</DropdownMenuShortcut>\n            </DropdownMenuItem>\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-6",
      "type": "registry:component",
      "title": "Dropdown Menu 6",
      "description": "Dropdown Menu 6. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst listItems = [\n  {\n    src: 'https://github.com/ThePrimeagen.png',\n    fallback: 'TP',\n    name: 'ThePrimeagen',\n    message: 'just shipped a new vim config 🚀',\n    time: '2m ago',\n    newMessages: 2,\n  },\n  {\n    src: 'https://github.com/leerob.png',\n    fallback: 'LR',\n    name: 'Lee Robinson',\n    message: 'Next.js update is live',\n    time: '10m ago',\n    newMessages: 1,\n  },\n  {\n    src: 'https://github.com/gaearon.png',\n    fallback: 'DA',\n    name: 'Dan Abramov',\n    message: 'thinking about React again...',\n    time: '1h ago',\n    newMessages: null,\n  },\n  {\n    src: 'https://github.com/t3dotgg.png',\n    fallback: 'T3',\n    name: 'Theo (t3.gg)',\n    message: 'typesafety > everything',\n    time: '3h ago',\n    newMessages: 3,\n  },\n  {\n    src: 'https://github.com/sindresorhus.png',\n    fallback: 'SR',\n    name: 'Sindre Sorhus',\n    message: 'published 3 new packages today',\n    time: '5h ago',\n    newMessages: null,\n  },\n];\n\nconst DropdownMenu6 = () => {\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Dev Inbox\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover w-80 rounded-lg border p-1 shadow-md\" align='center'>\n          <DropdownMenuLabel className=\"px-2 pb-1 text-sm font-semibold\">\n            Messages\n          </DropdownMenuLabel>\n\n          <DropdownMenuGroup>\n            {listItems.map((item, index) => (\n              <DropdownMenuItem\n                key={index}\n                className=\"group dark:hover:bg-muted/50! flex cursor-pointer items-center gap-3 rounded-lg p-2 transition-all\"\n              >\n                <Avatar className=\"h-9 w-9 transition-transform duration-200 group-hover:scale-105 \">\n                  <AvatarImage src={item.src} alt={item.name}  />\n                  <AvatarFallback className=\"text-xs\">\n                    {item.fallback}\n                  </AvatarFallback>\n                </Avatar>\n\n                <div className=\"flex flex-1 flex-col overflow-hidden\">\n                  <span className=\"text-popover-foreground text-sm font-medium\">\n                    {item.name}\n                  </span>\n                  <span className=\"text-muted-foreground truncate text-xs\">\n                    {item.message}\n                  </span>\n                </div>\n\n                <div className=\"flex flex-col items-end gap-1\">\n                  <span className=\"text-muted-foreground text-xs\">\n                    {item.time}\n                  </span>\n\n                  {item.newMessages && (\n                    <Badge className=\"h-5 min-w-5 rounded-sm px-1 text-[10px] text-white! \">\n                      {item.newMessages}\n                    </Badge>\n                  )}\n                </div>\n              </DropdownMenuItem>\n            ))}\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-7",
      "type": "registry:component",
      "title": "Dropdown Menu 7",
      "description": "Dropdown Menu 7. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaMinus } from 'react-icons/fa6';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst members = [\n  {\n    src: 'https://assets.watermelon.sh/wm_alex.png',\n    fallback: 'AX',\n    name: 'Alex',\n    role: 'Frontend Engineer',\n    status: 'online',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_ben.png',\n    fallback: 'BN',\n    name: 'Ben',\n    role: 'Platform Lead',\n    status: 'online',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_josh.png',\n    fallback: 'JS',\n    name: 'Josh',\n    role: 'Fullstack Dev',\n    status: 'offline',\n  },\n  {\n    src: 'https://assets.watermelon.sh/wm_olivia.png',\n    fallback: 'OL',\n    name: 'Olivia',\n    role: 'React Core',\n    status: 'offline',\n  },\n];\n\nconst DropdownMenu7 = () => {\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Team\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover w-80 rounded-lg border p-1 shadow-md\" align='center'>\n          <DropdownMenuLabel className=\"px-2 pb-1 text-sm font-semibold\">\n            Team Members\n          </DropdownMenuLabel>\n\n          <DropdownMenuGroup>\n            {members.map((member, index) => (\n              <DropdownMenuItem\n                key={index}\n                className=\"hover:bg-accent/50! flex cursor-pointer items-center gap-3 rounded-lg p-1\"\n              >\n                <div className=\"relative\">\n                  <Avatar className=\"h-9 w-9\">\n                    <AvatarImage src={member.src} alt={member.name} />\n                    <AvatarFallback className=\"text-xs\">\n                      {member.fallback}\n                    </AvatarFallback>\n                  </Avatar>\n\n                  <span\n                    className={`border-background absolute right-0 bottom-0 h-2.5 w-2.5 rounded-full border ${\n                      member.status === 'online'\n                        ? 'bg-green-500'\n                        : 'bg-muted-foreground'\n                    }`}\n                  />\n                </div>\n\n                <div className=\"flex flex-1 flex-col\">\n                  <span className=\"text-popover-foreground text-sm font-medium\">\n                    {member.name}\n                  </span>\n                  <span className=\"text-muted-foreground text-xs\">\n                    {member.role}\n                  </span>\n                </div>\n\n                <div className=\"bg-muted hover:bg-muted/70 flex h-7 w-7 items-center justify-center rounded-lg transition-all\">\n                  <FaMinus className=\"text-xs\" />\n                </div>\n              </DropdownMenuItem>\n            ))}\n          </DropdownMenuGroup>\n\n          <DropdownMenuSeparator className=\"my-2\" />\n\n          <DropdownMenuItem className=\"bg-transparent! p-0 hover:bg-transparent!\">\n            <Button\n              variant={'ghost'}\n              className=\"bg-primary hover:bg-primary/90! group flex w-full items-center justify-center gap-2 rounded-lg border border-white/20 p-3 text-neutral-100! shadow-sm hover:text-neutral-200! dark:border-black/20\"\n            >\n              Add Member\n            </Button>\n          </DropdownMenuItem>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-8",
      "type": "registry:component",
      "title": "Dropdown Menu 8",
      "description": "Dropdown Menu 8. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-8.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  FaUser,\n  FaBell,\n  FaShieldHalved,\n  FaCreditCard,\n  FaGear,\n  FaRightFromBracket,\n} from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst items = [\n  { label: 'Profile', icon: FaUser },\n  { label: 'Notifications', icon: FaBell },\n  { label: 'Security', icon: FaShieldHalved },\n  { label: 'Billing', icon: FaCreditCard },\n  { label: 'Settings', icon: FaGear },\n];\n\nconst DropdownMenu8 = () => {\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Account\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover w-64 rounded-lg border p-1 shadow-md\" align='center'>\n          <DropdownMenuLabel className=\"px-1 pb-1 text-sm font-semibold\">\n            My Account\n          </DropdownMenuLabel>\n\n          {items.map((item, index) => {\n            const Icon = item.icon;\n\n            return (\n              <DropdownMenuItem\n                key={index}\n                className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-1 transition-all\"\n              >\n                <Icon className=\"text-muted-foreground group-hover:text-foreground transition-all duration-200 group-hover:scale-103\" />\n\n                <span className=\"group-hover:text-foreground text-sm font-medium transition-colors\">\n                  {item.label}\n                </span>\n              </DropdownMenuItem>\n            );\n          })}\n\n          <DropdownMenuItem className=\"group text-destructive mt-1 flex cursor-pointer items-center gap-3 rounded-lg px-2 py-1\" variant='destructive'>\n            <FaRightFromBracket className=\"transition-all duration-200 group-hover:translate-x-1\" />\n            <span className=\"text-sm font-medium\">Logout</span>\n          </DropdownMenuItem>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-9",
      "type": "registry:component",
      "title": "Dropdown Menu 9",
      "description": "Dropdown Menu 9. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { FaSun, FaMoon, FaDesktop } from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuLabel,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst themes = [\n  { value: 'light', label: 'Light', icon: FaSun },\n  { value: 'dark', label: 'Dark', icon: FaMoon },\n  { value: 'system', label: 'System', icon: FaDesktop, disabled: true },\n];\n\nconst DropdownMenu9 = () => {\n  const [theme, setTheme] = useState('dark');\n\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Theme\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover w-60 rounded-lg border p-1 shadow-md\" align='center'>\n          <DropdownMenuLabel className=\"px-1 pb-1 text-sm font-semibold\">\n            Appearance\n          </DropdownMenuLabel>\n\n          <DropdownMenuRadioGroup value={theme} onValueChange={setTheme}>\n            {themes.map((item) => {\n              const Icon = item.icon;\n\n              return (\n                <DropdownMenuRadioItem\n                  key={item.value}\n                  value={item.value}\n                  disabled={item.disabled}\n                  className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-1 data-[disabled]:opacity-40\"\n                >\n                  <Icon className=\"text-muted-foreground group-hover:text-foreground transition-all duration-200 group-hover:scale-110\" />\n\n                  <span className=\"flex-1 text-sm font-medium\">\n                    {item.label}\n                  </span>\n                </DropdownMenuRadioItem>\n              );\n            })}\n          </DropdownMenuRadioGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-10",
      "type": "registry:component",
      "title": "Dropdown Menu 10",
      "description": "Dropdown Menu 10. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-10.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { FaCode, FaBug, FaBell, FaBolt } from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuCheckboxItem,\n  DropdownMenuContent,\n  DropdownMenuLabel,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst options = [\n  { key: 'autoSave', label: 'Auto Save', icon: FaBolt },\n  { key: 'notifications', label: 'Notifications', icon: FaBell },\n  { key: 'debugMode', label: 'Debug Mode', icon: FaBug, disabled: true },\n  { key: 'codeHints', label: 'Code Hints', icon: FaCode },\n];\n\nconst DropdownMenu10 = () => {\n  const [state, setState] = useState({\n    autoSave: true,\n    notifications: false,\n    debugMode: false,\n    codeHints: true,\n  });\n\n  const toggle = (key: string) => {\n    setState((prev) => ({\n      ...prev,\n      [key]: !prev[key as keyof typeof prev],\n    }));\n  };\n\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Preferences\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover w-64 rounded-lg border p-1 shadow-md\" align='center'>\n          <DropdownMenuLabel className=\"px-1 pb-1 text-sm font-semibold\">\n            Dev Preferences\n          </DropdownMenuLabel>\n\n          {options.map((item) => {\n            const Icon = item.icon;\n            const checked = state[item.key as keyof typeof state];\n\n            return (\n              <DropdownMenuCheckboxItem\n                key={item.key}\n                checked={checked}\n                onCheckedChange={() => toggle(item.key)}\n                disabled={item.disabled}\n                className=\"group flex cursor-pointer items-center gap-3 rounded-lg p-1 data-[disabled]:opacity-40\"\n              >\n                <Icon className=\"text-muted-foreground group-hover:text-foreground transition-all duration-200 group-hover:scale-110\" />\n\n                <span className=\"flex-1 text-sm font-medium\">{item.label}</span>\n              </DropdownMenuCheckboxItem>\n            );\n          })}\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-11",
      "type": "registry:component",
      "title": "Dropdown Menu 11",
      "description": "Dropdown Menu 11. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-11.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport {\n  FaBell,\n  FaBellSlash,\n  FaVolumeLow,\n  FaVolumeHigh,\n  FaVolumeXmark,\n} from 'react-icons/fa6';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst levels = [\n  {\n    value: 'all',\n    label: 'All Notifications',\n    icon: FaBell,\n    color: 'text-foreground',\n  },\n  {\n    value: 'important',\n    label: 'Important Only',\n    icon: FaVolumeHigh,\n    color: 'text-amber-500 ',\n  },\n  {\n    value: 'mentions',\n    label: 'Mentions Only',\n    icon: FaVolumeLow,\n    color: 'text-blue-500',\n  },\n  {\n    value: 'silent',\n    label: 'Silent Mode',\n    icon: FaVolumeXmark,\n    color: 'text-muted-foreground',\n  },\n  {\n    value: 'off',\n    label: 'Turn Off',\n    icon: FaBellSlash,\n    color: 'text-destructive',\n  },\n];\n\nconst DropdownMenu11 = () => {\n  const [selected, setSelected] = useState('all');\n\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Notifications\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover sm:w-64 w-56 rounded-lg border p-1 shadow-md\" align='start'>\n          <DropdownMenuLabel className=\"px-1 pb-1 text-sm font-semibold\">\n            Notification Level\n          </DropdownMenuLabel>\n\n          <DropdownMenuGroup className=\"flex flex-col gap-0.5\">\n            {levels.map((item) => {\n              const Icon = item.icon;\n              const active = selected === item.value;\n\n              return (\n                <DropdownMenuItem\n                  key={item.value}\n                  onClick={() => setSelected(item.value)}\n                  className={`group flex cursor-pointer items-center gap-2 rounded-sm p-1 transition-all  ${\n                    active ? 'bg-accent' : ''\n                  }`}\n                >\n                  <Icon\n                    className={`${item.color} transition-transform duration-200 ${\n                      active ? 'scale-105' : 'group-hover:scale-105'\n                    }`}\n                  />\n\n                  <span className=\"flex-1 text-sm font-medium\">\n                    {item.label}\n                  </span>\n                </DropdownMenuItem>\n              );\n            })}\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-12",
      "type": "registry:component",
      "title": "Dropdown Menu 12",
      "description": "Dropdown Menu 12. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-12.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  FaUser,\n  FaGear,\n  FaUsers,\n  FaShareNodes,\n  FaEnvelope,\n  FaLink,\n  FaCircleQuestion,\n  FaRightFromBracket,\n} from 'react-icons/fa6';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuPortal,\n  DropdownMenuSub,\n  DropdownMenuSubContent,\n  DropdownMenuSubTrigger,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\n\nconst DropdownMenu12 = () => {\n  return (\n    <div className=\"theme-injected\">\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Workspace\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent\n          className=\"bg-popover sm:w-72  w-[220px] rounded-lg border p-1 shadow-md\"\n          align=\"end\"\n        >\n          <DropdownMenuLabel className=\"flex items-center gap-3 rounded-lg p-1\">\n            <div className=\"relative\">\n              <Avatar className=\"h-9 w-9 rounded-full overflow-hidden\">\n                <AvatarImage\n                  src=\"https://assets.watermelon.sh/wm_ben.png\"\n                  alt=\"Ben\"\n                  className=\"rounded-full \"\n                />\n                <AvatarFallback className=\"text-xs\">TP</AvatarFallback>\n              </Avatar>\n              <span className=\"border-background absolute right-0 bottom-0 h-2.5 w-2.5 rounded-full border bg-green-500\" />\n            </div>\n\n            <div className=\"flex flex-col\">\n              <span className=\"text-popover-foreground text-sm font-medium\">\n                ThePrimeagen\n              </span>\n              <span className=\"text-muted-foreground text-xs\">\n                prime@dev.io\n              </span>\n            </div>\n          </DropdownMenuLabel>\n\n          <DropdownMenuGroup>\n            <DropdownMenuItem className=\"group flex items-center gap-3 rounded-lg p-2\">\n              <FaUser className=\"text-muted-foreground group-hover:text-foreground transition-all group-hover:scale-110\" />\n              <span className=\"text-sm font-medium\">My Profile</span>\n            </DropdownMenuItem>\n\n            <DropdownMenuItem className=\"group flex items-center gap-3 rounded-lg p-2\">\n              <FaUsers className=\"text-muted-foreground group-hover:text-foreground transition-all group-hover:scale-110\" />\n              <span className=\"text-sm font-medium\">Team</span>\n            </DropdownMenuItem>\n\n            <DropdownMenuItem className=\"group flex items-center gap-3 rounded-lg p-2\">\n              <FaGear className=\"text-muted-foreground group-hover:text-foreground transition-all group-hover:rotate-45\" />\n              <span className=\"text-sm font-medium\">Settings</span>\n            </DropdownMenuItem>\n          </DropdownMenuGroup>\n\n          <DropdownMenuGroup >\n            <DropdownMenuSub>\n              <DropdownMenuSubTrigger className=\"group flex items-center gap-3 rounded-lg p-2\" >\n                <FaShareNodes className=\"text-muted-foreground group-hover:text-foreground transition-all group-hover:scale-110\" />\n                <span className=\"text-sm font-medium\">Share Workspace</span>\n              </DropdownMenuSubTrigger>\n\n              <DropdownMenuPortal >\n                <DropdownMenuSubContent className=\"bg-popover rounded-sm border p-1 shadow-md\" >\n                  <DropdownMenuItem className=\"flex items-center gap-1 rounded-sm p-1\">\n                    <FaEnvelope />\n                     Email\n                  </DropdownMenuItem>\n\n                  <DropdownMenuItem className=\"flex items-center gap-1 rounded-sm p-1\">\n                    <FaLink />\n                    Copy Link\n                  </DropdownMenuItem>\n                </DropdownMenuSubContent>\n              </DropdownMenuPortal>\n            </DropdownMenuSub>\n\n            <DropdownMenuItem className=\"group flex items-center gap-3 rounded-lg p-2\">\n              <FaCircleQuestion className=\"text-muted-foreground group-hover:text-foreground transition-all group-hover:scale-110\" />\n              <span className=\"text-sm font-medium\">Help Center</span>\n            </DropdownMenuItem>\n\n            <DropdownMenuItem className=\"group text-destructive flex items-center gap-3 rounded-lg p-2 \" variant='destructive'>\n              <FaRightFromBracket className=\"transition-all group-hover:translate-x-1\" />\n              <span className=\"text-sm font-medium\">Logout</span>\n            </DropdownMenuItem>\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMenu12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-13",
      "type": "registry:component",
      "title": "Dropdown Menu 13",
      "description": "Dropdown Menu 13. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "dropdown-menu",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-13.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { FaClock } from 'react-icons/fa6';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst people = [\n  'https://assets.watermelon.sh/wm_alex.png',\n  'https://assets.watermelon.sh/wm_ben.png',\n  'https://assets.watermelon.sh/wm_josh.png',\n];\n\nconst sessions = [\n  {\n    time: '08:00',\n    title: 'Deep Work',\n    desc: 'Focus on core feature',\n    color: 'bg-blue-500/10 text-blue-500',\n  },\n  {\n    time: '10:30',\n    title: 'Team Sync',\n    desc: 'Quick alignment call',\n    color: 'bg-green-500/10 text-green-500',\n  },\n  {\n    time: '01:00',\n    title: 'Code Review',\n    desc: 'PR feedback session',\n    color: 'bg-purple-500/10 text-purple-500',\n  },\n  {\n    time: '04:00',\n    title: 'Build & Ship',\n    desc: 'Deploy + monitor',\n    color: 'bg-amber-500/10 text-amber-500',\n  },\n];\n\nconst DropdownMeeting13 = () => {\n  const [active, setActive] = useState(sessions.map(() => true));\n\n  const toggle = (index: number) => {\n    setActive((prev) => prev.map((v, i) => (i === index ? !v : v)));\n  };\n\n  return (\n    <div>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" className=\"rounded-lg\">\n            Focus Planner\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent className=\"bg-popover sm:w-[420px] w-full rounded-lg border p-1 shadow-md\" align='center'>\n          <DropdownMenuLabel className=\"px-2 pb-2 text-sm font-semibold\">\n            Today’s Schedule\n          </DropdownMenuLabel>\n\n          <DropdownMenuGroup>\n            {sessions.map((item, index) => (\n              <DropdownMenuItem\n                key={index}\n                onSelect={(e) => e.preventDefault()}\n                className=\"group hover:bg-accent/50! flex cursor-pointer items-center gap-3 rounded-lg p-2\"\n              >\n                <div\n                  className={`rounded-md px-2 py-1 text-xs font-medium ${item.color}`}\n                >\n                  {item.time}\n                </div>\n\n                <div className=\"flex flex-1 flex-col\">\n                  <span className=\"text-sm font-medium\">{item.title}</span>\n                  <span className=\"text-muted-foreground text-xs\">\n                    {item.desc}\n                  </span>\n                </div>\n\n                <div className=\"flex -space-x-2\">\n                  {people.map((src, i) => (\n                    <Avatar key={i} className=\"ring-background h-6 w-6 ring-2\">\n                      <AvatarImage src={src} />\n                      <AvatarFallback>U</AvatarFallback>\n                    </Avatar>\n                  ))}\n                </div>\n\n                <div className=\"flex items-center gap-2 pl-2\">\n                  <FaClock className=\"text-muted-foreground text-xs\" />\n                  <Switch\n                    checked={active[index]}\n                    onCheckedChange={() => toggle(index)}\n                  />\n                </div>\n              </DropdownMenuItem>\n            ))}\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  );\n};\n\nexport default DropdownMeeting13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu-14",
      "type": "registry:component",
      "title": "Dropdown Menu 14",
      "description": "Dropdown Menu 14. A menu that displays a list of actions or options when triggered, typically by a button or icon.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "components/watermelon/dropdown-menu-14.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { HiSquares2X2, HiStar, HiPlus, HiCog6Tooth } from 'react-icons/hi2';\nimport { HiChevronUpDown } from 'react-icons/hi2';\n\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/base-ui/dropdown-menu';\nimport { HiCheck } from 'react-icons/hi';\n\nconst workspaces = [\n  {\n    id: 1,\n    name: 'Watermelon UI',\n    plan: 'Pro Plan',\n    members: 12,\n    icon: 'WU',\n  },\n  {\n    id: 2,\n    name: 'Watermelon Showcase',\n    plan: 'Free Plan',\n    members: 5,\n    icon: 'WS',\n  },\n  {\n    id: 3,\n    name: 'Watermelon Studio',\n    plan: 'Startup Plan',\n    members: 8,\n    icon: 'WS',\n  },\n];\n\nconst DropdownMenu14 = () => {\n  const [selected, setSelected] = useState(workspaces[0]);\n\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger className=\"bg-secondary flex w-[260px] items-center gap-3 rounded-lg px-2 py-2\">\n        <div className=\"bg-primary text-primary-foreground flex h-9 w-9 items-center justify-center rounded-md text-sm font-semibold\">\n          {selected.icon}\n        </div>\n\n        <div className=\"flex flex-1 flex-col text-left leading-tight\">\n          <span className=\"text-sm font-semibold\">{selected.name}</span>\n          <span className=\"text-muted-foreground text-xs\">{selected.plan}</span>\n        </div>\n        <div className=\"\">\n          <HiChevronUpDown className=\"size-6\" />\n        </div>\n      </DropdownMenuTrigger>\n\n      <DropdownMenuContent align=\"center\" className=\"w-[320px] rounded-lg p-2\">\n        <div className=\"px-2 py-2\">\n          <p className=\"text-sm font-semibold\">Workspaces</p>\n          <p className=\"text-muted-foreground text-xs\">\n            Switch between your workspaces\n          </p>\n        </div>\n\n        <DropdownMenuSeparator />\n\n        <DropdownMenuLabel className=\"flex items-center gap-2 text-xs\">\n          <HiStar className=\"size-4\" />\n          Recent\n        </DropdownMenuLabel>\n\n        {[selected].map((ws) => (\n          <DropdownMenuItem\n            key={ws.id}\n            onClick={() => setSelected(ws)}\n            className=\"hover:bg-accent/50! flex items-center gap-3 rounded-lg p-2\"\n          >\n            <div className=\"bg-primary/10 text-primary flex h-8 w-8 items-center justify-center rounded-md text-xs font-semibold\">\n              {ws.icon}\n            </div>\n\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-medium\">{ws.name}</span>\n              <span className=\"text-muted-foreground text-xs\">\n                {ws.members} members\n              </span>\n            </div>\n\n            {selected.id === ws.id && (\n              <HiCheck className=\"text-primary ml-auto size-4\" />\n            )}\n          </DropdownMenuItem>\n        ))}\n\n        <DropdownMenuSeparator />\n\n        <DropdownMenuLabel className=\"flex items-center gap-2 text-xs\">\n          <HiSquares2X2 className=\"size-4\" />\n          All Workspaces\n        </DropdownMenuLabel>\n\n        {workspaces.map((ws) => (\n          <DropdownMenuItem\n            key={ws.id}\n            onClick={() => setSelected(ws)}\n            className=\"hover:bg-accent/50! flex items-center gap-3 rounded-lg p-2\"\n          >\n            <div className=\"bg-muted flex h-8 w-8 items-center justify-center rounded-md text-xs font-semibold\">\n              {ws.icon}\n            </div>\n\n            <div className=\"flex flex-col\">\n              <span className=\"text-sm font-medium\">{ws.name}</span>\n              <span className=\"text-muted-foreground text-xs\">{ws.plan}</span>\n            </div>\n\n            <span className=\"text-muted-foreground ml-auto text-xs\">\n              {ws.members}\n            </span>\n          </DropdownMenuItem>\n        ))}\n\n        <DropdownMenuSeparator />\n\n        <DropdownMenuItem className=\"hover:bg-accent/50! flex items-center gap-2 rounded-lg p-2\">\n          <HiPlus className=\"size-4\" />\n          Create Workspace\n        </DropdownMenuItem>\n\n        <DropdownMenuItem className=\"hover:bg-accent/50! flex items-center gap-2 rounded-lg p-2\">\n          <HiCog6Tooth className=\"size-4\" />\n          Manage Workspaces\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n};\n\nexport default DropdownMenu14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-1",
      "type": "registry:component",
      "title": "Form 1",
      "description": "Form 1. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "field",
        "input-otp"
      ],
      "files": [
        {
          "path": "components/watermelon/form-1.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSeparator,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\n\nconst FormSchema = z.object({\n  pin: z.string().min(6, {\n    message: 'Enter the complete 6-digit verification code.',\n  }),\n});\n\nconst Form1 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: {\n      pin: '',\n    },\n  });\n\n  function onSubmit() {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success sm:w-100\">\n        <FaCheckDouble />\n        <AlertTitle>Access granted. You're all set to continue.</AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldLabel>Enter Verification Code</FieldLabel>\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"pin\"\n            render={({ field }) => (\n              <InputOTP maxLength={6} {...field}>\n                <InputOTPGroup className=\"gap-2 *:data-[slot=input-otp-slot]:rounded-sm *:data-[slot=input-otp-slot]:border\">\n                  <InputOTPSlot\n                    index={0}\n                    className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n                  />\n                  <InputOTPSlot\n                    index={1}\n                    className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n                  />\n                  <InputOTPSlot\n                    index={2}\n                    className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n                  />\n                </InputOTPGroup>\n                <InputOTPSeparator className=\"text-primary\" />\n                <InputOTPGroup className=\"gap-2 *:data-[slot=input-otp-slot]:rounded-sm *:data-[slot=input-otp-slot]:border\">\n                  <InputOTPSlot\n                    index={3}\n                    className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n                  />\n                  <InputOTPSlot\n                    index={4}\n                    className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n                  />\n                  <InputOTPSlot\n                    index={5}\n                    className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n                  />\n                </InputOTPGroup>\n              </InputOTP>\n            )}\n          />\n        </FieldContent>\n        <FieldDescription>\n          We’ve sent a secure code to your device. Enter it here to verify your\n          identity.\n        </FieldDescription>\n        <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n          {form.formState.errors.pin?.message}\n        </FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"w-full rounded-sm shadow-[0px_1px_0.5px_rgba(41,41,41,0.04),0px_3px_3px_-1.5px_rgba(41,41,41,0.04),0px_6px_6px_-3px_rgba(41,41,41,0.04),0px_12px_12px_-6px_rgba(41,41,41,0.04),0px_24px_24px_-12px_rgba(41,41,41,0.04),0px_48px_48px_-24px_rgba(41,41,41,0.04),inset_0_1px_0px_0_rgba(255,255,255,0.3),inset_0_-1px_0px_0_rgba(0,0,0,0.3)]\"\n      >\n        Verify Code\n      </Button>\n    </form>\n  );\n};\n\nexport default Form1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-2",
      "type": "registry:component",
      "title": "Form 2",
      "description": "Form 2. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "avatar",
        "button",
        "field",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/form-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble, FaEnvelope } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst accounts = [\n  {\n    email: 'user1@gmail.com',\n    avatar: 'https://i.pravatar.cc/40?img=1',\n    fallback: 'U1',\n  },\n  {\n    email: 'user007@gmail.com',\n    avatar: 'https://i.pravatar.cc/40?img=2',\n    fallback: 'U7',\n  },\n  {\n    email: 'user69@outlook.com',\n    avatar: 'https://i.pravatar.cc/40?img=3',\n    fallback: 'U6',\n  },\n];\n\nconst FormSchema = z.object({\n  email: z.string().email('Select a valid account'),\n});\n\nconst Form2 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n  });\n\n  function onSubmit() {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2 sm:w-110\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>\n          Recovery link sent. Check your inbox to continue.\n        </AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldLabel className=\"flex items-center gap-2\">\n          <FaEnvelope className=\"text-muted-foreground\" />\n          Select Account\n        </FieldLabel>\n\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"email\"\n            render={({ field }) => (\n              <Select onValueChange={field.onChange} defaultValue={field.value}>\n                <SelectTrigger className=\"bg-muted/50 focus-visible:ring-primary/20 focus-visible:border-primary/50 w-full rounded-sm border pl-1 text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05),0px_0px_4px_0px_rgba(0,0,0,0.1)] transition-all focus:scale-[1.01] focus-visible:ring-2! data-[active=true]:scale-105 dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n                  <SelectValue placeholder=\"Choose your account\" />\n                </SelectTrigger>\n\n                <SelectContent className=\"rounded-sm\">\n                  {accounts.map((acc) => (\n                    <SelectItem\n                      key={acc.email}\n                      value={acc.email}\n                      className=\"flex items-center gap-2\"\n                    >\n                      <div className=\"flex items-center gap-2\">\n                        <Avatar className=\"h-6 w-6\">\n                          <AvatarImage\n                            src={acc.avatar}\n                            className=\"rounded-sm\"\n                          />\n                          <AvatarFallback>{acc.fallback}</AvatarFallback>\n                        </Avatar>\n                        <span className=\"text-sm\">{acc.email}</span>\n                      </div>\n                    </SelectItem>\n                  ))}\n                </SelectContent>\n              </Select>\n            )}\n          />\n        </FieldContent>\n\n        <FieldDescription>\n          Pick the account you want to recover. We'll send a secure reset link.\n        </FieldDescription>\n\n        <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n          {form.formState.errors.email?.message}\n        </FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"flex w-full items-center justify-center gap-2 rounded-sm shadow-[0px_1px_0.5px_rgba(0,0,0,0.04),0px_3px_3px_-1.5px_rgba(0,0,0,0.04),0px_6px_6px_-3px_rgba(0,0,0,0.04),0px_12px_12px_-6px_rgba(0,0,0,0.04),0px_24px_24px_-12px_rgba(0,0,0,0.04),0px_48px_48px_-24px_rgba(0,0,0,0.04),inset_0_1px_0px_0_rgba(255,255,255,0.3),inset_0_-1px_1px_0_rgba(0,0,0,0.3)] transition-all hover:scale-[1.02]\"\n      >\n        Send Link\n      </Button>\n    </form>\n  );\n};\n\nexport default Form2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-3",
      "type": "registry:component",
      "title": "Form 3",
      "description": "Form 3. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "date-fns",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "calendar",
        "field",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/form-3.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCalendarAlt, FaCheckDouble } from 'react-icons/fa';\n\nimport { format } from 'date-fns';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport { Calendar } from '@/components/base-ui/calendar';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\n\nimport { cn } from '@/lib/utils';\n\nconst FormSchema = z.object({\n  dob: z.date().refine((val) => val !== undefined, {\n    message: 'Please select your date of birth.',\n  }),\n});\n\nconst Form3 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n  });\n\n  function onSubmit() {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2 sm:w-100\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>Your personalized recommendations are ready 🎉</AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldLabel className=\"flex items-center gap-2\">\n          <FaCalendarAlt className=\"text-muted-foreground\" />\n          Select Your Birth Date\n        </FieldLabel>\n\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"dob\"\n            render={({ field }) => (\n              <Popover>\n                <PopoverTrigger asChild>\n                  <Button\n                    variant=\"outline\"\n                    className={cn(\n                      'bg-muted/50 w-full rounded-sm pl-3 text-left font-normal',\n                      !field.value && 'text-muted-foreground',\n                    )}\n                  >\n                    {field.value ? (\n                      format(field.value, 'PPP')\n                    ) : (\n                      <span>Choose your date</span>\n                    )}\n                    <FaCalendarAlt className=\"ml-auto opacity-50\" />\n                  </Button>\n                </PopoverTrigger>\n\n                <PopoverContent\n                  className=\"animate-in fade-in zoom-in-95 w-auto p-0\"\n                  align=\"start\"\n                >\n                  <Calendar\n                    mode=\"single\"\n                    selected={field.value}\n                    onSelect={field.onChange}\n                    disabled={(date) =>\n                      date > new Date() || date < new Date('1900-01-01')\n                    }\n                  />\n                </PopoverContent>\n              </Popover>\n            )}\n          />\n        </FieldContent>\n\n        <FieldDescription>\n          Your date helps us personalize your experience and tailor content just\n          for you.\n        </FieldDescription>\n\n        <FieldError className=\"text-destructive text-xs\">\n          {form.formState.errors.dob?.message}\n        </FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"from-primary to-primary/70 flex w-full items-center justify-center gap-2 rounded-sm border border-black/10 bg-gradient-to-b shadow-sm transition-all text-shadow-xs active:scale-98\"\n      >\n        Continue\n      </Button>\n    </form>\n  );\n};\n\nexport default Form3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-4",
      "type": "registry:component",
      "title": "Form 4",
      "description": "Form 4. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "field",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/form-4.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaBell, FaCheckDouble, FaMoon, FaStar } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst FormSchema = z.object({\n  mode: z.string().min(1, {\n    message: 'Please choose a mode to continue.',\n  }),\n});\n\nconst options = [\n  {\n    value: 'focus',\n    label: 'Focus Mode',\n    desc: 'Minimize distractions and stay productive.',\n    icon: FaStar,\n  },\n  {\n    value: 'balanced',\n    label: 'Balanced Mode',\n    desc: 'A mix of productivity and updates.',\n    icon: FaBell,\n  },\n  {\n    value: 'silent',\n    label: 'Silent Mode',\n    desc: 'Pause all interruptions for deep work.',\n    icon: FaMoon,\n  },\n];\n\nconst Form4 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: { mode: '' },\n  });\n\n  function onSubmit(data: z.infer<typeof FormSchema>) {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>Mode set to {data.mode}</AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldLabel>Choose Your Experience Mode</FieldLabel>\n\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"mode\"\n            render={({ field }) => (\n              <RadioGroup\n                onValueChange={field.onChange}\n                value={field.value}\n                className=\"space-y-1\"\n              >\n                {options.map((opt) => {\n                  const Icon = opt.icon;\n                  const active = field.value === opt.value;\n\n                  return (\n                    <label\n                      key={opt.value}\n                      htmlFor={opt.value}\n                      className={`flex cursor-pointer items-center justify-center gap-2 rounded-sm border p-2 shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)] ${active ? 'border-primary bg-muted/50' : 'hover:bg-muted/40'}`}\n                    >\n                      <RadioGroupItem\n                        value={opt.value}\n                        id={opt.value}\n                        className=\"\"\n                      />\n\n                      <div className=\"flex flex-1 items-center gap-1\">\n                        <Icon\n                          className={`text-sm transition-all ${\n                            active\n                              ? 'text-primary scale-110'\n                              : 'text-muted-foreground'\n                          }`}\n                        />\n\n                        <div className=\"space-y-0.5\">\n                          <p className=\"text-sm font-medium\">{opt.label}</p>\n                        </div>\n                      </div>\n                    </label>\n                  );\n                })}\n              </RadioGroup>\n            )}\n          />\n        </FieldContent>\n\n        <FieldDescription>\n          Select how you'd like the app to behave during your sessions.\n        </FieldDescription>\n\n        <FieldError>{form.formState.errors.mode?.message}</FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"from-primary to-primary/80 flex w-full items-center justify-center gap-2 rounded-sm bg-gradient-to-b shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.3),inset_0px_-1px_0px_0px_rgba(0,0,0,0.3)] transition-all active:scale-98 dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.3)]\"\n      >\n        Apply Mode\n      </Button>\n    </form>\n  );\n};\n\nexport default Form4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-5",
      "type": "registry:component",
      "title": "Form 5",
      "description": "Form 5. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "checkbox",
        "field"
      ],
      "files": [
        {
          "path": "components/watermelon/form-5.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble, FaRocket } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\n\nconst FormSchema = z.object({\n  agree: z.boolean().refine((val) => val === true, {\n    message: 'You need to confirm before continuing.',\n  }),\n});\n\nconst Form5 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: { agree: false },\n  });\n\n  function onSubmit() {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>You’re all set! Let’s get started 🚀</AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"agree\"\n            render={({ field }) => (\n              <div className=\"hover:bg-muted/40 flex items-start space-x-3 rounded-sm border p-3 transition-all\">\n                <Checkbox\n                  checked={field.value}\n                  onCheckedChange={(val) => field.onChange(!!val)}\n                  className=\"bg-muted/50\"\n                />\n\n                <div className=\"space-y-1\">\n                  <FieldLabel className=\"flex items-center gap-2\">\n                    <FaRocket className=\"text-muted-foreground\" />\n                    Enable Your Workspace\n                  </FieldLabel>\n\n                  <FieldDescription>\n                    Activate your workspace to unlock all features and start\n                    building without limits.\n                  </FieldDescription>\n                </div>\n              </div>\n            )}\n          />\n        </FieldContent>\n\n        <FieldError>{form.formState.errors.agree?.message}</FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"flex w-full items-center justify-center gap-2 rounded-sm transition-all active:scale-98\"\n      >\n        Get Started\n      </Button>\n    </form>\n  );\n};\n\nexport default Form5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-6",
      "type": "registry:component",
      "title": "Form 6",
      "description": "Form 6. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "field",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/form-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport { Switch } from '@/components/base-ui/switch';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\n\nconst FormSchema = z.object({\n  securityMode: z.boolean().refine((val) => val === true, {\n    message: 'Please enable security mode to continue.',\n  }),\n});\n\nconst Form5 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: { securityMode: false },\n  });\n\n  function onSubmit(data: z.infer<typeof FormSchema>) {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>\n          Security mode {data.securityMode ? 'enabled' : 'disabled'}{' '}\n          successfully.\n        </AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"securityMode\"\n            render={({ field }) => (\n              <div className=\"hover:bg-muted/40 flex items-center justify-between rounded-sm border p-3 transition-all\">\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"space-y-0.5\">\n                    <FieldLabel>Enable Secure Mode</FieldLabel>\n                    <FieldDescription>\n                      Adds an extra layer of protection to your account and\n                      activity.\n                    </FieldDescription>\n                  </div>\n                </div>\n\n                <Switch\n                  checked={field.value}\n                  onCheckedChange={field.onChange}\n                  className=\"bg-muted/50 self-start\"\n                />\n              </div>\n            )}\n          />\n        </FieldContent>\n\n        <FieldError>{form.formState.errors.securityMode?.message}</FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"flex w-full items-center justify-center gap-2 rounded-sm transition-all active:scale-95\"\n      >\n        Continue\n      </Button>\n    </form>\n  );\n};\n\nexport default Form5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-7",
      "type": "registry:component",
      "title": "Form 7",
      "description": "Form 7. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "field",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/form-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble, FaCommentDots } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst FormSchema = z.object({\n  feedback: z\n    .string()\n    .min(30, 'Please share a bit more detail (at least 30 characters).')\n    .max(300, 'Keep it concise (max 300 characters).'),\n});\n\nconst Form7 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: { feedback: '' },\n  });\n\n  function onSubmit() {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2 sm:w-110\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>\n          Your input has been recorded. Thanks for helping us improve 🚀\n        </AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldLabel className=\"flex items-center gap-2\">\n          <FaCommentDots className=\"text-muted-foreground\" />\n          Tell Us What You Think\n        </FieldLabel>\n\n        <FieldContent>\n          <Textarea\n            placeholder=\"Share your thoughts, ideas, or anything that could make your experience better...\"\n            {...form.register('feedback')}\n            className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 rounded-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all focus:scale-[1.01] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n          />\n        </FieldContent>\n\n        <FieldDescription>\n          Your insights directly shape future improvements and features.\n        </FieldDescription>\n\n        <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n          {form.formState.errors.feedback?.message}\n        </FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"flex w-full items-center justify-center gap-2 rounded-sm border border-black/5 shadow-xs transition-all text-shadow-xs active:scale-98\"\n      >\n        Submit Feedback\n      </Button>\n    </form>\n  );\n};\n\nexport default Form7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-8",
      "type": "registry:component",
      "title": "Form 8",
      "description": "Form 8. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "lucide-react",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "command",
        "field",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/form-8.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FaCheckDouble, FaLayerGroup } from 'react-icons/fa';\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';\nimport {\n  HiPaintBrush,\n  HiCodeBracket,\n  HiMegaphone,\n  HiBanknotes,\n  HiCog6Tooth,\n} from 'react-icons/hi2';\nimport { FaHeadphones } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList,\n} from '@/components/base-ui/command';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\n\nimport { cn } from '@/lib/utils';\n\nconst categories = [\n  { value: 'design', label: 'Design', icon: HiPaintBrush },\n  { value: 'development', label: 'Development', icon: HiCodeBracket },\n  { value: 'marketing', label: 'Marketing', icon: HiMegaphone },\n  { value: 'finance', label: 'Finance', icon: HiBanknotes },\n  { value: 'operations', label: 'Operations', icon: HiCog6Tooth },\n  { value: 'support', label: 'Customer Support', icon: FaHeadphones },\n];\n\nconst FormSchema = z.object({\n  category: z.string().min(1, 'Please select a category.'),\n});\n\nconst Form8 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n  });\n\n  const [open, setOpen] = useState(false);\n\n  function onSubmit(data: z.infer<typeof FormSchema>) {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>{data.category} selected successfully</AlertTitle>\n      </Alert>\n    ));\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-3\"\n    >\n      <Field>\n        <FieldLabel className=\"flex items-center gap-2\">\n          <FaLayerGroup className=\"text-muted-foreground\" />\n          Select Category\n        </FieldLabel>\n\n        <FieldContent>\n          <Controller\n            control={form.control}\n            name=\"category\"\n            render={({ field }) => (\n              <Popover open={open} onOpenChange={setOpen}>\n                <PopoverTrigger asChild>\n                  <Button\n                    variant=\"outline\"\n                    role=\"combobox\"\n                    aria-expanded={open}\n                    className=\"w-full justify-between rounded-sm transition-all hover:scale-[1.01]\"\n                  >\n                    {field.value ? (\n                      (() => {\n                        const selected = categories.find(\n                          (c) => c.value === field.value,\n                        );\n                        if (!selected) return null;\n                        const Icon = selected.icon;\n                        return (\n                          <span className=\"flex items-center gap-2\">\n                            <Icon className=\"size-4\" />\n                            {selected.label}\n                          </span>\n                        );\n                      })()\n                    ) : (\n                      <span className=\"text-muted-foreground\">\n                        Select category...\n                      </span>\n                    )}\n                    <ChevronsUpDownIcon className=\"opacity-50\" />\n                  </Button>\n                </PopoverTrigger>\n\n                <PopoverContent className=\"w-(--radix-popper-anchor-width) rounded-sm p-0\">\n                  <Command className=\"p-0\">\n                    <CommandInput\n                      placeholder=\"Search category...\"\n                      className=\"rounded-sm p-0\"\n                    />\n                    <CommandList>\n                      <CommandEmpty>No results found.</CommandEmpty>\n\n                      <CommandGroup>\n                        {categories.map((item) => {\n                          const Icon = item.icon;\n                          return (\n                            <CommandItem\n                              key={item.value}\n                              value={item.value}\n                              onSelect={() => {\n                                field.onChange(item.value);\n                                setOpen(false);\n                              }}\n                              className=\"flex items-center justify-between rounded-sm\"\n                            >\n                              <span className=\"flex items-center gap-2\">\n                                <Icon className=\"size-4\" />\n                                {item.label}\n                              </span>\n\n                              <CheckIcon\n                                className={cn(\n                                  'transition-all',\n                                  field.value === item.value\n                                    ? 'scale-100 opacity-100'\n                                    : 'scale-75 opacity-0',\n                                )}\n                              />\n                            </CommandItem>\n                          );\n                        })}\n                      </CommandGroup>\n                    </CommandList>\n                  </Command>\n                </PopoverContent>\n              </Popover>\n            )}\n          />\n        </FieldContent>\n\n        <FieldDescription>\n          Choose the category that best fits your selection.\n        </FieldDescription>\n\n        <FieldError>{form.formState.errors.category?.message}</FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"flex w-full items-center justify-center gap-2 rounded-sm border border-black/5 shadow-xs transition-all text-shadow-xs active:scale-98\"\n      >\n        Continue\n      </Button>\n    </form>\n  );\n};\n\nexport default Form8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-9",
      "type": "registry:component",
      "title": "Form 9",
      "description": "Form 9. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "field",
        "input"
      ],
      "files": [
        {
          "path": "components/watermelon/form-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble, FaEnvelopeOpenText } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\n\nconst FormSchema = z.object({\n  email: z\n    .string()\n    .min(1, 'Email is required')\n    .email('Enter a valid email address'),\n});\n\nconst Form9 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: { email: '' },\n  });\n\n  const onSubmit = () => {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>\n          Invitation sent! Check your inbox to get started.\n        </AlertTitle>\n      </Alert>\n    ));\n  };\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"w-full max-w-xs space-y-6\"\n    >\n      <Field>\n        <FieldLabel className=\"flex items-center gap-2\">\n          <FaEnvelopeOpenText className=\"text-muted-foreground\" />\n          Invite a Teammate\n        </FieldLabel>\n\n        <FieldContent>\n          <Input\n            placeholder=\"Enter teammate's email\"\n            {...form.register('email')}\n            className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 rounded-sm transition-all focus:scale-[1.01]\"\n          />\n        </FieldContent>\n\n        <FieldDescription>\n          Send an invite to collaborate and start working together instantly.\n        </FieldDescription>\n\n        <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n          {form.formState.errors.email?.message}\n        </FieldError>\n      </Field>\n\n      <Button\n        type=\"submit\"\n        className=\"flex w-full items-center justify-center gap-2 rounded-sm transition-all active:scale-98\"\n      >\n        Send Invite\n      </Button>\n    </form>\n  );\n};\n\nexport default Form9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-10",
      "type": "registry:component",
      "title": "Form 10",
      "description": "Form 10. A collection of input fields, controls, and actions used to capture and submit user data, such as text, selections, and files.",
      "dependencies": [
        "@hookform/resolvers",
        "react-hook-form",
        "react-icons",
        "sonner",
        "zod"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "card",
        "field",
        "input",
        "radio-group",
        "select",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/form-10.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { FaCheckDouble } from 'react-icons/fa';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Controller, useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from '@/components/base-ui/card';\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldLabel,\n} from '@/components/base-ui/field';\nimport { Input } from '@/components/base-ui/input';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst FormSchema = z.object({\n  email: z.string().min(1, 'Email is required').email('Enter a valid email'),\n  type: z.string().min(1, { message: 'Select a project type.' }),\n  goal: z.string().min(1, { message: 'Choose your primary goal.' }),\n  brief: z\n    .string()\n    .min(30, 'Please describe your project (min 30 characters).'),\n});\n\nconst Form10 = () => {\n  const form = useForm<z.infer<typeof FormSchema>>({\n    resolver: zodResolver(FormSchema),\n    defaultValues: {\n      email: '',\n      type: '',\n      goal: '',\n      brief: '',\n    },\n  });\n\n  const onSubmit = () => {\n    toast.custom(() => (\n      <Alert className=\"border-success text-success flex items-center gap-2 sm:w-122\">\n        <FaCheckDouble className=\"animate-pulse\" />\n        <AlertTitle>Your project setup is complete 🎉</AlertTitle>\n      </Alert>\n    ));\n  };\n\n  return (\n    <Card className=\"bg-card w-full max-w-sm rounded-sm shadow-md\">\n      <CardHeader>\n        <CardTitle>Create New Project</CardTitle>\n        <CardDescription>\n          Tell us about your project so we can tailor the experience for you.\n        </CardDescription>\n      </CardHeader>\n\n      <CardContent>\n        <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n          <Field>\n            <FieldLabel>Work Email</FieldLabel>\n            <FieldContent>\n              <Input\n                placeholder=\"you@company.com\"\n                {...form.register('email')}\n                className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 rounded-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all focus:scale-[1.01] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n              />\n            </FieldContent>\n            <FieldDescription>\n              We'll use this to set up your workspace.\n            </FieldDescription>\n            <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.15),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n              {form.formState.errors.email?.message}\n            </FieldError>\n          </Field>\n\n          <Field>\n            <FieldLabel>Project Type</FieldLabel>\n            <FieldContent>\n              <Controller\n                control={form.control}\n                name=\"type\"\n                render={({ field }) => (\n                  <Select\n                    onValueChange={field.onChange}\n                    defaultValue={field.value}\n                  >\n                    <SelectTrigger className=\"bg-muted/50 w-full rounded-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n                      <SelectValue placeholder=\"Select project type\" />\n                    </SelectTrigger>\n                    <SelectContent className=\"bg-muted rounded-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.05),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n                      <SelectItem value=\"web\">Web Application</SelectItem>\n                      <SelectItem value=\"mobile\">Mobile App</SelectItem>\n                      <SelectItem value=\"saas\">SaaS Platform</SelectItem>\n                      <SelectItem value=\"internal\">Internal Tool</SelectItem>\n                    </SelectContent>\n                  </Select>\n                )}\n              />\n            </FieldContent>\n            <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.15),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n              {form.formState.errors.type?.message}\n            </FieldError>\n          </Field>\n\n          <Field>\n            <FieldLabel>Primary Goal</FieldLabel>\n            <FieldContent>\n              <Controller\n                control={form.control}\n                name=\"goal\"\n                render={({ field }) => (\n                  <RadioGroup\n                    onValueChange={field.onChange}\n                    value={field.value}\n                    className=\"flex w-full gap-2\"\n                  >\n                    {[\n                      { value: 'launch', label: 'Launch' },\n                      { value: 'scale', label: 'Scale' },\n                      { value: 'experiment', label: 'Prototype' },\n                    ].map((item) => {\n                      const isActive = field.value === item.value;\n\n                      return (\n                        <label\n                          key={item.value}\n                          htmlFor={item.value}\n                          className={`flex flex-1 cursor-pointer items-center justify-center gap-2 rounded-sm border px-3 py-2 text-xs transition-all ${isActive ? 'border-primary bg-primary/10' : 'bg-muted/70 border-border/50 hover:bg-muted/60'} `}\n                        >\n                          <RadioGroupItem\n                            value={item.value}\n                            id={item.value}\n                            className=\"hidden\"\n                          />\n                          <span>{item.label}</span>\n                        </label>\n                      );\n                    })}\n                  </RadioGroup>\n                )}\n              />\n            </FieldContent>\n            <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.15),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n              {form.formState.errors.goal?.message}\n            </FieldError>\n          </Field>\n\n          <Field>\n            <FieldLabel>Project Brief</FieldLabel>\n            <FieldContent>\n              <Textarea\n                placeholder=\"Describe what you're building and what problem it solves...\"\n                {...form.register('brief')}\n                className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 rounded-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all focus:scale-[1.01] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n              />\n            </FieldContent>\n            <FieldDescription>\n              The more context you provide, the better we can assist you.\n            </FieldDescription>\n            <FieldError className=\"bg-destructive/10 border-destructive/50 rounded-sm border p-1 text-xs shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_1px_0px_rgba(255,255,255,0.15),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\">\n              {form.formState.errors.brief?.message}\n            </FieldError>\n          </Field>\n\n          <Button\n            type=\"submit\"\n            className=\"flex w-full items-center justify-center gap-2 rounded-sm transition-all hover:scale-[1.02] active:scale-95\"\n          >\n            Create Project\n          </Button>\n        </form>\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default Form10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-mask-1",
      "type": "registry:component",
      "title": "Input Mask 1",
      "description": "Input Mask 1. An input field that enforces a specific format as users type, such as phone numbers, dates, or credit card details, improving data consistency and user experience.",
      "dependencies": [
        "react-icons",
        "use-mask-input"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-mask-1.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { withMask } from 'use-mask-input';\nimport { HiIdentification } from 'react-icons/hi2';\n\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputMask1 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label htmlFor={id} className=\"flex items-center gap-2\">\n        License Code\n      </Label>\n\n      <div className=\"relative\">\n        <Input\n          id={id}\n          type=\"text\"\n          placeholder=\"AB12 CDE\"\n          className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 pl-10 focus-visible:ring-2\"\n          ref={withMask('AA99 AAA', {\n            placeholder: '_',\n            showMaskOnHover: false,\n          })}\n        />\n        <HiIdentification className=\"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2\" />\n      </div>\n\n      <p className=\"text-muted-foreground text-xs\">\n        Enter your code in the required format\n      </p>\n    </div>\n  );\n};\n\nexport default InputMask1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-mask-2",
      "type": "registry:component",
      "title": "Input Mask 2",
      "description": "Input Mask 2. An input field that enforces a specific format as users type, such as phone numbers, dates, or credit card details, improving data consistency and user experience.",
      "dependencies": [
        "react-icons",
        "react-payment-inputs"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-mask-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { HiCreditCard } from 'react-icons/hi2';\n\nimport { usePaymentInputs } from 'react-payment-inputs';\nimport images, { type CardImages } from 'react-payment-inputs/images';\n\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputMask2 = () => {\n  const id = useId();\n  const { meta, getCardNumberProps, getCardImageProps } = usePaymentInputs();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label htmlFor={id}>Card Number</Label>\n\n      <div className=\"relative\">\n        <Input\n          {...getCardNumberProps()}\n          id={id}\n          placeholder=\"1234 5678 9012 3456\"\n          className=\"peer focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 pr-11 focus-visible:ring-2\"\n        />\n\n        <div className=\"text-muted-foreground pointer-events-none absolute inset-y-0 right-0 flex items-center justify-center pr-3 peer-disabled:opacity-50\">\n          {meta.cardType ? (\n            <svg\n              className=\"bg-muted/50 w-6 overflow-hidden shadow-md\"\n              {...getCardImageProps({\n                images: images as unknown as CardImages,\n              })}\n            />\n          ) : (\n            <HiCreditCard className=\"size-4\" />\n          )}\n        </div>\n      </div>\n\n      <p className=\"text-muted-foreground text-xs\">\n        Enter your card number as shown on your card\n      </p>\n    </div>\n  );\n};\n\nexport default InputMask2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-mask-3",
      "type": "registry:component",
      "title": "Input Mask 3",
      "description": "Input Mask 3. An input field that enforces a specific format as users type, such as phone numbers, dates, or credit card details, improving data consistency and user experience.",
      "dependencies": [
        "react-icons",
        "react-payment-inputs"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-mask-3.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { HiLockClosed } from 'react-icons/hi2';\n\nimport { usePaymentInputs } from 'react-payment-inputs';\n\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputMask3 = () => {\n  const id = useId();\n  const { getCVCProps } = usePaymentInputs();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label htmlFor={id} className=\"flex items-center gap-2\">\n        Security Code\n      </Label>\n\n      <div className=\"relative\">\n        <Input\n          {...getCVCProps()}\n          id={id}\n          placeholder=\"123\"\n          className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 pl-8 focus-visible:ring-2\"\n        />\n        <HiLockClosed className=\"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2\" />\n      </div>\n\n      <p className=\"text-muted-foreground text-xs\">\n        3 or 4 digit code on your card\n      </p>\n    </div>\n  );\n};\n\nexport default InputMask3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-mask-4",
      "type": "registry:component",
      "title": "Input Mask 4",
      "description": "Input Mask 4. An input field that enforces a specific format as users type, such as phone numbers, dates, or credit card details, improving data consistency and user experience.",
      "dependencies": [
        "react-icons",
        "react-payment-inputs"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-mask-4.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { HiCreditCard, HiCalendarDays, HiLockClosed } from 'react-icons/hi2';\n\nimport { usePaymentInputs } from 'react-payment-inputs';\nimport images, { type CardImages } from 'react-payment-inputs/images';\n\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputMask4 = () => {\n  const id = useId();\n\n  const {\n    meta,\n    getCardNumberProps,\n    getExpiryDateProps,\n    getCVCProps,\n    getCardImageProps,\n  } = usePaymentInputs();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label className=\"flex items-center gap-2\">Card Details</Label>\n\n      <div>\n        <div className=\"group relative focus-within:z-10\">\n          <Input\n            {...getCardNumberProps()}\n            id={`number-${id}`}\n            placeholder=\"1234 5678 9012 3456\"\n            className=\"peer focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/20 rounded-b-none pr-10 shadow-none focus-visible:ring-2\"\n          />\n\n          <div className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n            {meta.cardType ? (\n              <svg\n                className=\"w-6 overflow-hidden transition-transform duration-200 group-focus-within:scale-110\"\n                {...getCardImageProps({\n                  images: images as unknown as CardImages,\n                })}\n              />\n            ) : (\n              <HiCreditCard className=\"text-muted-foreground group-focus-within:text-foreground size-4 transition-all duration-200 group-focus-within:scale-110\" />\n            )}\n          </div>\n        </div>\n\n        <div className=\"-mt-px flex\">\n          <div className=\"group relative min-w-0 flex-1 focus-within:z-10\">\n            <Input\n              {...getExpiryDateProps()}\n              id={`expiry-${id}`}\n              placeholder=\"MM / YY\"\n              className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 rounded-t-none rounded-r-none pl-9 shadow-none focus-visible:ring-2\"\n            />\n            <HiCalendarDays className=\"text-muted-foreground group-focus-within:text-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2 transition-all duration-200 group-focus-within:scale-110\" />\n          </div>\n\n          <div className=\"group relative -ms-px min-w-0 flex-1 focus-within:z-10\">\n            <Input\n              {...getCVCProps()}\n              id={`cvc-${id}`}\n              placeholder=\"CVC\"\n              className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 bg-muted/50 rounded-t-none rounded-l-none pl-9 shadow-none focus-visible:ring-2\"\n            />\n            <HiLockClosed className=\"text-muted-foreground group-focus-within:text-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2 transition-all duration-200 group-focus-within:scale-110\" />\n          </div>\n        </div>\n      </div>\n\n      <p className=\"text-muted-foreground text-xs\">\n        Enter your card details securely\n      </p>\n    </div>\n  );\n};\n\nexport default InputMask4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-mask-5",
      "type": "registry:component",
      "title": "Input Mask 5",
      "description": "Input Mask 5. An input field that enforces a specific format as users type, such as phone numbers, dates, or credit card details, improving data consistency and user experience.",
      "dependencies": [
        "react-icons",
        "react-payment-inputs"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-mask-5.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { HiCalendarDays } from 'react-icons/hi2';\n\nimport { usePaymentInputs } from 'react-payment-inputs';\n\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputMask5 = () => {\n  const id = useId();\n  const { getExpiryDateProps } = usePaymentInputs();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label htmlFor={id} className=\"flex items-center gap-2\">\n        Expiry Date\n      </Label>\n      <div className=\"group bg-muted/20  focus-within:ring-primary/20 focus-within:border-primary/50 flex items-center gap-2 overflow-hidden rounded-md border focus-within:ring-2\">\n        <div className=\"border-border dark:border-border/50 bg-muted flex h-8 w-12 items-center justify-center border-r\">\n          <HiCalendarDays className=\"text-muted-foreground group-focus-within:text-foreground size-4 transition-all duration-200 group-focus-within:scale-110\" />\n        </div>\n\n        <Input\n          {...getExpiryDateProps()}\n          id={id}\n          placeholder=\"MM / YY\"\n          className=\"border-0 bg-transparent dark:bg-transparent p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\"\n        />\n      </div>\n\n      <p className=\"text-muted-foreground text-xs\">\n        Enter the expiry date as shown on your card\n      </p>\n    </div>\n  );\n};\n\nexport default InputMask5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-mask-6",
      "type": "registry:component",
      "title": "Input Mask 6",
      "description": "Input Mask 6. An input field that enforces a specific format as users type, such as phone numbers, dates, or credit card details, improving data consistency and user experience.",
      "dependencies": [
        "react-icons",
        "use-mask-input"
      ],
      "registryDependencies": [
        "input",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-mask-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { withMask } from 'use-mask-input';\nimport { HiClock } from 'react-icons/hi2';\n\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputMask6 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-3\">\n      <Label htmlFor={id} className=\"flex items-center gap-2\">\n        Time\n      </Label>\n\n      <div className=\"group bg-muted/20 focus-within:ring-primary/20 focus-within:border-primary/50 flex items-center gap-2 rounded-md border px-3 focus-within:ring-2\">\n        <HiClock className=\"text-muted-foreground group-focus-within:text-foreground size-4 transition-all duration-200 group-focus-within:scale-110\" />\n\n        <Input\n          id={id}\n          type=\"text\"\n          placeholder=\"HH:MM:SS\"\n          ref={withMask('datetime', {\n            placeholder: '_',\n            inputFormat: 'HH:MM:ss',\n            outputFormat: 'HH:MM:ss',\n            showMaskOnHover: false,\n          })}\n          className=\"border-0 bg-transparent dark:bg-transparent p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\"\n        />\n      </div>\n\n      <p className=\"text-muted-foreground text-xs\">\n        Enter time in 24-hour format (e.g. 14:30:00)\n      </p>\n    </div>\n  );\n};\n\nexport default InputMask6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-1",
      "type": "registry:component",
      "title": "Input OTP 1",
      "description": "Input OTP 1. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [
        "input-otp"
      ],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-1.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\nimport { REGEXP_ONLY_DIGITS } from 'input-otp';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp1 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"flex flex-col items-center justify-center gap-2\">\n      <div className=\"text-center\">\n        <Label htmlFor={id} className=\"text-base font-semibold\">\n          Enter OTP\n        </Label>\n      </div>\n\n      <InputOTP\n        id={id}\n        maxLength={4}\n        pattern={REGEXP_ONLY_DIGITS}\n        className=\"w-full\"\n      >\n        <InputOTPGroup className=\"flex w-full justify-center gap-3\">\n          <InputOTPSlot\n            index={0}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 rounded-sm! border text-lg data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={1}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 rounded-sm! border text-lg data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={2}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 rounded-sm! border text-lg data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={3}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 rounded-sm! border text-lg data-[active=true]:ring-2!\"\n          />\n        </InputOTPGroup>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-2",
      "type": "registry:component",
      "title": "Input OTP 2",
      "description": "Input OTP 2. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useId, useState } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\nimport { Button } from '@/components/base-ui/button';\n\nconst InputOtp2 = () => {\n  const id = useId();\n  const [seconds, setSeconds] = useState(30);\n\n  useEffect(() => {\n    if (seconds === 0) return;\n\n    const timer = setInterval(() => {\n      setSeconds((prev) => prev - 1);\n    }, 1000);\n\n    return () => clearInterval(timer);\n  }, [seconds]);\n\n  const handleResend = () => {\n    setSeconds(30);\n  };\n\n  return (\n    <div className=\"space-y-2\">\n      <div className=\"text-center\">\n        <Label htmlFor={id} className=\"text-base font-semibold\">\n          Verify Code\n        </Label>\n        <p className=\"text-muted-foreground text-start text-sm\">\n          Enter the 4-digit code sent to you\n        </p>\n      </div>\n\n      <InputOTP id={id} maxLength={4} className=\"w-full\">\n        <InputOTPGroup className=\"flex justify-between gap-3\">\n          {[0, 1, 2, 3].map((i) => (\n            <InputOTPSlot\n              key={i}\n              index={i}\n              className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 rounded-sm! border text-lg data-[active=true]:ring-2!\"\n            />\n          ))}\n        </InputOTPGroup>\n      </InputOTP>\n\n      <div className=\"flex items-center justify-start text-sm\">\n        <span className=\"text-muted-foreground\">\n          {seconds > 0\n            ? `Resend in 00:${seconds.toString().padStart(2, '0')}`\n            : \"Didn't receive code?\"}\n        </span>\n\n        <Button\n          variant={'link'}\n          onClick={handleResend}\n          disabled={seconds > 0}\n          className=\"p-0 pl-1\"\n        >\n          Resend\n        </Button>\n      </div>\n    </div>\n  );\n};\n\nexport default InputOtp2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-3",
      "type": "registry:component",
      "title": "Input OTP 3",
      "description": "Input OTP 3. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [
        "input-otp"
      ],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-3.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport { REGEXP_ONLY_DIGITS_AND_CHARS } from 'input-otp';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp3 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"space-y-3\">\n      <div className=\"space-y-1\">\n        <Label htmlFor={id}>Enter verification code</Label>\n        <p className=\"text-muted-foreground text-xs\">\n          This code may include letters (A–Z) and numbers (0–9)\n        </p>\n      </div>\n\n      <InputOTP id={id} maxLength={4} pattern={REGEXP_ONLY_DIGITS_AND_CHARS}>\n        <InputOTPGroup>\n          <InputOTPSlot\n            index={0}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 border text-lg data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={1}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 border text-lg data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={2}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 border text-lg data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={3}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-14 w-14 border text-lg data-[active=true]:ring-2!\"\n          />\n        </InputOTPGroup>\n      </InputOTP>\n\n      <p className=\"text-muted-foreground text-xs\">\n        Tip: Characters are not case-sensitive\n      </p>\n    </div>\n  );\n};\n\nexport default InputOtp3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-4",
      "type": "registry:component",
      "title": "Input OTP 4",
      "description": "Input OTP 4. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-4.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp4 = () => {\n  const id = useId();\n\n  const handleResend = () => {\n    // trigger resend logic here\n  };\n\n  return (\n    <div className=\"space-y-2\">\n      <div className=\"leading-tight\">\n        <Label htmlFor={id} className=\"text-sm font-semibold\">\n          Enter verification code\n        </Label>\n        <p className=\"text-muted-foreground text-xs\">\n          We’ve sent a 4-digit code to your device\n        </p>\n      </div>\n\n      <InputOTP id={id} maxLength={4} className=\"w-full\">\n        <InputOTPGroup className=\"flex justify-center\">\n          {[0, 1, 2, 3].map((i) => (\n            <InputOTPSlot\n              key={i}\n              index={i}\n              className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 bg-muted/50 dark:bg-muted/50 h-14 w-14 border text-lg\"\n            />\n          ))}\n        </InputOTPGroup>\n      </InputOTP>\n\n      <div className=\"flex items-center text-sm\">\n        <button\n          onClick={handleResend}\n          className=\"text-primary font-medium transition hover:underline\"\n        >\n          Resend\n        </button>\n      </div>\n    </div>\n  );\n};\n\nexport default InputOtp4;\n\n// shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.2)]\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-5",
      "type": "registry:component",
      "title": "Input OTP 5",
      "description": "Input OTP 5. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-5.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp5 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"max-w-sm space-y-2\">\n      <Label htmlFor={id} className=\"text-base font-semibold\">\n        Enter OTP\n      </Label>\n\n      <InputOTP id={id} maxLength={4} className=\"w-full\">\n        <InputOTPGroup className=\"flex justify-center gap-3\">\n          {[0, 1, 2, 3].map((i) => (\n            <InputOTPSlot\n              key={i}\n              index={i}\n              className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 bg-muted h-14 w-14 rounded-sm! border text-lg transition-all data-[active=true]:scale-110 data-[active=true]:ring-2!\"\n            />\n          ))}\n        </InputOTPGroup>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-6",
      "type": "registry:component",
      "title": "Input OTP 6",
      "description": "Input OTP 6. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\nimport { HiShieldCheck } from 'react-icons/hi2';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp6 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"max-w-sm space-y-2\">\n      <div className=\"flex items-center justify-start gap-2\">\n        <HiShieldCheck className=\"text-primary h-5 w-5\" />\n        <Label htmlFor={id} className=\"text-base font-semibold\">\n          Secure verification\n        </Label>\n      </div>\n\n      <InputOTP id={id} maxLength={4} className=\"w-full\">\n        <InputOTPGroup className=\"flex justify-center gap-3\">\n          {[0, 1, 2, 3].map((i) => (\n            <InputOTPSlot\n              key={i}\n              index={i}\n              className=\"bg-background hover:border-primary/60 data-[active=true]:border-primary data-[active=true]:ring-primary/30 h-10 w-10 rounded-lg border text-lg font-medium transition-all focus-visible:outline-none data-[active=true]:ring-2\"\n            />\n          ))}\n        </InputOTPGroup>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-7",
      "type": "registry:component",
      "title": "Input OTP 7",
      "description": "Input OTP 7. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSeparator,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp7 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"space-y-2\">\n      <div className=\"space-y-1 text-center\">\n        <Label htmlFor={id} className=\"text-sm font-semibold\">\n          Enter 6-digit OTP\n        </Label>\n      </div>\n\n      <InputOTP id={id} maxLength={6} className=\"w-full\">\n        <div className=\"flex items-center justify-center\">\n          <InputOTPGroup className=\"flex shadow-xs\">\n            {[0, 1, 2].map((i) => (\n              <InputOTPSlot\n                key={i}\n                index={i}\n                className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n              />\n            ))}\n          </InputOTPGroup>\n\n          <InputOTPSeparator className=\"text-primary text-lg\">\n            –\n          </InputOTPSeparator>\n\n          <InputOTPGroup className=\"flex shadow-xs\">\n            {[3, 4, 5].map((i) => (\n              <InputOTPSlot\n                key={i}\n                index={i}\n                className=\"bg-muted/50 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 border text-sm shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:scale-105 data-[active=true]:ring-2! dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7)]\"\n              />\n            ))}\n          </InputOTPGroup>\n        </div>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-8",
      "type": "registry:component",
      "title": "Input OTP 8",
      "description": "Input OTP 8. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-8.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp8 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"max-w-xs space-y-1\">\n      <div className=\"text-center\">\n        <Label htmlFor={id} className=\"text-base font-medium\">\n          Enter code\n        </Label>\n      </div>\n\n      <InputOTP id={id} maxLength={4} className=\"w-full\">\n        <InputOTPGroup className=\"flex justify-between gap-2 *:data-[active=true]:ring-0 *:data-[slot=input-otp-slot]:rounded-none *:data-[slot=input-otp-slot]:border-0 *:data-[slot=input-otp-slot]:shadow-none *:dark:data-[slot=input-otp-slot]:bg-transparent\">\n          {[0, 1, 2, 3].map((i) => (\n            <InputOTPSlot\n              key={i}\n              index={i}\n              className=\"text-muted-foreground before:bg-muted-foreground/30 after:bg-primary data-[filled=true]:text-primary relative h-12 w-12 text-center text-lg transition-colors duration-200 before:absolute before:bottom-0 before:left-0 before:h-[2px] before:w-full after:absolute after:bottom-0 after:left-0 after:h-[2px] after:w-full after:origin-left after:scale-x-0 after:transition-transform after:duration-300 focus-visible:outline-none data-[active=true]:after:scale-x-100 data-[filled=true]:after:!scale-x-100 data-[filled=true]:after:scale-x-100 data-[filled=true]:after:transition-none\"\n            />\n          ))}\n        </InputOTPGroup>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-9",
      "type": "registry:component",
      "title": "Input OTP 9",
      "description": "Input OTP 9. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSeparator,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp9 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"max-w-md space-y-1\">\n      <div className=\"text-center\">\n        <Label htmlFor={id} className=\"text-sm font-semibold\">\n          Enter 6 digit OTP\n        </Label>\n      </div>\n\n      <InputOTP id={id} maxLength={6}>\n        <div className=\"flex items-center justify-center gap-2\">\n          <InputOTPGroup className=\"flex gap-1.5\">\n            {[0, 1, 2].map((i) => (\n              <InputOTPSlot\n                key={i}\n                index={i}\n                className=\"bg-muted/70 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 rounded-lg border text-sm font-medium shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05),0px_2px_4px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:ring-2 dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7),0px_2px_4px_0px_rgba(0,0,0,0.3)]\"\n              />\n            ))}\n          </InputOTPGroup>\n\n          <InputOTPSeparator className=\"text-muted-foreground text-lg\">\n            —\n          </InputOTPSeparator>\n\n          <InputOTPGroup className=\"flex gap-1.5\">\n            {[3, 4, 5].map((i) => (\n              <InputOTPSlot\n                key={i}\n                index={i}\n                className=\"bg-muted/70 data-[active=true]:ring-primary/20 data-[active=true]:border-primary/50 h-8 w-8 rounded-lg border text-sm font-medium shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,1),inset_0px_-1px_0px_0px_rgba(0,0,0,0.05),0px_2px_4px_0px_rgba(0,0,0,0.05)] transition-all data-[active=true]:ring-2 dark:shadow-[inset_0px_1px_0px_0px_rgba(255,255,255,0.25),inset_0px_-1px_0px_0px_rgba(0,0,0,0.7),0px_2px_4px_0px_rgba(0,0,0,0.3)]\"\n              />\n            ))}\n          </InputOTPGroup>\n        </div>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-otp-10",
      "type": "registry:component",
      "title": "Input OTP 10",
      "description": "Input OTP 10. A set of input fields designed to capture one-time passwords (OTP) or verification codes, typically split into individual boxes for better UX and security.",
      "dependencies": [],
      "registryDependencies": [
        "input-otp",
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/input-otp-10.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId } from 'react';\n\nimport {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSlot,\n} from '@/components/base-ui/input-otp';\nimport { Label } from '@/components/base-ui/label';\n\nconst InputOtp10 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"space-y-3\">\n      <Label htmlFor={id}>Split verification code</Label>\n\n      <InputOTP id={id} maxLength={6}>\n        <InputOTPGroup>\n          <InputOTPSlot\n            index={0}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-8 w-8 border text-sm data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={1}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-8 w-8 border text-sm data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={2}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-8 w-8 border text-sm data-[active=true]:ring-2!\"\n          />\n        </InputOTPGroup>\n\n        <div\n          role=\"separator\"\n          className=\"flex flex-col items-center justify-center gap-[3px] px-2\"\n        >\n          <span className=\"bg-primary h-2 w-2 rounded-full\" />\n        </div>\n\n        <InputOTPGroup>\n          <InputOTPSlot\n            index={3}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-8 w-8 border text-sm data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={4}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-8 w-8 border text-sm data-[active=true]:ring-2!\"\n          />\n          <InputOTPSlot\n            index={5}\n            className=\"data-[active=true]:ring-primary/30! data-[active=true]:border-primary/50 h-8 w-8 border text-sm data-[active=true]:ring-2!\"\n          />\n        </InputOTPGroup>\n      </InputOTP>\n    </div>\n  );\n};\n\nexport default InputOtp10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-1",
      "type": "registry:component",
      "title": "Pagination 1",
      "description": "Pagination 1. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-1.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nconst Pagination1 = () => {\n  return (\n    <Pagination className=\"py-2\">\n      <PaginationContent className=\"gap-3\">\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            text=\"Back\"\n            className=\"px-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"transition-all hover:bg-neutral-50 active:scale-90 dark:hover:bg-neutral-900\"\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className=\"!border-primary/50 scale-110 shadow-md transition-all\"\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"transition-all hover:bg-neutral-50 active:scale-90 dark:hover:bg-neutral-900\"\n          >\n            3\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            text=\"Next\"\n            className=\"px-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-2",
      "type": "registry:component",
      "title": "Pagination 2",
      "description": "Pagination 2. Pagination is used to guide users through a series of related content.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-2.tsx",
          "type": "registry:component",
          "content": "import { IconChevronLeft, IconChevronRight } from '@tabler/icons-react';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n} from '@/components/base-ui/pagination';\n\nconst Pagination2 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"gap-4\">\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Previous\"\n            size=\"icon\"\n            className=\"size-9 rounded-xl border-none bg-neutral-50 transition-all hover:bg-neutral-100 active:scale-95 dark:bg-neutral-900/50 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronLeft className=\"size-5 text-neutral-600 dark:text-neutral-400\" />\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"size-9 rounded-xl border-none transition-colors hover:bg-neutral-50 dark:hover:bg-neutral-900\"\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className=\"size-9 rounded-xl border-none text-black shadow-sm shadow-neutral-400 dark:bg-neutral-900 dark:text-white dark:shadow-neutral-700\"\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"size-9 rounded-xl border-none transition-colors hover:bg-neutral-50 dark:hover:bg-neutral-900\"\n          >\n            3\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Next\"\n            size=\"icon\"\n            className=\"size-9 rounded-xl border-none bg-neutral-50 transition-all hover:bg-neutral-100 active:scale-95 dark:bg-neutral-900/50 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronRight className=\"size-5 text-neutral-600 dark:text-neutral-400\" />\n          </PaginationLink>\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-3",
      "type": "registry:component",
      "title": "Pagination 3",
      "description": "Pagination 3. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-3.tsx",
          "type": "registry:component",
          "content": "import { buttonVariants } from '@/components/ui/button';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nimport { cn } from '@/lib/utils';\n\nconst Pagination3 = () => {\n  return (\n    <Pagination>\n      <PaginationContent>\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            text=\"Prev\"\n            className=\"transition-colors hover:text-orange-600\"\n          />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className={cn(\n              buttonVariants({\n                variant: 'default',\n                size: 'icon',\n              }),\n              'scale-110 rounded-xl border-none text-white shadow-lg shadow-orange-200 transition-all duration-300 hover:text-white dark:bg-orange-600 dark:hover:bg-orange-700',\n            )}\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            3\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            text=\"Next\"\n            className=\"rounded-lg transition-all hover:bg-neutral-50 hover:text-orange-600 dark:hover:bg-neutral-900/50\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-4",
      "type": "registry:component",
      "title": "Pagination 4",
      "description": "Pagination 4. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-4.tsx",
          "type": "registry:component",
          "content": "import { buttonVariants } from '@/components/ui/button';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nimport { cn } from '@/lib/utils';\n\nconst Pagination4 = () => {\n  return (\n    <Pagination>\n      <PaginationContent>\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            text=\"Back\"\n            className=\"rounded-lg px-4 text-emerald-700 transition-all hover:text-emerald-500 dark:text-emerald-400\"\n          />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className={cn(\n              'rounded-xl !border-none bg-emerald-100 font-bold text-emerald-800 !shadow-sm transition-all hover:bg-emerald-200 active:scale-95 dark:bg-emerald-900/50 dark:text-emerald-100 dark:hover:bg-emerald-900',\n              buttonVariants({\n                variant: 'secondary',\n                size: 'icon',\n              }),\n            )}\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            3\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            text=\"Forward\"\n            className=\"rounded-lg px-4 text-emerald-700 transition-all hover:text-emerald-500 dark:text-emerald-400\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-5",
      "type": "registry:component",
      "title": "Pagination 5",
      "description": "Pagination 5. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-5.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\nimport { cn } from '@/lib/utils';\n\nconst pages = [1, 2, 3];\n\nconst Pagination5 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"gap-0 divide-x divide-neutral-200 overflow-hidden rounded-xl border bg-white shadow-lg dark:divide-neutral-800 dark:bg-neutral-950\">\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            className=\"h-10 rounded-none border-none px-4 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n            text=\"Prev\"\n          />\n        </PaginationItem>\n        {pages.map((page) => {\n          const isActive = page === 2;\n\n          return (\n            <PaginationItem key={page}>\n              <PaginationLink\n                href={`#${page}`}\n                className={cn(\n                  {\n                    'bg-neutral-900 text-white hover:bg-neutral-800 hover:text-white dark:bg-neutral-100 dark:text-neutral-900 dark:hover:bg-neutral-200':\n                      isActive,\n                    'hover:bg-neutral-100 dark:hover:bg-neutral-800': !isActive,\n                  },\n                  'flex h-10 w-10 items-center justify-center rounded-none border-none transition-all',\n                )}\n                isActive={isActive}\n              >\n                {page}\n              </PaginationLink>\n            </PaginationItem>\n          );\n        })}\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            className=\"h-10 rounded-none border-none px-4 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n            text=\"Next\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-6",
      "type": "registry:component",
      "title": "Pagination 6",
      "description": "Pagination 6. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-6.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nconst pages = [1, 2, 3];\n\nconst Pagination6 = () => {\n  return (\n    <Pagination>\n      <PaginationContent>\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            className=\"rounded-xl border border-neutral-200 bg-neutral-50 transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800\"\n            text=\"Prev\"\n          />\n        </PaginationItem>\n        {pages.map((page) => (\n          <PaginationItem key={page}>\n            <PaginationLink\n              href={`#${page}`}\n              isActive={page === 2}\n              className=\"rounded-xl shadow-sm transition-all hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n            >\n              {page}\n            </PaginationLink>\n          </PaginationItem>\n        ))}\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            className=\"rounded-xl border border-neutral-200 bg-neutral-50 transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800\"\n            text=\"Next\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-7",
      "type": "registry:component",
      "title": "Pagination 7",
      "description": "Pagination 7. Pagination is used to guide users through a series of related content.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-7.tsx",
          "type": "registry:component",
          "content": "import {\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronsLeft,\n  IconChevronsRight,\n} from '@tabler/icons-react';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n} from '@/components/base-ui/pagination';\nimport { cn } from '@/lib/utils';\n\nconst pages = [1, 2, 3];\n\nconst Pagination7 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"mx-auto w-fit gap-1.5 rounded-2xl bg-neutral-100/50 p-1 dark:bg-neutral-900/50\">\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"First page\"\n            size=\"icon\"\n            className=\"rounded-xl border-none bg-white shadow-sm transition-all hover:shadow-md dark:bg-neutral-950\"\n          >\n            <IconChevronsLeft className=\"size-4 text-neutral-900 dark:text-neutral-100\" />\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Previous\"\n            size=\"icon\"\n            className=\"rounded-xl border-none transition-all hover:bg-white dark:hover:bg-neutral-800\"\n          >\n            <IconChevronLeft className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n        {pages.map((page) => (\n          <PaginationItem key={page}>\n            <PaginationLink\n              href={`#${page}`}\n              isActive={page === 2}\n              className={cn(\n                'rounded-xl font-semibold transition-all',\n                page === 2\n                  ? 'scale-105 transform shadow-md'\n                  : 'hover:bg-white dark:hover:bg-neutral-800',\n              )}\n            >\n              {page}\n            </PaginationLink>\n          </PaginationItem>\n        ))}\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Next\"\n            size=\"icon\"\n            className=\"rounded-xl border-none transition-all hover:bg-white dark:hover:bg-neutral-800\"\n          >\n            <IconChevronRight className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Last page\"\n            size=\"icon\"\n            className=\"rounded-xl border-none bg-white shadow-sm transition-all hover:shadow-md dark:bg-neutral-950\"\n          >\n            <IconChevronsRight className=\"size-4 text-neutral-900 dark:text-neutral-100\" />\n          </PaginationLink>\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-8",
      "type": "registry:component",
      "title": "Pagination 8",
      "description": "Pagination 8. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-8.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationEllipsis,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Pagination8 = () => {\n  return (\n    <Pagination>\n      <PaginationContent>\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            className=\"rounded-lg px-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className=\"rounded-xl border-none shadow-lg\"\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <Tooltip>\n            <TooltipTrigger\n              asChild\n              className=\"flex size-9 cursor-pointer items-center justify-center rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n            >\n              <PaginationEllipsis />\n            </TooltipTrigger>\n            <TooltipContent className=\"rounded-lg border-none bg-indigo-600 px-3 py-1.5 text-white shadow-lg\">\n              <p className=\"text-xs font-bold tracking-wider uppercase\">\n                Search 10+ more\n              </p>\n            </TooltipContent>\n          </Tooltip>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            className=\"rounded-lg px-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-9",
      "type": "registry:component",
      "title": "Pagination 9",
      "description": "Pagination 9. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-9.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nconst Pagination9 = () => {\n  return (\n    <Pagination>\n      <PaginationContent>\n        <PaginationItem>\n          <PaginationPrevious href=\"#\" className=\"rounded-none\" />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className='relative rounded-none border-0 bg-transparent! p-0 font-bold !shadow-none transition-all duration-300 before:absolute before:-bottom-1 before:left-0 before:h-1 before:w-full before:bg-indigo-600 before:content-[\"\"] hover:before:bg-indigo-400'\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-none px-3 transition-colors hover:bg-neutral-50 dark:hover:bg-neutral-900/50\"\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-none px-3 transition-colors hover:bg-neutral-50 dark:hover:bg-neutral-900/50\"\n          >\n            3\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext href=\"#\" className=\"rounded-none\" />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-10",
      "type": "registry:component",
      "title": "Pagination 10",
      "description": "Pagination 10. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-10.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nconst Pagination10 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"gap-2 rounded-2xl border border-neutral-200 bg-white/80 p-2 shadow-xl backdrop-blur-sm transition-all hover:shadow-2xl dark:border-neutral-800 dark:bg-neutral-950\">\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            text=\"Back\"\n            className=\"rounded-xl px-4 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            1\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            isActive\n            className=\"rounded-xl border-none font-bold shadow-lg transition-all\"\n          >\n            2\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            className=\"rounded-xl transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            3\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext href=\"#\" />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-11",
      "type": "registry:component",
      "title": "Pagination 11",
      "description": "Pagination 11. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-11.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nconst Pagination11 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"w-full justify-between gap-6 rounded-2xl border border-dashed border-neutral-200 bg-neutral-50 px-2 py-2 dark:border-neutral-800 dark:bg-neutral-900/50\">\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            className=\"rounded-xl border-[1.5px] border-indigo-600/30 px-6 text-indigo-700 transition-all hover:scale-105 hover:bg-neutral-100 hover:text-indigo-800 dark:text-indigo-400 dark:hover:bg-neutral-800\"\n            text=\"Previous\"\n          />\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            className=\"rounded-xl border-[1.5px] border-indigo-600/30 px-6 text-indigo-700 transition-all hover:scale-105 hover:bg-neutral-100 hover:text-indigo-800 dark:text-indigo-400 dark:hover:bg-neutral-800\"\n            text=\"Next Step\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-12",
      "type": "registry:component",
      "title": "Pagination 12",
      "description": "Pagination 12. Pagination is used to guide users through a series of related content.",
      "dependencies": [],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-12.tsx",
          "type": "registry:component",
          "content": "import {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\n\nconst Pagination12 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"w-full justify-between\">\n        <PaginationItem>\n          <PaginationPrevious\n            href=\"#\"\n            className=\"rounded-lg border border-neutral-200 px-3 transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n        <PaginationItem className=\"rounded-full border border-neutral-200 bg-neutral-100 px-4 py-1.5 shadow-inner dark:border-neutral-700 dark:bg-neutral-800\">\n          <p\n            className=\"text-muted-foreground/80 text-xs font-medium tracking-[0.2em] uppercase\"\n            aria-live=\"polite\"\n          >\n            Page{' '}\n            <span className=\"text-foreground font-mono text-sm font-bold tracking-normal\">\n              02\n            </span>{' '}\n            / <span className=\"text-foreground font-mono text-sm\">05</span>\n          </p>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationNext\n            href=\"#\"\n            className=\"rounded-lg border border-neutral-200 px-3 transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:hover:bg-neutral-800\"\n          />\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-13",
      "type": "registry:component",
      "title": "Pagination 13",
      "description": "Pagination 13. Pagination is used to guide users through a series of related content.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "pagination"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-13.tsx",
          "type": "registry:component",
          "content": "import { IconChevronLeft, IconChevronRight } from '@tabler/icons-react';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n} from '@/components/base-ui/pagination';\n\nconst Pagination13 = () => {\n  return (\n    <Pagination>\n      <PaginationContent className=\"gap-3 rounded-full border border-neutral-200 bg-neutral-50 p-1 shadow-sm dark:border-neutral-800 dark:bg-neutral-900\">\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Previous\"\n            size=\"icon\"\n            className=\"rounded-full border-none bg-white shadow-sm transition-all hover:scale-110 hover:bg-neutral-50 active:scale-95 dark:bg-neutral-950 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronLeft className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem className=\"px-3\">\n          <p\n            className=\"text-sm font-bold text-neutral-500 dark:text-neutral-400\"\n            aria-live=\"polite\"\n          >\n            <span className=\"text-neutral-900 italic dark:text-neutral-100\">\n              2\n            </span>{' '}\n            <span className=\"px-1 opacity-40\">/</span> 5\n          </p>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Next\"\n            size=\"icon\"\n            className=\"rounded-full border-none bg-white shadow-sm transition-all hover:scale-110 hover:bg-neutral-50 active:scale-95 dark:bg-neutral-950 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronRight className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-14",
      "type": "registry:component",
      "title": "Pagination 14",
      "description": "Pagination 14. Pagination is used to guide users through a series of related content.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "pagination",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-14.tsx",
          "type": "registry:component",
          "content": "import {\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronsLeft,\n  IconChevronsRight,\n} from '@tabler/icons-react';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n} from '@/components/base-ui/pagination';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Pagination14 = () => {\n  return (\n    <Pagination className=\"py-2\">\n      <PaginationContent className=\"mx-auto w-fit gap-2 rounded-2xl border border-neutral-200 bg-neutral-50 p-1.5 shadow-sm max-sm:flex-wrap max-sm:justify-center dark:border-neutral-800 dark:bg-neutral-900/50\">\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Start\"\n            size=\"icon\"\n            className=\"rounded-xl border-none bg-white shadow-sm transition-all hover:bg-neutral-100 active:scale-95 dark:bg-neutral-950 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronsLeft className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Prev\"\n            size=\"icon\"\n            className=\"rounded-xl border-none transition-all hover:bg-white active:scale-95 dark:hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronLeft className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n\n        <PaginationItem className=\"mx-1 flex items-center gap-2 rounded-xl border border-neutral-100 bg-white px-3 whitespace-nowrap shadow-sm dark:border-neutral-800 dark:bg-neutral-950\">\n          <span className=\"shrink-0 text-[10px] font-bold tracking-tight text-neutral-500 uppercase dark:text-neutral-400\">\n            Page\n          </span>\n          <Select defaultValue={String(1)} aria-label=\"Jump to page\">\n            <SelectTrigger\n              id=\"jump-page\"\n              className=\"h-7 w-fit min-w-[40px] border-none px-0 font-bold text-neutral-900 shadow-none focus:ring-0 dark:bg-transparent dark:text-neutral-100 dark:hover:bg-transparent\"\n              aria-label=\"Choose page\"\n            >\n              <SelectValue placeholder=\"1\" />\n            </SelectTrigger>\n            <SelectContent className=\"rounded-xl border-neutral-200 shadow-xl dark:border-neutral-800\">\n              {Array.from({ length: 10 }, (_, i) => i + 1).map((page) => (\n                <SelectItem\n                  key={page}\n                  value={String(page)}\n                  className=\"rounded-lg\"\n                >\n                  {page}\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n          <span className=\"shrink-0 text-[10px] font-bold text-neutral-400 dark:text-neutral-500\">\n            / 10\n          </span>\n        </PaginationItem>\n\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"Next\"\n            size=\"icon\"\n            className=\"rounded-xl border-none transition-all hover:bg-white active:scale-95 dark:hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronRight className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n        <PaginationItem>\n          <PaginationLink\n            href=\"#\"\n            aria-label=\"End\"\n            size=\"icon\"\n            className=\"rounded-xl border-none bg-white shadow-sm transition-all hover:bg-neutral-100 active:scale-95 dark:bg-neutral-950 dark:hover:bg-neutral-800\"\n          >\n            <IconChevronsRight className=\"size-4\" />\n          </PaginationLink>\n        </PaginationItem>\n      </PaginationContent>\n    </Pagination>\n  );\n};\n\nexport default Pagination14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pagination-15",
      "type": "registry:component",
      "title": "Pagination 15",
      "description": "Pagination 15. Pagination is used to guide users through a series of related content.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "label",
        "pagination",
        "select",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/pagination-15.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport {\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronsLeft,\n  IconChevronsRight,\n  IconDots,\n} from '@tabler/icons-react';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationItem,\n  PaginationLink,\n} from '@/components/base-ui/pagination';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\nimport { cn } from '@/lib/utils';\n\nconst pages = [1, 2, 3];\n\nconst Pagination15 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"flex w-full flex-wrap items-center justify-between gap-6 rounded-2xl border border-neutral-200 bg-white/70 p-5 shadow-xl backdrop-blur-md max-sm:flex-col max-sm:justify-center max-sm:gap-4 max-sm:px-3 max-sm:py-6 dark:border-neutral-800 dark:bg-neutral-950/70\">\n      <div className=\"flex shrink-0 items-center gap-4 rounded-xl border border-neutral-100 bg-neutral-100/50 p-1 dark:border-neutral-800 dark:bg-neutral-900/50\">\n        <Label\n          htmlFor={id}\n          className=\"pl-2 text-[10px] font-bold tracking-widest text-neutral-500 uppercase dark:text-neutral-400\"\n        >\n          Rows\n        </Label>\n        <Select defaultValue=\"10\">\n          <SelectTrigger\n            id={id}\n            className=\"h-7 w-[60px] rounded-lg border-none bg-white px-2 text-xs font-bold shadow-none dark:bg-neutral-950\"\n          >\n            <SelectValue placeholder=\"10\" />\n          </SelectTrigger>\n          <SelectContent className=\"rounded-xl border-neutral-200 shadow-2xl dark:border-neutral-800\">\n            <SelectItem value=\"10\" className=\"rounded-lg\">\n              10\n            </SelectItem>\n            <SelectItem value=\"25\" className=\"rounded-lg\">\n              25\n            </SelectItem>\n            <SelectItem value=\"50\" className=\"rounded-lg\">\n              50\n            </SelectItem>\n          </SelectContent>\n        </Select>\n      </div>\n\n      <div className=\"flex items-center gap-6 max-sm:flex-col max-sm:justify-center max-sm:gap-4\">\n        <p\n          className=\"text-xs font-semibold text-neutral-500 dark:text-neutral-400\"\n          aria-live=\"polite\"\n        >\n          Showing{' '}\n          <span className=\"px-1 font-bold text-indigo-600 dark:text-indigo-400\">\n            1-10\n          </span>{' '}\n          of{' '}\n          <span className=\"px-1 font-bold text-neutral-900 dark:text-neutral-100\">\n            100\n          </span>{' '}\n          items\n        </p>\n        <Pagination className=\"w-auto\">\n          <PaginationContent className=\"gap-1.5 rounded-xl bg-neutral-100/50 p-1 max-sm:flex-wrap max-sm:justify-center max-sm:gap-1 dark:bg-neutral-900/50\">\n            <PaginationItem className=\"hidden sm:flex\">\n              <PaginationLink\n                href=\"#\"\n                aria-label=\"Jump Start\"\n                size=\"icon\"\n                className=\"rounded-xl border-none bg-white shadow-sm transition-all hover:scale-105 hover:bg-neutral-100 active:scale-95 dark:bg-neutral-950 dark:hover:bg-neutral-800\"\n              >\n                <IconChevronsLeft className=\"size-4\" />\n              </PaginationLink>\n            </PaginationItem>\n            <PaginationItem>\n              <PaginationLink\n                href=\"#\"\n                aria-label=\"Back\"\n                size=\"icon\"\n                className=\"rounded-lg border-none transition-all hover:bg-white active:scale-95 dark:hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n              >\n                <IconChevronLeft className=\"size-4\" />\n              </PaginationLink>\n            </PaginationItem>\n            {pages.map((page) => (\n              <PaginationItem key={page}>\n                <PaginationLink\n                  href={`#${page}`}\n                  isActive={page === 2}\n                  className={cn(\n                    'rounded-lg font-bold transition-all',\n                    page === 2\n                      ? 'scale-110 bg-indigo-600 text-white shadow-lg shadow-indigo-200 hover:bg-indigo-700 hover:text-white dark:bg-indigo-600 dark:shadow-indigo-900/20 dark:hover:bg-indigo-700'\n                      : 'hover:bg-white dark:hover:bg-neutral-800',\n                  )}\n                >\n                  {page}\n                </PaginationLink>\n              </PaginationItem>\n            ))}\n            <PaginationItem>\n              <Tooltip>\n                <TooltipTrigger\n                  asChild\n                  className=\"flex size-8 items-center justify-center rounded-lg transition-all hover:bg-white active:scale-95 dark:hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n                >\n                  <IconDots className=\"size-4 opacity-50\" />\n                </TooltipTrigger>\n                <TooltipContent className=\"rounded-lg border-none bg-neutral-900 px-3 py-1.5 text-white shadow-xl\">\n                  <p className=\"text-[10px] font-bold tracking-tight uppercase\">\n                    2 more pages\n                  </p>\n                </TooltipContent>\n              </Tooltip>\n            </PaginationItem>\n            <PaginationItem>\n              <PaginationLink\n                href=\"#\"\n                aria-label=\"Forward\"\n                size=\"icon\"\n                className=\"rounded-lg border-none transition-all hover:bg-white active:scale-95 dark:hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n              >\n                <IconChevronRight className=\"size-4\" />\n              </PaginationLink>\n            </PaginationItem>\n            <PaginationItem className=\"hidden sm:flex\">\n              <PaginationLink\n                href=\"#\"\n                aria-label=\"Jump End\"\n                size=\"icon\"\n                className=\"rounded-lg border-none bg-white shadow-sm transition-all hover:scale-105 hover:bg-neutral-100 active:scale-95 dark:bg-neutral-950 dark:hover:bg-neutral-800\"\n              >\n                <IconChevronsRight className=\"size-4\" />\n              </PaginationLink>\n            </PaginationItem>\n          </PaginationContent>\n        </Pagination>\n      </div>\n    </div>\n  );\n};\n\nexport default Pagination15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-1",
      "type": "registry:component",
      "title": "Popover 1",
      "description": "Popover 1. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "popover",
        "progress",
        "separator"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-1.tsx",
          "type": "registry:component",
          "content": "import { StarIcon } from 'lucide-react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { Progress } from '@/components/base-ui/progress';\nimport { Separator } from '@/components/base-ui/separator';\nimport { cn } from '@/lib/utils';\n\nconst ratings = {\n  1: 0,\n  2: 15,\n  3: 30,\n  4: 30,\n  5: 225,\n};\n\nconst Popover1 = () => {\n  const totalReviews = Object.values(ratings).reduce(\n    (acc, count) => acc + count,\n    0,\n  );\n  const totalRating = Object.entries(ratings).reduce(\n    (acc, [star, count]) => acc + Number(star) * count,\n    0,\n  );\n  const averageRating = Number((totalRating / totalReviews || 0).toFixed(2));\n\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl border-neutral-200 transition-all hover:bg-neutral-50 dark:border-neutral-800 dark:hover:bg-neutral-900\"\n        >\n          <StarIcon className=\"size-4 text-neutral-500\" />\n          <span className=\"sr-only\">View Reviews</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent\n        sideOffset={8}\n        collisionPadding={12}\n        className=\"shadow-3xl max-h-[var(--radix-popover-content-available-height)] w-[calc(100vw-32px)] max-w-[340px] overflow-y-auto rounded-3xl border-neutral-200 bg-white p-4 dark:border-neutral-800 dark:bg-neutral-950\"\n      >\n        <div className=\"flex flex-col gap-4 sm:gap-8\">\n          <div className=\"flex items-end justify-between px-1\">\n            <div className=\"flex flex-col gap-1\">\n              <span className=\"text-4xl font-bold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                {averageRating}\n              </span>\n              <div className=\"text-[10px] font-bold tracking-widest text-neutral-400 uppercase dark:text-neutral-500\">\n                Rating Score\n              </div>\n            </div>\n            <div className=\"flex flex-col items-end gap-1.5\">\n              <div className=\"flex items-center gap-0.5\">\n                {[...Array(5)].map((_, i) => (\n                  <StarIcon\n                    key={i}\n                    className={cn(\n                      'size-3.5',\n                      i < Math.floor(averageRating)\n                        ? 'fill-orange-500 stroke-orange-500'\n                        : 'fill-neutral-100 stroke-neutral-200 dark:fill-neutral-900 dark:stroke-neutral-800',\n                    )}\n                  />\n                ))}\n              </div>\n              <div className=\"text-[11px] font-medium text-neutral-400 dark:text-neutral-600\">\n                {totalReviews} global reviews\n              </div>\n            </div>\n          </div>\n\n          <div className=\"flex flex-col gap-2\">\n            <div className=\"flex items-center justify-between px-1\">\n              <div className=\"flex items-center gap-2\">\n                <div className=\"size-1.5 animate-pulse rounded-full bg-emerald-500\" />\n                <span className=\"text-[11px] font-bold text-neutral-900 dark:text-neutral-100\">\n                  Live Activity\n                </span>\n              </div>\n              <Badge\n                variant=\"secondary\"\n                className=\"rounded-sm bg-emerald-500/10 px-2 py-0.5 text-[9px] font-bold tracking-widest text-emerald-700 uppercase dark:text-emerald-400\"\n              >\n                +6 Today\n              </Badge>\n            </div>\n            <Separator className=\"opacity-50 dark:opacity-20\" />\n\n            <ul className=\"space-y-4 px-1\">\n              {Object.entries(ratings)\n                .reverse()\n                .map(([star, count]) => (\n                  <li key={star} className=\"flex items-center gap-4\">\n                    <span className=\"w-10 shrink-0 text-[11px] font-medium text-neutral-500 dark:text-neutral-400\">\n                      {star} Star\n                    </span>\n                    <Progress\n                      value={(count / totalReviews) * 100}\n                      className=\"h-1 bg-neutral-50 dark:bg-neutral-900 [&>[data-slot=progress-indicator]]:bg-orange-500\"\n                    />\n                    <span className=\"w-8 shrink-0 text-right text-[11px] font-medium text-neutral-300 dark:text-neutral-700\">\n                      {count.toString()}\n                    </span>\n                  </li>\n                ))}\n            </ul>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-2",
      "type": "registry:component",
      "title": "Popover 2",
      "description": "Popover 2. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "input",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-2.tsx",
          "type": "registry:component",
          "content": "import { PencilRulerIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\n\nconst Popover2 = () => {\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl transition-all hover:bg-neutral-100 active:scale-95 dark:hover:bg-neutral-800\"\n        >\n          <PencilRulerIcon className=\"size-4\" />\n          <span className=\"sr-only\">Dimensions</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-80 rounded-2xl border-neutral-200 bg-white shadow-2xl dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"grid gap-6 p-1\">\n          <div className=\"space-y-1.5\">\n            <h4 className=\"leading-none font-bold text-neutral-900 dark:text-neutral-100\">\n              Workspace Bounds\n            </h4>\n            <p className=\"text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n              Control the structural limits of this container.\n            </p>\n          </div>\n          <div className=\"grid gap-4\">\n            <div className=\"grid grid-cols-3 items-center gap-4\">\n              <Label\n                htmlFor=\"width\"\n                className=\"text-sm font-medium text-neutral-500\"\n              >\n                Horizon\n              </Label>\n              <Input\n                id=\"width\"\n                defaultValue=\"100%\"\n                className=\"col-span-2 h-8 rounded-lg border-neutral-200 bg-neutral-50 font-medium dark:border-neutral-800 dark:bg-neutral-900\"\n                title=\"Width\"\n              />\n            </div>\n            <div className=\"grid grid-cols-3 items-center gap-4\">\n              <Label\n                htmlFor=\"maxWidth\"\n                className=\"text-sm font-medium text-neutral-500\"\n              >\n                Max Horiz.\n              </Label>\n              <Input\n                id=\"maxWidth\"\n                defaultValue=\"300px\"\n                className=\"col-span-2 h-8 rounded-lg border-neutral-200 bg-neutral-50 font-medium dark:border-neutral-800 dark:bg-neutral-900\"\n                title=\"Max width\"\n              />\n            </div>\n            <div className=\"grid grid-cols-3 items-center gap-4\">\n              <Label\n                htmlFor=\"height\"\n                className=\"text-sm font-medium text-neutral-500\"\n              >\n                Vertical\n              </Label>\n              <Input\n                id=\"height\"\n                defaultValue=\"25px\"\n                className=\"col-span-2 h-8 rounded-lg border-neutral-200 bg-neutral-50 font-medium dark:border-neutral-800 dark:bg-neutral-900\"\n                title=\"Height\"\n              />\n            </div>\n            <div className=\"grid grid-cols-3 items-center gap-4\">\n              <Label\n                htmlFor=\"maxHeight\"\n                className=\"text-sm font-medium text-neutral-500\"\n              >\n                Max Vert.\n              </Label>\n              <Input\n                id=\"maxHeight\"\n                defaultValue=\"none\"\n                className=\"col-span-2 h-8 rounded-lg border-neutral-200 bg-neutral-50 font-medium dark:border-neutral-800 dark:bg-neutral-900\"\n                title=\"Max height\"\n              />\n            </div>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-3",
      "type": "registry:component",
      "title": "Popover 3",
      "description": "Popover 3. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-3.tsx",
          "type": "registry:component",
          "content": "import { DollarSignIcon } from 'lucide-react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\n\nconst Popover3 = () => {\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl transition-all hover:bg-neutral-100 active:scale-95 dark:hover:bg-neutral-800\"\n        >\n          <DollarSignIcon className=\"size-4\" />\n          <span className=\"sr-only\">Pricing details</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-80 rounded-2xl border-neutral-200 bg-white p-4 shadow-2xl dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"grid gap-5\">\n          <div className=\"flex items-center justify-between\">\n            <span className=\"text-lg font-bold text-neutral-900 dark:text-neutral-100\">\n              Professional Plan\n            </span>\n            <div className=\"flex flex-col items-end\">\n              <span className=\"text-xl font-bold text-neutral-900 dark:text-neutral-50\">\n                $29.00\n              </span>\n              <span className=\"text-[10px] font-medium text-neutral-400\">\n                per month\n              </span>\n            </div>\n          </div>\n          <p className=\"text-[13px] leading-relaxed font-medium text-neutral-500 dark:text-neutral-400\">\n            Specialized tools for creators and small teams. Includes advanced\n            analytics, custom domain support, and priority status.\n          </p>\n          <div className=\"flex items-center gap-3 rounded-xl border border-neutral-100 bg-neutral-50 p-3 dark:border-neutral-800 dark:bg-neutral-900/50\">\n            <Badge\n              variant=\"secondary\"\n              className=\"rounded-md bg-neutral-900 px-2 py-0.5 text-[10px] font-bold tracking-tight text-white dark:bg-neutral-50 dark:text-neutral-900\"\n            >\n              Early Access\n            </Badge>\n            <span className=\"text-xs font-semibold text-neutral-600 dark:text-neutral-400\">\n              Save 15% on yearly billing\n            </span>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-4",
      "type": "registry:component",
      "title": "Popover 4",
      "description": "Popover 4. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "label",
        "popover",
        "slider"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Volume2Icon, VolumeXIcon } from 'lucide-react'\n\nimport { Button } from '@/components/base-ui/button'\nimport { Label } from '@/components/base-ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base-ui/popover'\nimport { Slider } from '@/components/base-ui/slider'\n\nconst Popover4 = () => {\n  const [value, setValue] = useState([45])\n\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button variant='outline' size='icon' className='rounded-xl hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-all active:scale-95'>\n          <Volume2Icon className=\"size-4\" />\n          <span className='sr-only'>Volume control</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className='w-80 rounded-2xl shadow-2xl border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 p-6'>\n        <div className='flex flex-col gap-6'>\n          <div className='flex items-center justify-between gap-4'>\n            <div className=\"flex flex-col gap-1\">\n               <Label className='text-sm font-bold text-neutral-900 dark:text-neutral-100'>Audio Output</Label>\n               <p className=\"text-[11px] text-neutral-500 font-medium\">Master session volume</p>\n            </div>\n            <output className='text-xl font-bold text-orange-500 tabular-nums'>{value[0]}%</output>\n          </div>\n          <div className='flex items-center gap-4 bg-neutral-50 dark:bg-neutral-900 rounded-xl p-3'>\n            <VolumeXIcon className='size-4 shrink-0 text-neutral-400 opacity-60' />\n            <Slider \n              value={value} \n              onValueChange={setValue} \n              aria-label='Volume' \n              className=\"[&>[data-slot=slider-range]]:bg-orange-500 [&>[data-slot=slider-track]]:bg-neutral-200 dark:[&>[data-slot=slider-track]]:bg-neutral-800\" \n            />\n            <Volume2Icon className='size-4 shrink-0 text-neutral-400 opacity-60' />\n          </div>\n          <div className=\"grid grid-cols-2 gap-3\">\n             <Button variant=\"outline\" size=\"sm\" className=\"rounded-xl text-xs font-bold border-neutral-200 dark:border-neutral-800\" onClick={() => setValue([0])}>Mute</Button>\n             <Button variant=\"outline\" size=\"sm\" className=\"rounded-xl text-xs font-bold border-neutral-200 dark:border-neutral-800\" onClick={() => setValue([100])}>Maximum</Button>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  )\n}\n\nexport default Popover4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-5",
      "type": "registry:component",
      "title": "Popover 5",
      "description": "Popover 5. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-5.tsx",
          "type": "registry:component",
          "content": "import { InfoIcon, ExternalLinkIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\n\nconst Popover5 = () => {\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl transition-all hover:bg-neutral-100 active:scale-95 dark:hover:bg-neutral-800\"\n        >\n          <InfoIcon className=\"size-4\" />\n          <span className=\"sr-only\">About Shadcn Studio</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"shadow-3xl w-80 rounded-2xl border-neutral-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col gap-7 text-center\">\n          <div className=\"flex flex-col gap-2\">\n            <div className=\"text-xl font-bold tracking-tight text-neutral-900 dark:text-neutral-100\">\n              Platform Alpha\n            </div>\n            <p className=\"mx-auto max-w-[240px] text-xs leading-relaxed font-medium text-neutral-500 dark:text-neutral-400\">\n              The next generation of high-performance UI components built for\n              your creative professional workflow.\n            </p>\n          </div>\n          <div className=\"flex flex-col gap-5\">\n            <Button\n              size=\"sm\"\n              className=\"h-10 gap-2 rounded-xl border-none bg-orange-600 font-bold shadow-xl hover:bg-orange-700 dark:bg-orange-600 dark:hover:bg-orange-700\"\n              asChild\n            >\n              <a href=\"#\" target=\"_blank\" rel=\"noopener noreferrer\">\n                Get started\n                <ExternalLinkIcon className=\"size-3.5\" />\n              </a>\n            </Button>\n            <div className=\"text-[11px] font-medium tracking-tight text-neutral-400 dark:text-neutral-600\">\n              Released as build 2.0.4-stable\n            </div>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-6",
      "type": "registry:component",
      "title": "Popover 6",
      "description": "Popover 6. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover",
        "progress"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport {\n  DownloadIcon,\n  PauseIcon,\n  PlayIcon,\n  XIcon,\n  CheckCircle2Icon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { Progress } from '@/components/base-ui/progress';\n\nimport { cn } from '@/lib/utils';\n\nconst Popover6 = () => {\n  const [isPaused, setIsPaused] = useState(false);\n  const [isCanceled, setIsCanceled] = useState(false);\n  const [value, setValue] = useState(0);\n  const [open, setOpen] = useState(false);\n  const [hasStarted, setHasStarted] = useState(false);\n\n\n  useEffect(() => {\n    if (!hasStarted || isPaused || isCanceled) return;\n\n    const timer = setInterval(() => {\n      setValue((prev) => {\n        if (prev < 100) {\n          return Math.min(100, prev + Math.floor(Math.random() * 10) + 1);\n        } else {\n          clearInterval(timer);\n          return prev;\n        }\n      });\n    }, 500);\n\n    return () => {\n      clearInterval(timer);\n    };\n  }, [open, isPaused, isCanceled, hasStarted]);\n\n  const getText = () => {\n    if (isCanceled) return 'Sync Canceled';\n    if (isPaused) return 'Sync Paused';\n    if (value === 100) return 'Sync Complete';\n    return 'Synchronizing Data';\n  };\n\n  return (\n    <Popover\n      onOpenChange={(val) => {\n        setOpen(val);\n        if (val && !isCanceled) setHasStarted(true);\n      }}\n      open={open}\n    >\n      <PopoverTrigger asChild>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl border-neutral-200 transition-all hover:bg-neutral-50 dark:border-neutral-800 dark:hover:bg-neutral-900\"\n        >\n          <DownloadIcon className=\"size-4 text-neutral-500\" />\n          <span className=\"sr-only\">Sync Data</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"shadow-3xl w-80 rounded-2xl border-neutral-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col gap-6\">\n          <div className=\"flex items-center gap-4\">\n            <div className=\"relative flex size-11 items-center justify-center rounded-xl border border-neutral-100 bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900\">\n              <span\n                className={cn(\n                  'absolute inset-0 rounded-xl border-2 border-dashed',\n                  value === 100\n                    ? 'border-emerald-500 opacity-30'\n                    : 'border-indigo-600 opacity-20 dark:border-indigo-400 dark:opacity-40',\n                  {\n                    'animate-spin [animation-duration:8s]':\n                      value < 100 && !isPaused && !isCanceled,\n                  },\n                )}\n              />\n              {value === 100 ? (\n                <CheckCircle2Icon className=\"size-5 text-emerald-500\" />\n              ) : (\n                <DownloadIcon className=\"z-1 size-5 text-indigo-600 dark:text-indigo-400\" />\n              )}\n            </div>\n            <div className=\"flex min-w-0 flex-1 flex-col\">\n              <span className=\"block truncate text-sm font-bold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                {getText()}\n              </span>\n              {value < 100 && !isCanceled && (\n                <p className=\"truncate text-[10px] font-medium text-neutral-400\">\n                  backup_v4.bundle\n                </p>\n              )}\n            </div>\n            {!isCanceled && (\n              <span\n                className={cn(\n                  'text-sm font-bold tabular-nums',\n                  value === 100\n                    ? 'text-emerald-500'\n                    : 'text-neutral-900 dark:text-neutral-100',\n                )}\n              >\n                {`${value}%`}\n              </span>\n            )}\n          </div>\n\n          <div className=\"flex flex-col gap-5\">\n            <Progress\n              value={value}\n              className={cn(\n                'h-1.5 bg-neutral-50 dark:bg-neutral-900',\n                value === 100\n                  ? '[&>[data-slot=progress-indicator]]:bg-emerald-500'\n                  : '[&>[data-slot=progress-indicator]]:bg-indigo-600',\n              )}\n            />\n\n            <div className=\"grid grid-cols-2 gap-2.5\">\n              <Button\n                size=\"sm\"\n                variant=\"outline\"\n                className=\"h-9 gap-2 rounded-xl border-neutral-200 text-xs font-bold dark:border-neutral-800\"\n                onClick={() => setIsPaused(!isPaused)}\n                disabled={value === 100 || isCanceled}\n              >\n                {isPaused ? (\n                  <PlayIcon className=\"size-3 fill-current\" />\n                ) : (\n                  <PauseIcon className=\"size-3 fill-current\" />\n                )}\n                {isPaused ? 'Resume' : 'Pause'}\n              </Button>\n              <Button\n                variant=\"outline\"\n                size=\"sm\"\n                className=\"h-9 gap-2 rounded-xl border-neutral-200 text-xs font-bold dark:border-neutral-800\"\n                onClick={() => {\n                  if (value < 100) {\n                    setValue(0);\n                    setIsCanceled(true);\n                    setHasStarted(false);\n                  }\n                  setOpen(false);\n                }}\n              >\n                <XIcon className=\"size-3.5\" />\n                {value === 100 ? 'Dismiss' : 'Cancel'}\n              </Button>\n            </div>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-7",
      "type": "registry:component",
      "title": "Popover 7",
      "description": "Popover 7. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-7.tsx",
          "type": "registry:component",
          "content": "import { FileWarningIcon, AlertTriangleIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\n\nconst Popover7 = () => {\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"group rounded-xl border-red-200 transition-all hover:bg-red-50 active:scale-95 dark:border-red-500/20 dark:bg-transparent dark:hover:bg-red-500/20\"\n        >\n          <FileWarningIcon className=\"size-4 text-red-500 transition-transform group-hover:scale-110\" />\n          <span className=\"sr-only\">Delete File</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"shadow-3xl w-72 rounded-3xl border-neutral-100 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col items-center gap-6 text-center\">\n          <div className=\"relative flex size-12 items-center justify-center rounded-xl border border-red-100 bg-red-50 dark:border-red-500/20 dark:bg-red-500/10\">\n            <AlertTriangleIcon className=\"size-5 text-red-600 dark:text-red-500\" />\n          </div>\n\n          <div className=\"flex flex-col gap-1.5\">\n            <div className=\"text-xl font-bold tracking-tight text-neutral-900 dark:text-neutral-100\">\n              Reset Session?\n            </div>\n            <p className=\"mx-auto max-w-[200px] text-xs leading-relaxed font-medium text-neutral-500 dark:text-neutral-400\">\n              This will clear all active session cookies and tracking data. This\n              action is irreversible.\n            </p>\n          </div>\n\n          <div className=\"grid w-full grid-cols-2 gap-3\">\n            <Button\n              variant=\"outline\"\n              className=\"h-10 rounded-xl border-neutral-200 text-xs font-bold text-neutral-600 dark:border-neutral-800 dark:text-neutral-400\"\n            >\n              Go Back\n            </Button>\n            <Button\n              variant=\"secondary\"\n              className=\"h-10 rounded-xl border-none bg-red-600 text-xs font-bold text-white shadow-lg shadow-red-500/20 hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700\"\n            >\n              Reset\n            </Button>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-8",
      "type": "registry:component",
      "title": "Popover 8",
      "description": "Popover 8. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "label",
        "popover",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-8.tsx",
          "type": "registry:component",
          "content": "import { MessageCircleIcon, SendIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { Textarea } from '@/components/base-ui/textarea';\nimport { Label } from '@/components/base-ui/label';\n\nconst Popover8 = () => {\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl transition-all hover:bg-neutral-100 active:scale-95 dark:hover:bg-neutral-800\"\n        >\n          <MessageCircleIcon className=\"size-4\" />\n          <span className=\"sr-only\">Feedback</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"shadow-3xl w-80 rounded-3xl border-neutral-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col gap-6\">\n          <div className=\"flex flex-col gap-1\">\n            <Label className=\"text-base font-bold text-neutral-900 dark:text-neutral-100\">\n              Developer Notes\n            </Label>\n            <p className=\"text-[11px] leading-tight font-medium text-neutral-500 dark:text-neutral-500\">\n              Attach a technical note to this asset.\n            </p>\n          </div>\n\n          <Textarea\n            placeholder=\"Write your architectural notes here...\"\n            className=\"min-h-[120px] resize-none rounded-2xl border-neutral-100 bg-neutral-50 p-4 text-xs font-medium transition-none focus-visible:border-neutral-100 focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-none dark:border-neutral-800 dark:bg-neutral-900 dark:focus-visible:border-neutral-800\"\n          />\n\n          <div className=\"grid w-full grid-cols-2 gap-3 pb-1\">\n            <Button\n              variant=\"outline\"\n              size=\"sm\"\n              className=\"h-10 rounded-2xl border-neutral-200 text-xs font-bold text-neutral-500 dark:border-neutral-800\"\n            >\n              Discard\n            </Button>\n            <Button\n              size=\"sm\"\n              className=\"h-10 gap-2 rounded-2xl border-none bg-emerald-600 text-xs font-bold text-white shadow-lg shadow-emerald-500/10 hover:bg-emerald-700\"\n            >\n              <SendIcon className=\"size-3.5\" />\n              Save Note\n            </Button>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-9",
      "type": "registry:component",
      "title": "Popover 9",
      "description": "Popover 9. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "label",
        "popover",
        "slider"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FunnelIcon, RotateCcwIcon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { Slider } from '@/components/base-ui/slider';\n\nconst filters = ['Architectural', 'Structural', 'Electrical', 'Plumbing'];\n\nconst Popover9 = () => {\n  const [selected, setSelected] = useState(['Architectural', 'Structural']);\n  const [price, setPrice] = useState([450]);\n\n  return (\n    <Popover>\n      <PopoverTrigger asChild backdrop-blur-sm>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl transition-all hover:bg-neutral-100 active:scale-95 dark:hover:bg-neutral-800\"\n        >\n          <FunnelIcon className=\"size-4\" />\n          <span className=\"sr-only\">Filter</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"shadow-3xl w-80 rounded-3xl border-neutral-100 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col gap-4\">\n          <div className=\"flex items-center justify-between gap-4 pb-1\">\n            <div className=\"flex flex-col gap-0.5\">\n              <span className=\"text-base font-bold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                Advanced Filters\n              </span>\n              <p className=\"text-[11px] font-medium text-neutral-500\">\n                Filter by attributes\n              </p>\n            </div>\n            <Button\n              variant=\"outline\"\n              className=\"h-8 gap-1.5 rounded-xl border-neutral-200 px-3 py-1 text-[11px] font-bold text-neutral-500 dark:border-neutral-800 dark:text-neutral-400\"\n              onClick={() => {\n                setSelected(['Architectural', 'Structural']);\n                setPrice([450]);\n              }}\n            >\n              <RotateCcwIcon className=\"size-3.5\" />\n              Reset all\n            </Button>\n          </div>\n\n          <div className=\"flex flex-col gap-2\">\n            <Label className=\"text-sm text-neutral-400\">Filter category</Label>\n            <div className=\"flex flex-col gap-1.5\">\n              {filters.map((label, index) => (\n                <div\n                  key={index}\n                  className=\"group flex cursor-pointer items-center gap-3 rounded-xl p-2 transition-colors hover:bg-neutral-50 dark:hover:bg-neutral-900\"\n                  onClick={() => {\n                    setSelected(\n                      selected.includes(label)\n                        ? selected.filter((item) => item !== label)\n                        : [...selected, label],\n                    );\n                  }}\n                >\n                  <Checkbox\n                    id={`filter-${index + 1}`}\n                    checked={selected.includes(label)}\n                    onCheckedChange={(checked) =>\n                      setSelected(\n                        checked\n                          ? [...selected, label]\n                          : selected.filter((item) => item !== label),\n                      )\n                    }\n                    className=\"size-4.5 rounded-md border-neutral-300 data-[state=checked]:border-orange-500 data-[state=checked]:bg-orange-500 dark:border-neutral-700\"\n                  />\n                  <Label\n                    htmlFor={`filter-${index + 1}`}\n                    className=\"cursor-pointer text-sm font-semibold text-neutral-700 dark:text-neutral-300\"\n                  >\n                    {label}\n                  </Label>\n                </div>\n              ))}\n            </div>\n          </div>\n\n          <div className=\"flex flex-col gap-2\">\n            <div className=\"flex items-center justify-between\">\n              <Label className=\"text-xs text-neutral-400\">Budget range</Label>\n              <span className=\"text-xs font-bold text-orange-600 dark:text-orange-500\">\n                $0 - ${price[0]}\n              </span>\n            </div>\n            <div className=\"flex flex-col gap-2\">\n              <Slider\n                value={price}\n                onValueChange={setPrice}\n                step={50}\n                max={1000}\n                className=\"[&>[data-slot=slider-range]]:bg-orange-500 [&>[data-slot=slider-thumb]]:border-orange-500\"\n                aria-label=\"Price range\"\n              />\n              <div className=\"flex w-full items-center justify-between gap-1 px-0.5 text-[10px] font-medium text-neutral-400 opacity-60\">\n                <span>0</span>\n                <span>500</span>\n                <span>1000+</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-10",
      "type": "registry:component",
      "title": "Popover 10",
      "description": "Popover 10. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "input",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-10.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport {\n  FileIcon,\n  LayersIcon,\n  Loader2Icon,\n  SearchIcon,\n  SettingsIcon,\n  UserIcon,\n  XIcon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { cn } from '@/lib/utils';\n\nconst commands = [\n  {\n    title: 'Project Layers',\n    category: 'Workspace',\n    icon: LayersIcon,\n    shortcut: '⌘L',\n    color: 'text-orange-500 bg-orange-500/10',\n  },\n  {\n    title: 'Team Contributors',\n    category: 'Access',\n    icon: UserIcon,\n    shortcut: '⌘T',\n    color: 'text-indigo-500 bg-indigo-500/10',\n  },\n  {\n    title: 'System Settings',\n    category: 'General',\n    icon: SettingsIcon,\n    shortcut: '⌘S',\n    color: 'text-emerald-500 bg-emerald-500/10',\n  },\n  {\n    title: 'Technical Specs',\n    category: 'Docs',\n    icon: FileIcon,\n    shortcut: '⌘D',\n    color: 'text-blue-500 bg-blue-500/10',\n  },\n];\n\nconst useDebounce = (value: string, delay: number = 300) => {\n  const [debouncedValue, setDebouncedValue] = useState(value);\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      setDebouncedValue(value);\n    }, delay);\n\n    return () => {\n      clearTimeout(timer);\n    };\n  }, [value, delay]);\n\n  return debouncedValue;\n};\n\nconst Popover10 = () => {\n  const [inputValue, setInputValue] = useState('');\n  const debouncedSearch = useDebounce(inputValue);\n  const isLoading = !!inputValue && inputValue !== debouncedSearch;\n\n  const filteredCommands = useMemo(() => {\n    const searchTerm = debouncedSearch.trim().toLowerCase();\n    if (!searchTerm) return commands;\n    return commands.filter(\n      (cmd) =>\n        cmd.title.toLowerCase().includes(searchTerm) ||\n        cmd.category.toLowerCase().includes(searchTerm),\n    );\n  }, [debouncedSearch]);\n\n  return (\n    <Popover>\n      <PopoverTrigger asChild>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"rounded-xl border-neutral-200 transition-all hover:bg-neutral-50 dark:border-neutral-800 dark:hover:bg-neutral-900\"\n        >\n          <SearchIcon className=\"size-4 text-neutral-500\" />\n          <span className=\"sr-only\">Search commands</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"shadow-3xl w-80 overflow-hidden rounded-3xl border-neutral-100 bg-white p-5 dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col gap-6\">\n          <div className=\"relative\">\n            <div className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center justify-center pl-3.5 text-neutral-400\">\n              <SearchIcon className=\"size-3.5\" />\n            </div>\n            <Input\n              type=\"text\"\n              placeholder=\"Search workspace layers...\"\n              value={inputValue}\n              onChange={(e) => {\n                setInputValue(e.target.value);\n              }}\n              className=\"h-11 rounded-2xl border-neutral-100 bg-neutral-100/50 px-10 text-xs font-medium transition-all outline-none placeholder:text-neutral-500 focus-visible:border-neutral-200 focus-visible:ring-0 focus-visible:ring-offset-0 dark:border-neutral-800 dark:bg-neutral-900/50 dark:focus-visible:border-neutral-700\"\n            />\n            <div className=\"absolute inset-y-0 right-0 flex items-center pr-3\">\n              {isLoading ? (\n                <Loader2Icon className=\"size-4 animate-spin text-orange-500\" />\n              ) : (\n                inputValue && (\n                  <button\n                    onClick={() => {\n                      setInputValue('');\n                    }}\n                    className=\"group rounded-lg p-1.5 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n                  >\n                    <XIcon className=\"size-3.5 text-neutral-400 group-hover:text-neutral-600 dark:group-hover:text-neutral-200\" />\n                  </button>\n                )\n              )}\n            </div>\n          </div>\n\n          <div className=\"flex flex-col gap-4\">\n            <div className=\"flex items-center justify-between px-1\">\n              <span className=\"text-xs tracking-tight text-neutral-400\">\n                Workspace search\n              </span>\n              {inputValue && (\n                <span className=\"text-[10px] font-bold text-neutral-400/60\">\n                  {filteredCommands.length} results\n                </span>\n              )}\n            </div>\n\n            <ul className=\"flex flex-col gap-1.5\">\n              {filteredCommands.length > 0 ? (\n                filteredCommands.map((cmd, index) => (\n                  <li\n                    key={index}\n                    className=\"group flex cursor-pointer items-center gap-3.5 rounded-2xl p-2.5 transition-all hover:bg-neutral-50 dark:hover:bg-neutral-900\"\n                  >\n                    <div\n                      className={cn(\n                        'flex size-9 items-center justify-center rounded-xl border border-transparent transition-all group-hover:scale-105',\n                        cmd.color,\n                      )}\n                    >\n                      <cmd.icon className=\"size-4\" />\n                    </div>\n                    <div className=\"min-w-0 flex-1\">\n                      <div className=\"truncate text-[13px] font-bold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                        {cmd.title}\n                      </div>\n                      <p className=\"text-[10px] font-medium text-neutral-400\">\n                        {cmd.category}\n                      </p>\n                    </div>\n                    <kbd className=\"hidden h-6 items-center gap-1 rounded border border-neutral-100 bg-neutral-50 px-1.5 font-mono text-[10px] font-bold text-neutral-400 opacity-60 transition-opacity select-none group-hover:opacity-100 sm:inline-flex dark:border-neutral-800 dark:bg-neutral-900\">\n                      {cmd.shortcut}\n                    </kbd>\n                  </li>\n                ))\n              ) : (\n                <li className=\"py-12 text-center\">\n                  <div className=\"mx-auto mb-2 flex size-10 items-center justify-center rounded-3xl border border-neutral-100 bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900\">\n                    <SearchIcon className=\"size-5 text-neutral-300 dark:text-neutral-700\" />\n                  </div>\n                  <p className=\"text-sm font-bold text-neutral-400\">\n                    No results found\n                  </p>\n                  <p className=\"text-xs font-medium tracking-tight text-neutral-500\">\n                    Try another keyword or layer name\n                  </p>\n                </li>\n              )}\n            </ul>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-11",
      "type": "registry:component",
      "title": "Popover 11",
      "description": "Popover 11. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-11.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport {\n  BellIcon,\n  CheckCheckIcon,\n  Settings2Icon,\n  ClockIcon,\n  RocketIcon,\n  ShieldAlertIcon,\n  CloudCheckIcon,\n} from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { cn } from '@/lib/utils';\n\nconst notifications = [\n  {\n    id: 1,\n    icon: RocketIcon,\n    message: 'Production deployment #842 successful',\n    category: 'System',\n    color: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-500',\n    time: '12 min',\n  },\n  {\n    id: 2,\n    icon: ShieldAlertIcon,\n    message: 'Unauthorized access attempt blocked',\n    category: 'Security',\n    color: 'bg-red-500/10 text-red-600 dark:text-red-500',\n    time: '45 min',\n  },\n  {\n    id: 3,\n    icon: CloudCheckIcon,\n    message: 'Architecture backup completed successfully',\n    category: 'Backup',\n    color: 'bg-blue-500/10 text-blue-600 dark:text-blue-500',\n    time: '2 hours',\n  },\n];\n\nconst Popover11 = () => {\n  const [readMessages, setReadMessages] = useState([3]);\n\n  return (\n    <Popover>\n      <PopoverTrigger asChild>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"group rounded-xl border-neutral-200 transition-all hover:bg-neutral-50 active:scale-95 dark:border-neutral-800 dark:hover:bg-neutral-900\"\n        >\n          <BellIcon className=\"size-4 text-neutral-500 transition-transform group-hover:scale-110\" />\n          <span className=\"sr-only\">Notifications</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-80 overflow-hidden rounded-3xl border border-neutral-100 bg-white p-0 shadow-none transition-all dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex flex-col\">\n          <div className=\"flex items-center justify-between gap-4 border-b border-neutral-50 bg-neutral-50/50 px-4 py-3 dark:border-neutral-800 dark:bg-neutral-950\">\n            <div className=\"flex items-center gap-2.5\">\n              <span className=\"text-sm font-semibold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                Alerts\n              </span>\n              <div className=\"rounded-full border border-orange-500/20 bg-orange-500/10 px-1.5 py-0.5 text-[9px] leading-none font-bold text-orange-600 dark:bg-orange-500/20 dark:text-orange-500\">\n                {\n                  notifications.filter((i) => !readMessages.includes(i.id))\n                    .length\n                }{' '}\n                new\n              </div>\n            </div>\n            <div className=\"flex items-center gap-0.5\">\n              <Button\n                variant=\"ghost\"\n                className=\"size-7 rounded-lg p-0 text-neutral-400 transition-colors hover:bg-neutral-100 hover:text-emerald-500 dark:hover:bg-neutral-800\"\n                onClick={() =>\n                  setReadMessages(notifications.map((item) => item.id))\n                }\n                title=\"Mark all as read\"\n              >\n                <CheckCheckIcon className=\"size-3.5\" />\n              </Button>\n              <Button\n                variant=\"ghost\"\n                className=\"size-7 rounded-lg p-0 text-neutral-400 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n                title=\"Settings\"\n              >\n                <Settings2Icon className=\"size-3.5\" />\n              </Button>\n            </div>\n          </div>\n\n          <ul className=\"flex flex-col gap-1.5 p-2\">\n            {notifications.map((item) => (\n              <li\n                key={item.id}\n                className={cn(\n                  'group relative flex cursor-pointer items-start gap-3 rounded-2xl border px-3 py-2.5 transition-all',\n                  !readMessages.includes(item.id)\n                    ? 'border-neutral-100 bg-neutral-50/50 dark:border-neutral-800 dark:bg-white/5'\n                    : 'border-transparent bg-transparent hover:border-neutral-100 hover:bg-neutral-50 dark:hover:border-neutral-800 dark:hover:bg-white/5',\n                )}\n                onClick={() => setReadMessages([...readMessages, item.id])}\n              >\n                <div\n                  className={cn(\n                    'flex size-8 shrink-0 items-center justify-center rounded-xl border border-transparent transition-all group-hover:scale-105',\n                    item.color,\n                  )}\n                >\n                  <item.icon className=\"size-4\" />\n                </div>\n                <div className=\"flex min-w-0 flex-1 flex-col gap-0\">\n                  <div className=\"line-clamp-2 text-[12px] leading-tight font-semibold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                    {item.message}\n                  </div>\n                  <div className=\"mt-0.5 flex items-center justify-between gap-2\">\n                    <p className=\"text-[9px] font-medium text-neutral-500\">\n                      {item.category}\n                    </p>\n                    <div className=\"flex items-center gap-1.5 opacity-60\">\n                      <ClockIcon className=\"size-2.5 text-neutral-400\" />\n                      <p className=\"text-[9px] font-normal tracking-tight whitespace-nowrap text-neutral-500\">\n                        {item.time} ago\n                      </p>\n                    </div>\n                  </div>\n                </div>\n              </li>\n            ))}\n          </ul>\n\n          <div className=\"border-t border-neutral-100 p-3 dark:border-neutral-800\">\n            <Button\n              variant=\"outline\"\n              className=\"w-full rounded-xl border-neutral-200 bg-white text-[11px] font-semibold text-neutral-500 shadow-none transition-all hover:text-orange-500 active:scale-95 dark:border-neutral-800 dark:bg-neutral-950\"\n            >\n              View all alerts\n            </Button>\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover-12",
      "type": "registry:component",
      "title": "Popover 12",
      "description": "Popover 12. Popovers are used to display rich content within an overlay that is triggered by a button click.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/popover-12.tsx",
          "type": "registry:component",
          "content": "import { ChevronRightIcon, GlobeIcon, Loader2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { Badge } from '@/components/base-ui/badge';\n\nconst Popover12 = () => {\n  return (\n    <Popover>\n      <PopoverTrigger asChild>\n        <Button\n          variant=\"outline\"\n          size=\"icon\"\n          className=\"group rounded-xl border-neutral-200 transition-all hover:bg-neutral-50 active:scale-95 dark:border-neutral-800 dark:hover:bg-neutral-900\"\n        >\n          <GlobeIcon className=\"size-4 text-orange-500 transition-transform group-hover:rotate-12\" />\n          <span className=\"sr-only\">Data hub status</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-[360px] overflow-hidden rounded-3xl border border-neutral-100 bg-white p-0 shadow-none transition-all dark:border-neutral-800 dark:bg-neutral-950\">\n        <div className=\"flex items-stretch\">\n          <div className=\"flex-1 space-y-3 p-5\">\n            <div className=\"flex items-center gap-2\">\n              <Badge className=\"rounded-md border-none bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-600 dark:text-emerald-500\">\n                Operational\n              </Badge>\n              <span className=\"flex items-center gap-1 text-[9px] font-bold text-neutral-400\">\n                <Loader2Icon className=\"size-2.5 animate-spin\" />\n                Live sync\n              </span>\n            </div>\n            <div className=\"space-y-0.5\">\n              <p className=\"text-base leading-tight font-semibold tracking-tight text-neutral-900 dark:text-neutral-100\">\n                Northern Data Hub\n              </p>\n              <div className=\"flex items-center gap-1.5\">\n                <span className=\"text-[10px] font-medium text-neutral-500\">\n                  Reykjavík, Iceland • Tier 4 DC\n                </span>\n              </div>\n            </div>\n            <p className=\"text-[11px] leading-relaxed font-normal text-neutral-500 dark:text-neutral-400\">\n              Our flagship zero-emission facility utilizing geothermal energy\n              for high-density neural network training.\n            </p>\n            <Button\n              size=\"sm\"\n              variant=\"outline\"\n              className=\"group h-8 gap-2 rounded-full border-neutral-200 px-4 text-[10px] font-semibold transition-all hover:text-orange-500 dark:border-neutral-800\"\n            >\n              View cluster status\n              <ChevronRightIcon className=\"size-3 transition-transform group-hover:translate-x-0.5\" />\n            </Button>\n          </div>\n          <div className=\"relative w-1/3 min-w-[120px] bg-neutral-100 dark:bg-neutral-900\">\n            <img\n              src=\"https://images.unsplash.com/photo-1695668548342-c0c1ad479aee?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n              alt=\"modern data center server room\"\n              className=\"absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 hover:scale-105 dark:opacity-75\"\n            />\n            <div className=\"pointer-events-none absolute inset-0 bg-gradient-to-l from-transparent via-transparent to-white dark:to-neutral-950\" />\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n};\n\nexport default Popover12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-1",
      "type": "registry:component",
      "title": "Radio Group 1",
      "description": "Radio Group 1. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-1.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup1 = () => {\n  return (\n    <RadioGroup defaultValue=\"email\" className=\" space-y-2\">\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"email\"\n          id=\"email\"\n          className=\"border-border data-[state=checked]:border-primary rounded-lg border\"\n        />\n        <Label htmlFor=\"email\">Email Notifications</Label>\n      </div>\n\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"sms\"\n          id=\"sms\"\n          className=\"border-border data-[state=checked]:border-primary rounded-lg border\"\n        />\n        <Label htmlFor=\"sms\">SMS Notifications</Label>\n      </div>\n\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"push\"\n          id=\"push\"\n          className=\"border-border data-[state=checked]:border-primary rounded-lg border\"\n        />\n        <Label htmlFor=\"push\">Push Notifications</Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-2",
      "type": "registry:component",
      "title": "Radio Group 2",
      "description": "Radio Group 2. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-2.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup2 = () => {\n  return (\n    <RadioGroup defaultValue=\"monthly\">\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"monthly\"\n          id=\"monthly\"\n          className=\"border-primary focus-visible:border-primary border-dashed\"\n        />\n        <Label htmlFor=\"monthly\">Monthly Plan</Label>\n      </div>\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"quarterly\"\n          id=\"quarterly\"\n          className=\"border-primary focus-visible:border-primary border-dashed\"\n        />\n        <Label htmlFor=\"quarterly\">Quarterly Plan</Label>\n      </div>\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"yearly\"\n          id=\"yearly\"\n          className=\"border-primary focus-visible:border-primary border-dashed\"\n        />\n        <Label htmlFor=\"yearly\">Yearly Plan</Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-3",
      "type": "registry:component",
      "title": "Radio Group 3",
      "description": "Radio Group 3. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-3.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\nimport { FaSun, FaMoon, FaDesktop } from 'react-icons/fa';\n\nconst RadioGroup3 = () => {\n  return (\n    <RadioGroup defaultValue=\"light\" className=\" space-y-2\">\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"light\"\n          id=\"theme-light\"\n          className=\"text-primary-foreground data-[state=checked]:bg-primary! data-[state=checked]:border-primary data-[state=checked]:[&_svg]:fill-primary-foreground shadow-md\"\n        />\n        <Label htmlFor=\"theme-light\" className=\"flex items-center gap-2\">\n          <FaSun className=\"text-foreground\" />\n          Light Theme\n        </Label>\n      </div>\n\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"dark\"\n          id=\"theme-dark\"\n          className=\"text-primary-foreground data-[state=checked]:bg-primary! data-[state=checked]:border-primary data-[state=checked]:[&_svg]:fill-primary-foreground shadow-md\"\n        />\n        <Label htmlFor=\"theme-dark\" className=\"flex items-center gap-2\">\n          <FaMoon className=\"text-foreground\" />\n          Dark Theme\n        </Label>\n      </div>\n\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"system\"\n          id=\"theme-system\"\n          className=\"text-primary-foreground data-[state=checked]:bg-primary! data-[state=checked]:border-primary data-[state=checked]:[&_svg]:fill-primary-foreground shadow-md\"\n        />\n        <Label htmlFor=\"theme-system\" className=\"flex items-center gap-2\">\n          <FaDesktop className=\"text-foreground\" />\n          System Default\n        </Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-4",
      "type": "registry:component",
      "title": "Radio Group 4",
      "description": "Radio Group 4. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-4.tsx",
          "type": "registry:component",
          "content": "import { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\nimport { FaBolt, FaUsers, FaCrown } from 'react-icons/fa6';\n\nconst RadioGroup4 = () => {\n  return (\n    <RadioGroup\n      defaultValue=\"starter\"\n      className=\" max-w-md space-y-3\"\n    >\n      <label\n        htmlFor=\"starter\"\n        className=\"group border-border has-[:checked]:border-primary has-[:checked]:bg-accent/50 flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition hover:-translate-y-0.5 hover:shadow-md has-[:checked]:shadow-md\"\n      >\n        <RadioGroupItem\n          value=\"starter\"\n          id=\"starter\"\n          className=\"data-[state=checked]:border-primary mt-1\"\n        />\n        <div className=\"grid flex-1 gap-1\">\n          <div className=\"flex items-center justify-between\">\n            <span className=\"text-foreground flex items-center gap-2 text-sm font-medium\">\n              <FaBolt className=\"text-muted-foreground group-has-[:checked]:text-primary\" />\n              Starter\n            </span>\n            <span className=\"text-muted-foreground text-xs\">Free</span>\n          </div>\n          <p className=\"text-muted-foreground text-xs\">\n            Quick setup for personal productivity\n          </p>\n        </div>\n      </label>\n\n      <label\n        htmlFor=\"team\"\n        className=\"group border-border has-[:checked]:border-primary has-[:checked]:bg-accent/50 flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition hover:-translate-y-0.5 hover:shadow-md has-[:checked]:shadow-md\"\n      >\n        <RadioGroupItem\n          value=\"team\"\n          id=\"team\"\n          className=\"data-[state=checked]:border-primary mt-1\"\n        />\n        <div className=\"grid flex-1 gap-1\">\n          <div className=\"flex items-center justify-between\">\n            <span className=\"text-foreground flex items-center gap-2 text-sm font-medium\">\n              <FaUsers className=\"text-muted-foreground group-has-[:checked]:text-primary\" />\n              Team\n            </span>\n            <span className=\"text-foreground text-xs\">₹799/mo</span>\n          </div>\n          <p className=\"text-muted-foreground text-xs\">\n            Bbase-uilt for collaboration and shared workflows\n          </p>\n        </div>\n      </label>\n\n      <label\n        htmlFor=\"premium\"\n        className=\"group border-border has-[:checked]:border-primary has-[:checked]:bg-accent/50 flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition hover:-translate-y-0.5 hover:shadow-md has-[:checked]:shadow-md\"\n      >\n        <RadioGroupItem\n          value=\"premium\"\n          id=\"premium\"\n          className=\"data-[state=checked]:border-primary mt-1\"\n        />\n        <div className=\"grid flex-1 gap-1\">\n          <div className=\"flex items-center justify-between\">\n            <span className=\"text-foreground flex items-center gap-2 text-sm font-medium\">\n              <FaCrown className=\"text-muted-foreground group-has-[:checked]:text-primary\" />\n              Premium\n            </span>\n            <span className=\"text-foreground text-xs\">Custom</span>\n          </div>\n          <p className=\"text-muted-foreground text-xs\">\n            Full power with advanced controls and support\n          </p>\n        </div>\n      </label>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-5",
      "type": "registry:component",
      "title": "Radio Group 5",
      "description": "Radio Group 5. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "badge",
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-5.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\nimport { FaUser, FaUsers, FaBuilding } from 'react-icons/fa6';\n\n\nconst RadioGroup5= () => {\n  const id = useId();\n\n   const items = [\n     { value: '1', label: 'Individual', price: 'Free', icon: FaUser },\n     { value: '2', label: 'Team Workspace', price: '₹999/mo', icon: FaUsers },\n     { value: '3', label: 'Organization', price: 'Custom', icon: FaBuilding },\n   ];\n\n  return (\n    <RadioGroup\n      className=\"w-full max-w-96 gap-0 -space-y-px rounded-md shadow-xs\"\n      defaultValue=\"2\"\n    >\n      {items.map((item) => (\n        <div\n          key={`${id}-${item.value}`}\n          className=\"border-input has-data-[state=checked]:border-primary/50 has-data-[state=checked]:bg-accent dark:has-data-[state=checked]:bg-card relative flex flex-col gap-4 border p-4 outline-none first:rounded-t-md last:rounded-b-md has-data-[state=checked]:z-10 has-data-[state=checked]:shadow-[inset_0_2px_4px_rgba(0,0,0,0.15),inset_0_-1px_2px_rgba(255,255,255,0.1)]\"\n        >\n          <div className=\"flex items-center justify-between\">\n            <div className=\"flex items-center gap-2\">\n              <RadioGroupItem\n                id={`${id}-${item.value}`}\n                value={item.value}\n                className=\"after:absolute after:inset-0\"\n                aria-label={`plan-radio-${item.value}`}\n                aria-describedby={`${`${id}-${item.value}`}-price`}\n              />\n              <Label\n                className=\"inline-flex items-center\"\n                htmlFor={`${id}-${item.value}`}\n              >\n                <item.icon className=\"text-muted-foreground shrink-0\" />\n                {item.label}\n                {item.value === '2' && (\n                  <Badge className=\"rounded-sm px-1.5 py-px text-xs hidden sm:block\">\n                    Best Seller\n                  </Badge>\n                )}\n              </Label>\n            </div>\n            <div\n              id={`${`${id}-${item.value}`}-price`}\n              className=\"text-muted-foreground text-xs leading-[inherit]\"\n            >\n              {item.price}\n            </div>\n          </div>\n        </div>\n      ))}\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-6",
      "type": "registry:component",
      "title": "Radio Group 6",
      "description": "Radio Group 6. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-6.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup6 = () => {\n  const id = useId();\n\n  return (\n    <RadioGroup className=\"w-full max-w-96 gap-2\" defaultValue=\"starter\">\n      <div className=\"border-input has-data-[state=checked]:border-primary/50 has-data-[state=checked]:bg-primary/5 relative flex w-full items-center gap-2 rounded-md border p-4 shadow-xs outline-none\">\n        <RadioGroupItem\n          value=\"starter\"\n          id={`${id}-starter`}\n          aria-describedby={`${id}-starter-description`}\n          className=\"size-5 after:absolute after:inset-0 [&_svg]:size-3\"\n        />\n        <div className=\"grid grow gap-2\">\n          <Label htmlFor={`${id}-starter`} className=\"justify-between\">\n            Starter{' '}\n            <span className=\"text-muted-foreground text-xs leading-[inherit] font-normal\">\n              Free\n            </span>\n          </Label>\n          <p\n            id={`${id}-starter-description`}\n            className=\"text-muted-foreground text-xs\"\n          >\n            Good for personal projects and basic usage.\n          </p>\n        </div>\n      </div>\n\n      <div className=\"border-input has-data-[state=checked]:border-primary/50 has-data-[state=checked]:bg-primary/5 relative flex w-full items-center gap-2 rounded-md border p-4 shadow-xs outline-none\">\n        <RadioGroupItem\n          value=\"pro\"\n          id={`${id}-pro`}\n          aria-describedby={`${id}-pro-description`}\n          className=\"size-5 after:absolute after:inset-0 [&_svg]:size-3\"\n        />\n        <div className=\"grid grow gap-2\">\n          <Label htmlFor={`${id}-pro`} className=\"justify-between\">\n            Pro{' '}\n            <span className=\"text-muted-foreground text-xs leading-[inherit] font-normal\">\n              $10/mo\n            </span>\n          </Label>\n          <p\n            id={`${id}-pro-description`}\n            className=\"text-muted-foreground text-xs\"\n          >\n            Best for teams with more features and flexibility.\n          </p>\n        </div>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-7",
      "type": "registry:component",
      "title": "Radio Group 7",
      "description": "Radio Group 7. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-7.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup7 = () => {\n  return (\n    <RadioGroup defaultValue=\"beginner\" className=\"flex items-center gap-4\">\n      <div className=\"border-border bg-card flex items-center gap-2 rounded-sm border px-4 py-2 shadow-sm\">\n        <RadioGroupItem value=\"beginner\" id=\"beginner\" />\n        <Label htmlFor=\"beginner\">Beginner</Label>\n      </div>\n      <div className=\"border-border bg-card flex items-center gap-2 rounded-sm border px-4 py-2 shadow-sm\">\n        <RadioGroupItem value=\"Advanced\" id=\"advanced\" />\n        <Label htmlFor=\"intermediate\">Advanced</Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-8",
      "type": "registry:component",
      "title": "Radio Group 8",
      "description": "Radio Group 8. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-8.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup8 = () => {\n  return (\n    <RadioGroup defaultValue=\"default\" className=\"flex items-center gap-4\">\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem value=\"default\" id=\"size-default\" />\n        <Label htmlFor=\"size-default\">Default</Label>\n      </div>\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"medium\"\n          id=\"size-medium\"\n          className=\"size-5 [&_svg]:size-3\"\n        />\n        <Label htmlFor=\"size-medium\">Medium</Label>\n      </div>\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"large\"\n          id=\"size-large\"\n          className=\"size-6 [&_svg]:size-3.5\"\n        />\n        <Label htmlFor=\"size-large\">Large</Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-9",
      "type": "registry:component",
      "title": "Radio Group 9",
      "description": "Radio Group 9. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-9.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup9 = () => {\n  return (\n    <RadioGroup defaultValue=\"warning\" className=\"flex items-center gap-4\">\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"warning\"\n          id=\"color-warning\"\n          className=\"border-amber-500 text-amber-500 focus-visible:ring-amber-500/20 data-[state=checked]:border-amber-500 data-[state=checked]:bg-amber-500 data-[state=checked]:text-white dark:border-amber-400 dark:text-amber-400 dark:data-[state=checked]:border-amber-400 dark:data-[state=checked]:bg-amber-400\"\n        />\n        <Label htmlFor=\"color-warning\">Warning</Label>\n      </div>\n\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"positive\"\n          id=\"color-positive\"\n          className=\"border-emerald-500 text-emerald-500 focus-visible:ring-emerald-500/20 data-[state=checked]:border-emerald-500 data-[state=checked]:bg-emerald-500 data-[state=checked]:text-white dark:border-emerald-400 dark:text-emerald-400 dark:data-[state=checked]:border-emerald-400 dark:data-[state=checked]:bg-emerald-400\"\n        />\n        <Label htmlFor=\"color-positive\">Positive</Label>\n      </div>\n\n      <div className=\"flex items-center gap-2\">\n        <RadioGroupItem\n          value=\"neutral\"\n          id=\"color-neutral\"\n          className=\"border-indigo-500 text-indigo-500 focus-visible:ring-indigo-500/20 data-[state=checked]:border-indigo-500 data-[state=checked]:bg-indigo-500 data-[state=checked]:text-white dark:border-indigo-400 dark:text-indigo-400 dark:data-[state=checked]:border-indigo-400 dark:data-[state=checked]:bg-indigo-400\"\n        />\n        <Label htmlFor=\"color-neutral\">Neutral</Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-10",
      "type": "registry:component",
      "title": "Radio Group 10",
      "description": "Radio Group 10. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-10.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup10 = () => {\n  const id = useId();\n\n  const items = [\n    { value: '1', label: 'Starter', price: 'Free' },\n    { value: '2', label: 'Growth', price: '$19/mo' },\n    { value: '3', label: 'Scale', price: 'Custom' },\n  ];\n\n  return (\n    <RadioGroup className=\"w-full max-w-96 gap-0 space-y-2\" defaultValue=\"2\">\n      {items.map((item) => (\n        <div\n          key={`${id}-${item.value}`}\n          className=\"border-input has-data-[state=checked]:bg-primary/10 dark:has-data-[state=checked]:bg-primary/20 has-data-[state=checked]:border-primary relative flex flex-col gap-3 rounded-full border p-4 shadow-[inset_0_-3px_4px_rgba(0,0,0,0.1),inset_0_2px_2px_rgba(255,255,255,1),0_2px_6px_rgba(0,0,0,0.05)] transition has-data-[state=checked]:z-10 dark:shadow-[inset_0_-3px_4px_rgba(0,0,0,0.6),inset_0_1px_2px_rgba(255,255,255,0.1),0_2px_6px_rgba(0,0,0,0.6)]\"\n        >\n          <div className=\"group flex items-center justify-between\">\n            <div className=\"flex items-center gap-2\">\n              <RadioGroupItem\n                id={`${id}-${item.value}`}\n                value={item.value}\n                aria-label={`plan-radio-${item.value}`}\n                className=\"text-primary bg-background data-[state=checked]:border-primary data-[state=checked]:[&_svg]:fill-primary after:absolute after:inset-0\"\n                aria-describedby={`${`${id}-${item.value}`}-price`}\n              />\n              <Label\n                className=\"inline-flex items-center gap-2 font-medium\"\n                htmlFor={`${id}-${item.value}`}\n              >\n                {item.label}\n                {item.value === '2' && (\n                  <Badge\n                    variant=\"outline\"\n                    className=\"border-primary/30 bg-primary/10 text-primary rounded-md px-2 py-0.5 text-[10px] shadow-[inset_0px_1px_2px_rgba(255,255,255,0.1)]\"\n                  >\n                    Popular\n                  </Badge>\n                )}\n              </Label>\n            </div>\n            <div\n              id={`${`${id}-${item.value}`}-price`}\n              className=\"text-muted-foreground group-has-checked:text-foreground text-sm\"\n            >\n              {item.price}\n            </div>\n          </div>\n        </div>\n      ))}\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-11",
      "type": "registry:component",
      "title": "Radio Group 11",
      "description": "Radio Group 11. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-11.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  RadioGroup,\n  RadioGroupItem,\n} from '@/components/base-ui/radio-group';\n\nconst RadioGroup11 = () => {\n  const id = useId();\n\n  return (\n    <RadioGroup className=\"w-full max-w-96 gap-2\" defaultValue=\"1\">\n      <div className=\"border-input has-data-[state=checked]:border-primary/50 has-focus-visible:border-ring has-focus-visible:ring-ring/50 relative w-full rounded-md border p-3 shadow-xs transition-[color,box-shadow] outline-none has-focus-visible:ring-[3px]\">\n        <RadioGroupItem\n          value=\"1\"\n          id={`${id}-1`}\n          className=\"sr-only absolute\"\n          aria-label=\"plan-radio-basic\"\n          aria-describedby={`${id}-1-description`}\n        />\n\n        <Label\n          htmlFor={`${id}-1`}\n          className=\"text-foreground flex flex-col items-start after:absolute after:inset-0\"\n        >\n          <div className=\"flex w-full items-center justify-between\">\n            <span>Basic</span>\n            <span className=\"text-muted-foreground text-xs leading-[inherit] font-normal\">\n              Free\n            </span>\n          </div>\n          <p\n            id={`${id}-1-description`}\n            className=\"text-muted-foreground text-xs\"\n          >\n            Get 1 project with 1 teams members.\n          </p>\n        </Label>\n      </div>\n\n      <div className=\"border-input has-data-[state=checked]:border-primary/50 has-focus-visible:border-ring has-focus-visible:ring-ring/50 relative w-full rounded-md border p-3 shadow-xs transition-[color,box-shadow] outline-none has-focus-visible:ring-[3px]\">\n        <RadioGroupItem\n          value=\"2\"\n          id={`${id}-2`}\n          className=\"sr-only absolute\"\n          aria-label=\"plan-radio-premium\"\n          aria-describedby={`${id}-2-description`}\n        />\n\n        <Label\n          htmlFor={`${id}-2`}\n          className=\"text-foreground flex flex-col items-start after:absolute after:inset-0\"\n        >\n          <div className=\"flex w-full items-center justify-between\">\n            <span>Premium</span>\n            <span className=\"text-muted-foreground text-xs leading-[inherit] font-normal\">\n              $5.00\n            </span>\n          </div>\n          <p\n            id={`${id}-2-description`}\n            className=\"text-muted-foreground text-xs\"\n          >\n            Get 5 projects with 5 team members.\n          </p>\n        </Label>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-12",
      "type": "registry:component",
      "title": "Radio Group 12",
      "description": "Radio Group 12. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-12.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { FaUser, FaCrown } from 'react-icons/fa';\n\nimport { Label } from '@/components/base-ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup12 = () => {\n  const id = useId();\n\n  return (\n    <RadioGroup\n      className=\"w-full max-w-96 justify-items-center sm:grid-cols-2\"\n      defaultValue=\"starter\"\n    >\n      <div className=\"border-input has-data-[state=checked]:border-primary/60 has-data-[state=checked]:bg-accent/40 relative flex w-full max-w-50 flex-col items-center gap-3 rounded-lg border p-4 shadow-xs transition\">\n        <RadioGroupItem\n          value=\"starter\"\n          id={`${id}-starter`}\n          className=\"order-1 size-5 after:absolute after:inset-0 [&_svg]:size-3\"\n          aria-describedby={`${id}-starter-description`}\n        />\n        <div className=\"grid grow justify-items-center gap-2 text-center\">\n          <FaUser className=\"text-muted-foreground size-5\" />\n          <Label\n            htmlFor={`${id}-starter`}\n            className=\"justify-center font-medium\"\n          >\n            Starter\n          </Label>\n          <p\n            id={`${id}-starter-description`}\n            className=\"text-muted-foreground text-xs leading-snug\"\n          >\n            Great for personal use and small tasks.\n          </p>\n        </div>\n      </div>\n\n      <div className=\"border-input has-data-[state=checked]:border-primary/60 has-data-[state=checked]:bg-accent/40 relative flex w-full max-w-50 flex-col items-center gap-3 rounded-lg border p-4 shadow-xs transition\">\n        <RadioGroupItem\n          value=\"pro\"\n          id={`${id}-pro`}\n          className=\"order-1 size-5 after:absolute after:inset-0 [&_svg]:size-3\"\n          aria-describedby={`${id}-pro-description`}\n        />\n        <div className=\"grid grow justify-items-center gap-2 text-center\">\n          <FaCrown className=\"text-primary size-5\" />\n          <Label htmlFor={`${id}-pro`} className=\"justify-center font-medium\">\n            Pro\n          </Label>\n          <p\n            id={`${id}-pro-description`}\n            className=\"text-muted-foreground text-xs leading-snug\"\n          >\n            Bbase-uilt for teams with advanced features.\n          </p>\n        </div>\n      </div>\n    </RadioGroup>\n  );\n};\n\nexport default RadioGroup12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group-13",
      "type": "registry:component",
      "title": "Radio Group 13",
      "description": "Radio Group 13. A set of mutually exclusive options where only one choice can be selected at a time.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "radio-group"
      ],
      "files": [
        {
          "path": "components/watermelon/radio-group-13.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport {\n  FaMobileAlt,\n  FaTabletAlt,\n  FaLaptop,\n  FaDesktop,\n  FaLayerGroup,\n} from 'react-icons/fa';\n\nimport { RadioGroup, RadioGroupItem } from '@/components/base-ui/radio-group';\n\nconst RadioGroup13 = () => {\n  const id = useId();\n\n  const items = [\n    { value: '1', label: 'Mobile', icon: FaMobileAlt },\n    { value: '2', label: 'Tablet', icon: FaTabletAlt, disabled: true },\n    { value: '3', label: 'Laptop', icon: FaLaptop },\n    { value: '4', label: 'Desktop', icon: FaDesktop },\n    { value: '5', label: 'Hybrid', icon: FaLayerGroup },\n  ];\n\n  return (\n    <fieldset className=\"w-full max-w-96 space-y-4\">\n      <legend className=\"text-foreground text-sm font-medium\">\n        Select Device:\n      </legend>\n\n      <RadioGroup className=\"grid grid-cols-3 gap-2\" defaultValue=\"1\">\n        {items.map((item) => {\n          const Icon = item.icon;\n\n          return (\n            <label\n              key={`${id}-${item.value}`}\n              className=\"border-input has-data-[state=checked]:border-primary/80 has-data-[state=checked]:bg-accent/40 has-focus-visible:border-ring has-focus-visible:ring-ring/50 relative flex flex-col items-center justify-center gap-2 rounded-md border px-2 py-3 text-center shadow-xs transition outline-none has-focus-visible:ring-[3px] has-data-disabled:cursor-not-allowed has-data-disabled:opacity-50\"\n            >\n              <RadioGroupItem\n                id={`${id}-${item.value}`}\n                value={item.value}\n                className=\"sr-only after:absolute after:inset-0\"\n                aria-label={`device-radio-${item.value}`}\n                disabled={item.disabled}\n              />\n\n              <Icon className=\"text-muted-foreground size-5 shrink-0\" />\n\n              <p className=\"text-foreground text-sm font-medium\">\n                {item.label}\n              </p>\n            </label>\n          );\n        })}\n      </RadioGroup>\n    </fieldset>\n  );\n};\n\nexport default RadioGroup13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-1",
      "type": "registry:component",
      "title": "Select 1",
      "description": "Select 1. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-1.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select1 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Account Identity Role\n      </Label>\n      <NativeSelect \n        id={id} \n        className=\"w-full rounded-xl border-zinc-200 shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all focus:ring-2 focus:ring-zinc-400/20 dark:focus:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <option value=\"owner\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Organization Owner</option>\n        <option value=\"admin\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">System Administrator</option>\n        <option value=\"editor\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Content Contributor</option>\n        <option value=\"viewer\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Platform Observer</option>\n      </NativeSelect>\n    </div>\n  );\n};\n\nexport default Select1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-2",
      "type": "registry:component",
      "title": "Select 2",
      "description": "Select 2. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-2.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select2 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Project Domain\n      </Label>\n      <NativeSelect \n        id={id} \n        defaultValue=\"\" \n        className=\"w-full rounded-xl border-zinc-200 shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all focus:ring-2 focus:ring-zinc-400/20 dark:focus:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <option value=\"\" disabled className=\"dark:bg-zinc-950 dark:text-zinc-500\">Identify target sector</option>\n        <option value=\"fintech\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Financial Operations</option>\n        <option value=\"ecom\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">E-commerce Solutions</option>\n        <option value=\"health\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Healthcare Systems</option>\n        <option value=\"saas\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">SaaS Infrastructure</option>\n      </NativeSelect>\n    </div>\n  );\n};\n\nexport default Select2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-3",
      "type": "registry:component",
      "title": "Select 3",
      "description": "Select 3. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-3.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport { IconDatabase } from '@tabler/icons-react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select3 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Metric Architecture\n      </Label>\n      <div className=\"group relative w-full\">\n        <NativeSelect \n          id={id} \n          className=\"w-full [&_select]:!pl-9 [&_select]:!rounded-xl [&_select]:!border-zinc-200 dark:[&_select]:!border-zinc-800 dark:[&_select]:!bg-zinc-950 transition-all [&_select]:focus-visible:ring-zinc-400/20 dark:[&_select]:focus-visible:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark]\"\n          defaultValue=\"\"\n        >\n          <option value=\"\" disabled className=\"dark:bg-zinc-950 dark:text-zinc-500\">Identify stream type</option>\n          <option value=\"logs\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Unified System Logs</option>\n          <option value=\"events\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Transaction Events</option>\n          <option value=\"metrics\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Performance Metrics</option>\n          <option value=\"traces\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Distributed Traces</option>\n        </NativeSelect>\n        <div className=\"text-zinc-400 pointer-events-none absolute inset-y-0 left-0 flex items-center justify-center pl-3 group-has-[select:disabled]:opacity-50 dark:text-zinc-600\">\n          <IconDatabase size={16} stroke={1.5} aria-hidden=\"true\" />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Select3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-4",
      "type": "registry:component",
      "title": "Select 4",
      "description": "Select 4. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-4.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select4 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Data Residency Policy\n      </Label>\n      <NativeSelect \n        id={id} \n        className=\"w-full [&_select]:!rounded-xl [&_select]:!border-zinc-200 shadow-xs dark:[&_select]:!border-zinc-800 dark:[&_select]:!bg-zinc-950 transition-all focus:ring-2 focus:ring-zinc-400/20 dark:focus:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <option value=\"gdpr\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">EU Sovereignty (GDPR)</option>\n        <option value=\"ccpa\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">California Privacy (CCPA)</option>\n        <option value=\"federal\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Federal Compliance (HIPAA)</option>\n        <option value=\"global\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Standard Global Policy</option>\n      </NativeSelect>\n      <p className=\"text-[11px] text-zinc-500 px-1 dark:text-zinc-500\" role=\"region\" aria-live=\"polite\">\n        Selection determines the primary geographic cluster for secure storage.\n      </p>\n    </div>\n  );\n};\n\nexport default Select4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-5",
      "type": "registry:component",
      "title": "Select 5",
      "description": "Select 5. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-5.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select5 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Primary Gateway Version\n      </Label>\n      <NativeSelect \n        id={id} \n        aria-invalid=\"true\"\n        className=\"w-full rounded-xl border-red-500/50 shadow-xs dark:border-red-900/50 dark:bg-zinc-950 focus:ring-2 focus:ring-red-500/20 dark:focus:ring-red-500/10 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <option value=\"v1\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Legacy Gateway (v1.0)</option>\n        <option value=\"v2\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Standard API (v2.4)</option>\n        <option value=\"v3\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Modern Edge (v3.1-beta)</option>\n        <option value=\"v4\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Serverless v4 (Experimental)</option>\n      </NativeSelect>\n      <p className=\"text-[11px] text-red-500 px-1 dark:text-red-400\" role=\"alert\" aria-live=\"polite\">\n        The selected version is currently undergoing maintenance.\n      </p>\n    </div>\n  );\n};\n\nexport default Select5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-6",
      "type": "registry:component",
      "title": "Select 6",
      "description": "Select 6. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-6.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select6 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"flex items-center gap-1 text-zinc-600 dark:text-zinc-400\">\n        Primary Deployment Region <span className=\"text-red-500 font-bold\" aria-hidden=\"true\">*</span>\n      </Label>\n      <NativeSelect \n        id={id} \n        required\n        className=\"w-full rounded-xl border-zinc-200 shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all focus:ring-2 focus:ring-zinc-400/20 dark:focus:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <option value=\"us-east\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">US East (N. Virginia)</option>\n        <option value=\"eu-west\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">EU West (Ireland)</option>\n        <option value=\"ap-south\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Asia Pacific (Mumbai)</option>\n        <option value=\"all\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Global Multi-AZ</option>\n      </NativeSelect>\n    </div>\n  );\n};\n\nexport default Select6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-7",
      "type": "registry:component",
      "title": "Select 7",
      "description": "Select 7. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-7.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { \n  NativeSelect, \n  NativeSelectOptGroup,\n  NativeSelectOption \n} from '@/components/base-ui/native-select';\n\nconst Select7 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Architecture Blueprint\n      </Label>\n      <NativeSelect \n        id={id} \n        className=\"w-full rounded-xl border-zinc-200 shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all focus:ring-2 focus:ring-zinc-400/20 dark:focus:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <NativeSelectOptGroup label=\"Virtualization Layer\" className=\"dark:bg-zinc-950 dark:text-zinc-500\">\n          <NativeSelectOption value=\"docker\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Container Engine (Docker)</NativeSelectOption>\n          <NativeSelectOption value=\"kvm\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Kernel Virtual Machine</NativeSelectOption>\n          <NativeSelectOption value=\"firecracker\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">MicroVM (Firecracker)</NativeSelectOption>\n        </NativeSelectOptGroup>\n        <NativeSelectOptGroup label=\"Orchestration Fabric\" className=\"dark:bg-zinc-950 dark:text-zinc-500\">\n          <NativeSelectOption value=\"k8s\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Managed Kubernetes</NativeSelectOption>\n          <NativeSelectOption value=\"nomad\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">HashiCorp Nomad</NativeSelectOption>\n          <NativeSelectOption value=\"swarm\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Docker Swarm Mode</NativeSelectOption>\n        </NativeSelectOptGroup>\n      </NativeSelect>\n    </div>\n  );\n};\n\nexport default Select7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-8",
      "type": "registry:component",
      "title": "Select 8",
      "description": "Select 8. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-8.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select8 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"group relative w-full max-w-xs transition-all\">\n      <label\n        htmlFor={id}\n        className=\"absolute -top-2 left-3 z-10 bg-white px-1.5 text-[11px] font-semibold text-zinc-500 transition-colors group-focus-within:text-zinc-900 dark:bg-zinc-950 dark:text-zinc-500 dark:group-focus-within:text-zinc-100\"\n      >\n        Execution Priority\n      </label>\n      <NativeSelect \n        id={id} \n        className=\"w-full rounded-xl border-zinc-200 shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all focus:ring-2 focus:ring-zinc-400/20 dark:focus:ring-zinc-500/20 dark:[&_select]:[color-scheme:dark] dark:[&_select]:bg-zinc-950 dark:hover:[&_select]:bg-zinc-950\"\n      >\n        <option value=\"low\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Low (Background Task)</option>\n        <option value=\"med\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Medium (Standard Request)</option>\n        <option value=\"high\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">High (Real-time Critical)</option>\n        <option value=\"ultra\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Ultra (System Interrupt)</option>\n      </NativeSelect>\n    </div>\n  );\n};\n\nexport default Select8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-9",
      "type": "registry:component",
      "title": "Select 9",
      "description": "Select 9. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-9.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select9 = () => {\n  const id = useId();\n\n  return (\n    <div className='border-input bg-background focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive relative w-full max-w-xs rounded-xl border shadow-xs transition-[color,box-shadow] outline-none focus-within:ring-[3px] has-[select:disabled]:cursor-not-allowed has-[select:disabled]:opacity-50 has-[select:is(:disabled)_*]:pointer-events-none dark:border-zinc-800 dark:bg-zinc-950'>\n      <label htmlFor={id} className='text-zinc-500 block px-3 pt-2 text-[10px] font-bold uppercase tracking-wider dark:text-zinc-500'>\n        Security clearance\n      </label>\n      <NativeSelect \n        id={id} \n        defaultValue=\"\"\n        className=\"!w-full [&_select]:!w-full [&_select]:!h-9 [&_select]:!border-none [&_select]:!bg-transparent [&_select]:!px-3 [&_select]:!shadow-none [&_select]:!ring-0 [&_select]:!ring-offset-0 [&_select]:!focus:ring-0 [&_select]:!focus-visible:ring-0 [&_select]:!focus-visible:outline-none [&_select]:!outline-none [&_select]:text-zinc-900 dark:[&_select]:text-zinc-100 dark:[&_select]:[color-scheme:dark]\"\n      >\n        <option value=\"\" disabled className=\"dark:bg-zinc-950 dark:text-zinc-500\">Pick status level</option>\n        <option value=\"level1\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Public Access (Level 1)</option>\n        <option value=\"level2\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Confidential Internal (Level 2)</option>\n        <option value=\"level3\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Restricted Sensitive (Level 3)</option>\n        <option value=\"level4\" className=\"dark:bg-zinc-950 dark:text-zinc-100\">Top Secret Core (Level 4)</option>\n      </NativeSelect>\n    </div>\n  );\n};\n\nexport default Select9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-10",
      "type": "registry:component",
      "title": "Select 10",
      "description": "Select 10. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-10.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select10 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Favorite Fruit\n      </Label>\n      <Select defaultValue=\"apple\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Select a fruit\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Available Fruits</SelectLabel>\n            <SelectItem value=\"apple\" className=\"rounded-lg\">Apple</SelectItem>\n            <SelectItem value=\"banana\" className=\"rounded-lg\">Banana</SelectItem>\n            <SelectItem value=\"blueberry\" className=\"rounded-lg\">Blueberry</SelectItem>\n            <SelectItem value=\"grapes\" className=\"rounded-lg\">Grapes</SelectItem>\n            <SelectItem value=\"pineapple\" className=\"rounded-lg\">Pineapple</SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-11",
      "type": "registry:component",
      "title": "Select 11",
      "description": "Select 11. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-11.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select11 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2 text-zinc-900 dark:text-zinc-100\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Primary Specialization\n      </Label>\n      <Select>\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify your core skill\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Engineering Roles</SelectLabel>\n            <SelectItem value=\"frontend\" className=\"rounded-lg\">Frontend Development</SelectItem>\n            <SelectItem value=\"backend\" className=\"rounded-lg\">Backend Systems</SelectItem>\n            <SelectItem value=\"fullstack\" className=\"rounded-lg\">Full-Stack Engineering</SelectItem>\n            <SelectItem value=\"devops\" className=\"rounded-lg\">SRE & DevOps</SelectItem>\n            <SelectItem value=\"security\" className=\"rounded-lg\">Cyber Security</SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-12",
      "type": "registry:component",
      "title": "Select 12",
      "description": "Select 12. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-12.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport { IconDeviceDesktop } from '@tabler/icons-react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select12 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Deployment Target\n      </Label>\n      <Select defaultValue=\"web\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white px-3 shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <span className=\"flex items-center gap-2\">\n            <IconDeviceDesktop className=\"size-4 text-zinc-500\" stroke={1.5} />\n            <SelectValue placeholder=\"Identify platform\" />\n          </span>\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"web\" className=\"rounded-lg\">Web Application</SelectItem>\n          <SelectItem value=\"mobile\" className=\"rounded-lg\">Native Mobile</SelectItem>\n          <SelectItem value=\"desktop\" className=\"rounded-lg\">System Desktop</SelectItem>\n          <SelectItem value=\"cloud\" className=\"rounded-lg\">Cloud Infrastructure</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-13",
      "type": "registry:component",
      "title": "Select 13",
      "description": "Select 13. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-13.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select13 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Release Method\n      </Label>\n      <Select defaultValue=\"rolling\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Choose a strategy\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"rolling\" className=\"rounded-lg\">Rolling Update</SelectItem>\n          <SelectItem value=\"canary\" className=\"rounded-lg\">Canary Deployment</SelectItem>\n          <SelectItem value=\"blue-green\" className=\"rounded-lg\">Blue-Green Switch</SelectItem>\n          <SelectItem value=\"recreate\" className=\"rounded-lg\">Full Recreate</SelectItem>\n        </SelectContent>\n      </Select>\n      <p className=\"text-[12px] text-zinc-500 dark:text-zinc-500\" role=\"region\" aria-live=\"polite\">\n        Pods will be cycled according to this deployment pattern.\n      </p>\n    </div>\n  );\n};\n\nexport default Select13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-14",
      "type": "registry:component",
      "title": "Select 14",
      "description": "Select 14. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-14.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select14 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Active Environment\n      </Label>\n      <Select defaultValue=\"prod\">\n        <SelectTrigger \n          id={id} \n          aria-invalid=\"true\"\n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 aria-invalid:border-amber-500 aria-invalid:ring-amber-500/20 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900 dark:aria-invalid:border-amber-900 dark:aria-invalid:ring-amber-900/40\"\n        >\n          <SelectValue placeholder=\"Identify environment\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"dev\" className=\"rounded-lg\">Development Sandbox</SelectItem>\n          <SelectItem value=\"staging\" className=\"rounded-lg\">Staging Cluster</SelectItem>\n          <SelectItem value=\"qa\" className=\"rounded-lg\">QA Validation</SelectItem>\n          <SelectItem value=\"prod\" className=\"rounded-lg\">Production Main</SelectItem>\n        </SelectContent>\n      </Select>\n      <p className=\"text-[12px] text-amber-600 dark:text-amber-500\" role=\"alert\" aria-live=\"polite\">\n        Production environment is currently locked for maintenance tasks.\n      </p>\n    </div>\n  );\n};\n\nexport default Select14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-15",
      "type": "registry:component",
      "title": "Select 15",
      "description": "Select 15. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-15.tsx",
          "type": "registry:component",
          "content": "import {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select15 = () => {\n  return (\n    <div className=\"w-full max-w-xs space-y-4\">\n      {/* Small Select */}\n      <div className=\"space-y-1\">\n        <Select>\n          <SelectTrigger \n            size=\"sm\" \n            className=\"w-full !rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n          >\n            <SelectValue placeholder=\"System memory\" />\n          </SelectTrigger>\n          <SelectContent position=\"popper\" sideOffset={4} className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\">\n            <SelectGroup>\n              <SelectLabel className=\"text-zinc-500 text-xs\">Small Instance</SelectLabel>\n              <SelectItem value=\"2gb\" className=\"rounded-lg\">2 GB RAM</SelectItem>\n              <SelectItem value=\"4gb\" className=\"rounded-lg\">4 GB RAM</SelectItem>\n              <SelectItem value=\"8gb\" className=\"rounded-lg\">8 GB RAM</SelectItem>\n            </SelectGroup>\n          </SelectContent>\n        </Select>\n      </div>\n\n      {/* Default Select */}\n      <div className=\"space-y-1\">\n        <Select>\n          <SelectTrigger \n            className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n          >\n            <SelectValue placeholder=\"Standard memory\" />\n          </SelectTrigger>\n          <SelectContent position=\"popper\" sideOffset={4} className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\">\n            <SelectGroup>\n              <SelectLabel className=\"text-zinc-500\">Standard Nodes</SelectLabel>\n              <SelectItem value=\"16gb\" className=\"rounded-lg\">16 GB RAM</SelectItem>\n              <SelectItem value=\"32gb\" className=\"rounded-lg\">32 GB RAM</SelectItem>\n              <SelectItem value=\"64gb\" className=\"rounded-lg\">64 GB RAM</SelectItem>\n            </SelectGroup>\n          </SelectContent>\n        </Select>\n      </div>\n\n      {/* Large Select */}\n      <div className=\"space-y-1\">\n        <Select>\n          <SelectTrigger \n            className=\"w-full !h-10 rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900 px-3\"\n          >\n            <SelectValue placeholder=\"High-performance memory\" />\n          </SelectTrigger>\n          <SelectContent position=\"popper\" sideOffset={4} className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\">\n            <SelectGroup>\n              <SelectLabel className=\"text-zinc-500\">Performance Cluster</SelectLabel>\n              <SelectItem value=\"128gb\" className=\"rounded-lg\">128 GB RAM</SelectItem>\n              <SelectItem value=\"256gb\" className=\"rounded-lg\">256 GB RAM</SelectItem>\n              <SelectItem value=\"512gb\" className=\"rounded-lg\">512 GB RAM</SelectItem>\n            </SelectGroup>\n          </SelectContent>\n        </Select>\n      </div>\n    </div>\n  );\n};\n\nexport default Select15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-16",
      "type": "registry:component",
      "title": "Select 16",
      "description": "Select 16. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-16.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select16 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        System Criticality\n      </Label>\n      <Select defaultValue=\"p2\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 focus-visible:border-zinc-400 focus-visible:ring-zinc-400/20 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900 dark:focus-visible:border-zinc-600 dark:focus-visible:ring-zinc-500/20\"\n        >\n          <SelectValue placeholder=\"Set level\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"p1\" className=\"rounded-lg\">P1 - Highest Attention</SelectItem>\n          <SelectItem value=\"p2\" className=\"rounded-lg\">P2 - Priority Ops</SelectItem>\n          <SelectItem value=\"p3\" className=\"rounded-lg\">P3 - Regular Flow</SelectItem>\n          <SelectItem value=\"p4\" className=\"rounded-lg\">P4 - Informational</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-17",
      "type": "registry:component",
      "title": "Select 17",
      "description": "Select 17. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-17.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select17 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Operation Type\n      </Label>\n      <Select defaultValue=\"internal\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-300/50 bg-zinc-100/50 shadow-none transition-all hover:bg-zinc-100 focus-visible:ring-zinc-400/20 dark:border-zinc-700/50 dark:bg-zinc-900/50 dark:hover:bg-zinc-900 dark:focus-visible:ring-zinc-500/20 px-3\"\n        >\n          <SelectValue placeholder=\"System category\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Resource Categories</SelectLabel>\n            <SelectItem value=\"internal\" className=\"rounded-lg\">Internal Operations</SelectItem>\n            <SelectItem value=\"client\" className=\"rounded-lg\">Client Interaction</SelectItem>\n            <SelectItem value=\"rd\" className=\"rounded-lg\">Research & Develop</SelectItem>\n            <SelectItem value=\"maint\" className=\"rounded-lg\">System Maintenance</SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-18",
      "type": "registry:component",
      "title": "Select 18",
      "description": "Select 18. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-18.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select18 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400 font-medium\">\n        UI Scaling Factor\n      </Label>\n      <Select defaultValue=\"100\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-none bg-transparent shadow-none hover:bg-zinc-100/80 focus-visible:ring-zinc-400/20 dark:bg-transparent dark:hover:bg-zinc-800/80 dark:focus-visible:ring-zinc-500/20 px-3\"\n        >\n          <SelectValue placeholder=\"Display scale\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"80\" className=\"rounded-lg\">Compact View (80%)</SelectItem>\n          <SelectItem value=\"100\" className=\"rounded-lg\">Standard Scale (100%)</SelectItem>\n          <SelectItem value=\"125\" className=\"rounded-lg\">Cozy Desktop (125%)</SelectItem>\n          <SelectItem value=\"150\" className=\"rounded-lg\">Accessible (150%)</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-19",
      "type": "registry:component",
      "title": "Select 19",
      "description": "Select 19. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-19.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select19 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2 opacity-60\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Transfer Protocol (Locked)\n      </Label>\n      <Select defaultValue=\"v2\" disabled>\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 shadow-none cursor-not-allowed\"\n        >\n          <SelectValue placeholder=\"System protocol\" />\n        </SelectTrigger>\n        <SelectContent position=\"popper\" sideOffset={4} className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\">\n          <SelectItem value=\"v1.1\" className=\"rounded-lg\">HTTP/1.1 Standard</SelectItem>\n          <SelectItem value=\"v2\" className=\"rounded-lg\">HTTP/2 Binary</SelectItem>\n          <SelectItem value=\"v3\" className=\"rounded-lg\">HTTP/3 QUIC</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-20",
      "type": "registry:component",
      "title": "Select 20",
      "description": "Select 20. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-20.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select20 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Infrastructure Region\n      </Label>\n      <Select defaultValue=\"use1\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"System instance\" />\n        </SelectTrigger>\n        <SelectContent position=\"popper\" sideOffset={4} className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\">\n          <SelectItem value=\"use1\" className=\"rounded-lg\">US-East (N. Virginia)</SelectItem>\n          <SelectItem value=\"euw1\" className=\"rounded-lg\" disabled>\n            EU-West (Ireland) — [Full]\n          </SelectItem>\n          <SelectItem value=\"apse1\" className=\"rounded-lg\">AP-Southeast (Singapore)</SelectItem>\n          <SelectItem value=\"sae1\" className=\"rounded-lg\" disabled>\n            SA-East (São Paulo) — [Offline]\n          </SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-21",
      "type": "registry:component",
      "title": "Select 21",
      "description": "Select 21. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-21.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select21 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"flex items-center gap-1 text-zinc-600 dark:text-zinc-400\">\n        Identity Verification <span className=\"text-red-500 font-bold\" aria-hidden=\"true\">*</span>\n      </Label>\n      <Select defaultValue=\"verified\" required>\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify your status\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"unverified\" className=\"rounded-lg\">Unverified Guest</SelectItem>\n          <SelectItem value=\"verified\" className=\"rounded-lg\">Identity Confirmed</SelectItem>\n          <SelectItem value=\"privileged\" className=\"rounded-lg\">Privileged Access</SelectItem>\n          <SelectItem value=\"restricted\" className=\"rounded-lg\">Restricted Entry</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-22",
      "type": "registry:component",
      "title": "Select 22",
      "description": "Select 22. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-22.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select22 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Infrastructure Core\n      </Label>\n      <Select defaultValue=\"edge\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify resource\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Compute Layer</SelectLabel>\n            <SelectItem value=\"lambda\" className=\"rounded-lg\">Serverless Lambda</SelectItem>\n            <SelectItem value=\"ec2\" className=\"rounded-lg\">Virtual Instance</SelectItem>\n            <SelectItem value=\"containers\" className=\"rounded-lg\">Managed Cluster</SelectItem>\n          </SelectGroup>\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Delivery Layer</SelectLabel>\n            <SelectItem value=\"cdn\" className=\"rounded-lg\">Content Delivery</SelectItem>\n            <SelectItem value=\"edge\" className=\"rounded-lg\">Edge Computing</SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select22;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-23",
      "type": "registry:component",
      "title": "Select 23",
      "description": "Select 23. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-23.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select23 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Workspace Strategy\n      </Label>\n      <Select defaultValue=\"remote\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify model\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Flexible Layouts</SelectLabel>\n            <SelectItem value=\"remote\" className=\"rounded-lg\">Fully Distributed</SelectItem>\n            <SelectItem value=\"hybrid\" className=\"rounded-lg\">Hybrid Dynamic</SelectItem>\n          </SelectGroup>\n          <SelectSeparator className=\"bg-zinc-100 dark:bg-zinc-800\" />\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Centralized Models</SelectLabel>\n            <SelectItem value=\"office\" className=\"rounded-lg\">HQ Centric</SelectItem>\n            <SelectItem value=\"pods\" className=\"rounded-lg\">Regional Pods</SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select23;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-24",
      "type": "registry:component",
      "title": "Select 24",
      "description": "Select 24. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-24.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select24 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"group relative w-full max-w-xs transition-all\">\n      <label\n        htmlFor={id}\n        className=\"absolute -top-2 left-3 z-10 bg-white px-1.5 text-[11px] font-semibold text-zinc-500 transition-colors group-focus-within:text-zinc-900 dark:bg-zinc-950 dark:text-zinc-500 dark:group-focus-within:text-zinc-100\"\n      >\n        System Identity\n      </label>\n      <Select defaultValue=\"default\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify namespace\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"default\" className=\"rounded-lg\">Default Instance</SelectItem>\n          <SelectItem value=\"staging\" className=\"rounded-lg\">Staging Cluster</SelectItem>\n          <SelectItem value=\"prod\" className=\"rounded-lg\">Production Main</SelectItem>\n          <SelectItem value=\"sandbox\" className=\"rounded-lg\">Sandbox Environment</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select24;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-25",
      "type": "registry:component",
      "title": "Select 25",
      "description": "Select 25. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-25.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select25 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"flex w-full max-w-xs flex-col rounded-xl border border-zinc-200 bg-white p-3 pb-1 shadow-xs transition-all focus-within:border-zinc-300 dark:border-zinc-800 dark:bg-zinc-950 dark:focus-within:border-zinc-700\">\n      <label\n        htmlFor={id}\n        className=\"mb-1 text-[11px] font-bold tracking-tight text-zinc-500 uppercase dark:text-zinc-500\"\n      >\n        Security Policy\n      </label>\n      <Select defaultValue=\"standard\">\n        <SelectTrigger \n          id={id} \n          className=\"h-auto w-full border-none bg-transparent p-0 shadow-none hover:bg-transparent focus-visible:ring-0 dark:bg-transparent dark:hover:bg-transparent\"\n        >\n          <SelectValue placeholder=\"Identify policy\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={12} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"standard\" className=\"rounded-lg\">Standard Protocol</SelectItem>\n          <SelectItem value=\"strict\" className=\"rounded-lg\">Strict Enforcement</SelectItem>\n          <SelectItem value=\"relaxed\" className=\"rounded-lg\">Relaxed Governance</SelectItem>\n          <SelectItem value=\"custom\" className=\"rounded-lg\">Custom Definition</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select25;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-26",
      "type": "registry:component",
      "title": "Select 26",
      "description": "Select 26. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-26.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select26 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        API Permissions\n      </Label>\n      <Select defaultValue=\"read-only\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify scope\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Read Operations</SelectLabel>\n            <SelectItem value=\"read-only\" className=\"rounded-lg\">Metadata & Stats</SelectItem>\n            <SelectItem value=\"search\" className=\"rounded-lg\">Search Indices</SelectItem>\n          </SelectGroup>\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500\">Write Access</SelectLabel>\n            <SelectItem value=\"editor\" className=\"rounded-lg\">Content Management</SelectItem>\n            <SelectItem value=\"admin\" className=\"rounded-lg\">System Configuration</SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select26;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-27",
      "type": "registry:component",
      "title": "Select 27",
      "description": "Select 27. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-27.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport {\n  IconCamera,\n  IconCode,\n  IconDatabase,\n  IconGlobe,\n} from '@tabler/icons-react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select27 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Portfolio Category\n      </Label>\n      <Select defaultValue=\"dev\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <SelectValue placeholder=\"Identify field\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500 text-xs\">Primary Disciplines</SelectLabel>\n            <SelectItem value=\"dev\" className=\"rounded-lg\">\n              <span className=\"flex items-center gap-2\">\n                <IconCode className=\"size-4 text-zinc-500\" stroke={1.5} />\n                Engineering\n              </span>\n            </SelectItem>\n            <SelectItem value=\"creative\" className=\"rounded-lg\">\n              <span className=\"flex items-center gap-2\">\n                <IconCamera className=\"size-4 text-zinc-500\" stroke={1.5} />\n                Creative Arts\n              </span>\n            </SelectItem>\n            <SelectItem value=\"data\" className=\"rounded-lg\">\n              <span className=\"flex items-center gap-2\">\n                <IconDatabase className=\"size-4 text-zinc-500\" stroke={1.5} />\n                Analytics\n              </span>\n            </SelectItem>\n            <SelectItem value=\"global\" className=\"rounded-lg\">\n              <span className=\"flex items-center gap-2\">\n                <IconGlobe className=\"size-4 text-zinc-500\" stroke={1.5} />\n                Network Ops\n              </span>\n            </SelectItem>\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select27;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-28",
      "type": "registry:component",
      "title": "Select 28",
      "description": "Select 28. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-28.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select28 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Primary Framework\n      </Label>\n      <Select defaultValue=\"react\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <span className=\"flex items-center gap-1.5 text-zinc-500 font-medium\">\n            Project Stack: <SelectValue placeholder=\"Identify core tech\" />\n          </span>\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"react\" className=\"rounded-lg\">React.js Engine</SelectItem>\n          <SelectItem value=\"vue\" className=\"rounded-lg\">Vue.js Ecosystem</SelectItem>\n          <SelectItem value=\"next\" className=\"rounded-lg\">Next.js Framework</SelectItem>\n          <SelectItem value=\"astro\" className=\"rounded-lg\">Astro Static Gen</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select28;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-29",
      "type": "registry:component",
      "title": "Select 29",
      "description": "Select 29. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-29.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport { IconCircle } from '@tabler/icons-react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst Select29 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Lifecycle Stage\n      </Label>\n      <Select defaultValue=\"active\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <span className=\"flex items-center gap-2\">\n            <SelectValue placeholder=\"Identify phase\" />\n          </span>\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectItem value=\"draft\" className=\"rounded-lg\">\n            <span className=\"flex items-center gap-2\">\n              <IconCircle className=\"size-2 fill-zinc-400 text-zinc-400 stroke-zinc-400\" />\n              Unpublished Draft\n            </span>\n          </SelectItem>\n          <SelectItem value=\"active\" className=\"rounded-lg\">\n            <span className=\"flex items-center gap-2\">\n              <IconCircle className=\"size-2 fill-emerald-500 text-emerald-500 stroke-emerald-500\" />\n              Live Deployment\n            </span>\n          </SelectItem>\n          <SelectItem value=\"archived\" className=\"rounded-lg\">\n            <span className=\"flex items-center gap-2\">\n              <IconCircle className=\"size-2 fill-amber-500 text-amber-500 stroke-amber-500\" />\n              Archived Record\n            </span>\n          </SelectItem>\n          <SelectItem value=\"deprecated\" className=\"rounded-lg\">\n            <span className=\"flex items-center gap-2\">\n              <IconCircle className=\"size-2 fill-rose-500 text-rose-500 stroke-rose-500\" />\n              Legacy System\n            </span>\n          </SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select29;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-30",
      "type": "registry:component",
      "title": "Select 30",
      "description": "Select 30. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-30.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst hubs = [\n  { value: 'us', label: 'Western United States', flag: 'us' },\n  { value: 'gb', label: 'United Kingdom Hub', flag: 'gb' },\n  { value: 'jp', label: 'Japan Core Region', flag: 'jp' },\n  { value: 'in', label: 'India South Cluster', flag: 'in' },\n  { value: 'de', label: 'Germany Mainframe', flag: 'de' },\n];\n\nconst Select30 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Global Resource Hub\n      </Label>\n      <Select defaultValue=\"us\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900\"\n        >\n          <span className=\"flex items-center gap-2\">\n            <SelectValue placeholder=\"Identify region\" />\n          </span>\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          {hubs.map((hub) => (\n            <SelectItem key={hub.value} value={hub.value} className=\"rounded-lg\">\n              <span className=\"flex items-center gap-2\">\n                <img \n                  src={`https://flagcdn.com/w40/${hub.flag}.png`} \n                  alt={`${hub.label} flag`} \n                  className=\"h-3 w-4.5 object-cover rounded-xs border border-zinc-200 dark:border-zinc-800\"\n                />\n                <span className=\"truncate\">{hub.label}</span>\n              </span>\n            </SelectItem>\n          ))}\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select30;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-31",
      "type": "registry:component",
      "title": "Select 31",
      "description": "Select 31. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "label",
        "select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-31.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base-ui/avatar';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/base-ui/select';\n\nconst agents = [\n  { id: '1', handle: 'vance', name: 'Vance Sterling', initials: 'VS' },\n  { id: '2', handle: 'elara', name: 'Elara Vance', initials: 'EV' },\n  { id: '3', handle: 'jules', name: 'Jules Winfield', initials: 'JW' },\n];\n\nconst Select31 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Delegate Action\n      </Label>\n      <Select defaultValue=\"1\">\n        <SelectTrigger \n          id={id} \n          className=\"w-full rounded-xl border-zinc-200 bg-white shadow-xs transition-all hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900 px-2\"\n        >\n          <SelectValue placeholder=\"Identify member\" />\n        </SelectTrigger>\n        <SelectContent \n          position=\"popper\" \n          sideOffset={4} \n          className=\"rounded-xl border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <SelectGroup>\n            <SelectLabel className=\"text-zinc-500 text-xs px-2.5\">Available Agents</SelectLabel>\n            {agents.map((agent) => (\n              <SelectItem key={agent.id} value={agent.id} className=\"rounded-lg\">\n                <span className=\"flex items-center gap-2\">\n                  <Avatar className=\"size-5 border border-zinc-200 dark:border-zinc-800\">\n                    <AvatarImage src={`https://unavatar.io/${agent.handle}`} alt={agent.name} />\n                    <AvatarFallback className=\"text-[8px] bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400\">\n                      {agent.initials}\n                    </AvatarFallback>\n                  </Avatar>\n                  <span className=\"truncate\">{agent.name}</span>\n                </span>\n              </SelectItem>\n            ))}\n          </SelectGroup>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n\nexport default Select31;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-32",
      "type": "registry:component",
      "title": "Select 32",
      "description": "Select 32. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "button",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/select-32.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { IconCheck, IconChevronDown } from '@tabler/icons-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { cn } from '@/lib/utils';\n\nconst ops = [\n  { id: 'monitoring', label: 'Real-time Monitoring' },\n  { id: 'logging', label: 'Log Aggregation' },\n  { id: 'analytics', label: 'Security Analytics' },\n  { id: 'backups', label: 'Automated Backups' },\n];\n\nconst Select32 = () => {\n  const [selected, setSelected] = useState<string[]>(['monitoring']);\n\n  const toggleOp = (id: string) => {\n    setSelected((prev) =>\n      prev.includes(id) ? prev.filter((i) => i !== id) : [...prev, id]\n    );\n  };\n\n  const getLabel = () => {\n    if (selected.length === 0) return 'Select operations';\n    if (selected.length === 1) return ops.find(o => o.id === selected[0])?.label;\n    return `${selected.length} operations active`;\n  };\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2 text-zinc-900 dark:text-zinc-100\">\n      <Label className=\"text-zinc-600 dark:text-zinc-400\">Active Pipeline Services</Label>\n      <Popover>\n        <PopoverTrigger asChild>\n          <Button\n            variant=\"outline\"\n            className=\"w-full justify-between rounded-xl border-zinc-200 bg-white px-3 font-normal shadow-xs transition-all hover:bg-zinc-50 focus:ring-2 focus:ring-zinc-400/20 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900 dark:focus:ring-zinc-500/20 outline-none\"\n          >\n            <span className={cn(\"truncate\", selected.length === 0 && \"text-zinc-500\")}>\n              {getLabel()}\n            </span>\n            <IconChevronDown className=\"size-4 shrink-0 opacity-50\" stroke={1.5} />\n          </Button>\n        </PopoverTrigger>\n        <PopoverContent \n          align=\"start\"\n          className=\"w-(--radix-popover-trigger-width) p-1 rounded-xl border-zinc-200 bg-white shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <div className=\"flex flex-col gap-0.5\">\n            {ops.map((op) => {\n              const isSelected = selected.includes(op.id);\n              return (\n                <button\n                  key={op.id}\n                  onClick={() => toggleOp(op.id)}\n                  className={cn(\n                    \"flex items-center justify-between w-full px-2.5 py-2 rounded-lg text-sm transition-colors outline-none\",\n                    \"hover:bg-zinc-100 dark:hover:bg-zinc-900\",\n                    isSelected ? \"text-zinc-900 dark:text-zinc-100\" : \"text-zinc-600 dark:text-zinc-400\"\n                  )}\n                >\n                  <span className=\"font-medium\">{op.label}</span>\n                  {isSelected && (\n                    <IconCheck className=\"size-4 text-zinc-900 dark:text-zinc-100\" stroke={2} />\n                  )}\n                </button>\n              );\n            })}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n\nexport default Select32;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-33",
      "type": "registry:component",
      "title": "Select 33",
      "description": "Select 33. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "button",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "components/watermelon/select-33.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\nimport { IconCheck, IconChevronDown } from '@tabler/icons-react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '@/components/base-ui/popover';\nimport { cn } from '@/lib/utils';\n\nconst channels = [\n  { id: 'email', label: 'Primary Email' },\n  { id: 'sms', label: 'SMS Gateway' },\n  { id: 'push', label: 'Mobile Push' },\n  { id: 'slack', label: 'Slack Webhook' },\n  { id: 'discord', label: 'Discord Bot' },\n];\n\nconst Select33 = () => {\n  const [selected, setSelected] = useState<string[]>([]);\n\n  const toggleChannel = (id: string) => {\n    setSelected((prev) =>\n      prev.includes(id) ? prev.filter((i) => i !== id) : [...prev, id]\n    );\n  };\n\n  const getLabel = () => {\n    if (selected.length === 0) return 'Select notification paths';\n    if (selected.length === 1) return channels.find(c => c.id === selected[0])?.label;\n    return `${selected.length} channels selected`;\n  };\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2 text-zinc-900 dark:text-zinc-100\">\n      <Label className=\"text-zinc-600 dark:text-zinc-400\">Communication Channels</Label>\n      <Popover>\n        <PopoverTrigger asChild>\n          <Button\n            variant=\"outline\"\n            className=\"w-full justify-between rounded-xl border-zinc-200 bg-white px-3 font-normal shadow-xs transition-all hover:bg-zinc-50 focus:ring-2 focus:ring-zinc-400/20 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900 dark:focus:ring-zinc-500/20 outline-none\"\n          >\n            <span className={cn(\"truncate\", selected.length === 0 && \"text-zinc-500\")}>\n              {getLabel()}\n            </span>\n            <IconChevronDown className=\"size-4 shrink-0 opacity-50\" stroke={1.5} />\n          </Button>\n        </PopoverTrigger>\n        <PopoverContent \n          align=\"start\"\n          className=\"w-(--radix-popover-trigger-width) p-1 rounded-xl border-zinc-200 bg-white shadow-lg dark:border-zinc-800 dark:bg-zinc-950\"\n        >\n          <div className=\"flex flex-col gap-0.5\">\n            {channels.map((ch) => {\n              const isSelected = selected.includes(ch.id);\n              return (\n                <button\n                  key={ch.id}\n                  onClick={() => toggleChannel(ch.id)}\n                  className={cn(\n                    \"flex items-center justify-between w-full px-2.5 py-2 rounded-lg text-sm transition-colors outline-none\",\n                    \"hover:bg-zinc-100 dark:hover:bg-zinc-900\",\n                    isSelected ? \"text-zinc-900 dark:text-zinc-100\" : \"text-zinc-600 dark:text-zinc-400\"\n                  )}\n                >\n                  <span className=\"font-medium\">{ch.label}</span>\n                  {isSelected && (\n                    <IconCheck className=\"size-4 text-zinc-900 dark:text-zinc-100\" stroke={2} />\n                  )}\n                </button>\n              );\n            })}\n          </div>\n        </PopoverContent>\n      </Popover>\n      <p className=\"text-[12px] text-zinc-500 px-1 dark:text-zinc-500\">\n        System alerts will be delivered via all selected channels.\n      </p>\n    </div>\n  );\n};\n\nexport default Select33;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-34",
      "type": "registry:component",
      "title": "Select 34",
      "description": "Select 34. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "native-select"
      ],
      "files": [
        {
          "path": "components/watermelon/select-34.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { NativeSelect } from '@/components/base-ui/native-select';\n\nconst Select34 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2 text-zinc-900 dark:text-zinc-100\">\n      <Label htmlFor={id} className=\"text-zinc-600 dark:text-zinc-400\">\n        Dietary Preferences\n      </Label>\n      <NativeSelect \n        id={id} \n        multiple \n        className=\"w-full [&_svg]:hidden [&_select]:h-32 [&_select]:rounded-xl [&_select]:border-zinc-200 [&_select]:py-2 [&_select]:pr-2.5 [&_select]:shadow-xs dark:[&_select]:border-zinc-800 dark:[&_select]:bg-zinc-950 transition-all [&_select]:focus-visible:ring-zinc-400/20 dark:[&_select]:focus-visible:ring-zinc-500/20\"\n      >\n        <option value=\"vegetarian\" className=\"py-1 px-1.5 focus:bg-zinc-100 dark:focus:bg-zinc-900\">\n          Vegetarian Options\n        </option>\n        <option value=\"vegan\" className=\"py-1 px-1.5 focus:bg-zinc-100 dark:focus:bg-zinc-900\">\n          Strictly Vegan\n        </option>\n        <option value=\"gluten-free\" className=\"py-1 px-1.5 focus:bg-zinc-100 dark:focus:bg-zinc-900\">\n          Gluten-Free Diet\n        </option>\n        <option value=\"halal\" className=\"py-1 px-1.5 focus:bg-zinc-100 dark:focus:bg-zinc-900\">\n          Halal Certified\n        </option>\n        <option value=\"kosher\" className=\"py-1 px-1.5 focus:bg-zinc-100 dark:focus:bg-zinc-900\">\n          Kosher Selection\n        </option>\n        <option value=\"dairy-free\" className=\"py-1 px-1.5 focus:bg-zinc-100 dark:focus:bg-zinc-900\">\n          Dairy-Free Items\n        </option>\n      </NativeSelect>\n      <p className=\"text-[11px] text-zinc-500 px-1 dark:text-zinc-500\">\n        Hold Cmd/Ctrl to select multiple preferences.\n      </p>\n    </div>\n  );\n};\n\nexport default Select34;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-35",
      "type": "registry:component",
      "title": "Select 35",
      "description": "Select 35. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "react-aria-components"
      ],
      "registryDependencies": [
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/select-35.tsx",
          "type": "registry:component",
          "content": "import { ListBox, ListBoxItem } from 'react-aria-components';\n\nimport { Label } from '@/components/base-ui/label';\n\nconst envs = [\n  { id: 'prod', label: 'Production (Main)', description: 'Critical systems' },\n  { id: 'staging', label: 'Staging (Build)', description: 'UAT testing' },\n  { id: 'dev', label: 'Development (Local)', description: 'Sandbox play' },\n  { id: 'legacy', label: 'Legacy (v2)', description: 'Archived data', isDisabled: true },\n];\n\nconst Select35 = () => {\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label className=\"text-zinc-600 dark:text-zinc-400\">Environment Context</Label>\n      <div className=\"overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all\">\n        <ListBox\n          className=\"flex flex-col p-1 outline-none\"\n          aria-label=\"Select environment context\"\n          selectionMode=\"single\"\n          defaultSelectedKeys={['staging']}\n        >\n          {envs.map((env) => (\n            <ListBoxItem\n              key={env.id}\n              id={env.id}\n              className=\"flex flex-col rounded-lg px-2.5 py-2 text-sm outline-none cursor-default select-none transition-colors data-[selected=true]:bg-zinc-100 dark:data-[selected=true]:bg-zinc-900 data-[selected=true]:text-zinc-900 dark:data-[selected=true]:text-zinc-100 data-[disabled]:opacity-40 data-[disabled]:grayscale focus:bg-zinc-100 dark:focus:bg-zinc-900\"\n              isDisabled={env.isDisabled}\n              textValue={env.label}\n            >\n              <span className=\"font-medium text-zinc-900 dark:text-zinc-100\">{env.label}</span>\n              <span className=\"text-[11px] text-zinc-500\">{env.description}</span>\n            </ListBoxItem>\n          ))}\n        </ListBox>\n      </div>\n    </div>\n  );\n};\n\nexport default Select35;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select-36",
      "type": "registry:component",
      "title": "Select 36",
      "description": "Select 36. A versatile selection component that provides a sleek, accessible way to choose options from a list.",
      "dependencies": [
        "@tabler/icons-react",
        "react-aria-components"
      ],
      "registryDependencies": [
        "label"
      ],
      "files": [
        {
          "path": "components/watermelon/select-36.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { \n  Header, \n  ListBox, \n  ListBoxItem, \n  ListBoxSection, \n  Separator \n} from 'react-aria-components';\nimport { IconCheck } from '@tabler/icons-react';\nimport type { Selection } from 'react-aria-components';\n\nimport { Label } from '@/components/base-ui/label';\nimport { cn } from '@/lib/utils';\n\nconst Select36 = () => {\n  const [selectedKeys, setSelectedKeys] = useState<Selection>(new Set(['read', 'billing']));\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label className=\"text-zinc-600 dark:text-zinc-400 font-medium tracking-tight\">\n        Policy Governance Scopes\n      </Label>\n      <div className=\"overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xs dark:border-zinc-800 dark:bg-zinc-950 transition-all\">\n        <ListBox\n          className=\"max-h-72 flex flex-col gap-2 overflow-auto p-1 text-sm outline-none\"\n          aria-label=\"Select security scopes\"\n          selectionMode=\"multiple\"\n          selectionBehavior=\"toggle\"\n          selectedKeys={selectedKeys}\n          onSelectionChange={setSelectedKeys}\n        >\n          <ListBoxSection className=\"space-y-1\">\n            <Header className=\"px-2.5 py-1.5 text-[11px] font-bold uppercase tracking-wider text-zinc-400 dark:text-zinc-500\">\n              Operational Scopes\n            </Header>\n            {[\n              { id: 'read', label: 'ReadOnly Access' },\n              { id: 'write', label: 'Write & Execute' },\n              { id: 'delete', label: 'Destructive Ops' },\n            ].map((item) => (\n              <ListBoxItem\n                key={item.id}\n                id={item.id}\n                className={({ isSelected, isHovered, isFocusVisible }) => cn(\n                  \"flex items-center justify-between rounded-lg px-2.5 py-2 text-sm outline-none cursor-default select-none transition-colors\",\n                  isHovered && \"bg-zinc-100/50 dark:bg-zinc-900/50\",\n                  isSelected && \"bg-zinc-100 dark:bg-zinc-800 text-zinc-900 dark:text-zinc-100\",\n                  isFocusVisible && \"ring-2 ring-zinc-400 dark:ring-zinc-500 ring-offset-2 dark:ring-offset-zinc-950\",\n                  !isSelected && \"text-zinc-600 dark:text-zinc-400\"\n                )}\n              >\n                {({ isSelected }) => (\n                  <>\n                    <span className=\"font-medium\">{item.label}</span>\n                    {isSelected && (\n                      <IconCheck className=\"size-4 text-zinc-900 dark:text-zinc-100\" stroke={2} />\n                    )}\n                  </>\n                )}\n              </ListBoxItem>\n            ))}\n          </ListBoxSection>\n\n          <Separator className=\"mx-1 my-1.5 border-t border-zinc-100 dark:border-zinc-800\" />\n\n          <ListBoxSection className=\"space-y-1\">\n            <Header className=\"px-2.5 py-1.5 text-[11px] font-bold uppercase tracking-wider text-zinc-400 dark:text-zinc-500\">\n              Administrative Scopes\n            </Header>\n            {[\n              { id: 'users', label: 'User Governance' },\n              { id: 'billing', label: 'Billing & Quotas' },\n              { id: 'audit', label: 'Security Audits' },\n            ].map((item) => (\n              <ListBoxItem\n                key={item.id}\n                id={item.id}\n                className={({ isSelected, isHovered, isFocusVisible }) => cn(\n                  \"flex items-center justify-between rounded-lg px-2.5 py-2 text-sm outline-none cursor-default select-none transition-colors\",\n                  isHovered && \"bg-zinc-100/50 dark:bg-zinc-900/50\",\n                  isSelected && \"bg-zinc-100 dark:bg-zinc-800 text-zinc-900 dark:text-zinc-100\",\n                  isFocusVisible && \"ring-2 ring-zinc-400 dark:ring-zinc-500 ring-offset-2 dark:ring-offset-zinc-950\",\n                  !isSelected && \"text-zinc-600 dark:text-zinc-400\"\n                )}\n              >\n                {({ isSelected }) => (\n                  <>\n                    <span className=\"font-medium\">{item.label}</span>\n                    {isSelected && (\n                      <IconCheck className=\"size-4 text-zinc-900 dark:text-zinc-100\" stroke={2} />\n                    )}\n                  </>\n                )}\n              </ListBoxItem>\n            ))}\n          </ListBoxSection>\n        </ListBox>\n      </div>\n      <p className=\"text-[11px] text-zinc-500 px-1 dark:text-zinc-500\">\n        Click to toggle multiple policy scopes.\n      </p>\n    </div>\n  );\n};\n\nexport default Select36;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-1",
      "type": "registry:component",
      "title": "Sheet 1",
      "description": "Sheet 1. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "input",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-1.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/base-ui/sheet';\nimport { FaBell, FaPalette, FaGlobe } from 'react-icons/fa';\n\nconst Sheet1 = () => {\n  const [settings, setSettings] = useState({\n    username: '',\n    theme: '',\n    language: '',\n  });\n\n  return (\n    <Sheet>\n      <SheetTrigger asChild>\n        <Button variant=\"outline\">Preferences</Button>\n      </SheetTrigger>\n\n      <SheetContent className=\" rounded-lg\">\n        <SheetHeader>\n          <SheetTitle className=\"flex items-center gap-2\">\n            <FaBell />\n            App Preferences\n          </SheetTitle>\n        </SheetHeader>\n\n        <div className=\"mt-6 flex flex-col gap-6 px-4\">\n          <div className=\"bg-muted/50 flex flex-col gap-3 rounded-lg border p-4\">\n            <div className=\"flex items-center gap-2 text-sm font-medium\">\n              <FaPalette />\n              Appearance\n            </div>\n            <Input\n              placeholder=\"Light / Dark / System\"\n              value={settings.theme}\n              onChange={(e) =>\n                setSettings({ ...settings, theme: e.target.value })\n              }\n            />\n          </div>\n\n          <div className=\"bg-muted/50 flex flex-col gap-3 rounded-lg border p-4\">\n            <div className=\"flex items-center gap-2 text-sm font-medium\">\n              <FaGlobe />\n              Language\n            </div>\n            <Input\n              placeholder=\"e.g. English\"\n              value={settings.language}\n              onChange={(e) =>\n                setSettings({ ...settings, language: e.target.value })\n              }\n            />\n          </div>\n\n          <div className=\"bg-muted/50 flex flex-col gap-3 rounded-lg border p-4\">\n            <div className=\"flex items-center gap-2 text-sm font-medium\">\n              <FaBell />\n              Notification Name\n            </div>\n            <Input\n              placeholder=\"Enter display name\"\n              value={settings.username}\n              onChange={(e) =>\n                setSettings({ ...settings, username: e.target.value })\n              }\n            />\n          </div>\n        </div>\n\n        <SheetFooter className=\"flex gap-2\">\n          <Button className=\"w-full\">Apply Changes</Button>\n          <SheetClose asChild>\n            <Button variant=\"outline\" className=\"w-full\">\n              Dismiss\n            </Button>\n          </SheetClose>\n        </SheetFooter>\n      </SheetContent>\n    </Sheet>\n  );\n};\n\nexport default Sheet1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-2",
      "type": "registry:component",
      "title": "Sheet 2",
      "description": "Sheet 2. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "input",
        "label",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-2.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/base-ui/sheet';\nimport {\n  FaChevronUp,\n  FaChevronRight,\n  FaChevronDown,\n  FaChevronLeft,\n  FaUserCircle,\n} from 'react-icons/fa';\n\nconst SheetContentBody = () => (\n  <>\n    <SheetHeader>\n      <SheetTitle className=\"flex items-center gap-2\">\n        <FaUserCircle />\n        Profile Setup\n      </SheetTitle>\n    </SheetHeader>\n\n    <div className=\"grid gap-5 px-4 py-6\">\n      <div className=\"grid gap-2\">\n        <Label>Display Name</Label>\n        <Input placeholder=\"Enter your name\" />\n      </div>\n\n      <div className=\"grid gap-2\">\n        <Label>Email</Label>\n        <Input placeholder=\"Enter your email\" />\n      </div>\n\n      <div className=\"grid gap-2\">\n        <Label>Bio</Label>\n        <Input placeholder=\"Short description...\" />\n      </div>\n    </div>\n\n    <SheetFooter className=\"flex gap-2\">\n      <Button className=\"w-full\">Save</Button>\n      <SheetClose asChild>\n        <Button variant=\"outline\" className=\"w-full\">\n          Close\n        </Button>\n      </SheetClose>\n    </SheetFooter>\n  </>\n);\n\nconst Sheet2 = () => {\n  return (\n    <div className=\" flex flex-wrap gap-3\">\n      <Sheet>\n        <SheetTrigger asChild>\n          <Button variant=\"outline\" size=\"icon\">\n            <FaChevronUp />\n          </Button>\n        </SheetTrigger>\n        <SheetContent side=\"top\" className=\"rounded-lg\">\n          <SheetContentBody />\n        </SheetContent>\n      </Sheet>\n\n      <Sheet>\n        <SheetTrigger asChild>\n          <Button variant=\"outline\" size=\"icon\">\n            <FaChevronRight />\n          </Button>\n        </SheetTrigger>\n        <SheetContent side=\"right\" className=\"rounded-lg\">\n          <SheetContentBody />\n        </SheetContent>\n      </Sheet>\n\n      <Sheet>\n        <SheetTrigger asChild>\n          <Button variant=\"outline\" size=\"icon\">\n            <FaChevronDown />\n          </Button>\n        </SheetTrigger>\n        <SheetContent side=\"bottom\" className=\"rounded-lg\">\n          <SheetContentBody />\n        </SheetContent>\n      </Sheet>\n\n      <Sheet>\n        <SheetTrigger asChild>\n          <Button variant=\"outline\" size=\"icon\">\n            <FaChevronLeft />\n          </Button>\n        </SheetTrigger>\n        <SheetContent side=\"left\" className=\"rounded-lg\">\n          <SheetContentBody />\n        </SheetContent>\n      </Sheet>\n    </div>\n  );\n};\n\nexport default Sheet2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-3",
      "type": "registry:component",
      "title": "Sheet 3",
      "description": "Sheet 3. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "scroll-area",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-3.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { Button } from '@/components/base-ui/button';\nimport { ScrollArea } from '@/components/base-ui/scroll-area';\nimport {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetDescription,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/base-ui/sheet';\n\nconst Sheet3 = () => {\n  const sections = Array.from({ length: 6 }, (_, i) => ({\n    title: `Module ${i + 1}`,\n    content:\n      'This section outlines key system behaviors including performance handling, scalability patterns, and secure data flow. It highlights how different layers interact and maintain efficiency under load.',\n  }));\n\n  return (\n    <Sheet>\n      <SheetTrigger asChild>\n        <Button variant=\"outline\">Open Documentation</Button>\n      </SheetTrigger>\n\n      <SheetContent className=\" p-0 sm:max-w-[540px]\">\n        <ScrollArea className=\"h-full\">\n          <div className=\"space-y-6 px-6 pb-6\">\n            <SheetHeader>\n              <SheetTitle className=\"text-lg\">System Overview</SheetTitle>\n              <SheetDescription>\n                Key architectural insights and module breakdown.\n              </SheetDescription>\n            </SheetHeader>\n\n            <div className=\"space-y-5\">\n              {sections.map((section, index) => (\n                <div\n                  key={index}\n                  className=\"bg-muted/40 space-y-3 rounded-lg border p-4\"\n                >\n                  <h3 className=\"text-base font-semibold\">{section.title}</h3>\n\n                  <p className=\"text-muted-foreground text-sm leading-relaxed\">\n                    {section.content}\n                  </p>\n\n                  <div className=\"bg-muted rounded-md px-3 py-2 font-mono text-xs\">\n                    REF-{index + 1} • ACTIVE\n                  </div>\n                </div>\n              ))}\n            </div>\n\n            <SheetFooter className=\"flex flex-col gap-2 p-0 \">\n              <SheetClose asChild>\n                <Button className=\"w-full\">Export</Button>\n              </SheetClose>\n              <SheetClose asChild>\n                <Button variant=\"outline\" className=\"w-full\">\n                  Close\n                </Button>\n              </SheetClose>\n            </SheetFooter>\n          </div>\n        </ScrollArea>\n      </SheetContent>\n    </Sheet>\n  );\n};\n\nexport default Sheet3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-4",
      "type": "registry:component",
      "title": "Sheet 4",
      "description": "Sheet 4. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "collapsible",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-4.tsx",
          "type": "registry:component",
          "content": "import type { IconType } from 'react-icons';\nimport {\n  HiHome,\n  HiSquares2X2,\n  HiViewColumns,\n  HiChatBubbleLeftRight,\n  HiEnvelope,\n  HiCalendarDays,\n  HiShoppingCart,\n  HiArrowRightOnRectangle,\n  HiArrowLeftOnRectangle,\n  HiHeart,\n  HiBookOpen,\n  HiChevronRight,\n} from 'react-icons/hi2';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@/components/base-ui/collapsible';\nimport {\n  Sheet,\n  SheetContent,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/base-ui/sheet';\n\ntype NavigationItem = {\n  name: string;\n  icon: IconType;\n} & (\n  | {\n      type: 'page';\n      children?: never;\n    }\n  | {\n      type: 'category';\n      children: NavigationItem[];\n    }\n);\n\nconst navigationMenu: NavigationItem[] = [\n  {\n    name: 'Overview',\n    icon: HiHome,\n    type: 'page',\n  },\n  {\n    name: 'Workspace',\n    icon: HiViewColumns,\n    type: 'category',\n    children: [\n      {\n        name: 'Top Navigation',\n        icon: HiViewColumns,\n        type: 'page',\n      },\n      {\n        name: 'Split Layout',\n        icon: HiViewColumns,\n        type: 'page',\n      },\n      {\n        name: 'Focus Mode',\n        icon: HiViewColumns,\n        type: 'page',\n      },\n    ],\n  },\n  {\n    name: 'Pages',\n    icon: HiSquares2X2,\n    type: 'category',\n    children: [\n      {\n        name: 'Welcome',\n        icon: HiSquares2X2,\n        type: 'page',\n      },\n      {\n        name: 'Subscriptions',\n        icon: HiSquares2X2,\n        type: 'page',\n      },\n      {\n        name: 'Checkout Flow',\n        icon: HiSquares2X2,\n        type: 'page',\n      },\n    ],\n  },\n  {\n    name: 'Conversations',\n    icon: HiChatBubbleLeftRight,\n    type: 'page',\n  },\n  {\n    name: 'Inbox',\n    icon: HiEnvelope,\n    type: 'page',\n  },\n  {\n    name: 'Planner',\n    icon: HiCalendarDays,\n    type: 'page',\n  },\n  {\n    name: 'Commerce',\n    icon: HiShoppingCart,\n    type: 'category',\n    children: [\n      {\n        name: 'Catalog',\n        icon: HiShoppingCart,\n        type: 'page',\n      },\n      {\n        name: 'Collections',\n        icon: HiShoppingCart,\n        type: 'page',\n      },\n      {\n        name: 'Orders',\n        icon: HiShoppingCart,\n        type: 'page',\n      },\n      {\n        name: 'Regions',\n        icon: HiShoppingCart,\n        type: 'page',\n      },\n    ],\n  },\n  {\n    name: 'Login',\n    icon: HiArrowRightOnRectangle,\n    type: 'page',\n  },\n  {\n    name: 'Logout',\n    icon: HiArrowLeftOnRectangle,\n    type: 'page',\n  },\n  {\n    name: 'Support',\n    icon: HiHeart,\n    type: 'page',\n  },\n  {\n    name: 'Resources',\n    icon: HiBookOpen,\n    type: 'page',\n  },\n];\n\nconst NavigationMenu = ({\n  item,\n  level,\n}: {\n  level: number;\n  item: NavigationItem;\n}) => {\n  if (item.type === 'page') {\n    const Icon = item.icon;\n    return (\n      <div\n        className=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-md p-1 outline-none focus-visible:ring-[3px]\"\n        style={{ paddingLeft: `${level === 0 ? 0.25 : 1.75}rem` }}\n      >\n        <Icon className=\"size-4 shrink-0\" />\n        <span className=\"text-sm\">{item.name}</span>\n      </div>\n    );\n  }\n\n  const Icon = item.icon;\n\n  return (\n    <Collapsible\n      className=\"flex flex-col gap-1.5\"\n      style={{ paddingLeft: `${level === 0 ? 0 : 1.5}rem` }}\n    >\n      <CollapsibleTrigger className=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-md p-1 outline-none focus-visible:ring-[3px]\">\n        <Icon className=\"size-4 shrink-0\" />\n        <span className=\"flex-1 text-start text-sm\">{item.name}</span>\n        <HiChevronRight className=\"size-4 shrink-0 transition-transform [[data-state=open]>&]:rotate-90\" />\n      </CollapsibleTrigger>\n      <CollapsibleContent className=\"data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down flex flex-col gap-1.5 overflow-hidden transition-all duration-300\">\n        {item.children.map((child) => (\n          <NavigationMenu key={child.name} item={child} level={level + 1} />\n        ))}\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n\nconst Sheet4 = () => {\n  return (\n    <Sheet>\n      <SheetTrigger asChild>\n        <Button variant=\"outline\">Open Panel</Button>\n      </SheetTrigger>\n      <SheetContent side=\"left\" className=\"w-75\">\n        <SheetHeader>\n          <SheetTitle>Workspace</SheetTitle>\n        </SheetHeader>\n        <div className=\"flex flex-col gap-2.5 p-4 pt-0\">\n          {navigationMenu.map((item) => (\n            <NavigationMenu key={item.name} item={item} level={0} />\n          ))}\n        </div>\n      </SheetContent>\n    </Sheet>\n  );\n};\n\nexport default Sheet4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-5",
      "type": "registry:component",
      "title": "Sheet 5",
      "description": "Sheet 5. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "input",
        "label",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-5.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport { Label } from '@/components/base-ui/label';\nimport {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetDescription,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/base-ui/sheet';\n\nconst Sheet5 = () => {\n  return (\n    <Sheet modal={false}>\n      <SheetTrigger asChild>\n        <Button variant=\"outline\">Quick Setup</Button>\n      </SheetTrigger>\n      <SheetContent>\n        <SheetHeader>\n          <SheetTitle>Create Workspace</SheetTitle>\n          <SheetDescription>\n            Set up a new workspace to organize your projects and collaborate\n            with your team.\n          </SheetDescription>\n        </SheetHeader>\n\n        <div className=\"grid flex-1 auto-rows-min gap-6 px-4\">\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"workspace-name\">Workspace Name</Label>\n            <Input id=\"workspace-name\" placeholder=\"e.g. Growth Team\" />\n          </div>\n\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"workspace-slug\">Workspace URL</Label>\n            <Input id=\"workspace-slug\" placeholder=\"growth-team\" />\n          </div>\n\n          <div className=\"grid gap-3\">\n            <Label htmlFor=\"workspace-owner\">Owner Email</Label>\n            <Input id=\"workspace-owner\" placeholder=\"team@company.com\" />\n          </div>\n        </div>\n\n        <SheetFooter>\n          <Button type=\"submit\">Create Workspace</Button>\n          <SheetClose asChild>\n            <Button variant=\"outline\">Cancel</Button>\n          </SheetClose>\n        </SheetFooter>\n      </SheetContent>\n    </Sheet>\n  );\n};\n\nexport default Sheet5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-6",
      "type": "registry:component",
      "title": "Sheet 6",
      "description": "Sheet 6. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [
        "react-icons",
        "sonner"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "input",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-6.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport {\n  FaUser,\n  FaEnvelope,\n  FaPhone,\n  FaLock,\n  FaCheckCircle,\n} from 'react-icons/fa';\n\nimport { toast } from 'sonner';\n\nimport { Alert, AlertTitle } from '@/components/base-ui/alert';\nimport { Button } from '@/components/base-ui/button';\nimport { Input } from '@/components/base-ui/input';\nimport {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/base-ui/sheet';\n\nconst Sheet6 = () => {\n  const [form, setForm] = useState({\n    firstName: '',\n    lastName: '',\n    email: '',\n    mobileNumber: '',\n    password: '',\n  });\n\n  const handleChange = (key: string, value: string) => {\n    setForm((prev) => ({\n      ...prev,\n      [key]: value,\n    }));\n  };\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n\n    if (\n      !form.firstName ||\n      !form.lastName ||\n      !form.email ||\n      !form.mobileNumber ||\n      !form.password\n    ) {\n      toast.error('Please fill all fields');\n      return;\n    }\n\n    toast.custom(() => (\n      <Alert className=\"border-primary text-primary\">\n        <FaCheckCircle className=\"shrink-0\" />\n        <AlertTitle>Account created 🚀</AlertTitle>\n      </Alert>\n    ));\n  };\n\n  return (\n    <Sheet>\n      <SheetTrigger asChild>\n        <Button variant=\"outline\">Get Started</Button>\n      </SheetTrigger>\n\n      <SheetContent>\n        <SheetHeader>\n          <SheetTitle className=\"text-center text-xl font-semibold\">\n            Create your account\n          </SheetTitle>\n        </SheetHeader>\n\n        <form onSubmit={handleSubmit} className=\"flex h-full w-full flex-col\">\n          <div className=\"flex-1 space-y-4 p-4 pt-0\">\n            <div className=\"flex flex-col gap-2\">\n              <label className=\"flex items-center gap-2 text-sm\">\n                <FaUser className=\"text-muted-foreground size-3 shrink-0\" />\n                First Name\n              </label>\n              <Input\n                placeholder=\"John\"\n                className=\"rounded-sm\"\n                value={form.firstName}\n                onChange={(e) => handleChange('firstName', e.target.value)}\n              />\n            </div>\n\n            <div className=\"flex flex-col gap-2\">\n              <label className=\"flex items-center gap-2 text-sm\">\n                <FaUser className=\"text-muted-foreground size-3 shrink-0\" />\n                Last Name\n              </label>\n              <Input\n                placeholder=\"Doe\"\n                value={form.lastName}\n                className=\"rounded-sm\"\n                onChange={(e) => handleChange('lastName', e.target.value)}\n              />\n            </div>\n\n            <div className=\"flex flex-col gap-2\">\n              <label className=\"flex items-center gap-2 text-sm\">\n                <FaEnvelope className=\"text-muted-foreground size-3 shrink-0\" />\n                Email\n              </label>\n              <Input\n                placeholder=\"you@example.com\"\n                value={form.email}\n                className=\"rounded-sm\"\n                onChange={(e) => handleChange('email', e.target.value)}\n              />\n            </div>\n\n            <div className=\"flex flex-col gap-2\">\n              <label className=\"flex items-center gap-2 text-sm\">\n                <FaPhone className=\"text-muted-foreground size-3 shrink-0\" />\n                Phone\n              </label>\n              <Input\n                type=\"tel\"\n                placeholder=\"9876543210\"\n                value={form.mobileNumber}\n                className=\"rounded-sm\"\n                onChange={(e) =>\n                  handleChange(\n                    'mobileNumber',\n                    e.target.value.replace(/[^\\d]/g, '').slice(0, 10),\n                  )\n                }\n              />\n            </div>\n\n            <div className=\"flex flex-col gap-2\">\n              <label className=\"flex items-center gap-2 text-sm\">\n                <FaLock className=\"text-muted-foreground size-3 shrink-0\" />\n                Password\n              </label>\n              <Input\n                type=\"password\"\n                placeholder=\"••••••••\"\n                value={form.password}\n                className=\"rounded-sm\"\n                onChange={(e) => handleChange('password', e.target.value)}\n              />\n            </div>\n          </div>\n\n          <SheetFooter className=\"\">\n            <Button type=\"submit\">Create Account</Button>\n\n            <SheetClose asChild>\n              <Button variant=\"outline\">Cancel</Button>\n            </SheetClose>\n          </SheetFooter>\n        </form>\n      </SheetContent>\n    </Sheet>\n  );\n};\n\nexport default Sheet6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet-7",
      "type": "registry:component",
      "title": "Sheet 7",
      "description": "Sheet 7. A panel that slides in from the edge of the screen to display additional content, forms, or actions without navigating away.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "input",
        "label",
        "select",
        "sheet"
      ],
      "files": [
        {
          "path": "components/watermelon/sheet-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport {\n  FaPlus,\n  FaShieldAlt,\n  FaUser,\n  FaEye,\n  FaCheckCircle,\n  FaTimesCircle,\n} from 'react-icons/fa';\n\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/components/ui/select';\nimport {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetDescription,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/ui/sheet';\n\ntype UserType = {\n  id: string;\n  name: string;\n  email: string;\n  role: 'admin' | 'user' | 'viewer';\n  status: 'active' | 'inactive';\n};\n\nconst Sheet7 = () => {\n  const [users, setUsers] = useState<UserType[]>([\n    {\n      id: '1',\n      name: 'Ritik Sharma',\n      email: 'ritik@gmail.com',\n      role: 'admin',\n      status: 'active',\n    },\n    {\n      id: '2',\n      name: 'Aman Verma',\n      email: 'aman@gmail.com',\n      role: 'user',\n      status: 'inactive',\n    },\n  ]);\n\n  const [open, setOpen] = useState(false);\n  const [search, setSearch] = useState('');\n\n  const [form, setForm] = useState({\n    name: '',\n    email: '',\n    role: 'user' as UserType['role'],\n    status: 'active' as UserType['status'],\n  });\n\n  const filteredUsers = users.filter((u) =>\n    `${u.name} ${u.email}`.toLowerCase().includes(search.toLowerCase()),\n  );\n\n  const addUser = () => {\n    if (!form.name || !form.email) return;\n\n    setUsers((prev) => [...prev, { id: String(prev.length + 1), ...form }]);\n\n    setForm({ name: '', email: '', role: 'user', status: 'active' });\n    setOpen(false);\n  };\n\n  return (\n    <div className=\"theme-injected w-full space-y-4\">\n      <div className=\"flex items-center justify-between\">\n        <Input\n          placeholder=\"Search users...\"\n          value={search}\n          onChange={(e) => setSearch(e.target.value)}\n          className=\"max-w-[300px]\"\n        />\n\n        <Sheet open={open} onOpenChange={setOpen}>\n          <SheetTrigger asChild>\n            <Button className='ml-1'>\n              <FaPlus className=\"size-4\" />\n              New User\n            </Button>\n          </SheetTrigger>\n\n          <SheetContent className=\"space-y-6 p-4 \">\n            <SheetHeader className=\"p-0\">\n              <SheetTitle>Create User</SheetTitle>\n              <SheetDescription>\n                Add a new user to your workspace\n              </SheetDescription>\n            </SheetHeader>\n\n            <div className=\"space-y-4\">\n              <div className=\"space-y-2\">\n                <Label>Name</Label>\n                <Input\n                  value={form.name}\n                  onChange={(e) => setForm({ ...form, name: e.target.value })}\n                />\n              </div>\n\n              <div className=\"space-y-2\">\n                <Label>Email</Label>\n                <Input\n                  value={form.email}\n                  onChange={(e) => setForm({ ...form, email: e.target.value })}\n                />\n              </div>\n\n              <div className=\"space-y-2\">\n                <Label>Role</Label>\n                <Select\n                  value={form.role}\n                  onValueChange={(v: UserType['role']) =>\n                    setForm({ ...form, role: v })\n                  }\n                >\n                  <SelectTrigger className=\"flex w-full items-center gap-2\">\n                    <SelectValue />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"admin\">\n                      <div className=\"flex items-center gap-2\">\n                        <FaShieldAlt className=\"text-primary size-4\" />\n                        Admin\n                      </div>\n                    </SelectItem>\n\n                    <SelectItem value=\"user\">\n                      <div className=\"flex items-center gap-2\">\n                        <FaUser className=\"text-muted-foreground size-4\" />\n                        User\n                      </div>\n                    </SelectItem>\n\n                    <SelectItem value=\"viewer\">\n                      <div className=\"flex items-center gap-2\">\n                        <FaEye className=\"text-muted-foreground size-4\" />\n                        Viewer\n                      </div>\n                    </SelectItem>\n                  </SelectContent>\n                </Select>\n              </div>\n\n              <div className=\"space-y-2\">\n                <Label>Status</Label>\n                <Select\n                  value={form.status}\n                  onValueChange={(v: UserType['status']) =>\n                    setForm({ ...form, status: v })\n                  }\n                >\n                  <SelectTrigger className=\"flex w-full items-center gap-2\">\n                    <SelectValue />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"active\">\n                      <div className=\"flex items-center gap-2\">\n                        <FaCheckCircle className=\"text-primary size-4\" />\n                        Active\n                      </div>\n                    </SelectItem>\n\n                    <SelectItem value=\"inactive\">\n                      <div className=\"flex items-center gap-2\">\n                        <FaTimesCircle className=\"text-muted-foreground size-4\" />\n                        Inactive\n                      </div>\n                    </SelectItem>\n                  </SelectContent>\n                </Select>\n              </div>\n            </div>\n\n            <SheetFooter className=\"-mb-1 p-0\">\n              <Button onClick={addUser}>Create</Button>\n              <SheetClose asChild>\n                <Button variant=\"outline\">Cancel</Button>\n              </SheetClose>\n            </SheetFooter>\n          </SheetContent>\n        </Sheet>\n      </div>\n\n      <div className=\"overflow-x-scroll rounded-lg border\">\n        <table className=\"w-full text-sm\">\n          <thead className=\"bg-muted/50\">\n            <tr>\n              <th className=\"p-3 text-left font-medium\">Name</th>\n              <th className=\"p-3 text-left font-medium\">Email</th>\n              <th className=\"p-3 text-left font-medium\">Role</th>\n              <th className=\"p-3 text-left font-medium\">Status</th>\n            </tr>\n          </thead>\n\n          <tbody>\n            {filteredUsers.length > 0 ? (\n              filteredUsers.map((user) => (\n                <tr key={user.id} className=\"border-t\">\n                  <td className=\"p-3 font-medium\">{user.name}</td>\n                  <td className=\"text-muted-foreground p-3\">{user.email}</td>\n                  <td className=\"p-3 capitalize\">{user.role}</td>\n                  <td className=\"p-3 capitalize\">{user.status}</td>\n                </tr>\n              ))\n            ) : (\n              <tr>\n                <td\n                  colSpan={4}\n                  className=\"text-muted-foreground p-6 text-center\"\n                >\n                  No users found\n                </td>\n              </tr>\n            )}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  );\n};\n\nexport default Sheet7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-1",
      "type": "registry:component",
      "title": "Sonner 1",
      "description": "Sonner 1. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-1.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner1 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-primary/5 text-primary hover:text-primary border-primary/20 hover:bg-primary/10 hover:border-primary/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.success('Project deployed successfully!', {\n          description: 'Your changes are now live on the production server.',\n          style: {\n            borderRadius: '16px',\n            padding: '16px',\n          },\n          className: 'border-l-4 border-l-green-500 shadow-2xl',\n        })\n      }\n    >\n      Launch Success Toast\n    </Button>\n  )\n}\n\nexport default Sonner1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-2",
      "type": "registry:component",
      "title": "Sonner 2",
      "description": "Sonner 2. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-2.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner2 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-sky-500/5 text-sky-600 hover:text-sky-700 dark:hover:text-sky-500 border-sky-500/20 hover:bg-sky-500/10 hover:border-sky-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast('Upcoming Team Sync', {\n          description: 'Friday, August 15, 2025 at 10:30 AM in Room 4B.',\n          style: {\n            borderRadius: '16px',\n          },\n          className: 'border-l-4 border-l-sky-500 shadow-xl shadow-sky-500/5',\n        })\n      }\n    >\n      View Scheduled Agenda\n    </Button>\n  )\n}\n\nexport default Sonner2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-3",
      "type": "registry:component",
      "title": "Sonner 3",
      "description": "Sonner 3. An opinionated toast component for React.",
      "dependencies": [
        "lucide-react",
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-3.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { TruckIcon } from 'lucide-react'\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner3 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-orange-500/5 text-orange-600 hover:text-orange-700 dark:hover:text-orange-500 border-orange-500/20 hover:bg-orange-500/10 hover:border-orange-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast(\n          <div className='flex items-center gap-3'>\n            <div className='p-2 bg-orange-500/10 rounded-xl'>\n              <TruckIcon className='size-5 text-orange-600 shrink-0' />\n            </div>\n            <div className='flex flex-col gap-1'>\n               <span className='font-semibold'>Order Out for Delivery</span>\n               <span className='text-xs opacity-80'>Your courier is just a few blocks away!</span>\n            </div>\n          </div>,\n          {\n            style: { borderRadius: '20px' },\n            className: 'shadow-2xl shadow-orange-500/10',\n          }\n        )\n      }\n    >\n      Track Delivery Status\n    </Button>\n  )\n}\n\nexport default Sonner3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-4",
      "type": "registry:component",
      "title": "Sonner 4",
      "description": "Sonner 4. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "avatar",
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-4.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base-ui/avatar'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner4 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-purple-500/5 text-purple-600 hover:text-purple-700 dark:hover:text-purple-500 border-purple-500/20 hover:bg-purple-500/10 hover:border-purple-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast(\n          <div className='flex items-center gap-3'>\n            <Avatar className='size-10'>\n              <AvatarImage src='https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=700&auto=format&fit=crop&q=60&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8YXZhdGFyfGVufDB8fDB8fHww' alt='Hallie Richards' />\n              <AvatarFallback className='text-xs bg-purple-50 text-purple-600'>HR</AvatarFallback>\n            </Avatar>\n            <div className='flex flex-col gap-0.5'>\n              <span className='font-medium text-sm'>Profile Updated</span>\n              <p className='text-xs opacity-70'>Settings synced across all devices.</p>\n            </div>\n          </div>,\n          {\n            style: { borderRadius: '18px' },\n            className: 'border border-purple-100 shadow-xl shadow-purple-500/5',\n          }\n        )\n      }\n    >\n      Update System Profile\n    </Button>\n  )\n}\n\nexport default Sonner4\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-5",
      "type": "registry:component",
      "title": "Sonner 5",
      "description": "Sonner 5. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-5.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner5 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-zinc-500/5 text-zinc-600 border-zinc-500/20 hover:bg-zinc-500/10 hover:border-zinc-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast('Draft Saved Automatically', {\n          description: 'You can dismiss this message or wait for it to auto-close.',\n          closeButton: true,\n          style: {\n            borderRadius: '14px',\n          },\n          className: 'shadow-lg border border-zinc-100',\n        })\n      }\n    >\n      Show Dismissible Toast\n    </Button>\n  )\n}\n\nexport default Sonner5\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-6",
      "type": "registry:component",
      "title": "Sonner 6",
      "description": "Sonner 6. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-6.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner6 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-teal-500/5 text-teal-600 hover:text-teal-700 dark:hover:text-teal-500 border-teal-500/20 hover:bg-teal-500/10 hover:border-teal-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast('Message Archived', {\n          description: 'Your conversation has been moved to the archive folder.',\n          action: {\n            label: 'Undo',\n            onClick: () => console.log('Undo'),\n          },\n          style: { borderRadius: '16px' },\n          className: 'border border-teal-100 shadow-xl shadow-teal-500/5',\n        })\n      }\n    >\n      Archive Conversation\n    </Button>\n  )\n}\n\nexport default Sonner6\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-7",
      "type": "registry:component",
      "title": "Sonner 7",
      "description": "Sonner 7. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-7.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner7 = () => {\n  const promise = () =>\n    new Promise((resolve, reject) =>\n      setTimeout(() => {\n        if (Math.random() < 0.5) {\n          resolve('Sync Complete')\n        } else {\n          reject('Connection Failed')\n        }\n      }, 2000)\n    )\n\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-indigo-500/5 text-indigo-600 hover:text-indigo-700 dark:hover:text-indigo-500 border-indigo-500/20 hover:bg-indigo-500/10 hover:border-indigo-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.promise(promise, {\n          loading: 'Synchronizing project data...',\n          success: (data) => {\n            return `${data}: Your workspace is up to date.`\n          },\n          error: (err) => {\n            return `${err}: Please check your internet connection.`\n          },\n          style: { borderRadius: '16px' },\n          className: 'shadow-2xl shadow-indigo-500/5',\n        })\n      }\n    >\n      Sync Remote Repository\n    </Button>\n  )\n}\n\nexport default Sonner7\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-8",
      "type": "registry:component",
      "title": "Sonner 8",
      "description": "Sonner 8. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-8.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner8 = () => {\n  const triggerToast = (position: any) => {\n    toast('Position Updated', {\n      description: `Notification now showing at ${position}.`,\n      position,\n      style: { borderRadius: '12px' },\n      className: 'shadow-lg border border-zinc-100',\n    });\n  };\n\n  return (\n    <div className='grid grid-cols-2 sm:grid-cols-3 gap-3'>\n      {[\n        'top-left', 'top-center', 'top-right',\n        'bottom-left', 'bottom-center', 'bottom-right'\n      ].map((pos) => (\n        <Button\n          key={pos}\n          variant='outline'\n          className='rounded-xl bg-zinc-500/5 text-zinc-600 hover:text-zinc-700 dark:hover:text-zinc-500 border-zinc-200 hover:bg-zinc-100 hover:text-zinc-900 transition-all duration-200 capitalize text-xs h-9'\n          onClick={() => triggerToast(pos)}\n        >\n          {pos.replace('-', ' ')}\n        </Button>\n      ))}\n    </div>\n  )\n}\n\nexport default Sonner8\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-9",
      "type": "registry:component",
      "title": "Sonner 9",
      "description": "Sonner 9. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-9.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner9 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-sky-500/5 text-sky-600 hover:text-sky-700 dark:hover:text-sky-500 border-sky-500/20 hover:bg-sky-500/10 hover:border-sky-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.info('New System Update Available', {\n          description: 'Version 2.4.0 includes performance improvements.',\n          style: {\n            '--normal-bg':\n              'color-mix(in oklab, light-dark(var(--color-sky-600), var(--color-sky-400)) 10%, var(--background))',\n            '--normal-text': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n            '--normal-border': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-xl shadow-sky-500/5',\n        })\n      }\n    >\n      Show Soft Info Toast\n    </Button>\n  )\n}\n\nexport default Sonner9\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-10",
      "type": "registry:component",
      "title": "Sonner 10",
      "description": "Sonner 10. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-10.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner10 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-emerald-500/5 text-emerald-600 hover:text-emerald-700 dark:hover:text-emerald-500 border-emerald-500/20 hover:bg-emerald-500/10 hover:border-emerald-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.success('File Uploaded Successfully', {\n          description: 'Your document is now available in the dashboard.',\n          style: {\n            '--normal-bg':\n              'color-mix(in oklab, light-dark(var(--color-green-600), var(--color-green-400)) 10%, var(--background))',\n            '--normal-text': 'light-dark(var(--color-green-600), var(--color-green-400))',\n            '--normal-border': 'light-dark(var(--color-green-600), var(--color-green-400))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-xl shadow-emerald-500/5',\n        })\n      }\n    >\n      Show Soft Success Toast\n    </Button>\n  )\n}\n\nexport default Sonner10\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-11",
      "type": "registry:component",
      "title": "Sonner 11",
      "description": "Sonner 11. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-11.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner11 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-amber-500/5 text-amber-600 hover:text-amber-700 dark:hover:text-amber-500 border-amber-500/20 hover:bg-amber-500/10 hover:border-amber-500/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.warning('Storage Space is Running Low', {\n          description: 'You have used 90% of your available storage.',\n          style: {\n            '--normal-bg':\n              'color-mix(in oklab, light-dark(var(--color-amber-600), var(--color-amber-400)) 10%, var(--background))',\n            '--normal-text': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n            '--normal-border': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-xl shadow-amber-500/5',\n        })\n      }\n    >\n      Show Soft Warning Toast\n    </Button>\n  )\n}\n\nexport default Sonner11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-12",
      "type": "registry:component",
      "title": "Sonner 12",
      "description": "Sonner 12. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-12.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner12 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-destructive/5 text-destructive hover:text-destructive/80 border-destructive/20 hover:bg-destructive/10 hover:border-destructive/30 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.error('Permanent Deletion Warning', {\n          description: 'This action cannot be undone. Please confirm.',\n          style: {\n            '--normal-bg': 'color-mix(in oklab, var(--destructive) 10%, var(--background))',\n            '--normal-text': 'var(--destructive)',\n            '--normal-border': 'var(--destructive)',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-xl shadow-destructive/5',\n        })\n      }\n    >\n      Show Soft Destructive Toast\n    </Button>\n  )\n}\n\nexport default Sonner12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-13",
      "type": "registry:component",
      "title": "Sonner 13",
      "description": "Sonner 13. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-13.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner13 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl border-sky-500/30 text-sky-600 hover:text-sky-700 dark:hover:text-sky-500 hover:bg-sky-50 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.info('System Maintenance Scheduled', {\n          description: 'Our servers will be down for maintenance tonight at 2 AM.',\n          style: {\n            '--normal-bg': 'var(--background)',\n            '--normal-text': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n            '--normal-border': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-lg',\n        })\n      }\n    >\n      Show Outline Info Toast\n    </Button>\n  )\n}\n\nexport default Sonner13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-14",
      "type": "registry:component",
      "title": "Sonner 14",
      "description": "Sonner 14. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-14.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner14 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl border-emerald-500/30 text-emerald-600 hover:text-emerald-700 dark:hover:text-emerald-500 hover:bg-emerald-50 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.success('Payment Received', {\n          description: 'Your invoice #2931 has been marked as paid.',\n          style: {\n            '--normal-bg': 'var(--background)',\n            '--normal-text': 'light-dark(var(--color-green-600), var(--color-green-400))',\n            '--normal-border': 'light-dark(var(--color-green-600), var(--color-green-400))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-lg',\n        })\n      }\n    >\n      Show Outline Success Toast\n    </Button>\n  )\n}\n\nexport default Sonner14\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-15",
      "type": "registry:component",
      "title": "Sonner 15",
      "description": "Sonner 15. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-15.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner15 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl border-amber-500/30 text-amber-600 hover:text-amber-700 dark:hover:text-amber-500 hover:bg-amber-50 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.warning('Unrecognized Login Attempt', {\n          description: 'A new login was detected from a new IP address.',\n          style: {\n            '--normal-bg': 'var(--background)',\n            '--normal-text': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n            '--normal-border': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-lg',\n        })\n      }\n    >\n      Show Outline Warning Toast\n    </Button>\n  )\n}\n\nexport default Sonner15\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-16",
      "type": "registry:component",
      "title": "Sonner 16",
      "description": "Sonner 16. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-16.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner16 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl border-destructive/30 text-destructive hover:text-destructive/80 dark:hover:text-destructive/80 hover:bg-destructive/5 transition-all duration-300 px-6'\n      onClick={() =>\n        toast.error('Account Access Revoked', {\n          description: 'Your administrative privileges have been temporarily suspended.',\n          style: {\n            '--normal-bg': 'var(--background)',\n            '--normal-text': 'var(--destructive)',\n            '--normal-border': 'var(--destructive)',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-2xl shadow-destructive/5',\n        })\n      }\n    >\n      Show Outline Destructive Toast\n    </Button>\n  )\n}\n\nexport default Sonner16\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-17",
      "type": "registry:component",
      "title": "Sonner 17",
      "description": "Sonner 17. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-17.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner17 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-sky-500 dark:bg-sky-600 dark:hover:bg-sky-700 text-white hover:text-white border-sky-500 hover:bg-sky-600 shadow-lg shadow-sky-600/20 dark:shadow-none transition-all duration-300 px-6'\n      onClick={() =>\n        toast.info('Cloud Sync Enabled', {\n          description: 'Your library is now syncing with the cloud.',\n          style: {\n            '--normal-bg': 'light-dark(var(--color-sky-500), var(--color-sky-600))',\n            '--normal-text': 'var(--color-white)',\n            '--normal-border': 'light-dark(var(--color-sky-500), var(--color-sky-600))',\n            '--description-color': 'light-dark(var(--color-sky-100), var(--color-sky-200))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-2xl shadow-sky-600/10',\n        })\n      }\n    >\n      Activate Solid Info\n    </Button>\n  )\n}\n\nexport default Sonner17\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-18",
      "type": "registry:component",
      "title": "Sonner 18",
      "description": "Sonner 18. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-18.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner18 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-emerald-500 dark:bg-emerald-600 dark:hover:bg-emerald-700 text-white hover:text-white border-emerald-500 hover:bg-emerald-600 shadow-lg shadow-emerald-600/20 dark:shadow-none transition-all duration-300 px-6'\n      onClick={() =>\n        toast.success('Backup Complete', {\n          description: 'All your files are safely stored in the secure vault.',\n          style: {\n            '--normal-bg': 'light-dark(var(--color-green-600), var(--color-green-700))',\n            '--normal-text': 'var(--color-white)',\n            '--normal-border': 'light-dark(var(--color-green-600), var(--color-green-700))',\n            '--description-color': 'light-dark(var(--color-green-100), var(--color-green-200))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-2xl shadow-emerald-600/10',\n        })\n      }\n    >\n      Activate Solid Success\n    </Button>\n  )\n}\n\nexport default Sonner18\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-19",
      "type": "registry:component",
      "title": "Sonner 19",
      "description": "Sonner 19. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-19.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner19 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-amber-500 dark:bg-amber-600 dark:hover:bg-amber-700 text-white hover:text-white border-amber-500 hover:bg-amber-600 shadow-lg shadow-amber-600/20 dark:shadow-none transition-all duration-300 px-6'\n      onClick={() =>\n        toast.warning('Unusual Activity Detected', {\n          description: 'We noticed a login from a new device in London, UK.',\n          style: {\n            '--normal-bg': 'light-dark(var(--color-amber-600), var(--color-amber-500))',\n            '--normal-text': 'var(--color-white)',\n            '--normal-border': 'light-dark(var(--color-amber-600), var(--color-amber-500))',\n            '--description-color': 'light-dark(var(--color-amber-100), var(--color-amber-200))',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-2xl shadow-amber-600/10',\n        })\n      }\n    >\n      Activate Solid Warning\n    </Button>\n  )\n}\n\nexport default Sonner19\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sonner-20",
      "type": "registry:component",
      "title": "Sonner 20",
      "description": "Sonner 20. An opinionated toast component for React.",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "components/watermelon/sonner-20.tsx",
          "type": "registry:component",
          "content": "'use client'\n\nimport { toast } from 'sonner'\nimport { Button } from '@/components/base-ui/button'\n\nconst Sonner20 = () => {\n  return (\n    <Button\n      variant='outline'\n      className='rounded-2xl bg-red-500 dark:bg-red-600 dark:hover:bg-red-700 text-white hover:text-white border-red-500 hover:bg-red-600 shadow-lg shadow-red-600/20 dark:shadow-none transition-all duration-300 px-6'\n      onClick={() =>\n        toast.error('System Failure Detected', {\n          description: 'A critical error occurred in the processing kernel.',\n          style: {\n            '--normal-bg': 'var(--destructive)',\n            '--normal-text': 'var(--color-white)',\n            '--normal-border': 'var(--destructive)',\n            '--description-color': 'rgba(255, 255, 255, 0.7)',\n            borderRadius: '16px',\n          } as React.CSSProperties,\n          className: 'shadow-2xl shadow-red-600/10',\n        })\n      }\n    >\n      Activate Solid Destructive\n    </Button>\n  )\n}\n\nexport default Sonner20\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-1",
      "type": "registry:component",
      "title": "Switch 1",
      "description": "Switch 1. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-1.tsx",
          "type": "registry:component",
          "content": "import { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch1 = () => {\n  return (\n    <div className=\"flex items-center space-x-2\">\n      <Switch id=\"notifications\" />\n      <Label htmlFor=\"notifications\">Enable Notifications</Label>\n    </div>\n  );\n};\n\nexport default Switch1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-2",
      "type": "registry:component",
      "title": "Switch 2",
      "description": "Switch 2. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-2.tsx",
          "type": "registry:component",
          "content": "import { Switch } from '@/components/base-ui/switch';\n\nconst Switch2 = () => {\n  return (\n    <Switch\n      aria-label=\"Square switch\"\n      className=\"rounded-xs [&_span]:rounded-xs\"\n    />\n  );\n};\n\nexport default Switch2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-3",
      "type": "registry:component",
      "title": "Switch 3",
      "description": "Switch 3. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-3.tsx",
          "type": "registry:component",
          "content": "import { Switch } from '@/components/base-ui/switch';\n\nconst Switch3 = () => {\n  return (\n    <div className=\"flex items-center gap-3\">\n      <Switch\n        className=\"focus-visible:border-destructive focus-visible:ring-destructive/20 data-[state=checked]:bg-destructive dark:focus-visible:ring-destructive/40\"\n        aria-label=\"Destructive Switch\"\n        defaultChecked\n      />\n      <Switch\n        className=\"focus-visible:border-ring-teal-600 dark:focus-visible:border-ring-teal-400 focus-visible:ring-teal-600/20 data-[state=checked]:bg-teal-600 dark:focus-visible:ring-teal-400/40 dark:data-[state=checked]:bg-teal-400\"\n        aria-label=\"Success Switch\"\n        defaultChecked\n      />\n      <Switch\n        className=\"focus-visible:border-ring-blue-600 dark:focus-visible:border-ring-blue-400 focus-visible:ring-blue-600/20 data-[state=checked]:bg-blue-600 dark:focus-visible:ring-blue-400/40 dark:data-[state=checked]:bg-blue-400\"\n        aria-label=\"Info Switch\"\n        defaultChecked\n      />\n      <Switch\n        className=\"focus-visible:border-ring-amber-600 dark:focus-visible:border-ring-amber-400 focus-visible:ring-amber-600/20 data-[state=checked]:bg-amber-600 dark:focus-visible:ring-amber-400/40 dark:data-[state=checked]:bg-amber-400\"\n        aria-label=\"Warning Switch\"\n        defaultChecked\n      />\n    </div>\n  );\n};\n\nexport default Switch3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-4",
      "type": "registry:component",
      "title": "Switch 4",
      "description": "Switch 4. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-4.tsx",
          "type": "registry:component",
          "content": "import { Switch } from '@/components/base-ui/switch';\n\nconst Switch4 = () => {\n  return (\n    <Switch\n      aria-label=\"Destructive Switch\"\n      className=\"focus-visible:border-destructive to-destructive/60 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 border-none bg-linear-to-r from-yellow-600 data-[size=default]:h-6 data-[size=default]:w-10 data-[state=checked]:from-blue-600 data-[state=checked]:to-indigo-700 [&_span]:!translate-x-0.25 [&_span]:group-data-[size=default]/switch:size-5 data-[state=checked]:[&_span]:!translate-x-4.75 data-[state=checked]:[&_span]:rtl:!-translate-x-4.75\"\n    />\n  );\n};\n\nexport default Switch4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-5",
      "type": "registry:component",
      "title": "Switch 5",
      "description": "Switch 5. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-5.tsx",
          "type": "registry:component",
          "content": "import { Switch } from '@/components/base-ui/switch';\n\nconst Switch5 = () => {\n  return (\n    <div className=\"flex items-center gap-3\">\n      <Switch\n        className=\"focus-visible:border-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 data-[state=checked]:[&_span]:bg-destructive dark:data-[state=checked]:[&_span]:bg-destructive data-[state=checked]:border-destructive data-[state=checked]:[&_span]:border-background data-[state=checked]:bg-destructive/10 [&_span]:border\"\n        aria-label=\"Destructive Switch\"\n        defaultChecked\n      />\n      <Switch\n        className=\"data-[state=checked]:[&_span]:border-background focus-visible:border-teal-600 focus-visible:ring-teal-600/20 data-[state=checked]:border-teal-600 data-[state=checked]:bg-teal-600/10 dark:focus-visible:border-teal-400 dark:focus-visible:ring-teal-400/40 dark:data-[state=checked]:border-teal-400 dark:data-[state=checked]:bg-teal-400/20 [&_span]:border data-[state=checked]:[&_span]:bg-teal-600 dark:data-[state=checked]:[&_span]:bg-teal-400\"\n        aria-label=\"Success outline Switch\"\n        defaultChecked\n      />\n      <Switch\n        className=\"data-[state=checked]:[&_span]:border-background focus-visible:border-blue-600 focus-visible:ring-blue-600/20 data-[state=checked]:border-blue-600 data-[state=checked]:bg-blue-600/10 dark:focus-visible:border-blue-400 dark:focus-visible:ring-blue-400/40 dark:data-[state=checked]:border-blue-400 dark:data-[state=checked]:bg-blue-400/20 [&_span]:border data-[state=checked]:[&_span]:bg-blue-600 dark:data-[state=checked]:[&_span]:bg-blue-400\"\n        aria-label=\"Info outline Switch\"\n        defaultChecked\n      />\n      <Switch\n        className=\"data-[state=checked]:[&_span]:border-background focus-visible:border-yellow-600 focus-visible:ring-yellow-600/20 data-[state=checked]:border-yellow-600 data-[state=checked]:bg-yellow-400/20 dark:focus-visible:border-yellow-400 dark:focus-visible:ring-yellow-400/40 dark:data-[state=checked]:border-yellow-400 dark:data-[state=checked]:bg-yellow-600/20 [&_span]:border data-[state=checked]:[&_span]:bg-yellow-600 dark:data-[state=checked]:[&_span]:bg-yellow-400\"\n        aria-label=\"Warning outline Switch\"\n        defaultChecked\n      />\n    </div>\n  );\n};\n\nexport default Switch5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-6",
      "type": "registry:component",
      "title": "Switch 6",
      "description": "Switch 6. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-6.tsx",
          "type": "registry:component",
          "content": "import { Switch } from '@/components/base-ui/switch';\n\nconst Switch6 = () => {\n  return (\n    <Switch\n      aria-label=\"mini switch\"\n      className=\"[&_span]:border-input border-none data-[size=default]:h-3 [&_span]:border [&_span]:group-data-[size=default]/switch:size-4.5\"\n    />\n  );\n};\n\nexport default Switch6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-7",
      "type": "registry:component",
      "title": "Switch 7",
      "description": "Switch 7. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-7.tsx",
          "type": "registry:component",
          "content": "import { Switch } from '@/components/base-ui/switch';\n\nconst Switch7 = () => {\n  return (\n    <div className=\"flex items-center gap-3\">\n      <Switch aria-label=\"Small Switch\" />\n      <Switch\n        aria-label=\"Medium switch\"\n        className=\"data-[size=default]:h-6 data-[size=default]:w-10 [&_span]:group-data-[size=default]/switch:size-5 data-[state=checked]:[&_span]:translate-x-4.5 data-[state=checked]:[&_span]:rtl:-translate-x-4.5\"\n      />\n      <Switch\n        aria-label=\"Large Switch\"\n        className=\"data-[size=default]:h-7 data-[size=default]:w-12 [&_span]:group-data-[size=default]/switch:size-6 data-[state=checked]:[&_span]:translate-x-5.5 data-[state=checked]:[&_span]:rtl:-translate-x-5.5\"\n      />\n    </div>\n  );\n};\n\nexport default Switch7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-8",
      "type": "registry:component",
      "title": "Switch 8",
      "description": "Switch 8. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-8.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FiCheck, FiX } from 'react-icons/fi';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch8 = () => {\n  const [checked, setChecked] = useState<boolean>(true);\n\n  return (\n    <div>\n      <div className=\"relative inline-grid h-7 grid-cols-[1fr_1fr] items-center text-sm font-medium\">\n        <Switch\n          checked={checked}\n          onCheckedChange={setChecked}\n          className=\"peer data-[state=checked]:bg-input/50 data-[state=unchecked]:bg-input/50 [&_span]:!bg-background absolute inset-0 data-[size=default]:h-[inherit] data-[size=default]:w-14 [&_span]:transition-transform [&_span]:duration-300 [&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] [&_span]:group-data-[size=default]/switch:size-6.5 [&_span]:data-[state=checked]:translate-x-7 [&_span]:data-[state=checked]:rtl:-translate-x-7\"\n          aria-label=\"Switch with icon indicators\"\n        />\n        <span className=\"peer-data-[state=checked]:text-muted-foreground/70 peer-data-[state=unchecked]:text-primary pointer-events-none relative ml-1.75 flex min-w-7 items-center text-center\">\n          <FiCheck className=\"size-4\" aria-hidden=\"true\" />\n        </span>\n        <span className=\"peer-data-[state=unchecked]:text-muted-foreground/70 peer-data-[state=checked]:text-primary pointer-events-none relative -ms-0.25 flex min-w-7 items-center text-center\">\n          <FiX className=\"size-4\" aria-hidden=\"true\" />\n        </span>\n      </div>\n    </div>\n  );\n};\n\nexport default Switch8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-9",
      "type": "registry:component",
      "title": "Switch 9",
      "description": "Switch 9. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { FiCheck, FiX } from 'react-icons/fi';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch9 = () => {\n  const [checked, setChecked] = useState<boolean>(true);\n\n  return (\n    <div>\n      <div className=\"relative inline-grid h-7 grid-cols-[1fr_1fr] items-center text-sm font-medium\">\n        <Switch\n          checked={checked}\n          onCheckedChange={setChecked}\n          className=\"peer data-[state=unchecked]:bg-input/50 absolute inset-0 data-[size=default]:h-[inherit] data-[size=default]:w-14 [&_span]:z-10 [&_span]:transition-transform [&_span]:duration-300 [&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] [&_span]:group-data-[size=default]/switch:size-6.5 [&_span]:data-[state=checked]:translate-x-7 [&_span]:data-[state=checked]:rtl:-translate-x-7\"\n          aria-label=\"Switch with permanent icon indicators\"\n        />\n        <span className=\"pointer-events-none relative ml-0.5 flex min-w-8 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:invisible peer-data-[state=unchecked]:translate-x-6 peer-data-[state=unchecked]:rtl:-translate-x-6\">\n          <FiCheck className=\"size-4\" aria-hidden=\"true\" />\n        </span>\n        <span className=\"peer-data-[state=checked]:text-background pointer-events-none relative flex min-w-8 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:-translate-x-full peer-data-[state=unchecked]:invisible peer-data-[state=checked]:rtl:translate-x-full\">\n          <FiX className=\"size-4\" aria-hidden=\"true\" />\n        </span>\n      </div>\n    </div>\n  );\n};\n\nexport default Switch9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-10",
      "type": "registry:component",
      "title": "Switch 10",
      "description": "Switch 10. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-10.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\nimport { HiMiniSun, HiMiniMoon } from 'react-icons/hi2';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch10 = () => {\n  const [checked, setChecked] = useState<boolean>(true);\n\n  return (\n    <div>\n      <div className=\"relative inline-grid h-8 grid-cols-[1fr_1fr] items-center text-sm font-medium\">\n        <Switch\n          checked={checked}\n          onCheckedChange={setChecked}\n          className=\"peer data-[state=unchecked]:bg-input/50  absolute inset-0 rounded-md data-[size=default]:h-[inherit] data-[size=default]:w-auto [&_span]:z-10 [&_span]:rounded-sm [&_span]:transition-transform [&_span]:duration-300 [&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] [&_span]:group-data-[size=default]/switch:h-full [&_span]:group-data-[size=default]/switch:w-1/2 [&_span]:data-[state=checked]:translate-x-9.25 [&_span]:data-[state=checked]:rtl:-translate-x-8.75\"\n          aria-label=\"Square switch with icon indicators\"\n        />\n\n        <span className=\"pointer-events-none relative ml-0.5 flex items-center justify-center px-2 transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:invisible peer-data-[state=unchecked]:translate-x-full peer-data-[state=unchecked]:rtl:-translate-x-full\">\n          <HiMiniMoon className=\"size-5\" />\n        </span>\n\n        <span className=\"peer-data-[state=checked]:text-background pointer-events-none relative mr-0.5 flex items-center justify-center px-2 transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:-translate-x-full peer-data-[state=unchecked]:invisible peer-data-[state=checked]:rtl:translate-x-full\">\n          <HiMiniSun className=\"size-5\" />  \n        </span>\n      </div>\n    </div>\n  );\n};\n\nexport default Switch10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-11",
      "type": "registry:component",
      "title": "Switch 11",
      "description": "Switch 11. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-11.tsx",
          "type": "registry:component",
          "content": "import { useState } from 'react';\n\nimport { FiRefreshCw } from 'react-icons/fi';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch11 = () => {\n  const [checked, setChecked] = useState(true);\n\n  return (\n    <div\n      data-state={checked ? 'checked' : 'unchecked'}\n      className=\"group border-input has-data-[state=checked]:border-primary/50 relative flex w-full items-start gap-2 rounded-md border p-4 shadow-xs outline-none\"\n    >\n      <Switch\n        id=\"auto-sync\"\n        checked={checked}\n        onCheckedChange={setChecked}\n        className=\"order-1 after:absolute after:inset-0 data-[size=default]:h-4 data-[size=default]:w-6 [&_span]:group-data-[size=default]/switch:size-3 data-[state=checked]:[&_span]:translate-x-2.5 data-[state=checked]:[&_span]:rtl:-translate-x-2.5\"\n        aria-describedby=\"auto-sync-description\"\n      />\n\n      <div className=\"flex grow items-center gap-3\">\n        <FiRefreshCw className=\"text-muted-foreground rotate-0 self-start transition-transform duration-700 ease-in-out group-data-[state=checked]:rotate-[360deg]\" />\n\n        <div className=\"grid grow gap-2\">\n          <Label htmlFor=\"auto-sync\">Auto Sync</Label>\n          <p\n            id=\"auto-sync-description\"\n            className=\"text-muted-foreground text-xs\"\n          >\n            Automatically sync your data across devices.\n          </p>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Switch11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-12",
      "type": "registry:component",
      "title": "Switch 12",
      "description": "Switch 12. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-12.tsx",
          "type": "registry:component",
          "content": "  \nimport { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nimport { FaShieldAlt, FaBell, FaMoon } from 'react-icons/fa';\n\nconst settings = [\n  { label: 'Privacy Mode', icon: FaShieldAlt },\n  { label: 'Notifications', icon: FaBell },\n  { label: 'Dark Theme', icon: FaMoon },\n];\n\nconst Switch12 = () => {\n  return (\n    <fieldset className=\"w-full max-w-96 space-y-4\">\n      <legend className=\"text-foreground text-sm leading-none font-medium\">\n        Manage your preferences:\n      </legend>\n      <ul className=\"flex w-full flex-col divide-y rounded-md border\">\n        {settings.map(({ label, icon: Icon }) => (\n          <li key={label}>\n            <Label\n              htmlFor={label}\n              className=\"flex items-center justify-between gap-2 px-5 py-3\"\n            >\n              <span className=\"flex items-center gap-2\">\n                <Icon className=\"size-4\" />\n                {label}\n              </span>\n              <Switch id={label} />\n            </Label>\n          </li>\n        ))}\n      </ul>\n    </fieldset>\n  );\n};\n\nexport default Switch12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-13",
      "type": "registry:component",
      "title": "Switch 13",
      "description": "Switch 13. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-13.tsx",
          "type": "registry:component",
          "content": "import { FiMail } from 'react-icons/fi';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch13 = () => {\n  return (\n    <div className=\"border-input has-data-[state=checked]:border-primary/50 has-data-[state=checked]:ring-4 has-data-[state=checked]:ring-primary/20  relative flex w-full items-start gap-2 rounded-md border p-4 outline-none\">\n      <Switch\n        id=\"email-updates\"\n        className=\"order-1 after:absolute after:inset-0 data-[size=default]:h-4 data-[size=default]:w-6 [&_span]:group-data-[size=default]/switch:size-3 data-[state=checked]:[&_span]:translate-x-2.5 data-[state=checked]:[&_span]:rtl:-translate-x-2.5\"\n        aria-describedby=\"email-updates-description\"\n      />\n      <div className=\"flex grow items-center gap-3\">\n        <FiMail className=\"text-muted-foreground size-4 shrink-0 self-start\" />\n        <div className=\"grid grow gap-2\">\n          <Label htmlFor=\"email-updates\">Email Updates</Label>\n          <p\n            id=\"email-updates-description\"\n            className=\"text-muted-foreground text-xs\"\n          >\n            Receive important updates and notifications via email.\n          </p>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Switch13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-14",
      "type": "registry:component",
      "title": "Switch 14",
      "description": "Switch 14. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-14.tsx",
          "type": "registry:component",
          "content": "import { FiCloud } from 'react-icons/fi';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch14 = () => {\n  return (\n    <div className=\"border-input relative flex w-full items-start gap-2 rounded-md border bg-neutral-100 p-4 transition-all duration-200 ease-out outline-none has-data-[state=checked]:shadow-[0_5px_1px_0_var(--color-neutral-700),inset_0_2px_1px_0_rgba(0,0,0,0.1)] has-data-[state=checked]:ring-2 has-data-[state=checked]:ring-neutral-700 dark:bg-neutral-900 dark:has-data-[state=checked]:shadow-[0_5px_1px_0_var(--color-neutral-400),inset_0_2px_1px_0_rgba(255,255,255,0.1)] dark:has-data-[state=checked]:ring-neutral-400\">\n      <Switch\n        id=\"cloud-backup\"\n        className=\"order-1 bg-black after:absolute after:inset-0 data-[size=default]:h-4 data-[size=default]:w-6 [&_span]:group-data-[size=default]/switch:size-3 data-[state=checked]:[&_span]:translate-x-2.5 data-[state=checked]:[&_span]:rtl:-translate-x-2.5\"\n        aria-describedby=\"cloud-backup-description\"\n      />\n      <div className=\"flex grow gap-3\">\n        <FiCloud className=\"text-muted-foreground size-4 shrink-0\" />\n        <div className=\"grid grow gap-2\">\n          <Label htmlFor=\"cloud-backup\">Cloud Backup</Label>\n          <p\n            id=\"cloud-backup-description\"\n            className=\"text-muted-foreground text-xs\"\n          >\n            Securely store your files, photos, and documents in the cloud.\n          </p>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Switch14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-15",
      "type": "registry:component",
      "title": "Switch 15",
      "description": "Switch 15. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-15.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch15 = () => {\n  const [checked, setChecked] = useState<boolean>(true);\n\n  return (\n    <div className=\"inline-flex items-center gap-2\">\n      <Switch\n        id=\"notifications-toggle\"\n        checked={checked}\n        onCheckedChange={setChecked}\n        aria-label=\"Toggle notifications\"\n      />\n      <Label htmlFor=\"notifications-toggle\" className=\"text-sm font-medium\">\n        {checked ? 'Notifications On' : 'Notifications Off'}\n      </Label>\n    </div>\n  );\n};\n\nexport default Switch15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-16",
      "type": "registry:component",
      "title": "Switch 16",
      "description": "Switch 16. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-16.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { HiSun, HiMoon } from 'react-icons/hi';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch16 = () => {\n  const [checked, setChecked] = useState(true);\n\n  const toggleSwitch = () => setChecked((prev) => !prev);\n\n  return (\n    <div\n      className=\"group inline-flex items-center gap-2\"\n      data-state={checked ? 'checked' : 'unchecked'}\n    >\n      <span\n        id=\"theme-light\"\n        className=\"group-data-[state=checked]:text-muted-foreground/70 cursor-pointer text-left text-sm font-medium\"\n        aria-controls=\"theme-toggle\"\n        onClick={() => setChecked(false)}\n      >\n        <HiSun className=\"size-5\" />\n      </span>\n\n      <Switch\n        id=\"theme-toggle\"\n        checked={checked}\n        onCheckedChange={toggleSwitch}\n        aria-labelledby=\"theme-dark theme-light\"\n        aria-label=\"Toggle between dark and light mode\"\n      />\n\n      <span\n        id=\"theme-dark\"\n        className=\"group-data-[state=unchecked]:text-muted-foreground/70 cursor-pointer text-right text-sm font-medium\"\n        aria-controls=\"theme-toggle\"\n        onClick={() => setChecked(true)}\n      >\n        <HiMoon className=\"size-5\" />\n      </span>\n    </div>\n  );\n};\n\nexport default Switch16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-17",
      "type": "registry:component",
      "title": "Switch 17",
      "description": "Switch 17. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-17.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport { HiMoon, HiSun } from 'react-icons/hi2';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch17 = () => {\n  const [checked, setChecked] = useState<boolean>(true);\n\n  return (\n    <div className=\"inline-flex items-center gap-2\">\n      <Switch\n        id=\"icon-label\"\n        checked={checked}\n        onCheckedChange={setChecked}\n        aria-label=\"Toggle switch\"\n      />\n      <Label htmlFor=\"icon-label\">\n        <span className=\"sr-only\">Toggle switch</span>\n        {checked ? (\n          <HiMoon className=\"size-4\" aria-hidden=\"true\" />\n        ) : (\n          <HiSun className=\"size-4\" aria-hidden=\"true\" />\n        )}\n      </Label>\n    </div>\n  );\n};\n\nexport default Switch17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-18",
      "type": "registry:component",
      "title": "Switch 18",
      "description": "Switch 18. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-18.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch18 = () => {\n  const id = useId();\n  const [checked, setChecked] = useState(false);\n\n  const toggleSwitch = () => setChecked((prev) => !prev);\n\n  return (\n    <div\n      className=\"group inline-flex items-center gap-2\"\n      data-state={checked ? 'checked' : 'unchecked'}\n    >\n      <span\n        id={`${id}-yes`}\n        className=\"group-data-[state=checked]:text-muted-foreground/70 cursor-pointer text-right text-sm font-medium\"\n        aria-controls={id}\n        onClick={() => setChecked(false)}\n      >\n        Yes\n      </span>\n      <Switch\n        id={id}\n        checked={checked}\n        onCheckedChange={toggleSwitch}\n        aria-labelledby={`${id}-yes ${id}-no`}\n      />\n      <span\n        id={`${id}-no`}\n        className=\"group-data-[state=unchecked]:text-muted-foreground/70 cursor-pointer text-left text-sm font-medium\"\n        aria-controls={id}\n        onClick={() => setChecked(true)}\n      >\n        No\n      </span>\n    </div>\n  );\n};\n\nexport default Switch18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-19",
      "type": "registry:component",
      "title": "Switch 19",
      "description": "Switch 19. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-19.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch19 = () => {\n  const id = useId();\n  const [enabled, setEnabled] = useState(true);\n\n  return (\n    <div className=\"flex min-w-64 items-center justify-between gap-6 rounded-xl bg-muted/55 px-4 py-3 shadow-[0_0_0_1px_rgba(0,0,0,0.06),0_2px_5px_rgba(0,0,0,0.05)] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.08)]\">\n      <label htmlFor={id} className=\"cursor-pointer text-left\">\n        <span className=\"block text-sm font-medium text-foreground\">Auto sync</span>\n        <span className=\"block text-xs text-muted-foreground\">\n          {enabled ? 'Changes sync instantly' : 'Manual updates only'}\n        </span>\n      </label>\n      <Switch\n        id={id}\n        checked={enabled}\n        onCheckedChange={setEnabled}\n        aria-describedby={`${id}-status`}\n      />\n      <span id={`${id}-status`} className=\"sr-only\" aria-live=\"polite\">\n        Auto sync is {enabled ? 'enabled' : 'disabled'}\n      </span>\n    </div>\n  );\n};\n\nexport default Switch19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch-20",
      "type": "registry:component",
      "title": "Switch 20",
      "description": "Switch 20. A toggle control that allows users to switch between two states, typically on or off.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "switch"
      ],
      "files": [
        {
          "path": "components/watermelon/switch-20.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId, useState } from 'react';\nimport { HiBell, HiBellSlash } from 'react-icons/hi2';\n\nimport { Switch } from '@/components/base-ui/switch';\n\nconst Switch20 = () => {\n  const id = useId();\n  const [enabled, setEnabled] = useState(false);\n  const Icon = enabled ? HiBell : HiBellSlash;\n\n  return (\n    <label\n      htmlFor={id}\n      className=\"flex min-h-10 cursor-pointer items-center gap-3 rounded-full bg-muted/60 py-2 pr-3 pl-2 shadow-[0_0_0_1px_rgba(0,0,0,0.06)] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.08)]\"\n    >\n      <span className=\"grid size-8 place-items-center rounded-full bg-background text-foreground shadow-sm\">\n        <Icon className=\"size-4\" aria-hidden=\"true\" />\n      </span>\n      <span className=\"min-w-24 text-sm font-medium text-foreground\">\n        {enabled ? 'Alerts on' : 'Alerts paused'}\n      </span>\n      <Switch\n        id={id}\n        checked={enabled}\n        onCheckedChange={setEnabled}\n        aria-label=\"Toggle alerts\"\n      />\n    </label>\n  );\n};\n\nexport default Switch20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-1",
      "type": "registry:component",
      "title": "Table 1",
      "description": "Table 1. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-1.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nimport {\n  FaCheckCircle,\n  FaClock,\n  FaTimesCircle,\n  FaShoppingCart,\n} from 'react-icons/fa';\n\nconst orders = [\n  {\n    id: 'ORD-1001',\n    customer: 'Aarav Sharma',\n    status: 'Delivered',\n    amount: '₹1,200',\n    icon: <FaCheckCircle className=\"text-green-500\" />,\n  },\n  {\n    id: 'ORD-1002',\n    customer: 'Priya Verma',\n    status: 'Processing',\n    amount: '₹850',\n    icon: <FaClock className=\"text-yellow-500\" />,\n  },\n  {\n    id: 'ORD-1003',\n    customer: 'Rohan Mehta',\n    status: 'Cancelled',\n    amount: '₹640',\n    icon: <FaTimesCircle className=\"text-red-500\" />,\n  },\n  {\n    id: 'ORD-1004',\n    customer: 'Sneha Kapoor',\n    status: 'Delivered',\n    amount: '₹2,300',\n    icon: <FaCheckCircle className=\"text-green-500\" />,\n  },\n  {\n    id: 'ORD-1005',\n    customer: 'Karan Malhotra',\n    status: 'Processing',\n    amount: '₹1,120',\n    icon: <FaClock className=\"text-yellow-500\" />,\n  },\n  {\n    id: 'ORD-1006',\n    customer: 'Neha Gupta',\n    status: 'Delivered',\n    amount: '₹980',\n    icon: <FaCheckCircle className=\"text-green-500\" />,\n  },\n];\n\nconst Table1 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden\">\n        <Table className=\"overflow-x-scroll\">\n          <TableHeader>\n            <TableRow>\n              <TableHead className=\"w-25\">Order</TableHead>\n              <TableHead>Customer</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead className=\"text-right\">Amount</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {orders.map((order) => (\n              <TableRow key={order.id}>\n                <TableCell className=\"flex items-center gap-2 font-medium\">\n                  <FaShoppingCart className=\"text-primary\" />\n                  {order.id}\n                </TableCell>\n\n                <TableCell>{order.customer}</TableCell>\n\n                <TableCell>\n                  <div className=\"flex items-center gap-2\">\n                    {order.icon}\n                    <span>{order.status}</span>\n                  </div>\n                </TableCell>\n\n                <TableCell className=\"text-right font-medium\">\n                  {order.amount}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow>\n              <TableCell colSpan={3}>Total Revenue</TableCell>\n              <TableCell className=\"text-right font-semibold\">₹7,090</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Recent orders table\n      </p>\n    </div>\n  );\n};\n\nexport default Table1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-2",
      "type": "registry:component",
      "title": "Table 2",
      "description": "Table 2. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-2.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nimport { FaCheckCircle, FaClock, FaTimesCircle, FaUser } from 'react-icons/fa';\n\nconst users = [\n  {\n    id: 'USR-001',\n    name: 'Ritik Gupta',\n    status: 'Active',\n    plan: 'Pro',\n    spend: '₹1,999',\n    icon: <FaCheckCircle className=\"text-green-500\" />,\n  },\n  {\n    id: 'USR-002',\n    name: 'Ananya Singh',\n    status: 'Pending',\n    plan: 'Basic',\n    spend: '₹499',\n    icon: <FaClock className=\"text-yellow-500\" />,\n  },\n  {\n    id: 'USR-003',\n    name: 'Kunal Shah',\n    status: 'Blocked',\n    plan: 'Pro',\n    spend: '₹2,499',\n    icon: <FaTimesCircle className=\"text-red-500\" />,\n  },\n  {\n    id: 'USR-004',\n    name: 'Meera Joshi',\n    status: 'Active',\n    plan: 'Enterprise',\n    spend: '₹5,999',\n    icon: <FaCheckCircle className=\"text-green-500\" />,\n  },\n  {\n    id: 'USR-005',\n    name: 'Aditya Verma',\n    status: 'Active',\n    plan: 'Basic',\n    spend: '₹799',\n    icon: <FaCheckCircle className=\"text-green-500\" />,\n  },\n];\n\nconst Table2 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-xl border shadow-xs\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"*:border-border bg-muted/50 [&>:not(:last-child)]:border-r\">\n              <TableHead className=\"w-32\">User</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead>Plan</TableHead>\n              <TableHead className=\"text-right\">Spend</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {users.map((user) => (\n              <TableRow\n                key={user.id}\n                className=\"*:border-border [&>:not(:last-child)]:border-r\"\n              >\n                <TableCell className=\"flex items-center gap-2 font-medium\">\n                  <FaUser className=\"text-primary\" />\n                  {user.name}\n                </TableCell>\n\n                <TableCell>\n                  <div className=\"flex items-center gap-2\">\n                    {user.icon}\n                    <span>{user.status}</span>\n                  </div>\n                </TableCell>\n\n                <TableCell>{user.plan}</TableCell>\n\n                <TableCell className=\"text-right font-medium\">\n                  {user.spend}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow>\n              <TableCell colSpan={3}>Total Revenue</TableCell>\n              <TableCell className=\"text-right font-semibold\">\n                ₹11,795\n              </TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        User subscription table\n      </p>\n    </div>\n  );\n};\n\nexport default Table2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-3",
      "type": "registry:component",
      "title": "Table 3",
      "description": "Table 3. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-3.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst products = [\n  {\n    id: 'PRD-001',\n    name: 'MacBook Pro',\n    category: 'Laptop',\n    status: 'In Stock',\n    price: '₹1,89,000',\n  },\n  {\n    id: 'PRD-002',\n    name: 'iPhone 15',\n    category: 'Mobile',\n    status: 'Limited',\n    price: '₹79,900',\n  },\n  {\n    id: 'PRD-003',\n    name: 'Sony WH-1000XM5',\n    category: 'Audio',\n    status: 'Out of Stock',\n    price: '₹29,990',\n  },\n  {\n    id: 'PRD-004',\n    name: 'Dell XPS 13',\n    category: 'Laptop',\n    status: 'In Stock',\n    price: '₹1,25,000',\n  },\n  {\n    id: 'PRD-005',\n    name: 'Samsung Galaxy S24',\n    category: 'Mobile',\n    status: 'In Stock',\n    price: '₹74,999',\n  },\n];\n\nconst Table3 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"hover:bg-transparent\">\n              <TableHead className=\"w-40\">Product</TableHead>\n              <TableHead>Category</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead className=\"text-right\">Price</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {products.map((product) => (\n              <TableRow\n                key={product.id}\n                className=\"odd:bg-muted/50 odd:hover:bg-muted/50 hover:bg-transparent\"\n              >\n                <TableCell className=\"font-medium\">{product.name}</TableCell>\n                <TableCell>{product.category}</TableCell>\n                <TableCell>{product.status}</TableCell>\n                <TableCell className=\"text-right font-medium\">\n                  {product.price}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter className=\"bg-transparent\">\n            <TableRow className=\"hover:bg-transparent\">\n              <TableCell colSpan={3}>Total Value</TableCell>\n              <TableCell className=\"text-right font-semibold\">\n                ₹4,98,889\n              </TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Product inventory table\n      </p>\n    </div>\n  );\n};\n\nexport default Table3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-4",
      "type": "registry:component",
      "title": "Table 4",
      "description": "Table 4. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-4.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nimport { Badge } from '@/components/base-ui/badge';\nimport { cn } from '@/lib/utils';\n\nconst projects = [\n  {\n    id: 'PRJ-001',\n    name: 'AI Dashboard',\n    team: 'Frontend',\n    status: 'Completed',\n    budget: '₹1,20,000',\n  },\n  {\n    id: 'PRJ-002',\n    name: 'Payment Gateway',\n    team: 'Backend',\n    status: 'In Progress',\n    budget: '₹95,000',\n  },\n  {\n    id: 'PRJ-003',\n    name: 'Mobile App Revamp',\n    team: 'Mobile',\n    status: 'On Hold',\n    budget: '₹70,000',\n  },\n  {\n    id: 'PRJ-004',\n    name: 'Marketing Website',\n    team: 'Design',\n    status: 'Completed',\n    budget: '₹50,000',\n  },\n  {\n    id: 'PRJ-005',\n    name: 'Admin Panel',\n    team: 'Full Stack',\n    status: 'In Progress',\n    budget: '₹1,40,000',\n  },\n];\n\nconst getStatusClass = (status: string) => {\n  switch (status) {\n    case 'Completed':\n      return 'bg-green-600/10 text-green-600 border-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:border-green-400/20';\n    case 'In Progress':\n      return 'bg-blue-600/10 text-blue-600 border-blue-600/20 dark:bg-blue-400/10 dark:text-blue-400 dark:border-blue-400/20';\n    case 'On Hold':\n      return 'bg-yellow-600/10 text-yellow-600 border-yellow-600/20 dark:bg-yellow-400/10 dark:text-yellow-400 dark:border-yellow-400/20';\n    default:\n      return '';\n  }\n};\n\nconst Table4 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"hover:bg-transparent\">\n              <TableHead className=\"w-40\">Project</TableHead>\n              <TableHead>Team</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead className=\"text-right\">Budget</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {projects.map((project) => (\n              <TableRow\n                key={project.id}\n                className=\"odd:bg-muted/50 odd:hover:bg-muted/50 odd:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),0px_1px_2px_0px_rgba(0,0,0,0.1)] hover:bg-transparent odd:dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.1),0px_1px_2px_0px_rgba(0,0,0,0.7)]\"\n              >\n                <TableCell className=\"font-medium\">{project.name}</TableCell>\n\n                <TableCell>{project.team}</TableCell>\n\n                <TableCell>\n                  <Badge\n                    variant=\"outline\"\n                    className={cn(\n                      getStatusClass(project.status),\n                      'rounded-sm shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_2px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.25),inset_0px_-1px_2px_0px_rgba(0,0,0,0.7)]',\n                    )}\n                  >\n                    {project.status}\n                  </Badge>\n                </TableCell>\n\n                <TableCell className=\"text-right font-medium\">\n                  {project.budget}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter className=\"bg-transparent\">\n            <TableRow className=\"hover:bg-transparent\">\n              <TableCell colSpan={3}>Total Budget</TableCell>\n              <TableCell className=\"text-right font-semibold\">\n                ₹4,75,000\n              </TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Project tracking table\n      </p>\n    </div>\n  );\n};\n\nexport default Table4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-5",
      "type": "registry:component",
      "title": "Table 5",
      "description": "Table 5. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-5.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\nimport {\n  HiCube,\n  HiCheckCircle,\n  HiCreditCard,\n  HiCurrencyRupee,\n} from 'react-icons/hi';\n\nconst orders = [\n  {\n    orderId: 'ORD001',\n    status: 'Delivered',\n    amount: '₹120.00',\n    method: 'UPI',\n  },\n  {\n    orderId: 'ORD002',\n    status: 'Processing',\n    amount: '₹80.00',\n    method: 'Credit Card',\n  },\n  {\n    orderId: 'ORD003',\n    status: 'Cancelled',\n    amount: '₹200.00',\n    method: 'Cash on Delivery',\n  },\n  {\n    orderId: 'ORD004',\n    status: 'Delivered',\n    amount: '₹350.00',\n    method: 'Net Banking',\n  },\n  {\n    orderId: 'ORD005',\n    status: 'Processing',\n    amount: '₹150.00',\n    method: 'UPI',\n  },\n];\n\nconst Table5 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-xl border shadow-xs\">\n        <Table>\n          <TableHeader className=\"bg-muted/50\">\n            <TableRow>\n              <TableHead className=\"w-25\">\n                <div className=\"flex items-center gap-1\">\n                  <HiCube className=\"h-4 w-4 shrink-0\" />\n                  Order ID\n                </div>\n              </TableHead>\n\n              <TableHead>\n                <div className=\"flex items-center gap-1\">\n                  <HiCheckCircle className=\"h-4 w-4 shrink-0\" />\n                  Status\n                </div>\n              </TableHead>\n\n              <TableHead>\n                <div className=\"flex items-center gap-1\">\n                  <HiCreditCard className=\"h-4 w-4 shrink-0\" />\n                  Payment Method\n                </div>\n              </TableHead>\n\n              <TableHead className=\"text-right\">\n                <div className=\"flex items-center justify-end gap-1\">\n                  <HiCurrencyRupee className=\"h-4 w-4 shrink-0\" />\n                  Amount\n                </div>\n              </TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {orders.map((order) => (\n              <TableRow key={order.orderId}>\n                <TableCell className=\"font-medium\">{order.orderId}</TableCell>\n                <TableCell>{order.status}</TableCell>\n                <TableCell>{order.method}</TableCell>\n                <TableCell className=\"text-right\">{order.amount}</TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow>\n              <TableCell colSpan={3}>Total</TableCell>\n              <TableCell className=\"text-right\">₹900.00</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Recent orders table\n      </p>\n    </div>\n  );\n};\n\nexport default Table5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-6",
      "type": "registry:component",
      "title": "Table 6",
      "description": "Table 6. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-6.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst users = [\n  {\n    id: 'USR001',\n    name: 'Aarav Sharma',\n    status: 'Active',\n    role: 'Admin',\n    usage: '₹1,200',\n  },\n  {\n    id: 'USR002',\n    name: 'Priya Verma',\n    status: 'Pending',\n    role: 'Editor',\n    usage: '₹800',\n  },\n  {\n    id: 'USR003',\n    name: 'Rohan Gupta',\n    status: 'Inactive',\n    role: 'Viewer',\n    usage: '₹350',\n  },\n  {\n    id: 'USR004',\n    name: 'Sneha Kapoor',\n    status: 'Active',\n    role: 'Admin',\n    usage: '₹2,100',\n  },\n  {\n    id: 'USR005',\n    name: 'Kunal Mehta',\n    status: 'Active',\n    role: 'Editor',\n    usage: '₹950',\n  },\n];\n\nconst Table6 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-xl border shadow-xs\">\n        <Table>\n          <TableHeader className=\"bg-muted/50 shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_4px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.05),inset_0px_-1px_2px_0px_rgba(0,0,0,0.02)]\">\n            <TableRow>\n              <TableHead className=\"w-25\">User ID</TableHead>\n              <TableHead>Name</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead>Role</TableHead>\n              <TableHead className=\"text-right\">Usage</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {users.map((user) => (\n              <TableRow key={user.id}>\n                <TableCell className=\"font-medium\">{user.id}</TableCell>\n                <TableCell>{user.name}</TableCell>\n                <TableCell>{user.status}</TableCell>\n                <TableCell>{user.role}</TableCell>\n                <TableCell className=\"text-right\">{user.usage}</TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter className=\"shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_4px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.1),inset_0px_-1px_2px_0px_rgba(0,0,0,0.02)]\">\n            <TableRow>\n              <TableCell colSpan={4}>Total Usage</TableCell>\n              <TableCell className=\"text-right\">₹5,400</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Rounded corner table\n      </p>\n    </div>\n  );\n};\n\nexport default Table6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-7",
      "type": "registry:component",
      "title": "Table 7",
      "description": "Table 7. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-7.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useState } from 'react';\n\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst transactions = [\n  {\n    id: 'TXN001',\n    type: 'Credit',\n    amount: '₹2,500.00',\n    method: 'UPI',\n  },\n  {\n    id: 'TXN002',\n    type: 'Debit',\n    amount: '₹1,200.00',\n    method: 'Credit Card',\n  },\n  {\n    id: 'TXN003',\n    type: 'Credit',\n    amount: '₹3,800.00',\n    method: 'Net Banking',\n  },\n  {\n    id: 'TXN004',\n    type: 'Debit',\n    amount: '₹900.00',\n    method: 'Wallet',\n  },\n  {\n    id: 'TXN005',\n    type: 'Credit',\n    amount: '₹4,200.00',\n    method: 'UPI',\n  },\n  {\n    id: 'TXN006',\n    type: 'Debit',\n    amount: '₹700.00',\n    method: 'Debit Card',\n  },\n  {\n    id: 'TXN007',\n    type: 'Credit',\n    amount: '₹1,500.00',\n    method: 'Bank Transfer',\n  },\n];\n\nconst Table7 = () => {\n  const [selectedId, setSelectedId] = useState<string | null>(null);\n\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-xl border shadow-xs\">\n        <Table className=\"\">\n          <TableHeader>\n            <TableRow>\n              <TableHead className=\"w-30\">Transaction ID</TableHead>\n              <TableHead>Type</TableHead>\n              <TableHead>Method</TableHead>\n              <TableHead className=\"text-right\">Amount</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {transactions.map((txn) => {\n              const isSelected = selectedId === txn.id;\n\n              return (\n                <TableRow\n                  key={txn.id}\n                  onClick={() => setSelectedId(isSelected ? null : txn.id)}\n                  className={`cursor-pointer transition-colors ${\n                    isSelected\n                      ? 'bg-primary/30 hover:bg-primary/25'\n                      : 'hover:bg-muted/50'\n                  }`}\n                >\n                  <TableCell className=\"font-medium\">{txn.id}</TableCell>\n                  <TableCell>{txn.type}</TableCell>\n                  <TableCell>{txn.method}</TableCell>\n                  <TableCell className=\"text-right\">{txn.amount}</TableCell>\n                </TableRow>\n              );\n            })}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow>\n              <TableCell colSpan={3}>Net Balance</TableCell>\n              <TableCell className=\"text-right\">₹9,200.00</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Click a row to highlight it\n      </p>\n    </div>\n  );\n};\n\nexport default Table7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-8",
      "type": "registry:component",
      "title": "Table 8",
      "description": "Table 8. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-8.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst products = [\n  {\n    id: 'PRD001',\n    name: 'Wireless Mouse',\n    category: 'Electronics',\n    price: '₹799',\n    stock: 120,\n  },\n  {\n    id: 'PRD002',\n    name: 'Bluetooth Headphones',\n    category: 'Electronics',\n    price: '₹1,999',\n    stock: 75,\n  },\n  {\n    id: 'PRD003',\n    name: 'Office Chair',\n    category: 'Furniture',\n    price: '₹5,500',\n    stock: 30,\n  },\n  {\n    id: 'PRD004',\n    name: 'Notebook Pack',\n    category: 'Stationery',\n    price: '₹250',\n    stock: 200,\n  },\n  {\n    id: 'PRD005',\n    name: 'Desk Lamp',\n    category: 'Furniture',\n    price: '₹1,200',\n    stock: 60,\n  },\n];\n\nconst Table8 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-xl border shadow-xs\">\n        <Table className=\"\">\n          <TableHeader>\n            <TableRow className=\"[&_th]:even:bg-muted/70 hover:bg-transparent\">\n              <TableHead className=\"w-25\">Product ID</TableHead>\n              <TableHead>Name</TableHead>\n              <TableHead>Category</TableHead>\n              <TableHead className=\"text-right\">Price</TableHead>\n              <TableHead className=\"text-right\">Stock</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {products.map((product) => (\n              <TableRow\n                key={product.id}\n                className=\"[&_td]:even:bg-muted/70 hover:bg-transparent\"\n              >\n                <TableCell className=\"font-medium\">{product.id}</TableCell>\n                <TableCell>{product.name}</TableCell>\n                <TableCell>{product.category}</TableCell>\n                <TableCell className=\"text-right\">{product.price}</TableCell>\n                <TableCell className=\"text-right\">{product.stock}</TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter className=\"bg-transparent\">\n            <TableRow className=\"hover:bg-transparent\">\n              <TableCell colSpan={4}>Total Products</TableCell>\n              <TableCell className=\"text-right\">485</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Striped columns table\n      </p>\n    </div>\n  );\n};\n\nexport default Table8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-9",
      "type": "registry:component",
      "title": "Table 9",
      "description": "Table 9. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-9.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst transactions = [\n  { id: 'TXN001', status: 'Success', amount: '₹2,500', method: 'UPI' },\n  { id: 'TXN002', status: 'Pending', amount: '₹1,200', method: 'Card' },\n  { id: 'TXN003', status: 'Failed', amount: '₹3,800', method: 'Net Banking' },\n  { id: 'TXN004', status: 'Success', amount: '₹900', method: 'Wallet' },\n  { id: 'TXN005', status: 'Success', amount: '₹4,200', method: 'UPI' },\n  { id: 'TXN006', status: 'Pending', amount: '₹700', method: 'Debit Card' },\n  { id: 'TXN007', status: 'Failed', amount: '₹1,500', method: 'Bank Transfer' },\n  { id: 'TXN008', status: 'Success', amount: '₹2,100', method: 'UPI' },\n  { id: 'TXN009', status: 'Pending', amount: '₹950', method: 'Google Pay' },\n  { id: 'TXN010', status: 'Failed', amount: '₹1,800', method: 'Apple Pay' },\n];\n\nconst Table9 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"rounded-lg border shadow-sm overflow-hidden bg-background isolate\">\n        <div className=\"[&>div]:max-h-80 [&>div]:overflow-auto [&>div]:[clip-path:inset(0_round_0.5rem)]\">\n          <Table className=\"border-separate border-spacing-0\">\n            <TableHeader>\n              <TableRow className=\"from-muted/95 via-muted/90 to-muted/80 sticky top-0 z-20 bg-gradient-to-b backdrop-blur-md\">\n                <TableHead className=\"h-12 px-4 text-left align-middle font-medium text-muted-foreground border-b border-border/50\">\n                  Transaction\n                </TableHead>\n                <TableHead className=\"h-12 px-4 text-left align-middle font-medium text-muted-foreground border-b border-border/50\">\n                  Status\n                </TableHead>\n                <TableHead className=\"h-12 px-4 text-left align-middle font-medium text-muted-foreground border-b border-border/50\">\n                  Method\n                </TableHead>\n                <TableHead className=\"h-12 px-4 text-right align-middle font-medium text-muted-foreground border-b border-border/50\">\n                  Amount\n                </TableHead>\n              </TableRow>\n            </TableHeader>\n\n            <TableBody>\n              {transactions.map((txn) => (\n                <TableRow key={txn.id} className=\"hover:bg-muted/30 transition-colors\">\n                  <TableCell className=\"h-12 px-4 align-middle font-medium\">{txn.id}</TableCell>\n                  <TableCell className=\"h-12 px-4 align-middle\">{txn.status}</TableCell>\n                  <TableCell className=\"h-12 px-4 align-middle\">{txn.method}</TableCell>\n                  <TableCell className=\"h-12 px-4 text-right align-middle font-mono\">{txn.amount}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n\n            <TableFooter>\n              <TableRow className=\"bg-muted/20 hover:bg-muted/20 border-t border-border/50\">\n                <TableCell colSpan={3} className=\"h-12 px-4 align-middle font-medium\">Total</TableCell>\n                <TableCell className=\"h-12 px-4 text-right align-middle font-bold text-primary\">₹19,650</TableCell>\n              </TableRow>\n            </TableFooter>\n          </Table>\n        </div>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm font-medium\">\n        Sticky header with precision-clipped corners and glassmorphism\n      </p>\n    </div>\n  );\n};\n\nexport default Table9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-10",
      "type": "registry:component",
      "title": "Table 10",
      "description": "Table 10. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-10.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst orders = [\n  { id: 'ORD001', status: 'Delivered', amount: '₹2,500', method: 'UPI' },\n  { id: 'ORD002', status: 'Processing', amount: '₹1,200', method: 'Card' },\n  {\n    id: 'ORD003',\n    status: 'Cancelled',\n    amount: '₹3,800',\n    method: 'Net Banking',\n  },\n  { id: 'ORD004', status: 'Delivered', amount: '₹900', method: 'Wallet' },\n  { id: 'ORD005', status: 'Delivered', amount: '₹4,200', method: 'UPI' },\n  { id: 'ORD006', status: 'Processing', amount: '₹700', method: 'Debit Card' },\n  {\n    id: 'ORD007',\n    status: 'Cancelled',\n    amount: '₹1,500',\n    method: 'Bank Transfer',\n  },\n  { id: 'ORD008', status: 'Delivered', amount: '₹2,100', method: 'UPI' },\n  { id: 'ORD009', status: 'Processing', amount: '₹950', method: 'Google Pay' },\n  { id: 'ORD010', status: 'Cancelled', amount: '₹1,800', method: 'Apple Pay' },\n];\n\nconst Table10 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"grid [&>div]:max-h-70 [&>div]:overflow-y-auto [&>div]:rounded-sm [&>div]:border\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"bg-muted hover:bg-muted sticky top-0 z-20 shadow-[inset_0px_0px_4px_0_rgba(0,0,0,0.05)]\">\n              <TableHead className=\"w-25\">Order ID</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead>Method</TableHead>\n              <TableHead className=\"text-right\">Amount</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {orders.map((order) => (\n              <TableRow key={order.id}>\n                <TableCell className=\"font-medium\">{order.id}</TableCell>\n                <TableCell>{order.status}</TableCell>\n                <TableCell>{order.method}</TableCell>\n                <TableCell className=\"text-right\">{order.amount}</TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow className=\"bg-muted hover:bg-muted sticky bottom-0 z-20 shadow-[inset_0px_0px_4px_0_rgba(0,0,0,0.05)]\">\n              <TableCell colSpan={3}>Total Revenue</TableCell>\n              <TableCell className=\"text-right\">₹19,650</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Sticky header & footer table\n      </p>\n    </div>\n  );\n};\n\nexport default Table10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-11",
      "type": "registry:component",
      "title": "Table 11",
      "description": "Table 11. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-11.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableRow,\n} from '@/components/base-ui/table';\nimport {\n  HiCube,\n  HiTag,\n  HiCalendar,\n  HiShieldCheck,\n  HiUser,\n  HiCurrencyRupee,\n  HiChip,\n} from 'react-icons/hi';\n\nconst Table11 = () => {\n  return (\n    <div className=\"w-full max-w-lg\">\n      <div className=\"overflow-hidden rounded-xl border shadow-sm\">\n        <Table>\n          <TableBody>\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiCube className=\"text-muted-foreground h-4 w-4\" />\n                  Product\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2\">MacBook Air M3 (2025)</TableCell>\n            </TableRow>\n\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiChip className=\"text-muted-foreground h-4 w-4\" />\n                  Model Number\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2\">MBA-M3-13-512</TableCell>\n            </TableRow>\n\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiTag className=\"text-muted-foreground h-4 w-4\" />\n                  Category\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2\">Laptop</TableCell>\n            </TableRow>\n\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiCalendar className=\"text-muted-foreground h-4 w-4\" />\n                  Purchase Date\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2\">12 Feb 2025</TableCell>\n            </TableRow>\n\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiShieldCheck className=\"text-muted-foreground h-4 w-4\" />\n                  Warranty\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2\">Until Feb 2027</TableCell>\n            </TableRow>\n\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiUser className=\"text-muted-foreground h-4 w-4\" />\n                  Assigned To\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2\">Vansh Patel</TableCell>\n            </TableRow>\n\n            <TableRow className=\"*:border-border [&>:not(:last-child)]:border-r\">\n              <TableCell className=\"bg-muted py-2 font-medium\">\n                <div className=\"flex items-center gap-2\">\n                  <HiCurrencyRupee className=\"text-muted-foreground h-4 w-4\" />\n                  Value\n                </div>\n              </TableCell>\n              <TableCell className=\"py-2 font-semibold\">₹1,14,900</TableCell>\n            </TableRow>\n          </TableBody>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Product details\n      </p>\n    </div>\n  );\n};\n\nexport default Table11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-12",
      "type": "registry:component",
      "title": "Table 12",
      "description": "Table 12. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-12.tsx",
          "type": "registry:component",
          "content": "import {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst employees = [\n  {\n    id: 1,\n    name: 'Aarav Sharma',\n    role: 'Frontend Engineer',\n    company: 'Zeta Labs',\n    email: 'aarav@zeta.com',\n    location: 'India',\n    lastAccess: '2 Apr 2026',\n    salary: '₹18,00,000',\n  },\n  {\n    id: 2,\n    name: 'Priya Verma',\n    role: 'Product Manager',\n    company: 'Nova Systems',\n    email: 'priya@nova.com',\n    location: 'India',\n    lastAccess: '30 Mar 2026',\n    salary: '₹22,50,000',\n  },\n  {\n    id: 3,\n    name: 'Rohan Gupta',\n    role: 'Backend Engineer',\n    company: 'ByteStack',\n    email: 'rohan@bytestack.com',\n    location: 'Singapore',\n    lastAccess: '28 Mar 2026',\n    salary: '₹25,00,000',\n  },\n  {\n    id: 4,\n    name: 'Sneha Kapoor',\n    role: 'base-ui Designer',\n    company: 'PixelCraft',\n    email: 'sneha@pixel.com',\n    location: 'India',\n    lastAccess: '25 Mar 2026',\n    salary: '₹12,00,000',\n  },\n  {\n    id: 5,\n    name: 'Kunal Mehta',\n    role: 'DevOps Engineer',\n    company: 'CloudNest',\n    email: 'kunal@cloudnest.com',\n    location: 'Germany',\n    lastAccess: '20 Mar 2026',\n    salary: '₹28,00,000',\n  },\n  {\n    id: 6,\n    name: 'Anjali Singh',\n    role: 'Data Analyst',\n    company: 'Insight AI',\n    email: 'anjali@insight.ai',\n    location: 'India',\n    lastAccess: '18 Mar 2026',\n    salary: '₹14,50,000',\n  },\n  {\n    id: 7,\n    name: 'Vikas Patel',\n    role: 'QA Engineer',\n    company: 'Testify Labs',\n    email: 'vikas@testify.com',\n    location: 'Canada',\n    lastAccess: '15 Mar 2026',\n    salary: '₹11,00,000',\n  },\n];\n\nconst Table12 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"mx-auto max-w-2xl [&>div]:rounded-sm [&>div]:border\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"hover:bg-transparent\">\n              <TableHead className=\"bg-background sticky left-0\">ID</TableHead>\n\n              <TableHead className=\"bg-background sticky left-7.5\">\n                Name\n              </TableHead>\n\n              <TableHead>Role</TableHead>\n              <TableHead>Company</TableHead>\n              <TableHead>Email</TableHead>\n              <TableHead>Location</TableHead>\n              <TableHead>Last Active</TableHead>\n              <TableHead className=\"text-right\">Salary</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {employees.map((emp) => (\n              <TableRow key={emp.id} className=\"hover:bg-muted/50\">\n                <TableCell className=\"bg-background sticky left-0 font-medium\">\n                  {emp.id}\n                </TableCell>\n\n                <TableCell className=\"bg-background sticky left-7.5\">\n                  <div className=\"flex flex-col\">\n                    <span className=\"font-medium\">{emp.name}</span>\n                    <span className=\"text-muted-foreground text-xs\">\n                      {emp.role}\n                    </span>\n                  </div>\n                </TableCell>\n\n                <TableCell>{emp.role}</TableCell>\n                <TableCell>{emp.company}</TableCell>\n                <TableCell className=\"text-muted-foreground\">\n                  {emp.email}\n                </TableCell>\n                <TableCell>{emp.location}</TableCell>\n                <TableCell>{emp.lastAccess}</TableCell>\n                <TableCell className=\"text-right font-medium\">\n                  {emp.salary}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Sticky column table\n      </p>\n    </div>\n  );\n};\n\nexport default Table12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-13",
      "type": "registry:component",
      "title": "Table 13",
      "description": "Table 13. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "checkbox",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-13.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/base-ui/badge';\n\nconst accounts = [\n  {\n    id: '1',\n    name: 'Aarav Sharma',\n    email: 'aarav@fintech.com',\n    location: 'Delhi, India',\n    status: 'Active',\n    balance: '₹1,20,000',\n  },\n  {\n    id: '2',\n    name: 'Priya Verma',\n    email: 'priya@fintech.com',\n    location: 'Bangalore, India',\n    status: 'Active',\n    balance: '₹8,500',\n  },\n  {\n    id: '3',\n    name: 'Rohan Gupta',\n    email: 'rohan@fintech.com',\n    location: 'Singapore',\n    status: 'Inactive',\n    balance: '₹0',\n  },\n  {\n    id: '4',\n    name: 'Sneha Kapoor',\n    email: 'sneha@fintech.com',\n    location: 'Mumbai, India',\n    status: 'Active',\n    balance: '₹52,300',\n  },\n  {\n    id: '5',\n    name: 'Kunal Mehta',\n    email: 'kunal@fintech.com',\n    location: 'Dubai, UAE',\n    status: 'Overdue',\n    balance: '-₹12,000',\n  },\n];\n\nconst Table13 = () => {\n  const id = useId();\n\n  const getStatusClass = (status: string) => {\n    switch (status) {\n      case 'Active':\n        return 'bg-green-600/10 text-green-600 border-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:border-green-400/20';\n      case 'Inactive':\n        return 'bg-yellow-600/10 text-yellow-600 border-yellow-600/20 dark:bg-yellow-400/10 dark:text-yellow-400 dark:border-yellow-400/20';\n      case 'Overdue':\n        return 'bg-red-600/10 text-red-600 border-red-600/20 dark:bg-red-400/10 dark:text-red-400 dark:border-red-400/20';\n      default:\n        return '';\n    }\n  };\n\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-xl border\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"bg-muted/50 shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_4px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.1),inset_0px_-1px_2px_0px_rgba(0,0,0,0.02)]\">\n              <TableHead>\n                <Checkbox id={id} aria-label=\"select-all\" />\n              </TableHead>\n              <TableHead>User</TableHead>\n              <TableHead>Location</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead className=\"text-right\">Balance</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {accounts.map((item) => (\n              <TableRow\n                key={item.id}\n                className=\"has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:hover:bg-primary/15\"\n              >\n                <TableCell>\n                  <Checkbox\n                    id={`table-checkbox-${item.id}`}\n                    aria-label={`user-checkbox-${item.id}`}\n                  />\n                </TableCell>\n\n                <TableCell>\n                  <div className=\"flex flex-col\">\n                    <span className=\"font-medium\">{item.name}</span>\n                    <span className=\"text-muted-foreground text-xs\">\n                      {item.email}\n                    </span>\n                  </div>\n                </TableCell>\n\n                <TableCell>{item.location}</TableCell>\n\n                <TableCell>\n                  <Badge\n                    variant=\"outline\"\n                    className={cn(\n                      getStatusClass(item.status),\n                      'rounded-full shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_2px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.25),inset_0px_-1px_2px_0px_rgba(0,0,0,0.7)]',\n                    )}\n                  >\n                    {item.status}\n                  </Badge>\n                </TableCell>\n\n                <TableCell className=\"text-right font-medium\">\n                  {item.balance}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow className=\"bg-muted/50 shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_4px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.1),inset_0px_-1px_2px_0px_rgba(0,0,0,0.02)]\">\n              <TableCell colSpan={4}>Total Balance</TableCell>\n              <TableCell className=\"text-right font-semibold\">\n                ₹1,68,800\n              </TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Accounts table with selection\n      </p>\n    </div>\n  );\n};\n\nexport default Table13;\n\n//  className={cn(\n//                   getStatusClass(project.status),\n//                   'rounded-sm shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,1),inset_0px_-1px_2px_0px_rgba(0,0,0,0.05)] dark:shadow-[inset_0px_1px_2px_0px_rgba(255,255,255,0.25),inset_0px_-1px_2px_0px_rgba(0,0,0,0.7)]',\n//                 )}\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-14",
      "type": "registry:component",
      "title": "Table 14",
      "description": "Table 14. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-14.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { HiFolder, HiPencil, HiTrash } from 'react-icons/hi';\n\nimport { Checkbox } from '@/components/base-ui/checkbox';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst projects = [\n  {\n    id: '1',\n    name: 'Dashboard Redesign',\n    owner: 'Aarav Sharma',\n    status: 'Completed',\n    tasks: 24,\n    budget: '₹45,000',\n  },\n  {\n    id: '2',\n    name: 'Mobile App base-ui',\n    owner: 'Priya Verma',\n    status: 'In Progress',\n    tasks: 12,\n    budget: '₹28,000',\n  },\n  {\n    id: '3',\n    name: 'Landing Page Revamp',\n    owner: 'Rohan Gupta',\n    status: 'On Hold',\n    tasks: 8,\n    budget: '₹12,000',\n  },\n  {\n    id: '4',\n    name: 'Analytics Integration',\n    owner: 'Sneha Kapoor',\n    status: 'In Progress',\n    tasks: 16,\n    budget: '₹32,000',\n  },\n  {\n    id: '5',\n    name: 'API Optimization',\n    owner: 'Kunal Mehta',\n    status: 'Completed',\n    tasks: 20,\n    budget: '₹50,000',\n  },\n];\n\nconst getStatusClass = (status: string) => {\n  switch (status) {\n    case 'Completed':\n      return 'bg-green-600/10 text-green-600 border-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:border-green-400/20';\n    case 'In Progress':\n      return 'bg-blue-600/10 text-blue-600 border-blue-600/20 dark:bg-blue-400/10 dark:text-blue-400 dark:border-blue-400/20';\n    case 'On Hold':\n      return 'bg-yellow-600/10 text-yellow-600 border-yellow-600/20 dark:bg-yellow-400/10 dark:text-yellow-400 dark:border-yellow-400/20';\n    default:\n      return '';\n  }\n};\n\nconst Table14 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full\">\n      <div className=\"[&>div]:rounded-sm [&>div]:border\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"hover:bg-transparent\">\n              <TableHead>\n                <Checkbox id={id} aria-label=\"select-all\" />\n              </TableHead>\n              <TableHead>Project</TableHead>\n              <TableHead>Owner</TableHead>\n              <TableHead>Status</TableHead>\n              <TableHead>Tasks</TableHead>\n              <TableHead>Budget</TableHead>\n              <TableHead className=\"w-0\">Actions</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {projects.map((item) => (\n              <TableRow\n                key={item.id}\n                className=\"has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:hover:bg-primary/15\"\n              >\n                <TableCell>\n                  <Checkbox\n                    id={`table-checkbox-${item.id}`}\n                    aria-label={`project-checkbox-${item.id}`}\n                  />\n                </TableCell>\n\n                <TableCell>\n                  <div className=\"flex items-center gap-2\">\n                    <HiFolder className=\"text-muted-foreground h-4 w-4\" />\n                    <span className=\"font-medium\">{item.name}</span>\n                  </div>\n                </TableCell>\n\n                <TableCell>{item.owner}</TableCell>\n\n                <TableCell>\n                  <span\n                    className={`inline-flex items-center gap-1 rounded-sm border px-2 py-0.5 text-xs font-medium ${getStatusClass(\n                      item.status,\n                    )}`}\n                  >\n                    <span className=\"h-1.5 w-1.5 rounded-full bg-current\" />\n                    {item.status}\n                  </span>\n                </TableCell>\n\n                <TableCell>{item.tasks}</TableCell>\n\n                <TableCell className=\"font-medium\">{item.budget}</TableCell>\n\n                <TableCell className=\"flex items-center gap-1\">\n                  <Button variant=\"ghost\" size=\"icon\" className=\"rounded-full\">\n                    <HiPencil className=\"h-4 w-4\" />\n                  </Button>\n\n                  <Button\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    className=\"hover:text-destructive rounded-full transition-colors duration-200\"\n                  >\n                    <HiTrash className=\"h-4 w-4\" />\n                  </Button>\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Project management table\n      </p>\n    </div>\n  );\n};\n\nexport default Table14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-15",
      "type": "registry:component",
      "title": "Table 15",
      "description": "Table 15. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-15.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst developers = [\n  {\n    id: '1',\n    name: 'Guillermo Rauch',\n    username: '@rauchg',\n    src: 'https://github.com/rauchg.png',\n    fallback: 'GR',\n    country: 'USA',\n    contributions: 1240,\n    status: 'online',\n  },\n  {\n    id: '2',\n    name: 'Evan You',\n    username: '@yyx990803',\n    src: 'https://github.com/yyx990803.png',\n    fallback: 'EY',\n    country: 'Singapore',\n    contributions: 980,\n    status: 'online',\n  },\n  {\n    id: '3',\n    name: 'Dan Abramov',\n    username: '@gaearon',\n    src: 'https://github.com/gaearon.png',\n    fallback: 'DA',\n    country: 'UK',\n    contributions: 870,\n    status: 'away',\n  },\n  {\n    id: '4',\n    name: 'Addy Osmani',\n    username: '@addyosmani',\n    src: 'https://github.com/addyosmani.png',\n    fallback: 'AO',\n    country: 'USA',\n    contributions: 650,\n    status: 'offline',\n  },\n];\n\nconst getStatusDot = (status: string) => {\n  switch (status) {\n    case 'online':\n      return 'bg-green-500';\n    case 'away':\n      return 'bg-yellow-500';\n    case 'offline':\n      return 'bg-muted-foreground';\n    default:\n      return '';\n  }\n};\n\nconst Table15 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"[&>div]:rounded-sm [&>div]:border\">\n        <Table>\n          <TableHeader>\n            <TableRow className=\"hover:bg-muted/50 bg-muted/50\">\n              <TableHead>#</TableHead>\n              <TableHead>Developer</TableHead>\n              <TableHead>Country</TableHead>\n              <TableHead className=\"text-right\">Commits</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {developers.map((dev, i) => (\n              <TableRow key={dev.id} className=\"hover:bg-muted/50\">\n                <TableCell className=\"text-muted-foreground font-medium\">\n                  {i + 1}\n                </TableCell>\n\n                <TableCell>\n                  <div className=\"flex items-center gap-3\">\n                    <div className=\"relative\">\n                      <Avatar className=\"h-8 w-8\">\n                        <AvatarImage src={dev.src} alt={dev.name} />\n                        <AvatarFallback className=\"text-xs\">\n                          {dev.fallback}\n                        </AvatarFallback>\n                      </Avatar>\n\n                      <span\n                        className={`border-background absolute right-0 bottom-0 h-2.5 w-2.5 rounded-full border ${getStatusDot(\n                          dev.status,\n                        )}`}\n                      />\n                    </div>\n\n                    <div>\n                      <div className=\"leading-none font-medium\">{dev.name}</div>\n                      <div className=\"text-muted-foreground text-xs\">\n                        {dev.username}\n                      </div>\n                    </div>\n                  </div>\n                </TableCell>\n\n                <TableCell className=\"text-muted-foreground\">\n                  {dev.country}\n                </TableCell>\n\n                <TableCell className=\"text-right\">\n                  <div className=\"font-semibold\">\n                    {dev.contributions.toLocaleString()}\n                  </div>\n                  <div className=\"text-muted-foreground text-xs\">\n                    contributions\n                  </div>\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n        </Table>\n      </div>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Developer leaderboard\n      </p>\n    </div>\n  );\n};\n\nexport default Table15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-16",
      "type": "registry:component",
      "title": "Table 16",
      "description": "Table 16. A structured layout used to display data in rows and columns, enabling easy comparison, sorting, and organization of information.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "pagination",
        "table"
      ],
      "files": [
        {
          "path": "components/watermelon/table-16.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport {\n  Pagination,\n  PaginationContent,\n  PaginationEllipsis,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n} from '@/components/base-ui/pagination';\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from '@/components/base-ui/table';\n\nconst candidates = [\n  {\n    id: '1',\n    name: 'Aarav Sharma',\n    role: 'Frontend Developer',\n    stage: 'Interview',\n    applied: '12 Apr 2026',\n    rating: '4.5',\n  },\n  {\n    id: '2',\n    name: 'Priya Verma',\n    role: 'Product Designer',\n    stage: 'Screening',\n    applied: '10 Apr 2026',\n    rating: '4.2',\n  },\n  {\n    id: '3',\n    name: 'Rohan Gupta',\n    role: 'Backend Engineer',\n    stage: 'Rejected',\n    applied: '8 Apr 2026',\n    rating: '3.8',\n  },\n  {\n    id: '4',\n    name: 'Sneha Kapoor',\n    role: 'base-ui Designer',\n    stage: 'Offer',\n    applied: '5 Apr 2026',\n    rating: '4.9',\n  },\n  {\n    id: '5',\n    name: 'Kunal Mehta',\n    role: 'DevOps Engineer',\n    stage: 'Interview',\n    applied: '3 Apr 2026',\n    rating: '4.3',\n  },\n  {\n    id: '6',\n    name: 'Anjali Singh',\n    role: 'Data Analyst',\n    stage: 'Screening',\n    applied: '1 Apr 2026',\n    rating: '4.1',\n  },\n  {\n    id: '7',\n    name: 'Vikas Patel',\n    role: 'QA Engineer',\n    stage: 'Rejected',\n    applied: '28 Mar 2026',\n    rating: '3.5',\n  },\n];\n\nconst getStageClass = (stage: string) => {\n  switch (stage) {\n    case 'Interview':\n      return 'bg-blue-600/10 text-blue-600 border-blue-600/20 dark:bg-blue-400/10 dark:text-blue-400 dark:border-blue-400/20';\n    case 'Screening':\n      return 'bg-yellow-600/10 text-yellow-600 border-yellow-600/20 dark:bg-yellow-400/10 dark:text-yellow-400 dark:border-yellow-400/20';\n    case 'Offer':\n      return 'bg-green-600/10 text-green-600 border-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:border-green-400/20';\n    case 'Rejected':\n      return 'bg-red-600/10 text-red-600 border-red-600/20 dark:bg-red-400/10 dark:text-red-400 dark:border-red-400/20';\n    default:\n      return '';\n  }\n};\n\nconst Table16 = () => {\n  return (\n    <div className=\"w-full\">\n      <div className=\"overflow-hidden rounded-md border\">\n        <Table>\n          <TableHeader className=\"bg-muted/50\">\n            <TableRow>\n              <TableHead>Candidate</TableHead>\n              <TableHead>Role</TableHead>\n              <TableHead>Stage</TableHead>\n              <TableHead>Applied</TableHead>\n              <TableHead className=\"text-right\">Rating</TableHead>\n            </TableRow>\n          </TableHeader>\n\n          <TableBody>\n            {candidates.map((c) => (\n              <TableRow key={c.id} className=\"hover:bg-muted/50\">\n                <TableCell className=\"font-medium\">{c.name}</TableCell>\n\n                <TableCell className=\"text-muted-foreground\">\n                  {c.role}\n                </TableCell>\n\n                <TableCell>\n                  <Badge\n                    className={`inline-flex items-center rounded-sm border px-2 py-0.5 text-xs font-medium ${getStageClass(\n                      c.stage,\n                    )}`}\n                  >\n                    {c.stage}\n                  </Badge>\n                </TableCell>\n\n                <TableCell>{c.applied}</TableCell>\n\n                <TableCell className=\"text-right font-semibold\">\n                  ⭐ {c.rating}\n                </TableCell>\n              </TableRow>\n            ))}\n          </TableBody>\n\n          <TableFooter>\n            <TableRow>\n              <TableCell colSpan={4}>Total Candidates</TableCell>\n              <TableCell className=\"text-right\">7</TableCell>\n            </TableRow>\n          </TableFooter>\n        </Table>\n      </div>\n\n      <Pagination className=\"mt-4\">\n        <PaginationContent className=\"[&_[data-active=true]]:bg-primary/90 [&_[data-active=true]]:text-primary-foreground [&_[data-active=true]]:bg-primary/90 dark:hover:[&_[data-active=true]]:bg-primary/90\">\n          <PaginationItem>\n            <PaginationPrevious href=\"#\" />\n          </PaginationItem>\n          <PaginationItem>\n            <PaginationLink href=\"#\">1</PaginationLink>\n          </PaginationItem>\n          <PaginationItem>\n            <PaginationLink href=\"#\" isActive>\n              2\n            </PaginationLink>\n          </PaginationItem>\n          <PaginationItem>\n            <PaginationLink href=\"#\">3</PaginationLink>\n          </PaginationItem>\n          <PaginationItem>\n            <PaginationEllipsis />\n          </PaginationItem>\n          <PaginationItem>\n            <PaginationNext href=\"#\" />\n          </PaginationItem>\n        </PaginationContent>\n      </Pagination>\n\n      <p className=\"text-muted-foreground mt-4 text-center text-sm\">\n        Candidate pipeline table\n      </p>\n    </div>\n  );\n};\n\nexport default Table16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-1",
      "type": "registry:component",
      "title": "Tabs 1",
      "description": "Tabs 1. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-1.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst tabs = [\n  {\n    name: 'Overview',\n    value: 'overview',\n    content: (\n      <>\n        Get a <span className='text-foreground font-semibold'>birds-eye view</span> of your creative project, from\n        milestones to current progress. Keep your vision clear and your team aligned with real-time updates.\n      </>\n    )\n  },\n  {\n    name: 'Roadmap',\n    value: 'roadmap',\n    content: (\n      <>\n        Plan your <span className='text-foreground font-semibold'>future trajectory</span> with a visual roadmap of\n        upcoming features and releases. Track your long-term goals and stay ahead of the curve.\n      </>\n    )\n  },\n  {\n    name: 'Backlog',\n    value: 'backlog',\n    content: (\n      <>\n        Manage your <span className='text-foreground font-semibold'>pending tasks</span> and ideas. Prioritize what\n        matters most and ensure nothing falls through the cracks as your project grows.\n      </>\n    )\n  }\n]\n\nconst Tabs1 = () => {\n  return (\n      <Tabs defaultValue='overview' className='gap-4'>\n        <TabsList className='bg-muted px-1 py-1.5 rounded-2xl'>\n          {tabs.map(tab => (\n            <TabsTrigger\n              key={tab.value}\n              value={tab.value}\n              className='rounded-xl px-4 py-3 text-sm font-medium transition-all data-[state=active]:bg-background data-[state=active]:text-primary dark:data-[state=active]:text-primary data-[state=active]:shadow-sm dark:data-[state=active]:bg-muted/80'\n            >\n              {tab.name}\n            </TabsTrigger>\n          ))}\n        </TabsList>\n\n        {tabs.map(tab => (\n          <TabsContent key={tab.value} value={tab.value}>\n            <p className='text-muted-foreground leading-relaxed'>{tab.content}</p>\n          </TabsContent>\n        ))}\n      </Tabs>\n  )\n}\n\nexport default Tabs1\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-2",
      "type": "registry:component",
      "title": "Tabs 2",
      "description": "Tabs 2. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-2.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst pipelineTasks = [\n  {\n    name: 'Deploy',\n    value: 'deploy',\n    content: (\n      <>\n        Ship your code with <span className='text-foreground font-semibold'>confidence and speed</span>. Automate your\n        delivery pipeline to reach users faster while maintaining high reliability standards.\n      </>\n    )\n  },\n  {\n    name: 'Builds',\n    value: 'builds',\n    content: (\n      <>\n        Monitor your <span className='text-foreground font-semibold'>compilation workflow</span>. Track build times,\n        dependencies, and artifacts to ensure every release is optimized and secure.\n      </>\n    )\n  },\n  {\n    name: 'Infrastructure',\n    value: 'infrastructure',\n    content: (\n      <>\n        Control your <span className='text-foreground font-semibold'>cloud assets</span>. Define and manage your scaling\n        rules, databases, and network configurations from a single control plane.\n      </>\n    )\n  }\n]\n\nconst Tabs2 = () => {\n  return (\n      <Tabs defaultValue='deploy' className='gap-4'>\n        <TabsList className='border bg-transparent px-1 py-1.5 rounded-2xl'>\n          {pipelineTasks.map(tab => (\n            <TabsTrigger\n              key={tab.value}\n              value={tab.value}\n             className='rounded-xl px-4 py-3 text-sm font-medium transition-all data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:data-[state=active]:text-primary-foreground dark:data-[state=active]:bg-primary'\n            >\n              {tab.name}\n            </TabsTrigger>\n          ))}\n        </TabsList>\n\n        {pipelineTasks.map(tab => (\n          <TabsContent key={tab.value} value={tab.value}>\n            <p className='text-muted-foreground/90 text-sm leading-6'>{tab.content}</p>\n          </TabsContent>\n        ))}\n      </Tabs>\n  )\n}\n\nexport default Tabs2\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-3",
      "type": "registry:component",
      "title": "Tabs 3",
      "description": "Tabs 3. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-3.tsx",
          "type": "registry:component",
          "content": "import { IconBroadcast, IconFlame, IconSearch } from '@tabler/icons-react'\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst feeds = [\n  {\n    name: 'Discovery',\n    value: 'discovery',\n    icon: IconSearch,\n    content: (\n      <>\n        Explore <span className='text-foreground font-semibold'>original content</span>, rising creators, and niche\n        communities worldwide. Dive into a personalized feed built from your interests and interactions.\n      </>\n    )\n  },\n  {\n    name: 'Trending',\n    value: 'trending',\n    icon: IconFlame,\n    content: (\n      <>\n        Stay on top of <span className='text-foreground font-semibold'>what&apos;s hot</span>. Find viral conversations,\n        breaking discussions, and the most engaging moments happening right now.\n      </>\n    )\n  },\n  {\n    name: 'Live Streams',\n    value: 'live',\n    icon: IconBroadcast,\n    content: (\n      <>\n        Join <span className='text-foreground font-semibold'>real-time broadcasts</span>. Connect with your favorite\n        hosts through live chat, interactive polls, and exclusive digital events.\n      </>\n    )\n  }\n]\n\nconst Tabs3 = () => {\n  return (\n    <div className='w-full max-w-md'>\n      <Tabs defaultValue='discovery' className='gap-4'>\n        <TabsList className='bg-muted h-10 gap-2 rounded-full px-1 !h-9'>\n          {feeds.map(({ icon: Icon, name, value }) => (\n            <TabsTrigger\n              key={value}\n              value={value}\n              className='rounded-xl px-4 py-3 text-sm font-medium transition-all data-[state=active]:bg-background data-[state=active]:text-primary dark:data-[state=active]:text-primary data-[state=active]:shadow-sm dark:data-[state=active]:bg-muted/80'\n            >\n              <Icon size={14} stroke={2.5} />\n              <span className='hidden sm:inline'>{name}</span>\n            </TabsTrigger>\n          ))}\n        </TabsList>\n\n        {feeds.map(tab => (\n          <TabsContent key={tab.value} value={tab.value} className='animate-in fade-in slide-in-from-top-1 px-1'>\n            <p className='text-muted-foreground/80 text-sm italic leading-relaxed'>{tab.content}</p>\n          </TabsContent>\n        ))}\n      </Tabs>\n    </div>\n  )\n}\n\nexport default Tabs3\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-4",
      "type": "registry:component",
      "title": "Tabs 4",
      "description": "Tabs 4. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-4.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst stock = [\n  {\n    name: 'Inventory',\n    value: 'inventory',\n    count: 1,\n    content: (\n      <>\n        Keep track of your{' '}\n        <span className=\"text-foreground font-semibold\">\n          current stock levels\n        </span>\n        . Manage SKU counts, reorder alerts, and warehouse locations to keep\n        your fulfillment center running at peak efficiency.\n      </>\n    ),\n  },\n  {\n    name: 'Pending',\n    value: 'pending',\n    count: 4,\n    content: (\n      <>\n        Monitor incoming{' '}\n        <span className=\"text-foreground font-semibold\">customer orders</span>.\n        Review payment statuses, verify addresses, and prepare your pick-lists\n        for next-day dispatch.\n      </>\n    ),\n  },\n  {\n    name: 'Shipped',\n    value: 'shipped',\n    count: 6,\n    content: (\n      <>\n        Access your{' '}\n        <span className=\"text-foreground font-semibold\">delivery history</span>.\n        Track parcels, manage returns, and analyze shipping performance across\n        all your carrier partners.\n      </>\n    ),\n  },\n];\n\nconst Tabs4 = () => {\n  return (\n    <Tabs defaultValue=\"inventory\" className=\"w-full gap-4 px-1\">\n      <div className=\"bg-muted/50 rounded-full p-1 w-fit max-w-full\">\n        <div className=\"overflow-x-auto overflow-y-hidden scrollbar-hide sm:py-0\">\n          <TabsList className=\"bg-transparent shadow-none border-none flex w-max justify-start gap-1 p-0.5 \">\n            {stock.map((tab) => (\n              <TabsTrigger\n                key={tab.value}\n                value={tab.value}\n                className=\"h-full rounded-xl px-3 text-sm font-medium transition-all data-[state=active]:bg-background data-[state=active]:text-primary dark:data-[state=active]:text-primary data-[state=active]:shadow-sm dark:data-[state=active]:bg-muted/80\"\n              >\n                {tab.name}\n                <Badge className=\"bg-primary text-primary-foreground flex size-5 items-center justify-center rounded-md p-0 text-[10px] tabular-nums rounded-md ml-1\">\n                  {tab.count}\n                </Badge>\n              </TabsTrigger>\n            ))}\n          </TabsList>\n        </div>\n      </div>\n\n      {stock.map((tab) => (\n        <TabsContent key={tab.value} value={tab.value}>\n          <p className=\"text-muted-foreground text-[13px] leading-relaxed\">\n            {tab.content}\n          </p>\n        </TabsContent>\n      ))}\n    </Tabs>\n  );\n};\n\nexport default Tabs4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-5",
      "type": "registry:component",
      "title": "Tabs 5",
      "description": "Tabs 5. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-5.tsx",
          "type": "registry:component",
          "content": "import {\n  IconAdjustmentsHorizontal,\n  IconShieldLock,\n  IconUserCircle,\n} from '@tabler/icons-react';\n\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst settings = [\n  {\n    name: 'Profile',\n    value: 'profile',\n    icon: IconUserCircle,\n    content: (\n      <>\n        Personalize your{' '}\n        <span className=\"text-foreground font-semibold\">digital identity</span>.\n        Update your avatar, bio, and social links to show the world who you are\n        and what you're building.\n      </>\n    ),\n  },\n  {\n    name: 'Preferences',\n    value: 'preferences',\n    icon: IconAdjustmentsHorizontal,\n    content: (\n      <>\n        Fine-tune your{' '}\n        <span className=\"text-foreground font-semibold\">user experience</span>.\n        Adjust your theme, language, and notification settings to perfectly\n        match your daily workflow.\n      </>\n    ),\n  },\n  {\n    name: 'Security',\n    value: 'security',\n    icon: IconShieldLock,\n    content: (\n      <>\n        Fortify your{' '}\n        <span className=\"text-foreground font-semibold\">account barriers</span>.\n        Manage your passwords, two-factor authentication, and connected devices\n        for maximum data privacy.\n      </>\n    ),\n  },\n];\n\nconst Tabs5 = () => {\n  return (\n    <Tabs\n      defaultValue=\"profile\"\n      className=\"flex gap-4\"\n    >\n      <TabsList className=\"bg-muted flex flex-row gap-2 rounded-2xl px-1 py-2 !h-10 sm:!h-14\">\n        {settings.map(({ icon: Icon, name, value }) => (\n          <TabsTrigger\n            key={value}\n            value={value}\n            className=\"data-[state=active]:bg-background data-[state=active]:text-primary dark:data-[state=active]:bg-muted/80 flex flex-1 flex-col items-center justify-center gap-1.5 rounded-xl px-2 py-3 text-[10px] font-bold tracking-wider uppercase transition-all data-[state=active]:shadow-lg h-8 sm:h-12\"\n          >\n            <Icon size={20} stroke={2} />\n            <span className=\"hidden sm:inline\">{name}</span>\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n        {settings.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in fade-in duration-500\"\n          >\n            <h3 className=\"mb-2 text-lg font-bold tracking-tight\">\n              {tab.name}\n            </h3>\n            <p className=\"text-muted-foreground text-sm leading-relaxed\">\n              {tab.content}\n            </p>\n          </TabsContent>\n        ))}\n    </Tabs>\n  );\n};\n\nexport default Tabs5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-6",
      "type": "registry:component",
      "title": "Tabs 6",
      "description": "Tabs 6. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-6.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst analytics = [\n  {\n    name: 'Conversions',\n    value: 'conversions',\n    count: '12',\n    content: (\n      <>\n        Track your{' '}\n        <span className=\"text-foreground font-semibold\">\n          funnel success rate\n        </span>\n        . Analyze the percentage of users who complete a desired action, from\n        sign-ups to successful purchases across your platform.\n      </>\n    ),\n  },\n  {\n    name: 'Engagement',\n    value: 'engagement',\n    count: '8',\n    content: (\n      <>\n        Measure your{' '}\n        <span className=\"text-foreground font-semibold\">\n          audience stickiness\n        </span>\n        . Monitor daily active sessions, session time, and click-through rates\n        on your most critical user interfaces.\n      </>\n    ),\n  },\n  {\n    name: 'Bounce Rate',\n    value: 'bounce',\n    count: '24',\n    content: (\n      <>\n        Optimize your{' '}\n        <span className=\"text-foreground font-semibold\">\n          landing performance\n        </span>\n        . Identify pages where users are dropping off and implement design\n        improvements to keep them browsing your site.\n      </>\n    ),\n  },\n];\n\nconst Tabs6 = () => {\n  return (\n    <Tabs defaultValue=\"conversions\" className=\"gap-4\">\n      <TabsList className=\"!h-14 gap-1 rounded-2xl bg-zinc-100/80 px-1 py-1.5 shadow-inner dark:bg-zinc-900/50\">\n        {analytics.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"data-[state=active]:bg-background data-[state=active]:text-foreground flex h-auto flex-col items-center justify-center gap-0.5 rounded-xl px-2 py-1 text-xs font-semibold tracking-tight transition-all duration-300 data-[state=active]:shadow-md\"\n          >\n            <Badge className=\"bg-primary flex size-5 items-center justify-center rounded-md border-0 p-0 text-[9px] font-bold tabular-nums\">\n              {tab.count}\n            </Badge>\n            <span className=\"text-muted-foreground group-data-[state=active]:text-foreground transition-colors\">\n              {tab.name}\n            </span>\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      {analytics.map((tab) => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className=\"animate-in fade-in slide-in-from-bottom-2 duration-500\"\n        >\n          <div className=\"flex flex-wrap items-baseline gap-2\">\n            <h4 className=\"text-xl font-black tracking-tight\">{tab.name}</h4>\n            <span className=\"text-muted-foreground/60 text-xs font-medium\">\n              / Performance Metrics\n            </span>\n          </div>\n          <p className=\"text-muted-foreground mt-2 leading-relaxed\">\n            {tab.content}\n          </p>\n        </TabsContent>\n      ))}\n    </Tabs>\n  );\n};\n\nexport default Tabs6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-7",
      "type": "registry:component",
      "title": "Tabs 7",
      "description": "Tabs 7. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-7.tsx",
          "type": "registry:component",
          "content": "import {\n  IconSettings2,\n  IconSmartHome,\n  IconUserCheck,\n} from '@tabler/icons-react';\n\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst navigation = [\n  {\n    name: 'Home',\n    value: 'home',\n    icon: IconSmartHome,\n    content: (\n      <>\n        Return to your{' '}\n        <span className=\"text-foreground font-semibold\">central dashboard</span>\n        . See your most relevant data, current alerts, and a summary of your\n        workspace activity at a single glance.\n      </>\n    ),\n  },\n  {\n    name: 'Identity',\n    value: 'identity',\n    icon: IconUserCheck,\n    content: (\n      <>\n        Manage your{' '}\n        <span className=\"text-foreground font-semibold\">\n          verified credentials\n        </span>\n        . Protect your identity, review access logs, and control who has\n        permission to view your private data.\n      </>\n    ),\n  },\n  {\n    name: 'Preferences',\n    value: 'preferences',\n    icon: IconSettings2,\n    content: (\n      <>\n        Configure your{' '}\n        <span className=\"text-foreground font-semibold\">\n          environment settings\n        </span>\n        . From API keys to notifications, fine-tune every aspect of your system\n        for a perfectly tailored experience.\n      </>\n    ),\n  },\n];\n\nconst Tabs7 = () => {\n  return (\n      <Tabs defaultValue=\"home\" className=\"gap-4\">\n        <TabsList className=\"bg-muted !h-10 gap-1 rounded-full\">\n          {navigation.map(({ icon: Icon, name, value }) => (\n            <Tooltip key={value}>\n              <TooltipTrigger asChild>\n                <span>\n                  <TabsTrigger\n                    value={value}\n                    className=\"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:hover:bg-muted dark:data-[state=active]:bg-primary relative flex size-8 items-center justify-center rounded-full transition-all duration-300 data-[state=active]:shadow-lg\"\n                    aria-label={name}\n                  >\n                    <Icon size={22} stroke={2} />\n                    <div className=\"border-background absolute -top-1 -right-1 h-3 w-3 scale-0 rounded-full border-2 bg-red-500 transition-transform data-[state=active]:scale-0\" />\n                  </TabsTrigger>\n                </span>\n              </TooltipTrigger>\n              <TooltipContent\n                side=\"bottom\"\n                className=\"px-3 py-1.5 text-[10px] font-bold tracking-widest uppercase\"\n              >\n                {name}\n              </TooltipContent>\n            </Tooltip>\n          ))}\n        </TabsList>\n\n        {navigation.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in zoom-in-95 duration-300\"\n          >\n            <h5 className=\"text-primary mb-2 text-sm font-bold tracking-tight\">\n              {tab.name}\n            </h5>\n            <p className=\"text-muted-foreground text-[13px] leading-relaxed\">\n              {tab.content}\n            </p>\n          </TabsContent>\n        ))}\n      </Tabs>\n  );\n};\n\nexport default Tabs7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-8",
      "type": "registry:component",
      "title": "Tabs 8",
      "description": "Tabs 8. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-8.tsx",
          "type": "registry:component",
          "content": "import {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst creativeStudio = [\n  {\n    name: 'Illustrate',\n    value: 'illustrate',\n    content: (\n      <>\n        Bring your{' '}\n        <span className=\"text-foreground font-semibold\">visual stories</span> to\n        life. Use advanced vector tools, custom brushes, and layered\n        compositions to create stunning artwork from scratch.\n      </>\n    ),\n  },\n  {\n    name: 'Design',\n    value: 'design',\n    content: (\n      <>\n        Structure your{' '}\n        <span className=\"text-foreground font-semibold\">\n          digital interfaces\n        </span>\n        . Build reusable component libraries, interactive prototypes, and\n        scalable layouts for web and mobile platforms.\n      </>\n    ),\n  },\n  {\n    name: 'Animate',\n    value: 'animate',\n    content: (\n      <>\n        Master the{' '}\n        <span className=\"text-foreground font-semibold\">art of motion</span>.\n        Add fluid transitions, physically-driven physics, and keyframe-based\n        timelines to captivate your audience.\n      </>\n    ),\n  },\n];\n\nconst Tabs8 = () => {\n  return (\n    <Tabs defaultValue=\"illustrate\" className=\"w-full gap-4 px-1\">\n      <div className=\"w-fit max-w-full overflow-x-auto overflow-y-hidden scrollbar-hide py-0.5\">\n        <TabsList className=\"bg-transparent flex w-max justify-start gap-1\">\n          {creativeStudio.map((tab) => (\n            <TabsTrigger\n              key={tab.value}\n              value={tab.value}\n              className=\"rounded-full px-6 py-3 text-xs uppercase transition-all data-[state=active]:bg-indigo-500 data-[state=active]:text-white data-[state=active]:shadow-lg dark:data-[state=active]:bg-indigo-600\"\n            >\n              {tab.name}\n            </TabsTrigger>\n          ))}\n        </TabsList>\n      </div>\n\n      {creativeStudio.map((tab) => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className=\"animate-in slide-in-from-bottom-2 fade-in\"\n        >\n          <h6 className=\"mb-2 text-xl font-black tracking-tighter text-indigo-600 italic dark:text-indigo-400\">\n            {tab.name}\n          </h6>\n          <p className=\"text-muted-foreground/90 text-sm leading-relaxed\">\n            {tab.content}\n          </p>\n        </TabsContent>\n      ))}\n    </Tabs>\n  );\n};\n\nexport default Tabs8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-9",
      "type": "registry:component",
      "title": "Tabs 9",
      "description": "Tabs 9. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-9.tsx",
          "type": "registry:component",
          "content": "import {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst subscriptionTiers = [\n  {\n    name: 'Standard',\n    value: 'standard',\n    content: (\n      <>\n        Everything you need to{' '}\n        <span className=\"text-foreground font-semibold\">get started</span>.\n        Access core tools, basic support, and 5GB of storage to kickstart your\n        personal journey.\n      </>\n    ),\n  },\n  {\n    name: 'Premium',\n    value: 'premium',\n    content: (\n      <>\n        Unlock{' '}\n        <span className=\"text-foreground font-semibold\">\n          advanced capabilities\n        </span>\n        . Experience high-speed processing, 50GB of storage, and priority access\n        to our support team and beta features.\n      </>\n    ),\n  },\n  {\n    name: 'Ultimate',\n    value: 'ultimate',\n    content: (\n      <>\n        Scale your{' '}\n        <span className=\"text-foreground font-semibold\">\n          entire organization\n        </span>\n        . Get dedicated infrastructure, unlimited storage, and white-glove\n        onboarding for your team.\n      </>\n    ),\n  },\n];\n\nconst Tabs9 = () => {\n  return (\n    <Tabs defaultValue=\"standard\" className=\"gap-4\">\n      <TabsList className=\"rounded-2xl bg-transparent\">\n        {subscriptionTiers.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground flex-1 rounded-full px-4 py-1 text-[11px] uppercase transition-all\"\n          >\n            {tab.name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      {subscriptionTiers.map((tab) => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className=\"bg-muted/20 mt-0 rounded-3xl border-2 border-dashed p-6\"\n        >\n          <h5 className=\"mb-4 text-2xl font-black tracking-tight\">\n            {tab.name}\n          </h5>\n          <p className=\"text-muted-foreground/80 border-primary border-l-2 pl-4 text-sm leading-6\">\n            {tab.content}\n          </p>\n        </TabsContent>\n      ))}\n    </Tabs>\n  );\n};\n\nexport default Tabs9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-10",
      "type": "registry:component",
      "title": "Tabs 10",
      "description": "Tabs 10. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-10.tsx",
          "type": "registry:component",
          "content": "import {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst cloudStorage = [\n  {\n    name: 'Recent',\n    value: 'recent',\n    content: (\n      <>\n        Access your{' '}\n        <span className=\"text-foreground font-semibold\">latest activity</span>.\n        Revisit documents, spreadsheets, and images you've worked on in the last\n        24 hours across all your devices.\n      </>\n    ),\n  },\n  {\n    name: 'Shared',\n    value: 'shared',\n    content: (\n      <>\n        Collaborate on{' '}\n        <span className=\"text-foreground font-semibold\">mutual assets</span>.\n        Review files that team members have granted you access to and manage\n        permissions for your own shared folders.\n      </>\n    ),\n  },\n  {\n    name: 'Archive',\n    value: 'archive',\n    content: (\n      <>\n        Manage your{' '}\n        <span className=\"text-foreground font-semibold\">legacy storage</span>.\n        Securely store long-term records, completed projects, and backup data\n        that isn't required for your daily operations.\n      </>\n    ),\n  },\n];\n\nconst Tabs10 = () => {\n  return (\n    <Tabs defaultValue=\"recent\" className=\"gap-4\">\n      <TabsList className=\"h-12 gap-1 rounded-2xl bg-transparent\">\n        {cloudStorage.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"data-[state=active]:border-zinc-200 dark:data-[state=active]:border-zinc-800 flex-1 rounded-xl border-2 border-transparent px-4 py-2.5 text-xs font-semibold tracking-wider uppercase transition-all data-[state=active]:shadow-none!\"\n          >\n            {tab.name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      {cloudStorage.map((tab) => (\n        <TabsContent key={tab.value} value={tab.value}>\n          <div className=\"mb-3 flex items-center gap-2\">\n            <h6 className=\"text-muted-foreground text-[11px] font-bold uppercase\">\n              Cloud Explorer / {tab.name}\n            </h6>\n          </div>\n          <p className=\"text-xs leading-5 font-medium text-zinc-600 italic dark:text-zinc-400\">\n            {tab.content}\n          </p>\n        </TabsContent>\n      ))}\n    </Tabs>\n  );\n};\n\nexport default Tabs10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-11",
      "type": "registry:component",
      "title": "Tabs 11",
      "description": "Tabs 11. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-11.tsx",
          "type": "registry:component",
          "content": "import { IconActivity, IconCloudLock, IconServer } from '@tabler/icons-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst systems = [\n  {\n    name: 'Performance',\n    value: 'performance',\n    icon: IconActivity,\n    content: (\n      <>\n        Monitor your <span className='text-foreground font-semibold'>real-time throughput</span>. Track latency, request\n        per second, and hardware utilization across your distributed cluster nodes.\n      </>\n    )\n  },\n  {\n    name: 'Infrastructure',\n    value: 'infra',\n    icon: IconServer,\n    content: (\n      <>\n        Scale your <span className='text-foreground font-semibold'>cloud resources</span>. Manage container orchestration,\n        provision new instances, and oversee your global network topology from a single interface.\n      </>\n    )\n  },\n  {\n    name: 'Security',\n    value: 'security',\n    icon: IconCloudLock,\n    content: (\n      <>\n        Enforce <span className='text-foreground font-semibold'>zero-trust access</span>. Audit firewall logs, manage\n        SSL certificates, and investigate potential threats with our advanced anomaly detection engine.\n      </>\n    )\n  }\n]\n\nconst Tabs11 = () => {\n  return (\n    <Tabs defaultValue='performance' className='w-full gap-6 px-1'>\n      <div className='w-fit max-w-full overflow-x-auto overflow-y-hidden scrollbar-hide py-0.5'>\n        <TabsList className='h-auto bg-transparent flex w-max justify-start gap-3 border-b p-0'>\n          {systems.map(({ icon: Icon, name, value }) => (\n            <TabsTrigger\n              key={value}\n              value={value}\n              className='bg-background data-[state=active]:border-primary dark:data-[state=active]:border-primary h-full rounded-none border-0 border-b-2 border-transparent data-[state=active]:shadow-none!'\n            >\n              <Icon size={24} stroke={1.5} />\n              <span className='text-xs font-bold tracking-tight'>{name}</span>\n            </TabsTrigger>\n          ))}\n        </TabsList>\n      </div>\n\n      {systems.map(tab => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className='animate-in fade-in slide-in-from-top-1 duration-500'\n        >\n          <div className='p-6 rounded-3xl border bg-muted/5 border-dashed'>\n            <h4 className='mb-3 text-lg font-bold flex items-start gap-2'>\n              <tab.icon size={20} className='text-primary shrink-0 mt-1' />\n              {tab.name} Operational Metrics\n            </h4>\n            <p className='text-muted-foreground text-sm leading-relaxed max-w-lg'>{tab.content}</p>\n          </div>\n        </TabsContent>\n      ))}\n    </Tabs>\n  )\n}\n\nexport default Tabs11\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-12",
      "type": "registry:component",
      "title": "Tabs 12",
      "description": "Tabs 12. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-12.tsx",
          "type": "registry:component",
          "content": "import { IconApps, IconBrush, IconCode } from '@tabler/icons-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst services = [\n  {\n    name: 'Branding',\n    value: 'branding',\n    icon: IconBrush,\n    content: (\n      <>\n        Define your <span className='text-foreground font-semibold'>visual identity</span>. We craft memorable logos,\n        stunning color palettes, and comprehensive style guides that resonate with your target audience.\n      </>\n    )\n  },\n  {\n    name: 'Development',\n    value: 'dev',\n    icon: IconCode,\n    content: (\n      <>\n        Build your <span className='text-foreground font-semibold'>digital core</span>. Our engineering team delivers\n        highly-performant web applications, custom API integrations, and robust e-commerce solutions.\n      </>\n    )\n  },\n  {\n    name: 'UX Design',\n    value: 'ux',\n    icon: IconApps,\n    content: (\n      <>\n        Optimize <span className='text-foreground font-semibold'>user journeys</span>. We design intuitive interfaces and\n        seamless workflows that convert visitors into loyal customers through user-centric research.\n      </>\n    )\n  }\n]\n\nconst Tabs12 = () => {\n  return (\n    <Tabs defaultValue='branding' className='w-full gap-4 px-1'>\n      <div className='w-fit max-w-full overflow-x-auto overflow-y-hidden scrollbar-hide py-0.5'>\n        <TabsList className='h-auto bg-transparent border-b rounded-none p-0 gap-2 flex w-max justify-start'>\n          {services.map(({ icon: Icon, name, value }) => (\n            <TabsTrigger\n              key={value}\n              value={value}\n              className='relative rounded-none border-b-2 border-transparent bg-transparent px-2  text-xs font-semibold uppercase transition-all data-[state=active]:border-primary data-[state=active]:rounded-t-lg data-[state=active]:text-primary data-[state=active]:shadow-none! hover:text-foreground/80'\n            >\n              <div className='flex items-center gap-2'>\n                <Icon size={18} stroke={2} />\n                {name}\n              </div>\n            </TabsTrigger>\n          ))}\n        </TabsList>\n      </div>\n\n      {services.map(tab => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className='animate-in fade-in duration-700'\n        >\n          <div className='max-w-2xl'>\n            <h3 className='mb-2 text-xl font-semibold tracking-tighter'>\n              Elevate your {tab.name}\n            </h3>\n            <p className='text-muted-foreground text-sm leading-relaxed'>{tab.content}</p>\n          </div>\n        </TabsContent>\n      ))}\n    </Tabs>\n  )\n}\n\nexport default Tabs12\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-13",
      "type": "registry:component",
      "title": "Tabs 13",
      "description": "Tabs 13. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-13.tsx",
          "type": "registry:component",
          "content": "import { IconBook2, IconCertificate, IconVideo } from '@tabler/icons-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst learning = [\n  {\n    name: 'Curriculum',\n    value: 'curriculum',\n    icon: IconBook2,\n    content: (\n      <>\n        Explore your <span className='text-foreground font-semibold'>learning path</span>. Access structured modules,\n        downloadable resources, and interactive quizzes designed to master your chosen subject.\n      </>\n    )\n  },\n  {\n    name: 'Live Lessons',\n    value: 'lessons',\n    icon: IconVideo,\n    content: (\n      <>\n        Join our <span className='text-foreground font-semibold'>expert-led sessions</span>. Engage in real-time Q&A,\n        participate in group discussions, and watch recorded sessions at your own convenience.\n      </>\n    )\n  },\n  {\n    name: 'Certification',\n    value: 'certification',\n    icon: IconCertificate,\n    content: (\n      <>\n        Earn your <span className='text-foreground font-semibold'>professional validation</span>. Complete the final\n        assessment to receive a blockchain-verified certificate to showcase your skills to the world.\n      </>\n    )\n  }\n]\n\nconst Tabs13 = () => {\n  return (\n    <Tabs defaultValue='curriculum' className='w-full gap-4 px-1'>\n      <div className='w-fit max-w-full overflow-x-auto overflow-y-hidden scrollbar-hide py-0.5'>\n        <TabsList className='bg-transparent flex w-max justify-start gap-1'>\n          {learning.map(({ icon: Icon, name, value }) => (\n            <TabsTrigger\n              key={value}\n              value={value}\n              className='h-full px-6 flex items-center gap-2 rounded-b-none transition-all duration-300data-[state=active]:rounded-t data-[state=active]:bg-primary data-[state=active]:text-white data-[state=active]:shadow-md dark:data-[state=active]:bg-muted/80'\n            >\n              <Icon size={18} stroke={2} />\n              <span className='font-bold text-xs tracking-tight'>{name}</span>\n            </TabsTrigger>\n          ))}\n        </TabsList>\n      </div>\n\n      {learning.map(tab => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className='animate-in fade-in slide-in-from-left-2 duration-500'\n        >\n          <div className='bg-background p-6 rounded-3xl border border-muted-foreground/10'>\n            <div className='flex items-center gap-3 mb-4'>\n              <div className='p-2.5 rounded-xl bg-primary/10 text-primary'>\n                <tab.icon size={22} />\n              </div>\n              <h4 className='text-xl font-bold tracking-tight'>{tab.name}</h4>\n            </div>\n            <p className='text-muted-foreground text-sm leading-relaxed max-w-xl'>{tab.content}</p>\n          </div>\n        </TabsContent>\n      ))}\n    </Tabs>\n  )\n}\n\nexport default Tabs13\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-14",
      "type": "registry:component",
      "title": "Tabs 14",
      "description": "Tabs 14. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "scroll-area",
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-14.tsx",
          "type": "registry:component",
          "content": "import {\n  IconDeviceDesktop,\n  IconShirt,\n  IconHome,\n  IconBallBasketball,\n  IconSparkles,\n  IconCar,\n  IconBook,\n  IconMoodSmile\n} from '@tabler/icons-react'\nimport { ScrollArea, ScrollBar } from '@/components/base-ui/scroll-area'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst categories = [\n  {\n    name: 'Electronics',\n    value: 'electronics',\n    icon: IconDeviceDesktop,\n    content: (\n      <>\n        Upgrade your <span className='text-foreground font-semibold'>digital lifestyle</span>. Discover the latest\n        smartphones, high-performance laptops, and cutting-edge home entertainment systems.\n      </>\n    )\n  },\n  {\n    name: 'Apparel',\n    value: 'apparel',\n    icon: IconShirt,\n    content: (\n      <>\n        Refresh your <span className='text-foreground font-semibold'>wardrobe</span>. Shop seasonal fashion trends,\n        comfortable basics, and premium designer luxury pieces for every occasion.\n      </>\n    )\n  },\n  {\n    name: 'Home & Living',\n    value: 'home',\n    icon: IconHome,\n    content: (\n      <>\n        Elevate your <span className='text-foreground font-semibold'>living space</span>. Find modern furniture,\n        chic decor, and smart appliances that transform your house into a dream home.\n      </>\n    )\n  },\n  {\n    name: 'Sports',\n    value: 'sports',\n    icon: IconBallBasketball,\n    content: (\n      <>\n        Fuel your <span className='text-foreground font-semibold'>active routine</span>. Gear up with top-tier\n        athletic equipment, breathable activewear, and performance-tracking accessories.\n      </>\n    )\n  },\n  {\n    name: 'Beauty',\n    value: 'beauty',\n    icon: IconSparkles,\n    content: (\n      <>\n        Enhance your <span className='text-foreground font-semibold'>natural glow</span>. Explore luxurious skincare\n        routines, vibrant cosmetics, and professional-grade self-care essentials.\n      </>\n    )\n  },\n  {\n    name: 'Automotive',\n    value: 'auto',\n    icon: IconCar,\n    content: (\n      <>\n        Maintain your <span className='text-foreground font-semibold'>vehicle&apos;s performance</span>. Browse quality\n        replacement parts, premium interior accessories, and professional detailing kits.\n      </>\n    )\n  },\n  {\n    name: 'Books',\n    value: 'books',\n    icon: IconBook,\n    content: (\n      <>\n        Expand your <span className='text-foreground font-semibold'>knowledge horizon</span>. Dive into gripping\n        fiction, insightful biographies, and comprehensive academic textbooks.\n      </>\n    )\n  },\n  {\n    name: 'Toys',\n    value: 'toys',\n    icon: IconMoodSmile,\n    content: (\n      <>\n        Spark pure <span className='text-foreground font-semibold'>joy and creativity</span>. Find educational\n        games, interactive playsets, and beloved character toys for kids of all ages.\n      </>\n    )\n  }\n]\n\nconst Tabs14 = () => {\n  return (\n    <Tabs defaultValue='electronics' className='w-full max-w-3xl gap-4'>\n      <ScrollArea className='w-full max-w-full'>\n        <TabsList className='!h-10 p-1 flex gap-3 w-max rounded-2xl'>\n          {categories.map(({ icon: Icon, name, value }) => (\n            <TabsTrigger\n              key={value}\n              value={value}\n              className='flex  items-center gap-2 rounded-full border-2 border-transparent bg-muted/50 px-3 text-xs font-bold uppercase text-muted-foreground transition-all hover:bg-muted data-[state=active]:border-primary data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-md'\n            >\n              <Icon size={16} stroke={2.5} />\n              {name}\n            </TabsTrigger>\n          ))}\n        </TabsList>\n        <ScrollBar orientation='horizontal' className='hidden' />\n      </ScrollArea>\n\n      {categories.map(tab => (\n        <TabsContent\n          key={tab.value}\n          value={tab.value}\n          className='mt-2 animate-in slide-in-from-right-4 fade-in duration-500'\n        >\n          <div className='rounded-3xl border p-6 '>\n            <h4 className='mb-4 flex items-center gap-3 text-xl font-semibold tracking-tight text-foreground'>\n              <tab.icon size={28} className='text-primary' />\n              {tab.name}\n            </h4>\n            <p className='max-w-2xl text-sm text-muted-foreground'>\n              {tab.content}\n            </p>\n          </div>\n        </TabsContent>\n      ))}\n    </Tabs>\n  )\n}\n\nexport default Tabs14\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-15",
      "type": "registry:component",
      "title": "Tabs 15",
      "description": "Tabs 15. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-15.tsx",
          "type": "registry:component",
          "content": "import { IconBuildingFactory, IconBuildingSkyscraper, IconHome2 } from '@tabler/icons-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst properties = [\n  {\n    name: 'Residential',\n    value: 'residential',\n    icon: IconHome2,\n    content: (\n      <>\n        Explore luxury <span className='text-foreground font-semibold'>family homes</span>. Browse single-family houses,\n        modern apartments, and quiet suburban estates designed for comfortable living and long-term value.\n      </>\n    )\n  },\n  {\n    name: 'Commercial',\n    value: 'commercial',\n    icon: IconBuildingSkyscraper,\n    content: (\n      <>\n        Expand your <span className='text-foreground font-semibold'>business footprint</span>. Discover premium office\n        spaces, high-traffic retail locations, and versatile mixed-use properties in the heart of the city.\n      </>\n    )\n  },\n  {\n    name: 'Industrial',\n    value: 'industrial',\n    icon: IconBuildingFactory,\n    content: (\n      <>\n        Optimize your <span className='text-foreground font-semibold'>logistics network</span>. Find spacious\n        warehouses, advanced manufacturing facilities, and strategically located distribution centers.\n      </>\n    )\n  }\n]\n\nconst Tabs15 = () => {\n  return (\n    <Tabs defaultValue='residential' orientation='vertical' className='flex flex-row w-full max-w-2xl gap-3 sm:gap-8 px-1'>\n      <TabsList className='flex flex-col h-auto bg-transparent gap-2 p-0 shrink-0 border-l-2 border-muted/50 rounded-none w-max'>\n        {properties.map(({ icon: Icon, name, value }) => (\n          <TabsTrigger\n            key={value}\n            value={value}\n            className='group relative flex w-full items-center justify-start gap-1.5 sm:gap-3 rounded-none rounded-r-xl border border-transparent px-1.5 sm:px-3 py-2 sm:py-1 text-[10px] sm:text-sm font-semibold transition-all hover:bg-muted/30 data-[state=active]:bg-primary/5 data-[state=active]:text-primary data-[state=active]:shadow-none! -ml-[2px]'\n          >\n            <div className='absolute left-0 top-0 bottom-0 w-[2px] bg-primary scale-y-0 opacity-0 transition-all duration-300 group-data-[state=active]:scale-y-100 group-data-[state=active]:opacity-100' />\n            <Icon size={16} className='sm:size-[18px]' />\n            {name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className='flex-1 py-1'>\n        {properties.map(tab => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className='m-0 animate-in fade-in slide-in-from-bottom-2 duration-500'\n          >\n            <div className='flex items-start sm:items-center gap-1.5 sm:gap-3 mb-4 sm:mb-5'>\n              <div className='p-1.5 sm:p-2 rounded-xl bg-primary text-primary-foreground shadow-sm'>\n                <tab.icon size={12} className='sm:size-[15px]' stroke={2} />\n              </div>\n              <h4 className='text-sm sm:text-base tracking-tight'>{tab.name} Real Estate</h4>\n            </div>\n            <p className='text-muted-foreground leading-relaxed text-[13px] sm:text-sm'>\n              {tab.content}\n            </p>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  )\n}\n\nexport default Tabs15\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-16",
      "type": "registry:component",
      "title": "Tabs 16",
      "description": "Tabs 16. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-16.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst cloudServices = [\n  {\n    name: 'Compute',\n    value: 'compute',\n    title: 'Elastic Compute Power',\n    content:\n      'Dynamically scale your application workload with our high-performance compute instances. Optimized for memory-intensive operations and machine learning tasks.'\n  },\n  {\n    name: 'Storage',\n    value: 'storage',\n    title: 'Scalable Object Storage',\n    content:\n      'Store and retrieve any amount of data securely. Our distributed storage architecture ensures 99.999% availability and automatic geographic redundancy.'\n  },\n  {\n    name: 'Database',\n    value: 'database',\n    title: 'Managed Relational DB',\n    content:\n      'Deploy fully managed databases in seconds. We handle the heavy lifting of provisioning, patching, and backups so you can focus on building.'\n  }\n]\n\nconst Tabs16 = () => {\n  return (\n    <div className='w-full max-w-xl px-1'>\n      <Tabs defaultValue='compute' orientation='vertical' className='flex gap-3 sm:gap-8'>\n        <TabsList className='h-full flex-col bg-muted p-1 sm:p-2 rounded-2xl gap-2'>\n          {cloudServices.map(tab => (\n            <TabsTrigger key={tab.value} value={tab.value} className='justify-start px-1.5 sm:px-2 py-1 rounded-xl font-medium text-[11px] sm:text-sm'>\n              {tab.name}\n            </TabsTrigger>\n          ))}\n        </TabsList>\n\n        <div className='flex-1'>\n          {cloudServices.map(tab => (\n            <TabsContent key={tab.value} value={tab.value} className='m-0 animate-in fade-in zoom-in-95 duration-500'>\n              <div className='rounded-2xl border border-indigo-100 bg-indigo-50/50 p-3.5 sm:p-6 shadow-sm dark:border-indigo-900/30 dark:bg-indigo-900/10'>\n                <h4 className='mb-3 text-sm sm:text-lg font-bold text-indigo-900 dark:text-indigo-400'>\n                  {tab.title}\n                </h4>\n                <p className='text-[12px] sm:text-sm text-indigo-950/70 dark:text-indigo-200/70'>\n                  {tab.content}\n                </p>\n                <button className='mt-5 rounded-lg bg-indigo-600 px-3 py-1.5 text-[10px] sm:px-4 sm:py-2 flex-shrink-0 font-semibold text-white shadow-md transition-colors hover:bg-indigo-700 dark:bg-indigo-500'>\n                  Deploy Service\n                </button>\n              </div>\n            </TabsContent>\n          ))}\n        </div>\n      </Tabs>\n    </div>\n  )\n}\n\nexport default Tabs16\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-17",
      "type": "registry:component",
      "title": "Tabs 17",
      "description": "Tabs 17. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-17.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst healthServices = [\n  {\n    name: 'Telehealth',\n    value: 'telehealth',\n    doctor: 'Dr. Sarah Connor',\n    specialty: 'General Practice',\n    content:\n      'Connect with board-certified physicians from the comfort of your home. Consultations, prescriptions, and follow-ups available 24/7 via secure video calls.',\n    status: 'Available Now'\n  },\n  {\n    name: 'Therapy',\n    value: 'therapy',\n    doctor: 'Dr. James Wilson',\n    specialty: 'Clinical Psychology',\n    content:\n      'Access confidential mental health support. Schedule weekly therapy sessions with our licensed counselors and psychiatrists to manage stress and anxiety.',\n    status: 'By Appointment'\n  },\n  {\n    name: 'Nutrition',\n    value: 'nutrition',\n    doctor: 'Dr. Emily Chen',\n    specialty: 'Dietetics',\n    content:\n      'Get personalized meal plans and dietary advice. Work with our nutrition experts to achieve your fitness goals and manage dietary restrictions safely.',\n    status: 'Waitlist'\n  }\n]\n\nconst Tabs17 = () => {\n  return (\n    <div className='w-full max-w-xl px-1'>\n      <Tabs defaultValue='telehealth' orientation='vertical' className='flex gap-3 sm:gap-6'>\n        <TabsList className='bg-background h-full flex-col shrink-0 gap-1'>\n          {healthServices.map(tab => (\n            <TabsTrigger\n              key={tab.value}\n              value={tab.value}\n              className='data-[state=active]:bg-emerald-100/50 data-[state=active]:text-emerald-700 dark:data-[state=active]:text-emerald-400 dark:data-[state=active]:bg-emerald-900/20 w-full justify-start data-[state=active]:shadow-none! dark:data-[state=active]:border-transparent rounded-lg px-2 sm:px-4 text-[11px] sm:text-sm'\n            >\n              {tab.name}\n            </TabsTrigger>\n          ))}\n        </TabsList>\n\n        <div className='flex-1'>\n          {healthServices.map(tab => (\n            <TabsContent key={tab.value} value={tab.value} className='m-0 animate-in slide-in-from-bottom-2 fade-in duration-500'>\n              <div className='rounded-3xl border border-emerald-100 bg-emerald-50/50 p-4 sm:p-6 dark:border-emerald-900/30 dark:bg-emerald-900/10'>\n                <div className='mb-4 flex flex-col gap-1 sm:gap-2 sm:flex-row sm:items-center sm:justify-between'>\n                  <div>\n                    <h4 className='text-sm sm:text-lg font-semibold tracking-tight text-emerald-950 dark:text-emerald-50'>\n                      {tab.doctor}\n                    </h4>\n                    <span className='text-[11px] sm:text-sm font-medium text-emerald-600 dark:text-emerald-400'>\n                      {tab.specialty}\n                    </span>\n                  </div>\n                </div>\n                <p className='text-[13px] sm:text-sm text-emerald-900/70 dark:text-emerald-100/60'>\n                  {tab.content}\n                </p>\n                <div className='mt-4 flex items-center gap-1.5 sm:gap-3 border-t border-emerald-200/30 pt-4 dark:border-emerald-800/30'>\n                  <button className='rounded-lg bg-emerald-600 px-2.5 py-1.5 text-[10px] sm:px-4 sm:py-2 sm:text-xs font-semibold text-white shadow-sm transition-colors hover:bg-emerald-700 dark:bg-emerald-500 dark:hover:bg-emerald-600'>\n                    Book Session\n                  </button>\n                  <button className='rounded-lg px-2.5 py-1.5 text-[10px] sm:px-4 sm:py-2 sm:text-xs font-semibold text-emerald-700 transition-colors hover:bg-emerald-100 dark:text-emerald-400 dark:hover:bg-emerald-800/40'>\n                    View Profile\n                  </button>\n                </div>\n              </div>\n            </TabsContent>\n          ))}\n        </div>\n      </Tabs>\n    </div>\n  )\n}\n\nexport default Tabs17\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-18",
      "type": "registry:component",
      "title": "Tabs 18",
      "description": "Tabs 18. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-18.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\nimport { Button } from '@/components/ui/button'\n\nconst taskBoard = [\n  {\n    name: 'To-Do',\n    value: 'todo',\n    count: 12,\n    badgeColor: 'bg-zinc-200 text-zinc-800 dark:bg-zinc-800 dark:text-zinc-200 group-data-[state=active]:bg-zinc-700 group-data-[state=active]:text-zinc-100 dark:group-data-[state=active]:bg-zinc-300 dark:group-data-[state=active]:text-zinc-900',\n    content:\n      'Review your pending items. Outstanding tasks that need your attention soon, including project briefs, design reviews, and client follow-ups.'\n  },\n  {\n    name: 'In Progress',\n    value: 'in-progress',\n    count: 4,\n    badgeColor: 'bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-200 group-data-[state=active]:bg-zinc-700 group-data-[state=active]:text-zinc-100 dark:group-data-[state=active]:bg-zinc-300 dark:group-data-[state=active]:text-zinc-900',\n    content:\n      'Track active assignments. Work that is currently being tackled by you or your team, along with real-time status updates and collaboration notes.'\n  },\n  {\n    name: 'Done',\n    value: 'done',\n    count: 28,\n    badgeColor: 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900/50 dark:text-emerald-200 group-data-[state=active]:bg-zinc-700 group-data-[state=active]:text-zinc-100 dark:group-data-[state=active]:bg-zinc-300 dark:group-data-[state=active]:text-zinc-900',\n    content:\n      'View completed objectives. A historical log of finished tasks and resolved tickets that have been verified, approved, and officially closed.'\n  }\n]\n\nconst Tabs18 = () => {\n  return (\n      <Tabs defaultValue='todo' orientation='vertical' className='w-full flex gap-2.5 sm:gap-6 min-h-[200px] px-1'>\n        <TabsList className='bg-transparent h-full flex-col shrink-0 justify-start space-y-1 p-0 rounded-none'>\n          {taskBoard.map(tab => (\n            <TabsTrigger\n              key={tab.value}\n              value={tab.value}\n              className='group w-full justify-between rounded-xl px-2 sm:px-4 py-1 data-[state=active]:bg-primary data-[state=active]:text-zinc-50 dark:data-[state=active]:bg-zinc-100 dark:data-[state=active]:text-zinc-900 data-[state=active]:shadow-md dark:data-[state=active]:border-transparent transition-all'\n            >\n              <span className='font-semibold text-[11px] sm:text-sm'>{tab.name}</span>\n              <span\n                className={`px-1.5 sm:px-2 py-0.5 rounded-md text-[9px] sm:text-[10px] font-bold tabular-nums transition-colors ${tab.badgeColor}`}\n              >\n                {tab.count}\n              </span>\n            </TabsTrigger>\n          ))}\n        </TabsList>\n\n        <div className='flex-1 py-1'>\n          {taskBoard.map(tab => (\n            <TabsContent key={tab.value} value={tab.value} className='m-0 animate-in slide-in-from-right-4 fade-in duration-500'>\n              <div className='rounded-2xl border bg-card p-4 sm:p-6 flex flex-col gap-2'>\n                <div className='flex items-center justify-between border-b border-border/50 pb-3'>\n                  <h4 className='text-base sm:text-lg font-bold tracking-tight text-foreground'>\n                    {tab.name} Queue\n                  </h4>\n                  <div className='text-muted-foreground hidden sm:block text-[10px] sm:text-xs font-bold bg-muted px-2 py-0.5 sm:px-3 sm:py-1 rounded-full'>\n                    {tab.count} Items\n                  </div>\n                </div>\n                <p className='mt-1 text-muted-foreground text-[13px] sm:text-sm'>\n                  {tab.content}\n                </p>\n                <div className='flex justify-end'>\n                  <Button variant=\"link\" className='h-auto p-0 text-[11px] sm:text-xs font-semibold text-primary hover:underline underline-offset-4'>\n                    View all {tab.name.toLowerCase()} tasks\n                  </Button>\n                </div>\n              </div>\n            </TabsContent>\n          ))}\n        </div>\n      </Tabs>\n  )\n}\n\nexport default Tabs18\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-19",
      "type": "registry:component",
      "title": "Tabs 19",
      "description": "Tabs 19. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-19.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst travelOptions = [\n  {\n    name: 'Stays',\n    value: 'stays',\n    price: 'From $80/night',\n    content:\n      'Find the perfect place to rest. From cozy budget hostels to five-star luxury resorts, browse thousands of accommodations worldwide to match your travel style.'\n  },\n  {\n    name: 'Flights',\n    value: 'flights',\n    price: 'Deals Daily',\n    content:\n      'Take to the skies without breaking the bank. Compare prices across hundreds of airlines and book your next adventure with our seamless ticketing system.'\n  },\n  {\n    name: 'Experiences',\n    value: 'experiences',\n    price: 'Top Rated',\n    content:\n      'Immerse yourself in local culture. Book guided tours, adventurous excursions, and exclusive culinary events curated by local experts.'\n  }\n]\n\nconst Tabs19 = () => {\n  return (\n    <Tabs defaultValue='stays' orientation='vertical' className='w-full flex gap-3 sm:gap-8 min-h-[200px] px-1'>\n      <TabsList className='bg-transparent flex-col h-auto shrink-0 gap-2 rounded-none border-l-2 border-amber-200/50 p-0 pl-0 dark:border-amber-900/50'>\n        {travelOptions.map(tab => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className='data-[state=active]:border-amber-500 data-[state=active]:bg-amber-50 data-[state=active]:text-amber-700 dark:data-[state=active]:bg-amber-900/20 dark:data-[state=active]:text-amber-400 -ml-[2px] w-full justify-start rounded-none rounded-r-xl border border-transparent border-l-2 px-2 sm:px-3 py-1 font-bold transition-all data-[state=active]:shadow-none! text-[11px] sm:text-sm'\n          >\n            {tab.name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className='flex-1'>\n        {travelOptions.map(tab => (\n          <TabsContent key={tab.value} value={tab.value} className='m-0 animate-in fade-in slide-in-from-bottom-2 duration-700'>\n            <div className='relative flex flex-col gap-3 overflow-hidden rounded-3xl border border-amber-200/80 bg-amber-50/50 p-4 sm:p-6 dark:border-amber-900/50 dark:bg-amber-950/20'>\n              <div className='absolute -right-6 -top-6 h-28 w-28 rounded-full bg-amber-300/40 blur-3xl dark:bg-amber-700/30' />\n              <div className='flex items-baseline justify-between'>\n                <h4 className='text-xl sm:text-2xl font-semibold tracking-tight text-amber-950 dark:text-amber-50'>\n                  {tab.name}\n                </h4>\n              </div>\n              <p className='z-10 text-[13px] sm:text-sm leading-relaxed text-amber-900/80 dark:text-amber-100/70'>\n                {tab.content}\n              </p>\n              <div className='z-10 mt-2'>\n                <button className='rounded-full bg-amber-500 px-4 py-2 text-[10px] sm:px-6 sm:py-2.5 sm:text-xs font-bold text-white shadow-md transition-transform hover:-translate-y-0.5 active:translate-y-0 dark:bg-amber-600'>\n                  Explore {tab.name}\n                </button>\n              </div>\n            </div>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  )\n}\n\nexport default Tabs19\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-20",
      "type": "registry:component",
      "title": "Tabs 20",
      "description": "Tabs 20. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-20.tsx",
          "type": "registry:component",
          "content": "import {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst audioFeatures = [\n  {\n    name: 'Playlists',\n    value: 'playlists',\n    song: 'Midnight Drive',\n    artist: 'The Midnight',\n    content:\n      'Curate your perfect soundtrack. Organize your favorite tracks into custom playlists for every mood, workout, or late-night drive.',\n  },\n  {\n    name: 'Podcasts',\n    value: 'podcasts',\n    song: 'Tech Today',\n    artist: 'Developer Chronicles',\n    content:\n      'Stay informed and entertained. Subscribe to top-rated tech podcasts, download episodes for offline listening, and never miss an update.',\n  },\n  {\n    name: 'Radio',\n    value: 'radio',\n    song: 'Lo-Fi Chill Beats',\n    artist: 'Global Station',\n    content:\n      'Discover new music effortlessly. Tune into algorithm-generated stations based on your listening history and favorite genres.',\n  },\n];\n\nconst Tabs20 = () => {\n  return (\n    <Tabs\n      defaultValue=\"playlists\"\n      orientation=\"vertical\"\n      className=\"flex gap-4\"\n    >\n      <TabsList className=\"bg-background h-auto shrink-0 flex-col gap-1 rounded-none p-0\">\n        {audioFeatures.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"flex w-full justify-start rounded-none border-0 border-l-2 border-transparent px-3 py-1 font-medium transition-all data-[state=active]:border-rose-500 data-[state=active]:text-rose-700 data-[state=active]:shadow-none! dark:data-[state=active]:text-rose-400\"\n          >\n            {tab.name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className=\"flex-1\">\n        {audioFeatures.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in fade-in slide-in-from-right-4 m-0 duration-500\"\n          >\n            <div className=\"rounded-3xl border border-rose-100 bg-rose-50/30 p-6 dark:border-rose-900/30 dark:bg-rose-950/20\">\n              <div className=\"mb-4 flex items-center gap-3\">\n                <div>\n                  <h4 className=\"text-base font-bold tracking-tight text-rose-950 dark:text-rose-50\">\n                    Now Playing: {tab.song}\n                  </h4>\n                  <span className=\"text-[10px] font-bold tracking-widest text-rose-600 uppercase dark:text-rose-400\">\n                    {tab.artist}\n                  </span>\n                </div>\n              </div>\n\n              <p className=\"text-sm leading-relaxed text-rose-900/70 dark:text-rose-100/60\">\n                {tab.content}\n              </p>\n\n              <div className=\"mt-4 overflow-hidden rounded-full outline outline-1 outline-rose-200/50 dark:outline-rose-800/50\">\n                <div className=\"h-1.5 w-full bg-rose-200 dark:bg-rose-900/50\">\n                  <div className=\"h-full w-2/5 rounded-r-full bg-rose-500 dark:bg-rose-400\" />\n                </div>\n              </div>\n            </div>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  );\n};\n\nexport default Tabs20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-21",
      "type": "registry:component",
      "title": "Tabs 21",
      "description": "Tabs 21. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-21.tsx",
          "type": "registry:component",
          "content": "import {\n  IconCloudUpload,\n  IconDownload,\n  IconSettings,\n} from '@tabler/icons-react';\n\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst documentation = [\n  {\n    name: 'Installation',\n    value: 'installation',\n    icon: IconDownload,\n    title: 'Getting Started',\n    content:\n      'Our package requires Node.js v16+ and a modern package manager. Run the installation script in your terminal to automatically configure the necessary dependencies, add utility functions, and inject boilerplate code directly into your current workspace.',\n  },\n  {\n    name: 'Configuration',\n    value: 'config',\n    icon: IconSettings,\n    title: 'Tailoring the Setup',\n    content:\n      'Out of the box, our system provides sensible, secure defaults. However, you can override any setting by creating a unified config file at the root of your project. This allows you to customize the underlying themes, routing logic, and compiler options.',\n  },\n  {\n    name: 'Deployment',\n    value: 'deployment',\n    icon: IconCloudUpload,\n    title: 'Going Live',\n    content:\n      'When you are ready to ship, our CLI wraps your application into an optimized, minified production build. You can deploy it to Vercel, Netlify, or any standard Node server environment simply by passing the production build flag.',\n  },\n];\n\nconst Tabs21 = () => {\n  return (\n    <Tabs\n      defaultValue=\"installation\"\n      orientation=\"vertical\"\n      className=\"flex gap-10\"\n    >\n      <TabsList className=\"bg-muted h-auto flex-col items-center gap-2 rounded-2xl p-1\">\n        {documentation.map(({ icon: Icon, name, value }) => (\n          <Tooltip key={value}>\n            <TooltipTrigger asChild>\n              <span>\n                <TabsTrigger\n                  value={value}\n                  className=\"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:hover:bg-muted dark:data-[state=active]:bg-primary relative flex size-8 items-center justify-center rounded-full py-1 transition-all duration-300 data-[state=active]:shadow-lg\"\n                >\n                  <Icon size={22} stroke={2} />\n                </TabsTrigger>\n              </span>\n            </TooltipTrigger>\n            <TooltipContent\n              className=\"px-3 py-1.5 text-xs font-bold\"\n              side=\"right\"\n            >\n              {name}\n            </TooltipContent>\n          </Tooltip>\n        ))}\n      </TabsList>\n\n      <div className=\"flex-1\">\n        {documentation.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in slide-in-from-right-8 fade-in m-0 duration-500\"\n          >\n            {/* Typographic Layout - No Card Wrapper */}\n            <h3 className=\"text-foreground text-2xl font-semibold tracking-tighter\">\n              {tab.title}.\n            </h3>\n\n            <div className=\"bg-primary my-2.5 h-1 w-12 rounded-full\" />\n\n            <p className=\"text-muted-foreground text-sm\">{tab.content}</p>\n\n            <div className=\"border-border mt-4 border-t border-dashed pt-2\">\n              <p className=\"text-muted-foreground/50 text-xs font-semibold\">\n                Documentation • Last updated today\n              </p>\n            </div>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  );\n};\n\nexport default Tabs21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-22",
      "type": "registry:component",
      "title": "Tabs 22",
      "description": "Tabs 22. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-22.tsx",
          "type": "registry:component",
          "content": "import {\n  IconGitBranch,\n  IconGitCommit,\n  IconGitMerge,\n} from '@tabler/icons-react';\n\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst changelog = [\n  {\n    name: 'Version 4.0',\n    value: 'v4',\n    icon: IconGitMerge,\n    date: 'Today',\n    features: [\n      'Introduced a brand new dark mode theme engine with dynamic contrast adjustments.',\n      'Completely rewrote the client-side routing system resulting in 40% faster page loads.',\n      'Added comprehensive multi-language support (i18n) spanning 15+ new locales.',\n      'Officially deprecated the legacy API endpoints and retired v1 documentation.',\n    ],\n  },\n  {\n    name: 'Version 3.2',\n    value: 'v3.2',\n    icon: IconGitCommit,\n    date: 'Last Month',\n    features: [\n      'Resolved a critical memory leak that occurred during prolonged websocket connections.',\n      'Optimized our image pipeline to leverage next-gen formats like WebP and AVIF.',\n      'Added a new dashboard widget allowing administrators to export user analytics to CSV.',\n    ],\n  },\n  {\n    name: 'Version 3.0',\n    value: 'v3',\n    icon: IconGitBranch,\n    date: 'August 2023',\n    features: [\n      'Executed a major structural overhaul of the database schema to handle extreme scale.',\n      'Released the very first public beta of our highly requested mobile application.',\n      'Introduced true end-to-end encryption for all peer-to-peer direct messages.',\n    ],\n  },\n];\n\nconst Tabs22 = () => {\n  return (\n    <Tabs defaultValue=\"v4\" orientation=\"vertical\" className=\"w-full flex gap-3 sm:gap-8 min-h-[200px] px-1\">\n      <TabsList className=\"bg-muted h-full shrink-0 flex-col gap-1 rounded-2xl p-1\">\n        {changelog.map(({ icon: Icon, name, value }) => (\n          <TabsTrigger\n            key={value}\n            value={value}\n            className=\"text-muted-foreground hover:bg-muted/50 data-[state=active]:bg-primary data-[state=active]:text-primary-foreground flex w-full items-center justify-start gap-1.5 sm:gap-2 rounded-xl px-2 sm:px-3 py-1 font-medium transition-all data-[state=active]:shadow-none text-[11px] sm:text-sm\"\n          >\n            <Icon className=\"size-[14px] sm:size-[18px]\" stroke={2.5} />\n            {name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className=\"flex-1 pb-4\">\n        {changelog.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in fade-in slide-in-from-bottom-2 m-0 duration-500\"\n          >\n            <div className=\"border-border/50 mb-4 flex flex-col items-start justify-between gap-2 border-b pb-3 sm:flex-row sm:items-end\">\n              <h4 className=\"text-foreground text-lg sm:text-2xl font-bold tracking-tight\">\n                Release {tab.name}\n              </h4>\n            </div>\n\n            <ul className=\"space-y-3\">\n              {tab.features.map((feature, idx) => (\n                <li key={idx} className=\"flex items-start gap-2 sm:gap-4\">\n                  <div className=\"bg-primary ring-primary/20 mt-1.5 sm:mt-2 flex h-1 w-1 sm:h-1.5 sm:w-1.5 shrink-0 items-center justify-center rounded-full ring-2 sm:ring-4\" />\n                  <span className=\"text-muted-foreground text-[11px] sm:text-xs\">\n                    {feature}\n                  </span>\n                </li>\n              ))}\n            </ul>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  );\n};\n\nexport default Tabs22;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-23",
      "type": "registry:component",
      "title": "Tabs 23",
      "description": "Tabs 23. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-23.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst inbox = [\n  {\n    name: 'Mentions',\n    value: 'mentions',\n    count: 3,\n    items: [\n      {\n        user: '@marcus_dev',\n        time: '10m ago',\n        text: 'Mentioned you in #frontend-team: \"Could you review the new dropdown semantics?\"',\n      },\n      {\n        user: '@sarah',\n        time: '1h ago',\n        text: 'Mentioned you in PR #405: \"Fixed the alignment issue here, what do you think?\"',\n      },\n      {\n        user: '@design_bot',\n        time: '2h ago',\n        text: 'Tagged you in Figma: \"New assets uploaded for the dashboard redesign\"',\n      },\n    ],\n  },\n  {\n    name: 'Direct',\n    value: 'direct',\n    count: 1,\n    items: [\n      {\n        user: '@alex_boss',\n        time: '5m ago',\n        text: '\"Hey, do you have a minute for a quick sync before the client meeting?\"',\n      },\n    ],\n  },\n  {\n    name: 'System',\n    value: 'system',\n    count: 2,\n    items: [\n      {\n        user: 'Security',\n        time: 'Yesterday',\n        text: 'New login detected from unusual location. Please review your active sessions.',\n      },\n      {\n        user: 'Billing',\n        time: '2 days ago',\n        text: 'Your upcoming invoice is available. No action is required.',\n      },\n    ],\n  },\n];\n\nconst Tabs23 = () => {\n  return (\n    <Tabs defaultValue=\"mentions\" orientation=\"vertical\" className=\"w-full flex gap-3 sm:gap-8 min-h-[200px] px-1\">\n      <TabsList className=\"bg-muted h-full shrink-0 flex-col gap-2 rounded-2xl p-1\">\n        {inbox.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"group hover:bg-muted/50 data-[state=active]:border-primary/20 data-[state=active]:bg-primary/10 data-[state=active]:text-primary flex w-full items-center justify-between gap-1 sm:gap-1.5 rounded-xl border border-transparent px-2 sm:px-3 py-1 font-medium transition-all data-[state=active]:shadow-sm text-[11px] sm:text-sm\"\n          >\n            {tab.name}\n            {tab.count > 0 && (\n              <Badge className=\"group-data-[state=active]:bg-primary group-data-[state=active]:text-primary-foreground h-4 min-w-4 sm:h-5 sm:min-w-5 px-1 sm:px-1.5 tabular-nums transition-colors text-[9px] sm:text-[10px]\">\n                {tab.count}\n              </Badge>\n            )}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className=\"flex-1\">\n        {inbox.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in fade-in slide-in-from-right-4 m-0 duration-500\"\n          >\n            <h4 className=\"text-foreground mb-4 sm:mb-6 text-lg sm:text-2xl font-bold tracking-tight\">\n              {tab.name}\n            </h4>\n\n            <div className=\"relative flex flex-col gap-4 sm:gap-6\">\n              <div className=\"bg-border/40 absolute top-4 bottom-4 left-[15px] sm:left-[19px] w-px\" />\n\n              {tab.items.map((item, idx) => (\n                <div key={idx} className=\"group flex items-start gap-3 sm:gap-4\">\n                  <div className=\"bg-background border-muted group-hover:border-primary/50 z-10 flex h-8 w-8 sm:h-10 sm:w-10 shrink-0 items-center justify-center rounded-full border-2 shadow-sm transition-colors\">\n                    <span className=\"text-muted-foreground group-hover:text-primary text-[10px] sm:text-xs font-bold transition-colors\">\n                      {item.user\n                        .charAt(item.user.startsWith('@') ? 1 : 0)\n                        .toUpperCase()}\n                    </span>\n                  </div>\n                  <div className=\"flex flex-col gap-1 sm:gap-1.5 pt-0.5\">\n                    <div className=\"flex items-center gap-1.5 sm:gap-2.5 hidden sm:block\">\n                      <span className=\"text-foreground font-semibold text-[12px] sm:text-sm mr-2\">\n                        {item.user}\n                      </span>\n                      <span className=\"bg-muted text-muted-foreground rounded-md px-1.5 py-0.5 text-[8px] sm:text-[10px] tracking-wider uppercase\">\n                        {item.time}\n                      </span>\n                    </div>\n                    <p className=\"text-muted-foreground max-w-sm text-[11px] sm:text-sm leading-relaxed\">\n                      {item.text}\n                    </p>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  );\n};\n\nexport default Tabs23;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-24",
      "type": "registry:component",
      "title": "Tabs 24",
      "description": "Tabs 24. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-24.tsx",
          "type": "registry:component",
          "content": "import {\n  IconArrowDownRight,\n  IconArrowUpRight,\n  IconMinus,\n} from '@tabler/icons-react';\n\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst performanceOverview = [\n  {\n    name: 'Traffic',\n    value: 'traffic',\n    stats: [\n      { label: 'Unique Visitors', value: '124.5K', trend: '+12%', type: 'up' },\n      { label: 'Bounce Rate', value: '42.3%', trend: '-4%', type: 'down' },\n      { label: 'Session Duration', value: '3m 14s', trend: '+2s', type: 'up' },\n      { label: 'Direct Traffic', value: '28%', trend: '0%', type: 'neutral' },\n    ],\n  },\n  {\n    name: 'Sales',\n    value: 'sales',\n    stats: [\n      { label: 'Gross Revenue', value: '$84,230', trend: '+18%', type: 'up' },\n      { label: 'Refunds Issued', value: '$1,200', trend: '+2%', type: 'down' },\n      { label: 'Avg Order Value', value: '$68.50', trend: '+5%', type: 'up' },\n      { label: 'Conversion Rate', value: '3.2%', trend: '-0.4%', type: 'down' },\n    ],\n  },\n  {\n    name: 'Acquisition',\n    value: 'acquisition',\n    stats: [\n      { label: 'Blended CAC', value: '$12.40', trend: '-8%', type: 'up' },\n      { label: 'Organic Search', value: '45K', trend: '+14%', type: 'up' },\n      { label: 'Social Media', value: '18K', trend: '+2%', type: 'up' },\n      { label: 'Email Marketing', value: '22K', trend: '-1%', type: 'down' },\n    ],\n  },\n];\n\nconst Tabs24 = () => {\n  return (\n    <Tabs defaultValue=\"traffic\" orientation=\"vertical\" className=\"w-full flex gap-3 sm:gap-10 min-h-[200px] px-1\">\n      <TabsList className=\"h-auto shrink-0 flex-col gap-2 rounded-none bg-transparent p-0\">\n        {performanceOverview.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"text-muted-foreground hover:bg-muted/50 data-[state=active]:bg-background data-[state=active]:border-border data-[state=active]:text-foreground w-full !justify-center rounded-xl border border-transparent px-1.5 sm:px-2 py-1 text-center font-medium transition-all text-[11px] sm:text-sm\"\n          >\n            {tab.name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className=\"flex-1 pb-4\">\n        {performanceOverview.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in fade-in slide-in-from-left-4 m-0 duration-500\"\n          >\n            <h4 className=\"text-foreground mb-8 text-lg sm:text-2xl font-bold tracking-tight\">\n              {tab.name} Metrics\n            </h4>\n\n            <div className=\"grid grid-cols-2 gap-x-2 sm:gap-x-8 gap-y-5 sm:gap-y-10\">\n              {tab.stats.map((stat, idx) => (\n                <div key={idx} className=\"flex flex-col gap-1\">\n                  <span className=\"text-muted-foreground text-[10px] sm:text-xs font-bold uppercase tracking-tight\">\n                    {stat.label}\n                  </span>\n                  <div className=\"flex flex-col sm:flex-row sm:items-end gap-0.5 sm:gap-2\">\n                    <span className=\"text-foreground text-base sm:text-2xl font-bold tracking-tighter tabular-nums leading-none\">\n                      {stat.value}\n                    </span>\n                    <span\n                      className={`flex items-center pb-0 sm:pb-1.5 text-[9px] sm:text-xs font-bold ${\n                        stat.type === 'up'\n                          ? 'text-emerald-500 dark:text-emerald-400'\n                          : stat.type === 'down'\n                            ? 'text-rose-500 dark:text-rose-400'\n                            : 'text-zinc-500 dark:text-zinc-400'\n                      }`}\n                    >\n                      {stat.type === 'up' && (\n                        <IconArrowUpRight\n                          className=\"size-[10px] sm:size-[14px] mr-0.5\"\n                          stroke={3}\n                        />\n                      )}\n                      {stat.type === 'down' && (\n                        <IconArrowDownRight\n                          className=\"size-[10px] sm:size-[14px] mr-0.5\"\n                          stroke={3}\n                        />\n                      )}\n                      {stat.type === 'neutral' && (\n                        <IconMinus className=\"size-[10px] sm:size-[14px] mr-0.5\" stroke={3} />\n                      )}\n                      {stat.trend}\n                    </span>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  );\n};\n\nexport default Tabs24;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-25",
      "type": "registry:component",
      "title": "Tabs 25",
      "description": "Tabs 25. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [
        "@tabler/icons-react"
      ],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-25.tsx",
          "type": "registry:component",
          "content": "import { IconDotsVertical, IconMail } from '@tabler/icons-react';\n\nimport {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '@/components/base-ui/tabs';\n\nconst teams = [\n  {\n    name: 'Engineering',\n    value: 'engineering',\n    members: [\n      { name: 'Alice Chen', role: 'Frontend Lead', status: 'Online' },\n      { name: 'Bob Smith', role: 'Backend Developer', status: 'Busy' },\n      { name: 'Charlie Davis', role: 'DevOps Engineer', status: 'Offline' },\n    ],\n  },\n  {\n    name: 'Design',\n    value: 'design',\n    members: [\n      { name: 'Diana Prince', role: 'Product Designer', status: 'Online' },\n      { name: 'Evan Wright', role: 'UX Researcher', status: 'Online' },\n    ],\n  },\n  {\n    name: 'Marketing',\n    value: 'marketing',\n    members: [\n      {\n        name: 'Fiona Gallagher',\n        role: 'Content Strategist',\n        status: 'Offline',\n      },\n      { name: 'George Miller', role: 'Growth Hacker', status: 'Busy' },\n      { name: 'Hannah Lee', role: 'Social Media Manager', status: 'Online' },\n    ],\n  },\n];\n\nconst Tabs25 = () => {\n  return (\n    <Tabs defaultValue=\"engineering\" className=\"flex flex-col gap-2\">\n      <TabsList className=\"bg-background flex h-auto w-fit gap-2 rounded-none p-0\">\n        {teams.map((tab) => (\n          <TabsTrigger\n            key={tab.value}\n            value={tab.value}\n            className=\"text-muted-foreground hover:border-border hover:bg-muted hover:text-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:data-[state=active]:bg-primary rounded-xl border border-transparent px-3 py-1 font-medium shadow-none transition-all duration-300 data-[state=active]:border-transparent data-[state=active]:shadow-md dark:data-[state=active]:border-transparent\"\n          >\n            {tab.name}\n          </TabsTrigger>\n        ))}\n      </TabsList>\n\n      <div className=\"mt-2 w-full\">\n        {teams.map((tab) => (\n          <TabsContent\n            key={tab.value}\n            value={tab.value}\n            className=\"animate-in fade-in slide-in-from-bottom-2 m-0 duration-300\"\n          >\n            <div className=\"flex flex-col\">\n              {tab.members.map((member, idx) => (\n                <div\n                  key={idx}\n                  className=\"group border-border/40 hover:bg-muted/20 flex items-center justify-between border-b py-3.5 transition-colors last:border-0\"\n                >\n                  <div className=\"flex items-center gap-4 px-2\">\n                    <div className=\"bg-muted text-muted-foreground relative flex h-10 w-10 shrink-0 items-center justify-center rounded-full font-bold shadow-sm\">\n                      {member.name.charAt(0)}\n                      <span\n                        className={`border-background absolute right-0 bottom-0 h-3 w-3 rounded-full border-2 ${\n                          member.status === 'Online'\n                            ? 'bg-emerald-500'\n                            : member.status === 'Busy'\n                              ? 'bg-amber-500'\n                              : 'bg-zinc-400'\n                        }`}\n                      />\n                    </div>\n                    <div className=\"flex flex-col\">\n                      <span className=\"text-foreground text-sm font-semibold\">\n                        {member.name}\n                      </span>\n                      <span className=\"text-muted-foreground text-xs\">\n                        {member.role}\n                      </span>\n                    </div>\n                  </div>\n\n                  <div className=\"flex items-center gap-1 pr-2 opacity-0 transition-opacity group-hover:opacity-100\">\n                    <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground rounded-md p-2 transition-colors\">\n                      <IconMail size={16} />\n                    </button>\n                    <button className=\"text-muted-foreground hover:bg-muted hover:text-foreground rounded-md p-2 transition-colors\">\n                      <IconDotsVertical size={16} />\n                    </button>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </TabsContent>\n        ))}\n      </div>\n    </Tabs>\n  );\n};\n\nexport default Tabs25;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs-26",
      "type": "registry:component",
      "title": "Tabs 26",
      "description": "Tabs 26. A set of layered sections of content—known as tab panels—that are displayed one at a time.",
      "dependencies": [],
      "registryDependencies": [
        "tabs"
      ],
      "files": [
        {
          "path": "components/watermelon/tabs-26.tsx",
          "type": "registry:component",
          "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/base-ui/tabs'\n\nconst productInfo = [\n  {\n    name: 'Specifications',\n    value: 'specs',\n    data: [\n      { label: 'Processor', value: 'M4 Pro (12-core CPU, 18-core GPU)' },\n      { label: 'Memory', value: '32GB Unified Memory (LPDDR5X)' },\n      { label: 'Storage', value: '2TB NVMe Solid State Drive' },\n      { label: 'Display', value: '14.2-inch Liquid Retina XDR (120Hz)' },\n      { label: 'Battery Life', value: 'Up to 22 hours video playback' }\n    ]\n  },\n  {\n    name: 'Dimensions',\n    value: 'dimensions',\n    data: [\n      { label: 'Height', value: '0.61 inch (1.55 cm)' },\n      { label: 'Width', value: '12.31 inches (31.26 cm)' },\n      { label: 'Depth', value: '8.71 inches (22.12 cm)' },\n      { label: 'Weight', value: '3.5 pounds (1.6 kg)' },\n      { label: 'Form Factor', value: 'Unibody Recycled Aluminum' }\n    ]\n  },\n  {\n    name: 'In the Box',\n    value: 'box',\n    data: [\n      { label: 'Computer', value: '14-inch Studio Pro Laptop' },\n      { label: 'Power', value: '96W USB-C Power Adapter (Fast Charge)' },\n      { label: 'Cable', value: 'USB-C to MagSafe 3 Cable (2m)' },\n      { label: 'Documentation', value: 'Quick Start Guide & Warranty' }\n    ]\n  }\n]\n\nconst Tabs26 = () => {\n  return (\n    <div className='w-full max-w-xl'>\n      <Tabs defaultValue='specs' className='flex flex-col'>\n        <div className='w-full overflow-x-auto overflow-y-hidden py-0.5 no-scrollbar'>\n          <TabsList className='bg-transparent h-9 flex w-fit justify-start rounded-none border-b border-border/50 p-0 gap-4'>\n            {productInfo.map(tab => (\n              <TabsTrigger\n                key={tab.value}\n                value={tab.value}\n                className='h-full min-w-fit rounded-none border-0 border-b-2 border-transparent px-1 sm:px-3 py-1 font-medium text-muted-foreground transition-all hover:border-muted-foreground/30 hover:text-foreground data-[state=active]:border-primary data-[state=active]:text-foreground data-[state=active]:shadow-none! dark:hover:text-foreground text-sm'\n              >\n                {tab.name}\n              </TabsTrigger>\n            ))}\n          </TabsList>\n        </div>\n\n        <div className='mt-4 w-full'>\n          {productInfo.map(tab => (\n            <TabsContent key={tab.value} value={tab.value} className='m-0 animate-in fade-in slide-in-from-bottom-2 duration-300'>\n              <div className='flex flex-col'>\n                {tab.data.map((row, idx) => (\n                  <div\n                    key={idx}\n                    className='group flex flex-col justify-between border-b border-dashed border-border/60 py-2.5 transition-colors sm:flex-row sm:items-center gap-1 sm:gap-4 last:border-0 hover:border-foreground/20'\n                  >\n                    <span className='text-[13px] sm:text-sm text-muted-foreground transition-colors group-hover:text-foreground/80'>\n                      {row.label}\n                    </span>\n                    <span className='text-[13px] sm:text-sm font-medium text-foreground sm:text-right'>\n                      {row.value}\n                    </span>\n                  </div>\n                ))}\n              </div>\n            </TabsContent>\n          ))}\n        </div>\n      </Tabs>\n    </div>\n  )\n}\n\nexport default Tabs26\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-1",
      "type": "registry:component",
      "title": "Textarea 1",
      "description": "Textarea 1. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-1.tsx",
          "type": "registry:component",
          "content": "import { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea1 = () => {\n  return (\n    <Textarea\n      placeholder=\"Write something...\"\n      className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 w-full max-w-sm rounded-sm shadow-sm focus-visible:ring-2\"\n    />\n  );\n};\n\nexport default Textarea1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-2",
      "type": "registry:component",
      "title": "Textarea 2",
      "description": "Textarea 2. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-2.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea2 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Your input</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Share your thoughts...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm focus-visible:ring-2\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-3",
      "type": "registry:component",
      "title": "Textarea 3",
      "description": "Textarea 3. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-3.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea3 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Add details</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Write your response...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm focus-visible:ring-2\"\n      />\n      <p className=\"text-muted-foreground text-right text-xs\">\n        This helps us understand your input better.\n      </p>\n    </div>\n  );\n};\n\nexport default Textarea3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-4",
      "type": "registry:component",
      "title": "Textarea 4",
      "description": "Textarea 4. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-4.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea4 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>\n        Issue description <span className=\"text-destructive\">*</span>\n      </Label>\n      <Textarea\n        id={id}\n        placeholder=\"Describe the issue you're facing...\"\n        required\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm focus-visible:ring-2\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-5",
      "type": "registry:component",
      "title": "Textarea 5",
      "description": "Textarea 5. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-5.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea5 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Styled textarea</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Start typing...\"\n        className=\"focus-visible:border-emerald-500 focus-visible:ring-emerald-500/20 dark:focus-visible:ring-emerald-500/40\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-6",
      "type": "registry:component",
      "title": "Textarea 6",
      "description": "Textarea 6. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-6.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { FaPen } from 'react-icons/fa';\n\nimport { Textarea } from '@/components/base-ui/textarea';\nimport { Label } from '@/components/base-ui/label';\n\nconst Textarea6 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Write a note</Label>\n      <div className=\"group relative\">\n        <div className=\"text-muted-foreground pointer-events-none absolute top-2.5 left-0 flex origin-bottom items-center justify-center pl-3 transition-transform duration-200 group-focus-within:rotate-12 peer-disabled:opacity-50\">\n          <FaPen className=\"size-4\" />\n          <span className=\"sr-only\">Note</span>\n        </div>\n        <Textarea\n          id={id}\n          placeholder=\"Jot down your thoughts...\"\n          className=\"peer focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm pl-9 shadow-sm focus-visible:ring-2\"\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default Textarea6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-7",
      "type": "registry:component",
      "title": "Textarea 7",
      "description": "Textarea 7. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-7.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { FaLightbulb } from 'react-icons/fa';\n\nimport { Textarea } from '@/components/base-ui/textarea';\nimport { Label } from '@/components/base-ui/label';\n\nconst Textarea7 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Idea</Label>\n      <div className=\"group relative\">\n        <div className=\"text-muted-foreground pointer-events-none absolute top-2.5 right-0 flex items-center justify-center pr-3 transition-colors duration-200 group-focus-within:text-yellow-500 peer-disabled:opacity-50\">\n          <FaLightbulb className=\"size-4\" />\n          <span className=\"sr-only\">Idea</span>\n        </div>\n        <Textarea\n          id={id}\n          placeholder=\"Share your idea...\"\n          className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm pr-9 shadow-sm focus-visible:ring-2\"\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default Textarea7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-8",
      "type": "registry:component",
      "title": "Textarea 8",
      "description": "Textarea 8. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-8.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea8 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Reason for request</Label>\n      <Textarea\n        id={id}\n        aria-invalid\n        placeholder=\"Explain your request...\"\n        className=\"border-destructive focus-visible:border-destructive\"\n      />\n      <p className=\"text-destructive text-xs\">This field can’t be empty.</p>\n    </div>\n  );\n};\n\nexport default Textarea8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-9",
      "type": "registry:component",
      "title": "Textarea 9",
      "description": "Textarea 9. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-9.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea9 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <div className=\"flex items-center justify-between gap-1\">\n        <Label htmlFor={id}>Additional notes</Label>\n        <span className=\"text-muted-foreground text-xs\">Optional</span>\n      </div>\n      <Textarea\n        id={id}\n        placeholder=\"Add any extra details...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-10",
      "type": "registry:component",
      "title": "Textarea 10",
      "description": "Textarea 10. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-10.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/ui/label';\nimport { Textarea } from '@/components/ui/textarea';\n\nconst Textarea10 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"relative w-full max-w-xs space-y-2\">\n      <Label\n        htmlFor={id}\n        className=\"bg-background text-foreground absolute top-0 left-2 z-10 block -translate-y-1/2 px-1 text-xs font-medium group-has-disabled:opacity-50\"\n      >\n        Your message\n      </Label>\n      <Textarea\n        id={id}\n        placeholder=\"Type your message here...\"\n        className=\"!bg-background focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm focus-visible:ring-2\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-11",
      "type": "registry:component",
      "title": "Textarea 11",
      "description": "Textarea 11. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-11.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea11 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"group relative w-full max-w-sm space-y-2\">\n      <label\n        htmlFor={id}\n        className=\"origin-start text-muted-foreground/70 group-focus-within:text-foreground absolute top-0 block translate-y-2 cursor-text px-2 text-sm transition-all group-focus-within:pointer-events-none group-focus-within:-translate-y-1/2 group-focus-within:scale-95 group-focus-within:cursor-default group-focus-within:text-xs group-focus-within:font-medium has-[+textarea:not(:placeholder-shown)]:pointer-events-none has-[+textarea:not(:placeholder-shown)]:-translate-y-1/2 has-[+textarea:not(:placeholder-shown)]:cursor-default has-[+textarea:not(:placeholder-shown)]:text-xs has-[+textarea:not(:placeholder-shown)]:font-medium\"\n      >\n        <span className=\"bg-background inline-flex px-1\">Project summary</span>\n      </label>\n      <Textarea\n        id={id}\n        placeholder=\" \"\n        className=\"!bg-background focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-12",
      "type": "registry:component",
      "title": "Textarea 12",
      "description": "Textarea 12. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-12.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea12 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Auto-generated summary</Label>\n      <Textarea\n        id={id}\n        placeholder=\"This content is generated automatically\"\n        disabled\n        className=\"cursor-not-allowed opacity-70\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-13",
      "type": "registry:component",
      "title": "Textarea 13",
      "description": "Textarea 13. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-13.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea13 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Generated output</Label>\n      <Textarea\n        id={id}\n        className=\"read-only:bg-muted focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-[inset_0_-1px_0_0px_rgba(0,0,0,0.04),inset_0_1px_0_0px_rgba(255,255,255,0.5)]  focus-visible:ring-2 dark:shadow-[inset_0_-1px_0_1px_rgba(0,0,0,0.04),inset_0_1px_0px_0px_rgba(255,255,255,0.2)]\"\n        defaultValue=\"This content is generated and cannot be edited.\"\n        placeholder=\"Output will appear here...\"\n        readOnly\n      />\n    </div>\n  );\n};\n\nexport default Textarea13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-14",
      "type": "registry:component",
      "title": "Textarea 14",
      "description": "Textarea 14. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-14.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea14 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Live input</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Start typing and it will expand...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 field-sizing-content max-h-30 min-h-0 resize-none rounded-sm py-1.75 shadow-sm\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-15",
      "type": "registry:component",
      "title": "Textarea 15",
      "description": "Textarea 15. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-15.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea15 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Fixed size Textarea</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Enter your response...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 [resize:none]\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea15;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-16",
      "type": "registry:component",
      "title": "Textarea 16",
      "description": "Textarea 16. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-16.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\nimport { Textarea } from '@/components/base-ui/textarea';\nconst Textarea16 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"border-input bg-transparent focus-within:border-primary/50 focus-within:ring-primary/20 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive relative w-full max-w-sm rounded-md border shadow-xs transition-[color,box-shadow] outline-none focus-within:ring-[3px] has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-[input:is(:disabled)]:*:pointer-events-none overflow-hidden \"> \n      <label\n        htmlFor={id}\n        className=\"text-foreground block px-3 pt-1 text-xs font-medium bg-transparent dark:bg-input/30\"\n      >\n        Quick note\n      </label>\n      <Textarea\n        id={id}\n        placeholder=\"Write something short...\"\n        className=\"text-foreground placeholder:text-muted-foreground/70 flex min-h-14! w-full border-none px-3! py-0 py-1.5 text-sm focus-visible:ring-0 focus-visible:outline-none rounded-none\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea16;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-17",
      "type": "registry:component",
      "title": "Textarea 17",
      "description": "Textarea 17. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-17.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Button } from '@/components/base-ui/button';\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea17 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Leave a reply</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Write your reply...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm\"\n      />\n      <Button\n        size=\"sm\"\n        className=\"relative overflow-hidden rounded-sm shadow-[inset_0_1px_0px_0_rgba(255,255,255,0.3),inset_0_-1px_0px_0_rgba(0,0,0,0.3),0_1px_3px_0px_rgba(0,0,0,0.25)] text-shadow-2xs\"\n      >\n        Post Reply\n      </Button>\n    </div>\n  );\n};\n\nexport default Textarea17;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-18",
      "type": "registry:component",
      "title": "Textarea 18",
      "description": "Textarea 18. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-18.tsx",
          "type": "registry:component",
          "content": "'use client';\n\nimport { useId, useState, type ChangeEvent } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst maxLength = 200;\nconst initialValue = '';\n\nconst Textarea18 = () => {\n  const [value, setValue] = useState(initialValue);\n  const [characterCount, setCharacterCount] = useState(initialValue.length);\n\n  const id = useId();\n\n  const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n    if (e.target.value.length <= maxLength) {\n      setValue(e.target.value);\n      setCharacterCount(e.target.value.length);\n    }\n  };\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Brief summary</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Write a short summary...\"\n        value={value}\n        maxLength={maxLength}\n        onChange={handleChange}\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm focus-visible:ring-2\"\n      />\n      <p className=\"text-muted-foreground text-xs\">\n        <span className=\"tabular-nums\">{maxLength - characterCount}</span>{' '}\n        remaining\n      </p>\n    </div>\n  );\n};\n\nexport default Textarea18;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-19",
      "type": "registry:component",
      "title": "Textarea 19",
      "description": "Textarea 19. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-19.tsx",
          "type": "registry:component",
          "content": "import { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea19 = () => {\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Textarea\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 min-h-10 rounded-sm py-1.5 shadow-sm focus-visible:ring-2\"\n        placeholder=\"Compact input\"\n      />\n      <Textarea\n        placeholder=\"Standard input \"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm shadow-sm focus-visible:ring-2\"\n      />\n      <Textarea\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50 min-h-20 rounded-sm py-2.5 shadow-sm focus-visible:ring-2\"\n        placeholder=\"Expanded input\"\n      />\n    </div>\n  );\n};\n\nexport default Textarea19;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-20",
      "type": "registry:component",
      "title": "Textarea 20",
      "description": "Textarea 20. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-20.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst Textarea20 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-sm space-y-2\">\n      <Label htmlFor={id}>Project details</Label>\n      <Textarea\n        id={id}\n        placeholder=\"Describe your project requirements...\"\n        className=\"focus-visible:ring-primary/20 focus-visible:border-primary/50\"\n      />\n      <p className=\"text-muted-foreground text-xs\">\n        Include key goals, constraints, or expectations.\n      </p>\n    </div>\n  );\n};\n\nexport default Textarea20;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea-21",
      "type": "registry:component",
      "title": "Textarea 21",
      "description": "Textarea 21. A multi-line input field that allows users to enter longer blocks of text, such as messages, descriptions, or comments.",
      "dependencies": [],
      "registryDependencies": [
        "label",
        "textarea"
      ],
      "files": [
        {
          "path": "components/watermelon/textarea-21.tsx",
          "type": "registry:component",
          "content": "import { useId } from 'react';\n\nimport { Label } from '@/components/base-ui/label';\nimport { Textarea } from '@/components/base-ui/textarea';\n\nconst TextArea21 = () => {\n  const id = useId();\n\n  return (\n    <div className=\"w-full max-w-xs space-y-2\">\n      <Label htmlFor={id}>Project Notes</Label>\n      <Textarea\n        id={id}\n        className=\"bg-muted focus-visible:ring-primary/20 focus-visible:border-primary/50 rounded-sm border-transparent shadow-sm focus-visible:ring-2\"\n        placeholder=\"Write a quick note about your project...\"\n      />\n    </div>\n  );\n};\n\nexport default TextArea21;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-1",
      "type": "registry:component",
      "title": "Tooltip 1",
      "description": "Tooltip 1. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-1.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip1 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"lg\">\n          Default - with arrow\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent>\n        <p>Click to continue</p>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip1;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-2",
      "type": "registry:component",
      "title": "Tooltip 2",
      "description": "Tooltip 2. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-2.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip2 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"lg\">\n          Neutral\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"bg-neutral-200 text-neutral-950 dark:bg-neutral-50 [&_svg]:bg-neutral-200 [&_svg]:fill-neutral-200 dark:[&_svg]:bg-neutral-50 dark:[&_svg]:fill-neutral-50\">\n        <p>Consistent appearance across themes</p>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip2;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-3",
      "type": "registry:component",
      "title": "Tooltip 3",
      "description": "Tooltip 3. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-3.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip3 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"lg\">\n          w/o arrow\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"[&_svg]:invisible\">\n        <p>This tooltip don&apos;t have arrow</p>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip3;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-4",
      "type": "registry:component",
      "title": "Tooltip 4",
      "description": "Tooltip 4. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-4.tsx",
          "type": "registry:component",
          "content": "import { Badge } from '@/components/base-ui/badge';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip4 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"sm\">\n          Badge\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent>\n        <div className=\"flex items-center gap-2 whitespace-nowrap\">\n          <span className=\"text-xs\">$99/month per user</span>\n          <Badge\n            variant=\"secondary\"\n            className=\"rounded-full px-2 py-0.5 text-xs\"\n          >\n            Popular\n          </Badge>\n        </div>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip4;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-5",
      "type": "registry:component",
      "title": "Tooltip 5",
      "description": "Tooltip 5. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-5.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip5 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"sm\">\n          Avatar\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent>\n        <div className=\"flex items-center gap-2\">\n          <Avatar className=\"size-5\">\n            <AvatarImage\n              src=\"https://github.com/vanshpatel.png\"\n              alt=\"Vansh Patel\"\n            />\n            <AvatarFallback className=\"text-xs\">VP</AvatarFallback>\n          </Avatar>\n          <p className=\"text-sm font-medium\">Vansh Patel</p>\n        </div>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip5;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-6",
      "type": "registry:component",
      "title": "Tooltip 6",
      "description": "Tooltip 6. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-6.tsx",
          "type": "registry:component",
          "content": "import { MdInfo } from 'react-icons/md';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip6 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"sm\">\n          Learn More\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"max-w-64 py-3 text-pretty\">\n        <div className=\"space-y-1\">\n          <div className=\"flex items-center gap-2\">\n            <MdInfo className=\"size-4\" />\n            <p className=\"text-sm font-medium\">Helpful Information</p>\n          </div>\n          <p className=\"text-background/80\">\n            This section provides additional context to help you better\n            understand the feature. Use it as a quick gbase-uide while\n            navigating.\n          </p>\n        </div>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip6;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-7",
      "type": "registry:component",
      "title": "Tooltip 7",
      "description": "Tooltip 7. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-7.tsx",
          "type": "registry:component",
          "content": "import { MdWarning } from 'react-icons/md';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip7 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"sm\">\n          Warning\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"bg-destructive [&_svg]:bg-destructive [&_svg]:fill-destructive text-white\">\n        <div className=\"flex max-w-64 items-start gap-2\">\n          <MdWarning className=\"mt-0.5 size-4 shrink-0 fill-white!\" />\n          <p className=\"text-sm\">\n            Please double-check your inputs before proceeding. Small mistakes\n            can affect the final outcome.\n          </p>\n        </div>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip7;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-8",
      "type": "registry:component",
      "title": "Tooltip 8",
      "description": "Tooltip 8. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-8.tsx",
          "type": "registry:component",
          "content": "import { MdLightbulb } from 'react-icons/md';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip8 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"sm\">\n          Tip\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"max-w-80\">\n        <div className=\"flex items-center gap-1.5\">\n          <MdLightbulb className=\"size-4 text-yellow-400\" />\n          <p>Use keyboard shortcuts to speed up your workflow.</p>\n        </div>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip8;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-9",
      "type": "registry:component",
      "title": "Tooltip 9",
      "description": "Tooltip 9. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-9.tsx",
          "type": "registry:component",
          "content": "import { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip9 = () => {\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <Button variant=\"outline\" size=\"sm\">\n          Rounded\n        </Button>\n      </TooltipTrigger>\n      <TooltipContent className=\"rounded-full\">\n        <p>This tooltip is rounded</p>\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n\nexport default Tooltip9;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-10",
      "type": "registry:component",
      "title": "Tooltip 10",
      "description": "Tooltip 10. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-10.tsx",
          "type": "registry:component",
          "content": "import {\n  MdChevronLeft,\n  MdKeyboardArrowUp,\n  MdKeyboardArrowDown,\n  MdChevronRight,\n} from 'react-icons/md';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from '@/components/base-ui/tooltip';\n\nconst Tooltip10 = () => {\n  return (\n    <div className=\"flex flex-wrap gap-2\">\n      <Tooltip>\n        <TooltipTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <MdChevronLeft className=\"size-4\" />\n          </Button>\n        </TooltipTrigger>\n        <TooltipContent side=\"left\">Tooltip on left</TooltipContent>\n      </Tooltip>\n\n      <Tooltip>\n        <TooltipTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <MdKeyboardArrowUp className=\"size-4\" />\n          </Button>\n        </TooltipTrigger>\n        <TooltipContent side=\"top\">Tooltip on top</TooltipContent>\n      </Tooltip>\n\n      <Tooltip>\n        <TooltipTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <MdKeyboardArrowDown className=\"size-4\" />\n          </Button>\n        </TooltipTrigger>\n        <TooltipContent side=\"bottom\">Tooltip on bottom</TooltipContent>\n      </Tooltip>\n\n      <Tooltip>\n        <TooltipTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <MdChevronRight className=\"size-4\" />\n          </Button>\n        </TooltipTrigger>\n        <TooltipContent side=\"right\">Tooltip on right</TooltipContent>\n      </Tooltip>\n    </div>\n  );\n};\n\nexport default Tooltip10;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-11",
      "type": "registry:component",
      "title": "Tooltip 11",
      "description": "Tooltip 11. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "hover-card"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-11.tsx",
          "type": "registry:component",
          "content": "import { MdLaunch } from 'react-icons/md';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  HoverCard,\n  HoverCardContent,\n  HoverCardTrigger,\n} from '@/components/base-ui/hover-card';\n\nconst Tooltip11 = () => {\n  return (\n    <HoverCard openDelay={0} closeDelay={0}>\n      <HoverCardTrigger asChild>\n        <Button variant=\"link\">Explore Feature</Button>\n      </HoverCardTrigger>\n\n      <HoverCardContent side=\"top\">\n        <div className=\"space-y-2\">\n          <img\n            src=\"https://images.unsplash.com/photo-1522199710521-72d69614c702\"\n            alt=\"Feature preview\"\n            className=\"w-full rounded\"\n          />\n\n          <div className=\"space-y-1\">\n            <p className=\"text-sm font-medium\">Smart Workspace</p>\n\n            <p className=\"text-muted-foreground text-xs\">\n              Organize your tasks, notes, and files in one unified place. Boost\n              productivity with a clean and intbase-uitive interface.{' '}\n              <a\n                href=\"#\"\n                className=\"hover:text-foreground flex w-fit items-center gap-1 underline\"\n              >\n                Learn more\n                <MdLaunch className=\"size-4\" />\n              </a>\n            </p>\n          </div>\n        </div>\n      </HoverCardContent>\n    </HoverCard>\n  );\n};\n\nexport default Tooltip11;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-12",
      "type": "registry:component",
      "title": "Tooltip 12",
      "description": "Tooltip 12. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "button",
        "hover-card"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-12.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  HoverCard,\n  HoverCardContent,\n  HoverCardTrigger,\n} from '@/components/base-ui/hover-card';\n\nconst Tooltip12 = () => {\n  return (\n    <HoverCard openDelay={0} closeDelay={0}>\n      <HoverCardTrigger asChild>\n        <Button variant=\"link\">User Overview</Button>\n      </HoverCardTrigger>\n\n      <HoverCardContent className=\"w-fit\">\n        <div className=\"flex items-center gap-2\">\n          <Avatar className=\"size-10\">\n            <AvatarImage\n              src=\"https://github.com/vanshpatel.png\"\n              alt=\"Vansh Patel\"\n            />\n            <AvatarFallback className=\"text-xs\">AC</AvatarFallback>\n          </Avatar>\n\n          <div className=\"flex flex-col gap-0.5\">\n            <div className=\"text-sm font-medium\">Vansh Patel</div>\n            <div className=\"text-muted-foreground text-xs\">\n              Product Designer\n            </div>\n            <div className=\"text-xs\">Active now • 124 tasks completed</div>\n          </div>\n        </div>\n      </HoverCardContent>\n    </HoverCard>\n  );\n};\n\nexport default Tooltip12;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-13",
      "type": "registry:component",
      "title": "Tooltip 13",
      "description": "Tooltip 13. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [],
      "registryDependencies": [
        "avatar",
        "button",
        "hover-card"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-13.tsx",
          "type": "registry:component",
          "content": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  HoverCard,\n  HoverCardContent,\n  HoverCardTrigger,\n} from '@/components/base-ui/hover-card';\n\nconst tasks = [\n  {\n    image: 'https://github.com/emilkowalski.png',\n    fallback: 'EK',\n    name: 'Emil Kowalski',\n    designation: 'Frontend Engineer',\n    percentage: 92,\n  },\n  {\n    image: 'https://github.com/jakubkr.png',\n    fallback: 'JK',\n    name: 'Jakub Kr',\n    designation: 'Full Stack Developer',\n    percentage: 68,\n  },\n  {\n    image: 'https://github.com/raunofreiberg.png',\n    fallback: 'RF',\n    name: 'Rauno Freiberg',\n    designation: 'base-ui Engineer',\n    percentage: 81,\n  },\n  {\n    image: 'https://github.com/raphaelsalaja.png',\n    fallback: 'RS',\n    name: 'Raphael Salaja',\n    designation: 'Product Designer',\n    percentage: 47,\n  },\n];\n\nconst Tooltip13 = () => {\n  return (\n    <HoverCard openDelay={0} closeDelay={0}>\n      <HoverCardTrigger asChild>\n        <Button variant=\"link\">Team Activity</Button>\n      </HoverCardTrigger>\n\n      <HoverCardContent className=\"w-72\">\n        <div className=\"space-y-4\">\n          <p className=\"text-lg font-semibold\">Current workload distribution</p>\n\n          <ul className=\"space-y-2.5\">\n            {tasks.map((task) => (\n              <li key={task.name} className=\"flex items-start gap-4\">\n                <Avatar>\n                  <AvatarImage src={task.image} alt={task.name} />\n                  <AvatarFallback>{task.fallback}</AvatarFallback>\n                </Avatar>\n\n                <div className=\"flex flex-1 flex-col\">\n                  <div className=\"text-sm font-medium\">{task.name}</div>\n                  <p className=\"text-muted-foreground text-xs\">\n                    {task.designation}\n                  </p>\n                  <p className=\"text-muted-foreground text-xs\">\n                    Handling multiple active tasks\n                  </p>\n                </div>\n\n                <span className=\"text-sm font-medium\">{task.percentage}%</span>\n              </li>\n            ))}\n          </ul>\n        </div>\n      </HoverCardContent>\n    </HoverCard>\n  );\n};\n\nexport default Tooltip13;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-14",
      "type": "registry:component",
      "title": "Tooltip 14",
      "description": "Tooltip 14. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "hover-card",
        "progress"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-14.tsx",
          "type": "registry:component",
          "content": "import { FaCalendarAlt } from 'react-icons/fa';\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from '@/components/base-ui/avatar';\nimport { Button } from '@/components/base-ui/button';\nimport {\n  HoverCard,\n  HoverCardContent,\n  HoverCardTrigger,\n} from '@/components/base-ui/hover-card';\nimport { Progress } from '@/components/base-ui/progress';\n\nconst members = [\n  {\n    src: 'https://github.com/emilkowalski.png',\n    fallback: 'EK',\n    name: 'Emil Kowalski',\n  },\n  {\n    image: 'https://github.com/raphaelsalaja.png',\n    fallback: 'RS',\n    name: 'Raphael Salaja',\n  },\n  {\n    src: 'https://github.com/raunofreiberg.png',\n    fallback: 'RF',\n    name: 'Rauno Freiberg',\n  },\n];\n\nconst Tooltip14 = () => {\n  return (\n    <HoverCard openDelay={0} closeDelay={0}>\n      <HoverCardTrigger asChild>\n        <Button variant=\"link\">View Build Status</Button>\n      </HoverCardTrigger>\n\n      <HoverCardContent className=\"w-80\">\n        <div className=\"space-y-4\">\n          <div className=\"flex items-start justify-between\">\n            <div>\n              <p className=\"text-sm font-medium\">Ui System Upgrade</p>\n              <p className=\"text-muted-foreground text-xs\">\n                Improving consistency across components\n              </p>\n            </div>\n            <span className=\"text-sm font-semibold\">68%</span>\n          </div>\n\n          <Progress value={68} />\n\n          <div className=\"text-muted-foreground flex items-center justify-between text-xs\">\n            <div className=\"flex items-center gap-1.5\">\n              <FaCalendarAlt className=\"size-4\" />\n              <span>Started Feb 2025</span>\n            </div>\n            <span>ETA: 2 weeks</span>\n          </div>\n\n          <div className=\"flex items-center justify-between\">\n            <div className=\"flex -space-x-2\">\n              {members.map((member, i) => (\n                <Avatar key={i} className=\"ring-background size-8 ring-2\">\n                  <AvatarImage src={member.src} alt={member.name} />\n                  <AvatarFallback className=\"text-xs\">\n                    {member.fallback}\n                  </AvatarFallback>\n                </Avatar>\n              ))}\n              <Avatar className=\"ring-background size-8 ring-2\">\n                <AvatarFallback className=\"text-xs\">+3</AvatarFallback>\n              </Avatar>\n            </div>\n\n            <span className=\"text-muted-foreground text-xs\">\n              Active contributors\n            </span>\n          </div>\n        </div>\n      </HoverCardContent>\n    </HoverCard>\n  );\n};\n\nexport default Tooltip14;\n"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip-15",
      "type": "registry:component",
      "title": "Tooltip 15",
      "description": "Tooltip 15. A small popup that appears when a user hovers over or focuses on an element, providing additional information or context.",
      "dependencies": [
        "react-icons"
      ],
      "registryDependencies": [
        "button",
        "hover-card"
      ],
      "files": [
        {
          "path": "components/watermelon/tooltip-15.tsx",
          "type": "registry:component",
          "content": "import { MdSecurity } from 'react-icons/md';\n\nimport { Button } from '@/components/base-ui/button';\nimport {\n  HoverCard,\n  HoverCardContent,\n  HoverCardTrigger,\n} from '@/components/base-ui/hover-card';\n\nconst Tooltip15 = () => {\n  return (\n    <HoverCard openDelay={0} closeDelay={0}>\n      <HoverCardTrigger asChild>\n        <Button variant=\"link\">Security Notice</Button>\n      </HoverCardTrigger>\n\n      <HoverCardContent className=\"w-72\">\n        <div className=\"flex flex-col items-center text-center\">\n          <span className=\"bg-primary/10 mb-2.5 flex size-12 items-center justify-center rounded-full\">\n            <MdSecurity className=\"text-primary size-6\" />\n          </span>\n\n          <div className=\"mb-1 text-lg font-medium\">\n            Secure environment detected\n          </div>\n\n          <p className=\"text-muted-foreground text-sm\">\n            Your connection is encrypted and your data is protected. Continue\n            safely without any concerns.\n          </p>\n        </div>\n      </HoverCardContent>\n    </HoverCard>\n  );\n};\n\nexport default Tooltip15;\n"
        }
      ]
    }
  ]
}
