import { css } from 'lit'; import componentStyles from '../../styles/component.styles'; export default css` ${componentStyles} :host { --size: 128px; --track-width: 4px; --track-color: rgb(var(--sl-color-neutral-500) / 20%); --indicator-color: rgb(var(--sl-color-primary-600)); display: inline-flex; } .progress-ring { display: inline-flex; align-items: center; justify-content: center; position: relative; } .progress-ring__image { width: var(--size); height: var(--size); transform: rotate(-90deg); transform-origin: 50% 50%; } .progress-ring__track, .progress-ring__indicator { --radius: calc(var(--size) / 2 - var(--track-width) * 2); --circumference: calc(var(--radius) * 2 * var(--pi)); fill: none; stroke-width: var(--track-width); r: var(--radius); cx: calc(var(--size) / 2); cy: calc(var(--size) / 2); } .progress-ring__track { stroke: var(--track-color); } .progress-ring__indicator { stroke: var(--indicator-color); stroke-linecap: round; transition: 0.35s stroke-dashoffset, 0.35s stroke; stroke-dasharray: var(--circumference) var(--circumference); stroke-dashoffset: calc(var(--circumference) - (var(--percentage) / 100) * var(--circumference)); } .progress-ring__label { display: flex; align-items: center; justify-content: center; position: absolute; top: 0; left: 0; width: 100%; height: 100%; text-align: center; user-select: none; } `;