{"version":3,"file":"sdcorejs-angular-components-badge.mjs","sources":["../../../projects/sdcorejs-angular/components/badge/src/badge.component.ts","../../../projects/sdcorejs-angular/components/badge/src/badge.component.html","../../../projects/sdcorejs-angular/components/badge/sdcorejs-angular-components-badge.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output, booleanAttribute, computed, input } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdIcon, type SdIconSet } from '@sdcorejs/angular/modules/icon';\nimport { Color, Size } from '@sdcorejs/utils/models';\n\n// Export các Type để dùng chung\nexport type SdBadgeType = 'tag' | 'round' | 'icon';\n\n@Component({\n  selector: 'sd-badge',\n  templateUrl: './badge.component.html',\n  styleUrl: './badge.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, SdIcon, MatTooltipModule],\n})\nexport class SdBadge {\n  defaultIcon = 'fiber_manual_record';\n\n  // ==========================================\n  // 1. SIGNAL INPUTS\n  // ==========================================\n  type = input<SdBadgeType, SdBadgeType | undefined | null>('icon', {\n    transform: value => value || 'icon',\n  });\n\n  color = input<Color, Color | undefined | null>('secondary', {\n    transform: value => value || 'secondary',\n  });\n\n  primary = input(false, { transform: booleanAttribute });\n  secondary = input(false, { transform: booleanAttribute });\n  success = input(false, { transform: booleanAttribute });\n  info = input(false, { transform: booleanAttribute });\n  warning = input(false, { transform: booleanAttribute });\n  error = input(false, { transform: booleanAttribute });\n\n  fontSet = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n    transform: value => value ?? undefined,\n  });\n\n  title = input<string | number | undefined | null>();\n  description = input<string | undefined | null>();\n  tooltip = input<string | undefined | null>();\n  icon = input<string | undefined | null>();\n\n  size = input<Size, Size | undefined | null>('sm', {\n    transform: value => value || 'sm',\n  });\n\n  // ==========================================\n  // 2. OUTPUT\n  // ==========================================\n  // why: the template reads EventEmitter.observed to expose pointer styling only when a click listener exists.\n  @Output() readonly click = new EventEmitter<Event>();\n\n  onClick = (event: Event) => {\n    event.stopPropagation();\n    this.click.emit(event);\n  };\n\n  // ==========================================\n  // 3. COMPUTED STATE\n  // ==========================================\n\n  effectiveColor = computed(() => {\n    if (this.primary()) return 'primary';\n    if (this.secondary()) return 'secondary';\n    if (this.success()) return 'success';\n    if (this.info()) return 'info';\n    if (this.warning()) return 'warning';\n    if (this.error()) return 'error';\n    return this.color();\n  });\n\n  baseColorClasses = computed(() => {\n    const c = this.effectiveColor();\n    return {\n      'c-primary': c === 'primary',\n      'c-secondary': c === 'secondary',\n      'c-info': c === 'info',\n      'c-success': c === 'success',\n      'c-warning': c === 'warning',\n      'c-error': c === 'error',\n    };\n  });\n\n  iconColorClasses = computed(() => {\n    const c = this.effectiveColor();\n    return {\n      'c-primary': c === 'primary',\n      'c-secondary': c === 'secondary',\n      'c-info': c === 'info',\n      'c-success': c === 'success',\n      'c-warning': c === 'warning',\n      'c-error': c === 'error',\n    };\n  });\n\n  iconSizeAndFontClasses = computed(() => {\n    const s = this.size();\n    return {\n      'c-sm': s === 'sm',\n      'c-md': s === 'md',\n      'c-lg': s === 'lg',\n    };\n  });\n\n  iconCssSize = computed(() => {\n    const s = this.size();\n    if (s === 'md') return '18px';\n    if (s === 'lg') return '24px';\n    return '16px';\n  });\n\n  // why: keep container size classes separate from icon element size classes.\n  containerSizeClasses = computed(() => {\n    const s = this.size();\n    return {\n      'c-badge--sm': s === 'sm',\n      'c-badge--md': s === 'md',\n      'c-badge--lg': s === 'lg',\n    };\n  });\n\n  // GỘP CLASS CHO BADGE TYPE = 'TAG' (cũng dùng lại cho 'ROUND' khi có icon)\n  tagIconCombinedClasses = computed(() => ({\n    ...this.iconSizeAndFontClasses(),\n    ...this.baseColorClasses(),\n  }));\n\n  // GỘP CLASS CHO CONTAINER round/tag (color tint + size modifier)\n  containerCombinedClasses = computed(() => ({\n    ...this.baseColorClasses(),\n    ...this.containerSizeClasses(),\n  }));\n\n  // GỘP CLASS CHO BADGE TYPE = 'ICON'\n  iconCombinedClasses = computed(() => ({\n    ...this.iconSizeAndFontClasses(),\n    ...this.iconColorClasses(),\n  }));\n}\n","@let _type = type();\n@let _tooltip = tooltip();\n@let _title = title();\n@let _description = description();\n@let _fontSet = fontSet();\n@let _iconCssSize = iconCssSize();\n@let iconName = icon() || defaultIcon;\n@let isPointer = click.observed;\n\n@if (_type === 'round') {\n  <div\n    class=\"c-badge\"\n    matTooltipPosition=\"above\"\n    [matTooltip]=\"_tooltip || ''\"\n    matTooltipClass=\"sd-multiline-tooltip\"\n    [ngClass]=\"containerCombinedClasses()\"\n    [class.c-badge--has-icon]=\"!!icon()\"\n    [class.pointer]=\"isPointer\"\n    (click)=\"onClick($event)\"\n    aria-hidden=\"true\">\n    @if (icon()) {\n      <sd-icon\n        class=\"c-material-icon\"\n        [name]=\"iconName\"\n        [fontSet]=\"_fontSet\"\n        [size]=\"_iconCssSize\"\n        [ngClass]=\"tagIconCombinedClasses()\"></sd-icon>\n    }\n    <span class=\"c-badge-title\">{{ _title }}</span>\n  </div>\n} @else if (_type === 'tag') {\n  <div\n    class=\"c-badge c-badge--tag\"\n    matTooltipPosition=\"above\"\n    [matTooltip]=\"_tooltip || ''\"\n    matTooltipClass=\"sd-multiline-tooltip\"\n    [ngClass]=\"containerCombinedClasses()\"\n    [class.pointer]=\"isPointer\"\n    (click)=\"onClick($event)\"\n    aria-hidden=\"true\">\n    <div class=\"c-icon d-flex align-items-center\">\n      @if (icon()) {\n        <sd-icon\n          class=\"c-material-icon mr-4\"\n          [name]=\"iconName\"\n          [fontSet]=\"_fontSet\"\n          [size]=\"_iconCssSize\"\n          [ngClass]=\"tagIconCombinedClasses()\"></sd-icon>\n      }\n      <div class=\"d-flex flex-column align-items-start\">\n        <span class=\"T14R c-badge-title\">{{ _title }}</span>\n        @if (_description) {\n          <span class=\"T12R c-badge-description\">{{ _description }}</span>\n        }\n      </div>\n    </div>\n  </div>\n} @else {\n  <div\n    class=\"d-flex\"\n    matTooltipPosition=\"above\"\n    [matTooltip]=\"_tooltip || ''\"\n    matTooltipClass=\"sd-multiline-tooltip\"\n    [class.c-badge-icon]=\"_type === 'icon'\"\n    [class.pointer]=\"isPointer\"\n    (click)=\"onClick($event)\"\n    aria-hidden=\"true\">\n    <div class=\"c-icon d-flex align-items-center\">\n      <sd-icon\n        class=\"c-material-icon mr-4\"\n        [name]=\"iconName\"\n        [fontSet]=\"_fontSet\"\n        [size]=\"_iconCssSize\"\n        [ngClass]=\"iconCombinedClasses()\"></sd-icon>\n      <div class=\"d-flex flex-column\">\n        <span class=\"T14R c-badge-title\">{{ _title }}</span>\n        @if (_description) {\n          <span class=\"T10R c-badge-description\">{{ _description }}</span>\n        }\n      </div>\n    </div>\n  </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}