diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index df336e9a..39a9b2e6 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,22 +1,35 @@
---
name: Bug report
about: Create a report to help us improve
-title: "[ BUG ]"
+title: '[ BUG ]'
labels: bug
assignees: ''
-
---
+
+
+**Reproduction link**: ``
+
**Describe the bug**
A clear and concise description of what the bug is.
-**To Reproduce**
-Steps to reproduce the behavior:
+**Steps to reproduce the behavior:**
+
1. Start the '...' app with '...'
2. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
+3. Click on '....'
+4. Scroll down to '....'
+5. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
@@ -25,9 +38,21 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Platform (please complete the following information):**
- - Type: [eg: Browser, Simulator, Emulator, Device]
- - OS: [e.g. iOS]
- - Browser (if applies) [e.g. chrome, safari]
+
+- Type: [eg: Browser, Simulator, Emulator, Device]
+- OS: [e.g. iOS]
+- Browser (if applies) [e.g. chrome, safari]
+
+**CLI output (paste the full command output)**
+
+If applicable, paste the full command output by running it with the `--log-level all` flag.
+
+```bash
+npx @react-native-reusables/cli@latest --log-level all [command] [args] [options]
+
+// example:
+// npx @react-native-reusables/cli@latest --log-level all init -t minimal
+```
**Additional context**
Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index c7f50e99..00000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: "[ FEATURE ]"
-labels: enhancement
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 9487f88a..3d9843dc 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -2,9 +2,12 @@
@@ -18,7 +21,6 @@ Fixes issue #
-- [ ] Docs
- [ ] Web
- [ ] iOS
- [ ] Android
@@ -27,8 +29,10 @@ Fixes issue #
-- [apps/app_x]
-- [packages/package_y]
+- [ ] apps/docs
+- [ ] apps/showcase
+- [ ] apps/cli
+- [ ] packages/registry
### Screenshots:
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..45433040
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,9 @@
+{
+ "printWidth": 100,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "bracketSameLine": true,
+ "trailingComma": "es5",
+ "plugins": ["prettier-plugin-tailwindcss"],
+ "tailwindFunctions": ["cva"]
+}
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 491ceb85..2d4cf309 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
Examples of behavior that contributes to a positive environment for our
community include:
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
+- Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
-* The use of sexualized language or imagery, and sexual attention or
+- The use of sexualized language or imagery, and sexual attention or
advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email
address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
+- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
@@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
-nugentzn@gmail.com.
+hello@foundedlabs.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
@@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
+standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
diff --git a/COMMUNITY_RESOURCES.md b/COMMUNITY_RESOURCES.md
new file mode 100644
index 00000000..46311a88
--- /dev/null
+++ b/COMMUNITY_RESOURCES.md
@@ -0,0 +1,84 @@
+# Community Resources
+
+Community-created components, libraries, and templates that extend React Native Reusables and fill in missing shadcn/ui elements.
+
+_Contributions are welcome! Submit a PR to add your resource._
+
+## Components & Libraries
+
+### Calendar
+
+- [React Native Flash Calendar](https://github.com/MarceloPrado/flash-calendar)
+ Incredibly fast and flexible library to build calendars in React Native.
+
+### Carousel
+
+- [Animated.ScrollView](https://medium.com/timeless/building-a-gallery-carousel-in-react-native-using-reanimated-i-19b19e6b6b10)
+ Article explaining how to create a carousel using the ScrollView component.
+
+### Chart
+
+- [Victory Native](https://github.com/FormidableLabs/victory-native-xl)
+ Charting library for React Native with a focus on performance and customization.
+
+### Combobox
+
+_TBD_
+
+### Command
+
+_TBD_
+
+### Data Table
+
+- [Tanstack Table](https://tanstack.com/table/latest)
+ Headless UI for building powerful tables and datagrids.
+
+### Date Picker
+
+- [React Native DateTimePicker](https://github.com/react-native-datetimepicker/datetimepicker)
+ Date and time picker component for iOS, Android, and Windows.
+
+### Drawer
+
+- [Universal Bottom Sheet](https://github.com/adebayoileri/universal-bottom-sheet) by [adebayoileri](https://github.com/adebayoileri)
+ Bottom sheet component that combines Gorhom Bottom Sheet and Vaul for a seamless, responsive experience across mobile and web.
+
+### Form
+
+- [React Hook Form](https://react-hook-form.com/get-started#ReactNative)
+ Performant, flexible, and extensible forms with easy-to-use validation.
+
+### Input OTP
+
+- [input-otp-native](https://github.com/yjose/input-otp-native)
+ 🔐 OTP input for React Native/Expo apps: unstyled, copy-paste examples that are fully tested and compatible with Nativewind.
+
+### Resizable
+
+_TBD_
+
+### Scroll Area
+
+- [React Native ScrollView](https://reactnative.dev/docs/scrollview)
+ Generic scrolling container that can host multiple components and views.
+
+### Sheet (Drawer Navigation)
+
+- [Drawer Navigation](https://reactnavigation.org/docs/drawer-based-navigation/)
+ Drawer navigation component that slides in from the side.
+
+### Sonner
+
+- [Sonner Native](https://github.com/gunnartorfis/sonner-native) by [gunnartorfis](https://github.com/gunnartorfis)
+ Opinionated toast component for React Native. Port of @emilkowalski's sonner.
+
+- [Burnt](https://www.npmjs.com/package/burnt)
+ Cross-platform toasts for React Native, powered by native elements. Uses [Sonner](https://github.com/emilkowalski/sonner) on Web.
+
+---
+
+## Templates
+
+- [RNR Base Bare](https://github.com/a0m0rajab/rnr-base-bare) by [a0m0rajab](https://github.com/a0m0rajab)
+ Supabase-powered starter app with sign-in, sign-up, and profile functionality.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c1f625c5..ad7a2495 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,15 +1,15 @@
-# Contributing to [react-native-reusables](https://github.com/mrzachnugent/react-native-reusables)
+# Contributing to React Native Reusables
Thank you for your interest in contributing to `react-native-reusables`! We welcome contributions from the community to improve and enhance this project. Before getting started, please take a moment to review the following guidelines.
## How to Contribute
-> **IMPORTANT**
+> ⚠️ **Important**
>
-> **If you want to propose a new feature:**
+> If you want to propose a new feature:
>
-> 1. Make sure to read the [project scope](https://github.com/mrzachnugent/react-native-reusables/discussions/229) to confirm your proposal fits within the vision and purpose of `react-native-reusables`.
-> 2. Please open a [new discussion](https://github.com/mrzachnugent/react-native-reusables/discussions) before taking any action. This allows us to collaborate, gather feedback, and ensure alignment with the project's goals.
+> 1. Make sure to read the [project scope](https://github.com/founded-labs/react-native-reusables/discussions/229) to confirm your proposal fits within the vision and purpose of `react-native-reusables`.
+> 2. Before taking any action, please open a [new discussion](https://github.com/founded-labs/react-native-reusables/discussions). This allows us to collaborate, gather feedback, and ensure alignment with the project's goals.
@@ -19,10 +19,10 @@ Thank you for your interest in contributing to `react-native-reusables`! We welc
git clone https://github.com/your-username/react-native-reusables.git
cd react-native-reusables
```
-3. Create a new branch for your feature or bug fix:
+3. Create a new branch:
```bash
- git checkout -b feature/your-feature-name
+ git checkout -b your-username/your-feature-name
```
4. Make your changes and ensure that your code adheres to the existing coding standards.
@@ -35,7 +35,7 @@ git commit -m "Add your commit message here"
6. Push your changes to your forked repository:
```bash
- git push origin feature/your-feature-name
+ git push origin your-username/your-feature-name
```
7. Open a pull request (PR) against the main branch of the original repository.
@@ -48,18 +48,18 @@ Please follow the coding style and guidelines used in the project. If there are
## Issue Tracker
-Check the [issue tracker](https://github.com/mrzachnugent/react-native-reusables/issues) for existing issues or open a new issue to discuss and coordinate your contribution with the maintainers.
+Check the [issue tracker](https://github.com/founded-labs/react-native-reusables/issues) for existing issues or open a new issue to discuss and coordinate your contribution with the maintainers.
## Code of Conduct
-Please review and adhere to our [Code of Conduct](https://github.com/mrzachnugent/react-native-reusables/blob/main/CODE_OF_CONDUCT.md). Be respectful and considerate towards others.
+Please review and adhere to our [Code of Conduct](https://github.com/founded-labs/react-native-reusables/blob/main/CODE_OF_CONDUCT.md). Be respectful and considerate towards others.
## License
-By contributing to this project, you agree that your contributions will be licensed under the [LICENSE](https://github.com/mrzachnugent/react-native-reusables/blob/main/LICENSE) file of this repository.
+By contributing to this project, you agree that your contributions will be licensed under the [LICENSE](https://github.com/founded-labs/react-native-reusables/blob/main/LICENSE) file of this repository.
## Contact
-If you have any questions or need further assistance, feel free to contact us at nugentzn@gmail.com.
+If you have any questions or need further assistance, feel free to contact us at hello@foundedlabs.com.
**We appreciate your contributions and look forward to working with you!**
diff --git a/LICENSE b/LICENSE
index fe17af13..8e3a9ed1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2023 Zach Nugent
+Copyright (c) 2025 Founded Labs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index e7ec4221..f71ac089 100644
--- a/README.md
+++ b/README.md
@@ -1,147 +1,27 @@
# React Native Reusables
-
+Bringing [shadcn/ui](https://ui.shadcn.com) to React Native. Beautifully crafted components with [Nativewind](https://www.nativewind.dev/), open source, and almost as easy to use.
-## Universal [shadcn/ui](https://ui.shadcn.com) for React Native featuring a focused collection of components
+
-Crafted with [NativeWind v4](https://www.nativewind.dev/) and accessibility in mind, `react-native-reusables` is open source, offering a foundation for developing your own high-quality component library.
+## Documentation
-https://github.com/mrzachnugent/react-native-reusables/assets/63797719/ae7e074f-05a4-4568-b71a-f1e0be13650d
+Visit https://reactnativereusables.com/docs to view the documentation.
-[📖 Docs](https://rnr-docs.vercel.app/)
-
-[🌐 Web demo](https://rnr-showcase.vercel.app/)
+## Community Resources
-### How to use
+See the [community resources](./COMMUNITY_RESOURCES.md) for community-maintained components, libraries, and templates.
-**Init**
+## Contributing
-Quickly create a **new project** using the React Native Reusables CLI.
+Please read the [contributing guide](/CONTRIBUTING.md).
-```bash
-npx @react-native-reusables/cli@latest init
-```
+## License
-**Add**
-
-Add components to an existing project using the React Native Reusables CLI.
-
-```bash
-npx @react-native-reusables/cli@latest add
-```
-
-#### Upcoming components
-
-- [Alert](https://ui.shadcn.com/docs/components/alert)
-- [Breadcrumb](https://ui.shadcn.com/docs/components/breadcrumb)
-- [Pagination](https://ui.shadcn.com/docs/components/pagination)
-- [Slider](https://ui.shadcn.com/docs/components/slider)
-- [Toast](https://ui.shadcn.com/docs/components/toast)
-
-## Project Scope
-
-This project includes only components built without third-party libraries or those that use [@rn-primitives](https://rnprimitives.com) _(universal radix-ui/primitives)_.
-
-**Excluded components**
-
-Only **15 out of the 51** shadcn/ui components are excluded from this library. However, you can use the following packages or repositories to build your own
-
-#### Calendar
-
-- [React Native Flash Calendar](https://github.com/MarceloPrado/flash-calendar): An incredibly fast and flexible library to build calendars in React Native.
-
-#### Carousel
-
-- [Animated.ScrollView](https://medium.com/timeless/building-a-gallery-carousel-in-react-native-using-reanimated-i-19b19e6b6b10): An article explaining how to create a carousel using the ScrollView component.
-
-#### Chart
-
-- [Victory Native](https://github.com/FormidableLabs/victory-native-xl): A charting library for React Native with a focus on performance and customization.
-
-#### Combobox
-
-_TBD_
-
-#### Command
-
-_TBD_
-
-#### Data Table
-
-- [Tanstack Table](https://tanstack.com/table/latest): Headless UI for building powerful tables & datagrids
-
-#### Date Picker
-
-- [React Native DateTimePicker](https://github.com/react-native-datetimepicker/datetimepicker): React Native date & time picker component for iOS, Android and Windows
-
-#### Drawer
-
-- [Universal Bottom Sheet](https://github.com/adebayoileri/universal-bottom-sheet) by [adebayoileri](https://github.com/adebayoileri): A bottom sheet component that combines Gorhom Bottom Sheet and Vaul for seamless and responsive experience across both mobile and web.
-
-#### Form
-
-- [React Hook Form](https://react-hook-form.com/get-started#ReactNative): Performant, flexible and extensible forms with easy-to-use validation.
-
-#### Input OTP
-
-- [input-otp-input](https://github.com/yjose/input-otp-native): 🔐 OTP input for React Native/Expo App: Unstyled, copy-paste examples that are fully tested and compatible with NativeWind.
-
-#### Resizable
-
-_TBD_
-
-#### Scroll Area
-
-- [React Native ScrollView](https://reactnative.dev/docs/scrollview): A generic scrolling container that can host multiple components and views.
-
-#### Sheet (Drawer navigation)
-
-- [Drawer navigation](https://reactnavigation.org/docs/drawer-based-navigation/): A drawer navigation component that slides in from the side.
-
-#### Sonner
-
-- [Sonner Native](https://github.com/gunnartorfis/sonner-native) by [gunnartorfis](https://github.com/gunnartorfis): An opinionated toast component for React Native. A port of @emilkowalski's sonner.
-
-- [Burnt](https://www.npmjs.com/package/burnt): Cross-platform toasts for React Native, powered by native elements. On Web, it wraps [Sonner](https://github.com/emilkowalski/sonner).
-
-### Community Templates
-
-Explore community-created components and templates that extend the core library and fill in missing shadcn/ui elements. Contributions are welcome!
-
-- [RNR Base Bare](https://github.com/a0m0rajab/rnr-base-bare) by [a0m0rajab](https://github.com/a0m0rajab): _A simple app using Supabase as the backend, featuring sign-in/sign-up and profile functionality._
-
-## How to contribute
-
-1. Fork this repo, then clone your fork on your machine.
-
-2. Change directory into the cloned repo: `cd react-native-reusables`
-
-3. Install the dependencies (**IMPORTANT:** Must use pnpm): `pnpm i`
-
-4. From the root directory, start up desired app with the following commands:
-
-- Showcase
- - iOS: `pnpm dev:showcase`
- - Android: `pnpm dev:showcase:android`
- - Web: `pnpm dev:showcase:web`
-- Starter-base
- - iOS: `pnpm dev:starter-base`
- - Android: `pnpm dev:starter-base:android`
- - Web: `pnpm dev:starter-base:web`
-- Docs: `pnpm dev:docs`
-
-5. Add and commit your changes
-
-6. Make a pull request
-
-### Deprecated-UI
-
-> These components are still available for use but are no longer recommended or actively supported by the developers. They can be used as inspiration or as a starting point for your own components.
-
-[View deprecated components](/packages/reusables/src/components/deprecated-ui/README.md)
+Licensed under the [MIT license](/LICENSE).
+ Bringing{' '}
+
+ shadcn/ui
+ {' '}
+ to React Native. Beautifully crafted components with Nativewind, open source, and{' '}
+ almost as easy to use.
+
+
+
+
+
+
+ );
+}
diff --git a/apps/docs/app/api/search/route.ts b/apps/docs/app/api/search/route.ts
new file mode 100644
index 00000000..0460493d
--- /dev/null
+++ b/apps/docs/app/api/search/route.ts
@@ -0,0 +1,4 @@
+import { source } from '@docs/lib/source';
+import { createFromSource } from 'fumadocs-core/search/server';
+
+export const { GET } = createFromSource(source);
diff --git a/apps/docs/app/docs/[[...slug]]/page.tsx b/apps/docs/app/docs/[[...slug]]/page.tsx
new file mode 100644
index 00000000..c5aeadc1
--- /dev/null
+++ b/apps/docs/app/docs/[[...slug]]/page.tsx
@@ -0,0 +1,204 @@
+import { Button } from '@docs/components/ui/button';
+import { source } from '@docs/lib/source';
+import { cn } from '@docs/lib/utils';
+import { findNeighbour } from 'fumadocs-core/server';
+import { CodeBlock, Pre } from 'fumadocs-ui/components/codeblock';
+import defaultMdxComponents from 'fumadocs-ui/mdx';
+import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page';
+import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';
+import Link from 'next/link';
+import { notFound } from 'next/navigation';
+
+export default async function Page(props: { params: Promise<{ slug?: string[] }> }) {
+ const params = await props.params;
+ const page = source.getPage(params.slug);
+ if (!page) notFound();
+
+ const MDX = page.data.body;
+
+ return (
+ : null,
+ }}
+ footer={{
+ component: ,
+ }}>
+
+
+ The React Native Reusables App (“the App”) is an interactive developer tool that allows
+ users to explore, preview, and interact with a wide range of UI components and blocks
+ provided by the React Native Reusables project. It is designed for developers and designers
+ who want to evaluate, learn from, and integrate these components into their own
+ applications.
+
+
+
1. Information We Collect
+
+ We do not collect, store, or share any personal data. At this time, the App does not require
+ authentication and does not track user behavior, usage statistics, or analytics data.
+
+
+
2. Authentication
+
+ No authentication mechanisms are currently implemented. If authentication is added in the
+ future, this Privacy Policy will be updated to reflect that change.
+
+
+
3. Data Usage and Sharing
+
Since we do not collect any data, we do not share any data with third parties.
+
+
4. Changes to This Policy
+
+ We may update this Privacy Policy if features change. If we do, we will revise the
+ “Effective Date” at the top of this page. For any significant changes, we may provide
+ additional notice within the app.
+
+
+
5. Contact
+
+ If you have any questions about this Privacy Policy or the App, please contact us at:
+ hello@foundedlabs.com
+
+
+ );
+}
diff --git a/apps/docs/app/showcase/support/page.tsx b/apps/docs/app/showcase/support/page.tsx
new file mode 100644
index 00000000..9df55cd9
--- /dev/null
+++ b/apps/docs/app/showcase/support/page.tsx
@@ -0,0 +1,44 @@
+export default function Page() {
+ return (
+
+
Support
+
Effective Date: July 26, 2025
+
+ The React Native Reusables App (“the App”) is an interactive developer tool that enables
+ users to explore and implement UI components and blocks provided by the React Native
+ Reusables project.
+
+
1. How to Get Support
+
If you need help with the App or React Native Reusables, you can:
+
+
+ Browse the documentation available on this{' '}
+ website.
+
Reach out directly by email at: hello@foundedlabs.com
+
+
2. Response Time
+
+ Support inquiries will be reviewed as time permits. While there is no guaranteed response
+ time, every effort will be made to address questions and issues promptly.
+
+
3. Updates to Support Information
+
+ Support details may be updated in the future. When changes occur, they will be reflected on
+ this page.
+
+
4. Contact
+
+ For any additional assistance, contact:
+ hello@foundedlabs.com
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `ForgotPasswordForm` in your app.
+
+ ```tsx
+ import { ForgotPasswordForm } from '@/components/forgot-password-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function ForgotPasswordScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can import `ForgotPasswordForm` in your app.
+
+ ```tsx
+ import { ForgotPasswordForm } from '@/components/forgot-password-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function ForgotPasswordScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/forgot-password-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/forgot-password-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/forgot-password-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/forgot-password-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/index.mdx b/apps/docs/content/docs/blocks/authentication/index.mdx
new file mode 100644
index 00000000..6177ba7a
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/index.mdx
@@ -0,0 +1,38 @@
+---
+title: Authentication
+description: Copy and paste or add them with the CLI.
+---
+
+import { Callout } from "@docs/components/callout"
+import { BlocksGrid } from "@docs/components/blocks-grid"
+import { CommandTabs } from "@docs/components/command-tabs"
+import { ClerkLogo } from "@docs/components/clerk-logo"
+
+## Blocks
+
+
+
+
+
+
+## Clerk
+
+
+
+
+
+Optional integration.
+
+Select **Clerk** from the integration menu to get blocks built with Clerk authentication logic.
+
+After adding your first block, follow the [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to complete the setup.
+
+
+
+
+
+Start a new project with all Clerk authentication blocks pre-configured using the [clerk-auth](https://github.com/founded-labs/react-native-reusables-templates/tree/main/clerk-auth#clerk-auth-template) template.
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/meta.json b/apps/docs/content/docs/blocks/authentication/meta.json
new file mode 100644
index 00000000..2ff35a41
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/meta.json
@@ -0,0 +1,11 @@
+{
+ "pages": [
+ "sign-in-form",
+ "sign-up-form",
+ "verify-email-form",
+ "reset-password-form",
+ "forgot-password-form",
+ "social-connections",
+ "user-menu"
+ ]
+}
diff --git a/apps/docs/content/docs/blocks/authentication/reset-password-form.mdx b/apps/docs/content/docs/blocks/authentication/reset-password-form.mdx
new file mode 100644
index 00000000..bef2513c
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/reset-password-form.mdx
@@ -0,0 +1,189 @@
+---
+title: Reset password form
+description: A form for resetting a password with an OTP sent via email.
+---
+
+import { BlockPreviewCard } from '@docs/components/preview-card';
+import { ResetPasswordForm } from "@docs/components/blocks";
+import { ExternalLinks } from "@docs/components/external-links";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { CommandTabs } from "@docs/components/command-tabs";
+import { AuthBlockTabs, AuthBlockTabsCliContent, AuthBlockTabsManualContent } from '@docs/components/auth-block-tabs';
+import { Callout } from '@docs/components/callout';
+
+
+
+
+
+
+ ## Preview
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `ResetPasswordForm` in your app.
+
+ ```tsx
+ import { ResetPasswordForm } from '@/components/reset-password-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function ResetPasswordScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can import `ResetPasswordForm` in your app.
+
+ ```tsx
+ import { ResetPasswordForm } from '@/components/reset-password-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function ResetPasswordScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/reset-password-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/reset-password-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/reset-password-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/reset-password-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/sign-in-form.mdx b/apps/docs/content/docs/blocks/authentication/sign-in-form.mdx
new file mode 100644
index 00000000..afa3fb3e
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/sign-in-form.mdx
@@ -0,0 +1,195 @@
+---
+title: Sign in form
+description: A form for signing in using email and password or social providers.
+---
+
+import { BlockPreviewCard } from '@docs/components/preview-card';
+import { SignInForm } from "@docs/components/blocks";
+import { ExternalLinks } from "@docs/components/external-links";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { CommandTabs } from "@docs/components/command-tabs";
+import { AuthBlockTabs, AuthBlockTabsCliContent, AuthBlockTabsManualContent } from '@docs/components/auth-block-tabs';
+import { Callout } from '@docs/components/callout';
+
+
+
+
+
+
+ ## Preview
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `SignInForm` in your app.
+
+ ```tsx
+ import { SignInForm } from '@/components/sign-in-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function SignInScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can now import `SignInForm` in your app.
+
+ ```tsx
+ import { SignInForm } from '@/components/sign-in-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function SignInScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If missing, add the following block and/or components:**
+
+ - [`SocialConnections`](/docs/blocks/authentication/social-connections)
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Separator`](/docs/components/separator)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/sign-in-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/sign-in-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following block and/or components:**
+
+ - [`SocialConnections`](/docs/blocks/authentication/social-connections)
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Separator`](/docs/components/separator)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/sign-in-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/sign-in-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/sign-up-form.mdx b/apps/docs/content/docs/blocks/authentication/sign-up-form.mdx
new file mode 100644
index 00000000..166fff55
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/sign-up-form.mdx
@@ -0,0 +1,194 @@
+---
+title: Sign up form
+description: A form for creating an account with email and password or social providers.
+---
+
+import { BlockPreviewCard } from '@docs/components/preview-card';
+import { SignUpForm } from "@docs/components/blocks";
+import { ExternalLinks } from "@docs/components/external-links";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { CommandTabs } from "@docs/components/command-tabs";
+import { AuthBlockTabs, AuthBlockTabsCliContent, AuthBlockTabsManualContent } from '@docs/components/auth-block-tabs';
+import { Callout } from '@docs/components/callout';
+
+
+
+
+
+
+ ## Preview
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `SignUpForm` in your app.
+
+ ```tsx
+ import { SignUpForm } from '@/components/sign-up-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function SignUpScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can import `SignUpForm` in your app.
+
+ ```tsx
+ import { SignUpForm } from '@/components/sign-up-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function SignUpScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If missing, add the following block and/or components:**
+
+ - [`SocialConnections`](/docs/blocks/authentication/social-connections)
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Separator`](/docs/components/separator)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/sign-up-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/sign-up-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following block and/or components:**
+
+ - [`SocialConnections`](/docs/blocks/authentication/social-connections)
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Separator`](/docs/components/separator)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/sign-up-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/sign-up-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/social-connections.mdx b/apps/docs/content/docs/blocks/authentication/social-connections.mdx
new file mode 100644
index 00000000..91986659
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/social-connections.mdx
@@ -0,0 +1,185 @@
+---
+title: Social connections
+description: A set of buttons for authenticating through social providers.
+---
+
+import { BlockPreviewCard } from '@docs/components/preview-card';
+import { SocialConnections } from "@docs/components/blocks";
+import { ExternalLinks } from "@docs/components/external-links";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { CommandTabs } from "@docs/components/command-tabs";
+import { AuthBlockTabs, AuthBlockTabsCliContent, AuthBlockTabsManualContent } from '@docs/components/auth-block-tabs';
+import { Callout } from '@docs/components/callout';
+
+
+
+
+
+
+ ## Preview
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `SocialConnections` in your app.
+
+ ```tsx
+ import { SocialConnections } from '@/components/social-connections';
+ import { View } from 'react-native';
+
+ export default function SocialConnectionsScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can import `SocialConnections` in your app.
+
+ ```tsx
+ import { SocialConnections } from '@/components/social-connections';
+ import { View } from 'react-native';
+
+ export default function SocialConnectionsScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If missing, add the following component:**
+
+ - [`Button`](/docs/components/button)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/social-connections.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/social-connections.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+
+ **Install the following dependencies:**
+
+ ```bash
+ npx expo install expo-auth-session expo-web-browser
+ ```
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following component:**
+
+ - [`Button`](/docs/components/button)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/social-connections.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/social-connections.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/user-menu.mdx b/apps/docs/content/docs/blocks/authentication/user-menu.mdx
new file mode 100644
index 00000000..7c763214
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/user-menu.mdx
@@ -0,0 +1,179 @@
+---
+title: User menu
+description: A popover menu presenting options and actions for the current user.
+---
+
+import { BlockPreviewCard } from '@docs/components/preview-card';
+import { UserMenu } from "@docs/components/blocks";
+import { ExternalLinks } from "@docs/components/external-links";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { CommandTabs } from "@docs/components/command-tabs";
+import { AuthBlockTabs, AuthBlockTabsCliContent, AuthBlockTabsManualContent } from '@docs/components/auth-block-tabs';
+import { Callout } from '@docs/components/callout';
+
+
+
+
+
+
+ ## Preview
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `UserMenu` in your app.
+
+ ```tsx
+ import { UserMenu } from '@/components/user-menu';
+ import { View } from 'react-native';
+
+ export default function UserMenuScreen() {
+ return (
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can import `UserMenu` in your app.
+
+ ```tsx
+ import { UserMenu } from '@/components/user-menu';
+ import { View } from 'react-native';
+
+ export default function UserMenuScreen() {
+ return (
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Avatar`](/docs/components/avatar)
+ - [`Button`](/docs/components/button)
+ - [`Popover`](/docs/components/popover)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/user-menu.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/user-menu.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Avatar`](/docs/components/avatar)
+ - [`Button`](/docs/components/button)
+ - [`Popover`](/docs/components/popover)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/user-menu.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/user-menu.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/blocks/authentication/verify-email-form.mdx b/apps/docs/content/docs/blocks/authentication/verify-email-form.mdx
new file mode 100644
index 00000000..bca46c8b
--- /dev/null
+++ b/apps/docs/content/docs/blocks/authentication/verify-email-form.mdx
@@ -0,0 +1,191 @@
+---
+title: Verify email form
+description: A form for verifying an email address with an OTP sent via email.
+---
+
+import { BlockPreviewCard } from '@docs/components/preview-card';
+import { VerifyEmailForm } from "@docs/components/blocks";
+import { ExternalLinks } from "@docs/components/external-links";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { CommandTabs } from "@docs/components/command-tabs";
+import { AuthBlockTabs, AuthBlockTabsCliContent, AuthBlockTabsManualContent } from '@docs/components/auth-block-tabs';
+import { Callout } from '@docs/components/callout';
+
+
+
+
+
+
+ ## Preview
+
+
+} />
+
+
+## Installation
+
+
+
+
+
+
+
+
+ **All set!**
+
+ You can import `VerifyEmailForm` in your app.
+
+ ```tsx
+ import { VerifyEmailForm } from '@/components/verify-email-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function VerifyEmailScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+ **All set!**
+
+ You can import `VerifyEmailForm` in your app.
+
+ ```tsx
+ import { VerifyEmailForm } from '@/components/verify-email-form';
+ import { ScrollView, View } from 'react-native';
+
+ export default function VerifyEmailScreen() {
+ return (
+
+
+
+
+
+ );
+ }
+ ```
+
+
+
+
+
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/verify-email-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/verify-email-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
+
+
+
+ **If you haven't already**
+
+ - Install the Clerk package:
+
+ ```bash
+ npx expo install @clerk/clerk-expo
+ ```
+
+ - Follow steps 2-4 of Clerk's [Expo quick start](https://go.clerk.com/8e6CCee#set-your-clerk-api-keys) to configure your app for Clerk.
+
+
+
+
+ **If missing, add the following components:**
+
+ - [`Button`](/docs/components/button)
+ - [`Card`](/docs/components/card)
+ - [`Input`](/docs/components/input)
+ - [`Label`](/docs/components/label)
+ - [`Text`](/docs/components/text)
+
+
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/blocks/clerk/verify-email-form.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/verify-email-form.tsx\""
+ }
+ }
+ ```
+
+
+
+
+
+ **Adjust for your project setup.**
+
+ Update the import paths to match your project structure, and address any `// TODO:` comments by adding the app-specific logic they describe.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/changelog.mdx b/apps/docs/content/docs/changelog.mdx
new file mode 100644
index 00000000..6ea173e7
--- /dev/null
+++ b/apps/docs/content/docs/changelog.mdx
@@ -0,0 +1,177 @@
+---
+title: Changelog
+description: Latest updates and announcements.
+---
+
+import { Callout } from '@docs/components/callout';
+import { CommandTabs } from '@docs/components/command-tabs';
+import { VercelOssBadge } from '@docs/components/vercel-oss-badge';
+import { ClerkLogo } from '@docs/components/clerk-logo';
+import { DownloadAppBanner } from '@docs/components/download-app-banner';
+
+## August 2025 - Total Rewrite
+
+New CLI. New docs. New registry. New showcase app. New sponsors.
+
+
+### Now part of the Vercel OSS Program [#august-2025-vercel-oss]
+
+
+
+React Native Reusables is now part of the [Vercel OSS Program](https://vercel.com/oss), which supports its continued growth and development.
+
+### Sponsored Blocks by Clerk [#august-2025-clerk]
+
+
+
+
+
+React Native Reusables now features a [template](https://github.com/founded-labs/react-native-reusables-templates/tree/main/clerk-auth) and sponsored [blocks](/docs/blocks/authentication) from [Clerk](https://go.clerk.com/gjgxNgT), helping you quickly integrate authentication into your apps with React Native Reusables.
+
+
+### First React Native shadcn registry _(probably)_ [#august-2025-first-react-native-shadcn-registry]
+
+You can now use `npx shadcn@latest` with our registries.
+
+React Native Reusables now follows the shadcn/ui **new-york** style, providing a consistent and familiar design system for your apps.
+
+To make the experience even smoother, we built a thin wrapper around the CLI.
+
+- No need to copy long registry URLs
+
+- You can use `--all` to install everything at once
+
+- If you skip the component name, you'll get a multi-select prompt
+
+
+
+
+For more details, see the [add options](/docs/cli#add).
+
+Same power, tailored for React Native Reusables.
+
+### Standardize rem to match web [#august-2025-standardize-rem]
+
+In the `metro.config.js`, `inlineRem` is now set to `16` to match web sizing.
+
+```diff title="metro.config.js"
+const { getDefaultConfig } = require('expo/metro-config');
+const { withNativeWind } = require('nativewind/metro');
+
+const config = getDefaultConfig(__dirname);
+
+- module.exports = withNativeWind(config, { input: './global.css' });
++ module.exports = withNativeWind(config, { input: './global.css', inlineRem: 16 });
+```
+
+### Enhanced iOS portal rendering with FullWindowOverlay [#august-2025-fullwindowoverlay-ios]
+
+All portal content on iOS is now wrapped with `FullWindowOverlay` from `react-native-screens` to improve rendering and ensure seamless integration with native navigation.
+
+### New CLI - rewritten with Effect + shadcn [#august-2025-new-cli-rewritten-with-effect-shadcn]
+
+The CLI has been rebuilt from the ground up with [`effect`](https://effect.website) and the [`shadcn`](https://ui.shadcn.com/docs/cli) engine under the hood for the add command.
+
+Features:
+
+- `doctor` command to diagnose and fix certain config/setup issues
+
+- Registry-aware component scaffolding
+
+- Stronger foundation for future updates
+
+
+
+For more details, see the [doctor command](/docs/cli#doctor).
+
+### Improved component architecture [#august-2025-improved-component-architecture]
+
+Every component has been refined and standardized.
+
+- Improved platform-specific logic
+
+- Easier to override and customize
+
+
+### Blocks [#august-2025-blocks]
+
+Introduced authentication [blocks](/docs/blocks/authentication) to help you quickly integrate authentication into your apps with React Native Reusables.
+
+### Showcase App [#august-2025-showcase-app]
+
+
+
+### Redesigned Docs [#august-2025-redesigned-docs]
+
+The docs have been redesigned to be more consistent and easier to use.
+
+### New GitHub Home [#august-2025-new-github-home]
+
+We moved the repo from my personal account to a dedicated org [@founded-labs](https://github.com/founded-labs).
+
+This gives the project a long-term home with more room to grow.
+
+### New Icon component [#august-2025-new-icon-component]
+
+A single icon component to replace all icons from the deprecated `/lib/icons` directory.
+
+**Install the new icon component with the CLI**
+
+
+
+
+```tsx
+// Example usage
+import { Icon } from '@/components/ui/icon';
+import { HeartIcon } from 'lucide-react-native';
+
+
+
+```
+
+### Text variants [#august-2025-text-variants]
+
+The `Text` component now includes built-in typography variants, so you no longer need to use the deprecated `Typography` components like ``.
+
+Use the variant prop like this:
+
+```tsx
+Title
+```
+
+Available variants: `default`, `h1` , `h2`, `h3`, `h4`, `p`, `block-quote`, `code`, `lead`, `large`, `small`, and `muted`.
+
+### Deprecated [#august-2025-deprecated]
+
+- `lib/constants.ts`: now using the [`theme.ts`](/docs/customization#themets) file.
+
+- `lib/useColorScheme.ts`: now using the hook directly from [`nativewind`](https://www.nativewind.dev/docs/api/use-color-scheme)
+
+- `lib/icons`: deprecated in favor of the new [`Icon`](#august-2025-new-icon-component) component.
+
+- `components/ui/typography.tsx`: deprecated in favor of the new [`variant`](#august-2025-text-variants) prop on the `Text` component.
+
+### Upgrade Notes [#august-2025-upgrade-notes]
+1. Run the `doctor` command to diagnose. Then, follow the instructions to get your project up to date:
+
+
+
+2. Update your components by running the `add` command with `--overwrite` and list the components from your project:
+
+
+ Make sure you commit your changes before running the add command and use the diff view to see what's changed and to keep
+ your own custom changes.
+
+
+
+
+
+
+#### Thank you [#august-2025-thanks]
+
+
+
+
+
+Thank you to everyone who has been using React Native Reusables, sharing feedback, and contributing.
+Your support means a lot and is truly appreciated.
\ No newline at end of file
diff --git a/apps/docs/content/docs/cli.mdx b/apps/docs/content/docs/cli.mdx
new file mode 100644
index 00000000..787bcd79
--- /dev/null
+++ b/apps/docs/content/docs/cli.mdx
@@ -0,0 +1,95 @@
+---
+title: CLI
+description: Use the CLI to add components and more
+---
+
+import { Callout } from '@docs/components/callout';
+import { CommandTabs } from '@docs/components/command-tabs';
+
+## init
+
+Use `init` to scaffold a new Expo project using a template.
+
+
+
+### Options
+
+```bash
+Usage: react-native-reusables init [options]
+
+Initialize a new Expo project with React Native Reusables
+
+Options:
+ -c, --cwd the working directory. defaults to the current directory.
+ -t, --template the template to use.
+ -h, --help display help for command
+```
+
+
+
+- [minimal](https://github.com/founded-labs/react-native-reusables-templates/tree/main/minimal#minimal-template)
+- [clerk-auth](https://github.com/founded-labs/react-native-reusables-templates/tree/main/clerk-auth#clerk-auth-template)
+
+
+
+## add
+
+
+Use `add` to add React Native Reusables components to your project.
+
+
+
+
+### Options
+
+```bash
+Usage: react-native-reusables add [options] [...components]
+
+Add React Native Reusables components to your project
+
+Arguments:
+ components name of components to add
+
+Options:
+ -c, --cwd the working directory. defaults to the current directory.
+ -y, --yes skip confirmation prompt
+ -o, --overwrite force overwrite of existing files
+ -a, --all add all components
+ -p --path path to the component
+ -h, --help display help for command
+```
+
+
+ Uses the [shadcn](https://ui.shadcn.com/docs/cli#add) CLI under the hood.
+
+
+
+## doctor
+
+Use `doctor` to check if everything is set up correctly.
+
+
+
+### Options
+
+```bash
+Usage: react-native-reusables doctor [options]
+
+Check your project setup and diagnose issues
+
+Options:
+ -c, --cwd the working directory. defaults to the current directory.
+ -s, --summary show summary only
+ -y, --yes skip confirmation prompt
+ -h, --help display help for command
+```
+
+
+
+
+
+ If you're having issues, you can run any command with the initial `--log-level all` flag to get more information and create a [bug report](https://github.com/founded-labs/react-native-reusables/issues).
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/components/accordion.mdx b/apps/docs/content/docs/components/accordion.mdx
new file mode 100644
index 00000000..fbad021b
--- /dev/null
+++ b/apps/docs/content/docs/components/accordion.mdx
@@ -0,0 +1,199 @@
+---
+title: Accordion
+description: A vertically stacked set of interactive headings that each reveal a section of content.
+---
+
+import { CommandTabs } from "@docs/components/command-tabs";
+import { ExternalLinks } from "@docs/components/external-links";
+import { PreviewCard } from "@docs/components/preview-card";
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "@docs/components/ui/tabs";
+import { AccordionPreview } from "@docs/components/examples";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+
+
+
+
+
+
+
+ Preview
+ Code
+
+
+
+ } />
+
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/examples/toggle.tsx",
+ "codeblock": {
+ "lang": "tsx"
+ }
+ }
+ ```
+
+
+
+
+## Installation
+
+
+
+ CLI
+ Manual
+
+
+
+
+
+
+
+
+ **Install the following dependency:**
+
+ ```
+ npx expo install @rn-primitives/toggle
+ ```
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/new-york/components/ui/text.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/ui/text.tsx\""
+ }
+ }
+ ```
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/new-york/components/ui/icon.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/ui/icon.tsx\""
+ }
+ }
+ ```
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/new-york/components/ui/toggle.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/ui/toggle.tsx\""
+ }
+ }
+ ```
+
+
+
+
+ **Update the import paths to match your project setup.**
+
+
+
+
+
+
+
+### Usage
+
+```tsx
+import { Toggle } from "@/components/ui/toggle"
+```
+
+```tsx
+const [pressed, setPressed] = React.useState(false);
+
+return (
+
+)
+```
+
diff --git a/apps/docs/content/docs/components/tooltip.mdx b/apps/docs/content/docs/components/tooltip.mdx
new file mode 100644
index 00000000..035af4d6
--- /dev/null
+++ b/apps/docs/content/docs/components/tooltip.mdx
@@ -0,0 +1,124 @@
+---
+title: Tooltip
+description: A popup that displays information related to an element when the element receives keyboard focus, the mouse hovers over it, or when it is pressed.
+---
+
+import { CommandTabs } from "@docs/components/command-tabs";
+import { ExternalLinks } from "@docs/components/external-links";
+import { PreviewCard } from "@docs/components/preview-card";
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "@docs/components/ui/tabs";
+import { TooltipPreview } from "@docs/components/examples";
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import { PortalInfoAlert } from '@docs/components/portal-info-alert';
+
+
+
+
+
+
+
+ Preview
+ Code
+
+
+
+ ## Preview
+
+ } />
+
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/examples/tooltip.tsx",
+ "codeblock": {
+ "lang": "tsx"
+ }
+ }
+ ```
+
+
+
+
+## Installation
+
+
+
+ CLI
+ Manual
+
+
+
+
+
+
+
+
+ **Install the following dependency:**
+
+ ```
+ npx expo install @rn-primitives/tooltip
+ ```
+
+
+
+
+ **Copy and paste the following code into your project.**
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/new-york/components/ui/text.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/ui/text.tsx\""
+ }
+ }
+ ```
+
+ ```json doc-gen:file
+ {
+ "file": "./node_modules/@rnr/registry/src/new-york/components/ui/tooltip.tsx",
+ "codeblock": {
+ "lang": "tsx",
+ "meta": "title=\"@/components/ui/tooltip.tsx\""
+ }
+ }
+ ```
+
+
+
+
+ **Update the import paths to match your project setup.**
+
+
+
+
+
+
+
+### Usage
+
+
+
+```tsx
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipTrigger,
+} from "@/components/ui/tooltip"
+import { Text } from "@/components/ui/text"
+```
+
+```tsx
+
+ Hover
+
+ Add to library
+
+
+```
+
diff --git a/apps/docs/content/docs/create-your-own-registry.mdx b/apps/docs/content/docs/create-your-own-registry.mdx
new file mode 100644
index 00000000..0d54d7b9
--- /dev/null
+++ b/apps/docs/content/docs/create-your-own-registry.mdx
@@ -0,0 +1,62 @@
+---
+title: Create Your Own Registry
+description: Host a registry and allow others to add your code to their projects.
+---
+
+import { Callout } from '@docs/components/callout';
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+import Image from 'next/image';
+import { CommandTabs } from '@docs/components/command-tabs';
+
+
+
+
+
+ A distribution system for code by shadcn
+
+
+
+
+## Getting started
+
+To create your own registry, follow the official shadcn/ui [registry guide](https://ui.shadcn.com/docs/registry).
+
+
+ Kickstart your React Native Reusables registry using the [rnr-registry-template](https://github.com/gabimoncha/rnr-registry-template) by [@gabimoncha](https://github.com/gabimoncha).
+
+
+
+
+## Using React Native Reusables with your registry
+
+To use React Native Reusables in your registry, add them as `registryDependencies` in your [`registry-item.json`](https://ui.shadcn.com/docs/registry/registry-item-json) files.
+
+Instead of using short names like in the shadcn/ui registry, use the full URL of the React Native Reusables registry item:
+
+```
+http://reactnativereusables.com/r/new-york/.json
+```
+
+Replace `` with the component you want to install.
+
+
+
+## Using the CLI
+
+Once your registry is up and running, you can install components using the `add` command and the full URL of the registry item.
+
+You can use either `shadcn` or `@react-native-reusables/cli`.
+
+
diff --git a/apps/docs/content/docs/customization.mdx b/apps/docs/content/docs/customization.mdx
new file mode 100644
index 00000000..5907a94d
--- /dev/null
+++ b/apps/docs/content/docs/customization.mdx
@@ -0,0 +1,53 @@
+---
+title: Customization
+description: How to customize your project
+---
+
+React Native Reusables uses a theme system based on Tailwind CSS v3 and shadcn/ui. There are four files involved:
+
+- `components.json` - used by the CLI to scaffold components with the correct paths and style
+- `global.css` - defines your light and dark themes using CSS variables
+- `tailwind.config.ts` - connects Tailwind classes to your CSS variables
+- `theme.ts` - mirrors those variables in TypeScript and includes the navigation theme
+
+
+## `components.json`
+
+This works like [shadcn/ui's components.json](https://ui.shadcn.com/docs/components-json). It tells the CLI where to place files. You can leave it alone unless you're changing paths or switching styles.
+
+## `global.css`
+
+Defines your theme using CSS variables under `:root` and `.dark:root` (for dark mode). Tailwind classes like `bg-background` and `text-foreground` use these variables.
+
+You can choose a custom theme from [shadcn/ui themes](https://ui.shadcn.com/themes), but make sure to:
+
+- Use the Tailwind v3 version (CSS variables)
+- Replace `.dark` with `.dark:root` for compatibility with Nativewind
+
+See the [full list of CSS variables](https://ui.shadcn.com/docs/theming#list-of-variables) in the shadcn/ui documentation.
+
+## `tailwind.config.ts`
+
+Connects Tailwind utility classes (like `bg-card`, `text-muted`) to the CSS variables defined in `global.css`, while also configuring the dark mode selector, plugins, and animations.
+
+## `theme.ts`
+
+Exports the same colors from `global.css` as a TypeScript object, so you can use them in logic, inline styles, or animations. Also includes `NAV_THEME` for the `ThemeProvider` in `_layout.tsx`.
+
+If you update a CSS variable, update `theme.ts` as well.
+
+
+
+
+
+
+ Tip: After updating CSS variables in `global.css`, use this prompt to sync `theme.ts`:
+
+
+> Read CSS variables under `:root` and `.dark:root` in `global.css`.
+> Update the `light` and `dark` entries in the `THEME` object in `theme.ts` to match these values in HSL format.
+> Keep all keys and `NAV_THEME` unchanged.
+> Add new variables if missing; comment stale ones if no matching CSS variable exists.
+> Maintain the original formatting and key order.
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/index.mdx b/apps/docs/content/docs/index.mdx
new file mode 100644
index 00000000..dc00039b
--- /dev/null
+++ b/apps/docs/content/docs/index.mdx
@@ -0,0 +1,35 @@
+---
+title: Introduction
+---
+
+import { DownloadAppBanner } from '@docs/components/download-app-banner';
+
+
+This is not a component library. It is how you build your component library.
+
+
+## Bringing the shadcn/ui experience to React Native
+
+Built with familiar tools and libraries, it follows consistent styling, structure, and naming conventions, letting you use your favorite design system to create beautiful universal apps.
+
+
+
+
+
+
+
+## Key differences from shadcn/ui
+
+- Nativewind: React Native Reusables integrates with Nativewind for utility-first styling on native, providing a Tailwind-like experience adapted for React Native.
+- RN Primitives: A universal port of Radix UI primitives for React Native with an almost identical API, enabling consistent composition on native platforms.
+- Portals: React Native doesn't support DOM portals. On native platforms, components like modals, dropdowns, and toasts need a [`PortalHost`](https://rnprimitives.com/portal/).
+- No cascading styles: Child elements like `Text` can't inherit styles from a parent class. Each element must be styled directly. We use a small [workaround](/docs/components/text#inheritance-system) for `Text`.
+- No data attributes: React Native doesn't support `data-*` attributes, so variants rely on props or state for native platforms.
+- Reanimated: Uses `react-native-reanimated` for smooth, native performance.
+- Icons: Uses a wrapper component in combination with a Lucide icon to avoid wrapping every imported icon individually (e.g. ``).
+- Programmatic control: Some components, such as `DropdownMenu`, can't be controlled with `open` or `onOpenChange` props. Instead, you use a `ref` to manage open and close behavior after layout calculation.
+
+
+
+React Native Reusables aims to stay true to the spirit of shadcn/ui while adapting it to the unique constraints of mobile/universal development.
+
diff --git a/apps/docs/content/docs/installation/index.mdx b/apps/docs/content/docs/installation/index.mdx
new file mode 100644
index 00000000..93e16538
--- /dev/null
+++ b/apps/docs/content/docs/installation/index.mdx
@@ -0,0 +1,54 @@
+---
+title: Installation
+description: Getting Started with React Native Reusables
+---
+
+import { Button } from '@docs/components/ui/button';
+import Link from 'next/link';
+import { SquareTerminalIcon, WrenchIcon } from 'lucide-react';
+import { InstallationTabs } from '@docs/components/installation-tabs';
+import { CommandTabs } from '@docs/components/command-tabs';
+
+
+## Create project
+
+Run `init` to start a new project, or follow the manual steps to set up an existing one.
+
+
+
+
+
+
+
+
+
+
+ This creates a new project in the current directory. For more details, see the [init options](/docs/cli#init).
+
+
+
+## Add components
+
+You can now start adding components to your app.
+
+
+
+
+ The command above will add the `Button` component to your project. You can then import it like this:
+