Getting StartedInstall and bootstrap headless foundations 4
LayoutHeadless structural primitives for expandable and container patterns 6
OverlayHeadless modal and floating layer behavior 3
FeedbackHeadless notification and status communication patterns 5
FormHeadless input and selection contracts 17
UtilityReusable action, identity, and clipboard behavior 6
NavigationHeadless trails, trees, menus, and command surfaces 7

API reference

Headless progress spinner exposes one semantic root directive. SVG markup, track circles, indicator circles, and motion remain owner-authored.

Root directive

tngProgressSpinner adds role="progressbar", stable slot metadata, and normalized range attributes to your root element.

Root usage

html
<span tngProgressSpinner [min]="0" [max]="100" [value]="68" class="spinner-root" aria-label="Upload progress">
  <!-- owner-authored SVG -->
</span>
InputTypeDefaultNotes
minnumber0Lower bound for determinate values.
maxnumber100Upper bound, normalized so it never falls below min.
valuenumber0Determinate value, clamped between min and max.
indeterminatebooleanfalseSuppresses the value ARIA attributes and marks the root with data-indeterminate.

SVG foundation

The primitive does not create track or indicator circles for you. Owners are responsible for SVG markup, circumference math, dash offset, and any indeterminate arc animation.

Owner-authored SVG

html
<span tngProgressSpinner [value]="68" class="spinner-root" aria-label="Upload progress">
  <svg class="spinner-root__svg" viewBox="0 0 40 40">
    <circle class="spinner-root__track" cx="20" cy="20" r="18"></circle>
    <circle
      class="spinner-root__indicator"
      cx="20"
      cy="20"
      r="18"
      stroke-dasharray="113.097"
      [attr.stroke-dashoffset]="113.097 - (113.097 * 68) / 100"
    ></circle>
  </svg>
</span>

Accessibility contract

  • The root always exposes role="progressbar".
  • Determinate mode sets aria-valuemin, aria-valuemax, and aria-valuenow.
  • Indeterminate mode removes those value attributes, so provide a clear label through nearby text or aria-label.
  • Because the primitive renders no visible content, owners are fully responsible for contrast, size, and motion clarity.