From e090300b2b2b4c8d84ca20a26c870699e2996a80 Mon Sep 17 00:00:00 2001
From: Alexander Reifschneider <alexander.reifschneider@mgm-tp.com>
Date: Wed, 2 Apr 2025 10:46:18 +0200
Subject: [PATCH] OZG-7707 Replace some icons in alfa

---
 alfa-client/apps/alfa/project.json            | 35 +++++++------------
 alfa-client/apps/alfa/src/app/app.module.ts   |  2 ++
 .../accessibility-button.component.spec.ts    |  9 +++--
 .../accessibility-button.component.ts         |  7 ++--
 alfa-client/libs/design-system/src/index.ts   |  2 --
 .../accessibility-icon.component.spec.ts      | 21 -----------
 .../accessibility-icon.component.ts           | 33 -----------------
 .../accessibility-icon.stories.ts             | 27 --------------
 .../account-circle-icon.component.spec.ts     | 21 -----------
 .../account-circle-icon.component.ts          | 27 --------------
 .../account-circle-icon.stories.ts            | 27 --------------
 ...er-profile-button-container.component.html |  2 +-
 ...profile-button-container.component.spec.ts |  4 +--
 .../src/lib/user-profile.module.ts            |  4 +--
 14 files changed, 31 insertions(+), 190 deletions(-)
 delete mode 100644 alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.spec.ts
 delete mode 100644 alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.ts
 delete mode 100644 alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.stories.ts
 delete mode 100644 alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.spec.ts
 delete mode 100644 alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.ts
 delete mode 100644 alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.stories.ts

diff --git a/alfa-client/apps/alfa/project.json b/alfa-client/apps/alfa/project.json
index 971b4de26c..3827d3099a 100644
--- a/alfa-client/apps/alfa/project.json
+++ b/alfa-client/apps/alfa/project.json
@@ -14,9 +14,7 @@
     "build": {
       "executor": "@angular-devkit/build-angular:browser",
       "options": {
-        "allowedCommonJsDependencies": [
-          "file-saver"
-        ],
+        "allowedCommonJsDependencies": ["file-saver"],
         "outputPath": "dist/apps/alfa",
         "index": "apps/alfa/src/index.html",
         "main": "apps/alfa/src/main.ts",
@@ -34,11 +32,14 @@
             "input": "libs/ui/src/lib/assets",
             "glob": "**/*",
             "output": "assets/icons"
+          },
+          {
+            "input": "libs/design-system/src/assets",
+            "glob": "**/*",
+            "output": "assets/icons"
           }
         ],
-        "styles": [
-          "apps/alfa/src/styles/main.scss"
-        ],
+        "styles": ["apps/alfa/src/styles/main.scss"],
         "scripts": [],
         "stylePreprocessorOptions": {
           "includePaths": [
@@ -85,9 +86,7 @@
           ]
         }
       },
-      "outputs": [
-        "{options.outputPath}"
-      ]
+      "outputs": ["{options.outputPath}"]
     },
     "serve": {
       "executor": "@angular-devkit/build-angular:dev-server",
@@ -109,9 +108,7 @@
     },
     "lint": {
       "executor": "@nx/eslint:lint",
-      "outputs": [
-        "{options.outputFile}"
-      ]
+      "outputs": ["{options.outputFile}"]
     },
     "test": {
       "executor": "@nx/jest:jest",
@@ -119,9 +116,7 @@
         "tsConfig": "apps/alfa/tsconfig.spec.json",
         "jestConfig": "apps/alfa/jest.config.ts"
       },
