md-progress-indicator spec card
Identity · when to use / when NOT · decision cues · behavioural contract · do/don't · anti-patterns · full API. Paste into your agent when you're implementing with this component.
How far along an activity is. Linear or circular, determinate or indeterminate, with the M3 Expressive travelling-wave treatment and a four-colour cycle.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '24px' }}>
<MdProgressIndicator value="60" label="Uploading"></MdProgressIndicator>
<MdProgressIndicator indeterminate label="Loading"></MdProgressIndicator>
</div>
<MdProgressIndicator variant="circular" value="60" label="Uploading"></MdProgressIndicator>
<MdProgressIndicator variant="circular" indeterminate label="Loading"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Uploading"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator>
Already installed? See the
Installation guide for one-time package setup
(core + tokens, fonts). Each tab below shows two patterns for using
md-progress-indicator in your project: Option A registers every AWC UI
component at once (simplest), Option B imports only this component for
tree-shake-friendly bundles.
<!-- ─── Option A: global registration (all components) ─── -->
<script type="module">
import '@awc-ui/core/define';
</script>
<!-- ─── Option B: single import (tree-shake only md-progress-indicator) ─── -->
<script type="module">
import '@awc-ui/core/components/md-progress-indicator';
</script>
<md-progress-indicator></md-progress-indicator>// ─── Option A: typed React wrapper (registers all components) ───
// Importing from '@awc-ui/react' calls defineCustomElements() as a
// side effect, so every md-* element becomes available in the browser.
import { MdProgressIndicator } from '@awc-ui/react';
export function Example() {
return <MdProgressIndicator></MdProgressIndicator>;
}
// ─── Option B: single import (tree-shake to only md-progress-indicator) ───
// Skip the wrapper and use the raw custom element. Smallest bundle,
// but you lose typed props/events on JSX.
import '@awc-ui/core/components/md-progress-indicator';
export function ExampleTreeShaken() {
return <md-progress-indicator></md-progress-indicator>;
}// ─── Option A: schema module (any md-* element accepted) ───
// Pair with `defineCustomElements(window)` in main.ts.
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@Component({
standalone: true,
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `<md-progress-indicator></md-progress-indicator>`,
})
export class ExampleComponent {}
// ─── Option B: typed directive (tree-shake friendly) ───
// Pair with `import '@awc-ui/core/components/md-progress-indicator'` in main.ts.
import { Component } from '@angular/core';
import { MdProgressIndicator } from '@awc-ui/angular';
@Component({
standalone: true,
imports: [MdProgressIndicator],
template: `<md-progress-indicator></md-progress-indicator>`,
})
export class ExampleTreeShakenComponent {}<!-- ─── Option A: typed Vue wrapper (registers all components) ─── -->
<script setup lang="ts">
import { MdProgressIndicator } from '@awc-ui/vue';
</script>
<template>
<MdProgressIndicator></MdProgressIndicator>
</template>
<!-- ─── Option B: single import (tree-shake to only md-progress-indicator) ─── -->
<script setup lang="ts">
import '@awc-ui/core/components/md-progress-indicator';
</script>
<template>
<md-progress-indicator></md-progress-indicator>
</template><!-- ─── Option A: global registration (done once in main entry) ─── -->
<!-- main.ts: -->
<!-- import { defineCustomElements } from '@awc-ui/svelte'; -->
<!-- defineCustomElements(window); -->
<md-progress-indicator></md-progress-indicator>
<!-- ─── Option B: single import (tree-shake to only md-progress-indicator) ─── -->
<script lang="ts">
import '@awc-ui/core/components/md-progress-indicator';
</script>
<md-progress-indicator></md-progress-indicator>| Situation | Use instead |
|---|---|
| Loading structured content whose shape you know | md-skeleton |
| A page-level refresh / brand loading moment | md-loading-indicator |
| A button working after a click | md-button with loading |
| Per-item progress inside a group | Nothing — M3: show the group total instead |
| A rating or score | md-rating |
| A value the user sets | md-slider |
variant picks the geometry. linear is the default and stretches to its
container’s inline size; circular is a fixed-size ring.
| Variant | Layout | Use for |
|---|---|---|
linear | Default. inline-size: 100%, 4px tall | A bar under a header, row, or app bar |
circular | 40px ring (48px when wave) | A compact spinner inline with content |
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Linear determinate"></md-progress-indicator>
<md-progress-indicator indeterminate label="Linear indeterminate"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Circular determinate"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Circular indeterminate"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="60" label="Linear determinate"></MdProgressIndicator>
<MdProgressIndicator indeterminate label="Linear indeterminate"></MdProgressIndicator>
</div>
<MdProgressIndicator variant="circular" value="60" label="Circular determinate"></MdProgressIndicator>
<MdProgressIndicator variant="circular" indeterminate label="Circular indeterminate"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Linear determinate"></md-progress-indicator>
<md-progress-indicator indeterminate label="Linear indeterminate"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Circular determinate"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Circular indeterminate"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Linear determinate"></md-progress-indicator>
<md-progress-indicator indeterminate label="Linear indeterminate"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Circular determinate"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Circular indeterminate"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Linear determinate"></md-progress-indicator>
<md-progress-indicator indeterminate label="Linear indeterminate"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Circular determinate"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate label="Circular indeterminate"></md-progress-indicator>value is interpreted against max (default 100). Pass the raw count
with a matching max rather than pre-computing a percentage — it avoids
rounding drift.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator value="100" label="100 percent"></md-progress-indicator>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="0" label="0 percent"></MdProgressIndicator>
<MdProgressIndicator value="25" label="25 percent"></MdProgressIndicator>
<MdProgressIndicator value="50" label="50 percent"></MdProgressIndicator>
<MdProgressIndicator value="75" label="75 percent"></MdProgressIndicator>
<MdProgressIndicator value="100" label="100 percent"></MdProgressIndicator>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator value="100" label="100 percent"></md-progress-indicator>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator value="100" label="100 percent"></md-progress-indicator>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator value="100" label="100 percent"></md-progress-indicator>
</div><!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="100 percent"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<MdProgressIndicator variant="circular" value="0" label="0 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="25" label="25 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="50" label="50 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="75" label="75 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="100" label="100 percent"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<md-progress-indicator variant="circular" value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="100 percent"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<md-progress-indicator variant="circular" value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="100 percent"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" value="0" label="0 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="100 percent"></md-progress-indicator>The small dot at the track’s end is the stop indicator. M3 says keep it unless the track has ≥3:1 contrast with the surrounding surface.
indeterminate is for a wait whose duration you cannot measure. M3’s advice:
prefer a circular indeterminate indicator for waits under 5 seconds.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px' }}>
<MdProgressIndicator indeterminate label="Loading"></MdProgressIndicator>
</div>
<MdProgressIndicator variant="circular" indeterminate label="Loading"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator indeterminate label="Loading"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate label="Loading"></md-progress-indicator>thickness is in dp and defaults to 4. It applies to both variants; for a
circular indicator scale it with size (a good rule of thumb is
thickness ≈ size / 10).
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator value="60" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator value="60" thickness="8" label="thickness 8"></md-progress-indicator>
<md-progress-indicator value="60" thickness="12" label="thickness 12"></md-progress-indicator>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="60" thickness="2" label="thickness 2"></MdProgressIndicator>
<MdProgressIndicator value="60" thickness="4" label="thickness 4"></MdProgressIndicator>
<MdProgressIndicator value="60" thickness="8" label="thickness 8"></MdProgressIndicator>
<MdProgressIndicator value="60" thickness="12" label="thickness 12"></MdProgressIndicator>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator value="60" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator value="60" thickness="8" label="thickness 8"></md-progress-indicator>
<md-progress-indicator value="60" thickness="12" label="thickness 12"></md-progress-indicator>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator value="60" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator value="60" thickness="8" label="thickness 8"></md-progress-indicator>
<md-progress-indicator value="60" thickness="12" label="thickness 12"></md-progress-indicator>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator value="60" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator value="60" thickness="8" label="thickness 8"></md-progress-indicator>
<md-progress-indicator value="60" thickness="12" label="thickness 12"></md-progress-indicator>
</div><!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" value="60" size="48" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="6" label="thickness 6"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="8" label="thickness 8"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<MdProgressIndicator variant="circular" value="60" size="48" thickness="2" label="thickness 2"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="48" thickness="4" label="thickness 4"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="48" thickness="6" label="thickness 6"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="48" thickness="8" label="thickness 8"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<md-progress-indicator variant="circular" value="60" size="48" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="6" label="thickness 6"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="8" label="thickness 8"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<md-progress-indicator variant="circular" value="60" size="48" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="6" label="thickness 6"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="8" label="thickness 8"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" value="60" size="48" thickness="2" label="thickness 2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="thickness 4"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="6" label="thickness 6"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="8" label="thickness 8"></md-progress-indicator>size is the ring diameter in dp. M3 specifies a range of 24px minimum to
240px maximum and the component clamps to it — smaller values snap up, larger
snap down.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" value="60" size="24" thickness="2" label="24px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="32" thickness="3" label="32px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="40" thickness="4" label="40px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="48px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="64" thickness="6" label="64px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="96" thickness="10" label="96px"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<MdProgressIndicator variant="circular" value="60" size="24" thickness="2" label="24px"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="32" thickness="3" label="32px"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="40" thickness="4" label="40px"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="48" thickness="4" label="48px"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="64" thickness="6" label="64px"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" size="96" thickness="10" label="96px"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<md-progress-indicator variant="circular" value="60" size="24" thickness="2" label="24px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="32" thickness="3" label="32px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="40" thickness="4" label="40px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="48px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="64" thickness="6" label="64px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="96" thickness="10" label="96px"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<md-progress-indicator variant="circular" value="60" size="24" thickness="2" label="24px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="32" thickness="3" label="32px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="40" thickness="4" label="40px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="48px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="64" thickness="6" label="64px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="96" thickness="10" label="96px"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" value="60" size="24" thickness="2" label="24px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="32" thickness="3" label="32px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="40" thickness="4" label="40px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="48" thickness="4" label="48px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="64" thickness="6" label="64px"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" size="96" thickness="10" label="96px"></md-progress-indicator>A circular indicator leaves its centre empty, so at the larger sizes an icon or a count can sit inside it. Position it yourself; the component does not own that slot.
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="72" size="64" label="Uploading"></md-progress-indicator>
<span class="material-symbols-outlined" aria-hidden="true" style="position: absolute; font-size: 24px; color: var(--md-sys-color-primary);">cloud_upload</span>
</div>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="40" size="64" label="40 percent"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; font: 500 14px system-ui, sans-serif; color: var(--md-sys-color-on-surface);">40%</span>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ position: 'relative', display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}>
<MdProgressIndicator variant="circular" value="72" size="64" label="Uploading"></MdProgressIndicator>
<span className="material-symbols-outlined" aria-hidden="true" style={{ position: 'absolute', fontSize: '24px', color: 'var(--md-sys-color-primary)' }}>cloud_upload</span>
</div>
<div style={{ position: 'relative', display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}>
<MdProgressIndicator variant="circular" value="40" size="64" label="40 percent"></MdProgressIndicator>
<span aria-hidden="true" style={{ position: 'absolute', font: '500 14px system-ui, sans-serif', color: 'var(--md-sys-color-on-surface)' }}>40%</span>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="72" size="64" label="Uploading"></md-progress-indicator>
<span class="material-symbols-outlined" aria-hidden="true" style="position: absolute; font-size: 24px; color: var(--md-sys-color-primary);">cloud_upload</span>
</div>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="40" size="64" label="40 percent"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; font: 500 14px system-ui, sans-serif; color: var(--md-sys-color-on-surface);">40%</span>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="72" size="64" label="Uploading"></md-progress-indicator>
<span class="material-symbols-outlined" aria-hidden="true" style="position: absolute; font-size: 24px; color: var(--md-sys-color-primary);">cloud_upload</span>
</div>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="40" size="64" label="40 percent"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; font: 500 14px system-ui, sans-serif; color: var(--md-sys-color-on-surface);">40%</span>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="72" size="64" label="Uploading"></md-progress-indicator>
<span class="material-symbols-outlined" aria-hidden="true" style="position: absolute; font-size: 24px; color: var(--md-sys-color-primary);">cloud_upload</span>
</div>
<div style="position: relative; display: inline-flex; align-items: center; justify-content: center;">
<md-progress-indicator variant="circular" value="40" size="64" label="40 percent"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; font: 500 14px system-ui, sans-serif; color: var(--md-sys-color-on-surface);">40%</span>
</div>wave replaces the flat active indicator with a travelling wave. It works on
both variants, determinate and indeterminate. A determinate indicator is flat at
exactly 0 and wavy for every value above it; on the linear variant the
amplitude is additionally scaled down while the fill is shorter than one
wavelength, so the first few percent read as a growing dot before the wave
emerges. There is no flatten at the top end — at 100% it is still wavy, and
the completion animation collapses the wave shape itself rather than a flat
line.
wave-amplitude, wave-length and wave-speed all default to 0 = auto
(linear: amplitude 3px, wavelength 40px; circular: amplitude 1.6px, wavelength
15px; speed tracks the wavelength at roughly one wave per second).
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator wave value="60" label="Wave default"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wave thick"></md-progress-indicator>
<md-progress-indicator wave value="0" label="Wave at zero"></md-progress-indicator>
<md-progress-indicator wave value="6" label="Wave near zero"></md-progress-indicator>
<md-progress-indicator wave value="100" label="Wave at 100 percent"></md-progress-indicator>
<md-progress-indicator wave indeterminate label="Wave indeterminate"></md-progress-indicator>
<md-progress-indicator wave value="50" wave-amplitude="5" wave-length="60" wave-speed="120" label="Wave custom"></md-progress-indicator>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '24px' }}>
<MdProgressIndicator wave value="60" label="Wave default"></MdProgressIndicator>
<MdProgressIndicator wave value="60" thickness="8" label="Wave thick"></MdProgressIndicator>
<MdProgressIndicator wave value="0" label="Wave at zero"></MdProgressIndicator>
<MdProgressIndicator wave value="6" label="Wave near zero"></MdProgressIndicator>
<MdProgressIndicator wave value="100" label="Wave at 100 percent"></MdProgressIndicator>
<MdProgressIndicator wave indeterminate label="Wave indeterminate"></MdProgressIndicator>
<MdProgressIndicator wave value="50" waveAmplitude="5" waveLength="60" waveSpeed="120" label="Wave custom"></MdProgressIndicator>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator wave value="60" label="Wave default"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wave thick"></md-progress-indicator>
<md-progress-indicator wave value="0" label="Wave at zero"></md-progress-indicator>
<md-progress-indicator wave value="6" label="Wave near zero"></md-progress-indicator>
<md-progress-indicator wave value="100" label="Wave at 100 percent"></md-progress-indicator>
<md-progress-indicator wave indeterminate label="Wave indeterminate"></md-progress-indicator>
<md-progress-indicator wave value="50" wave-amplitude="5" wave-length="60" wave-speed="120" label="Wave custom"></md-progress-indicator>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator wave value="60" label="Wave default"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wave thick"></md-progress-indicator>
<md-progress-indicator wave value="0" label="Wave at zero"></md-progress-indicator>
<md-progress-indicator wave value="6" label="Wave near zero"></md-progress-indicator>
<md-progress-indicator wave value="100" label="Wave at 100 percent"></md-progress-indicator>
<md-progress-indicator wave indeterminate label="Wave indeterminate"></md-progress-indicator>
<md-progress-indicator wave value="50" wave-amplitude="5" wave-length="60" wave-speed="120" label="Wave custom"></md-progress-indicator>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 24px;">
<md-progress-indicator wave value="60" label="Wave default"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wave thick"></md-progress-indicator>
<md-progress-indicator wave value="0" label="Wave at zero"></md-progress-indicator>
<md-progress-indicator wave value="6" label="Wave near zero"></md-progress-indicator>
<md-progress-indicator wave value="100" label="Wave at 100 percent"></md-progress-indicator>
<md-progress-indicator wave indeterminate label="Wave indeterminate"></md-progress-indicator>
<md-progress-indicator wave value="50" wave-amplitude="5" wave-length="60" wave-speed="120" label="Wave custom"></md-progress-indicator>
</div><!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" wave value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" size="72" thickness="6" label="72px"></md-progress-indicator>
<md-progress-indicator variant="circular" wave indeterminate label="Loading"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<MdProgressIndicator variant="circular" wave value="25" label="25 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" wave value="50" label="50 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" wave value="75" label="75 percent"></MdProgressIndicator>
<MdProgressIndicator variant="circular" wave value="50" size="72" thickness="6" label="72px"></MdProgressIndicator>
<MdProgressIndicator variant="circular" wave indeterminate label="Loading"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<md-progress-indicator variant="circular" wave value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" size="72" thickness="6" label="72px"></md-progress-indicator>
<md-progress-indicator variant="circular" wave indeterminate label="Loading"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<md-progress-indicator variant="circular" wave value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" size="72" thickness="6" label="72px"></md-progress-indicator>
<md-progress-indicator variant="circular" wave indeterminate label="Loading"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" wave value="25" label="25 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" label="50 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="75" label="75 percent"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="50" size="72" thickness="6" label="72px"></md-progress-indicator>
<md-progress-indicator variant="circular" wave indeterminate label="Loading"></md-progress-indicator><!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="8" label="Flat"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wavy"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Flat"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="60" label="Wavy"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="60" thickness="8" label="Flat"></MdProgressIndicator>
<MdProgressIndicator wave value="60" thickness="8" label="Wavy"></MdProgressIndicator>
</div>
<MdProgressIndicator variant="circular" value="60" label="Flat"></MdProgressIndicator>
<MdProgressIndicator variant="circular" wave value="60" label="Wavy"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="8" label="Flat"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wavy"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Flat"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="60" label="Wavy"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="8" label="Flat"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wavy"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Flat"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="60" label="Wavy"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="8" label="Flat"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="8" label="Wavy"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" value="60" label="Flat"></md-progress-indicator>
<md-progress-indicator variant="circular" wave value="60" label="Wavy"></md-progress-indicator>four-color cycles the active indicator through
primary → primary-container → tertiary → tertiary-container.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" indeterminate label="Default"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate four-color label="Four colour"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<MdProgressIndicator variant="circular" indeterminate label="Default"></MdProgressIndicator>
<MdProgressIndicator variant="circular" indeterminate fourColor label="Four colour"></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<md-progress-indicator variant="circular" indeterminate label="Default"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate four-color label="Four colour"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<md-progress-indicator variant="circular" indeterminate label="Default"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate four-color label="Four colour"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<md-progress-indicator variant="circular" indeterminate label="Default"></md-progress-indicator>
<md-progress-indicator variant="circular" indeterminate four-color label="Four colour"></md-progress-indicator>Override the palette with --md-progress-indicator-four-color-1 … -4.
complete is a state you set; it plays M3’s “closing TV” completion animation
and then fires mdComplete. It is a sticky one-shot — the component never
resets it internally, so to replay it you must recreate the element. It is a
no-op on an indeterminate indicator.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-progress-indicator value="100" thickness="10" label="Linear flat" complete></md-progress-indicator>
<md-progress-indicator value="100" thickness="10" wave label="Linear wave" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="Circular flat" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" wave label="Circular wave" complete></md-progress-indicator>
<script type="module">
var stage = document.querySelector('[data-stage]');
var runBtn = document.querySelector('[data-completion-run]');
if (!stage || !runBtn) return;
var tpl = stage.innerHTML;
var timer = 0;
function run() {
clearInterval(timer);
// 'complete' never resets itself, so each run starts from fresh nodes.
stage.innerHTML = tpl;
var bars = [].slice.call(stage.querySelectorAll('md-progress-indicator'));
var v = 0;
timer = setInterval(function () {
v = Math.min(100, v + 2);
bars.forEach(function (bar) { bar.value = v; });
if (v >= 100) {
clearInterval(timer);
bars.forEach(function (bar) { bar.complete = true; });
}
}, 50);
}
runBtn.addEventListener('click', run);
</script>import { useEffect } from 'react';
import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
useEffect(() => {
var stage = document.querySelector('[data-stage]');
var runBtn = document.querySelector('[data-completion-run]');
if (!stage || !runBtn) return;
var tpl = stage.innerHTML;
var timer = 0;
function run() {
clearInterval(timer);
// 'complete' never resets itself, so each run starts from fresh nodes.
stage.innerHTML = tpl;
var bars = [].slice.call(stage.querySelectorAll('md-progress-indicator'));
var v = 0;
timer = setInterval(function () {
v = Math.min(100, v + 2);
bars.forEach(function (bar) { bar.value = v; });
if (v >= 100) {
clearInterval(timer);
bars.forEach(function (bar) { bar.complete = true; });
}
}, 50);
}
runBtn.addEventListener('click', run);
}, []);
return (
<>
<MdProgressIndicator value="100" thickness="10" label="Linear flat" complete></MdProgressIndicator>
<MdProgressIndicator value="100" thickness="10" wave label="Linear wave" complete></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="100" label="Circular flat" complete></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="100" wave label="Circular wave" complete></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
// app.component.ts
import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';
@Component({
selector: 'app-demo',
templateUrl: './app.component.html',
})
export class DemoComponent implements AfterViewInit {
ngAfterViewInit() {
var stage = document.querySelector('[data-stage]');
var runBtn = document.querySelector('[data-completion-run]');
if (!stage || !runBtn) return;
var tpl = stage.innerHTML;
var timer = 0;
function run() {
clearInterval(timer);
// 'complete' never resets itself, so each run starts from fresh nodes.
stage.innerHTML = tpl;
var bars = [].slice.call(stage.querySelectorAll('md-progress-indicator'));
var v = 0;
timer = setInterval(function () {
v = Math.min(100, v + 2);
bars.forEach(function (bar) { bar.value = v; });
if (v >= 100) {
clearInterval(timer);
bars.forEach(function (bar) { bar.complete = true; });
}
}, 50);
}
runBtn.addEventListener('click', run);
}
}
<!-- app.component.html -->
<md-progress-indicator value="100" thickness="10" label="Linear flat" complete></md-progress-indicator>
<md-progress-indicator value="100" thickness="10" wave label="Linear wave" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="Circular flat" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" wave label="Circular wave" complete></md-progress-indicator><script setup>
import { onMounted } from 'vue';
import '@awc-ui/core/define';
onMounted(() => {
var stage = document.querySelector('[data-stage]');
var runBtn = document.querySelector('[data-completion-run]');
if (!stage || !runBtn) return;
var tpl = stage.innerHTML;
var timer = 0;
function run() {
clearInterval(timer);
// 'complete' never resets itself, so each run starts from fresh nodes.
stage.innerHTML = tpl;
var bars = [].slice.call(stage.querySelectorAll('md-progress-indicator'));
var v = 0;
timer = setInterval(function () {
v = Math.min(100, v + 2);
bars.forEach(function (bar) { bar.value = v; });
if (v >= 100) {
clearInterval(timer);
bars.forEach(function (bar) { bar.complete = true; });
}
}, 50);
}
runBtn.addEventListener('click', run);
});
</script>
<template>
<md-progress-indicator value="100" thickness="10" label="Linear flat" complete></md-progress-indicator>
<md-progress-indicator value="100" thickness="10" wave label="Linear wave" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="Circular flat" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" wave label="Circular wave" complete></md-progress-indicator>
</template><script>
import { onMount } from 'svelte';
import '@awc-ui/core/define';
onMount(() => {
var stage = document.querySelector('[data-stage]');
var runBtn = document.querySelector('[data-completion-run]');
if (!stage || !runBtn) return;
var tpl = stage.innerHTML;
var timer = 0;
function run() {
clearInterval(timer);
// 'complete' never resets itself, so each run starts from fresh nodes.
stage.innerHTML = tpl;
var bars = [].slice.call(stage.querySelectorAll('md-progress-indicator'));
var v = 0;
timer = setInterval(function () {
v = Math.min(100, v + 2);
bars.forEach(function (bar) { bar.value = v; });
if (v >= 100) {
clearInterval(timer);
bars.forEach(function (bar) { bar.complete = true; });
}
}, 50);
}
runBtn.addEventListener('click', run);
});
</script>
<md-progress-indicator value="100" thickness="10" label="Linear flat" complete></md-progress-indicator>
<md-progress-indicator value="100" thickness="10" wave label="Linear wave" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" label="Circular flat" complete></md-progress-indicator>
<md-progress-indicator variant="circular" value="100" wave label="Circular wave" complete></md-progress-indicator>Press it twice and note what the button does: it rebuilds the indicators
before each run. complete never resets itself, so assigning false after it
has fired is a no-op — replaying means new element nodes, which is exactly what
the Storybook story’s Reset does.
<md-progress-indicator id="up" value="0" max="100" label="Uploading"></md-progress-indicator>
<script type="module"> const up = document.getElementById('up'); xhr.upload.onprogress = (e) => { up.value = e.loaded; up.max = e.total; }; up.addEventListener('mdComplete', () => up.remove());</script>| Event | Cancelable | Detail | Fires |
|---|---|---|---|
mdComplete | no | void | After the completion animation finishes |
<md-progress-indicator id="job" value="0" max="12" label="Importing 12 files"></md-progress-indicator>
<script type="module">
const job = document.getElementById('job');
// mdComplete does NOT fire at value === max — set `complete` to start the
// closing animation, and the event lands when that animation has finished.
onFileImported((done) => {
job.value = done;
if (done >= job.max) job.complete = true;
});
job.addEventListener('mdComplete', () => {
job.remove();
showResult();
});
</script>import { MdProgressIndicator } from '@awc-ui/react';
export function ImportProgress({ done, total }: { done: number; total: number }) {
return (
<MdProgressIndicator
value={done}
max={total}
label={`Importing ${total} files`}
complete={done >= total}
onMdComplete={() => showResult()}
/>
);
}import { Component, Input } from '@angular/core';
import { showResult } from './result';
@Component({
selector: 'app-import-progress',
template: `
<md-progress-indicator
[attr.value]="done"
[attr.max]="total"
[attr.label]="'Importing ' + total + ' files'"
[attr.complete]="done >= total ? '' : null"
(mdComplete)="onComplete()"
></md-progress-indicator>
`,
})
export class ImportProgressComponent {
@Input() done = 0;
@Input() total = 0;
onComplete() {
showResult();
}
}<script setup lang="ts">
const props = defineProps<{ done: number; total: number }>();
function onComplete() {
showResult();
}
</script>
<template>
<md-progress-indicator
:value="props.done"
:max="props.total"
:label="'Importing ' + props.total + ' files'"
:complete="props.done >= props.total"
@mdComplete="onComplete"
/>
</template><script lang="ts">
export let done = 0;
export let total = 0;
function onComplete() {
showResult();
}
</script>
<md-progress-indicator
value={done}
max={total}
label={'Importing ' + total + ' files'}
complete={done >= total}
on:mdComplete={onComplete}
/>| Property | Attribute | Type | Default | Reflects |
|---|---|---|---|---|
variant | variant | 'circular' | 'linear' | 'linear' | — |
value | value | number | 0 | — |
max | max | number | 100 | — |
indeterminate | indeterminate | boolean | false | Yes |
thickness | thickness | number | 4 | — |
wave | wave | boolean | false | Yes |
waveAmplitude | wave-amplitude | number | 0 | — |
waveLength | wave-length | number | 0 | — |
waveSpeed | wave-speed | number | 0 | — |
size | size | number | 0 | — |
fourColor | four-color | boolean | false | Yes |
label | label | string | 'Progress' | — |
complete | complete | boolean | false | — |
density | density | 0 | -1 | -2 | -3 | -4 | 0 | Yes |
Override on the host element for per-instance theming:
| Property | Description |
|---|---|
--md-progress-indicator-active-indicator-color | Active indicator fill |
--md-progress-indicator-active-indicator-shape | Active indicator corner radius |
--md-progress-indicator-track-color | Track background |
--md-progress-indicator-track-shape | Track corner radius |
--md-progress-indicator-stop-indicator-color | Stop dot color |
--md-progress-indicator-stop-indicator-shape | Stop dot corner radius |
--md-progress-indicator-stop-indicator-size | Stop dot diameter |
--md-progress-indicator-stop-indicator-trailing-space | Space past the stop dot to the trailing edge (default 0) |
--md-progress-indicator-track-active-indicator-space | Gap between track and active indicator (default 4px) |
--md-progress-indicator-four-color-1 | — |
--md-progress-indicator-four-color-2 | — |
--md-progress-indicator-four-color-3 | — |
--md-progress-indicator-four-color-4 | — |
Style internal elements through shadow DOM with ::part():
| Part | Description |
|---|---|
track | Background track (rect or SVG circle/path) |
stop-indicator | Stop dot at track end (linear determinate) |
active-indicator | Active progress fill |
progressbar. label is the accessible name and defaults
to the English "Progress" — always set something specific (“Uploading
invoice.pdf” beats “Progress”).aria-valuenow / aria-valuemin /
aria-valuemax; indeterminate ones drop aria-valuenow entirely, because the
progress is genuinely unknown.wave indicators animate continuously. Honour
prefers-reduced-motion; the component flattens the wave when it is set.Inspect these three in the accessibility tree: the first announces “Uploading invoice.pdf, 42%”, the second announces its name with no value at all, and the third is the mistake — it inherits the English default and announces “Progress”, which tells a screen-reader user nothing about what is progressing.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">named</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100" label="Uploading invoice.pdf"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unknown</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" indeterminate label="Checking for updates"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">—</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unnamed</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '14px 16px', alignItems: 'center', inlineSize: '100%', maxInlineSize: '460px' }}>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>named</span>
<div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
<MdProgressIndicator style={{ flex: '1 1 auto' }} value="42" max="100" label="Uploading invoice.pdf"></MdProgressIndicator>
<span aria-hidden="true" style={{ font: '500 0.8125rem system-ui, sans-serif', color: 'var(--md-sys-color-on-surface-variant)' }}>42%</span>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>unknown</span>
<div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
<MdProgressIndicator style={{ flex: '1 1 auto' }} indeterminate label="Checking for updates"></MdProgressIndicator>
<span aria-hidden="true" style={{ font: '500 0.8125rem system-ui, sans-serif', color: 'var(--md-sys-color-on-surface-variant)' }}>—</span>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>unnamed</span>
<div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
<MdProgressIndicator style={{ flex: '1 1 auto' }} value="42" max="100"></MdProgressIndicator>
<span aria-hidden="true" style={{ font: '500 0.8125rem system-ui, sans-serif', color: 'var(--md-sys-color-on-surface-variant)' }}>42%</span>
</div>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">named</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100" label="Uploading invoice.pdf"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unknown</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" indeterminate label="Checking for updates"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">—</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unnamed</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">named</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100" label="Uploading invoice.pdf"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unknown</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" indeterminate label="Checking for updates"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">—</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unnamed</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">named</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100" label="Uploading invoice.pdf"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unknown</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" indeterminate label="Checking for updates"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">—</span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">unnamed</span>
<div style="display: flex; align-items: center; gap: 12px;">
<md-progress-indicator style="flex: 1 1 auto;" value="42" max="100"></md-progress-indicator>
<span aria-hidden="true" style="font: 500 0.8125rem system-ui, sans-serif; color: var(--md-sys-color-on-surface-variant);">42%</span>
</div>
</div>The percentage beside each bar is aria-hidden on purpose: the indicator
already exposes aria-valuenow, so an unhidden copy would be announced twice.
It is there for the sighted reader who cannot judge a bar by eye.
RTL — nothing to configure. The linear track fills from the reading start
and mirrors under dir="rtl"; the wavy path is redrawn from the right edge in
JS, and the flat track, the fill and the stop dot flip through CSS logical
properties. Set the direction on an ancestor and the same markup works both
ways. See RTL.
<div dir="rtl"> <md-progress-indicator value="60" label="Uploading"></md-progress-indicator></div><!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">ltr</span>
<div dir="ltr" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, ltr"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, ltr"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, ltr"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">rtl</span>
<div dir="rtl" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, rtl"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, rtl"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, rtl"></md-progress-indicator>
</div>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '14px 16px', alignItems: 'center', inlineSize: '100%', maxInlineSize: '460px' }}>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>ltr</span>
<div dir="ltr" style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>
<MdProgressIndicator value="60" label="60 percent, ltr"></MdProgressIndicator>
<MdProgressIndicator wave value="60" label="60 percent wavy, ltr"></MdProgressIndicator>
<MdProgressIndicator indeterminate label="Loading, ltr"></MdProgressIndicator>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>rtl</span>
<div dir="rtl" style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>
<MdProgressIndicator value="60" label="60 percent, rtl"></MdProgressIndicator>
<MdProgressIndicator wave value="60" label="60 percent wavy, rtl"></MdProgressIndicator>
<MdProgressIndicator indeterminate label="Loading, rtl"></MdProgressIndicator>
</div>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">ltr</span>
<div dir="ltr" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, ltr"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, ltr"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, ltr"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">rtl</span>
<div dir="rtl" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, rtl"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, rtl"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, rtl"></md-progress-indicator>
</div>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">ltr</span>
<div dir="ltr" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, ltr"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, ltr"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, ltr"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">rtl</span>
<div dir="rtl" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, rtl"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, rtl"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, rtl"></md-progress-indicator>
</div>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">ltr</span>
<div dir="ltr" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, ltr"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, ltr"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, ltr"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">rtl</span>
<div dir="rtl" style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, rtl"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, rtl"></md-progress-indicator>
<md-progress-indicator indeterminate label="Loading, rtl"></md-progress-indicator>
</div>
</div>The stop dot is positioned with inset-inline-end, so it follows the reading
direction along with the fill. Under dir="rtl" the bar fills from the right
and the stop dot sits at the left — the dot always marks the end the fill is
heading toward, not a fixed side of the screen.
That matters the moment you absolutely position something of your own beside the
bar — a target marker, a threshold tick, a label. right: 0 pins it to the
physical right, which in RTL is where the bar starts; inset-inline-end: 0
puts it where the stop dot already is. Both rows below are dir="rtl" and
differ only in that one declaration.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div dir="rtl" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">right</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker pinned right"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; right: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-error);"></span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">logical</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker on the trailing edge"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; inset-inline-end: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-primary);"></span>
</div>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div dir="rtl" style={{ display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '14px 16px', alignItems: 'center', inlineSize: '100%', maxInlineSize: '460px' }}>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>right</span>
<div style={{ position: 'relative' }}>
<MdProgressIndicator value="60" thickness="10" label="60 percent, marker pinned right"></MdProgressIndicator>
<span aria-hidden="true" style={{ position: 'absolute', top: '50%', right: '0', transform: 'translateY(-50%)', inlineSize: '10px', blockSize: '10px', borderRadius: '50%', background: 'var(--md-sys-color-error)' }}></span>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>logical</span>
<div style={{ position: 'relative' }}>
<MdProgressIndicator value="60" thickness="10" label="60 percent, marker on the trailing edge"></MdProgressIndicator>
<span aria-hidden="true" style={{ position: 'absolute', top: '50%', insetInlineEnd: '0', transform: 'translateY(-50%)', inlineSize: '10px', blockSize: '10px', borderRadius: '50%', background: 'var(--md-sys-color-primary)' }}></span>
</div>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div dir="rtl" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">right</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker pinned right"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; right: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-error);"></span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">logical</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker on the trailing edge"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; inset-inline-end: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-primary);"></span>
</div>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div dir="rtl" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">right</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker pinned right"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; right: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-error);"></span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">logical</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker on the trailing edge"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; inset-inline-end: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-primary);"></span>
</div>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div dir="rtl" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">right</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker pinned right"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; right: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-error);"></span>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">logical</span>
<div style="position: relative;">
<md-progress-indicator value="60" thickness="10" label="60 percent, marker on the trailing edge"></md-progress-indicator>
<span aria-hidden="true" style="position: absolute; top: 50%; inset-inline-end: 0; transform: translateY(-50%); inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--md-sys-color-primary);"></span>
</div>
</div>density="-1…-4" thins the linear track 4 → 3.5 → 3 → 2.5 → 2px and shrinks
the circular ring 40 → 37 → 34 → 31 → 28px. It moves the stop dot and the
track↔fill gap by the same rung, so the whole bar stays in proportion.
Linear
Linear, wave
Circular
Circular, wave
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<p style={{ margin: '0 0 8px', font: '500 12px/1.2 system-ui, sans-serif', letterSpacing: '.04em', textTransform: 'uppercase', color: 'var(--md-sys-color-on-surface-variant)' }}>Linear</p>
<div style={{ display: 'flex', gap: '20px', alignItems: 'center', flexWrap: 'wrap', marginBlockEnd: '24px' }}>
<div style={{ display: 'flex', flexDirection: 'column', gap: '12px', inlineSize: '100%', maxInlineSize: '360px' }}>
<MdProgressIndicator value="60" density="0" label="60 percent, rung 0"></MdProgressIndicator>
<MdProgressIndicator value="60" density="-1" label="60 percent, rung -1"></MdProgressIndicator>
<MdProgressIndicator value="60" density="-2" label="60 percent, rung -2"></MdProgressIndicator>
<MdProgressIndicator value="60" density="-3" label="60 percent, rung -3"></MdProgressIndicator>
<MdProgressIndicator value="60" density="-4" label="60 percent, rung -4"></MdProgressIndicator>
</div>
</div>
<p style={{ margin: '0 0 8px', font: '500 12px/1.2 system-ui, sans-serif', letterSpacing: '.04em', textTransform: 'uppercase', color: 'var(--md-sys-color-on-surface-variant)' }}>Linear, wave</p>
<div style={{ display: 'flex', gap: '20px', alignItems: 'center', flexWrap: 'wrap', marginBlockEnd: '24px' }}>
<div style={{ display: 'flex', flexDirection: 'column', gap: '12px', inlineSize: '100%', maxInlineSize: '360px' }}>
<MdProgressIndicator value="60" wave density="0" label="60 percent, rung 0"></MdProgressIndicator>
<MdProgressIndicator value="60" wave density="-1" label="60 percent, rung -1"></MdProgressIndicator>
<MdProgressIndicator value="60" wave density="-2" label="60 percent, rung -2"></MdProgressIndicator>
<MdProgressIndicator value="60" wave density="-3" label="60 percent, rung -3"></MdProgressIndicator>
<MdProgressIndicator value="60" wave density="-4" label="60 percent, rung -4"></MdProgressIndicator>
</div>
</div>
<p style={{ margin: '0 0 8px', font: '500 12px/1.2 system-ui, sans-serif', letterSpacing: '.04em', textTransform: 'uppercase', color: 'var(--md-sys-color-on-surface-variant)' }}>Circular</p>
<div style={{ display: 'flex', gap: '20px', alignItems: 'center', flexWrap: 'wrap', marginBlockEnd: '24px' }}>
<MdProgressIndicator variant="circular" value="60" density="0" label="60 percent, rung 0"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" density="-1" label="60 percent, rung -1"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" density="-2" label="60 percent, rung -2"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" density="-3" label="60 percent, rung -3"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" density="-4" label="60 percent, rung -4"></MdProgressIndicator>
</div>
<p style={{ margin: '0 0 8px', font: '500 12px/1.2 system-ui, sans-serif', letterSpacing: '.04em', textTransform: 'uppercase', color: 'var(--md-sys-color-on-surface-variant)' }}>Circular, wave</p>
<div style={{ display: 'flex', gap: '20px', alignItems: 'center', flexWrap: 'wrap', marginBlockEnd: '24px' }}>
<MdProgressIndicator variant="circular" value="60" wave density="0" label="60 percent, rung 0"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" wave density="-1" label="60 percent, rung -1"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" wave density="-2" label="60 percent, rung -2"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" wave density="-3" label="60 percent, rung -3"></MdProgressIndicator>
<MdProgressIndicator variant="circular" value="60" wave density="-4" label="60 percent, rung -4"></MdProgressIndicator>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Linear, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<div style="display: flex; flex-direction: column; gap: 12px; inline-size: 100%; max-inline-size: 360px;">
<md-progress-indicator value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>
<p style="margin: 0 0 8px; font: 500 12px/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; color: var(--md-sys-color-on-surface-variant);">Circular, wave</p>
<div style="display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin-block-end: 24px;">
<md-progress-indicator variant="circular" value="60" wave density="0" label="60 percent, rung 0"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-1" label="60 percent, rung -1"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-2" label="60 percent, rung -2"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-3" label="60 percent, rung -3"></md-progress-indicator>
<md-progress-indicator variant="circular" value="60" wave density="-4" label="60 percent, rung -4"></md-progress-indicator>
</div>Density and direction are independent signals: one comes from
--md-sys-density-scale (set by a data-density ancestor, or by a local
density rung of -1…-4), the other from dir. They compose without any
extra wiring, and a local rung still wins over the inherited one.
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div dir="rtl" data-density="-2" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">inherit</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, inherited rung -2"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, inherited rung -2"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">-4</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" density="-4" label="60 percent, local rung -4"></md-progress-indicator>
<md-progress-indicator wave value="60" density="-4" label="60 percent wavy, local rung -4"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">opt out</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" thickness="6" label="60 percent, thickness pinned at 6"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="6" label="60 percent wavy, thickness pinned at 6"></md-progress-indicator>
</div>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div dir="rtl" data-density="-2" style={{ display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '14px 16px', alignItems: 'center', inlineSize: '100%', maxInlineSize: '460px' }}>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>inherit</span>
<div style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>
<MdProgressIndicator value="60" label="60 percent, inherited rung -2"></MdProgressIndicator>
<MdProgressIndicator wave value="60" label="60 percent wavy, inherited rung -2"></MdProgressIndicator>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>-4</span>
<div style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>
<MdProgressIndicator value="60" density="-4" label="60 percent, local rung -4"></MdProgressIndicator>
<MdProgressIndicator wave value="60" density="-4" label="60 percent wavy, local rung -4"></MdProgressIndicator>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace, monospace' }}>opt out</span>
<div style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>
<MdProgressIndicator value="60" thickness="6" label="60 percent, thickness pinned at 6"></MdProgressIndicator>
<MdProgressIndicator wave value="60" thickness="6" label="60 percent wavy, thickness pinned at 6"></MdProgressIndicator>
</div>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div dir="rtl" data-density="-2" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">inherit</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, inherited rung -2"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, inherited rung -2"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">-4</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" density="-4" label="60 percent, local rung -4"></md-progress-indicator>
<md-progress-indicator wave value="60" density="-4" label="60 percent wavy, local rung -4"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">opt out</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" thickness="6" label="60 percent, thickness pinned at 6"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="6" label="60 percent wavy, thickness pinned at 6"></md-progress-indicator>
</div>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div dir="rtl" data-density="-2" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">inherit</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, inherited rung -2"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, inherited rung -2"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">-4</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" density="-4" label="60 percent, local rung -4"></md-progress-indicator>
<md-progress-indicator wave value="60" density="-4" label="60 percent wavy, local rung -4"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">opt out</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" thickness="6" label="60 percent, thickness pinned at 6"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="6" label="60 percent wavy, thickness pinned at 6"></md-progress-indicator>
</div>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<div dir="rtl" data-density="-2" style="display: grid; grid-template-columns: auto 1fr; gap: 14px 16px; align-items: center; inline-size: 100%; max-inline-size: 460px;">
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">inherit</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" label="60 percent, inherited rung -2"></md-progress-indicator>
<md-progress-indicator wave value="60" label="60 percent wavy, inherited rung -2"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">-4</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" density="-4" label="60 percent, local rung -4"></md-progress-indicator>
<md-progress-indicator wave value="60" density="-4" label="60 percent wavy, local rung -4"></md-progress-indicator>
</div>
<span style="inline-size: 3.5rem; opacity: .65; font-size: .75rem; font-family: ui-monospace, monospace;">opt out</span>
<div style="display: flex; flex-direction: column; gap: 14px;">
<md-progress-indicator value="60" thickness="6" label="60 percent, thickness pinned at 6"></md-progress-indicator>
<md-progress-indicator wave value="60" thickness="6" label="60 percent wavy, thickness pinned at 6"></md-progress-indicator>
</div>
</div>Density — an explicit thickness or size beats the rung outright, which
is why the rung demos above leave both unset and why the “opt out” row sets
thickness="6" to hold its size inside a dense region. See
Density.
i18n — translate label. Format any accompanying percentage or count with
Intl.NumberFormat.
| Custom property | Purpose | Default |
|---|---|---|
--md-progress-indicator-active-indicator-color | Filled portion | primary |
--md-progress-indicator-active-indicator-shape | Filled portion radius | Track shape |
--md-progress-indicator-track-color | Track fill | secondary-container |
--md-progress-indicator-track-shape | Track radius | corner-full |
--md-progress-indicator-stop-indicator-color / -shape / -size | End stop dot | primary / corner-full / 4px |
--md-progress-indicator-stop-indicator-trailing-space | Space past the stop dot | 0px |
--md-progress-indicator-track-active-indicator-space | Gap between track and fill | 4px |
--md-progress-indicator-four-color-1 … -4 | four-color palette | primary → primary-container → tertiary → tertiary-container |
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" label="Error themed" style="--md-progress-indicator-active-indicator-color: var(--md-sys-color-error); --md-progress-indicator-track-color: var(--md-sys-color-error-container); --md-progress-indicator-stop-indicator-color: var(--md-sys-color-error);"></md-progress-indicator>
<md-progress-indicator value="60" thickness="10" label="Squared off" style="--md-progress-indicator-track-shape: 2px; --md-progress-indicator-active-indicator-shape: 2px;"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate four-color label="Custom four colour" style="--md-progress-indicator-four-color-1: #6750A4; --md-progress-indicator-four-color-2: #7D5260; --md-progress-indicator-four-color-3: #386A20; --md-progress-indicator-four-color-4: #B3261E;"></md-progress-indicator>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="60" thickness="10" label="Error themed" style={{ '--md-progress-indicator-active-indicator-color': 'var(--md-sys-color-error)', '--md-progress-indicator-track-color': 'var(--md-sys-color-error-container)', '--md-progress-indicator-stop-indicator-color': 'var(--md-sys-color-error)' }}></MdProgressIndicator>
<MdProgressIndicator value="60" thickness="10" label="Squared off" style={{ '--md-progress-indicator-track-shape': '2px', '--md-progress-indicator-active-indicator-shape': '2px' }}></MdProgressIndicator>
</div>
<MdProgressIndicator variant="circular" indeterminate fourColor label="Custom four colour" style={{ '--md-progress-indicator-four-color-1': '#6750A4', '--md-progress-indicator-four-color-2': '#7D5260', '--md-progress-indicator-four-color-3': '#386A20', '--md-progress-indicator-four-color-4': '#B3261E' }}></MdProgressIndicator>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" label="Error themed" style="--md-progress-indicator-active-indicator-color: var(--md-sys-color-error); --md-progress-indicator-track-color: var(--md-sys-color-error-container); --md-progress-indicator-stop-indicator-color: var(--md-sys-color-error);"></md-progress-indicator>
<md-progress-indicator value="60" thickness="10" label="Squared off" style="--md-progress-indicator-track-shape: 2px; --md-progress-indicator-active-indicator-shape: 2px;"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate four-color label="Custom four colour" style="--md-progress-indicator-four-color-1: #6750A4; --md-progress-indicator-four-color-2: #7D5260; --md-progress-indicator-four-color-3: #386A20; --md-progress-indicator-four-color-4: #B3261E;"></md-progress-indicator><script setup>
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" label="Error themed" style="--md-progress-indicator-active-indicator-color: var(--md-sys-color-error); --md-progress-indicator-track-color: var(--md-sys-color-error-container); --md-progress-indicator-stop-indicator-color: var(--md-sys-color-error);"></md-progress-indicator>
<md-progress-indicator value="60" thickness="10" label="Squared off" style="--md-progress-indicator-track-shape: 2px; --md-progress-indicator-active-indicator-shape: 2px;"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate four-color label="Custom four colour" style="--md-progress-indicator-four-color-1: #6750A4; --md-progress-indicator-four-color-2: #7D5260; --md-progress-indicator-four-color-3: #386A20; --md-progress-indicator-four-color-4: #B3261E;"></md-progress-indicator>
</template><script>
import '@awc-ui/core/define';
</script>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" label="Error themed" style="--md-progress-indicator-active-indicator-color: var(--md-sys-color-error); --md-progress-indicator-track-color: var(--md-sys-color-error-container); --md-progress-indicator-stop-indicator-color: var(--md-sys-color-error);"></md-progress-indicator>
<md-progress-indicator value="60" thickness="10" label="Squared off" style="--md-progress-indicator-track-shape: 2px; --md-progress-indicator-active-indicator-shape: 2px;"></md-progress-indicator>
</div>
<md-progress-indicator variant="circular" indeterminate four-color label="Custom four colour" style="--md-progress-indicator-four-color-1: #6750A4; --md-progress-indicator-four-color-2: #7D5260; --md-progress-indicator-four-color-3: #386A20; --md-progress-indicator-four-color-4: #B3261E;"></md-progress-indicator>Every hook is a plain custom property, so a class works as well as an inline
style — which is how you theme a set rather than one instance:
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<style>
.brand-progress {
--md-progress-indicator-active-indicator-color: #6200ee;
--md-progress-indicator-track-color: #e0d4f5;
--md-progress-indicator-stop-indicator-color: #6200ee;
}
.success-progress {
--md-progress-indicator-active-indicator-color: #2e7d32;
--md-progress-indicator-track-color: #c8e6c9;
--md-progress-indicator-stop-indicator-color: #2e7d32;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Default"></md-progress-indicator>
<md-progress-indicator value="60" class="brand-progress" label="Brand"></md-progress-indicator>
<md-progress-indicator value="60" class="success-progress" label="Success"></md-progress-indicator>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<style>
.brand-progress {
--md-progress-indicator-active-indicator-color: #6200ee;
--md-progress-indicator-track-color: #e0d4f5;
--md-progress-indicator-stop-indicator-color: #6200ee;
}
.success-progress {
--md-progress-indicator-active-indicator-color: #2e7d32;
--md-progress-indicator-track-color: #c8e6c9;
--md-progress-indicator-stop-indicator-color: #2e7d32;
}
</style>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="60" label="Default"></MdProgressIndicator>
<MdProgressIndicator value="60" className="brand-progress" label="Brand"></MdProgressIndicator>
<MdProgressIndicator value="60" className="success-progress" label="Success"></MdProgressIndicator>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<style>
.brand-progress {
--md-progress-indicator-active-indicator-color: #6200ee;
--md-progress-indicator-track-color: #e0d4f5;
--md-progress-indicator-stop-indicator-color: #6200ee;
}
.success-progress {
--md-progress-indicator-active-indicator-color: #2e7d32;
--md-progress-indicator-track-color: #c8e6c9;
--md-progress-indicator-stop-indicator-color: #2e7d32;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Default"></md-progress-indicator>
<md-progress-indicator value="60" class="brand-progress" label="Brand"></md-progress-indicator>
<md-progress-indicator value="60" class="success-progress" label="Success"></md-progress-indicator>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<style>
.brand-progress {
--md-progress-indicator-active-indicator-color: #6200ee;
--md-progress-indicator-track-color: #e0d4f5;
--md-progress-indicator-stop-indicator-color: #6200ee;
}
.success-progress {
--md-progress-indicator-active-indicator-color: #2e7d32;
--md-progress-indicator-track-color: #c8e6c9;
--md-progress-indicator-stop-indicator-color: #2e7d32;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Default"></md-progress-indicator>
<md-progress-indicator value="60" class="brand-progress" label="Brand"></md-progress-indicator>
<md-progress-indicator value="60" class="success-progress" label="Success"></md-progress-indicator>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<style>
.brand-progress {
--md-progress-indicator-active-indicator-color: #6200ee;
--md-progress-indicator-track-color: #e0d4f5;
--md-progress-indicator-stop-indicator-color: #6200ee;
}
.success-progress {
--md-progress-indicator-active-indicator-color: #2e7d32;
--md-progress-indicator-track-color: #c8e6c9;
--md-progress-indicator-stop-indicator-color: #2e7d32;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" label="Default"></md-progress-indicator>
<md-progress-indicator value="60" class="brand-progress" label="Brand"></md-progress-indicator>
<md-progress-indicator value="60" class="success-progress" label="Success"></md-progress-indicator>
</div>Set the stop-indicator colour alongside the active one. It is a separate
property that does not follow the fill, so changing only the fill leaves a
primary dot sitting at the end of a green bar.
CSS parts — track, active-indicator, stop-indicator.
Reach for a part when a single colour token cannot express the result — a gradient fill, a faded track, a differently shaped stop dot:
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<style>
.gradient-indicator::part(active-indicator) {
background: linear-gradient(to right, #1a237e, #7c4dff, #ce93d8);
}
.faded-track::part(track) {
opacity: 0.15;
}
.error-stop::part(stop-indicator) {
background-color: var(--md-sys-color-error, #b3261e);
border-radius: 0;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" class="gradient-indicator" label="Gradient active indicator"></md-progress-indicator>
<md-progress-indicator value="40" thickness="10" class="faded-track" label="Faded track"></md-progress-indicator>
<md-progress-indicator value="50" thickness="10" class="error-stop" label="Squared stop indicator"></md-progress-indicator>
</div>import { MdProgressIndicator } from '@awc-ui/react';
export function Demo() {
return (
<>
<style>
.gradient-indicator::part(active-indicator) {
background: linear-gradient(to right, #1a237e, #7c4dff, #ce93d8);
}
.faded-track::part(track) {
opacity: 0.15;
}
.error-stop::part(stop-indicator) {
background-color: var(--md-sys-color-error, #b3261e);
border-radius: 0;
}
</style>
<div style={{ inlineSize: '100%', maxInlineSize: '360px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
<MdProgressIndicator value="60" thickness="10" className="gradient-indicator" label="Gradient active indicator"></MdProgressIndicator>
<MdProgressIndicator value="40" thickness="10" className="faded-track" label="Faded track"></MdProgressIndicator>
<MdProgressIndicator value="50" thickness="10" className="error-stop" label="Squared stop indicator"></MdProgressIndicator>
</div>
</>
);
}// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<style>
.gradient-indicator::part(active-indicator) {
background: linear-gradient(to right, #1a237e, #7c4dff, #ce93d8);
}
.faded-track::part(track) {
opacity: 0.15;
}
.error-stop::part(stop-indicator) {
background-color: var(--md-sys-color-error, #b3261e);
border-radius: 0;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" class="gradient-indicator" label="Gradient active indicator"></md-progress-indicator>
<md-progress-indicator value="40" thickness="10" class="faded-track" label="Faded track"></md-progress-indicator>
<md-progress-indicator value="50" thickness="10" class="error-stop" label="Squared stop indicator"></md-progress-indicator>
</div><script setup>
import '@awc-ui/core/define';
</script>
<template>
<style>
.gradient-indicator::part(active-indicator) {
background: linear-gradient(to right, #1a237e, #7c4dff, #ce93d8);
}
.faded-track::part(track) {
opacity: 0.15;
}
.error-stop::part(stop-indicator) {
background-color: var(--md-sys-color-error, #b3261e);
border-radius: 0;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" class="gradient-indicator" label="Gradient active indicator"></md-progress-indicator>
<md-progress-indicator value="40" thickness="10" class="faded-track" label="Faded track"></md-progress-indicator>
<md-progress-indicator value="50" thickness="10" class="error-stop" label="Squared stop indicator"></md-progress-indicator>
</div>
</template><script>
import '@awc-ui/core/define';
</script>
<style>
.gradient-indicator::part(active-indicator) {
background: linear-gradient(to right, #1a237e, #7c4dff, #ce93d8);
}
.faded-track::part(track) {
opacity: 0.15;
}
.error-stop::part(stop-indicator) {
background-color: var(--md-sys-color-error, #b3261e);
border-radius: 0;
}
</style>
<div style="inline-size: 100%; max-inline-size: 360px; display: flex; flex-direction: column; gap: 20px;">
<md-progress-indicator value="60" thickness="10" class="gradient-indicator" label="Gradient active indicator"></md-progress-indicator>
<md-progress-indicator value="40" thickness="10" class="faded-track" label="Faded track"></md-progress-indicator>
<md-progress-indicator value="50" thickness="10" class="error-stop" label="Squared stop indicator"></md-progress-indicator>
</div>md-progress-indicator::part(stop-indicator) { display: none;}md-loading-indicator ·
md-skeleton ·
md-button ·
md-slider ·
md-rating
md-progress-indicatorTwo artefacts to give your AI agent so it generates correct UI with this component. The per-component spec answers "how do I use this exact tag?". The main-llm spec answers "which tag should I pick in the first place?".
md-progress-indicator spec card
Identity · when to use / when NOT · decision cues · behavioural contract · do/don't · anti-patterns · full API. Paste into your agent when you're implementing with this component.
System-prompt preamble · decision matrix · token reference · page recipes · anti-patterns. Paste into the system prompt at the start of a piece of work.