From 9ed2911ee0516b3bd3bacbebf69ab1ad82f98513 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 2 May 2024 11:41:03 +0200
Subject: [PATCH] OZG-5592 design-system add input, textarea

---
 .../apps/demo/src/app/app.component.html      | 22 +++++++++++++
 .../apps/demo/src/app/app.component.ts        |  4 +++
 alfa-client/libs/design-system/src/index.ts   |  2 ++
 .../text-input/text-input.component.spec.ts   | 21 +++++++++++++
 .../form/text-input/text-input.component.ts   | 29 +++++++++++++++++
 .../form/textarea/textarea.component.spec.ts  | 21 +++++++++++++
 .../lib/form/textarea/textarea.component.ts   | 31 +++++++++++++++++++
 alfa-client/tsconfig.base.json                |  4 +--
 8 files changed, 132 insertions(+), 2 deletions(-)
 create mode 100644 alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts
 create mode 100644 alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts
 create mode 100644 alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts
 create mode 100644 alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts

diff --git a/alfa-client/apps/demo/src/app/app.component.html b/alfa-client/apps/demo/src/app/app.component.html
index 91e8c3f79a..458cfa1ddb 100644
--- a/alfa-client/apps/demo/src/app/app.component.html
+++ b/alfa-client/apps/demo/src/app/app.component.html
@@ -15,6 +15,28 @@
     </div>
     <main class="flex-auto bg-background-50 p-6">
       <form id="antrag_bescheiden_form" [formGroup]="exampleForm">
+        <div class="mb-6">
+          <label
+            for="default-input"
+            class="mb-2 block text-sm font-medium text-gray-900 dark:text-white"
+            >Default input</label
+          >
+          <input
+            type="text"
+            id="default-input"
+            class="block w-full rounded-lg border border-gray-300 bg-background-50 p-2.5 text-base text-text focus:border-blue-500 focus:ring-blue-500"
+          />
+        </div>
+        <div>
+          <ods-text-input
+            id="test-input-id"
+            label="Betreff"
+            placeholder="hier muss der Betreff rein"
+          />
+        </div>
+        <div>
+          <ods-textarea />
+        </div>
         <div class="my-10 flex gap-8">
           <ods-radio-button-card
             label="bewilligt"
diff --git a/alfa-client/apps/demo/src/app/app.component.ts b/alfa-client/apps/demo/src/app/app.component.ts
index 634638e056..35c94d3162 100644
--- a/alfa-client/apps/demo/src/app/app.component.ts
+++ b/alfa-client/apps/demo/src/app/app.component.ts
@@ -11,6 +11,8 @@ import {
   IconComponent,
   RadioButtonCardComponent,
   SpinnerIconComponent,
+  TextInputComponent,
+  TextareaComponent,
 } from '@ods/system';
 
 import { BescheidDialogExampleComponent } from './components/bescheid-dialog/bescheid-dialog.component';
@@ -36,6 +38,8 @@ import { CustomStepperComponent } from './components/cdk-demo/custom-stepper.com
     ReactiveFormsModule,
     IconComponent,
     SpinnerIconComponent,
+    TextareaComponent,
+    TextInputComponent,
   ],
   selector: 'app-root',
   templateUrl: './app.component.html',
diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts
index f7dfe57c3c..00e8a89ec6 100644
--- a/alfa-client/libs/design-system/src/index.ts
+++ b/alfa-client/libs/design-system/src/index.ts
@@ -3,6 +3,8 @@ export * from './lib/button-card/button-card.component';
 export * from './lib/button/button.component';
 export * from './lib/form/file-upload-button/file-upload-button.component';
 export * from './lib/form/radio-button-card/radio-button-card.component';
+export * from './lib/form/text-input/text-input.component';
+export * from './lib/form/textarea/textarea.component';
 export * from './lib/icon/icon.component';
 export * from './lib/icons/bescheid-generate-icon/bescheid-generate-icon.component';
 export * from './lib/icons/bescheid-upload-icon/bescheid-upload-icon.component';
diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts
new file mode 100644
index 0000000000..e154ebed4a
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { TextInputComponent } from './text-input.component';
+
+describe('TextInputComponent', () => {
+  let component: TextInputComponent;
+  let fixture: ComponentFixture<TextInputComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [TextInputComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TextInputComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts
new file mode 100644
index 0000000000..634781aaef
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts
@@ -0,0 +1,29 @@
+import { CommonModule } from '@angular/common';
+import { Component, Input } from '@angular/core';
+
+@Component({
+  selector: 'ods-text-input',
+  standalone: true,
+  imports: [CommonModule],
+  template: `
+    <div>
+      <label [for]="id" class="block text-sm font-medium leading-6 text-gray-900">{{
+        label
+      }}</label>
+      <div class="mt-2">
+        <input
+          type="text"
+          name="email"
+          [id]="id"
+          class="block w-full rounded-lg border border-gray-300 bg-background-50 p-2.5 text-base text-text focus:border-blue-500 focus:ring-blue-500"
+          [placeholder]="placeholder"
+        />
+      </div>
+    </div>
+  `,
+})
+export class TextInputComponent {
+  @Input({ required: true }) id!: string;
+  @Input() label: string = '';
+  @Input() placeholder: string = '';
+}
diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts
new file mode 100644
index 0000000000..31abe191e8
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { TextareaComponent } from './textarea.component';
+
+describe('TextareaComponent', () => {
+  let component: TextareaComponent;
+  let fixture: ComponentFixture<TextareaComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [TextareaComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TextareaComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts
new file mode 100644
index 0000000000..3ec25e20a3
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component, Input } from '@angular/core';
+
+@Component({
+  selector: 'ods-textarea',
+  standalone: true,
+  imports: [CommonModule],
+  template: `
+    <div class="mt-2">
+      <textarea
+        rows="4"
+        name="comment"
+        id="comment"
+        class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
+      ></textarea>
+      <label for="description" class="sr-only">Description</label>
+      <textarea
+        rows="2"
+        name="description"
+        id="description"
+        class="block w-full resize-none border-0 py-0 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm sm:leading-6"
+        placeholder="Write a description..."
+      ></textarea>
+    </div>
+  `,
+})
+export class TextareaComponent {
+  @Input() label!: string;
+  @Input() placeholder: string = '';
+  @Input() value!: string;
+}
diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json
index 485fa33d9e..b8645da774 100644
--- a/alfa-client/tsconfig.base.json
+++ b/alfa-client/tsconfig.base.json
@@ -53,9 +53,9 @@
       "@alfa-client/vorgang-shared-ui": ["libs/vorgang-shared-ui/src/index.ts"],
       "@alfa-client/wiedervorlage": ["libs/wiedervorlage/src/index.ts"],
       "@alfa-client/wiedervorlage-shared": ["libs/wiedervorlage-shared/src/index.ts"],
-      "authentication": ["libs/authentication/src/index.ts"],
       "@ods/component": ["libs/design-component/src/index.ts"],
-      "@ods/system": ["libs/design-system/src/index.ts"]
+      "@ods/system": ["libs/design-system/src/index.ts"],
+      "authentication": ["libs/authentication/src/index.ts"]
     }
   },
   "exclude": ["node_modules", "tmp"]
-- 
GitLab