Accordion
Display content with collapse behavior
Usage
Basic Usage
Item 1
Item 2
Item 3
vue
<template> <p-accordion> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 3"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template>
Multiple Open Item
Item 1
Item 2
Item 3
vue
<template> <p-accordion :multiple="true"> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 3"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template>
Disabled Item
Item 1
Item 2
Item 3
vue
<template> <p-accordion> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2" disabled> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 3"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template>
With Defined Items
Item Title 1
Item Title 2
Item Title 3
Item Title 4
vue
<template> <p-accordion :items="items" /> </template> <script setup> import { defineAccordion } from '@privyid/persona/core' const items = defineAccordion([ { title : 'Item Title 1', content: 'Content Item 1', }, { title : 'Item Title 2', content: 'Content Item 2', }, { title : 'Item Title 3', content : 'Content Item 3', disabled: true, }, { title : 'Item Title 4', content: 'Content Item 4', }, ]) </script>
Variant
Pill Mode
Item 1
Item 2
Item 3
vue
<template> <p-accordion pill> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 3"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template>
Flush Mode
Item 1
Item 2
Item 3
vue
<template> <p-accordion flush> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 3"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template>
Hide Caret
Add props no-caret
to hide caret icon. Add on p-accordion
to hide globally, or add on p-accordion-item
to hide spesific item.
Item 1
Item 2
vue
<template> <p-accordion no-caret> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template>
Single Accordion Item
Item 1
vue
<template> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </template>
Custom Caret
Item 1
vue
<template> <p-accordion-item title="Item 1"> <template #caret="{ expanded }"> <CaretUp v-if="expanded" /> <CaretDown v-else /> </template> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </template>
Icon

How to create an account?
How to create an account?
vue
<template> <p-accordion-item title="How to create an account?" titleClass="items-center space-x-2" icon="https://domain.com/assets/images/privy.png" iconClass="max-w-20"> <div class="p-4"> A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm </div> </p-accordion-item> <p-accordion-item title="How to create an account?" titleClass="items-center space-x-2" :icon="icon"> <div class="p-4"> A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm </div> </p-accordion-item> </template> <script setup lang="ts"> import iconPrivy from '@privyid/persona-icon/vue/privy-alt/24.vue' import { markRaw } from 'vue' const icon = markRaw(iconPrivy) </script>
Custom Title
Accordion title can be Customized by using slot title
.
vue
<template> <p-accordion-item titleClass="items-center" style="--p-accordion-expanded-activator-bg: transparent; --p-accordion-expanded-activator-bg-dark: transparent;"> <template #title> <img src="/assets/images/icon-personal-plan-access.svg" class="inline-block w-10 h-auto mr-4" /> <strong>Have a full digital identity experience</strong> </template> <div class="p-4"> But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born </div> </p-accordion-item> </template>
Binding v-model
v-model on p-accordion
Item 1
Item 2
Active :
-
vue
<template> <p-accordion v-model="active"> <p-accordion-item title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> <p-accordion-item title="Item 2"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </p-accordion> </template> <script setup> const active = ref('') </script>
v-model on p-accordion-item
Item 1
Expanded :
false
vue
<template> <p-accordion-item v-model="expanded" title="Item 1"> <div class="p-4"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. </div> </p-accordion-item> </template> <script setup> const expanded = ref(false) </script>
Variables
Accordion use local CSS variables on .accordion
and .accordion__item
for enhanced real-time customization.
.accordion
sass
--p-accordion-border: theme(borderColor.default.DEFAULT); --p-accordion-border-dark: theme(borderColor.dark.default.DEFAULT); --p-accordion-item-border: theme(borderColor.default.DEFAULT); --p-accordion-item-border-dark: theme(borderColor.dark.default.DEFAULT); --p-accordion-divide: theme(divideColor.default.DEFAULT); --p-accordion-divide-dark: theme(divideColor.dark.default.DEFAULT);
.accordion__item
sass
--p-accordion-bg: theme(backgroundColor.default.DEFAULT); --p-accordion-bg-dark: theme(backgroundColor.dark.default.DEFAULT); --p-accordion-collapsed-border: theme(borderColor.default.DEFAULT); --p-accordion-collapsed-border-dark: theme(borderColor.dark.default.DEFAULT); --p-accordion-expanded-border: theme(borderColor.default.DEFAULT); --p-accordion-expanded-border-dark: theme(borderColor.dark.default.DEFAULT); --p-accordion-expanded-activator-bg: theme(backgroundColor.default.alpha); --p-accordion-expanded-activator-bg-dark: theme(backgroundColor.dark.default.alpha); --p-accordion-expanded-activator-color: theme(textColor.default); --p-accordion-expanded-activator-color-dark: theme(textColor.dark.default);
API
Props <p-accordion>
Props | Type | Default | Description |
---|---|---|---|
flush | Boolean | false | Enable flush, accordion without container-border |
pill | Boolean | false | Enable pill, accordion with space on each accordion item |
multiple | Boolean | false | Allow expand multiple accordion item |
no-caret | Boolean | false | Hide caret icon |
items | Array | - | Accordion items |
v-model | String | - | ID of current expanded accordion item |
Slots <p-accordion>
Name | Description |
---|---|
default | Accordion content |
Props <p-accordion-item>
Props | Type | Default | Description |
---|---|---|---|
title | String | - | Accordion Item Header Title |
disabled | Boolean | false | Disable state of accordion item |
no-caret | Boolean | false | Hide caret icon |
v-model | Boolean | false | v-model value for expand or collapse the accordion item |
icon | String , Component | - | v-model value for expand or collapse the accordion item |
titleClass | String or Array or Object | - | Additional class for accordion item title |
contentClass | String or Array or Object | - | Additional class for accordion item content |
iconClass | String or Array or Object | - | Additional class for accordion item content |
Slots <p-accordion-item>
Name | Description |
---|---|
default | Accordion item content |
activator | Content to replace Item Activator |
default | Content to replace Item Title |
caret | Content to replace Caret Icon |
Events <p-accordion-item>
Name | Arguments | Description |
---|---|---|
expand | - | Event when accordion item expanded |
collapse | - | Event when accordion item collapsed |