diff --git a/README.md b/README.md
index 64c10c7eb8..4aeea8ab1c 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ Beautifully designed components built with Radix UI and Tailwind CSS.
- [ ] Toggle
- [ ] Toggle Group
- [ ] Toolbar
-- [ ] Navigation Menu
+- [ ] Navigation Menu (Vertical and Submenus)
- [ ] Figma?
## Get Started
diff --git a/apps/www/components/examples/index.tsx b/apps/www/components/examples/index.tsx
index 0ee7883937..0029b95add 100644
--- a/apps/www/components/examples/index.tsx
+++ b/apps/www/components/examples/index.tsx
@@ -3,8 +3,8 @@ import { AlertDialogDemo } from "@/components/examples/alert-dialog/demo"
import { AspectRatioDemo } from "@/components/examples/aspect-ratio/demo"
import { AvatarDemo } from "@/components/examples/avatar/demo"
import { ButtonDemo } from "@/components/examples/button/demo"
-import { ButtonGhost } from "@/components/examples/button/ghost"
import { ButtonDestructive } from "@/components/examples/button/destructive"
+import { ButtonGhost } from "@/components/examples/button/ghost"
import { ButtonLink } from "@/components/examples/button/link"
import { ButtonLoading } from "@/components/examples/button/loading"
import { ButtonOutline } from "@/components/examples/button/outline"
@@ -27,6 +27,7 @@ import { InputWithLabel } from "@/components/examples/input/with-label"
import { InputWithText } from "@/components/examples/input/with-text"
import { LabelDemo } from "@/components/examples/label/demo"
import { MenubarDemo } from "@/components/examples/menubar/demo"
+import { NavigationMenuDemo } from "@/components/examples/navigation-menu/demo"
import { PopoverDemo } from "@/components/examples/popover/demo"
import { ProgressDemo } from "@/components/examples/progress/demo"
import { RadioGroupDemo } from "@/components/examples/radio-group/demo"
@@ -87,6 +88,7 @@ export const examples = {
InputWithText,
LabelDemo,
MenubarDemo,
+ NavigationMenuDemo,
PopoverDemo,
ProgressDemo,
RadioGroupDemo,
diff --git a/apps/www/components/examples/navigation-menu/demo.tsx b/apps/www/components/examples/navigation-menu/demo.tsx
new file mode 100644
index 0000000000..cf3df9a437
--- /dev/null
+++ b/apps/www/components/examples/navigation-menu/demo.tsx
@@ -0,0 +1,145 @@
+"use client"
+
+import * as React from "react"
+import Link from "next/link"
+
+import { cn } from "@/lib/utils"
+import { Icons } from "@/components/icons"
+import {
+ NavigationMenu,
+ NavigationMenuContent,
+ NavigationMenuItem,
+ NavigationMenuLink,
+ NavigationMenuList,
+ NavigationMenuTrigger,
+ navigationMenuTriggerStyle,
+} from "@/components/ui/navigation-menu"
+
+const components: { title: string; href: string; description: string }[] = [
+ {
+ title: "Alert Dialog",
+ href: "/docs/primitives/alert-dialog",
+ description:
+ "A modal dialog that interrupts the user with important content and expects a response.",
+ },
+ {
+ title: "Hover Card",
+ href: "/docs/primitives/hover-card",
+ description:
+ "For sighted users to preview content available behind a link.",
+ },
+ {
+ title: "Progress",
+ href: "/docs/primitives/progress",
+ description:
+ "Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.",
+ },
+ {
+ title: "Scroll-area",
+ href: "/docs/primitives/scroll-area",
+ description: "Visually or semantically separates content.",
+ },
+ {
+ title: "Tabs",
+ href: "/docs/primitives/tabs",
+ description:
+ "A set of layered sections of content—known as tab panels—that are displayed one at a time.",
+ },
+ {
+ title: "Tooltip",
+ href: "/docs/primitives/tooltip",
+ description:
+ "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.",
+ },
+]
+
+export function NavigationMenuDemo() {
+ return (
+
+
+
+ Getting started
+
+
+
+
+
+ Components
+
+
+ {components.map((component) => (
+
+ {component.description}
+
+ ))}
+
+
+
+
+
+
+ Documentation
+
+
+
+
+
+ )
+}
+
+const ListItem = React.forwardRef<
+ React.ElementRef<"a">,
+ React.ComponentPropsWithoutRef<"a">
+>(({ className, title, children, ...props }, ref) => {
+ return (
+
+
+
+ {title}
+
+ {children}
+
+
+
+
+ )
+})
+ListItem.displayName = "ListItem"
diff --git a/apps/www/components/main-nav.tsx b/apps/www/components/main-nav.tsx
index 4f6b4fe9c2..16b10ce26a 100644
--- a/apps/www/components/main-nav.tsx
+++ b/apps/www/components/main-nav.tsx
@@ -2,111 +2,131 @@
import * as React from "react"
import Link from "next/link"
-import { useSelectedLayoutSegment } from "next/navigation"
-import { MainNavItem } from "types/nav"
+import { allDocs } from "contentlayer/generated"
-import { docsConfig } from "@/config/docs"
import { siteConfig } from "@/config/site"
import { cn } from "@/lib/utils"
import { Icons } from "@/components/icons"
-import { Button } from "@/components/ui/button"
import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuGroup,
- DropdownMenuItem,
- DropdownMenuLabel,
- DropdownMenuSeparator,
- DropdownMenuTrigger,
-} from "@/components/ui/dropdown-menu"
-import { ScrollArea } from "@/components/ui/scroll-area"
-
-interface MainNavProps {
- items?: MainNavItem[]
- children?: React.ReactNode
-}
-
-export function MainNav({ items, children }: MainNavProps) {
- const segment = useSelectedLayoutSegment()
+ NavigationMenu,
+ NavigationMenuContent,
+ NavigationMenuItem,
+ NavigationMenuLink,
+ NavigationMenuList,
+ NavigationMenuTrigger,
+ navigationMenuTriggerStyle,
+} from "@/components/ui/navigation-menu"
+import { buttonVariants } from "./ui/button"
+import { Separator } from "./ui/separator"
+export function MainNav() {
return (
-
-
+
+
{siteConfig.name}
- {items?.length ? (
-
- {items?.map(
- (item, index) =>
- item.href && (
-
- {item.title}
-
- )
- )}
-
- ) : null}
-
-
-
- {" "}
- Menu
-
-
-
-
-
- {siteConfig.name}
-
-
-
-
- {items?.map(
- (item, index) =>
- item.href && (
-
- {item.title}
-
- )
- )}
- {docsConfig.sidebarNav.map((item, index) => (
-
-
- {item.title}
-
- {item?.items?.length &&
- item.items.map((item) => (
-
- {item.href ? (
- {item.title}
- ) : (
- item.title
- )}
-
+
+
+
+
+ Getting started
+
+
+
+
+
+
+
+ {siteConfig.name}
+
+
+ {siteConfig.description}
+
+
+
+
+
+ Re-usable components built using Radix UI and Tailwind CSS.
+
+
+ How to install dependencies and structure your app.
+
+
+ Styles for headings, paragraphs, lists...etc
+
+
+
+
+
+
+ Components
+
+
+
+ {allDocs
+ .filter((doc) => doc.featured)
+ .map((doc) => (
+
+ {doc.description}
+
))}
-
- ))}
-
-
-
+
+
+
+
+
+ Browse components
+
+
+
+
+
+
+
+
+ GitHub
+
+
+
+
+
)
}
+
+const ListItem = React.forwardRef<
+ React.ElementRef
,
+ React.ComponentPropsWithoutRef
+>(({ className, title, children, href, ...props }, ref) => {
+ return (
+
+
+
+ {title}
+
+ {children}
+
+
+
+
+ )
+})
+ListItem.displayName = "ListItem"
diff --git a/apps/www/components/mobile-nav.tsx b/apps/www/components/mobile-nav.tsx
new file mode 100644
index 0000000000..4f030205e3
--- /dev/null
+++ b/apps/www/components/mobile-nav.tsx
@@ -0,0 +1,80 @@
+"use client"
+
+import * as React from "react"
+import Link from "next/link"
+
+import { docsConfig } from "@/config/docs"
+import { siteConfig } from "@/config/site"
+import { cn } from "@/lib/utils"
+import { Icons } from "@/components/icons"
+import { Button } from "@/components/ui/button"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuGroup,
+ DropdownMenuItem,
+ DropdownMenuLabel,
+ DropdownMenuSeparator,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+import { ScrollArea } from "@/components/ui/scroll-area"
+
+export function MobileNav() {
+ return (
+
+
+
+ {" "}
+ Menu
+
+
+
+
+
+ {siteConfig.name}
+
+
+
+
+ {docsConfig.sidebarNav?.map(
+ (item, index) =>
+ item.href && (
+
+ {item.title}
+
+ )
+ )}
+ {docsConfig.sidebarNav.map((item, index) => (
+
+
+ {item.title}
+
+ {item?.items?.length &&
+ item.items.map((item) => (
+
+ {item.href ? (
+ {item.title}
+ ) : (
+ item.title
+ )}
+
+ ))}
+
+ ))}
+
+
+
+ )
+}
diff --git a/apps/www/components/search.tsx b/apps/www/components/search.tsx
index b20c13435b..a6b20170d3 100644
--- a/apps/www/components/search.tsx
+++ b/apps/www/components/search.tsx
@@ -21,7 +21,7 @@ export function DocsSearch({ className, ...props }: DocsSearchProps) {
diff --git a/apps/www/components/site-header.tsx b/apps/www/components/site-header.tsx
index 37c8ab1eff..4503e90153 100644
--- a/apps/www/components/site-header.tsx
+++ b/apps/www/components/site-header.tsx
@@ -4,16 +4,17 @@ import { docsConfig } from "@/config/docs"
import { siteConfig } from "@/config/site"
import { Icons } from "@/components/icons"
import { MainNav } from "@/components/main-nav"
+import { MobileNav } from "@/components/mobile-nav"
import { ModeToggle } from "@/components/mode-toggle"
import { DocsSearch } from "@/components/search"
-import { DocsSidebarNav } from "@/components/sidebar-nav"
import { buttonVariants } from "@/components/ui/button"
export function SiteHeader() {
return (
-
-
+
+
+
diff --git a/apps/www/components/ui/navigation-menu.tsx b/apps/www/components/ui/navigation-menu.tsx
new file mode 100644
index 0000000000..292683985c
--- /dev/null
+++ b/apps/www/components/ui/navigation-menu.tsx
@@ -0,0 +1,128 @@
+import * as React from "react"
+import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
+import { cva } from "class-variance-authority"
+import { ChevronDown } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const NavigationMenu = React.forwardRef<
+ React.ElementRef
,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}
+
+
+))
+NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName
+
+const NavigationMenuList = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName
+
+const NavigationMenuItem = NavigationMenuPrimitive.Item
+
+const navigationMenuTriggerStyle = cva(
+ "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:bg-slate-100 disabled:opacity-50 dark:focus:bg-slate-800 disabled:pointer-events-none bg-transparent hover:bg-slate-100 dark:hover:bg-slate-800 dark:text-slate-100 dark:hover:text-slate-100 data-[state=open]:bg-slate-50 dark:data-[state=open]:bg-slate-800 h-10 py-2 px-4 group"
+)
+
+const NavigationMenuTrigger = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}{" "}
+
+
+))
+NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName
+
+const NavigationMenuContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName
+
+const NavigationMenuLink = NavigationMenuPrimitive.Link
+
+const NavigationMenuViewport = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+))
+NavigationMenuViewport.displayName =
+ NavigationMenuPrimitive.Viewport.displayName
+
+const NavigationMenuIndicator = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+))
+NavigationMenuIndicator.displayName =
+ NavigationMenuPrimitive.Indicator.displayName
+
+export {
+ navigationMenuTriggerStyle,
+ NavigationMenu,
+ NavigationMenuList,
+ NavigationMenuItem,
+ NavigationMenuContent,
+ NavigationMenuTrigger,
+ NavigationMenuLink,
+ NavigationMenuIndicator,
+ NavigationMenuViewport,
+}
diff --git a/apps/www/config/docs.ts b/apps/www/config/docs.ts
index ae7d21d05b..1fb92955d5 100644
--- a/apps/www/config/docs.ts
+++ b/apps/www/config/docs.ts
@@ -120,6 +120,11 @@ export const docsConfig: DocsConfig = {
href: "/docs/primitives/menubar",
items: [],
},
+ {
+ title: "Navigation Menu",
+ href: "/docs/primitives/navigation-menu",
+ items: [],
+ },
{
title: "Popover",
href: "/docs/primitives/popover",
diff --git a/apps/www/content/docs/primitives/alert-dialog.mdx b/apps/www/content/docs/primitives/alert-dialog.mdx
index dd334b7c93..a655072632 100644
--- a/apps/www/content/docs/primitives/alert-dialog.mdx
+++ b/apps/www/content/docs/primitives/alert-dialog.mdx
@@ -1,6 +1,7 @@
---
title: Alert Dialog
description: A modal dialog that interrupts the user with important content and expects a response.
+featured: true
radix:
link: https://www.radix-ui.com/docs/primitives/components/alert-dialog
api: https://www.radix-ui.com/docs/primitives/components/alert-dialog#api-reference
diff --git a/apps/www/content/docs/primitives/button.mdx b/apps/www/content/docs/primitives/button.mdx
index 4a7be6a3e7..0f85c6826e 100644
--- a/apps/www/content/docs/primitives/button.mdx
+++ b/apps/www/content/docs/primitives/button.mdx
@@ -1,6 +1,7 @@
---
title: Button
description: Displays a button or a component that looks like a button.
+featured: true
---
@@ -71,6 +72,7 @@ import { Button } from "@/components/ui/button"
---
---
+
### Link
diff --git a/apps/www/content/docs/primitives/collapsible.mdx b/apps/www/content/docs/primitives/collapsible.mdx
index 4aeffd154f..e932cb158d 100644
--- a/apps/www/content/docs/primitives/collapsible.mdx
+++ b/apps/www/content/docs/primitives/collapsible.mdx
@@ -1,6 +1,7 @@
---
title: Collapsible
description: An interactive component which expands/collapses a panel.
+featured: true
radix:
link: https://www.radix-ui.com/docs/primitives/components/collapsible
api: https://www.radix-ui.com/docs/primitives/components/collapsible#api-reference
diff --git a/apps/www/content/docs/primitives/dialog.mdx b/apps/www/content/docs/primitives/dialog.mdx
index eac04f461f..aea360bac1 100644
--- a/apps/www/content/docs/primitives/dialog.mdx
+++ b/apps/www/content/docs/primitives/dialog.mdx
@@ -1,6 +1,7 @@
---
title: Dialog
description: A modal dialog that interrupts the user with important content and expects a response.
+featured: true
radix:
link: https://www.radix-ui.com/docs/primitives/components/dialog
api: https://www.radix-ui.com/docs/primitives/components/dialog#api-reference
diff --git a/apps/www/content/docs/primitives/dropdown-menu.mdx b/apps/www/content/docs/primitives/dropdown-menu.mdx
index 96cd344bd5..6b58a08c2e 100644
--- a/apps/www/content/docs/primitives/dropdown-menu.mdx
+++ b/apps/www/content/docs/primitives/dropdown-menu.mdx
@@ -1,6 +1,7 @@
---
title: Dropdown Menu
description: Displays a menu to the user — such as a set of actions or functions — triggered by a button.
+featured: true
radix:
link: https://www.radix-ui.com/docs/primitives/components/dropdown-menu
api: https://www.radix-ui.com/docs/primitives/components/dropdown-menu#api-reference
diff --git a/apps/www/content/docs/primitives/navigation-menu.mdx b/apps/www/content/docs/primitives/navigation-menu.mdx
new file mode 100644
index 0000000000..5c2546e41b
--- /dev/null
+++ b/apps/www/content/docs/primitives/navigation-menu.mdx
@@ -0,0 +1,76 @@
+---
+title: Navigation Menu
+description: A collection of links for navigating websites.
+radix:
+ link: https://www.radix-ui.com/docs/primitives/components/navigation-menu
+ api: https://www.radix-ui.com/docs/primitives/components/navigation-menu#api-reference
+---
+
+
+
+
+
+## Installation
+
+1. Install the `@radix-ui/react-navigation-menu` component from radix-ui:
+
+```bash
+npm install @radix-ui/react-navigation-menu
+```
+
+2. Copy and paste the following code into your project.
+
+
+
+
+ This is the ` ` primitive. You can place it in a file at
+ `components/ui/navigation-menu.tsx`.
+
+
+## Usage
+
+```tsx
+import {
+ NavigationMenu,
+ NavigationMenuContent,
+ NavigationMenuIndicator,
+ NavigationMenuItem,
+ NavigationMenuLink,
+ NavigationMenuList,
+ NavigationMenuTrigger,
+ NavigationMenuViewport,
+} from "@/components/ui/navigation-menu"
+```
+
+```tsx
+
+
+
+ Item One
+
+ Link
+
+
+
+
+```
+
+### Link Component
+
+When using the Next.js ` ` component, you can use `navigationMenuTriggerStyle()` to apply the correct styles to the trigger.
+
+```tsx
+import { navigationMenuTriggerStyle } from "@/components/ui/navigation-menu"
+```
+
+```tsx {3-5}
+
+
+
+ Documentation
+
+
+
+```
+
+See also the [Radix UI documentation](https://www.radix-ui.com/docs/primitives/components/navigation-menu#with-client-side-routing) for handling client side routing.
diff --git a/apps/www/content/docs/primitives/select.mdx b/apps/www/content/docs/primitives/select.mdx
index a3e3d09fca..5edf714f17 100644
--- a/apps/www/content/docs/primitives/select.mdx
+++ b/apps/www/content/docs/primitives/select.mdx
@@ -1,6 +1,7 @@
---
title: Select
description: Displays a list of options for the user to pick from—triggered by a button.
+featured: true
radix:
link: https://www.radix-ui.com/docs/primitives/components/select
api: https://www.radix-ui.com/docs/primitives/components/select#api-reference
diff --git a/apps/www/contentlayer.config.js b/apps/www/contentlayer.config.js
index 4322b1735a..33cf7001a0 100644
--- a/apps/www/contentlayer.config.js
+++ b/apps/www/contentlayer.config.js
@@ -60,6 +60,11 @@ export const Doc = defineDocumentType(() => ({
type: "nested",
of: RadixProperties,
},
+ featured: {
+ type: "boolean",
+ default: false,
+ required: false,
+ },
},
computedFields,
}))
diff --git a/apps/www/package.json b/apps/www/package.json
index ae4163af4c..c9a316615b 100644
--- a/apps/www/package.json
+++ b/apps/www/package.json
@@ -24,6 +24,7 @@
"@radix-ui/react-hover-card": "^1.0.3",
"@radix-ui/react-label": "^2.0.0",
"@radix-ui/react-menubar": "^1.0.0",
+ "@radix-ui/react-navigation-menu": "^1.1.1",
"@radix-ui/react-popover": "^1.0.2",
"@radix-ui/react-progress": "^1.0.1",
"@radix-ui/react-radio-group": "^1.1.0",
diff --git a/package.json b/package.json
index fa8770fc09..8a4962917e 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
"dependencies": {
"@babel/core": "^7.20.7",
"@ianvs/prettier-plugin-sort-imports": "^3.7.1",
+ "@tailwindcss/line-clamp": "^0.4.2",
"eslint": "^8.31.0",
"eslint-config-next": "13.0.0",
"eslint-config-prettier": "^8.3.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5c89e14c4c..d64b9715f0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,7 @@ importers:
'@commitlint/cli': ^17.3.0
'@commitlint/config-conventional': ^17.3.0
'@ianvs/prettier-plugin-sort-imports': ^3.7.1
+ '@tailwindcss/line-clamp': ^0.4.2
'@types/node': ^18.11.9
'@types/react': 18.0.15
'@types/react-dom': 18.0.6
@@ -29,6 +30,7 @@ importers:
dependencies:
'@babel/core': 7.20.7
'@ianvs/prettier-plugin-sort-imports': 3.7.1_prettier@2.8.1
+ '@tailwindcss/line-clamp': 0.4.2_tailwindcss@3.2.4
eslint: 8.31.0
eslint-config-next: 13.0.0_wogtpudmlxya2leoxia5qf2rl4
eslint-config-prettier: 8.5.0_eslint@8.31.0
@@ -67,6 +69,7 @@ importers:
'@radix-ui/react-hover-card': ^1.0.3
'@radix-ui/react-label': ^2.0.0
'@radix-ui/react-menubar': ^1.0.0
+ '@radix-ui/react-navigation-menu': ^1.1.1
'@radix-ui/react-popover': ^1.0.2
'@radix-ui/react-progress': ^1.0.1
'@radix-ui/react-radio-group': ^1.1.0
@@ -129,6 +132,7 @@ importers:
'@radix-ui/react-hover-card': 1.0.3_ib3m5ricvtkl2cll7qpr2f6lvq
'@radix-ui/react-label': 2.0.0_biqbaboplfbrettd7655fr4n2y
'@radix-ui/react-menubar': 1.0.0_ib3m5ricvtkl2cll7qpr2f6lvq
+ '@radix-ui/react-navigation-menu': 1.1.1_biqbaboplfbrettd7655fr4n2y
'@radix-ui/react-popover': 1.0.2_ib3m5ricvtkl2cll7qpr2f6lvq
'@radix-ui/react-progress': 1.0.1_biqbaboplfbrettd7655fr4n2y
'@radix-ui/react-radio-group': 1.1.0_biqbaboplfbrettd7655fr4n2y
@@ -2014,6 +2018,31 @@ packages:
- '@types/react'
dev: false
+ /@radix-ui/react-navigation-menu/1.1.1_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-Khgf+LwqYfUpbFAHcFPDMj6ZrWxnwCgC96liLYwE48x9YJbXGlutOWzZaSzrgl82xS+PwoPLQunfDe/i4ZITRA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ dependencies:
+ '@babel/runtime': 7.20.6
+ '@radix-ui/primitive': 1.0.0
+ '@radix-ui/react-collection': 1.0.1_biqbaboplfbrettd7655fr4n2y
+ '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0
+ '@radix-ui/react-context': 1.0.0_react@18.2.0
+ '@radix-ui/react-direction': 1.0.0_react@18.2.0
+ '@radix-ui/react-dismissable-layer': 1.0.2_biqbaboplfbrettd7655fr4n2y
+ '@radix-ui/react-id': 1.0.0_react@18.2.0
+ '@radix-ui/react-presence': 1.0.0_biqbaboplfbrettd7655fr4n2y
+ '@radix-ui/react-primitive': 1.0.1_biqbaboplfbrettd7655fr4n2y
+ '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0
+ '@radix-ui/react-use-controllable-state': 1.0.0_react@18.2.0
+ '@radix-ui/react-use-layout-effect': 1.0.0_react@18.2.0
+ '@radix-ui/react-use-previous': 1.0.0_react@18.2.0
+ '@radix-ui/react-visually-hidden': 1.0.1_biqbaboplfbrettd7655fr4n2y
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
/@radix-ui/react-popover/1.0.2_ib3m5ricvtkl2cll7qpr2f6lvq:
resolution: {integrity: sha512-4tqZEl9w95R5mlZ/sFdgBnfhCBOEPepLIurBA5kt/qaAhldJ1tNQd0ngr0ET0AHbPotT4mwxMPr7a+MA/wbK0g==}
peerDependencies:
@@ -2498,6 +2527,14 @@ packages:
tslib: 2.4.1
dev: false
+ /@tailwindcss/line-clamp/0.4.2_tailwindcss@3.2.4:
+ resolution: {integrity: sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==}
+ peerDependencies:
+ tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1'
+ dependencies:
+ tailwindcss: 3.2.4_ra2vnoek4vhbzktaezawwqbin4
+ dev: false
+
/@tsconfig/node10/1.0.9:
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
@@ -6166,6 +6203,7 @@ packages:
lilconfig: 2.0.6
postcss: 8.4.20
yaml: 1.10.2
+ dev: true
/postcss-load-config/3.1.4_ra2vnoek4vhbzktaezawwqbin4:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
@@ -7068,7 +7106,7 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
dependencies:
- tailwindcss: 3.2.4_postcss@8.4.20
+ tailwindcss: 3.2.4_ra2vnoek4vhbzktaezawwqbin4
dev: false
/tailwindcss/3.2.4_postcss@8.4.20:
@@ -7103,6 +7141,7 @@ packages:
resolve: 1.22.1
transitivePeerDependencies:
- ts-node
+ dev: true
/tailwindcss/3.2.4_ra2vnoek4vhbzktaezawwqbin4:
resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
diff --git a/tailwind.config.js b/tailwind.config.js
index 1a116ef3f1..41c67e87c2 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -32,5 +32,5 @@ module.exports = {
},
},
},
- plugins: [require("tailwindcss-animate")],
+ plugins: [require("tailwindcss-animate"), require("@tailwindcss/line-clamp")],
}