OTTODesign System

Code

Expander

Storybook group: Components · Sidebar path: Components/Expander · Extracted 28.09.2026

Version Tag Status API
v1 <oc-expander-v1> Stable, allowed for generation ExpanderV1

Overview (v1)

Source: ./src/components/expander/v1/Overview.mdx

Expander

The expander component can be used to display long texts by initially truncating them to provide better clarity on the page. The user can then expand and collapse the content using a link. It can be configured to text or row variant (determines the icon/trigger text layout), be expanded, and hide the fade gradient.

Default variation

Story Default:

<oc-expander-v1 oc-aria-label="example content" variant="row">
  <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
  
        <oc-row-v2>
          <div><a href="#">Label with Hyperlink</a></div>
        </oc-row-v2>
</oc-expander-v1>

Configuration

The expander component offers a two styling variants with text and row. This component is configurable, allowing you to tailor its features and appearance to your specific needs. To explore all the available options and adjust the component, use the component configurator and see the changes affect the component in real-time.

Usage guidelines

Before integrating the expander component into your project, make sure you have correctly installed the OTTO components package. Look through the variations page for examples of possible component variations. Here, you can discover both common and specific variations that address different use cases.

Info

See the Expander UX documentation for detailed user experience guidelines.

Accessibility

The expander component comes with a set of built-in accessibility features to ensure a seamless experience for all users.

Use oc-aria-label

To make the expander recognizable for screen readers, use the oc-aria-label attribute to provide clear and descriptive context information. See the general accessibility documentation for guidance on using oc-aria-label, including how it works with link and masked link behavior.

Behavior

The trigger that shows and hides the content has the role button. When the content is visible, the trigger with role button has aria-expanded set to true. When the content area is hidden, it is set to false. The content itself is a role="region". These attributes care so the users are not interrupted by a large content block they may not be interested in. The oc-aria-label attribute helps the screen reader decide whether the content should be skipped.

Keyboard navigation

The expander component supports keyboard navigation for accessibility purposes. The following table lists the keyboard shortcuts available for this component:

n Shortcut Description
Tab Focuses the trigger
Space / Enter (While focused) Toggles the trigger to open or close the expander
Further reading

Configuration (v1)

Source: ./src/components/expander/v1/Configuration.mdx

Expander configuration

Configure the expander component with the controls below and see the changes live in the preview canvas. Click the Show code button within the preview canvas to see the source code for the current component configuration.

Story Default:

<oc-expander-v1 oc-aria-label="example content" variant="row">
  <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
  
        <oc-row-v2>
          <div><a href="#">Label with Hyperlink</a></div>
        </oc-row-v2>
</oc-expander-v1>

Interactive configurator (Storybook controls); every option is listed in the API section of this file.

API v1

Source: ./src/components/expander/v1/ExpanderV1.API.g.mdx

Expander v1 API

API: <oc-expander-v1> (ExpanderV1)

Version 1 of the expander component.

Attributes / properties
Attribute Type Default Required Description
variant "text" | "row" | "row-primary" | "row-secondary" | "text-primary" | "text-secondary" "row-primary" no Sets the variant of the expander.

