Basic
A single-select accordion with one expanded section by default.
Icons by @ng-icons/tabler-icons
The component library does not provide icons.
Composable disclosure primitives for progressive reveal content.
Preview
TS
import { FrAccordionModule } from '@frame-ui-ng/components/accordion';HTML
<div frAccordion type="single" collapsible [defaultValue]="'item-1'">
<section frAccordionItem value="item-1">
<button frAccordionTrigger type="button">
<span>Can the trigger include custom content?</span>
<ng-icon frAccordionIcon name="tablerChevronDown" size="18" />
</button>
<div frAccordionContent>
Yes. Triggers can wrap labels, icons, counters, or other inline elements as long as the button stays clear and readable.
</div>
</section>
</div>A single-select accordion with one expanded section by default.
Allow several related sections to remain expanded for side-by-side scanning.
Toggle the border input to switch between separated rows and a lighter, borderless presentation.
Customize the accordion by scoping design token overrides to a wrapper class. This keeps one-off treatments local while preserving the default component contract everywhere else.
Hover the highlighted regions to see which accordion tokens control the trigger, content, border, and icon. Click a region to pin it while you inspect the current token values.
Use these CSS custom properties to tune spacing, typography, borders, motion, and icon behavior without changing the component markup. Override them globally for system-wide defaults or locally on a wrapper class for one-off variants.
SCSS
--frame-accordion-item-border: var(--frame-border);
--frame-accordion-item-radius: var(--frame-radius-md);
--frame-accordion-item-padding-x: 0;
--frame-accordion-trigger-min-height: 3rem;
--frame-accordion-trigger-padding-y: 1rem;
--frame-accordion-trigger-padding-x: 0;
--frame-accordion-trigger-gap: 1rem;
--frame-accordion-trigger-color: var(--frame-foreground);
--frame-accordion-trigger-font-size: 0.9375rem;
--frame-accordion-trigger-font-weight: 500;
--frame-accordion-trigger-hover-color: var(--frame-foreground);
--frame-accordion-trigger-disabled-opacity: 0.55;
--frame-accordion-content-padding-bottom: 1rem;
--frame-accordion-content-padding-inline: 0;
--frame-accordion-content-color: var(--frame-muted-foreground);
--frame-accordion-content-font-size: 0.875rem;
--frame-accordion-content-line-height: 1.6;
--frame-accordion-content-opacity-closed: 0;
--frame-accordion-content-opacity-open: 1;
--frame-accordion-content-transition-duration: 220ms;
--frame-accordion-content-transition-timing: ease;
--frame-accordion-icon-size: 1rem;
--frame-accordion-icon-rotation: 180deg;