{"version":3,"file":"pv-frontend-pv-shared-components-chip.mjs","sources":["../../../projects/pv-shared-components/chip/chip.component.ts","../../../projects/pv-shared-components/chip/chip.component.html","../../../projects/pv-shared-components/chip/chip.module.ts","../../../projects/pv-shared-components/chip/pv-frontend-pv-shared-components-chip.ts"],"sourcesContent":["import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  Renderer2,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { OverrideStyleConfig } from '@pv-frontend/pv-shared-components/common/types';\nimport { ValueOf } from '@pv-frontend/pv-shared-services/common';\n\nexport type ChipVariant = 'outlined' | 'filled';\n\nexport type ChipSize = 'small' | 'normal' | 'large';\n\nexport interface ChipStyleOverride {\n  container?: OverrideStyleConfig;\n  label?: OverrideStyleConfig;\n  categoryIcon?: OverrideStyleConfig;\n  crossIcon?: OverrideStyleConfig;\n}\n\nexport interface CrossIconInput {\n  name?: string;\n}\n\nexport interface CategoryIconInput {\n  url?: string;\n  position?: CategoryIconPosition;\n}\n\nexport const CATEGORY_ICON_POSITION = { START: 'start', END: 'end' } as const;\n\nexport type CategoryIconPosition = ValueOf<typeof CATEGORY_ICON_POSITION>;\n\n@Component({\n  selector: 'pv-chip',\n  templateUrl: './chip.component.html',\n  styleUrls: ['./chip.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ChipComponent<T> implements OnDestroy {\n  public constructor(\n    private elementRef: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  public classMappingPerVariant: Record<ChipVariant, string> = {\n    outlined: `pv-chip-outlined`,\n    filled: `pv-chip-filled surface-border-normal pv-border-solid`,\n  };\n\n  public classMappingPerSize: Record<ChipSize, string> = {\n    small: 'small text-sm',\n    normal: 'normal text-base',\n    large: 'large text-lg',\n  };\n\n  public CATEGORY_ICON_POSITION = CATEGORY_ICON_POSITION;\n\n  public clickListener?: () => void;\n  public isChipClickable: boolean = false;\n\n  @Input()\n  public variant: ChipVariant = 'filled';\n\n  @Input()\n  public label: string = '';\n\n  @Input()\n  public style?: ChipStyleOverride = {};\n\n  @Input()\n  public isRounded: boolean = true;\n\n  @Input()\n  public size: ChipSize = 'normal';\n\n  /**\n   * Applies active behaviour to the item which is selected\n   */\n  @Input()\n  public isActive: boolean = false;\n\n  /**\n   * This object is passed back in the emitter, whatever information is passed to this object is passed back\n   */\n  @Input()\n  public metaInformation?: T;\n\n  @Input()\n  public categoryIcon?: CategoryIconInput;\n\n  @Input()\n  public showCrossIcon: boolean = false;\n\n  @Input()\n  public crossIcon?: CrossIconInput;\n\n  /**\n   * This is dynamically typed based upon the meta information input provided above\n   *\n   * Emits the `metaInformation` input when a clickable chip is clicked upon\n   */\n  @Output()\n  public clickEmitter: EventEmitter<T> = new EventEmitter<T>();\n\n  @Output()\n  public crossClickEmitter: EventEmitter<void> = new EventEmitter<void>();\n\n  /**\n   * Determines if the element should listen to clicks and show cursor when hovered upon\n   */\n  @Input()\n  public set isClickable(shouldSetupListener: boolean) {\n    if (shouldSetupListener) {\n      this.setupListener();\n    } else {\n      this.clearListener();\n    }\n  }\n\n  public get isClickable(): boolean {\n    return this.isChipClickable;\n  }\n\n  public handleCrossClick(event: Event): void {\n    // using StopPropagation to avoid click event emitted by the parent div that would select the chip again\n    event.stopPropagation();\n    this.crossClickEmitter.emit();\n  }\n\n  private setupListener(): void {\n    this.isChipClickable = true;\n    this.clickListener = this.renderer.listen(\n      this.elementRef.nativeElement,\n      'click',\n      () => {\n        this.clickEmitter?.emit(this.metaInformation);\n      }\n    );\n  }\n\n  private clearListener(): void {\n    this.isChipClickable = false;\n    this.clickListener?.();\n  }\n\n  public ngOnDestroy(): void {\n    this.clearListener();\n  }\n}\n","<div\n  class=\"pv-chip-container surface-background-level1-low-contrast surface-text-subdued-low-contrast flex align-items-center justify-content-between gap-1\"\n  [ngClass]=\"[\n    this.classMappingPerVariant[this.variant],\n    this.classMappingPerSize[this.size]\n  ]\"\n  [class.is-rounded]=\"this.isRounded\"\n  [class.active]=\"this.isActive\"\n  [class.cursor-pointer]=\"this.isClickable\"\n  [style]=\"this.style?.container\">\n  <div\n    class=\"flex align-items-center gap-1 category-icon\"\n    [ngClass]=\"\n      this.categoryIcon?.position === CATEGORY_ICON_POSITION.END\n        ? 'flex-row-reverse'\n        : 'flex-row'\n    \">\n    <pv-svg-icon\n      *ngIf=\"this.categoryIcon\"\n      [srcUrl]=\"this.categoryIcon.url\"\n      styleClass=\"flex h-1rem w-1rem\"\n      [style]=\"this.style?.categoryIcon\" />\n    <span class=\"pv-chip-label\" [style]=\"this.style?.label\">\n      {{ this.label }}\n    </span>\n  </div>\n  <pv-svg-icon\n    *ngIf=\"this.isActive && this.showCrossIcon\"\n    [name]=\"this.crossIcon?.name ?? 'cross'\"\n    styleClass=\"flex h-1rem w-1rem cross-icon ml-2\"\n    [style]=\"this.style?.crossIcon\"\n    (click)=\"handleCrossClick($event)\" />\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SvgIconModule } from '@pv-frontend/pv-shared-components/svg-icon';\n\nimport { ChipComponent } from './chip.component';\n\n@NgModule({\n  imports: [CommonModule, SvgIconModule],\n  exports: [ChipComponent],\n  declarations: [ChipComponent],\n})\nexport class PvChipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}