Deprecated values: - "row" - use "row-primary" or "row-secondary" instead - "text" - use "text-primary" or "text-secondary" instead
hide-fade boolean false no When true, the expander hides the fade gradient. When false, the expander shows the fade gradient.
expanded boolean false no When true, the expander grows to show all of its content. When false, the expander will not exceed its initial height.
overflows boolean no Indicsates if the expander is closed and the expander's content size is larger than the cutoff height. Meaning that the expander's content overflows. This property is readonly And is automatically recalculated when the expander is opened or closed.
is-cut-off boolean no Indicates if the expander is open and the expander's content size is larger than the cutoff height.
cutoff-height number "150" no Sets the cutoff height of the expander. Meaning how much content is shown when the expander is closed. The default value is 150px.
oc-aria-label string yes aria label used on the section to describe the content to screen readers
Slots
Slot Required Description
default yes The content of the expander.
show-less-text no Sets a custom text to replace the content of the toggle button when the expander is expanded. Example:
<span slot="show-less-text">Weniger Informationen</span>
show-more-text no Sets a custom text to replace the content of the toggle button when the expander is collapsed. Example:
<span slot="show-more-text">Mehr Informationen</span>
Events
Event Detail type Description
oc-expander-open CustomEvent<Pick<Props, "hideFade" | "variant">> Dispatched every time the user clicks the expander toggle button, causing the expander to open. But before the actual opening happens. May be cancleled to prevent the expander from opening.
oc-open CustomEvent<Pick<Props, "hideFade" | "variant">> Dispatched every time the user clicks the expander toggle button, causing the expander to open. But before the actual opening happens. May be cancleled to prevent the expander from opening.
oc-expander-close CustomEvent<Pick<Props, "hideFade" | "variant">> Dispatched every time the user clicks the expander toggle button, causing the expander to close. But before the actual closing happens. May be cancleled to prevent the expander from closing.
oc-close CustomEvent<Pick<Props, "hideFade" | "variant">> Dispatched every time the user clicks the expander toggle button, causing the expander to close. But before the actual closing happens. May be cancleled to prevent the expander from closing.
oc-expander-content-overflow-change CustomEvent<Pick<Props, "overflows" | "cutoffHeight">> Dispatched when the content overflow state changes. This may happen Every time the exapnder component is opened or closed.
oc-content-overflow-change CustomEvent<Pick<Props, "overflows" | "cutoffHeight">> Dispatched when the content overflow state changes. This may happen Every time the exapnder component is opened or closed.
oc-property-change OcExpanderV1Events["oc-property-change"] Whenever a property value changes, this event triggers. Use this event to track all property changes within the component.

Refer to the Events documentation for more information.
oc-mount { component: string; } Fired when the component is mounted to the DOM. The event is fired when the onMount hook of the component is called by the runtime.
oc-unmount { component: string; } Fired when the component is unmounted from the DOM. The event is fired when the function returned by the onMount hook of the component is called by the runtime.
CSS custom properties
Custom property Default Description
--background-color undefined Sets a custom background color through a CSS variable. Note: The preferred way of using colors is via design tokens instead of hex values.
--show-more-spacing-x undefined Sets a custom horizontal spacing for the shore more button through a CSS variable.

Variations (v1)

Source: ./src/components/expander/v1/Variations.mdx

Variations

Listed below are the most common variations of the expander component as well as specific component variations for different use cases.

You can explore all available options using the component configurator, adjust the component to your needs, and see the changes live in a preview canvas.

Default

Story: components-expander-variations--default · tags:

The default behavior of the expander. If the height of the text is more than the configured cutoff height (default: 150px), it will be cut off.

Args: oc-aria-label=example content, variant=row, defaultSlot=(see snippet)

<oc-expander-v1 oc-aria-label="example content" variant="row">
  <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
  
        <oc-row-v2>
          <div><a href="#">Label with Hyperlink</a></div>
        </oc-row-v2>
</oc-expander-v1>

No cutoff

Story: components-expander-variations--no-cut-off · tags:

No cut off for content smaller than the configured cutoff height (default: 150px).

Args: variant=row, defaultSlot=(see snippet)

<oc-expander-v1 variant="row">
  <p class="oc-copy-100">
        For content smaller than the configured cutoff height (default: 150px) there is nothing to expand and thus no expand toggle visible.
      </p>
</oc-expander-v1>

Custom cutoff height

Story: components-expander-variations--custom-cutoff-height · tags:

Cutoff height can be set to a custom value.

Args: variant=text, cutoff-height=300, oc-aria-label=example content, defaultSlot=(see snippet)

<oc-expander-v1 variant="text" cutoff-height="300" oc-aria-label="example content">
  <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
</oc-expander-v1>

Custom toggle text

Story: components-expander-variations--custom-toggle-text · tags:

You can configure the toggle button to display custom text using the slots "show-more-text" and "show-less-text".

Args: variant=row, defaultSlot=(see snippet), showMoreTextSlot=<span slot='show-more-text'>Mehr Informationen</span>, showLessTextSlot=<span slot='show-less-text'>Weniger Informationen</span>

<oc-expander-v1 variant="row">
  <span slot='show-more-text'>Mehr Informationen</span>
  <span slot='show-less-text'>Weniger Informationen</span>
  <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
      
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
  
        <oc-row-v2>
          <div>Label</div>
        </oc-row-v2>
</oc-expander-v1>

Demo: text expander

Story: components-expander-variations--demo-text-expander · tags:

Demo showcasing an expandable navigation list aka a table expander.

Args: variant=text, oc-aria-label=example content, defaultSlot=(see snippet)

<oc-expander-v1 variant="text" oc-aria-label="example content">
  <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
