import type { BadgeSize, BadgeType, BadgeVariant } from './mud-badge.types'; /** * Badge — small, non-interactive status / count indicator. * * Two visual forms: * - `numbered` (default): shows a numeric counter inside a rounded pill. * - `dot`: a presence circle for "unread" indication. `xs`/`sm` are solid; * `md`/`lg`/`xl` carry a small centered inner pip (per Figma 551:18330). * * Five color variants map to the project's semantic token roles. * Designed to overlay parent elements (avatars, icon buttons, list items) * via consumer-controlled positioning — the badge itself just paints. * Position offsets are exposed as CSS variables (`--badge-offset-top`, * `--badge-offset-right`) so consumers can compose without overrides. * * Pattern B (atom-visual): internal DOM only, no slots, no events. * * @element mud-badge */ export declare class MudBadge { /** * Visual form — `numbered` shows the count, `dot` is a presence indicator. * @default 'numbered' */ type: BadgeType; /** * Semantic color variant. * @default 'danger' */ variant: BadgeVariant; /** * Size rung — five-step scale matching Figma masters `551:17421`: * - `xs` (8 px) — dot-only presence pip (e.g. dropdown row indicator) * - `sm` (12 px) — compact dot or numbered * - `md` (16 px) — default numbered/dot (Figma Caption Medium 12/16) * - `lg` (20 px) — emphasised numbered (Figma Caption Medium 12/16) * - `xl` (24 px) — large numbered (Figma Body/Small Medium 14/20) * @default 'md' */ size: BadgeSize; /** * Numeric count to display when `type='numbered'`. Ignored for `dot`. * Values greater than `max` render as `"{max}+"`. */ count?: number; /** * Upper bound for the visible count. Counts above this render as `"{max}+"`. * @default 99 */ max: number; /** * Override the accessible name. When omitted, `numbered` uses the visible * count text and `dot` falls back to "Notification" (so screen readers * announce something meaningful for empty dots). Captured into * `resolvedAriaLabel` on mount and the host attribute is stripped to * avoid Stencil's auto-reflection loop. */ ariaLabel?: string; private resolvedAriaLabel?; host: HTMLElement; componentWillLoad(): void; handleAriaLabelChange(next: string | undefined): void; /** * Stencil auto-reflects `@Prop()` values back onto the host attribute. For * `aria-label` that creates an observer loop. Capture the consumer-provided * value into a state field, then strip the attribute so the loop never fires. */ private captureAriaLabel; private formatCount; private resolveAccessibleName; render(): any; }