{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "nextjs-aio-multistep-onboarding",
  "type": "registry:block",
  "title": "Multistep Onboarding Flow (AIO)",
  "description": "A multistep onboarding flow using Clerk's prebuilt <SignIn> component with embedded session tasks.",
  "dependencies": [
    "@clerk/nextjs",
    "@clerk/ui",
    "motion",
    "react-use-measure",
    "lucide-react"
  ],
  "registryDependencies": [
    "button"
  ],
  "files": [
    {
      "path": "nextjs/aio/multistep-onboarding/welcome-layout.tsx",
      "content": "'use client';\n\nimport { Testimonials } from '@/components/ui/testimonials';\n\nconst QUOTES = [\n  {\n    quote:\n      'This has completely reshaped how our team thinks about onboarding. The flow is intuitive, the defaults feel right, and our activation numbers jumped within the very first week of rolling it out.',\n    cite: 'Maya Chen, CTO',\n  },\n  {\n    quote:\n      'Adopting it saved our small engineering team months of work. The primitives are flexible enough to fit our brand, secure enough for our enterprise customers, and the team behind it actually listens to feedback and ships fixes fast.',\n    cite: 'Jordan Whitfield, Head of Engineering',\n  },\n  {\n    quote:\n      \"We rebuilt our entire signup experience in an afternoon. It's easily the best developer experience we've had all year.\",\n    cite: 'Priya Anand, Co-founder',\n  },\n];\n\nexport default function WelcomeLayout({ children }: { children: React.ReactNode }) {\n  return (\n    <div className='grid flex-1 grid-cols-1 lg:grid-cols-2'>\n      <main className='mx-auto flex w-full max-w-lg flex-1 flex-col'>\n        <div className='flex-1 px-4 py-16 lg:px-12'>\n          <header className='mb-16 flex items-center justify-center'>\n            <svg\n              fill='none'\n              viewBox='0 0 136 26'\n              className='h-7 w-auto'\n              xmlns='http://www.w3.org/2000/svg'\n              role='img'\n              aria-label='Acme'\n            >\n              <g clipPath='url(#acme-logo-clip)'>\n                <path\n                  fill='currentColor'\n                  d='M22.4545 0C23.3949 0 24.2967 0.373538 24.9616 1.03844C25.6265 1.70334 26 2.60514 26 3.54545V22.4545C26 23.3949 25.6265 24.2967 24.9616 24.9616C24.2967 25.6265 23.3949 26 22.4545 26H3.54545C2.60514 26 1.70334 25.6265 1.03844 24.9616C0.373538 24.2967 0 23.3949 0 22.4545L0 3.54545C0 2.60514 0.373538 1.70334 1.03844 1.03844C1.70334 0.373538 2.60514 0 3.54545 0L22.4545 0ZM13.5803 5.38023C13.4574 4.74145 12.5426 4.74145 12.4197 5.38023L11.9175 7.99264C11.8975 8.09646 11.8501 8.19304 11.7801 8.2723C11.7102 8.35156 11.6202 8.41059 11.5196 8.44324C11.4191 8.4759 11.3116 8.48097 11.2084 8.45795C11.1052 8.43492 11.0101 8.38463 10.933 8.31232L8.99068 6.49409C8.51559 6.04973 7.77577 6.58746 8.05173 7.17659L9.18095 9.58573C9.22587 9.68145 9.24428 9.78748 9.23426 9.89274C9.22425 9.99801 9.18616 10.0987 9.12399 10.1842C9.06182 10.2697 8.97784 10.337 8.8808 10.379C8.78376 10.421 8.67723 10.4362 8.57232 10.423L5.93273 10.0933C5.28686 10.013 5.00441 10.8828 5.57405 11.1971L7.90341 12.4824C7.99606 12.5334 8.07332 12.6083 8.12712 12.6994C8.18093 12.7904 8.20932 12.8942 8.20932 13C8.20932 13.1058 8.18093 13.2096 8.12712 13.3006C8.07332 13.3917 7.99606 13.4666 7.90341 13.5176L5.57405 14.8029C5.00441 15.1172 5.28686 15.987 5.93273 15.9067L8.57291 15.577C8.67782 15.5638 8.78436 15.579 8.88139 15.621C8.97843 15.663 9.06241 15.7303 9.12458 15.8158C9.18675 15.9013 9.22484 16.002 9.23486 16.1073C9.24487 16.2125 9.22646 16.3185 9.18155 16.4143L8.05173 18.8234C7.77577 19.4125 8.51559 19.9503 8.99068 19.5059L10.933 17.6877C11.0101 17.6154 11.1052 17.5651 11.2083 17.542C11.3115 17.519 11.4189 17.524 11.5194 17.5566C11.62 17.5892 11.7099 17.6481 11.7799 17.7273C11.85 17.8065 11.8974 17.903 11.9175 18.0068L12.4197 20.6198C12.5426 21.2585 13.4574 21.2585 13.5803 20.6198L14.0825 18.0074C14.1025 17.9035 14.1499 17.807 14.2199 17.7277C14.2898 17.6484 14.3798 17.5894 14.4804 17.5568C14.5809 17.5241 14.6884 17.519 14.7916 17.5421C14.8948 17.5651 14.9899 17.6154 15.067 17.6877L17.0093 19.5059C17.4844 19.9503 18.2242 19.4125 17.9483 18.8234L16.819 16.4143C16.7741 16.3185 16.7557 16.2125 16.7657 16.1073C16.7758 16.002 16.8138 15.9013 16.876 15.8158C16.9382 15.7303 17.0222 15.663 17.1192 15.621C17.2162 15.579 17.3228 15.5638 17.4277 15.577L20.0673 15.9067C20.7131 15.987 20.9962 15.1172 20.426 14.8029L18.0966 13.5176C18.0039 13.4666 17.9267 13.3917 17.8729 13.3006C17.8191 13.2096 17.7907 13.1058 17.7907 13C17.7907 12.8942 17.8191 12.7904 17.8729 12.6994C17.9267 12.6083 18.0039 12.5334 18.0966 12.4824L20.426 11.1971C20.9962 10.8828 20.7131 10.013 20.0673 10.0933L17.4271 10.423C17.3222 10.4362 17.2156 10.421 17.1186 10.379C17.0216 10.337 16.9376 10.2697 16.8754 10.1842C16.8132 10.0987 16.7752 9.99801 16.7651 9.89274C16.7551 9.78748 16.7735 9.68145 16.8185 9.58573L17.9483 7.17659C18.2242 6.58746 17.4844 6.04973 17.0093 6.49409L15.067 8.31232C14.9899 8.38462 14.8948 8.43493 14.7917 8.45799C14.6885 8.48105 14.5811 8.47602 14.4806 8.44343C14.38 8.41084 14.2901 8.35189 14.2201 8.2727C14.15 8.19352 14.1026 8.09701 14.0825 7.99323L13.5803 5.38023Z'\n                />\n              </g>\n              <path\n                fill='currentColor'\n                d='M33.8125 21.5L39.6464 4.79708L42.7022 4.79708L42.7022 8.06126L41.6489 8.06126L37.4934 21.5L33.8125 21.5ZM36.9494 17.4487L37.8059 14.8327L45.5728 14.8327L46.4294 17.4487L36.9494 17.4487ZM45.897 21.5L41.7531 8.06126L41.7531 4.79708L43.7556 4.79708L49.5778 21.5L45.897 21.5ZM56.147 21.7547C54.8737 21.7547 53.7779 21.4961 52.8596 20.9791C51.9413 20.4544 51.2353 19.7059 50.7414 18.7335C50.2475 17.7535 50.0006 16.5921 50.0006 15.2494L50.0006 15.2263C50.0006 13.8913 50.2475 12.7415 50.7414 11.7769C51.2353 10.8046 51.9413 10.0599 52.8596 9.54288C53.7779 9.01814 54.866 8.75577 56.1238 8.75577C57.2505 8.75577 58.2228 8.96413 59.0408 9.38083C59.8664 9.78982 60.5108 10.3531 60.9738 11.0708C61.4445 11.7807 61.7108 12.591 61.7725 13.5016L61.7725 13.571L58.624 13.571L58.6125 13.4784C58.5122 12.8842 58.2536 12.3904 57.8369 11.9968C57.428 11.6033 56.8685 11.4065 56.1585 11.4065C55.5952 11.4065 55.1091 11.5608 54.7001 11.8695C54.2911 12.1704 53.9786 12.6064 53.7625 13.1775C53.5464 13.7485 53.4384 14.4392 53.4384 15.2494L53.4384 15.261C53.4384 16.079 53.5464 16.7773 53.7625 17.3561C53.9863 17.9271 54.3027 18.3631 54.7117 18.6641C55.1206 18.9573 55.6068 19.1039 56.1701 19.1039C56.8569 19.1039 57.4048 18.9226 57.8138 18.5599C58.2305 18.1895 58.4967 17.6879 58.6125 17.0551L58.6356 16.9625L61.7725 16.9625L61.7725 17.0436C61.703 17.9464 61.4329 18.7528 60.9622 19.4628C60.4915 20.1727 59.8472 20.7322 59.0292 21.1412C58.2189 21.5502 57.2582 21.7547 56.147 21.7547ZM63.399 21.5L63.399 9.01043L66.779 9.01043L66.779 11.0824L66.8831 11.0824C67.1378 10.3724 67.5738 9.80911 68.1911 9.39241C68.8085 8.96798 69.5338 8.75577 70.3673 8.75577C70.946 8.75577 71.4669 8.85609 71.9299 9.05673C72.4006 9.24965 72.7942 9.53517 73.1106 9.91329C73.4347 10.2837 73.67 10.7351 73.8166 11.2676L73.9093 11.2676C74.1022 10.7583 74.3838 10.3184 74.7542 9.94801C75.1246 9.56989 75.5684 9.27665 76.0854 9.0683C76.6024 8.85995 77.1619 8.75577 77.7638 8.75577C78.5817 8.75577 79.2955 8.93326 79.9052 9.28823C80.5148 9.63548 80.9894 10.1216 81.3289 10.7467C81.6685 11.3718 81.8382 12.1087 81.8382 12.9575L81.8382 21.5L78.4583 21.5L78.4583 13.8025C78.4583 13.3164 78.3811 12.9074 78.2268 12.5756C78.0724 12.2437 77.8409 11.993 77.5323 11.8232C77.2313 11.6457 76.8571 11.557 76.4095 11.557C75.9773 11.557 75.5992 11.6573 75.2751 11.8579C74.951 12.0508 74.7002 12.3248 74.5227 12.6797C74.353 13.027 74.2681 13.4321 74.2681 13.8951L74.2681 21.5L70.9807 21.5L70.9807 13.6868C70.9807 13.2392 70.8997 12.8572 70.7377 12.5408C70.5756 12.2245 70.3441 11.9814 70.0432 11.8116C69.7422 11.6418 69.3795 11.557 68.9551 11.557C68.523 11.557 68.1448 11.6611 67.8207 11.8695C67.4966 12.0778 67.242 12.3634 67.0568 12.726C66.8716 13.081 66.779 13.4939 66.779 13.9646L66.779 21.5L63.399 21.5ZM89.6459 21.7547C88.3726 21.7547 87.2768 21.4923 86.3585 20.9675C85.4402 20.4428 84.7342 19.6981 84.2403 18.7335C83.7541 17.7612 83.5111 16.6114 83.5111 15.2842L83.5111 15.2726C83.5111 13.9453 83.7541 12.7955 84.2403 11.8232C84.7342 10.8509 85.4287 10.0985 86.3238 9.56603C87.2267 9.02586 88.2877 8.75577 89.507 8.75577C90.7185 8.75577 91.768 9.01814 92.6554 9.54288C93.5428 10.0599 94.2258 10.7891 94.7042 11.7306C95.1904 12.6643 95.4334 13.7601 95.4334 15.0179L95.4334 16.0597L85.1779 16.0597L85.1779 13.9299L93.8361 13.9299L92.2387 15.9324L92.2387 14.6128C92.2387 13.8797 92.123 13.2662 91.8915 12.7723C91.6677 12.2785 91.3551 11.9081 90.9539 11.6611C90.5526 11.4065 90.0896 11.2792 89.5649 11.2792C89.0324 11.2792 88.5617 11.4103 88.1527 11.6727C87.7437 11.9274 87.4235 12.3055 87.192 12.8071C86.9604 13.3009 86.8447 13.9029 86.8447 14.6128L86.8447 15.9439C86.8447 16.6307 86.9604 17.2211 87.192 17.7149C87.4235 18.2088 87.7514 18.5869 88.1758 18.8493C88.608 19.1039 89.1211 19.2313 89.7153 19.2313C90.1783 19.2313 90.5796 19.1618 90.9191 19.0229C91.2664 18.8763 91.5442 18.695 91.7526 18.4789C91.9686 18.2551 92.1152 18.0352 92.1924 17.8191L92.2271 17.7497L95.3293 17.7497L95.3061 17.877C95.2058 18.3168 95.0206 18.7644 94.7505 19.2197C94.4881 19.675 94.1255 20.0955 93.6625 20.4814C93.2072 20.8672 92.6438 21.1759 91.9725 21.4074C91.3088 21.6389 90.5333 21.7547 89.6459 21.7547ZM109.602 21.8241C107.981 21.8241 106.577 21.4768 105.389 20.7823C104.2 20.0801 103.286 19.0808 102.645 17.7844C102.005 16.488 101.684 14.9408 101.684 13.1428L101.684 13.1312C101.684 11.3332 102.005 9.78982 102.645 8.50112C103.293 7.2047 104.208 6.20924 105.389 5.51473C106.577 4.82023 107.981 4.47297 109.602 4.47297C110.952 4.47297 112.152 4.73534 113.202 5.26008C114.259 5.78482 115.108 6.50634 115.748 7.42463C116.396 8.33521 116.775 9.38083 116.883 10.5615L116.894 10.6772L113.491 10.6772L113.445 10.5152C113.321 9.89014 113.086 9.34996 112.739 8.89467C112.399 8.43167 111.963 8.07284 111.431 7.81819C110.906 7.56353 110.296 7.43621 109.602 7.43621C108.714 7.43621 107.943 7.66771 107.287 8.13072C106.639 8.586 106.137 9.23807 105.782 10.0869C105.427 10.9358 105.25 11.9505 105.25 13.1312L105.25 13.1428C105.25 14.3157 105.427 15.3305 105.782 16.187C106.137 17.0436 106.643 17.7034 107.298 18.1664C107.954 18.6294 108.726 18.8609 109.613 18.8609C110.285 18.8609 110.883 18.7374 111.408 18.4905C111.94 18.2435 112.38 17.8886 112.727 17.4256C113.082 16.9625 113.333 16.4108 113.48 15.7703L113.503 15.6546L116.906 15.6546L116.894 15.7819C116.786 16.9625 116.408 18.0082 115.76 18.9187C115.112 19.8216 114.259 20.5315 113.202 21.0486C112.152 21.5656 110.952 21.8241 109.602 21.8241ZM124.436 21.7547C123.17 21.7547 122.074 21.4961 121.148 20.9791C120.23 20.4621 119.52 19.7174 119.018 18.7451C118.517 17.7728 118.266 16.6114 118.266 15.261L118.266 15.2379C118.266 13.8951 118.521 12.7415 119.03 11.7769C119.539 10.8046 120.253 10.0599 121.171 9.54288C122.097 9.01814 123.186 8.75577 124.436 8.75577C125.693 8.75577 126.782 9.01814 127.7 9.54288C128.626 10.0599 129.344 10.8007 129.853 11.7653C130.362 12.7299 130.617 13.8874 130.617 15.2379L130.617 15.261C130.617 16.6191 130.366 17.7844 129.864 18.7567C129.363 19.7213 128.649 20.4621 127.723 20.9791C126.797 21.4961 125.701 21.7547 124.436 21.7547ZM124.447 19.1039C125.011 19.1039 125.493 18.9535 125.894 18.6525C126.303 18.3516 126.619 17.9156 126.843 17.3445C127.067 16.7735 127.179 16.079 127.179 15.261L127.179 15.2379C127.179 14.4276 127.067 13.7369 126.843 13.1659C126.619 12.5949 126.299 12.1589 125.883 11.8579C125.474 11.557 124.991 11.4065 124.436 11.4065C123.88 11.4065 123.398 11.5608 122.989 11.8695C122.58 12.1704 122.263 12.6064 122.04 13.1775C121.816 13.7408 121.704 14.4276 121.704 15.2379L121.704 15.261C121.704 16.079 121.816 16.7735 122.04 17.3445C122.263 17.9156 122.58 18.3516 122.989 18.6525C123.398 18.9535 123.884 19.1039 124.447 19.1039ZM133.922 21.7199C133.382 21.7199 132.926 21.5386 132.556 21.1759C132.193 20.8055 132.012 20.3502 132.012 19.81C132.012 19.2776 132.193 18.83 132.556 18.4673C132.926 18.0969 133.382 17.9117 133.922 17.9117C134.462 17.9117 134.913 18.0969 135.276 18.4673C135.646 18.83 135.832 19.2776 135.832 19.81C135.832 20.3502 135.646 20.8055 135.276 21.1759C134.913 21.5386 134.462 21.7199 133.922 21.7199Z'\n              />\n              <defs>\n                <clipPath id='acme-logo-clip'>\n                  <rect width='26' height='26' fill='#fff' />\n                </clipPath>\n              </defs>\n            </svg>\n          </header>\n          {children}\n        </div>\n      </main>\n      <aside\n        className='border-sidebar-border bg-sidebar relative hidden items-center justify-center overflow-clip border-l px-12 lg:flex'\n        style={{\n          backgroundImage: 'radial-gradient(var(--color-sidebar-border) 1px, transparent 1.3px)',\n          backgroundSize: '16px 16px',\n          backgroundPosition: '16px 16px',\n          backgroundRepeat: 'round',\n        }}\n      >\n        <Testimonials quotes={QUOTES} />\n      </aside>\n    </div>\n  );\n}\n",
      "type": "registry:page",
      "target": "app/welcome/layout.tsx"
    },
    {
      "path": "nextjs/aio/multistep-onboarding/welcome-page.tsx",
      "content": "import { SignIn } from '@clerk/nextjs';\n\nexport default function WelcomePage() {\n  return <SignIn path='/welcome' />;\n}\n",
      "type": "registry:page",
      "target": "app/welcome/[[...welcome]]/page.tsx"
    },
    {
      "path": "nextjs/common/multistep-onboarding/layout.tsx",
      "content": "import type { Metadata } from 'next';\nimport { Geist, Geist_Mono } from 'next/font/google';\nimport { ClerkProvider } from '@/components/clerk-provider';\nimport './globals.css';\n\nconst geistSans = Geist({\n  variable: '--font-sans',\n  subsets: ['latin'],\n});\n\nconst geistMono = Geist_Mono({\n  variable: '--font-mono',\n  subsets: ['latin'],\n});\n\nexport const metadata: Metadata = {\n  title: 'Create Next App',\n  description: 'Generated by create next app',\n};\n\nexport default function RootLayout({\n  children,\n}: Readonly<{\n  children: React.ReactNode;\n}>) {\n  return (\n    <html\n      lang='en'\n      className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`}\n    >\n      <body className='flex min-h-full flex-col'>\n        <ClerkProvider\n          localization={{\n            signIn: {\n              start: {\n                titleCombined: 'Sign in to your account',\n              },\n            },\n          }}\n        >\n          {children}\n        </ClerkProvider>\n      </body>\n    </html>\n  );\n}\n",
      "type": "registry:page",
      "target": "app/layout.tsx"
    },
    {
      "path": "nextjs/common/multistep-onboarding/testimonials.tsx",
      "content": "\"use client\"\n\nimport {\n  AnimatePresence,\n  type HTMLMotionProps,\n  motion,\n  useCycle,\n  useReducedMotion,\n} from \"motion/react\"\nimport { useEffect } from \"react\"\nimport useMeasure from \"react-use-measure\"\n\ntype TestimonialsProps = {\n  quotes: {\n    quote: string\n    cite: string\n  }[]\n}\n\nconst ANGLE_RAD = 40 * (Math.PI / 180)\nconst SLIDE_ROOM = 20\nconst MASK_GRADIENT =\n  \"linear-gradient(-40deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 13.5%, rgba(0,0,0,0.99) 27%, rgba(0,0,0,0.99) 72%, rgba(0,0,0,0) 77.4%, rgba(0,0,0,0) 100%)\"\n\nfunction getMask(width: number, height: number) {\n  const diagonalSpan = height / Math.tan(ANGLE_RAD) + width\n  const maskWidth = Math.round(diagonalSpan * SLIDE_ROOM)\n\n  return {\n    style: {\n      maskImage: MASK_GRADIENT,\n      maskSize: `${maskWidth}px ${height}px`,\n      maskRepeat: \"no-repeat\",\n      WebkitMaskImage: MASK_GRADIENT,\n      WebkitMaskSize: `${maskWidth}px ${height}px`,\n      WebkitMaskRepeat: \"no-repeat\",\n    },\n    positions: {\n      initial: \"0px 0px\",\n      animate: `-${Math.round(maskWidth * 0.3)}px 0px`,\n      exit: [\n        `-${Math.round(maskWidth * 0.8)}px 0px`,\n        `-${Math.round(maskWidth * 0.9)}px 0px`,\n      ],\n    },\n  }\n}\n\nexport function Testimonials({ quotes }: TestimonialsProps) {\n  const [index, cycle] = useCycle(\n    ...Array.from({ length: quotes.length }, (_, index) => index)\n  )\n  const [measureRef, bounds] = useMeasure()\n  const shouldReduceMotion = useReducedMotion()\n\n  useEffect(() => {\n    if (quotes.length === 0) return\n\n    let interval: ReturnType<typeof setInterval> | null = null\n\n    const start = () => {\n      if (interval) return\n      interval = setInterval(() => cycle(), 7000)\n    }\n\n    const stop = () => {\n      if (interval) {\n        clearInterval(interval)\n        interval = null\n      }\n    }\n\n    const onVisibilityChange = () => {\n      if (document.hidden) stop()\n      else start()\n    }\n\n    start()\n    document.addEventListener(\"visibilitychange\", onVisibilityChange)\n\n    return () => {\n      stop()\n      document.removeEventListener(\"visibilitychange\", onVisibilityChange)\n    }\n  }, [cycle, quotes.length])\n\n  if (quotes.length === 0) {\n    return null\n  }\n\n  const hasMeasured = bounds.height > 0\n  const mask = getMask(bounds.width, bounds.height)\n\n  const animatedProps: HTMLMotionProps<\"div\"> = shouldReduceMotion\n    ? {\n        initial: { opacity: 0 },\n        animate: { opacity: 1 },\n        exit: { opacity: 0 },\n        transition: { duration: 0.2 },\n      }\n    : {\n        initial: {\n          opacity: 0,\n          maskPosition: mask.positions.initial,\n          filter: \"blur(4px)\",\n          scale: 0.98,\n          skewY: 1,\n          rotate: -1,\n        },\n        animate: {\n          opacity: 1,\n          maskPosition: mask.positions.animate,\n          filter: \"blur(0px)\",\n          scale: 1,\n          skewY: 0,\n          rotate: 0,\n        },\n        exit: {\n          opacity: 1,\n          maskPosition: mask.positions.exit,\n          filter: \"blur(4px)\",\n          scale: 1.02,\n          skewY: -1,\n          rotate: 1,\n        },\n        transition: { duration: 1.25, type: \"spring\", bounce: 0 },\n      }\n\n  const currentQuote = quotes[index]\n  if (!currentQuote) return null\n\n  return (\n    <figure\n      className=\"border-card-border bg-card mx-auto max-w-lg rounded-lg border p-12\"\n      aria-live=\"polite\"\n      aria-atomic=\"true\"\n    >\n      <svg\n        viewBox=\"0 0 21 19\"\n        fill=\"none\"\n        aria-hidden=\"true\"\n        className=\"fill-muted-foreground/20 mb-4 size-6\"\n      >\n        <path d=\"M8.704 18.816H0V9.472L4.48 0H9.024L4.8 10.112H8.704V18.816ZM20.608 18.816H11.904V9.472L16.384 0H20.928L16.704 10.112H20.608V18.816Z\" />\n      </svg>\n      <motion.div\n        animate={hasMeasured ? { height: bounds.height } : undefined}\n        transition={{ duration: 0.4, type: \"spring\", bounce: 0, delay: 0.2 }}\n      >\n        <blockquote ref={measureRef}>\n          <AnimatePresence mode=\"popLayout\">\n            <motion.div\n              key={index}\n              style={hasMeasured ? mask.style : undefined}\n              {...animatedProps}\n            >\n              <p className=\"text-xl font-semibold tracking-tight text-pretty\">\n                {currentQuote.quote}\n              </p>\n              <motion.p\n                initial={{ opacity: 0, filter: \"blur(2px)\" }}\n                animate={{ opacity: 1, filter: \"blur(0px)\" }}\n                exit={{ opacity: 0, filter: \"blur(2px)\" }}\n                transition={{ duration: 1.25, ease: \"easeOut\" }}\n                className=\"text-muted-foreground mt-4 text-right font-medium\"\n              >\n                &mdash; {currentQuote.cite}\n              </motion.p>\n            </motion.div>\n          </AnimatePresence>\n        </blockquote>\n      </motion.div>\n    </figure>\n  )\n}\n",
      "type": "registry:component",
      "target": "components/ui/testimonials.tsx"
    },
    {
      "path": "nextjs/common/multistep-onboarding/clerk-provider.tsx",
      "content": "import { ClerkProvider as ClerkNextJSProvider } from '@clerk/nextjs';\nimport { shadcn } from '@clerk/ui/themes';\n\ntype ClerkProviderProps = React.ComponentProps<typeof ClerkNextJSProvider>;\n\nexport function ClerkProvider({ children, appearance, ...props }: ClerkProviderProps) {\n  return (\n    <ClerkNextJSProvider\n      appearance={{\n        ...appearance,\n        theme: shadcn,\n        cssLayerName: 'components',\n        options: {\n          ...appearance?.options,\n          elevation: 'flush',\n          autoFocus: false,\n          unsafe_disableDevelopmentModeWarnings: true,\n        },\n      }}\n      {...props}\n    >\n      {children}\n    </ClerkNextJSProvider>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/clerk-provider.tsx"
    },
    {
      "path": "nextjs/common/multistep-onboarding/proxy.ts",
      "content": "import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server'\n\nconst isProtectedRoute = createRouteMatcher(['/'])\n\nexport default clerkMiddleware(async (auth, req) => {\n  if (isProtectedRoute(req)) {\n    await auth.protect()\n  }\n})\n\nexport const config = {\n  matcher: [\n    // Skip Next.js internals and all static files, unless found in search params\n    '/((?!_next|[^?]*\\\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)',\n    // Always run for API routes\n    '/(api|trpc)(.*)',\n    // Always run for Clerk routes\n    '/__clerk/(.*)',\n  ],\n}\n",
      "type": "registry:file",
      "target": "src/proxy.ts"
    }
  ],
  "css": {
    "@import \"@clerk/ui/themes/shadcn.css\"": {}
  }
}