Feedback
ScrollProgress
Shows the reader’s current position in a long document.
01
See it and copy it
Framework example
Choose Astro, React, or Elements to compare native usage against the shared visual output. Each example assumes the framework-level setup is already complete.
Framework usage
Switch targets to compare the adapter code. The preview stays visually stable because all three packages share the same tokens andui-* class contract.---
import { ScrollProgress } from '@santi020k/lumen-astro'
---
<div style="position: relative; min-height: 6rem; overflow: hidden; border: 1px solid hsl(var(--line)); border-radius: 0.75rem;">
<ScrollProgress
aria-label="Example reading progress"
style="position: absolute;"
/>
<p style="padding: 1.25rem; color: hsl(var(--ink-soft)); font-size: 0.875rem;">
The fixed component tracks the full document in production. This preview keeps its visual
treatment inside the example frame.
</p>
</div>import { ScrollProgress } from '@santi020k/lumen-react'
export const Example = () => (
<>
<div style={{ position: 'relative', minHeight: '6rem', overflow: 'hidden', border: '1px solid hsl(var(--line))', borderRadius: '0.75rem' }}>
<ScrollProgress
aria-label="Example reading progress"
style={{ position: 'absolute' }}
/>
<p style={{ padding: '1.25rem', color: 'hsl(var(--ink-soft))', fontSize: '0.875rem' }}>
The fixed component tracks the full document in production. This preview keeps its visual
treatment inside the example frame.
</p>
</div>
</>
)<script type="module">
import { defineLumenElements } from '@santi020k/lumen-elements/define'
defineLumenElements()
</script>
<div style="position: relative; min-height: 6rem; overflow: hidden; border: 1px solid hsl(var(--line)); border-radius: 0.75rem;">
<lumen-scroll-progress
aria-label="Example reading progress"
style="position: absolute;"></lumen-scroll-progress>
<p style="padding: 1.25rem; color: hsl(var(--ink-soft)); font-size: 0.875rem;">
The fixed component tracks the full document in production. This preview keeps its visual
treatment inside the example frame.
</p>
</div>02
Choose your target
Add this component
Choose the package for your runtime. All adapters share the Lumen stylesheet. Use the matching registry command when you want a local wrapper for that framework.
pnpm add @santi020k/lumen-astropnpm add @santi020k/lumen-astrolumen add ScrollProgresslumen add ScrollProgresspnpm add @santi020k/lumen-reactpnpm add @santi020k/lumen-reactlumen add ScrollProgress --target reactlumen add ScrollProgress --target reactpnpm add @santi020k/lumen-elementspnpm add @santi020k/lumen-elementslumen add ScrollProgress --target elementslumen add ScrollProgress --target elementsAPI reference
Lumen-specific props and runtime attributes for the Astro primitive. React props follow the same names; Elements use equivalent kebab-case attributes where custom elements expose them.
| Attribute | Values | Default | Description |
|---|---|---|---|
| position | "top" | "bottom" | "top" | Pins the progress indicator to a viewport edge. |
| aria-label | string | "Reading progress" | Names the live document-progress indicator for assistive technology. |
| class, className | string | "" | Merges custom classes with the generated ui-* root classes. |
| ...native attributes | HTML attributes | - | Forwards standard attributes to the root element unless the component consumes them. |