From 5887b992512b11090bd542ae34acc000e9dab558 Mon Sep 17 00:00:00 2001
From: Kalyani Rajawat <kalyani_rajawat@epam.com>
Date: Tue, 4 Mar 2025 19:48:46 +0530
Subject: [PATCH 1/4] feat: added accodion component

---
 .../common/accordion/accordion.component.html | 34 +++++++++++++
 .../common/accordion/accordion.component.scss | 50 +++++++++++++++++++
 .../accordion/accordion.component.spec.ts     | 23 +++++++++
 .../common/accordion/accordion.component.ts   | 13 +++++
 ui/package-lock.json                          |  6 +++
 5 files changed, 126 insertions(+)
 create mode 100644 indigo-frontend/src/core/components/common/accordion/accordion.component.html
 create mode 100644 indigo-frontend/src/core/components/common/accordion/accordion.component.scss
 create mode 100644 indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts
 create mode 100644 indigo-frontend/src/core/components/common/accordion/accordion.component.ts

diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.html b/indigo-frontend/src/core/components/common/accordion/accordion.component.html
new file mode 100644
index 000000000..3334b92b2
--- /dev/null
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.html
@@ -0,0 +1,34 @@
+<cdk-accordion class="example-accordion">
+    @for (item of items; track item; let index = $index) {
+    <cdk-accordion-item #accordionItem="cdkAccordionItem" class="example-accordion-item">
+      <button
+        class="example-accordion-item-header"
+        (click)="accordionItem.toggle()"
+        tabindex="0"
+        [attr.id]="'accordion-header-' + index"
+        [attr.aria-expanded]="accordionItem.expanded"
+        [attr.aria-controls]="'accordion-body-' + index">
+        {{ item.title }}
+        <span class="example-accordion-item-description">
+          <em
+          [class.indicon-chevron_up]="!accordionItem.expanded"
+          [class.indicon-chevron_down]="accordionItem.expanded"
+        ></em>
+        </span>
+      </button>
+      @if(accordionItem.expanded) {
+      <div
+        class="example-accordion-item-body"
+        role="region"
+        [style.display]="accordionItem.expanded ? '' : 'none'"
+        [attr.id]="'accordion-body-' + index"
+        [attr.aria-labelledby]="'accordion-header-' + index"
+      >{{ item.description }} Lorem ipsum dolor, sit amet, consectetur adipisicing elit. Perferendis excepturi incidunt ipsum
+      deleniti labore, tempore non nam doloribus blanditiis veritatis illo autem iure aliquid ullam
+      rem tenetur deserunt velit culpa?
+      </div>
+      }
+    </cdk-accordion-item>
+    }
+  </cdk-accordion>
+  
\ No newline at end of file
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.scss b/indigo-frontend/src/core/components/common/accordion/accordion.component.scss
new file mode 100644
index 000000000..dd8990a23
--- /dev/null
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.scss
@@ -0,0 +1,50 @@
+.example-accordion {
+    display: block;
+    max-width: 500px;
+  }
+  
+  .example-accordion-item {
+    display: block;
+    border: solid 1px #ccc;
+  }
+  
+  .example-accordion-item + .example-accordion-item {
+    border-top: none;
+  }
+  
+  .example-accordion-item-header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    width: 100%;
+    background: none;
+    border: none;
+    padding: 16px;
+    text-align: left;
+  
+  }
+  
+  .example-accordion-item-description {
+    font-size: 0.85em;
+    color: #999;
+  }
+  
+  .example-accordion-item-body {
+    padding: 16px;
+  }
+  
+  .example-accordion-item-header:hover {
+    cursor: pointer;
+    background-color: #eee;
+  }
+  
+  .example-accordion-item:first-child {
+    border-top-left-radius: 4px;
+    border-top-right-radius: 4px;
+  }
+  
+  .example-accordion-item:last-child {
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+  }
+  
\ No newline at end of file
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts b/indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts
new file mode 100644
index 000000000..a3f455b33
--- /dev/null
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AccordionComponent } from './accordion.component';
+
+describe('AccordionComponent', () => {
+  let component: AccordionComponent;
+  let fixture: ComponentFixture<AccordionComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AccordionComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(AccordionComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.ts b/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
new file mode 100644
index 000000000..ca018286f
--- /dev/null
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import {CdkAccordionModule} from '@angular/cdk/accordion';
+
+@Component({
+  selector: 'app-accordion',
+  imports: [CdkAccordionModule],
+  templateUrl: './accordion.component.html',
+  styleUrl: './accordion.component.scss'
+})
+export class AccordionComponent {
+  items = [{title: 'Item 1', description: 'Description'}, {title: 'Item 2', description: 'Description'}, {title: 'Item 3',description: 'Description'}, {title: 'Item 4',description: 'Description'}, {title: 'Item 5', description: 'Description'}];
+  expandedIndex = 0;
+}
diff --git a/ui/package-lock.json b/ui/package-lock.json
index b08bb2ae2..1bc26c8f3 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -1601,6 +1601,12 @@
       "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
       "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
     },
+    "node_modules/Blob.js": {
+      "name": "blob-tmp",
+      "version": "1.0.0",
+      "resolved": "git+ssh://git@github.com/alferov/Blob.js.git#27f997cefd4000a664ce1768591fe282c6a02930",
+      "license": "MIT"
+    },
     "node_modules/bluebird": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",

From 3d5ece69ee563a59a74b9a8ff3f0b01e3a0fc00e Mon Sep 17 00:00:00 2001
From: Kalyani Rajawat <kalyani_rajawat@epam.com>
Date: Fri, 7 Mar 2025 19:21:31 +0530
Subject: [PATCH 2/4] converted scss to tailwind css and added description of
 accordion to dynamic html

---
 .../common/accordion/accordion.component.html | 54 ++++++++-----------
 .../common/accordion/accordion.component.scss | 50 -----------------
 .../accordion/accordion.component.spec.ts     | 23 --------
 .../common/accordion/accordion.component.ts   |  7 +--
 4 files changed, 25 insertions(+), 109 deletions(-)
 delete mode 100644 indigo-frontend/src/core/components/common/accordion/accordion.component.scss
 delete mode 100644 indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts

diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.html b/indigo-frontend/src/core/components/common/accordion/accordion.component.html
index 3334b92b2..091902d15 100644
--- a/indigo-frontend/src/core/components/common/accordion/accordion.component.html
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.html
@@ -1,34 +1,22 @@
-<cdk-accordion class="example-accordion">
-    @for (item of items; track item; let index = $index) {
-    <cdk-accordion-item #accordionItem="cdkAccordionItem" class="example-accordion-item">
-      <button
-        class="example-accordion-item-header"
-        (click)="accordionItem.toggle()"
-        tabindex="0"
-        [attr.id]="'accordion-header-' + index"
-        [attr.aria-expanded]="accordionItem.expanded"
-        [attr.aria-controls]="'accordion-body-' + index">
-        {{ item.title }}
-        <span class="example-accordion-item-description">
-          <em
-          [class.indicon-chevron_up]="!accordionItem.expanded"
-          [class.indicon-chevron_down]="accordionItem.expanded"
-        ></em>
-        </span>
-      </button>
-      @if(accordionItem.expanded) {
-      <div
-        class="example-accordion-item-body"
-        role="region"
-        [style.display]="accordionItem.expanded ? '' : 'none'"
-        [attr.id]="'accordion-body-' + index"
-        [attr.aria-labelledby]="'accordion-header-' + index"
-      >{{ item.description }} Lorem ipsum dolor, sit amet, consectetur adipisicing elit. Perferendis excepturi incidunt ipsum
-      deleniti labore, tempore non nam doloribus blanditiis veritatis illo autem iure aliquid ullam
-      rem tenetur deserunt velit culpa?
-      </div>
-      }
-    </cdk-accordion-item>
+<cdk-accordion class="block max-w-[500px]">
+  @for (item of items; track item; let index = $index) {
+  <cdk-accordion-item #accordionItem="cdkAccordionItem"
+    class="block border border-gray-300 first:rounded-t-lg last:rounded-b-lg">
+    <button
+      class="flex items-center justify-between w-full bg-none border-none p-4 text-left hover:cursor-pointer hover:bg-gray-200"
+      (click)="accordionItem.toggle()" tabindex="0" [attr.id]="'accordion-header-' + index"
+      [attr.aria-expanded]="accordionItem.expanded" [attr.aria-controls]="'accordion-body-' + index">
+      {{ item.title }}
+      <span class="text-sm text-gray-600">
+        <em [class.indicon-chevron_up]="!accordionItem.expanded"
+          [class.indicon-chevron_down]="accordionItem.expanded"></em>
+      </span>
+    </button>
+    @if(accordionItem.expanded) {
+    <div class="p-4" role="region" [style.display]="accordionItem.expanded ? '' : 'none'"
+      [attr.id]="'accordion-body-' + index" [attr.aria-labelledby]="'accordion-header-' + index" [innerHTML]="item.description">
+    </div>
     }
-  </cdk-accordion>
-  
\ No newline at end of file
+  </cdk-accordion-item>
+  }
+</cdk-accordion>
\ No newline at end of file
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.scss b/indigo-frontend/src/core/components/common/accordion/accordion.component.scss
deleted file mode 100644
index dd8990a23..000000000
--- a/indigo-frontend/src/core/components/common/accordion/accordion.component.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-.example-accordion {
-    display: block;
-    max-width: 500px;
-  }
-  
-  .example-accordion-item {
-    display: block;
-    border: solid 1px #ccc;
-  }
-  
-  .example-accordion-item + .example-accordion-item {
-    border-top: none;
-  }
-  
-  .example-accordion-item-header {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    width: 100%;
-    background: none;
-    border: none;
-    padding: 16px;
-    text-align: left;
-  
-  }
-  
-  .example-accordion-item-description {
-    font-size: 0.85em;
-    color: #999;
-  }
-  
-  .example-accordion-item-body {
-    padding: 16px;
-  }
-  
-  .example-accordion-item-header:hover {
-    cursor: pointer;
-    background-color: #eee;
-  }
-  
-  .example-accordion-item:first-child {
-    border-top-left-radius: 4px;
-    border-top-right-radius: 4px;
-  }
-  
-  .example-accordion-item:last-child {
-    border-bottom-left-radius: 4px;
-    border-bottom-right-radius: 4px;
-  }
-  
\ No newline at end of file
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts b/indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts
deleted file mode 100644
index a3f455b33..000000000
--- a/indigo-frontend/src/core/components/common/accordion/accordion.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { AccordionComponent } from './accordion.component';
-
-describe('AccordionComponent', () => {
-  let component: AccordionComponent;
-  let fixture: ComponentFixture<AccordionComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [AccordionComponent]
-    })
-    .compileComponents();
-
-    fixture = TestBed.createComponent(AccordionComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.ts b/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
index ca018286f..f2abcf1f7 100644
--- a/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
@@ -4,10 +4,11 @@ import {CdkAccordionModule} from '@angular/cdk/accordion';
 @Component({
   selector: 'app-accordion',
   imports: [CdkAccordionModule],
-  templateUrl: './accordion.component.html',
-  styleUrl: './accordion.component.scss'
+  templateUrl: './accordion.component.html'
 })
 export class AccordionComponent {
-  items = [{title: 'Item 1', description: 'Description'}, {title: 'Item 2', description: 'Description'}, {title: 'Item 3',description: 'Description'}, {title: 'Item 4',description: 'Description'}, {title: 'Item 5', description: 'Description'}];
+  items = [{title: 'Item 1', description: '<table><thead><tr><th>Header 1</th><th>Header 2</th><th>Header 3</th></tr></thead><tbody><tr><td>Data 1</td><td>Data 2</td><td>Data 3</td></tr></tbody></table>'},
+    {title: 'Item 2', description: '<div class="text-lg text-gray-600">Description</div>'}
+  ];
   expandedIndex = 0;
 }

From a84243f5a0c9f00ae4d657821cb1787745270715 Mon Sep 17 00:00:00 2001
From: Kalyani Rajawat <kalyani_rajawat@epam.com>
Date: Fri, 7 Mar 2025 19:30:35 +0530
Subject: [PATCH 3/4] reverted package-lock.json changes

---
 ui/package-lock.json | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/ui/package-lock.json b/ui/package-lock.json
index 1bc26c8f3..b08bb2ae2 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -1601,12 +1601,6 @@
       "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
       "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
     },
-    "node_modules/Blob.js": {
-      "name": "blob-tmp",
-      "version": "1.0.0",
-      "resolved": "git+ssh://git@github.com/alferov/Blob.js.git#27f997cefd4000a664ce1768591fe282c6a02930",
-      "license": "MIT"
-    },
     "node_modules/bluebird": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",

From e2263fa7b095a03d2361877535b3df4ce161839b Mon Sep 17 00:00:00 2001
From: Kalyani Rajawat <kalyani_rajawat@epam.com>
Date: Thu, 13 Mar 2025 20:16:41 +0530
Subject: [PATCH 4/4] added ng content instead of innerhtml and removed items
 static from here

---
 .../common/accordion/accordion.component.html     | 15 +++++++--------
 .../common/accordion/accordion.component.ts       | 10 ++++------
 2 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.html b/indigo-frontend/src/core/components/common/accordion/accordion.component.html
index 091902d15..76950677d 100644
--- a/indigo-frontend/src/core/components/common/accordion/accordion.component.html
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.html
@@ -1,22 +1,21 @@
 <cdk-accordion class="block max-w-[500px]">
-  @for (item of items; track item; let index = $index) {
   <cdk-accordion-item #accordionItem="cdkAccordionItem"
     class="block border border-gray-300 first:rounded-t-lg last:rounded-b-lg">
     <button
       class="flex items-center justify-between w-full bg-none border-none p-4 text-left hover:cursor-pointer hover:bg-gray-200"
-      (click)="accordionItem.toggle()" tabindex="0" [attr.id]="'accordion-header-' + index"
-      [attr.aria-expanded]="accordionItem.expanded" [attr.aria-controls]="'accordion-body-' + index">
-      {{ item.title }}
+      (click)="accordionItem.toggle()" tabindex="0" [attr.id]="'accordion-header-'"
+      [attr.aria-expanded]="accordionItem.expanded" [attr.aria-controls]="'accordion-body-'">
+      <ng-content select="header"></ng-content>
       <span class="text-sm text-gray-600">
-        <em [class.indicon-chevron_up]="!accordionItem.expanded"
-          [class.indicon-chevron_down]="accordionItem.expanded"></em>
+        <em [class.indicon-chevron_up]="accordionItem.expanded"
+          [class.indicon-chevron_down]="!accordionItem.expanded"></em>
       </span>
     </button>
     @if(accordionItem.expanded) {
     <div class="p-4" role="region" [style.display]="accordionItem.expanded ? '' : 'none'"
-      [attr.id]="'accordion-body-' + index" [attr.aria-labelledby]="'accordion-header-' + index" [innerHTML]="item.description">
+      [attr.id]="'accordion-body-'" [attr.aria-labelledby]="'accordion-header-'">
+        <ng-content select="body"></ng-content>
     </div>
     }
   </cdk-accordion-item>
-  }
 </cdk-accordion>
\ No newline at end of file
diff --git a/indigo-frontend/src/core/components/common/accordion/accordion.component.ts b/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
index f2abcf1f7..a7aabc5b0 100644
--- a/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
+++ b/indigo-frontend/src/core/components/common/accordion/accordion.component.ts
@@ -1,5 +1,5 @@
-import { Component } from '@angular/core';
-import {CdkAccordionModule} from '@angular/cdk/accordion';
+import { Component, ContentChild, ElementRef, TemplateRef } from '@angular/core';
+import { CdkAccordionModule } from '@angular/cdk/accordion';
 
 @Component({
   selector: 'app-accordion',
@@ -7,8 +7,6 @@ import {CdkAccordionModule} from '@angular/cdk/accordion';
   templateUrl: './accordion.component.html'
 })
 export class AccordionComponent {
-  items = [{title: 'Item 1', description: '<table><thead><tr><th>Header 1</th><th>Header 2</th><th>Header 3</th></tr></thead><tbody><tr><td>Data 1</td><td>Data 2</td><td>Data 3</td></tr></tbody></table>'},
-    {title: 'Item 2', description: '<div class="text-lg text-gray-600">Description</div>'}
-  ];
-  expandedIndex = 0;
+  @ContentChild('header') header: TemplateRef<unknown> | null = null;
+  @ContentChild('body') body: TemplateRef<unknown> | null = null;
 }