remix/ui/accordion · Demo

View Source

Accordion in a Card

The Accordion can sit inside a card when the surrounding surface needs stronger grouping.

Project settings

Deployment policies

The Accordion can sit inside a card when the surrounding surface needs stronger grouping.

Require one reviewer for routine changes and two reviewers for dependency, auth, or billing-related changes.

Schedule production deploys on weekdays before 3 PM so incidents and rollback work stay inside staffed hours.

Keep a rollback target ready for every release and treat rollback preparation as part of the normal change checklist.

import { css } from 'remix/ui'
import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from 'remix/ui/accordion'

export default function Example() {
  return () => (
    <article mix={cardCss}>
      <div mix={cardHeaderCss}>
        <p mix={eyebrowCss}>Project settings</p>
        <h3 mix={titleCss}>Deployment policies</h3>
        <p mix={descriptionCss}>
          The Accordion can sit inside a card when the surrounding surface needs
          stronger grouping.
        </p>
      </div>

      <div mix={accordionInsetCss}>
        <Accordion defaultValue="reviews">
          <AccordionItem value="reviews">
            <AccordionTrigger>Required approvals</AccordionTrigger>
            <AccordionContent>
              <p mix={bodyTextCss}>
                Require one reviewer for routine changes and two reviewers for
                dependency, auth, or billing-related changes.
              </p>
            </AccordionContent>
          </AccordionItem>

          <AccordionItem value="windows">
            <AccordionTrigger>Release windows</AccordionTrigger>
            <AccordionContent>
              <p mix={bodyTextCss}>
                Schedule production deploys on weekdays before 3 PM so incidents
                and rollback work stay inside staffed hours.
              </p>
            </AccordionContent>
          </AccordionItem>

          <AccordionItem value="rollback">
            <AccordionTrigger>Rollback policy</AccordionTrigger>
            <AccordionContent>
              <p mix={bodyTextCss}>
                Keep a rollback target ready for every release and treat
                rollback preparation as part of the normal change checklist.
              </p>
            </AccordionContent>
          </AccordionItem>
        </Accordion>
      </div>
    </article>
  )
}

const cardCss = css({
  display: 'flex',
  flexDirection: 'column',
  gap: '12px',
  padding: '16px',
  border: '1px solid #e7e7e7',
  borderRadius: '12px',
  backgroundColor: '#ffffff',
  boxShadow: '0 1px 1px rgb(0 0 0 / 0.05)',
})

const cardHeaderCss = css({
  display: 'flex',
  flexDirection: 'column',
  gap: '8px',
})

const accordionInsetCss = css({
  paddingInline: '16px',
})

const eyebrowCss = css({
  margin: 0,
  fontSize: '10px',
  fontWeight: '600',
  letterSpacing: '0.06em',
  textTransform: 'uppercase',
  color: '#6d6d6d',
})

const titleCss = css({
  margin: 0,
  fontSize: '16px',
  lineHeight: '1.25',
  fontWeight: '600',
  color: '#151515',
})

const descriptionCss = css({
  margin: 0,
  fontSize: '13px',
  lineHeight: '1.65',
  color: '#4f4f4f',
})

const bodyTextCss = css({
  margin: 0,
  fontSize: '13px',
  lineHeight: '1.65',
  color: '#4f4f4f',
})