solid-route-progress

Controller

import { createProgress } from 'solid-route-progress'

const progress = createProgress({ delay: 300 })

Options

OptionDefaultMeaning
trickleTo0.95value the bar drifts toward while loading
delay200ms a load must last before the bar shows
stopDelay0ms to wait before completing once the last hold goes
speed200ms for hops and fades; written to --sp-speed

Read lazily, so reactive props work. They belong to whoever creates the controller.

start()

const release = progress.start()
release()
release('error')
release('cancel')
{
  using hold = progress.start() // where the runtime has Symbol.dispose
  await work()
}
returnsRelease
showsonce the load has lasted delay
completeswhen the last hold is released
release()done
release('error')completes with data-error; wins over any other outcome
release('cancel')fades out without reaching 100%
releasing twiceno-op

done()

progress.done()
progress.done('error')
progress.done('cancel')
dropsevery hold
afterstopDelay
while hiddenno-op
never painteddropped silently

set()

progress.set(0.6)
progress.set(1) // completes
range0 to 1, clamped
thenresumes trickling toward trickleTo
while hiddenshows the bar, unless delay is still pending

track()

const items = await progress.track(fetch('/api/items').then((r) => r.json()))

progress.track(upload(file), { timeout: 30_000 })
holdsone hold per call
rejectionreleases as 'error'
returnsthe promise, unchanged
timeoutms; lets go even if the promise never settles

Signals

AccessorTypeMeaning
value()numbertarget value, 0 to 1
state()'idle' | 'trickle' | 'active' | 'done'mirrored as data-state
active()booleanvisible
error()booleandone phase of a failed load
optionsProgressOptionswhat it was created with
StateMeaning
idlehidden: faded out, visibility: hidden
trickledrifting toward trickleTo on the long transition
activemoving to a set() value on the short transition
donemoving to 100%, then fading out

On the server

Every method is a no-op; start() still returns a release. <Progress> renders the idle shell.

Types

import type {
  DisposableLike,
  Outcome, // 'error' | 'cancel'
  ProgressController,
  ProgressOptions,
  ProgressState,
  Release,
  TrackOptions,
} from 'solid-route-progress'