</oc-expander-v1>

Demo: text expander variants

Story: components-expander-variations--demo-text-expander-variants · tags:

Demo showcasing all expander variants (row, row-primary, row-secondary, text, text-primary, text-secondary) for QA testing.

<div style="display: grid; gap: 2rem;">
  <div>
    <h2 class="oc-headline-200">Row Variant (Legacy)</h2>
    <oc-expander-v1 variant="row" oc-aria-label="row variant expander">
      ${unsafeHTML(sampleRowContent)}
    </oc-expander-v1>
  </div>

  <div>
    <h2 class="oc-headline-200">Row Primary</h2>
    <oc-expander-v1 variant="row-primary" oc-aria-label="row primary expander">
      ${unsafeHTML(sampleRowContent)}
    </oc-expander-v1>
  </div>

  <div>
    <h2 class="oc-headline-200">Row Secondary</h2>
    <oc-expander-v1 variant="row-secondary" oc-aria-label="row secondary expander">
      ${unsafeHTML(sampleRowContent)}
    </oc-expander-v1>
  </div>

  <div>
    <h2 class="oc-headline-200">Text Variant (Legacy)</h2>
    <oc-expander-v1 variant="text" oc-aria-label="text variant expander">
      ${unsafeHTML(sampleTextContent)}
    </oc-expander-v1>
  </div>

  <div>
    <h2 class="oc-headline-200">Text Primary</h2>
    <oc-expander-v1 variant="text-primary" oc-aria-label="text primary expander">
      ${unsafeHTML(sampleTextContent)}
    </oc-expander-v1>
  </div>

  <div>
    <h2 class="oc-headline-200">Text Secondary</h2>
    <oc-expander-v1 variant="text-secondary" oc-aria-label="text secondary expander">
      ${unsafeHTML(sampleTextContent)}
    </oc-expander-v1>
  </div>
</div>
Story source (TypeScript, verbatim from Storybook)
{
  name: "Demo: text expander variants",
  argTypes: hideControlsBadge(Metadata),
  parameters: {
    controls: {
      disabled: true
    }
  },
  render() {
    const sampleRowContent = `
      <oc-row-v2>
        <div>Label 1</div>
      </oc-row-v2>
      <oc-row-v2>
        <div>Label 2</div>
      </oc-row-v2>
      <oc-row-v2>
        <div>Label 3</div>
      </oc-row-v2>
      <oc-row-v2>
        <div>Label 4</div>
      </oc-row-v2>
      <oc-row-v2>
        <div>Label 5</div>
      </oc-row-v2>
      <oc-row-v2>
        <div>Label 6</div>
      </oc-row-v2>
    `;
    const sampleTextContent = `
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
      <p class="oc-copy-100">
        Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.
      </p>
    `;
    return html`
      <div style="display: grid; gap: 2rem;">
        <div>
          <h2 class="oc-headline-200">Row Variant (Legacy)</h2>
          <oc-expander-v1 variant="row" oc-aria-label="row variant expander">
            ${unsafeHTML(sampleRowContent)}
          </oc-expander-v1>
        </div>

        <div>
          <h2 class="oc-headline-200">Row Primary</h2>
          <oc-expander-v1 variant="row-primary" oc-aria-label="row primary expander">
            ${unsafeHTML(sampleRowContent)}
          </oc-expander-v1>
        </div>

        <div>
          <h2 class="oc-headline-200">Row Secondary</h2>
          <oc-expander-v1 variant="row-secondary" oc-aria-label="row secondary expander">
            ${unsafeHTML(sampleRowContent)}
          </oc-expander-v1>
        </div>

        <div>
          <h2 class="oc-headline-200">Text Variant (Legacy)</h2>
          <oc-expander-v1 variant="text" oc-aria-label="text variant expander">
            ${unsafeHTML(sampleTextContent)}
          </oc-expander-v1>
        </div>

        <div>
          <h2 class="oc-headline-200">Text Primary</h2>
          <oc-expander-v1 variant="text-primary" oc-aria-label="text primary expander">
            ${unsafeHTML(sampleTextContent)}
          </oc-expander-v1>
        </div>

        <div>
          <h2 class="oc-headline-200">Text Secondary</h2>
          <oc-expander-v1 variant="text-secondary" oc-aria-label="text secondary expander">
            ${unsafeHTML(sampleTextContent)}
          </oc-expander-v1>
        </div>
      </div>
    `;
  }
}