-      "outputs": [
-        "{workspaceRoot}/coverage/apps/alfa"
-      ]
+      "outputs": ["{workspaceRoot}/coverage/apps/alfa"]
     },
     "container": {
       "executor": "@nx-tools/nx-container:build",
@@ -129,15 +124,11 @@
         "engine": "docker",
         "push": false,
         "metadata": {
-          "images": [
-            "docker.ozg-sh.de/alfa-client"
-          ],
+          "images": ["docker.ozg-sh.de/alfa-client"],
           "load": true,
-          "tags": [
-            "build-latest"
-          ]
+          "tags": ["build-latest"]
         }
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/alfa-client/apps/alfa/src/app/app.module.ts b/alfa-client/apps/alfa/src/app/app.module.ts
index 566ebc0b3f..9d8f546ca3 100644
--- a/alfa-client/apps/alfa/src/app/app.module.ts
+++ b/alfa-client/apps/alfa/src/app/app.module.ts
@@ -45,6 +45,7 @@ import { StoreRouterConnectingModule } from '@ngrx/router-store';
 import { StoreModule } from '@ngrx/store';
 import { StoreDevtoolsModule } from '@ngrx/store-devtools';
 import { OAuthModule } from 'angular-oauth2-oidc';
+import { provideAngularSvgIcon } from 'angular-svg-icon';
 import { de } from 'date-fns/locale';
 import { HttpBinaryFileInterceptor } from '../../../../libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor';
 import { HttpXsrfInterceptor } from '../../../../libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor';
@@ -159,6 +160,7 @@ const routes: Routes = [
       deps: [MAT_DATE_LOCALE],
     },
     provideHttpClient(withInterceptorsFromDi()),
+    provideAngularSvgIcon(),
   ],
   bootstrap: [AppComponent],
 })
diff --git a/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.spec.ts b/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.spec.ts
index 8b150294c1..646056eb5e 100644
--- a/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.spec.ts
+++ b/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.spec.ts
@@ -1,5 +1,5 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { LinkComponent, TooltipDirective } from '@ods/system';
+import { IconComponent, LinkComponent, TooltipDirective } from '@ods/system';
 import { MockComponent, MockDirective } from 'ng-mocks';
 import { AccessibilityButtonComponent } from './accessibility-button.component';
 
@@ -9,7 +9,12 @@ describe('AccessibilityButtonComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      imports: [AccessibilityButtonComponent, MockComponent(LinkComponent), MockDirective(TooltipDirective)],
+      imports: [
+        AccessibilityButtonComponent,
+        MockComponent(LinkComponent),
+        MockComponent(IconComponent),
+        MockDirective(TooltipDirective),
+      ],
     }).compileComponents();
 
     fixture = TestBed.createComponent(AccessibilityButtonComponent);
diff --git a/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.ts b/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.ts
index edc5070fab..90593eb3ce 100644
--- a/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.ts
+++ b/alfa-client/libs/common/src/lib/accessibility-button/accessibility-button.component.ts
@@ -1,13 +1,14 @@
 import { CommonModule } from '@angular/common';
 import { Component, Input } from '@angular/core';
