<div class="n7-accordion px-4 md:py-6 lg:py-8">

    <h3 class="n7-accordion__title flex font-bold px-4 md:px-6 lg:px-8 text-lg md:text-2xl lg:text-3xl">
        <button type="button" aria-expanded="false" class="n7-accordion__trigger group flex items-center flex-1 transition-all" aria-controls="accordionSection-1" id="accordion1id">
            <span class="n7-accordion__trigger-label">
                Panel 1 Nunc aliquam phasellus molestie blandit?
            </span>

            <span class="n7-accordion__icon flex p-2 ml-auto h-auto transition-all n7-background-02 rounded group-aria-expanded:n7-background-primary group-aria-expanded:text-white ">
                <svg class="n7-icon inline-block align-middle fill-current w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9 is-show-more group-aria-expanded:hidden" aria-hidden="true" focusable="false" role="img">
                    <use href="../../icons.svg#mini--plus" />
                </svg>

                <svg class="n7-icon inline-block align-middle fill-current w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9 is-show-less hidden group-aria-expanded:inline-block" aria-hidden="true" focusable="false" role="img">
                    <use href="../../icons.svg#mini--minus" />
                </svg>

            </span>

        </button>
    </h3>
    <div id="accordionSection-1" role="region" aria-labelledby="accordion1id" class="n7-accordion__pane transition-all pl-4 md:pl-6 lg:pl-8 pr-8 md:pr-16 lg:pr-17" hidden>
        <p>Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.</p>
    </div>

    <h3 class="n7-accordion__title flex font-bold px-4 md:px-6 lg:px-8 text-lg md:text-2xl lg:text-3xl">
        <button type="button" aria-expanded="false" class="n7-accordion__trigger group flex items-center flex-1 transition-all" aria-controls="accordionSection-2" id="accordion2id">
            <span class="n7-accordion__trigger-label">
                Panel 2 Nunc aliquam phasellus molestie blandit?
            </span>

            <span class="n7-accordion__icon flex p-2 ml-auto h-auto transition-all n7-background-02 rounded group-aria-expanded:n7-background-primary group-aria-expanded:text-white ">
                <svg class="n7-icon inline-block align-middle fill-current w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9 is-show-more group-aria-expanded:hidden" aria-hidden="true" focusable="false" role="img">
                    <use href="../../icons.svg#mini--plus" />
                </svg>

                <svg class="n7-icon inline-block align-middle fill-current w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9 is-show-less hidden group-aria-expanded:inline-block" aria-hidden="true" focusable="false" role="img">
                    <use href="../../icons.svg#mini--minus" />
                </svg>

            </span>

        </button>
    </h3>
    <div id="accordionSection-2" role="region" aria-labelledby="accordion2id" class="n7-accordion__pane transition-all pl-4 md:pl-6 lg:pl-8 pr-8 md:pr-16 lg:pr-17" hidden>
        <p>Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.</p>
    </div>

    <h3 class="n7-accordion__title flex font-bold px-4 md:px-6 lg:px-8 text-lg md:text-2xl lg:text-3xl">
        <button type="button" aria-expanded="false" class="n7-accordion__trigger group flex items-center flex-1 transition-all" aria-controls="accordionSection-3" id="accordion3id">
            <span class="n7-accordion__trigger-label">
                Panel 3 Nunc aliquam phasellus molestie blandit?
            </span>

            <span class="n7-accordion__icon flex p-2 ml-auto h-auto transition-all n7-background-02 rounded group-aria-expanded:n7-background-primary group-aria-expanded:text-white ">
                <svg class="n7-icon inline-block align-middle fill-current w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9 is-show-more group-aria-expanded:hidden" aria-hidden="true" focusable="false" role="img">
                    <use href="../../icons.svg#mini--plus" />
                </svg>

                <svg class="n7-icon inline-block align-middle fill-current w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9 is-show-less hidden group-aria-expanded:inline-block" aria-hidden="true" focusable="false" role="img">
                    <use href="../../icons.svg#mini--minus" />
                </svg>

            </span>

        </button>
    </h3>
    <div id="accordionSection-3" role="region" aria-labelledby="accordion3id" class="n7-accordion__pane transition-all pl-4 md:pl-6 lg:pl-8 pr-8 md:pr-16 lg:pr-17" hidden>
        <p>Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.</p>
    </div>

