import { LayoutContext } from '../layouting'; import { ComponentBase, ComponentState } from './componentBase'; import { MDCLinearProgress } from '@material/linear-progress'; export type ProgressBarState = ComponentState & { _type_: 'ProgressBar-builtin'; progress?: number | null; }; export class ProgressBarComponent extends ComponentBase { state: Required; private mdcProgress: MDCLinearProgress; createElement(): HTMLElement { // Create the element let element = document.createElement('div'); element.classList.add('mdc-linear-progress'); element.setAttribute('role', 'progressbar'); element.innerHTML = `
`; // Initialize the material design component this.mdcProgress = new MDCLinearProgress(element); return element; } updateElement( deltaState: ProgressBarState, latentComponents: Set ): void { // No progress specified if (deltaState.progress === undefined) { } // Indeterminate progress else if (deltaState.progress === null) { this.mdcProgress.determinate = false; } // Known progress else { this.mdcProgress.determinate = true; this.mdcProgress.progress = deltaState.progress; } } updateNaturalWidth(ctx: LayoutContext): void { this.naturalWidth = 3; } updateNaturalHeight(ctx: LayoutContext): void { this.naturalHeight = 0.2; } }