From 08f458e1e1f869df3a6fbdcdeddcafd31bdac61f Mon Sep 17 00:00:00 2001
From: sivanova <sivanova@infragistics.com>
Date: Thu, 3 Apr 2025 16:19:36 +0300
Subject: [PATCH] refactor(grid-summaries): bundle styles with component

---
 .../core/styles/themes/generators/_base.scss  | 14 +--
 .../summaries/grid-summary.component.scss     |  4 +
 .../grids/summaries/summary-cell.component.ts |  4 +-
 .../grids/summaries/summary-row.component.ts  |  5 +-
 .../src/lib/grids/summaries/themes/_base.scss | 91 +++++++++++++++++++
 .../grids/summaries/themes/dark/_index.scss   |  6 ++
 .../grids/summaries/themes/dark/_tokens.scss  |  7 ++
 .../grids/summaries/themes/light/_index.scss  |  6 ++
 .../grids/summaries/themes/light/_tokens.scss |  8 ++
 .../grids/summaries/themes/shared/_index.scss |  1 +
 .../summaries/themes/shared/_indigo.scss      | 26 ++++++
 11 files changed, 163 insertions(+), 9 deletions(-)
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/grid-summary.component.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/_base.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_index.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_tokens.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/light/_index.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/light/_tokens.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_index.scss
 create mode 100644 projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_indigo.scss

diff --git a/projects/igniteui-angular/src/lib/core/styles/themes/generators/_base.scss b/projects/igniteui-angular/src/lib/core/styles/themes/generators/_base.scss
index 8514f76c6ac..87c90e5ee64 100644
--- a/projects/igniteui-angular/src/lib/core/styles/themes/generators/_base.scss
+++ b/projects/igniteui-angular/src/lib/core/styles/themes/generators/_base.scss
@@ -432,13 +432,13 @@
         @include grid($grid-theme-map);
     }
 
