项目作者: metonym

项目描述 :
Accessible accordion component
高级语言: Svelte
项目地址: git://github.com/metonym/svelte-accessible-accordion.git
创建时间: 2020-04-22T13:49:21Z
项目社区:https://github.com/metonym/svelte-accessible-accordion

开源协议:MIT License

下载


svelte-accessible-accordion

NPM

Accessible accordion component for Svelte

svelte-accessible-accordion implements WAI-ARIA design guidelines for an Accordion.

Note: This component is unstyled by design. See the Styling section.

Try it in the Svelte REPL.


Installation

Yarn

  1. yarn add -D svelte-accessible-accordion

NPM

  1. npm i -D svelte-accessible-accordion

pnpm

  1. pnpm i -D svelte-accessible-accordion

Usage

Basic

  1. <script>
  2. import { Accordion, AccordionItem } from "svelte-accessible-accordion";
  3. </script>
  4. <Accordion>
  5. <AccordionItem title="Title 1">Content 1</AccordionItem>
  6. <AccordionItem title="Title 2">Content 2</AccordionItem>
  7. <AccordionItem title="Title 3">Content 2</AccordionItem>
  8. </Accordion>

Slottable title

Customize the accordion title by using the "title" slot.

  1. <Accordion>
  2. <AccordionItem>
  3. <strong slot="title" style="color: red">Title 1</strong>
  4. Content 1
  5. </AccordionItem>
  6. <AccordionItem title="Title 2">Content 2</AccordionItem>
  7. <AccordionItem title="Title 3">Content 2</AccordionItem>
  8. </Accordion>

Multiselectable items

By default, only one accordion item can be expanded at one time.

Set multiselect to allow multiple items to be expandable.

  1. <Accordion multiselect>
  2. <AccordionItem title="Title 1">Content 1</AccordionItem>
  3. <AccordionItem title="Title 2">Content 2</AccordionItem>
  4. <AccordionItem title="Title 3">Content 2</AccordionItem>
  5. </Accordion>

Expanded items

Use the expanded prop to expand an accordion item.

  1. <Accordion>
  2. <AccordionItem expanded title="Title 1">Content 1</AccordionItem>
  3. <AccordionItem expanded title="Title 2">Content 2</AccordionItem>
  4. <AccordionItem expanded title="Title 3">Content 2</AccordionItem>
  5. </Accordion>

Bind to the expanded prop on the accordion item.

  1. <script>
  2. import { Accordion, AccordionItem } from "svelte-accessible-accordion";
  3. let expanded;
  4. </script>
  5. <Accordion>
  6. <AccordionItem bind:expanded title="Expanded? {expanded}">
  7. Content
  8. </AccordionItem>
  9. </Accordion>

Disabled items

Set disabled to true to disable an accordion item

  1. <Accordion>
  2. <AccordionItem disabled title="Title 1">Content 1</AccordionItem>
  3. <AccordionItem disabled title="Title 2">Content 2</AccordionItem>
  4. <AccordionItem title="Title 3">Content 2</AccordionItem>
  5. </Accordion>

Styling

Style the component by targeting the [data-accordion] and [data-accordion-item] attributes.

  1. [data-accordion] {
  2. list-style: none;
  3. }
  4. [data-accordion-item] button {
  5. border: 0;
  6. border-radius: 0;
  7. border-bottom: 1px solid #e0e0e0;
  8. background: none;
  9. font: inherit;
  10. line-height: inherit;
  11. color: inherit;
  12. cursor: pointer;
  13. padding: 0.5rem 1rem;
  14. width: 100%;
  15. text-align: left;
  16. }
  17. [data-accordion-item] button[disabled] {
  18. opacity: 0.5;
  19. cursor: not-allowed;
  20. }
  21. [data-accordion-item] [role="region"] {
  22. padding: 1rem;
  23. }

The semantic element structure resembles the following:

  1. - ul [data-accordion] # Accordion
  2. - li [data-accordion-item] # AccordionItem
  3. - button
  4. - [role="region"]

API

Accordion props

Name Type Default value
multiselect boolean false

AccordionItem props

Name Value Default value
id string "item" + Math.random().toString(36)"
title string or slot:title "Title"
expanded boolean false
disabled boolean false
ref HTMLButtonElement null

Forwarded events

  • on:click

TypeScript

Svelte version 3.31 or greater is required to use this component with TypeScript.

TypeScript definitions are located in the types folder.

Changelog

License

MIT