Skip to content
Snippets Groups Projects
Commit 0338cc3b authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5590-OZG-5595 Use button-card as button with two rows of text

- Add story with icon to button
parent 43ed3b53
No related branches found
No related tags found
No related merge requests found
Showing
with 75 additions and 44 deletions
...@@ -83,22 +83,26 @@ ...@@ -83,22 +83,26 @@
<hr /> <hr />
<div class="flex flex-col gap-4 bg-background-200 p-6"> <div class="flex flex-col gap-4 bg-background-200 p-6">
<div class="mt-4"> <div class="mt-4">
<ods-button-card class="w-72" [isLoading]="false"> <ods-button-card
class="w-72"
[isLoading]="false"
text="Bescheid-Dokument"
subText="automatisch erstellen"
>
<ods-icon icon name="file-generate" class="size-10 fill-primary" /> <ods-icon icon name="file-generate" class="size-10 fill-primary" />
<ods-spinner-icon spinner class="size-10" /> <ods-spinner-icon spinner class="size-10" />
<p text class="text-center"> </ods-button-card>
Bescheid-Dokument<br />automatisch erstellen
</p></ods-button-card
>
</div> </div>
<div class="mt-4"> <div class="mt-4">
<ods-button-card class="w-72" [isLoading]="true"> <ods-button-card
class="w-72"
[isLoading]="true"
text="Bescheid-Dokument"
subText="automatisch erstellen"
>
<ods-icon icon name="file-generate" class="size-10 fill-primary" /> <ods-icon icon name="file-generate" class="size-10 fill-primary" />
<ods-spinner-icon spinner class="size-10" /> <ods-spinner-icon spinner class="size-10" />
<p text class="text-center"> </ods-button-card>
Bescheid-Dokument<br />automatisch erstellen
</p></ods-button-card
>
</div> </div>
<div class="mt-4"> <div class="mt-4">
......
export * from './lib/attachment/attachment.component'; export * from './lib/attachment/attachment.component';
export * from './lib/form/button-card/button-card.component'; export * from './lib/button-card/button-card.component';
export * from './lib/button/button.component'; export * from './lib/button/button.component';
export * from './lib/form/file-upload-button/file-upload-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/radio-button-card/radio-button-card.component';
......
...@@ -6,9 +6,21 @@ import { Component, Input } from '@angular/core'; ...@@ -6,9 +6,21 @@ import { Component, Input } from '@angular/core';
standalone: true, standalone: true,
imports: [CommonModule], imports: [CommonModule],
styles: [':host {@apply inline-flex}'], styles: [':host {@apply inline-flex}'],
templateUrl: './button-card.component.html', template: `<button
type="button"
class="flex flex-grow items-center justify-center gap-4 whitespace-nowrap rounded-md bg-background-50 py-3 pl-6 pr-6 text-text hover:bg-background-100 focus:outline-none focus:ring-2 focus:ring-primary"
[disabled]="isLoading"
>
<ng-content *ngIf="!isLoading" select="[icon]"></ng-content>
<ng-content *ngIf="isLoading" select="[spinner]"></ng-content>
<div class="flex flex-grow flex-col gap-1">
<div class="leading-none">{{ text }}</div>
<div class="leading-none">{{ subText }}</div>
</div>
</button>`,
}) })
export class ButtonCardComponent { export class ButtonCardComponent {
@Input() text: string = ''; @Input() text: string = '';
@Input() subText: string = '';
@Input() isLoading: boolean = false; @Input() isLoading: boolean = false;
} }
<button
type="button"
[ngClass]="buttonVariants({ size, type })"
[disabled]="isLoading"
(click)="clickEmitter.emit()"
>
<ng-content *ngIf="!isLoading" select="[icon]"></ng-content>
<ods-spinner-icon *ngIf="isLoading" class="h-full"></ods-spinner-icon>
<div class="flex-grow" [innerHTML]="text | safe: 'html'"></div>
</button>
...@@ -3,7 +3,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; ...@@ -3,7 +3,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
import { VariantProps, cva } from 'class-variance-authority'; import { VariantProps, cva } from 'class-variance-authority';
import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.component'; import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.component';
import { SafePipe } from '../utils/safe.pipe';
const buttonVariants = cva( const buttonVariants = cva(
'flex cursor-pointer items-center gap-4 rounded-md font-medium disabled:cursor-wait text-sm min-w-32', 'flex cursor-pointer items-center gap-4 rounded-md font-medium disabled:cursor-wait text-sm min-w-32',
...@@ -15,8 +14,8 @@ const buttonVariants = cva( ...@@ -15,8 +14,8 @@ const buttonVariants = cva(
'border border-primary bg-background-50 text-primary hover:enabled:bg-background-100', 'border border-primary bg-background-50 text-primary hover:enabled:bg-background-100',
}, },
size: { size: {
small: 'h-9 py-1 px-2', small: 'h-9 py-2 px-4',
medium: 'h-12 py-2 px-4', medium: 'h-12 py-3 px-6',
}, },
}, },
defaultVariants: { defaultVariants: {
...@@ -30,8 +29,17 @@ type ButtonVariants = VariantProps<typeof buttonVariants>; ...@@ -30,8 +29,17 @@ type ButtonVariants = VariantProps<typeof buttonVariants>;
@Component({ @Component({
selector: 'ods-button', selector: 'ods-button',
standalone: true, standalone: true,
imports: [CommonModule, SpinnerIconComponent, SafePipe], imports: [CommonModule, SpinnerIconComponent],
templateUrl: './button.component.html', template: `<button
type="button"
[ngClass]="buttonVariants({ size, type })"
[disabled]="isLoading"
(click)="clickEmitter.emit()"
>
<ng-content *ngIf="!isLoading" select="[icon]"></ng-content>
<ods-spinner-icon *ngIf="isLoading" class="h-full"></ods-spinner-icon>
<div class="flex-grow">{{ text }}</div>
</button>`,
}) })
export class ButtonComponent { export class ButtonComponent {
@Input() text: string = ''; @Input() text: string = '';
......
import type { Meta, StoryObj } from '@storybook/angular'; import { argsToTemplate, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { IconComponent } from '../icon/icon.component';
import { ButtonComponent } from './button.component'; import { ButtonComponent } from './button.component';
const meta: Meta<ButtonComponent> = { const meta: Meta<ButtonComponent> = {
title: 'Button', title: 'Button',
component: ButtonComponent, component: ButtonComponent,
subcomponents: { IconComponent },
decorators: [
moduleMetadata({
imports: [ButtonComponent, IconComponent],
}),
],
excludeStories: /.*Data$/, excludeStories: /.*Data$/,
tags: ['autodocs'], tags: ['autodocs'],
}; };
...@@ -25,3 +32,12 @@ export const Default: Story = { ...@@ -25,3 +32,12 @@ export const Default: Story = {
}, },
}, },
}; };
export const WithIcon: Story = {
args: { text: 'I have an icon', isLoading: false, type: 'secondary', size: 'medium' },
render: (args: ButtonComponent) => ({
props: args,
template: `<ods-button ${argsToTemplate(args)}>
<ods-icon icon name="file-pdf" class="h-full"></ods-icon>
</ods-button>`,
}),
};
<button
type="button"
class="flex flex-grow items-center justify-center gap-4 whitespace-nowrap rounded-md bg-background-50 py-3 pl-6 pr-6 text-text hover:bg-background-100 focus:outline-none focus:ring-2 focus:ring-primary"
[disabled]="isLoading"
>
<ng-content *ngIf="!isLoading" select="[icon]"></ng-content>
<ng-content *ngIf="isLoading" select="[spinner]"></ng-content>
<div class="flex-grow">
<ng-content select="[text]"></ng-content>
</div>
</button>
<ng-container *ngIf="bescheidDraftStateResource.resource as bescheidDraft"> <ng-container>
<div class="mt-4"> <div class="mt-4">
<ods-button-card <ods-button-card
*ngIf="bescheidDraft | hasLink: bescheidLinkRel.CREATE_DOCUMENT"
class="w-72" class="w-72"
[isLoading]="(createBescheidDocumentInProgress$ | async).loading" [isLoading]="(createBescheidDocumentInProgress$ | async).loading"
(click)="createBescheidDocument()" (click)="createBescheidDocument()"
data-test-id="create-bescheid-document-button" data-test-id="create-bescheid-document-button"
text="Bescheid-Dokument"
subText="automatisch erstellen"
> >
<ods-bescheid-generate-icon icon /> <ods-bescheid-generate-icon icon />
<ods-spinner-icon spinner class="size-10" /> <ods-spinner-icon spinner class="size-10" />
<div text class="text-center"> </ods-button-card>
Bescheid-Dokument<br />automatisch erstellen
</div></ods-button-card
>
</div> </div>
</ng-container> </ng-container>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment