Skip to content
Snippets Groups Projects
Select Git revision
  • OZG-7856_schadcode_scanner
  • OZG-8073-date-component
  • main default protected
  • OZG-7985-Statistik-Datenfreigabe
  • OZG-8305-Create-webpack-sbom
  • tooltip-improvements
  • ods-remove-class-inputs
  • release-info
  • release-administration
  • release
  • OZG-7714-UpgradeKeycloakDependencyTo25
  • OZG-8086-Admin-Datenanfrage-erstellen
  • OZG-8086-Datenanfrage-Umbenennung
  • mongodb-7-0-16-e2e
  • OZG-6220-Bescheid-speichern-ohne-Postfach
  • OZG-7922-KeycloakOperatorExceptions
  • OZG-8142-poc-cards
  • OZG-8086-E2E
  • OZG-8086-E2E2
  • OZG-8142-ProjectionStuff
  • 1.11.0-info
  • 1.11.0-administration
  • 2.26.0-alfa
  • 1.10.0-info
  • 1.10.0-administration
  • 2.25.0-alfa
  • 1.9.0-info
  • 1.9.0-administration
  • 2.24.0-alfa
  • 1.8.0-info
  • 1.8.0-administration
  • 2.23.0-alfa
  • 1.7.0-info
  • 1.7.0-administration
  • 2.22.0-alfa
  • 1.6.0-info
  • 1.6.0-administration
  • 2.21.0-alfa
  • 1.5.0-info
  • 1.5.0-administration
40 results

button.component.ts

Blame
  • button.component.ts 1.94 KiB
    import { CommonModule } from '@angular/common';
    import { Component, EventEmitter, Input, Output } from '@angular/core';
    import { VariantProps, cva } from 'class-variance-authority';
    
    import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.component';
    
    export const buttonVariants = cva(
      'flex cursor-pointer items-center gap-4 rounded-md font-medium disabled:cursor-wait text-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',
      {
        variants: {
          variant: {
            primary: 'hover:enabled:bg-primary-hover bg-primary text-white shadow-sm',
            outline:
              'border border-primary bg-background-50 text-primary hover:enabled:bg-background-100',
            icon: 'border border-transparent hover:border-primary',
          },
          size: {
            medium: 'h-9 py-2 px-4 min-w-32',
            fit: 'h-fit p-2',
          },
        },
        defaultVariants: {
          variant: 'primary',
          size: 'medium',
        },
      },
    );
    type ButtonVariants = VariantProps<typeof buttonVariants>;
    
    @Component({
      selector: 'ods-button',
      standalone: true,
      imports: [CommonModule, SpinnerIconComponent],
      template: `<button
        type="button"
        [ngClass]="buttonVariants({ size, variant })"
        [disabled]="isLoading"
        [attr.aria-disabled]="isLoading"
        [attr.aria-label]="text"
        [attr.data-test-id]="dataTestId"
        (click)="clickEmitter.emit()"
      >
        <ng-content *ngIf="!isLoading" select="[icon]"></ng-content>
        <ods-spinner-icon *ngIf="isLoading" size="medium"></ods-spinner-icon>
        <div *ngIf="text" class="flex-grow">{{ text }}</div>
      </button>`,
    })
    export class ButtonComponent {
      @Input() text: string = '';
      @Input() dataTestId: string = '';
      @Input() isLoading: boolean = false;
      @Input() variant: ButtonVariants['variant'];
      @Input() size: ButtonVariants['size'];
    
      @Output() public clickEmitter: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();
    
      buttonVariants = buttonVariants;
    }