Set `progress` to a percentage from `0` to `100` in the component context.
The template calculates the first `stroke-dasharray` value as `392 × progress / 100`; the second value stays `392` because the SVG path is 392 units long. Thus `0` renders `0 392` (empty), `34` renders `133.28 392`, and `100` renders `392 392` (full). Values outside `0`–`100` are clamped to that range.
<span class="sds-iconBlock" aria-hidden="true">
<span class="sds-iconBlock__progress">
<svg width="100%" height="100%" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path class="sds-iconBlock__progressTrack" d="M50 1 H99 V99 H1 V1 H50 Z" fill="red" stroke-width="2" />
<path d="M50 1 H99 V99 H1 V1 H50 Z" fill="none" stroke-width="2" stroke-dasharray="133.28 392" stroke-dashoffset="0" />
</svg>
</span>
<span class="sds-iconBlock__text">1</span>
</span>
{% include "@icon-block-frame" %}
/* variables specific to current element */
$element-specific-variables: "";
.#{$namespace}iconBlock {
/* Save root element context for easy access if nesting is needed */
$self: &;
--sds-icon-block-border-radius: #{map-deep-get($design-tokens, "comp-icon-block-border-radius")};
--sds-icon-block-dimensions: #{map-deep-get($design-tokens, "comp-icon-block-width")};
/* properties of current element + media queries */
position: relative;
z-index: z(zero);
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
width: var(--sds-icon-block-dimensions);
height: var(--sds-icon-block-dimensions);
@include custom-prop-fallback("background-color","comp-icon-block-primary-muted-background-color");
@include custom-prop-fallback("color","comp-icon-block-primary-muted-icon-background-color");
border-radius: var(--sds-icon-block-border-radius);
/* Pseudo Elements */
&::before {
}
&::after {
}
/*
Include elements that are linked to the current element but have to reside at the root level of the stylesheet
(e.g: keyframes)
*/
@at-root {
}
/* children - write selector in full in comments in order to facilitate search */
svg {
max-width: 100%;
}
&__icon {
font-size: map-deep-get($design-tokens, "comp-icon-block-icon-size");
width: map-deep-get($design-tokens, "comp-icon-block-icon-size");
display: flex;
align-items: center;
justify-content: center;
svg {
width: inherit;
height: inherit;
}
&::before {
font-size: inherit !important;
}
}
&__progress {
position: absolute;
inset: 0;
svg {
border-radius: calc(var(--sds-icon-block-border-radius) + var(--sys-border-width-regular));
path {
@include custom-prop-fallback("stroke","ui-interaction-active-border-color");
stroke-width: 48px;
}
}
}
&__progressTrack {
@include custom-prop-fallback("stroke","brand-color-primary-solid-40","true","true")
}
&__text {
font-family: $headings-font-family;
font-weight: 600;
}
&:has(#{$self}__progress) {
#{$self}__text {
width: calc(var(--sds-icon-block-dimensions) - (var(--sys-border-width-regular) * 2));
height: calc(var(--sds-icon-block-dimensions) - (var(--sys-border-width-regular) * 2));
background-color: inherit;
position: relative;
display: flex;
align-items: center;
justify-content: center;
z-index: 1;
inset: 0;
border-radius: calc(var(--sds-icon-block-border-radius));
}
}
/* modifiers */
// iconBlock -iconBlockInverse
&.-iconBlockInverse {
// follows same logic as base element
@include custom-prop-fallback-override("comp-icon-block-primary-muted-background-color","comp-icon-block-primary-inverse-background-color");
@include custom-prop-fallback-override("comp-icon-block-primary-muted-icon-background-color","comp-icon-block-primary-inverse-icon-background-color");
}
// iconBlock -iconBlockHighlight
&.-iconBlockHighlight {
@include custom-prop-fallback-override("comp-icon-block-primary-muted-background-color","comp-icon-block-highlight-muted-background-color");
@include custom-prop-fallback-override("comp-icon-block-primary-muted-icon-background-color","comp-icon-block-highlight-muted-icon-background-color");
}
&.-iconBlockSuccessLine {
@include custom-prop-fallback-override("comp-icon-block-primary-muted-icon-background-color","comp-icon-block-success-inverse-icon-background-color");
}
&.-iconBlockColored {
/* @TODO change this to colored token that doesn't exist yet*/
@include custom-prop-fallback("color","comp-icon-block-mia-icon-background-color","true","true");
}
&.-iconBlockXs {
--sds-icon-block-border-radius: #{map-deep-get($design-tokens, "comp-icon-block-extra-small-border-radius")};
--sds-icon-block-dimensions: #{map-deep-get($design-tokens, "comp-icon-block-extra-small-width")};
#{$self}__icon {
font-size: map-deep-get($design-tokens, "comp-icon-block-extra-small-icon-size");
width: map-deep-get($design-tokens, "comp-icon-block-extra-small-icon-size");
}
}
&.-iconBlockSm {
--sds-icon-block-border-radius: #{map-deep-get($design-tokens, "comp-icon-block-small-border-radius")};
--sds-icon-block-dimensions: #{map-deep-get($design-tokens, "comp-icon-block-small-width")};
#{$self}__icon {
font-size: map-deep-get($design-tokens, "comp-icon-block-small-icon-size");
width: map-deep-get($design-tokens, "comp-icon-block-small-icon-size");
}
}
&.-iconBlockLg {
--sds-icon-block-border-radius: #{map-deep-get($design-tokens, "comp-icon-block-large-border-radius")};
--sds-icon-block-dimensions: #{map-deep-get($design-tokens, "comp-icon-block-large-width")};
#{$self}__icon {
font-size: map-deep-get($design-tokens, "comp-icon-block-large-icon-size");
width: map-deep-get($design-tokens, "comp-icon-block-large-icon-size");
}
}
&.-iconBlockXl {
--sds-icon-block-border-radius: #{map-deep-get($design-tokens, "comp-icon-block-large-border-radius")};
--sds-icon-block-dimensions: #{map-deep-get($design-tokens, "comp-icon-block-extra-large-width")};
#{$self}__icon {
font-size: map-deep-get($design-tokens, "comp-icon-block-extra-large-icon-size");
width: map-deep-get($design-tokens, "comp-icon-block-extra-large-icon-size");
}
}
&.-iconBlock2xl {
--sds-icon-block-border-radius: #{map-deep-get($design-tokens, "comp-icon-block-large-border-radius")};
--sds-icon-block-dimensions: #{map-deep-get($design-tokens, "comp-icon-block-mega-width")};
#{$self}__icon {
font-size: map-deep-get($design-tokens, "comp-icon-block-mega-icon-size");
width: map-deep-get($design-tokens, "comp-icon-block-mega-icon-size");
}
}
/* random parent element */
/*
*
* Syntax : .randomParentElt & {}
*
*/
/* Pseudo Classes */
&:hover {
@media (hover: hover) {
}
}
&:focus {
}
&:active {
}
&:focus,
&:active {
}
}