Sidebar
Base dashboard sidebar menu
Usage
Basic Sidebar
<template>
<p-sidebar>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>Documents</p-nav-item>
<p-nav-item>Contacts</p-nav-item>
<p-nav-item>Structure</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Fixed Sidebar
Fixed sidebar are using z-fixed for z-index value. It posible to change z-index value using --p-sidebar-z-index
CSS variable. But don't forget to see the all z-index variant for layer-ordering component.
<template>
<p-sidebar fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>Documents</p-nav-item>
<p-nav-item>Contacts</p-nav-item>
<p-nav-item>Structure</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Alignment
To align Sidebar, use align prop. Available value are left
and right
<template>
<p-sidebar fixed align="right">
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>Documents</p-nav-item>
<p-nav-item>Contacts</p-nav-item>
<p-nav-item>Structure</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Condensed
When you need less space/padding of sidebar navigation, you can set by using condensed
prop.
<template>
<p-sidebar fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav condensed>
<p-nav-item active>Documents</p-nav-item>
<p-nav-item>Contacts</p-nav-item>
<p-nav-item>Structure</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Types
Sidebar has 2 types, wide
and narrow
. Default is wide
. In variant narrow
, you can place your navigation with icon-only or icon-label.
Icon Only
<template>
<p-sidebar fixed variant="narrow">
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy-icon.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>
<template #icon>
<IconDocument />
</template>
</p-nav-item>
<p-nav-item>
<template #icon>
<IconDocument />
</template>
</p-nav-item>
<p-nav-item>
<template #icon>
<IconDataStructured />
</template>
</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Icon with Label
<template>
<p-sidebar fixed type="narrow">
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy-icon.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>
<template #icon>
<IconDocument />
</template>
Docs
</p-nav-item>
<p-nav-item>
<template #icon>
<IconGroup />
</template>
Users
</p-nav-item>
<p-nav-item>
<template #icon>
<IconDataStructured />
</template>
Struct
</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Bottom Menus
If you need to place menus in the bottom, you just add bottom
prop in your <p-sidebar-nav>
<template>
<p-sidebar fixed type="narrow">
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy-icon.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav bottom>
<p-nav-item active>
<template #icon>
<IconSettings />
</template>
</p-nav-item>
<p-nav-item>
<template #icon>
<img src="/assets/images/icon-flag.svg"/>
</template>
ENG
</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Submenu
Submenu just works in wide
type. If you need collapsible menus, you just add collapsible
prop in your <p-nav-sub-item>
Default Submenu
<template>
<p-sidebar fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>
<template #icon>
<IconDashboard />
</template>
Dashboard
</p-nav-item>
<p-nav-sub-item text="Documents">
<template #icon>
<IconDocument />
</template>
<p-sidebar-nav>
<p-nav-item>
Need Action
</p-nav-item>
<p-nav-item>
In Progress
</p-nav-item>
<p-nav-item>
Others
</p-nav-item>
</p-sidebar-nav>
</p-nav-sub-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Collapsible Menus
<template>
<p-sidebar fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>
<template #icon>
<IconDashboard />
</template>
Dashboard
</p-nav-item>
<p-nav-sub-item text="Documents" collapsible>
<template #icon>
<IconDocument />
</template>
<p-sidebar-nav>
<p-nav-item>
Need Action
</p-nav-item>
<p-nav-item>
In Progress
</p-nav-item>
<p-nav-item>
Others
</p-nav-item>
</p-sidebar-nav>
</p-nav-sub-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Grouped Menu
Grouped menu in the sidebar can be implemented by adding section-title via title
props in your <p-sidebar-nav>
. Action-permalink can also be added to the section-title via title-action-label
& title-action-url
.
Action
<template>
<p-sidebar fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav
title="main"
title-action-label="See More"
title-action-url="#/categories">
<p-nav-item active>
<template #icon>
<IconDashboard />
</template>
Dashboard
</p-nav-item>
<p-nav-item>
<template #icon>
<IconDocument />
</template>
Documents
</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Collapsible
If you want collapsible grouped menus, you just need to add collapsible
props in your <p-sidebar-nav>
.
<template>
<p-sidebar fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav
title="main"
collapsible>
<p-nav-item active>
<template #icon>
<IconDashboard />
</template>
Dashboard
</p-nav-item>
<p-nav-sub-item text="Documents" collapsible>
<template #icon>
<IconDocument />
</template>
<p-sidebar-nav>
<p-nav-item>
Need Action
</p-nav-item>
<p-nav-item>
In Progress
</p-nav-item>
<p-nav-item>
Others
</p-nav-item>
</p-sidebar-nav>
</p-nav-sub-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Toggleable
Toggleable-feature can be used for responsive purpose. It can be toggle the sidebar via toggleable
props. It also can toggle-hide or toggle-show automatically if certain breakpoint condition have been met. There are at least 4 breakpoints available: all
, lg
, md
and sm
.
<template>
<p-sidebar v-model="model" toggleable="lg" fixed>
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav title="Main">
<p-nav-item active>Documents</p-nav-item>
<p-nav-item>Contacts</p-nav-item>
<p-nav-item>Structure</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
It's possible to make sidebar toggle-hide by default to make fullwidth page with no-sidebar. Just give all
value in toggleable
props.
<template>
<p-sidebar v-model="model" toggleable="all" fixed type="narrow">
<template #brand>
<p-sidebar-brand>
<img src="/assets/images/logo-privy-icon.svg" alt="" />
</p-sidebar-brand>
</template>
<p-sidebar-nav>
<p-nav-item active>
<template #icon>
<IconDocument />
</template>
</p-nav-item>
<p-nav-item>
<template #icon>
<IconGroup />
</template>
</p-nav-item>
<p-nav-item>
<template #icon>
<IconDataStructured />
</template>
</p-nav-item>
</p-sidebar-nav>
</p-sidebar>
</template>
Variables
Sidebar use local CSS variables for enhanced real-time customization.
.sidebar
--p-sidebar-size-narrow: 60px;
--p-sidebar-size-wide: 230px;
--p-sidebar-bg: theme(backgroundColor.DEFAULT);
--p-sidebar-bg-dark: theme(backgroundColor.dark.DEFAULT);
--p-sidebar-z-index: theme(zIndex.fixed);
--p-sidebar-sticky-top: theme(spacing.0);
--p-sidebar-padding-x: theme(spacing.2);
--p-sidebar-padding-left: var(--p-sidebar-padding-x);
--p-sidebar-padding-right: var(--p-sidebar-padding-x);
--p-sidebar-padding-y: theme(spacing.4);
--p-sidebar-padding-top: var(--p-sidebar-padding-y);
--p-sidebar-padding-bottom: var(--p-sidebar-padding-y);
--p-sidebar-shadow: theme(boxShadow.lg);
.sidebar__brand
--p-sidebar-brand-sticky-top: 0;
API
Props <p-sidebar>
Props | Type | Default | Description |
---|---|---|---|
variant | String | pills | Sidebar variant, valid value is pills , lines and tabs |
align | String | left | Sidebar alignment, valid value is left and right |
type | String | wide | Sidebar type, valid value is wide and narrow |
fixed | Boolean | false | Activate fixed Sidebar |
sticky | Boolean | false | Activate sticky Sidebar |
toggleable | String | - | Toggle with desired breakpoint lg , md , sm and all |
Slots <p-sidebar>
Name | Description |
---|---|
default | Content to place in the Sidebar |
brand | Content to place in the Sidebar Brand |
bottom | Content to place in the Sidebar bottom |
Props <p-sidebar-brand>
Props | Type | Default | Description |
---|---|---|---|
href | String | undefined | Target URL of the Sidebar Brand link |
fixed | Boolean | false | Make position of sidebar brand fixed on top |
sticky | Boolean | false | Make position of sidebar brand sticky on top |
Slots <p-sidebar-brand>
Name | Description |
---|---|
default | Content to place in the Sidebar Brand |
Props <p-sidebar-nav>
Props | Type | Default | Description |
---|---|---|---|
title | String | undefined | Title to place in the top of sidebar navigation block |
title-action-label | String | undefined | Title action label to place in the section title |
title-action-url | String | undefined | Title action url to place in the section title |
bottom | Boolean | false | Place group of sidebar navigation in the bottom of Sidebar |
condensed | Boolean | false | Activate condensed of group navigation with less space |
collapsible | Boolean | false | Activate collapsible navigation from section title |
Slots <p-sidebar-nav>
Name | Description |
---|---|
default | Content to place in the Sidebar Nav |
Events
Name | Arguments | Description |
---|---|---|
There no event here |