Various button styles and sizes for actions and navigation.
Button Variants
Button Sizes
Theme Color Buttons
Theme Color Outline Buttons
Outline Buttons
Button States
Block Buttons
Button Groups - Basic
Horizontal (default)
Vertical
No-Wrap (prevents line breaks)
Button Groups - Gap Sizes
Semantic Gap Classes
gap-xs (4px)
gap-sm (8px)
gap-md (12px)
gap-base (16px)
gap-lg (24px)
gap-xl (32px)
Vertical Alignment
Use semantic gap classes (gap-sm, gap-md, gap-lg, gap-xl) to control vertical spacing between buttons.
Start gap-sm
Center gap-md
End gap-lg
Stretch gap-xl
Responsive Direction
Horizontal → Vertical at md (768px)
Resize window to see change
Vertical → Horizontal at lg (992px)
Starts vertical, becomes horizontal on large screens
Class Reference
--sm-vertical/--sm-horizontalat 576px--md-vertical/--md-horizontalat 768px--lg-vertical/--lg-horizontalat 992px--xl-vertical/--xl-horizontalat 1200px
Split Buttons
Primary action + dropdown toggle combined into a single control.
Sizes
Upward Placement
Use data-placement="top-end" to open the menu upward. Floating UI will auto-flip if there's not enough space.
Custom Icons (no rotation)
Omit pa-btn-split__chevron from the icon for static icons that don't rotate on open.
Items with Actions
Two patterns. Bookmarks and Recent use an inline action button (a .pa-btn-split__item-row delete) — a row-action isn't the item itself, so clicking it removes the row and the menu stays open on its own. Members instead confirms on the item: the item carries data-pa-keep-open so clicking it (a real menu item, which would otherwise close the menu) keeps it open while the popconfirm is anchored — and the primary button adds a new member.
Overflow Toolbar (.pa-overflow)
A .pa-overflow row auto-appends a dedicated [⋮] "more" trigger; when the row runs out of horizontal space, overflowing children collapse into that menu, and pop back out as room returns. A .pa-btn-split child collapses as an atomic labeled group — its primary action and its own menu items stay together, nothing foreign mixes in.
Drag the resize handle in the bottom-right of the box below to shrink the bar. Lowest data-pa-actions-priority (default 0) drops first; ties broken by DOM order. Pin "Publish" with data-pa-actions-priority="10", and keep the split button visible longest with data-pa-actions-priority="20". Drag all the way in and even the split button collapses into the [⋮] menu — it lands as an atomic RUN group (its primary plus its own options), not scattered loose.
Last click: nothing yet — click any button, including after it collapses into the [⋮] menu
Drop direction
Default data-pa-actions-overflow-from="end" collapses the rightmost child first. Set data-pa-actions-overflow-from="start" on the .pa-overflow container to collapse the leftmost child first instead.
In card headers
In a card header, use the card-flavored alias .pa-card__actions--overflow on the .pa-card__actions slot itself — the buttons and split button become its direct children (no inner wrapper). It auto-inits like a standalone .pa-overflow, appending its own [⋮] more-menu, and the header title yields before the actions collapse. Laid out three-up (pa-col-lg-1-3) so each card is already narrow — resize the browser window to watch each toolbar consume and spit out action buttons live, each collapsing at its own breakpoint.
Quarterly Performance & Customer Engagement Analytics Dashboard
Card body. The actions bar in the header carries the overflow behavior — narrow the window to watch Configure, Filter, and Refresh fold into the [⋮] menu in that order (lowest priority first; Export is pinned, the split button survives longest).
Database Migration Tasks — Production Environment Schema Updates
No pinning on the plain buttons — they collapse in default order (rightmost first: Rollback → Backup → Validate); the Deploy split button is pinned highest so it stays inline longest.
Team Members & Permissions Management — Enterprise Console
Six children here — Invite is pinned with priority 5, so it survives the first wave of collapses but still folds away before the pinned Add-user split button. The title yields first (truncating to a min-width floor) so the action bar keeps its buttons; only when the header is genuinely tiny does the split button itself collapse into the [⋮] menu.
How it works
.pa-overflowis the row; it providesmin-width: 0; overflow: hidden; flex-shrink: 1. Works standalone in any flex context; in a card header use the alias.pa-card__actions--overflowon the actions slot itself. Both auto-init — no JS wiring needed.overflow.jsappends a dedicated[⋮]"more" trigger and, on resize, walks the lowest-priority children (data-pa-actions-priority, default0) into that trigger's menu until the row fits; higher-priority children survive longer.- A
.pa-btn-splitchild collapses atomically — its primary action and its own menu items drop into the more-menu together under a section label, nothing foreign mixes in. Give it a high priority (e.g.20) so it stays visible longest. - Plain items get their class swapped to
pa-btn-split__itemwhile collapsed; the original classList is stashed on the element and restored on the way back out. - Drop direction is controlled by
data-pa-actions-overflow-fromon the container:"end"(default — rightmost first) or"start"(leftmost first). - Click handlers survive — the DOM node moves but is preserved. Every button above updates the Last click readout, so you can confirm it still fires after collapsing into
[⋮](the per-member delete buttons included).
Text Truncation
Use .text-truncate with a fixed width (.wr-*) to truncate long text with ellipsis
Buttons with Text Icons
Buttons with icons are automatically left-aligned with fixed-width icon container:
Icon Only Buttons
Icon-only button sizes (XS → XL):
Various colors - default size:
Compact (XS) - perfect for table actions:
With ripple and loading states (click to test):
Fixed Width Buttons
Use minwr-* + maxwr-* to constrain width. Add text-truncate on an inner span for ellipsis:
Different Widths (minwr-8 to minwr-20)
Button Text Alignment
Control text alignment within fixed-width buttons. Note the varied text lengths to show the effect:
Inline Start Aligned
Inline End Aligned
Center Aligned
Justified
Font Awesome Icons
Font Awesome icons with varied text lengths to show alignment:
Inline Start Aligned
Inline End Aligned
Center Aligned
Justified
Ripple Effect Buttons
Click buttons to see ripple animation effect:
Loading State Buttons
Click buttons to simulate loading states:
Usage Guide
Ripple Effect
Add pa-btn--ripple class and data-ripple attribute to any button for
click animation feedback.
Loading States
Use pa-btn--loading class to show spinner. JavaScript can toggle this class during
async operations.
Best Practices
- Fast Sites: Always show loading feedback, even for quick operations (200-500ms minimum)
- User Confidence: Ripple effects confirm button clicks were registered
- Prevent Double-clicks: Disable buttons during loading to prevent duplicate submissions
- Accessibility: Loading states are announced to screen readers
CSS Classes Reference
Button Base
pa-btn- Base button styling
Button Variants (Colors)
pa-btn--primary- Primary accent colorpa-btn--secondary- Secondary/neutral colorpa-btn--success- Success/green colorpa-btn--warning- Warning/yellow colorpa-btn--danger- Danger/red colorpa-btn--info- Info/blue colorpa-btn--light- Light backgroundpa-btn--dark- Dark background
Outline Variants
pa-btn--outline-primary- Outline primarypa-btn--outline-secondary- Outline secondarypa-btn--outline-success- Outline successpa-btn--outline-warning- Outline warningpa-btn--outline-danger- Outline dangerpa-btn--outline-info- Outline infopa-btn--color-{1-9}- Theme color slotspa-btn--outline-color-{1-9}- Outline theme color slots
Button Sizes
pa-btn--xs- Extra small buttonpa-btn--sm- Small buttonpa-btn--lg- Large buttonpa-btn--xl- Extra large button
Button States & Modifiers
pa-btn--loading- Loading state with spinnerpa-btn--ripple- Enable ripple click effectpa-btn--block- Full width isBlock buttonpa-btn--icon-only- Square icon-only button
Content Alignment
pa-btn--align-start- Inline-start align content (RTL: right)pa-btn--align-end- Inline-end align content (RTL: left)pa-btn--align-center- Center-align content (the default since core rc06; explicit)pa-btn--align-justify- Space-between content
Button Elements
pa-btn__icon- Icon container with fixed widthpa-btn__spinner- Loading spinner element
Button Groups
pa-btn-group- Container for grouped buttonspa-btn-group--vertical- Vertical stackingpa-btn-group--nowrap- Prevent wrapping
Button Group Alignment (vertical only)
pa-btn-group--center- Center-align buttonspa-btn-group--end- End-align buttonspa-btn-group--stretch- Full width buttons
Responsive Button Groups
pa-btn-group--sm-vertical- Vertical at 576px+pa-btn-group--sm-horizontal- Horizontal at 576px+pa-btn-group--md-vertical- Vertical at 768px+pa-btn-group--md-horizontal- Horizontal at 768px+pa-btn-group--lg-vertical- Vertical at 992px+pa-btn-group--lg-horizontal- Horizontal at 992px+pa-btn-group--xl-vertical- Vertical at 1200px+pa-btn-group--xl-horizontal- Horizontal at 1200px+
Split Buttons
pa-btn-split- Container for split buttonpa-btn-split__toggle- Toggle button (fixed square width)pa-btn-split__chevron- On the icon to opt-in to 180deg rotation on open (omit for static icons)pa-btn-split__menu- Dropdown menu panel (outer, overflow hidden)pa-btn-split__menu-inner- Inner wrapper for menu items (padding, flex layout)pa-btn-split__menu--open- Show dropdown menupa-btn-split__item- Menu item buttonpa-btn-split__item--danger- Destructive action stylingpa-btn-split__item-row- Menu row wrapping an item + a trailing action button (e.g. delete)data-placement="top-end"- Open menu upward (on container)data-pa-keep-open- On an item (or ancestor): keep the menu open on click, for actions that spawn their own popover
Overflow Toolbar
pa-overflow- Progressive-collapse flex row; auto-appends a[⋮]"more" trigger and walks overflowing children into itpa-card__actions--overflow- Card-header alias ofpa-overflowon thepa-card__actionsslotpa-overflow__trigger- The auto-created[⋮]button (retheming hook; ships as a standardpa-btn--secondary)data-pa-overflow-trigger="ghost"- Make the trigger chromeless instead of bordered (on the container)data-pa-actions-priority- Drop order per child (default0; higher survives longer)data-pa-actions-overflow-from-end(default, rightmost first) orstart(leftmost first)data-pa-overflow-label- Override the section label for a collapsed split-button grouppa-btn-split--in-overflow/pa-btn-split__group-label- Applied byoverflow.jswhen a split button collapses as an atomic labeled group (not authored by hand)