diff --git a/docs/content/3.components/input-menu.md b/docs/content/3.components/input-menu.md
index c8e69624..42bcc85d 100644
--- a/docs/content/3.components/input-menu.md
+++ b/docs/content/3.components/input-menu.md
@@ -612,7 +612,7 @@ props:
---
::
-### With icons in items
+### With icon in items
You can use the `icon` property to display an [Icon](/components/icon) inside the items.
diff --git a/docs/content/3.components/navigation-menu.md b/docs/content/3.components/navigation-menu.md
index 64c7dde2..77c0da14 100644
--- a/docs/content/3.components/navigation-menu.md
+++ b/docs/content/3.components/navigation-menu.md
@@ -32,7 +32,7 @@ Use the `items` prop as an array of objects with the following properties:
- `onSelect?(e: Event): void`{lang="ts-type"}
- `children?: NavigationMenuChildItem[]`{lang="ts-type"}
- `class?: any`{lang="ts-type"}
-- `ui?: { linkLeadingAvatarSize?: ClassNameValue, linkLeadingAvatar?: ClassNameValue, linkLeadingIcon?: ClassNameValue, linkLabel?: ClassNameValue, linkLabelExternalIcon?: ClassNameValue, linkTrailing?: ClassNameValue, linkTrailingBadgeSize?: ClassNameValue, linkTrailingBadge?: ClassNameValue, linkTrailingIcon?: ClassNameValue, label?: ClassNameValue, link?: ClassNameValue, content?: ClassNameValue, childList?: ClassNameValue, childItem?: ClassNameValue, childLink?: ClassNameValue, childLinkIcon?: ClassNameValue, childLinkWrapper?: ClassNameValue, childLinkLabel?: ClassNameValue, childLinkLabelExternalIcon?: ClassNameValue, childLinkDescription?: ClassNameValue }`{lang="ts-type"}
+- `ui?: { linkLeadingAvatarSize?: ClassNameValue, linkLeadingAvatar?: ClassNameValue, linkLeadingIcon?: ClassNameValue, linkLabel?: ClassNameValue, linkLabelExternalIcon?: ClassNameValue, linkTrailing?: ClassNameValue, linkTrailingBadgeSize?: ClassNameValue, linkTrailingBadge?: ClassNameValue, linkTrailingIcon?: ClassNameValue, label?: ClassNameValue, link?: ClassNameValue, content?: ClassNameValue, childList?: ClassNameValue, childLabel?: ClassNameValue, childItem?: ClassNameValue, childLink?: ClassNameValue, childLinkIcon?: ClassNameValue, childLinkWrapper?: ClassNameValue, childLinkLabel?: ClassNameValue, childLinkLabelExternalIcon?: ClassNameValue, childLinkDescription?: ClassNameValue }`{lang="ts-type"}
You can pass any property from the [Link](/components/link#props) component such as `to`, `target`, etc.
@@ -144,7 +144,7 @@ Each item can take a `children` array of objects with the following properties t
Use the `orientation` prop to change the orientation of the NavigationMenu.
::note
-When orientation is `vertical`, a [Collapsible](/components/collapsible) component is used to display children. You can control the open state of each item using the `open` and `defaultOpen` properties.
+When orientation is `vertical`, an [Accordion](/components/accordion) component is used to display each group. You can control the open state of each item using the `open` and `defaultOpen` properties and change the behavior using the [`collapsible`](/components/accordion#collapsible) and [`type`](/components/accordion#multiple) props.
::
::component-code
@@ -243,7 +243,11 @@ Groups will be spaced when orientation is `horizontal` and separated when orient
### Collapsed
-Use the `collapsed` prop to collapse the NavigationMenu, this can be useful in a sidebar for example.
+In `vertical` orientation, use the `collapsed` prop to collapse the NavigationMenu, this can be useful in a sidebar for example.
+
+::note
+You can use the [`tooltip`](#with-tooltip-in-items) and [`popover`](#with-popover-in-items) props to display more information on the collapsed items.
+::
::component-code
---
@@ -256,8 +260,17 @@ external:
- items
externalTypes:
- NavigationMenuItem[][]
+items:
+ tooltip:
+ - true
+ - false
+ popover:
+ - true
+ - false
props:
collapsed: true
+ tooltip: false
+ popover: false
orientation: 'vertical'
items:
- - label: Links
@@ -282,7 +295,6 @@ props:
description: 'You can customize components by using the `class` / `ui` props or in your app.config.ts.'
- label: Composables
icon: i-lucide-database
- open: false
children:
- label: defineShortcuts
icon: i-lucide-file-text
@@ -298,7 +310,6 @@ props:
to: /composables/use-toast
- label: Components
icon: i-lucide-box
- open: false
to: /components
active: true
children:
@@ -878,9 +889,11 @@ You can inspect the DOM to see each item's content being rendered.
## Examples
-### With tooltips in items :badge{label="New" class="align-text-top"}
+### With tooltip in items :badge{label="New" class="align-text-top"}
-You can use the `tooltip` property to display a [Tooltip](/components/tooltip) around an item. This can be useful when the menu is collapsed.
+When orientation is `vertical` and the menu is `collapsed`, you can set the `tooltip` prop to `true` to display a [Tooltip](/components/tooltip) around items with their label but you can also use the `tooltip` property on each item to override the default tooltip.
+
+You can pass any property from the [Tooltip](/components/tooltip) component globally or on each item.
::component-code
---
@@ -893,7 +906,12 @@ external:
- items
externalTypes:
- NavigationMenuItem[][]
+items:
+ tooltip:
+ - true
+ - false
props:
+ tooltip: true
collapsed: true
orientation: 'vertical'
items:
@@ -901,39 +919,24 @@ props:
type: 'label'
- label: Guide
icon: i-lucide-book-open
- tooltip:
- text: 'Guide'
children:
- label: Introduction
description: Fully styled and customizable components for Nuxt.
icon: i-lucide-house
- tooltip:
- text: 'Introduction'
- label: Installation
description: Learn how to install and configure Nuxt UI in your application.
icon: i-lucide-cloud-download
- tooltip:
- text: 'Installation'
- label: 'Icons'
icon: 'i-lucide-smile'
description: 'You have nothing to do, @nuxt/icon will handle it automatically.'
- tooltip:
- text: 'Icons'
- label: 'Colors'
icon: 'i-lucide-swatch-book'
description: 'Choose a primary and a neutral color from your Tailwind CSS theme.'
- tooltip:
- text: 'Colors'
- label: 'Theme'
icon: 'i-lucide-cog'
description: 'You can customize components by using the `class` / `ui` props or in your app.config.ts.'
- tooltip:
- text: 'Theme'
- label: Composables
icon: i-lucide-database
- tooltip:
- text: 'Composables'
- open: false
children:
- label: defineShortcuts
icon: i-lucide-file-text
@@ -949,11 +952,8 @@ props:
to: /composables/use-toast
- label: Components
icon: i-lucide-box
- tooltip:
- text: 'Components'
to: /components
active: true
- open: false
children:
- label: Link
icon: i-lucide-file-text
@@ -985,17 +985,126 @@ props:
to: https://github.com/nuxt/ui
target: _blank
tooltip:
- text: 'GitHub'
+ text: 'Open on GitHub'
kbds:
- 3.8k
- label: Help
icon: i-lucide-circle-help
disabled: true
- tooltip:
- text: 'Help'
---
::
+### With popover in items :badge{label="Soon" class="align-text-top"}
+
+When orientation is `vertical` and the menu is `collapsed`, you can set the `popover` prop to `true` to display a [Popover](/components/popover) around items with their children but you can also use the `popover` property on each item to override the default popover.
+
+You can pass any property from the [Popover](/components/popover) component globally or on each item.
+
+::component-code
+---
+collapse: true
+ignore:
+ - items
+ - orientation
+ - class
+external:
+ - items
+externalTypes:
+ - NavigationMenuItem[][]
+items:
+ popover:
+ - true
+ - false
+props:
+ popover: true
+ collapsed: true
+ orientation: 'vertical'
+ items:
+ - - label: Links
+ type: 'label'
+ - label: Guide
+ icon: i-lucide-book-open
+ children:
+ - label: Introduction
+ description: Fully styled and customizable components for Nuxt.
+ icon: i-lucide-house
+ - label: Installation
+ description: Learn how to install and configure Nuxt UI in your application.
+ icon: i-lucide-cloud-download
+ - label: 'Icons'
+ icon: 'i-lucide-smile'
+ description: 'You have nothing to do, @nuxt/icon will handle it automatically.'
+ - label: 'Colors'
+ icon: 'i-lucide-swatch-book'
+ description: 'Choose a primary and a neutral color from your Tailwind CSS theme.'
+ - label: 'Theme'
+ icon: 'i-lucide-cog'
+ description: 'You can customize components by using the `class` / `ui` props or in your app.config.ts.'
+ - label: Composables
+ icon: i-lucide-database
+ popover:
+ mode: 'click'
+ children:
+ - label: defineShortcuts
+ icon: i-lucide-file-text
+ description: Define shortcuts for your application.
+ to: /composables/define-shortcuts
+ - label: useOverlay
+ icon: i-lucide-file-text
+ description: Display a modal/slideover within your application.
+ to: /composables/use-overlay
+ - label: useToast
+ icon: i-lucide-file-text
+ description: Display a toast within your application.
+ to: /composables/use-toast
+ - label: Components
+ icon: i-lucide-box
+ to: /components
+ active: true
+ children:
+ - label: Link
+ icon: i-lucide-file-text
+ description: Use NuxtLink with superpowers.
+ to: /components/link
+ - label: Modal
+ icon: i-lucide-file-text
+ description: Display a modal within your application.
+ to: /components/modal
+ - label: NavigationMenu
+ icon: i-lucide-file-text
+ description: Display a list of links.
+ to: /components/navigation-menu
+ - label: Pagination
+ icon: i-lucide-file-text
+ description: Display a list of pages.
+ to: /components/pagination
+ - label: Popover
+ icon: i-lucide-file-text
+ description: Display a non-modal dialog that floats around a trigger element.
+ to: /components/popover
+ - label: Progress
+ icon: i-lucide-file-text
+ description: Show a horizontal bar to indicate task progression.
+ to: /components/progress
+ - - label: GitHub
+ icon: i-simple-icons-github
+ badge: 3.8k
+ to: https://github.com/nuxt/ui
+ target: _blank
+ tooltip:
+ text: 'Open on GitHub'
+ kbds:
+ - 3.8k
+ - label: Help
+ icon: i-lucide-circle-help
+ disabled: true
+---
+::
+
+::tip{to="#with-content-slot"}
+You can use the `#content` slot to customize the content of the popover in the `vertical` orientation.
+::
+
### Control active item
You can control the active item by using the `default-value` prop or the `v-model` directive with the index of the item.
@@ -1043,6 +1152,7 @@ Use the `#item-content` slot or the `slot` property (`#{{ item.slot }}-content`)
::component-example
---
+collapse: true
name: 'navigation-menu-content-slot-example'
---
::
diff --git a/docs/content/3.components/select-menu.md b/docs/content/3.components/select-menu.md
index fbdbcc5a..09fde219 100644
--- a/docs/content/3.components/select-menu.md
+++ b/docs/content/3.components/select-menu.md
@@ -655,7 +655,7 @@ props:
---
::
-### With icons in items
+### With icon in items
You can use the `icon` property to display an [Icon](/components/icon) inside the items.
diff --git a/docs/content/3.components/select.md b/docs/content/3.components/select.md
index 5a642c15..2eada181 100644
--- a/docs/content/3.components/select.md
+++ b/docs/content/3.components/select.md
@@ -607,7 +607,7 @@ props:
---
::
-### With icons in items
+### With icon in items
You can use the `icon` property to display an [Icon](/components/icon) inside the items.
diff --git a/playground/app/pages/components/navigation-menu.vue b/playground/app/pages/components/navigation-menu.vue
index 633077ee..ce5be1fe 100644
--- a/playground/app/pages/components/navigation-menu.vue
+++ b/playground/app/pages/components/navigation-menu.vue
@@ -1,4 +1,5 @@
@@ -112,10 +104,15 @@ const items = [
+
+
+
@@ -27,11 +27,15 @@ export interface NavigationMenuItem extends Omit
+ ui?: Pick
[key: string]: any
}
@@ -96,6 +100,18 @@ export interface NavigationMenuProps
* @defaultValue false
*/
collapsed?: boolean
+ /**
+ * Display a tooltip on the items when the menu is collapsed with the label of the item.
+ * `{ delayDuration: 0, content: { side: 'right' } }`{lang="ts-type"}
+ * @defaultValue false
+ */
+ tooltip?: boolean | TooltipProps
+ /**
+ * Display a popover on the items when the menu is collapsed with the children list.
+ * `{ mode: 'hover', content: { side: 'right', align: 'start', alignOffset: 2 } }`{lang="ts-type"}
+ * @defaultValue false
+ */
+ popover?: boolean | PopoverProps
/** Display a line next to the active item. */
highlight?: boolean
/**
@@ -146,6 +162,7 @@ export type NavigationMenuSlots<