-import { AccessibilityIconComponent, LinkComponent, TooltipDirective } from '@ods/system';
+import { LinkComponent, TooltipDirective } from '@ods/system';
+import { IconComponent } from '../../../../design-system/src/lib/icon/icon.component';
 
 @Component({
   selector: 'common-accessibility-button',
   standalone: true,
-  imports: [CommonModule, AccessibilityIconComponent, LinkComponent, TooltipDirective],
+  imports: [CommonModule, LinkComponent, TooltipDirective, IconComponent],
   template: `<ods-link [url]="url" [linkTestId]="linkTestId" tooltip="Barrierefreiheit" [openInNewTab]="true">
-    <ods-accessibility-icon size="large" />
+    <ods-icon name="accessibility" size="large" class="fill-neutral-500 dark:fill-neutral-400" />
   </ods-link>`,
 })
 export class AccessibilityButtonComponent {
diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts
index 0c5d7568d8..05d5fe525f 100644
--- a/alfa-client/libs/design-system/src/index.ts
+++ b/alfa-client/libs/design-system/src/index.ts
@@ -45,8 +45,6 @@ export * from './lib/form/textarea/textarea.component';
 export * from './lib/forwarding-item/forwarding-item-info/forwarding-item-info.component';
 export * from './lib/forwarding-item/forwarding-item.component';
 export * from './lib/icon/icon.component';
-export * from './lib/icons/accessibility-icon/accessibility-icon.component';
-export * from './lib/icons/account-circle-icon/account-circle-icon.component';
 export * from './lib/icons/admin-logo-icon/admin-logo-icon.component';
 export * from './lib/icons/archive-icon/archive-icon.component';
 export * from './lib/icons/arrow-back-icon/arrow-back-icon.component';
diff --git a/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.spec.ts
deleted file mode 100644
index 8a1735897e..0000000000
--- a/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.spec.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { AccessibilityIconComponent } from './accessibility-icon.component';
-
-describe('AccessibilityIconComponent', () => {
-  let component: AccessibilityIconComponent;
-  let fixture: ComponentFixture<AccessibilityIconComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [AccessibilityIconComponent],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(AccessibilityIconComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.ts
deleted file mode 100644
index a8c309a368..0000000000
--- a/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.component.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { CommonModule } from '@angular/common';
-import { Component, Input } from '@angular/core';
-import { twMerge } from 'tailwind-merge';
-import { iconVariants, IconVariants } from '../iconVariants';
-
-@Component({
-  selector: 'ods-accessibility-icon',
-  standalone: true,
-  imports: [CommonModule],
-  template: `<svg
-    viewBox="0 0 26 26"
-    [ngClass]="[twMerge(iconVariants({ size }), 'fill-neutral-500 dark:fill-neutral-400', class)]"
-    xmlns="http://www.w3.org/2000/svg"
-    aria-hidden="true"
-  >
-    <rect x="2" y="2" width="22" height="22" rx="11" />
-    <path
-      d="M13 8.87508C12.6828 8.87508 12.3726 8.781 12.1088 8.60473C11.845 8.42846 11.6394 8.17793 11.518 7.8848C11.3966 7.59168 11.3648 7.26914 11.4267 6.95796C11.4886 6.64678 11.6414 6.36095 11.8657 6.1366C12.0901 5.91225 12.3759 5.75947 12.6871 5.69757C12.9983 5.63568 13.3208 5.66744 13.6139 5.78886C13.907 5.91027 14.1576 6.11588 14.3339 6.37969C14.5101 6.64349 14.6042 6.95364 14.6042 7.27092C14.6038 7.69623 14.4346 8.10399 14.1339 8.40473C13.8331 8.70547 13.4253 8.87463 13 8.87508Z"
-      class="fill-whitetext"
-    />
-    <path
-      d="M18.0417 8.898L18.0288 8.90144L18.0168 8.90516C17.9881 8.91318 17.9595 8.92178 17.9308 8.93066C17.3977 9.08706 14.8105 9.81638 12.9877 9.81638C11.2939 9.81638 8.94064 9.18618 8.18783 8.97219C8.1129 8.94322 8.03639 8.91855 7.95866 8.89829C7.41439 8.75506 7.04199 9.30792 7.04199 9.81323C7.04199 10.3137 7.49173 10.552 7.94577 10.723V10.731L10.6734 11.583C10.9521 11.6898 11.0266 11.799 11.063 11.8935C11.1813 12.1969 11.0868 12.7976 11.0533 13.0072L10.8871 14.2963L9.96501 19.3434C9.96215 19.3572 9.95957 19.3712 9.95728 19.3855L9.95069 19.4219C9.88423 19.8845 10.224 20.3334 10.8674 20.3334C11.4288 20.3334 11.6766 19.9458 11.784 19.4185C11.784 19.4185 12.5861 14.9047 12.9871 14.9047C13.3882 14.9047 14.2143 19.4185 14.2143 19.4185C14.3218 19.9458 14.5695 20.3334 15.131 20.3334C15.7761 20.3334 16.1158 19.8825 16.0477 19.4185C16.0417 19.3789 16.0345 19.34 16.0259 19.3022L15.0912 14.2969L14.9253 13.0078C14.8053 12.257 14.9018 12.0089 14.9345 11.9508L14.9368 11.9465C14.9677 11.8892 15.1087 11.7609 15.4375 11.6374L17.995 10.7434C18.0107 10.7392 18.0262 10.7342 18.0414 10.7285C18.4998 10.5566 18.9581 10.3188 18.9581 9.81381C18.9581 9.30878 18.586 8.75506 18.0417 8.898Z"
-      class="fill-whitetext"
-    />
-  </svg>`,
-})
-export class AccessibilityIconComponent {
-  @Input() size: IconVariants['size'] = 'medium';
-  @Input() class: string = '';
-
-  readonly iconVariants = iconVariants;
-  readonly twMerge = twMerge;
-}
diff --git a/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.stories.ts
deleted file mode 100644
index 58485f4983..0000000000
--- a/alfa-client/libs/design-system/src/lib/icons/accessibility-icon/accessibility-icon.stories.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { Meta, StoryObj } from '@storybook/angular';
-
-import { AccessibilityIconComponent } from './accessibility-icon.component';
-
-const meta: Meta<AccessibilityIconComponent> = {
-  title: 'Icons/Accessibility icon',
-  component: AccessibilityIconComponent,
-  excludeStories: /.*Data$/,
-  tags: ['autodocs'],
-};
-
-export default meta;
-type Story = StoryObj<AccessibilityIconComponent>;
-
-export const Default: Story = {
-  args: { size: 'large' },
-  argTypes: {
-    size: {
-      control: 'select',
-      options: ['small', 'medium', 'large', 'extra-large', 'full'],
-      description: 'Size of icon. Property "full" means 100%',
-      table: {
-        defaultValue: { summary: 'medium' },
-      },
-    },
-  },
-};
diff --git a/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.spec.ts
deleted file mode 100644
index e50bb31c69..0000000000
--- a/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.spec.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { AccountCircleIconComponent } from './account-circle-icon.component';
-
-describe('AccountCircleIconComponent', () => {
-  let component: AccountCircleIconComponent;
-  let fixture: ComponentFixture<AccountCircleIconComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [AccountCircleIconComponent],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(AccountCircleIconComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.ts
deleted file mode 100644
index b762c6cbe3..0000000000
--- a/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.component.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { CommonModule } from '@angular/common';
-import { Component, Input } from '@angular/core';
-import { twMerge } from 'tailwind-merge';
-import { iconVariants, IconVariants } from '../iconVariants';
-
-@Component({
-  selector: 'ods-account-circle-icon',
-  standalone: true,
-  imports: [CommonModule],
-  template: `<svg
-    viewBox="0 0 24 24"
-    xmlns="http://www.w3.org/2000/svg"
-    [ngClass]="[twMerge(iconVariants({ size }), 'fill-primary', class)]"
-    aria-hidden="true"
-  >
-    <path
-      d="M12.75 2C7.23 2 2.75 6.48 2.75 12C2.75 17.52 7.23 22 12.75 22C18.27 22 22.75 17.52 22.75 12C22.75 6.48 18.27 2 12.75 2ZM7.82 18.28C8.25 17.38 10.87 16.5 12.75 16.5C14.63 16.5 17.26 17.38 17.68 18.28C16.32 19.36 14.61 20 12.75 20C10.89 20 9.18 19.36 7.82 18.28ZM19.11 16.83C17.68 15.09 14.21 14.5 12.75 14.5C11.29 14.5 7.82 15.09 6.39 16.83C5.37 15.49 4.75 13.82 4.75 12C4.75 7.59 8.34 4 12.75 4C17.16 4 20.75 7.59 20.75 12C20.75 13.82 20.13 15.49 19.11 16.83ZM12.75 6C10.81 6 9.25 7.56 9.25 9.5C9.25 11.44 10.81 13 12.75 13C14.69 13 16.25 11.44 16.25 9.5C16.25 7.56 14.69 6 12.75 6ZM12.75 11C11.92 11 11.25 10.33 11.25 9.5C11.25 8.67 11.92 8 12.75 8C13.58 8 14.25 8.67 14.25 9.5C14.25 10.33 13.58 11 12.75 11Z"
-    />
-  </svg>`,
-})
-export class AccountCircleIconComponent {
-  @Input() size: IconVariants['size'] = 'medium';
-  @Input() class: string = '';
-
-  readonly iconVariants = iconVariants;
-  readonly twMerge = twMerge;
-}
diff --git a/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.stories.ts
deleted file mode 100644
index 46eae30d49..0000000000
--- a/alfa-client/libs/design-system/src/lib/icons/account-circle-icon/account-circle-icon.stories.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { Meta, StoryObj } from '@storybook/angular';
-
-import { AccountCircleIconComponent } from './account-circle-icon.component';
-
-const meta: Meta<AccountCircleIconComponent> = {
-  title: 'Icons/Account circle icon',
-  component: AccountCircleIconComponent,
-  excludeStories: /.*Data$/,
-  tags: ['autodocs'],
-};
-
-export default meta;
-type Story = StoryObj<AccountCircleIconComponent>;
-
-export const Default: Story = {
-  args: { size: 'large' },
-  argTypes: {
-    size: {
-      control: 'select',
-      options: ['small', 'medium', 'large', 'extra-large', 'full'],
-      description: 'Size of icon. Property "full" means 100%',
-      table: {
-        defaultValue: { summary: 'medium' },
-      },
-    },
-  },
-};
diff --git a/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html b/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html
index e1e8b8b763..e116c9cf44 100644
--- a/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html
+++ b/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html
@@ -33,6 +33,6 @@
     size="fit"
     (clickEmitter)="showUserProfileSearch()"
   >
-    <ods-account-circle-icon icon class="fill-text" />
+    <ods-icon icon name="account-circle" color="text" />
   </ods-button-with-spinner>
 }
diff --git a/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts b/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts
index a99b9f0846..61a631a8c6 100644
--- a/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts
+++ b/alfa-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts
@@ -27,7 +27,7 @@ import { UserProfileService } from '@alfa-client/user-profile-shared';
 import { VorgangHeaderLinkRel } from '@alfa-client/vorgang-shared';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ButtonWithSpinnerComponent } from '@ods/component';
-import { AccountCircleIconComponent, TooltipDirective } from '@ods/system';
+import { IconComponent, TooltipDirective } from '@ods/system';
 import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
 import { MockComponent, MockDirective } from 'ng-mocks';
 import { AssignUserProfileButtonContainerComponent } from './assign-user-profile-button-container.component';
@@ -46,7 +46,7 @@ describe('AssignUserProfileButtonContainerComponent', () => {
         AssignUserProfileButtonContainerComponent,
         HasLinkPipe,
         MockComponent(ButtonWithSpinnerComponent),
-        MockComponent(AccountCircleIconComponent),
+        MockComponent(IconComponent),
         MockDirective(TooltipDirective),
       ],
       providers: [
diff --git a/alfa-client/libs/user-profile/src/lib/user-profile.module.ts b/alfa-client/libs/user-profile/src/lib/user-profile.module.ts
index 0f595e41c3..1f8af984ac 100644
--- a/alfa-client/libs/user-profile/src/lib/user-profile.module.ts
+++ b/alfa-client/libs/user-profile/src/lib/user-profile.module.ts
@@ -38,11 +38,11 @@ import { MatTooltip } from '@angular/material/tooltip';
 import { RouterModule } from '@angular/router';
 import { ButtonWithSpinnerComponent } from '@ods/component';
 import {
-  AccountCircleIconComponent,
   DropdownMenuButtonItemComponent,
   DropdownMenuComponent,
   DropdownMenuItemComponent,
   ErrorIconComponent,
+  IconComponent,
   LogoutIconComponent,
   UserIconComponent as OdsUserIconComponent,
   TooltipDirective,
@@ -88,7 +88,7 @@ import { UserProfileComponent } from './user-profile/user-profile.component';
     DropdownMenuItemComponent,
     DropdownMenuButtonItemComponent,
     ButtonWithSpinnerComponent,
-    AccountCircleIconComponent,
+    IconComponent,
     TooltipDirective,
   ],
   declarations: [
-- 
GitLab