@zendeskgarden/container-accordion
TypeScript icon, indicating that this package has built-in type declarations

3.0.8 • Public • Published

@zendeskgarden/container-accordion npm version

This package includes containers relating to accordions in the Garden Design System.

Installation

npm install @zendeskgarden/container-accordion

Usage

This container implements the accordion design pattern and can be used to build an accordion component. Check out storybook for live examples.

useAccordion

The useAccordion hook manages toggle state and required accessibility attributes for a group of sections.

import { useAccordion } from '@zendeskgarden/container-accordion';

const Accordion = ({ sections = [0, 1, 2], expandable = true, collapsible = true } = {}) => {
  const { getHeaderProps, getTriggerProps, getPanelProps, expandedSections, disabledSections } =
    useAccordion({
      sections,
      expandedSections: [0],
      expandable,
      collapsible
    });

  return (
    <>
      {sections.map((section, index) => {
        const disabled = disabledSections.indexOf(index) !== -1;
        const hidden = expandedSections.indexOf(index) === -1;

        return (
          <div key={index}>
            <h2 {...getHeaderProps({ role: null, ariaLevel: null })}>
              <button
                {...getTriggerProps({
                  index,
                  role: null,
                  tabIndex: null,
                  disabled,
                  style: { width: '100%' }
                })}
              >
                {index}
              </button>
            </h2>
            <section
              {...getPanelProps({
                index,
                role: null,
                hidden
              })}
            >
              {section}
            </section>
          </div>
        );
      })}
    </>
  );
};

return <Accordion expandable={true} collapsible={true} />;

AccordionContainer

AccordionContainer is a render-prop wrapper for the useAccordion hook.

import { AccordionContainer } from '@zendeskgarden/container-accordion';

const Accordion = ({ sections = [0, 1, 2], expandable = true, collapsible = true } = {}) => (
  <AccordionContainer sections={sections} expandable={expandable} collapsible={collapsible}>
    {({ getHeaderProps, getTriggerProps, getPanelProps, expandedSections, disabledSections }) => (
      <>
        {sections.map((section, index) => {
          const disabled = disabledSections.indexOf(index) !== -1;
          const hidden = expandedSections.indexOf(index) === -1;

          return (
            <div key={index}>
              <h2 {...getHeaderProps({ role: null, ariaLevel: null })}>
                <button
                  {...getTriggerProps({
                    index,
                    role: null,
                    tabIndex: null,
                    disabled,
                    style: { width: '100%' }
                  })}
                >
                  {index}
                </button>
              </h2>
              <section
                {...getPanelProps({
                  index,
                  role: null,
                  hidden
                })}
              >
                {section}
              </section>
            </div>
          );
        })}
      </>
    )}
  </AccordionContainer>
);

return <Accordion expandable={true} collapsible={true} />;

Package Sidebar

Install

npm i @zendeskgarden/container-accordion

Weekly Downloads

6,650

Version

3.0.8

License

Apache-2.0

Unpacked Size

27.7 kB

Total Files

9

Last publish

Collaborators

  • zendesk-garden