Demo: text expander scroll target

Story: components-expander-variations--demo-text-expander-scroll-target · tags:

Demo showcasing an expandable navigation list aka a table expander.

Args: variant=text, oc-aria-label=example content, defaultSlot=(see snippet)

<h1>This is a heading</h1>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<oc-expander-v1 variant="text" oc-aria-label="example content">
  ${unsafeHTML(content)} ${unsafeHTML(showMoreTextSlot)} ${unsafeHTML(showMoreTextSlot)}
</oc-expander-v1>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
<p>
  Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
  aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
  mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
  tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
  doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
  veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
  perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
  perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
  voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
</p>
Story source (TypeScript, verbatim from Storybook)
{
  name: "Demo: text expander scroll target",
  parameters: {
    controls: {
      disabled: true
    }
  },
  args: {
    variant: "text",
    "oc-aria-label": "example content",
    defaultSlot: `\
    ${Array.from({
      length: 30
    }, () => `
    <p class="oc-copy-100">Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus. Lorem ipsum dolor sit amet, adip iscing elit. Aenean commodo ligula eget dolor. Aenean massa nasce tur ridiculus mus.</p>`).join("")}
    `
  },
  render(args) {
    const {
      defaultSlot: content,
      showMoreTextSlot,
      ...props
    } = args;
    return html`
      <h1>This is a heading</h1>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <oc-expander-v1 ${spread(props)}>
        ${unsafeHTML(content)} ${unsafeHTML(showMoreTextSlot)} ${unsafeHTML(showMoreTextSlot)}
      </oc-expander-v1>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
      <p>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Doloribus quidem vel voluptatibus,
        aliquid impedit fugit sapiente praesentium quo at est? Asperiores fugit repellendus,
        mollitia provident nostrum at ipsum! Fuga consequuntur vitae exercitationem! Praesentium eum
        tempora quaerat unde maxime odio nemo dicta consectetur, nisi vitae quibusdam ut debitis
        doloremque iusto quidem similique dignissimos ratione adipisci error sint? At aspernatur cum
        veritatis deleniti, quaerat laudantium sit qui, aliquam, possimus esse praesentium
        perspiciatis labore exercitationem sunt laborum numquam placeat dignissimos? Libero ut
        perferendis ullam illo vero dolorum ducimus dolore molestias modi aliquam officia doloremque
        voluptatem non excepturi facere, id, quam consequuntur dolores consequatur.
      </p>
    `;
  }
}

Demo: expand only hidden elements

Story: components-expander-variations--demo-expand-only-hidden-elements · tags:

Demo showcasing a common use case with split interactive elements.

<oc-block-v2 style="max-width: 400px;">
  <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 1</oc-row-v2>
  <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 2</oc-row-v2>
  <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 3</oc-row-v2>
  <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 4</oc-row-v2>

  <oc-expander-v1 variant="row" hide-fade cutoff-height="0" oc-aria-label="Weitere">
    <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 5</oc-row-v2>
    <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 6</oc-row-v2>
    <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 7</oc-row-v2>
    <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 8</oc-row-v2>
  </oc-expander-v1>
</oc-block-v2>
Story source (TypeScript, verbatim from Storybook)
{
  name: "Demo: expand only hidden elements",
  parameters: {
    controls: {
      disabled: true
    }
  },
  render() {
    return html`
      <oc-block-v2 style="max-width: 400px;">
        <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 1</oc-row-v2>
        <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 2</oc-row-v2>
        <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 3</oc-row-v2>
        <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 4</oc-row-v2>

        <oc-expander-v1 variant="row" hide-fade cutoff-height="0" oc-aria-label="Weitere">
          <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 5</oc-row-v2>
          <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 6</oc-row-v2>
          <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 7</oc-row-v2>
          <oc-row-v2 as-button icon-right="arrow-long-right">Interaktion 8</oc-row-v2>
        </oc-expander-v1>
      </oc-block-v2>
    `;
  }
}

Interaction tests (ExpanderV1.interactions.stories.ts)

Interaction test stories (automated tests, not usage patterns).

Expand On Button Click

Story: components-expander-interaction-tests--expand-on-button-click · tags: play-fn

Expand On Fade Click

Story: components-expander-interaction-tests--expand-on-fade-click · tags: play-fn

Collapse On Click

Story: components-expander-interaction-tests--collapse-on-click · tags: play-fn