MagicAccordion
MagicAccordion is a collection of components intended for building vertically stacked headlines where each reveals related content.
<template>
<magic-accordion-provider id="magic-accordion-demo" class="w-full">
<demo-list
v-for="item in footer"
:key="item.label"
:headline="item.label"
:list="<DemoListProps['list']>item.list"
/>
</magic-accordion-provider>
</template>
<script lang="ts" setup>
import DemoList from './components/DemoList.vue'
import type { DemoListProps } from './components/DemoList.vue'
import { footer } from './data/footer.json'
</script>Overview
Anatomy
<template>
<magic-accordion-provider id="your-accordion-id">
<magic-accordion-view>
<magic-accordion-trigger>
<!-- your content -->
</magic-accordion-trigger>
<magic-accordion-content>
<!-- your content -->
</magic-accordion-content>
</magic-accordion-view>
</magic-accordion-provider>
</template>
<script setup>
const { selectView } = useMagicAccordion('your-accordion-id')
</script>Installation
CLI
Add @maas/vue-equipment to your dependencies.
pnpm install @maas/vue-equipmentnpm install @maas/vue-equipmentyarn add @maas/vue-equipmentbun install @maas/vue-equipmentVue
If you are using Vue, import and add MagicAccordionPlugin to your app.
import { createApp } from 'vue'
import { MagicAccordionPlugin } from '@maas/vue-equipment/plugins/MagicAccordion'
const app = createApp({})
app.use(MagicAccordionPlugin)Nuxt
The accordion is available as a Nuxt module. In your Nuxt config file add @maas/vue-equipment/nuxt to your modules and add MagicAccordion to the plugins in your configuration.
export default defineNuxtConfig({
modules: ['@maas/vue-equipment/nuxt'],
vueEquipment: {
plugins: ['MagicAccordion'],
},
})Composable
In order to interact with the accordion from anywhere within your app, we provide a useMagicAccordion composable. Import it directly when needed.
import { useMagicAccordion } from '@maas/vue-equipment/plugins/MagicAccordion'
const { selectView } = useMagicAccordion('your-accordion-id')
function handleClick() {
selectView('your-view-id')
}TIP
If you have installed the accordion as a Nuxt module, the composable will be auto-imported and is automatically available in your Nuxt app.
Peer Dependencies
If you haven’t installed the required peer dependencies automatically, you’ll need to install the following packages manually.
Installation
pnpm install @nuxt/kit @maas/vue-autosize @maas/vue-primitive @vueuse/corenpm install @nuxt/kit @maas/vue-autosize @maas/vue-primitive @vueuse/coreyarn add @nuxt/kit @maas/vue-autosize @maas/vue-primitive @vueuse/corebun install @nuxt/kit @maas/vue-autosize @maas/vue-primitive @vueuse/coreAPI Reference
MagicAccordionProvider
The MagicAccordionProvider wraps the accordion and configures all child components according to the provided options.
Props
| Prop | Type | Required |
|---|---|---|
MaybeRef<string> | true | |
boolean | false | |
MagicAccordionOptions | false |
Options
To customize the accordion, override the necessary options. Any custom options will be merged with the default options.
| Option | Type | Default |
|---|---|---|
single | ||
string | ||
number | 200 | |
boolean | false |
MagicAccordionView
Props
| Prop | Type | Required |
|---|---|---|
MaybeRef<string> | false | |
boolean | false | |
boolean | false |
MagicAccordionContent
Props
| Prop | Type | Required |
|---|---|---|
boolean | false | |
string | false | |
number | false | |
false |
CSS Variables
| Variable | Default |
|---|---|
--magic-accordion-content-clip-path | inset(0) |
MagicAccordionTrigger
Props
| Prop | Type | Required |
|---|---|---|
boolean | false | |
boolean | false | |
false |
CSS Variables
| Variable | Default |
|---|---|
--magic-accordion-trigger-cursor-disabled | not-allowed |
Errors
| Source | Error Code | Message |
|---|---|---|
MagicAccordionContent | missing_instance_id | MagicAccordionContent must be nested inside MagicAccordionProvider |
MagicAccordionContent | missing_view_id | MagicAccordionContent must be nested inside MagicAccordionView |
MagicAccordionTrigger | missing_instance_id | MagicAccordionTrigger must be nested inside MagicAccordionProvider |
MagicAccordionTrigger | missing_view_id | MagicAccordionTrigger must be nested inside MagicAccordionView or a viewId must be provided |
MagicAccordionView | missing_instance_id | MagicAccordionView must be nested inside MagicAccordionProvider |