Icon Block

Icon block progress

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.

<!-- Default -->
<span class="sds-iconBlock" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Extra Small -->
<span class="sds-iconBlock -iconBlockXs" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Small -->
<span class="sds-iconBlock -iconBlockSm" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Large -->
<span class="sds-iconBlock -iconBlockLg" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Xl -->
<span class="sds-iconBlock -iconBlockXl" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- 2 Xl -->
<span class="sds-iconBlock -iconBlock2xl" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Inline Svg -->
<span class="sds-iconBlock" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-brandIconWrapper">
        <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
            <path fill-rule="evenodd" clip-rule="evenodd" d="M6 39L42 39V41L6 41V39Z" fill="#DE0000" />
            <path fill-rule="evenodd" clip-rule="evenodd" d="M42 22V20H6.00004L24 4L35.3515 13.3482L36.6229 11.8044L25.2715 2.45614C24.5215 1.83851 23.4361 1.8492 22.6985 2.48149L4.69845 18.4815C3.28866 19.6899 4.14323 22 6.00004 22H11L11 36H13L13 22H19L19 36H21L21 22H27L27 36H29L29 22H35L35 36H37V22H42ZM42 46V44H6.00004V46H42Z" fill="#003060" />
        </svg>
    </span>

</span>

<!-- Inverse -->
<span class="sds-iconBlock -iconBlockInverse" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Highlight -->
<span class="sds-iconBlock -iconBlockHighlight" aria-hidden="true">

    <span class="sds-iconBlock__icon sds-icon sds-icon-photo"></span>

</span>

<!-- Text -->
<span class="sds-iconBlock" aria-hidden="true">

    <span class="sds-iconBlock__text">1</span>

</span>

<!-- Progress -->
<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" %}
  • Content:
    /* 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 {
    	}
    
    }
  • URL: /components/raw/icon-block/_icon-block.scss
  • Filesystem Path: components/token-based/content/block/icon-block/_icon-block.scss
  • Size: 5.9 KB