-    @if is-used('igx-grid-summary', $exclude) {
-        $grid-summary-theme-map: grid-summary-theme(
-            $schema: $schema,
-        );
-        $grid-summary-theme-map: meta.call($theme-handler, $grid-summary-theme-map);
-        @include grid-summary($grid-summary-theme-map);
-    }
+    // @if is-used('igx-grid-summary', $exclude) {
+    //     $grid-summary-theme-map: grid-summary-theme(
+    //         $schema: $schema,
+    //     );
+    //     $grid-summary-theme-map: meta.call($theme-handler, $grid-summary-theme-map);
+    //     @include grid-summary($grid-summary-theme-map);
+    // }
 
     @if is-used('igx-grid-toolbar', $exclude) {
         $grid-toolbar-theme-map: grid-toolbar-theme(
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/grid-summary.component.scss b/projects/igniteui-angular/src/lib/grids/summaries/grid-summary.component.scss
new file mode 100644
index 00000000000..dd684163cd7
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/grid-summary.component.scss
@@ -0,0 +1,4 @@
+@use 'themes/base';
+@use 'themes/shared';
+@use 'themes/light';
+@use 'themes/dark';
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.ts b/projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.ts
index 8f4da37f72e..507548cfecb 100644
--- a/projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.ts
+++ b/projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef, TemplateRef, booleanAttribute } from '@angular/core';
+import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef, TemplateRef, booleanAttribute, ViewEncapsulation } from '@angular/core';
 import {
     IgxSummaryOperand,
     IgxSummaryResult
@@ -13,6 +13,8 @@ import { trackByIdentity } from '../../core/utils';
     changeDetection: ChangeDetectionStrategy.OnPush,
     selector: 'igx-grid-summary-cell',
     templateUrl: './summary-cell.component.html',
+    styleUrl: 'grid-summary.component.css',
+    encapsulation: ViewEncapsulation.None,
     imports: [NgTemplateOutlet]
 })
 export class IgxSummaryCellComponent {
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.ts b/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.ts
index 6628188091d..e7e01819199 100644
--- a/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.ts
+++ b/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.ts
@@ -9,7 +9,8 @@ import {
     ChangeDetectionStrategy,
     ChangeDetectorRef,
     DoCheck,
-    Inject
+    Inject,
+    ViewEncapsulation
 } from '@angular/core';
 import { IgxSummaryResult } from './grid-summary';
 import { IgxSummaryCellComponent } from './summary-cell.component';
@@ -25,6 +26,8 @@ import { trackByIdentity } from '../../core/utils';
     changeDetection: ChangeDetectionStrategy.OnPush,
     selector: 'igx-grid-summary-row',
     templateUrl: './summary-row.component.html',
+    styleUrl: 'grid-summary.component.css',
+    encapsulation: ViewEncapsulation.None,
     providers: [IgxForOfSyncService],
     imports: [NgTemplateOutlet, IgxGridForOfDirective, IgxSummaryCellComponent, IgxGridNotGroupedPipe]
 })
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/_base.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/_base.scss
new file mode 100644
index 00000000000..c73235a93f6
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/_base.scss
@@ -0,0 +1,91 @@
+@use 'sass:map';
+@use 'igniteui-theming/sass/bem' as *;
+@use 'igniteui-theming/sass/themes' as *;
+@use 'igniteui-theming/sass/typography' as *;
+@use 'styles/themes/standalone' as *;
+@use './light/tokens' as *;
+
+$_theme: $material;
+
+@include layer(base) {
+    $cell-pin: (
+        style: var-get($_theme, 'pinned-border-width') var-get($_theme, 'pinned-border-style'),
+        color: var-get($_theme, 'pinned-border-color')
+    );
+
+    @include b(igx-grid-summary) {
+        position: relative;
+        display: flex;
+        flex-direction: column;
+        flex: 1 1 0%;
+        padding-block: 0;
+        padding-inline: pad-inline(rem(12px), rem(16px), rem(24px));
+        background: var-get($_theme, 'background-color', inherit);
+        overflow: hidden;
+        outline-style: none;
+
+        &::after {
+            position: absolute;
+            inset: 0;
+        }
+
+        &:focus::after {
+            background: var-get($_theme, 'focus-background-color');
+        }
+
+        @include e(item) {
+            display: flex;
+            align-items: center;
+            position: relative;
+            padding-block: pad(rem(0), rem(2px), rem(6px));
+            padding-inline: 0;
+            font-size: rem(12px);
+        }
+
+        @include e(label) {
+            @include ellipsis();
+
+            color: var-get($_theme, 'label-color');
+            min-width: rem(30px);
+            margin-inline-end: rem(3px);
+
+            &:hover {
+                color: var-get($_theme, 'label-hover-color');
+            }
+        }
+
+        @include e(result) {
+            @include ellipsis();
+
+            color: var-get($_theme, 'result-color');
+            font-weight: 600;
+            flex: 1 1 auto;
+            text-align: end;
+        }
+
+        @include m(pinned) {
+            position: relative;
+            z-index: 1;
+        }
+
+        @include m(pinned-last) {
+            border-inline-end: map.get($cell-pin, 'style') map.get($cell-pin, 'color');
+
+            @media print {
+                border-inline-end: map.get($cell-pin, 'style') #999;
+            }
+        }
+
+        @include m(pinned-first) {
+            border-inline-start: map.get($cell-pin, 'style') map.get($cell-pin, 'color');
+
+            @media print {
+                border-inline-start: map.get($cell-pin, 'style') #999;
+            }
+        }
+
+        @include m(fw) {
+            flex-grow: 0;
+        }
+    }
+}
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_index.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_index.scss
new file mode 100644
index 00000000000..2dfafa24720
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_index.scss
@@ -0,0 +1,6 @@
+@use 'sass:meta';
+@use 'tokens';
+@use 'styles/themes/standalone' as *;
+
+$tokens: meta.module-variables(tokens);
+@include themes(igx-grid-summary, $tokens, dark);
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_tokens.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_tokens.scss
new file mode 100644
index 00000000000..f1fa90b7050
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/dark/_tokens.scss
@@ -0,0 +1,7 @@
+@use 'igniteui-theming/sass/themes' as *;
+@use 'igniteui-theming/sass/themes/schemas/components/dark/grid-summary' as *;
+
+$material: digest-schema($dark-material-grid-summary);
+$bootstrap: digest-schema($dark-bootstrap-grid-summary);
+$fluent: digest-schema($dark-fluent-grid-summary);
+$indigo: digest-schema($dark-indigo-grid-summary);
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/light/_index.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/light/_index.scss
new file mode 100644
index 00000000000..e242334cbe7
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/light/_index.scss
@@ -0,0 +1,6 @@
+@use 'sass:meta';
+@use 'tokens';
+@use 'styles/themes/standalone' as *;
+
+$tokens: meta.module-variables(tokens);
+@include themes(igx-grid-summary, $tokens, light);
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/light/_tokens.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/light/_tokens.scss
new file mode 100644
index 00000000000..ca2a2970f98
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/light/_tokens.scss
@@ -0,0 +1,8 @@
+@use 'igniteui-theming/sass/themes' as *;
+@use 'igniteui-theming/sass/themes/schemas/components/light/grid-summary' as *;
+
+$base: digest-schema($light-grid-summary);
+$material: digest-schema($material-grid-summary);
+$bootstrap: digest-schema($bootstrap-grid-summary);
+$fluent: digest-schema($fluent-grid-summary);
+$indigo: digest-schema($indigo-grid-summary);
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_index.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_index.scss
new file mode 100644
index 00000000000..ca3dd3bc266
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_index.scss
@@ -0,0 +1 @@
+@forward 'indigo';
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_indigo.scss b/projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_indigo.scss
new file mode 100644
index 00000000000..fb95206a05c
--- /dev/null
+++ b/projects/igniteui-angular/src/lib/grids/summaries/themes/shared/_indigo.scss
@@ -0,0 +1,26 @@
+@use 'igniteui-theming/sass/bem' as *;
+@use 'igniteui-theming/sass/typography' as *;
+@use 'styles/themes/standalone' as *;
+@use '../light/tokens' as *;
+
+$_theme: $indigo;
+
+@include themed-block(igx-grid-summary, indigo) {
+    padding-inline: pad-inline(rem(8px), rem(12px), rem(16px));
+    border-top: rem(1px) solid var-get($_theme, 'border-color');
+    
+    @include e(item) {
+        min-height: sizable(rem(24px), rem(30px), rem(36px));
+        font-size: initial;
+    }
+
+    @include e(label) {
+        @include type-style('caption');
+
+        margin-inline-end: initial;
+    }
+
+    @include e(result) {
+        @include type-style('detail-2', false);
+    }
+}