Layout & navigation

AppFormActions

Action button footer — sticky or inline.

<app-form-actions>

<app-form-actions> is a footer container for form action buttons (submit, cancel, save, etc.). It can sit inline at the end of a form or stick to the viewport bottom on long forms, keeping actions visible and within reach. It supports three alignment modes: trailing (right), leading (left), or space-between for a cancel/submit pair.

Pair it with <app-form-section> and <app-form-row> to build consistent form layouts.

Playground

Every attribute, live. Each change re-renders the real tag helper on the server, so the markup underneath is the exact call that produced the footer above it.

<app-form-actions>
    <app-button variant="outline">Cancel</app-button>
    <app-button variant="primary">Save changes</app-button>
</app-form-actions>

Basic usage — inline footer

By default, AppFormActions right-aligns its children (align="end").

<app-form-actions>
    <app-button variant="primary">Save</app-button>
</app-form-actions>

Alignment — end, start, between

The align attribute controls how children are positioned within the footer.

align="start" — buttons on the left

align="between" — split layout for cancel/submit

<!-- align="start" -->
<app-form-actions align="start">
    <app-button variant="outline-danger">Delete</app-button>
</app-form-actions>

<!-- align="between" -->
<app-form-actions align="between">
    <app-button variant="outline">Cancel</app-button>
    <app-button variant="primary">Submit</app-button>
</app-form-actions>

Sticky footer — pinned to viewport bottom

On long forms, set sticky="true" to pin actions to the bottom of the screen.

<app-form-actions sticky="true" align="between">
    <app-button variant="outline">Cancel</app-button>
    <app-button variant="primary">Save Changes</app-button>
</app-form-actions>

Note: On a real form page, the sticky footer stays visible as you scroll.

Styling

<app-form-actions> receives its appearance — border, background colour, padding — from the shared design system tokens in @webority/theme, published to this surface via Webority.Ui.Razor. The sticky class adds the positioning and layering; the surface background ensures buttons don't float over form content.

Common patterns

A single primary action

Cancel and confirm pair

Dangerous action on the left

Every option

The whole surface of the component, one cell per value.

align — all three

align="end"
align="start"
align="between"

sticky

(default) — inline, no sticky class
sticky="true" — top border + surface background, sticks to viewport bottom

single action vs cancel/submit pair

one action — align="end" (default)
destructive action alone — align="start"
cancel/submit pair — align="between"

Attributes

AttributeTypeDefaultDescription
(content) *——Action buttons (app-button, action-icon, etc.).
alignend | start | betweenendHorizontal placement of the buttons. end (default) = right, start = left, between = space-between.
stickybooleanfalsePin the bar to the viewport bottom with a top border and surface background. Use on forms taller than one screen.

When to use

Use it when

  • A form has action buttons at the end (submit, save, cancel, etc.).
  • A form is longer than one viewport and needs actions to stay visible (use sticky).
  • You need consistent button alignment across all forms (trailing, leading, or space-between).

Reach for something else when

  • Buttons are inside a modal or dialog. → AppModal or AppConfirmDialog own the footer logic
  • You need custom spacing or layout around buttons. → Use a raw flex/grid container for full control
  • Buttons are scattered throughout the form, not grouped at the end. → Use AppButton directly where needed