diff --git a/.changeset/tidy-rockets-chew.md b/.changeset/tidy-rockets-chew.md new file mode 100644 index 000000000..6592e6fb5 --- /dev/null +++ b/.changeset/tidy-rockets-chew.md @@ -0,0 +1,5 @@ +--- +"@ebay/skin": minor +--- + +feat(accordion): new component diff --git a/dist/accordion/accordion.css b/dist/accordion/accordion.css new file mode 100644 index 000000000..e78ba3479 --- /dev/null +++ b/dist/accordion/accordion.css @@ -0,0 +1,58 @@ +ul.accordion { + margin: 0; + padding: 0; + width: 100%; +} +ul.accordion ::marker { + font-size: 0; +} + +ul.accordion li:not(:last-child) { + border-bottom: 1px solid var(--color-stroke-subtle); +} + +ul.accordion summary.details__summary { + border-radius: 0; + display: flex; + font-size: var(--font-size-medium); + justify-content: space-between; + min-height: 48px; + padding: 12px 16px; +} + +ul.accordion details .details__content { + margin: 0 16px 6px; + opacity: 0; + transform: scaleY(0); + transform-origin: top; + transition: + opacity 0.5s cubic-bezier(0.3, 0, 0, 1), + transform 0.5s cubic-bezier(0.3, 0, 0, 1); +} + +ul.accordion details[open] .details__content { + opacity: 1; + transform: scaleY(1); +} + +ul.accordion--large summary.details__summary { + font-size: var(--font-size-large-1); + min-height: 52px; +} + +ul.accordion details svg.details__expand, +ul.accordion details[open] svg.details__collapse { + display: block; +} + +ul.accordion details svg.details__collapse, +ul.accordion details[open] svg.details__expand { + display: none; +} + +@media (prefers-reduced-motion) { + ul.accordion details .details__content, + ul.accordion details[open] .details__content { + transition: none; + } +} diff --git a/src/modules/accordion.marko b/src/modules/accordion.marko new file mode 100644 index 000000000..42cb30f42 --- /dev/null +++ b/src/modules/accordion.marko @@ -0,0 +1,617 @@ +
+ + +

+ An accordion is a series of expandable sections of content. Each section has a summary header that is used to toggle the display of its related content. +

+ +

Default Accordion

+

By default, each section is rendered as closed. When opened, the section will stay open until explicitly closed.

+
+
+
    +
  • +
    + + + Shipping and returns + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Text wraps on small screen with this long text + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + Shipping and returns + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Description + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
+
+ +

Opened Accordion

+

Apply the open property to render a section in an open state.

+
+
+
    +
  • +
    + + + Shipping and returns + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Description + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
+
+
+ + +
    +
  • +
    + + + Shipping and returns + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Description + + + +
    + ... +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    + ... +
    +
    +
  • +
+
+ +

Large Accordion

+

+ Apply the + + accordion--large + + modifier to increase the size of each section summary. +

+
+
+
    +
  • +
    + + + Shipping and returns + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Description + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + Shipping and returns + + + +
    + ... +
    +
    +
  • +
  • +
    + + + Description + + + +
    + ... +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    + ... +
    +
    +
  • +
+
+ +

Auto-Collapsing Accordion

+

Use the name attribute to ensure only one section can be open at a time, with other sections automatically closing.

+

NOTE: For browsers that do not yet support this attribute, Javascript is needed to mimic the behavior as a fallback.

+
+
+
    +
  • +
    + + + Shipping and returns + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Text wraps on small screen with this long text + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + Shipping and returns + + + +
    + ... +
    +
    +
  • +
  • +
    + + + Description + + + +
    + ... +
    +
    +
  • +
  • +
    + + + Specifications + + + +
    + ... +
    +
    +
  • +
+
+
+export const metadata = { + "ds-component": { + name: "accordion", + version: 1.0, + }, +}; diff --git a/src/sass/accordion/accordion.scss b/src/sass/accordion/accordion.scss new file mode 100644 index 000000000..ccb371811 --- /dev/null +++ b/src/sass/accordion/accordion.scss @@ -0,0 +1,66 @@ +@import "../variables/variables"; +@import "../mixins/private/token-mixins"; + +ul.accordion { + margin: 0; + padding: 0; + width: 100%; +} + +/* +Safari does not recognize ordered or unordered lists as lists in the accessibility tree if they have a list-style value of none, unless the list is nested within the