UNPKG

bits-ui

Version:

The headless components for Svelte.

37 lines (36 loc) 1.31 kB
import { attachRef } from "svelte-toolbelt"; import { createBitsAttrs } from "../../internal/attrs.js"; const progressAttrs = createBitsAttrs({ component: "progress", parts: ["root"], }); export class ProgressRootState { static create(opts) { return new ProgressRootState(opts); } opts; attachment; constructor(opts) { this.opts = opts; this.attachment = attachRef(this.opts.ref); } props = $derived.by(() => ({ role: "progressbar", value: this.opts.value.current, "aria-valuemin": this.opts.min.current, "aria-valuemax": this.opts.max.current, "aria-valuenow": this.opts.value.current === null ? undefined : this.opts.value.current, "data-value": this.opts.value.current === null ? undefined : this.opts.value.current, "data-state": getProgressDataState(this.opts.value.current, this.opts.max.current), "data-max": this.opts.max.current, "data-min": this.opts.min.current, "data-indeterminate": this.opts.value.current === null ? "" : undefined, [progressAttrs.root]: "", ...this.attachment, })); } function getProgressDataState(value, max) { if (value === null) return "indeterminate"; return value === max ? "loaded" : "loading"; }