Member Junction
    Preparing search index...

    mj-empty-state — Canonical centered empty/no-results/error placeholder.

    Replaces the ~213 inline empty-state <div>s that pages were each hand-rolling (icon + title + message, optionally a CTA), e.g.:

    <div class="empty-state">
    <i class="fa-solid fa-inbox"></i>
    <h3>No Permissions Found</h3>
    <p>Try adjusting your filters or refresh the data.</p>
    <button mjButton variant="primary" (click)="refreshData()">Refresh</button>
    </div>

    Usage:

    <!-- Simplest: nothing-here placeholder -->
    <mj-empty-state Title="No runs found" Message="No runs match the selected filters." />

    <!-- Search/filter produced nothing -->
    <mj-empty-state Variant="no-results" Title="No icons found" Message="Try a different search term." />

    <!-- Load failed, retry CTA -->
    <mj-empty-state Variant="error" Title="Couldn't load permissions" [Message]="error"
    ActionText="Try Again" ActionIcon="fa-solid fa-rotate-right" (Action)="loadData()" />

    <!-- Invitation to create the first record -->
    <mj-empty-state Icon="fa-solid fa-key" Title="No API keys yet"
    Message="Generate a key to start calling the API."
    ActionText="Generate Your First Key" ActionIcon="fa-solid fa-plus"
    (Action)="requestCreate()" />

    <!-- Multiple / bespoke CTAs: project them into the [actions] slot -->
    <mj-empty-state Title="No pinned items yet" Message="Pin dashboards for quick access.">
    <button mjButton variant="primary" (click)="addPin()">Add your first pin</button>
    <button mjButton variant="flat" (click)="dismiss()">Don't show again</button>
    </mj-empty-state>

    For dynamic messages (e.g. "No keys matching X" vs "No keys yet"), compute the string in the parent and bind it to [Message], or project richer body content as default <ng-content> (rendered between the message and the actions).

    Index

    Constructors

    Properties

    Action: EventEmitter<MouseEvent> = ...

    Emitted when the built-in CTA button is clicked.

    ActionIcon: string = ''

    Optional Font Awesome icon shown inside the CTA button.

    ActionText: string = ''

    When set, renders a primary CTA button with this label.

    ActionVariant: "primary" | "secondary" | "outline" | "flat" = 'primary'

    mjButton variant for the built-in CTA. Defaults to 'primary'.

    Icon: string | null = null

    Font Awesome icon class string (e.g. "fa-solid fa-key"). When omitted, a sensible default is chosen from Variant. Pass an empty string AND no variant default applies — set this explicitly to "" to render no icon.

    Message: string = ''

    Supporting/help text below the title.

    Role: string | null = null

    ARIA live-region role on the host. When unset, it defaults from Variant: error'alert' (assertive), everything else → 'status' (polite). This makes a dynamically-appearing empty state announce itself to screen readers — the title + message are read together via the role's implicit aria-live/aria-atomic. (Empty states present at page load are not announced, per the live-region spec, so static placeholders stay quiet.) Pass an explicit role to override, or '' to opt out of the live region.

    Size: MJEmptyStateSize = 'default'

    Density — controls padding and icon size. Defaults to 'default'.

    Title: string = ''

    Bold heading line (e.g. "No API keys yet").

    Variant: MJEmptyStateVariant = 'empty'

    Visual intent — drives the default icon and icon color. Defaults to 'empty'.

    Accessors

    Methods