{"version":3,"file":"eui-components-eui-badge.mjs","sources":["../../eui-badge/eui-badge.component.ts","../../eui-badge/eui-badge.component.html","../../eui-badge/index.ts","../../eui-badge/eui-components-eui-badge.ts"],"sourcesContent":["import {\n    Component,\n    HostBinding,\n    ChangeDetectionStrategy,\n    Input,\n    ViewChild,\n    ElementRef,\n    AfterViewInit,\n    ChangeDetectorRef,\n    booleanAttribute,\n    inject,\n} from '@angular/core';\nimport { BaseStatesDirective } from '@eui/components/shared';\nimport { ObserversModule } from '@angular/cdk/observers';\n\n/**\n * @description\n * A badge component that can display text, numbers, or icons with various states and styles.\n * Supports content truncation, empty states, and icon-only modes.\n * \n * @usageNotes\n * #### Basic badge\n * ```html\n * <eui-badge>99</eui-badge>\n * ```\n *\n * #### Badge with semantic variants\n * ```html\n * <eui-badge euiSuccess>Active</eui-badge>\n * <eui-badge euiDanger>Error</eui-badge>\n * ```\n *\n * #### Badge with icon\n * ```html\n * <eui-icon-svg icon=\"eui-email\">\n *   <eui-badge euiDanger euiSizeS>9</eui-badge>\n * </eui-icon-svg>\n * ```\n *\n * #### Badge with button\n * ```html\n * <button euiButton euiPrimary>\n *   Primary\n *   <span euiBadge>99</span>\n * </button>\n * ```\n *\n * #### Badge with truncation\n * ```html\n * <eui-badge [maxCharCount]=\"2\" charReplacement=\"99+\">150</eui-badge>\n * ```\n *\n * #### Icon-only badge (dot indicator)\n * ```html\n * <eui-badge [euiIconBadge]=\"true\" euiDanger></eui-badge>\n * ```\n *\n * ### Accessibility\n * - Uses role=\"status\" for screen reader announcements\n * - aria-label provides context (defaults to \"badge\")\n * - Content is automatically announced by screen readers\n * - Truncated content shows replacement text to all users\n * - Empty badges are visually indicated with special styling\n *\n * ### Notes\n * - Size variants: euiSizeS, euiSizeM (default)\n * - Color variants: euiPrimary, euiSecondary, euiSuccess, euiInfo, euiWarning, euiDanger\n * - maxCharCount truncates content when exceeded, showing charReplacement (default: \"99+\")\n * - euiIconBadge creates a small dot indicator without text\n * - euiDottedBadge applies dotted styling variant\n * - Empty badges (no content) automatically receive special styling\n * - colorPalette accepts custom color palette names for extended theming\n * - euiOutline adds border outline styling\n * - Can be used as element (eui-badge) or attribute (div[euiBadge], span[euiBadge])\n */\n@Component({\n    selector: 'div[euiBadge], span[euiBadge], eui-badge',\n    templateUrl: './eui-badge.component.html',\n    styleUrl: './eui-badge.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [ObserversModule],\n    hostDirectives: [\n        {\n            directive: BaseStatesDirective,\n            inputs: [\n                'euiPrimary',\n                'euiSecondary',\n                'euiSuccess',\n                'euiInfo',\n                'euiWarning',\n                'euiDanger',\n                'euiVariant',\n                'euiSizeS',\n                'euiSizeM',\n                'euiSizeVariant',\n                'euiOutline',\n            ],\n        },\n    ],\n})\nexport class EuiBadgeComponent implements AfterViewInit {\n    /**\n     * @description\n     * Computes and returns the CSS classes for the badge based on its current state\n     *\n     * @returns {string} Space-separated string of CSS class names\n     */\n    @HostBinding('class')\n    public get cssClasses(): string {\n        return [\n            this.baseStatesDirective.getCssClasses('eui-badge'),\n            !this.hasContent ? 'eui-badge--empty' : '',\n            this.euiIconBadge ? 'eui-badge--icon-only' : '',\n            this.colorPalette ? `eui-badge--${this.colorPalette}` : '',\n        ].join(' ').trim();\n    }\n\n    /** @description Data attribute for e2e testing */\n    @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-badge';\n\n    /** @description ARIA role for accessibility */\n    @HostBinding('attr.role') role = 'status';\n\n    /** @description ARIA label for accessibility */\n    @HostBinding('attr.aria-label') @Input('aria-label') ariaLabel: string | null = 'badge';\n\n    /**\n     * Maximum number of characters to display before truncating.\n     * When content exceeds this limit, it will be replaced with charReplacement value.\n     * Useful for displaying large numbers in a compact format (e.g., \"99+\" for values over 99).\n     */\n    @Input() maxCharCount: number;\n\n    /**\n     * String to display when content is truncated due to maxCharCount.\n     * @default '99+'\n     */\n    @Input() charReplacement: string;\n\n    /**\n     * Whether the badge contains only an icon (displays as a small dot indicator).\n     * When true, no text content is shown, creating a minimal status indicator.\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) euiIconBadge = false;\n\n    /**\n     * Whether to display the badge with dotted styling variant.\n     * Applies alternative visual treatment to the badge.\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) euiDottedBadge = false;\n\n    /**\n     * Extra color palette to be used on the badge.\n     * Accepts custom color palette names for extended theming beyond standard variants.\n     */\n    @Input() colorPalette: string;\n\n    @ViewChild('contentRef') content: ElementRef;\n\n    protected hasContentUpdated = false;\n    protected updatedContent: string;\n    protected baseStatesDirective = inject(BaseStatesDirective);\n    private cdRef = inject(ChangeDetectorRef);\n    private hasContent = true;\n\n    ngAfterViewInit(): void {\n        setTimeout(() => {\n            const innerHtml = this.content.nativeElement.innerHTML;\n            if (!innerHtml || (innerHtml && innerHtml.trim() === '')) {\n                this.hasContent = false;\n            }\n            this._checkContent();\n        }, 1);\n    }\n\n    /**\n     * @description\n     * Handles content changes and triggers content checking\n     */\n    onContentChanged(): void {\n        this._checkContent();\n    }\n\n    /**\n     * @description\n     * Checks if content exceeds maxCharCount and updates content if necessary\n     * @private\n     */\n    private _checkContent(): void {\n        if (this.maxCharCount) {\n            const contentText = this.content.nativeElement.outerText;\n            if (contentText && contentText.length > this.maxCharCount) {\n                this.hasContentUpdated = true;\n                this.updatedContent = this.charReplacement || '99+';\n                this.cdRef.markForCheck();\n            }\n        }\n    }\n}\n","@if (hasContentUpdated) {\n    <span class=\"eui-badge-wrapper\">\n        {{ updatedContent }}\n    </span>\n} @else {\n    <span class=\"eui-badge-wrapper\" #contentRef (cdkObserveContent)=\"onContentChanged()\">\n        <ng-content></ng-content>\n    </span>\n}\n","import { EuiBadgeComponent } from './eui-badge.component';\n\nexport * from './eui-badge.component';\n\nexport const EUI_BADGE = [\n    EuiBadgeComponent,\n] as const;\n\n// export { EuiBadgeComponent as EuiBadge } from './eui-badge.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DG;MA0BU,iBAAiB,CAAA;AAzB9B,IAAA,WAAA,GAAA;;QA2C2C,IAAA,CAAA,OAAO,GAAG,WAAW;;QAGlC,IAAA,CAAA,IAAI,GAAG,QAAQ;;QAGY,IAAA,CAAA,SAAS,GAAkB,OAAO;AAevF;;;;AAIG;QACqC,IAAA,CAAA,YAAY,GAAG,KAAK;AAE5D;;;;AAIG;QACqC,IAAA,CAAA,cAAc,GAAG,KAAK;QAUpD,IAAA,CAAA,iBAAiB,GAAG,KAAK;AAEzB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACjC,IAAA,CAAA,UAAU,GAAG,IAAI;AAmC5B,IAAA;AAnGG;;;;;AAKG;AACH,IAAA,IACW,UAAU,GAAA;QACjB,OAAO;AACH,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,WAAW,CAAC;YACnD,CAAC,IAAI,CAAC,UAAU,GAAG,kBAAkB,GAAG,EAAE;YAC1C,IAAI,CAAC,YAAY,GAAG,sBAAsB,GAAG,EAAE;AAC/C,YAAA,IAAI,CAAC,YAAY,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,YAAY,CAAA,CAAE,GAAG,EAAE;AAC7D,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACtB;IAoDA,eAAe,GAAA;QACX,UAAU,CAAC,MAAK;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS;AACtD,YAAA,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;AACtD,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YAC3B;YACA,IAAI,CAAC,aAAa,EAAE;QACxB,CAAC,EAAE,CAAC,CAAC;IACT;AAEA;;;AAGG;IACH,gBAAgB,GAAA;QACZ,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA;;;;AAIG;IACK,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS;YACxD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AACvD,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;gBAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK;AACnD,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YAC7B;QACJ;IACJ;8GAnGS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,mQA4CN,gBAAgB,CAAA,EAAA,cAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAOhB,gBAAgB,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvJxC,6QASA,6jVDuEc,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAoBhB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAzB7B,SAAS;+BACI,0CAA0C,EAAA,eAAA,EAGnC,uBAAuB,CAAC,MAAM,WACtC,CAAC,eAAe,CAAC,EAAA,cAAA,EACV;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,mBAAmB;AAC9B,4BAAA,MAAM,EAAE;gCACJ,YAAY;gCACZ,cAAc;gCACd,YAAY;gCACZ,SAAS;gCACT,YAAY;gCACZ,WAAW;gCACX,YAAY;gCACZ,UAAU;gCACV,UAAU;gCACV,gBAAgB;gCAChB,YAAY;AACf,6BAAA;AACJ,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,6QAAA,EAAA,MAAA,EAAA,CAAA,sgVAAA,CAAA,EAAA;;sBASA,WAAW;uBAAC,OAAO;;sBAWnB,WAAW;uBAAC,eAAe;;sBAAG;;sBAG9B,WAAW;uBAAC,WAAW;;sBAGvB,WAAW;uBAAC,iBAAiB;;sBAAG,KAAK;uBAAC,YAAY;;sBAOlD;;sBAMA;;sBAOA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAOrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAMrC;;sBAEA,SAAS;uBAAC,YAAY;;;AE3JpB,MAAM,SAAS,GAAG;IACrB,iBAAiB;;AAGrB;;ACRA;;AAEG;;;;"}