Skip to main content
← Back to Table of Contents

Summary

High-performance SVG circular progress indicator. Supports full-circle and semi-circle variants, rounded stroke caps, centered or side-aligned content, and advanced gradient strokes for both fill and track.

Basic usage

Standard circle

Semicircle with gradient

Card layout with side content


Configuration API

All methods accept Closure unless noted.

Real-world examples

Dashboard Completion Rate

Storage Usage with Fraction


Playground

/admin/flex-fields/progress-circle See Playground for setup.

CSS classes (reference)

Static rendering and responsive content

Ordinary circle and semicircle displays are server-rendered SVG and CSS, with no Alpine factory, event listeners, ResizeObserver or component JavaScript. Each instance owns its stylesheet consumer and unique SVG gradient references. CSS animates changed values when enabled; reduced-motion preferences disable the transition. A zero value displays only the track, without a colored rounded-cap dot. Ordinary progress card shells have a 24px radius; distribution cards use 16px. Side layouts reserve space for their text, wrap within the available width and mirror with surrounding RTL direction. Long center labels (over 22 characters) appear below the ring so they do not collide with its stroke. Semicircle and xs center labels also appear below. The above layout retains the value inside the ring. Paused displays use a clear icon without blurred digits behind it; assistive technology receives the paused state and current value. The accessible progressbar uses the configured numeric maximum and a clamped current value; custom displayValue supplies the spoken value text. Set an explicit aria-label through extraAttributes if a dashboard requires a different accessible name. Null means zero. Non-finite values, non-positive max, invalid enum choices and injected CSS declarations are rejected.

Distribution half gauge

variant('breakdown') draws multiple rounded segments across a 180-degree half ring. It is server-rendered SVG with a small optional preview controller and no chart library. Amounts determine the segment proportions; the center shows the first largest segment by default. Hovering an arc or legend entry previews its percentage and label immediately, with no server request. Leaving restores the default (or a pinned selection). Keyboard focus previews the same information. Click or tap pins a segment; Escape clears that selection. Only interactive breakdown instances load the preview module; ordinary rings and interactive(false) remain CSS/SVG-only. activeSegment() selects a different center channel by its zero-based index. displayValue() and label() can override the center text.
Segment color is optional and falls back to a repeating six-color palette. displayValue is optional and defaults to the numeric amount with grouping. An all-zero or empty dataset draws only the track and reports 0%. Zero amounts remain in the legend but do not produce colored arcs. Tiny positive segments keep finite geometry with appropriately reduced corner radii. This distribution chart uses labeled segments and legend buttons when interactive; interactive(false) exposes a static image and text legend. It does not imply completion progress. Its period chip and badge are display-only. Use showLegend(false) for a compact chart. Gauge widths are xs 144px, sm 200px, md 240px and lg 288px (bounded by the available width), and omit shell() to embed it into your own card. Channel proportions are calculated from their sum; value()/max() apply to the ordinary progress variants.

Small indicators in a table

size('xs') draws a 40px ring. Use showValue(false) for the ring alone, without removing its accessible numeric value. The ordinary ring sizes apply to circle and semicircle variants; breakdown gauges use the wider scales listed above.
ProgressCircle is a schema display, not a table Column class. Embed the same component inside a native Filament ViewColumn, so its SVG and per-cell asset consumer stay shared. The existing FLEX ProgressColumn is a linear indicator.
Create resources/views/tables/columns/completion-circle.blade.php:
This example expects a numeric percentage in completion. For counts, configure max() from the record and optionally displayValue() with your own short text. No copied SVG, inline stylesheet, or extra JavaScript is needed. Keep headings, card shells and long labels outside a compact table cell.
Last modified on October 16, 2026