From 6a0626abf9d1ae17272673b1f302bcaae6132954 Mon Sep 17 00:00:00 2001 From: desig9stein Date: Thu, 20 Aug 2026 13:36:27 +0300 Subject: [PATCH 1/4] refactor(avatar): simplify and update avatar samples with grid layout and consistent styling --- .../avatar-overview.component.html | 95 ++++----- .../avatar-overview.component.scss | 60 +++--- .../avatar-shape/avatar-shape.component.html | 98 ++++----- .../avatar-shape/avatar-shape.component.scss | 113 ++++++---- .../avatar-size/avatar-size.component.html | 98 ++++----- .../avatar-size/avatar-size.component.scss | 125 ++++++----- .../avatar-styling.component.html | 128 ++++++----- .../avatar-styling.component.scss | 40 ++-- .../layouts/avatar/avatar-styling/layout.scss | 4 - .../avatar-tailwind-styling.component.html | 198 +++++++++--------- .../avatar-tailwind-styling.component.scss | 33 +++ .../avatar-variants.component.html | 96 ++++----- .../avatar-variants.component.scss | 93 +++++--- 13 files changed, 616 insertions(+), 565 deletions(-) delete mode 100644 src/app/layouts/avatar/avatar-styling/layout.scss diff --git a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.html b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.html index e4b1ef8ff..9f7dd3a84 100644 --- a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.html +++ b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.html @@ -1,56 +1,51 @@ -
+ + + + + + + + + + + +
+ + - - - - - - - - - - - - - - - - - - + + + +
+ diff --git a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss index fbf75d273..8d41b7afb 100644 --- a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss +++ b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss @@ -1,47 +1,39 @@ -.avatar-overview-sample { +:host { display: flex; - align-items: center; - justify-content: center; - gap: 90px; - width: 100%; - min-height: 100vh; + place-items: center; + gap: 2rem; + flex-wrap: wrap; + max-width: fit-content; + margin: 0 auto; + height: 100vh; + padding: 2rem; } -.avatar-with-badge { - position: relative; - display: inline-flex; +.profile-status { + anchor-name: --profile-status; } -.avatar-status { +.status-badge { position: absolute; - right: 6px; - bottom: 6px; + position-anchor: --profile-status; + inset-block-start: anchor(85%); + inset-inline-start: anchor(85%); + translate: -50% -50%; } .avatar-stack { - display: inline-flex; - align-items: center; -} - -.avatar-stack .size-large { - margin-left: -24px; -} - -.avatar-stack .size-large:first-child { - margin-left: 0; -} + display: flex; -.avatar-stack .igx-avatar { - border: 4px solid #fff; - box-sizing: border-box; -} + > igx-avatar:not(:first-child) { + margin-left: -24px; + } -.avatar-stack .size-large:last-child { - --ig-avatar-background: #e8eef6; - --ig-avatar-color: #6f8097; -} + > *:last-child { + --ig-avatar-background: #e8eef6; + --ig-avatar-color: #6f8097; + } -.avatar-stack .size-large:last-child .igx-avatar__initials { - font-size: 32px; - font-weight: 500; + igx-avatar { + box-shadow: 0 0 0 .4rem var(--ig-surface-500); + } } diff --git a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html index 88c355153..dcb5aa753 100644 --- a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html +++ b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html @@ -1,56 +1,46 @@ -
-
- - - - - - - Circle -
+ + + + + +Circle -
- - - - - - 2 - - - Square -
+ + + + + + 2 + +Square + + + + + + + +Rounded -
- - - - - - - - Rounded -
-
diff --git a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss index 78ac1f205..565ec1bae 100644 --- a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss +++ b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss @@ -1,48 +1,81 @@ -.avatar-shape-sample { - display: flex; - align-items: center; - justify-content: center; - gap: 90px; - min-height: 100vh; -} +@use "igniteui-theming/sass/typography" as *; -.avatar-variant { - display: inline-flex; - flex-direction: column; - align-items: center; - gap: 8px; -} +:host { + display: grid; + grid-auto-flow: column; + grid-template-rows: auto auto; + justify-items: center; + place-content: center; + column-gap: rem(40px); + row-gap: rem(8px); + flex-wrap: wrap; + max-width: fit-content; + margin: 0 auto; + height: 100vh; + padding: rem(32px); -.avatar-label { - color: var(--ig-gray-600); - font-size: 0.875rem; - line-height: 1.25rem; -} + igx-avatar { + grid-row: 1; + } -.avatar-with-badge { - position: relative; - display: inline-flex; -} + span { + grid-row: 2; + text-align: center; + color: var(--ig-gray-600); + font-size: var(--ig-detail-1-font-size); + font-weight: var(--ig-detail-1-font-weight); + font-style: var(--ig-detail-1-font-style); + line-height: var(--ig-detail-1-line-height); + letter-spacing: var(--ig-detail-1-letter-spacing); + text-transform: var(--ig-detail-1-text-transform); + } -.avatar-status { - --size: 18px; - position: absolute; - right: -4px; - bottom: -4px; - font-size: 0.75rem; - line-height: 1; -} + igx-avatar:nth-of-type(1) { + grid-column: 1; + anchor-name: --circle-anchor; + } -.avatar-dot-badge { - --size: 12px; - right: 3px; - bottom: 3px; -} + igx-avatar:nth-of-type(2) { + grid-column: 2; + anchor-name: --square-anchor; + } -.avatar-count-badge { - --ig-badge-text-color: #ffffff; -} + igx-avatar:nth-of-type(3) { + grid-column: 3; + anchor-name: --rounded-anchor; + } + + span:nth-of-type(1) { + grid-column: 1; + } -.avatar-check-badge { - --ig-badge-icon-color: #ffffff; + span:nth-of-type(2) { + grid-column: 2; + } + + span:nth-of-type(3) { + grid-column: 3; + } + + igx-badge { + --ig-size: var(--ig-size-small); + + position: absolute; + inset-block-start: anchor(85.5%); + inset-inline-start: anchor(85.5%); + translate: -50% -50%; + } + + igx-badge:nth-of-type(1) { + position-anchor: --circle-anchor; + } + + igx-badge:nth-of-type(2) { + position-anchor: --square-anchor; + } + + igx-badge:nth-of-type(3) { + position-anchor: --rounded-anchor; + } } + diff --git a/src/app/layouts/avatar/avatar-size/avatar-size.component.html b/src/app/layouts/avatar/avatar-size/avatar-size.component.html index 5b16e53d1..be7a2c62b 100644 --- a/src/app/layouts/avatar/avatar-size/avatar-size.component.html +++ b/src/app/layouts/avatar/avatar-size/avatar-size.component.html @@ -1,61 +1,41 @@ -
-
- - - - - - - - - Large -
+ + + + + +Large -
- - - - - - - - - Medium -
+ + + + + +Medium -
- - - - - - - - - Small -
-
+ + + + + +Small diff --git a/src/app/layouts/avatar/avatar-size/avatar-size.component.scss b/src/app/layouts/avatar/avatar-size/avatar-size.component.scss index 5d2dcdb74..eb0196e66 100644 --- a/src/app/layouts/avatar/avatar-size/avatar-size.component.scss +++ b/src/app/layouts/avatar/avatar-size/avatar-size.component.scss @@ -1,69 +1,82 @@ -.avatar-size-sample { - display: flex; - align-items: center; - justify-content: center; - gap: 90px; - min-height: 100vh; -} +@use "igniteui-theming/sass/typography" as *; -.avatar-size { - display: inline-flex; - flex-direction: column; +:host { + display: grid; + grid-auto-flow: column; + grid-template-rows: auto auto; + justify-items: center; align-items: center; - gap: 8px; -} + place-content: center; + column-gap: rem(48px); + row-gap: rem(8px); + flex-wrap: wrap; + max-width: fit-content; + margin: 0 auto; + height: 100vh; + padding: rem(32px); -.avatar-frame { - display: inline-flex; - align-items: center; - justify-content: center; -} + igx-avatar { + grid-row: 1; + } -.avatar-frame-large { - width: 72px; - height: 72px; -} + span { + grid-row: 2; + text-align: center; + color: var(--ig-gray-600); + font-size: var(--ig-detail-1-font-size); + font-weight: var(--ig-detail-1-font-weight); + font-style: var(--ig-detail-1-font-style); + line-height: var(--ig-detail-1-line-height); + letter-spacing: var(--ig-detail-1-letter-spacing); + text-transform: var(--ig-detail-1-text-transform); + } -.avatar-frame-medium { - width: 72px; - height: 72px; -} + igx-avatar:nth-of-type(1) { + grid-column: 1; + anchor-name: --circle-anchor; + } -.avatar-frame-small { - width: 72px; - height: 72px; -} + igx-avatar:nth-of-type(2) { + grid-column: 2; + anchor-name: --square-anchor; + } -.avatar-label { - color: var(--ig-gray-600); - font-size: 0.875rem; - line-height: 1.25rem; -} + igx-avatar:nth-of-type(3) { + grid-column: 3; + anchor-name: --rounded-anchor; + } -.avatar-with-badge { - position: relative; - display: inline-flex; -} + span:nth-of-type(1) { + grid-column: 1; + } -.avatar-status { - position: absolute; - line-height: 1; -} + span:nth-of-type(2) { + grid-column: 2; + } -.avatar-dot-badge-large { - --size: 16px; - right: 3px; - bottom: 3px; -} + span:nth-of-type(3) { + grid-column: 3; + } -.avatar-dot-badge-medium { - --size: 14px; - right: 2px; - bottom: 2px; -} + igx-badge { + --ig-size: var(--ig-size-small); -.avatar-dot-badge-small { - --size: 12px; - right: 1px; - bottom: 1px; + position: absolute; + inset-block-start: anchor(85.5%); + inset-inline-start: anchor(85.5%); + translate: -50% -50%; + } + + igx-badge:nth-of-type(1) { + position-anchor: --circle-anchor; + } + + igx-badge:nth-of-type(2) { + position-anchor: --square-anchor; + } + + igx-badge:nth-of-type(3) { + position-anchor: --rounded-anchor; + } } + diff --git a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html index 07510f6c3..e7e7ef090 100644 --- a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html +++ b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html @@ -1,71 +1,69 @@ -
- - Chats + + Chats - -
- - - - - -
-

Nick Evans

- Hi Samira, thanks for the ... - 9:44 AM -
+ +
+ + + + + +
+

Nick Evans

+ Hi Samira, thanks for the ... + 9:44 AM +
- -
- - - - -
-

James Ford

- I'll send the text and im ... - 8:30 AM -
+ +
+ + + + +
+

James Ford

+ I'll send the text and im ... + 8:30 AM +
- -
- - - - - -
-

Kate Porter

- That's great! - Yesterday -
+ +
+ + + + + +
+

Kate Porter

+ That's great! + Yesterday +
- Meetings + Meetings - - - - -

Weekly Meeting

- https://www.infra.com - Monday -
+ + + + +

Weekly Meeting

+ https://www.infra.com + Monday +
- - - - -

Design Discussion

- https://www.infra.com - 11:30 AM -
-
-
+ + + + +

Design Discussion

+ https://www.infra.com + 11:30 AM +
+ diff --git a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss index 13d20bb3f..8001ff67f 100644 --- a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss +++ b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss @@ -1,35 +1,43 @@ -.avatar-styling-sample { +:host { display: flex; align-items: center; justify-content: center; + height: 100vh; + + igx-badge { + --ig-size: var(--ig-size-small); + } + + igx-avatar { + --background: var(--ig-gray-300); + --color: var(--ig-gray-300-contrast); + } + + igx-avatar.avatar-muted { + --background: var(--ig-gray-800); + --color: var(--ig-gray-800-contrast); + } } .chat-list { - width: 344px; - max-width: 100%; -} + --border-width: #{rem(1px)}; + --border-color: var(--ig-gray-300); + --header-text-color: var(--ig-gray-900); -.size-small { - --ig-size: var(--ig-size-small); + max-width: rem(328px); } .avatar-with-badge { position: relative; - display: inline-flex; } .avatar-status { - --ig-badge-icon-color: #ffffff; position: absolute; - right: -4px; - bottom: -4px; + inset-inline-end: rem(-4px); + inset-block-end: rem(-4px); } .avatar-muted-badge { - --ig-badge-background-color: var(--ig-gray-300); - --ig-badge-icon-color: var(--ig-gray-700); -} - -.avatar-muted { - --ig-avatar-background: #D2DBE8; + --background-color: var(--ig-gray-300); + --icon-color: var(--ig-gray-300-contrast); } diff --git a/src/app/layouts/avatar/avatar-styling/layout.scss b/src/app/layouts/avatar/avatar-styling/layout.scss deleted file mode 100644 index d3a420849..000000000 --- a/src/app/layouts/avatar/avatar-styling/layout.scss +++ /dev/null @@ -1,4 +0,0 @@ -:host { - display: inline-flex; - gap: 32px -} diff --git a/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html b/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html index 79cd59492..4b6e8be4d 100644 --- a/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html +++ b/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html @@ -1,111 +1,105 @@ -
- - - Cafe interior - + + + Cafe interior + + + + + Kate Thompson +

3D Artist. Turning polygons into worlds and immersive digital realities

- + + +
+ @for (stat of profileStats; track stat.label; let isLast = $last) { +
+ {{ stat.value }} + {{ stat.label }} +
+ @if (!isLast) { + + } + } +
+
+ + +
+ + + +
+
+
+ + + + - Kate Thompson - - - -

3D Artist. Turning polygons into worlds and immersive digital realities

-
- @for (stat of profileStats; track stat.label; let isLast = $last) { -
- {{ stat.value }} - {{ stat.label }} -
- @if (!isLast) { - - } + + Kate Thompson +

3D Artist. Turning polygons into worlds and immersive digital realities

+ + +
+ @for (stat of profileStats; track stat.label; let isLast = $last) { +
+ {{ stat.value }} + {{ stat.label }} +
+ @if (!isLast) { + } -
-
- - - -
- - - -
-
- - - - - - - + } +
+
+ + +
+ + -
- - - -
- - -
+ +
+ + + diff --git a/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.scss b/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.scss index 7f26ddcb5..ea7083981 100644 --- a/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.scss +++ b/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.scss @@ -1,3 +1,36 @@ +@use "igniteui-theming/sass/typography" as *; + :host { + display: grid; + grid-template-columns: repeat(auto-fit, rem(344px)); + gap: rem(40px); + place-content: center; + height: 100vh; +} + +igx-card:nth-of-type(2) { + align-self: center; +} + +.card-sample-custom-subtitle { display: block; + color: var(--ig-gray-700); + + @include type-style("body-2") { + margin-block-start: rem(8px); + }; +} + +.stats-title { + color: var(--ig-gray-900); + + @include type-style("subtitle-1") { + font-weight: 600; + }; +} + +.stats-subtitle { + color: var(--ig-gray-500); + + @include type-style("body-2"); } diff --git a/src/app/layouts/avatar/avatar-variants/avatar-variants.component.html b/src/app/layouts/avatar/avatar-variants/avatar-variants.component.html index 438406536..6ac275898 100644 --- a/src/app/layouts/avatar/avatar-variants/avatar-variants.component.html +++ b/src/app/layouts/avatar/avatar-variants/avatar-variants.component.html @@ -1,56 +1,44 @@ -
-
- - - - - - - Image -
+ + + + + +Image -
- - - - - - 2 - - - Icon -
+ + + + + + 2 + +Icon + + + + + + + +Initials -
- - - - - - - - Initials -
-
diff --git a/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss b/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss index 355ff7df2..58ea36566 100644 --- a/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss +++ b/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss @@ -1,48 +1,79 @@ -.avatar-variants-sample { - display: flex; - align-items: center; - justify-content: center; - gap: 90px; - min-height: 100vh; +@use "igniteui-theming/sass/typography" as *; + +:host { + display: grid; + grid-auto-flow: column; + grid-template-rows: auto auto; + justify-items: center; + place-content: center; + column-gap: rem(48px); + row-gap: rem(8px); + flex-wrap: wrap; + max-width: fit-content; + margin: 0 auto; + height: 100vh; + padding: rem(32px); } -.avatar-variant { - display: inline-flex; - flex-direction: column; - align-items: center; - gap: 8px; +igx-avatar { + grid-row: 1; } -.avatar-label { +span { + grid-row: 2; + text-align: center; color: var(--ig-gray-600); - font-size: 0.875rem; - line-height: 1.25rem; + font-size: var(--ig-detail-1-font-size); + font-weight: var(--ig-detail-1-font-weight); + font-style: var(--ig-detail-1-font-style); + line-height: var(--ig-detail-1-line-height); + letter-spacing: var(--ig-detail-1-letter-spacing); + text-transform: var(--ig-detail-1-text-transform); +} + +igx-avatar:nth-of-type(1) { + grid-column: 1; + anchor-name: --circle-anchor; +} + +igx-avatar:nth-of-type(2) { + grid-column: 2; + anchor-name: --square-anchor; +} + +igx-avatar:nth-of-type(3) { + grid-column: 3; + anchor-name: --rounded-anchor; +} + +span:nth-of-type(1) { + grid-column: 1; +} + +span:nth-of-type(2) { + grid-column: 2; } -.avatar-with-badge { - position: relative; - display: inline-flex; +span:nth-of-type(3) { + grid-column: 3; } -.avatar-status { - --size: 18px; +igx-badge { + --ig-size: 1; position: absolute; - right: -4px; - bottom: -4px; - font-size: 0.75rem; - line-height: 1; + inset-block-start: anchor(85.5%); + inset-inline-start: anchor(85.5%); + translate: -50% -50%; } -.avatar-dot-badge { - --size: 12px; - right: 3px; - bottom: 3px; +igx-badge:nth-of-type(1) { + position-anchor: --circle-anchor; } -.avatar-count-badge { - --ig-badge-text-color: #ffffff; +igx-badge:nth-of-type(2) { + position-anchor: --square-anchor; } -.avatar-check-badge { - --ig-badge-icon-color: #ffffff; +igx-badge:nth-of-type(3) { + position-anchor: --rounded-anchor; } From 22b2bc7d2cc3d3cbec287ec4a6837e2c814ee830 Mon Sep 17 00:00:00 2001 From: desig9stein Date: Thu, 20 Aug 2026 14:25:42 +0300 Subject: [PATCH 2/4] refactor(avatar): enhance layout and styling for avatar components --- .../avatar-overview.component.scss | 29 +++--- .../avatar-shape/avatar-shape.component.html | 10 +- .../avatar-shape/avatar-shape.component.scss | 90 +++++++----------- .../avatar-size/avatar-size.component.scss | 92 +++++++------------ .../avatar-styling.component.scss | 32 ++++--- .../avatar-variants.component.scss | 68 +++++--------- 6 files changed, 119 insertions(+), 202 deletions(-) diff --git a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss index 8d41b7afb..6f1aecb3f 100644 --- a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss +++ b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss @@ -1,12 +1,13 @@ +@use "igniteui-theming/sass/typography" as *; + :host { display: flex; - place-items: center; - gap: 2rem; flex-wrap: wrap; - max-width: fit-content; - margin: 0 auto; + align-items: center; + justify-content: center; + gap: rem(32px); height: 100vh; - padding: 2rem; + padding: rem(32px); } .profile-status { @@ -24,16 +25,16 @@ .avatar-stack { display: flex; - > igx-avatar:not(:first-child) { - margin-left: -24px; - } + igx-avatar { + box-shadow: 0 0 0 rem(6px) var(--ig-surface-500); - > *:last-child { - --ig-avatar-background: #e8eef6; - --ig-avatar-color: #6f8097; - } + + igx-avatar { + margin-inline-start: rem(-24px); + } - igx-avatar { - box-shadow: 0 0 0 .4rem var(--ig-surface-500); + &:last-child { + --ig-avatar-background: #e8eef6; + --ig-avatar-color: #6f8097; + } } } diff --git a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html index dcb5aa753..261085c24 100644 --- a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html +++ b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.html @@ -6,12 +6,11 @@ alt="A profile photo of a man."> -Circle +Circle 2 -Square +Square -Rounded - +Rounded diff --git a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss index 565ec1bae..07248577e 100644 --- a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss +++ b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss @@ -1,81 +1,53 @@ +@use "sass:list"; @use "igniteui-theming/sass/typography" as *; +$avatars: circle, square, rounded; + :host { display: grid; grid-auto-flow: column; grid-template-rows: auto auto; - justify-items: center; place-content: center; + place-items: center; column-gap: rem(40px); row-gap: rem(8px); - flex-wrap: wrap; - max-width: fit-content; - margin: 0 auto; height: 100vh; padding: rem(32px); +} - igx-avatar { - grid-row: 1; - } - - span { - grid-row: 2; - text-align: center; - color: var(--ig-gray-600); - font-size: var(--ig-detail-1-font-size); - font-weight: var(--ig-detail-1-font-weight); - font-style: var(--ig-detail-1-font-style); - line-height: var(--ig-detail-1-line-height); - letter-spacing: var(--ig-detail-1-letter-spacing); - text-transform: var(--ig-detail-1-text-transform); - } - - igx-avatar:nth-of-type(1) { - grid-column: 1; - anchor-name: --circle-anchor; - } - - igx-avatar:nth-of-type(2) { - grid-column: 2; - anchor-name: --square-anchor; - } - - igx-avatar:nth-of-type(3) { - grid-column: 3; - anchor-name: --rounded-anchor; - } - - span:nth-of-type(1) { - grid-column: 1; - } +// :where() keeps the sample's own rules at zero specificity +:where(igx-avatar) { + grid-row: 1; +} - span:nth-of-type(2) { - grid-column: 2; - } +:where(span) { + grid-row: 2; + text-align: center; + color: var(--ig-gray-600); - span:nth-of-type(3) { - grid-column: 3; - } + @include type-style("body-1") { + margin: 0; + }; +} - igx-badge { - --ig-size: var(--ig-size-small); +:where(igx-badge) { + --ig-size: var(--ig-size-small); - position: absolute; - inset-block-start: anchor(85.5%); - inset-inline-start: anchor(85.5%); - translate: -50% -50%; - } + position: absolute; + inset-block-start: anchor(85.5%); + inset-inline-start: anchor(85.5%); + translate: -50% -50%; +} - igx-badge:nth-of-type(1) { - position-anchor: --circle-anchor; - } +// The avatars and badges are flat siblings, so every badge needs its own anchor name to pin to. +@each $avatar in $avatars { + $i: list.index($avatars, $avatar); - igx-badge:nth-of-type(2) { - position-anchor: --square-anchor; + igx-avatar:nth-of-type(#{$i}) { + anchor-name: --#{$avatar}; } - igx-badge:nth-of-type(3) { - position-anchor: --rounded-anchor; + igx-badge:nth-of-type(#{$i}) { + position-anchor: --#{$avatar}; } } - diff --git a/src/app/layouts/avatar/avatar-size/avatar-size.component.scss b/src/app/layouts/avatar/avatar-size/avatar-size.component.scss index eb0196e66..c90c29010 100644 --- a/src/app/layouts/avatar/avatar-size/avatar-size.component.scss +++ b/src/app/layouts/avatar/avatar-size/avatar-size.component.scss @@ -1,82 +1,52 @@ +@use "sass:list"; @use "igniteui-theming/sass/typography" as *; +$avatars: large, medium, small; + :host { display: grid; grid-auto-flow: column; grid-template-rows: auto auto; - justify-items: center; - align-items: center; place-content: center; + place-items: center; column-gap: rem(48px); row-gap: rem(8px); - flex-wrap: wrap; - max-width: fit-content; - margin: 0 auto; height: 100vh; padding: rem(32px); +} - igx-avatar { - grid-row: 1; - } - - span { - grid-row: 2; - text-align: center; - color: var(--ig-gray-600); - font-size: var(--ig-detail-1-font-size); - font-weight: var(--ig-detail-1-font-weight); - font-style: var(--ig-detail-1-font-style); - line-height: var(--ig-detail-1-line-height); - letter-spacing: var(--ig-detail-1-letter-spacing); - text-transform: var(--ig-detail-1-text-transform); - } - - igx-avatar:nth-of-type(1) { - grid-column: 1; - anchor-name: --circle-anchor; - } - - igx-avatar:nth-of-type(2) { - grid-column: 2; - anchor-name: --square-anchor; - } - - igx-avatar:nth-of-type(3) { - grid-column: 3; - anchor-name: --rounded-anchor; - } - - span:nth-of-type(1) { - grid-column: 1; - } - - span:nth-of-type(2) { - grid-column: 2; - } +// :where() keeps the sample's own rules at zero specificity +:where(igx-avatar) { + grid-row: 1; +} - span:nth-of-type(3) { - grid-column: 3; - } +:where(span) { + grid-row: 2; + text-align: center; + color: var(--ig-gray-600); - igx-badge { - --ig-size: var(--ig-size-small); + @include type-style("body-1") { + margin: 0; + }; +} - position: absolute; - inset-block-start: anchor(85.5%); - inset-inline-start: anchor(85.5%); - translate: -50% -50%; - } +:where(igx-badge) { + position: absolute; + inset-block-start: anchor(85.5%); + inset-inline-start: anchor(85.5%); + translate: -50% -50%; +} - igx-badge:nth-of-type(1) { - position-anchor: --circle-anchor; - } +// The avatars and badges are flat siblings, so every badge needs its own anchor name to pin to. +@each $avatar in $avatars { + $i: list.index($avatars, $avatar); - igx-badge:nth-of-type(2) { - position-anchor: --square-anchor; + igx-avatar:nth-of-type(#{$i}) { + anchor-name: --#{$avatar}; } - igx-badge:nth-of-type(3) { - position-anchor: --rounded-anchor; + igx-badge:nth-of-type(#{$i}) { + --ig-size: var(--ig-size-#{$avatar}); + position-anchor: --#{$avatar}; } } - diff --git a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss index 8001ff67f..4fb4529f0 100644 --- a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss +++ b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss @@ -1,22 +1,10 @@ +@use "igniteui-theming/sass/typography" as *; + :host { display: flex; align-items: center; justify-content: center; height: 100vh; - - igx-badge { - --ig-size: var(--ig-size-small); - } - - igx-avatar { - --background: var(--ig-gray-300); - --color: var(--ig-gray-300-contrast); - } - - igx-avatar.avatar-muted { - --background: var(--ig-gray-800); - --color: var(--ig-gray-800-contrast); - } } .chat-list { @@ -27,10 +15,26 @@ max-width: rem(328px); } +// :where() drops this to zero specificity, so .avatar-muted below overrides it +// without needing a longer selector to outrank it. +:where(igx-avatar) { + --background: var(--ig-gray-300); + --color: var(--ig-gray-300-contrast); +} + +.avatar-muted { + --background: var(--ig-gray-800); + --color: var(--ig-gray-800-contrast); +} + .avatar-with-badge { position: relative; } +:where(igx-badge) { + --ig-size: var(--ig-size-small); +} + .avatar-status { position: absolute; inset-inline-end: rem(-4px); diff --git a/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss b/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss index 58ea36566..a4c56b17f 100644 --- a/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss +++ b/src/app/layouts/avatar/avatar-variants/avatar-variants.component.scss @@ -1,79 +1,53 @@ +@use "sass:list"; @use "igniteui-theming/sass/typography" as *; +$avatars: circle, square, rounded; + :host { display: grid; grid-auto-flow: column; grid-template-rows: auto auto; - justify-items: center; place-content: center; + place-items: center; column-gap: rem(48px); row-gap: rem(8px); - flex-wrap: wrap; - max-width: fit-content; - margin: 0 auto; height: 100vh; padding: rem(32px); } -igx-avatar { +// :where() keeps the sample's own rules at zero +:where(igx-avatar) { grid-row: 1; } -span { +:where(span) { grid-row: 2; text-align: center; color: var(--ig-gray-600); - font-size: var(--ig-detail-1-font-size); - font-weight: var(--ig-detail-1-font-weight); - font-style: var(--ig-detail-1-font-style); - line-height: var(--ig-detail-1-line-height); - letter-spacing: var(--ig-detail-1-letter-spacing); - text-transform: var(--ig-detail-1-text-transform); -} - -igx-avatar:nth-of-type(1) { - grid-column: 1; - anchor-name: --circle-anchor; -} -igx-avatar:nth-of-type(2) { - grid-column: 2; - anchor-name: --square-anchor; + @include type-style("body-1") { + margin: 0; + }; } -igx-avatar:nth-of-type(3) { - grid-column: 3; - anchor-name: --rounded-anchor; -} - -span:nth-of-type(1) { - grid-column: 1; -} +:where(igx-badge) { + --ig-size: var(--ig-size-small); -span:nth-of-type(2) { - grid-column: 2; -} - -span:nth-of-type(3) { - grid-column: 3; -} - -igx-badge { - --ig-size: 1; position: absolute; inset-block-start: anchor(85.5%); inset-inline-start: anchor(85.5%); translate: -50% -50%; } -igx-badge:nth-of-type(1) { - position-anchor: --circle-anchor; -} +// The avatars and badges are flat siblings, so every badge needs its own anchor name to pin to. +@each $avatar in $avatars { + $i: list.index($avatars, $avatar); -igx-badge:nth-of-type(2) { - position-anchor: --square-anchor; -} + igx-avatar:nth-of-type(#{$i}) { + anchor-name: --#{$avatar}; + } -igx-badge:nth-of-type(3) { - position-anchor: --rounded-anchor; + igx-badge:nth-of-type(#{$i}) { + position-anchor: --#{$avatar}; + } } From a31f76b1d68026c3ff93cb96e6ca1fe97b001b60 Mon Sep 17 00:00:00 2001 From: desig9stein Date: Thu, 20 Aug 2026 15:56:26 +0300 Subject: [PATCH 3/4] refactor(avatar): adjust layout gap and simplify styling for avatar components --- .../avatar-overview/avatar-overview.component.scss | 2 +- .../avatar-styling/avatar-styling.component.scss | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss index 6f1aecb3f..6ee88140a 100644 --- a/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss +++ b/src/app/layouts/avatar/avatar-overview/avatar-overview.component.scss @@ -5,7 +5,7 @@ flex-wrap: wrap; align-items: center; justify-content: center; - gap: rem(32px); + gap: rem(100px); height: 100vh; padding: rem(32px); } diff --git a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss index 4fb4529f0..5b7b55532 100644 --- a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss +++ b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss @@ -15,23 +15,16 @@ max-width: rem(328px); } -// :where() drops this to zero specificity, so .avatar-muted below overrides it -// without needing a longer selector to outrank it. -:where(igx-avatar) { +igx-avatar { --background: var(--ig-gray-300); --color: var(--ig-gray-300-contrast); } -.avatar-muted { - --background: var(--ig-gray-800); - --color: var(--ig-gray-800-contrast); -} - .avatar-with-badge { position: relative; } -:where(igx-badge) { +igx-badge { --ig-size: var(--ig-size-small); } From 7d4f551a25c566276230f033b031b6c58658e0b7 Mon Sep 17 00:00:00 2001 From: desig9stein Date: Thu, 20 Aug 2026 16:44:22 +0300 Subject: [PATCH 4/4] refactor(avatar): simplify and clean up styling across avatar components and samples --- .../avatar-shape/avatar-shape.component.scss | 7 +++---- .../avatar-size/avatar-size.component.scss | 11 +++++------ .../avatar-styling/avatar-styling.component.html | 8 +++----- .../avatar-styling/avatar-styling.component.scss | 16 ++++++++-------- .../avatar-tailwind-styling.component.html | 2 +- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss index 07248577e..a6a47666f 100644 --- a/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss +++ b/src/app/layouts/avatar/avatar-shape/avatar-shape.component.scss @@ -15,12 +15,11 @@ $avatars: circle, square, rounded; padding: rem(32px); } -// :where() keeps the sample's own rules at zero specificity -:where(igx-avatar) { +igx-avatar { grid-row: 1; } -:where(span) { +span { grid-row: 2; text-align: center; color: var(--ig-gray-600); @@ -30,7 +29,7 @@ $avatars: circle, square, rounded; }; } -:where(igx-badge) { +igx-badge { --ig-size: var(--ig-size-small); position: absolute; diff --git a/src/app/layouts/avatar/avatar-size/avatar-size.component.scss b/src/app/layouts/avatar/avatar-size/avatar-size.component.scss index c90c29010..79f4204bb 100644 --- a/src/app/layouts/avatar/avatar-size/avatar-size.component.scss +++ b/src/app/layouts/avatar/avatar-size/avatar-size.component.scss @@ -1,8 +1,6 @@ @use "sass:list"; @use "igniteui-theming/sass/typography" as *; -$avatars: large, medium, small; - :host { display: grid; grid-auto-flow: column; @@ -15,12 +13,11 @@ $avatars: large, medium, small; padding: rem(32px); } -// :where() keeps the sample's own rules at zero specificity -:where(igx-avatar) { +igx-avatar { grid-row: 1; } -:where(span) { +span { grid-row: 2; text-align: center; color: var(--ig-gray-600); @@ -30,13 +27,15 @@ $avatars: large, medium, small; }; } -:where(igx-badge) { +igx-badge { position: absolute; inset-block-start: anchor(85.5%); inset-inline-start: anchor(85.5%); translate: -50% -50%; } +$avatars: large, medium, small; + // The avatars and badges are flat siblings, so every badge needs its own anchor name to pin to. @each $avatar in $avatars { $i: list.index($avatars, $avatar); diff --git a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html index e7e7ef090..758148130 100644 --- a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html +++ b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.html @@ -4,7 +4,6 @@
@@ -20,7 +19,7 @@
- + @@ -33,7 +32,6 @@
@@ -50,7 +48,7 @@ Meetings - +

Weekly Meeting

@@ -59,7 +57,7 @@
- +

Design Discussion

diff --git a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss index 5b7b55532..e4e2886f9 100644 --- a/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss +++ b/src/app/layouts/avatar/avatar-styling/avatar-styling.component.scss @@ -7,17 +7,17 @@ height: 100vh; } -.chat-list { - --border-width: #{rem(1px)}; - --border-color: var(--ig-gray-300); - --header-text-color: var(--ig-gray-900); +igx-list { + --ig-list-border-width: #{rem(1px)}; + --ig-list-border-color: var(--ig-gray-300); + --ig-list-header-text-color: var(--ig-gray-900); max-width: rem(328px); } igx-avatar { - --background: var(--ig-gray-300); - --color: var(--ig-gray-300-contrast); + --ig-avatar-background: var(--ig-gray-300); + --ig-avatar-color: var(--ig-gray-300-contrast); } .avatar-with-badge { @@ -35,6 +35,6 @@ igx-badge { } .avatar-muted-badge { - --background-color: var(--ig-gray-300); - --icon-color: var(--ig-gray-300-contrast); + --ig-badge-background-color: var(--ig-gray-300); + --ig-badge-icon-color: var(--ig-gray-300-contrast); } diff --git a/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html b/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html index 4b6e8be4d..d4fff12c1 100644 --- a/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html +++ b/src/app/layouts/avatar/avatar-tailwind-styling/avatar-tailwind-styling.component.html @@ -75,7 +75,7 @@ {{ stat.label }}
@if (!isLast) { - + } }