</div>
<div{% if idSection %} id="accordionSection{{ idSection }}"{% endif %} class="n7-accordion{% if spacingClasses %} {{ spacingClasses }}{% endif %}{% block classes %}{% if classes %} {{ classes }}{% endif -%}{%- endblock classes -%}">
    {% for panel in panels %}
    <h3 class="n7-accordion__title flex font-bold{% if titleSpacingClasses %} {{ titleSpacingClasses }}{% endif %}{% if panelTitleFont %} {{ panelTitleFont }}{% endif %}{% if panelTitleClasses %} {{ panelTitleClasses }}{% endif %}">
        <button type="button" aria-expanded="{% if panel.isOpen %}true{% else %}false{% endif %}" class="n7-accordion__trigger group flex items-center flex-1 transition-all{% if triggerClasses %} {{ triggerClasses }} {% endif %}" aria-controls="accordionSection-{{ loop.index }}" id="accordion{{ loop.index }}id">
            <span class="n7-accordion__trigger-label">
                {{ panel.label }}
            </span>
            {% block icon %}
                <span class="n7-accordion__icon flex p-2 ml-auto h-auto transition-all{% if iconClasses %} {{ iconClasses }} {% endif %}">
                    {% render "@icon", {id: showMoreIcon, size: iconSize, classes: 'is-show-more group-aria-expanded:hidden'}, true %}
                    {% render "@icon", {id: showLessIcon, size: iconSize, classes: 'is-show-less hidden group-aria-expanded:inline-block'}, true %}
                </span>
            {% endblock icon %}
        </button>
    </h3>
    <div id="accordionSection-{{ loop.index }}" role="region" aria-labelledby="accordion{{ loop.index }}id" class="n7-accordion__pane transition-all{% if panelContentSpacing %} {{ panelContentSpacing }}{% endif %}{% if panelContentClasses %} {{ panelContentClasses }}{% endif %}"{% if not panel.isOpen %} hidden{% endif %}>
        {{ panel.text|safe }}
    </div>
    {% endfor %}
</div>
{
  "showMoreIcon": "mini--plus",
  "showLessIcon": "mini--minus",
  "iconSize": "w-4 h-4 md:w-8 md:h-8 lg:w-9 lg:h-9",
  "spacingClasses": "px-4 md:py-6 lg:py-8",
  "titleSpacingClasses": "px-4 md:px-6 lg:px-8",
  "panelTitleFont": "text-lg md:text-2xl lg:text-3xl",
  "panelContentSpacing": "pl-4 md:pl-6 lg:pl-8 pr-8 md:pr-16 lg:pr-17",
  "panels": [
    {
      "label": "Panel 1 Nunc aliquam phasellus molestie blandit?",
      "text": "<p>Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.</p>"
    },
    {
      "label": "Panel 2 Nunc aliquam phasellus molestie blandit?",
      "text": "<p>Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.</p>"
    },
    {
      "label": "Panel 3 Nunc aliquam phasellus molestie blandit?",
      "text": "<p>Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.</p>"
    }
  ]
}
  • Content:
    /**
     * ACCORDION
     *
    */
    @layer components {
        .n7-accordion {
            @apply grid gap-6 p-4 md:p-6 lg:p-8;
        }
    
        .n7-accordion:where(:not(.n7-accordion--minimal)) {
            @apply bg-white rounded shadow-md;
        }
    
        .n7-accordion--minimal {
            @apply border-b n7-border-gray-01;
        }
    }
  • URL: /components/raw/accordion/accordion.css
  • Filesystem Path: components/03-molecules/accordion/accordion.css
  • Size: 300 Bytes
  • Content:
    /*
     *   This content is licensed according to the W3C Software License at
     *   https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
     *
     *   Simple accordion pattern example
     */
    
    'use strict';
    
    class Accordion {
      constructor(domNode) {
        this.rootEl = domNode;
        this.buttonEl = this.rootEl.querySelector('button[aria-expanded]');
    
        const controlsId = this.buttonEl.getAttribute('aria-controls');
        this.contentEl = document.getElementById(controlsId);
    
        this.open = this.buttonEl.getAttribute('aria-expanded') === 'true';
    
        // add event listeners
        this.buttonEl.addEventListener('click', this.onButtonClick.bind(this));
      }
    
      onButtonClick() {
        this.toggle(!this.open);
      }
    
      toggle(open) {
        // don't do anything if the open state doesn't change
        if (open === this.open) {
          return;
        }
    
        // update the internal state
        this.open = open;
    
        // handle DOM updates
        this.buttonEl.setAttribute('aria-expanded', `${open}`);
        if (open) {
          this.contentEl.removeAttribute('hidden');
        } else {
          this.contentEl.setAttribute('hidden', '');
        }
      }
    
      // Add public open and close methods for convenience
      open() {
        this.toggle(true);
      }
    
      close() {
        this.toggle(false);
      }
    }
    
    // init accordions
    const accordions = document.querySelectorAll('.n7-accordion__title');
    accordions.forEach((accordionEl) => {
      new Accordion(accordionEl);
    });
    
  • URL: /components/raw/accordion/accordion.js
  • Filesystem Path: components/03-molecules/accordion/accordion.js
  • Size: 1.4 KB

Accordion component configuration.

  • classes: value - class overrides
  • spacingClasses: value - accordion soacing classes
  • panelTitleClasses: classes for panel title
  • panelTitleFont: value - title font icon
  • titleSpacingClasses: value - spacing classes for title
  • triggerClasses: classes for panel trigger
  • iconClasses: classes for accordion icon
  • panelContentClasses: classes for panel content
  • panelContentSpacing: value - spacing classes for accordion pane
  • showMoreIcon: icon id for show more
  • showLessIcon: icon id for show less
  • panels: accordion panels
    • isOpen: true - set which panel should be open on first loading
    • label: value - panel text label
    • text: value - panel text content

Blocks:

  • classes: for class overridings in variant templates, if needed
  • icon: for accordion icon overriding