page Badgecomponent { seo { title = "Badge component" description = "Theme-aware, responsive badge component." } view {
W WRNexusJS
base component

Badge

Theme-aware, responsive badge component.

@wrnexus/ui 0.5.022 props0 slots1 events

Usage

Components are auto-discovered. Use the component directly in any .wrn view:

<Badge
  label="Badge"
  size="md"
  color="primary"
  variant="solid"
  shape="pill"
/>

Legacy mount name: data-component="Badge".

Props and attributes

PropTypeRequirementDefault
labelstringOptional"Badge"
sizestringOptional"md"
colorstringOptional"primary"
variantstringOptional"solid"
shapestringOptional"pill"
classstringOptional""
iconstringOptional""
iconPositionstringOptional"start"
dotbooleanOptionalfalse
dotOnlybooleanOptionalfalse
dotLabelstringOptional"Status"
animatedbooleanOptionalfalse
avatarSrcstringOptional""
avatarAltstringOptional""
dismissiblebooleanOptionalfalse
dismissLabelstringOptional"Remove badge"
truncatebooleanOptionalfalse
maxWidthstringOptional"12rem"
anchorLabelstringOptional""
anchorIconstringOptional""
placementstringOptional"inline"
anchorLabelTextstringOptional"Badge anchor"

Slots

This component does not declare a slot.

Events

  • dismiss

Source contract

Installed source: components/Badge.wrn

component Badge {
  props {
    label = "Badge"
    size = "md"
    color = "primary"
    variant = "solid"
    shape = "pill"
    class = ""

    icon = ""
    iconPosition = "start"
    dot = false
    dotOnly = false
    dotLabel = "Status"
    animated = false

    avatarSrc = ""
    avatarAlt = ""
    dismissible = false
    dismissLabel = "Remove badge"
    truncate = false
    maxWidth = "12rem"

    anchorLabel = ""
    anchorIcon = ""
    placement = "inline"
    anchorLabelText = "Badge anchor"

    @event dismiss = function
  }

  state visible = true

  functions {
    function dismissBadge(sourceEvent, root, customEvent) {
      visible = false
      root = sourceEvent.currentTarget.closest("[data-wrn-badge]")
      customEvent = document.createEvent("CustomEvent")
      customEvent.initCustomEvent("dismiss", true, false, {
        component: "Badge",
        label: label
      })
      root.dispatchEvent(customEvent)
    }
  }

  view {
        <span
      {...attrs}
      class="wire-next wire-next--badge-root {anchorLabel || anchorIcon ? 'wire-next--badge-anchored' : ''} {class}"
      data-wrn-badge
      data-placement="{placement}"
      data-show="visible"
      aria-hidden="{visible ? 'false' : 'true'}"
    >
      {#if anchorLabel || anchorIcon}
        <button type="button" class="wire-next__badge-anchor" aria-label="{anchorLabelText}">
          {#if anchorIcon}<span class="{anchorIcon}" aria-hidden="true">
        </span>{/if}
          {#if anchorLabel}<span>{anchorLabel}</span>{/if}
        </button>
      {/if}

      <span
        class="wire-next__badge"
        data-size="{size}"
        data-color="{color}"
        data-variant="{variant}"
        data-shape="{shape}"
        data-animated="{animated ? 'true' : 'false'}"
        style="--wire-badge-max-width:{maxWidth}"
        role="{dotOnly ? 'status' : ''}"
        aria-label="{dotOnly ? dotLabel : ''}"
      >
        {#if animated}
          <span class="wire-next__badge-ping" aria-hidden="true">
        </span>
        {/if}
        {#if avatarSrc}
          <img class="wire-next__badge-avatar" src="{avatarSrc}" alt="{avatarAlt}" loading="lazy" />
        {/if}
        {#if dot || dotOnly}
          <span class="wire-next__badge-dot" aria-hidden="true">
        </span>
        {/if}
        {#if icon && iconPosition === "start"}
          <span class="wire-next__badge-icon {icon}" aria-hidden="true">
        </span>
        {/if}
        {#if !dotOnly}
          <span class="wire-next__badge-label {truncate ? 'wire-next__badge-label--truncate' : ''}">
            {label}
          </span>
        {/if}
        {#if icon && iconPosition === "end"}
          <span class="wire-next__badge-icon {icon}" aria-hidden="true">
        </span>
        {/if}
        {#if dismissible}
          <button type="button" class="wire-next__badge-dismiss" aria-label="{dismissLabel}" @click="dismissBadge(event)">
        <span class="icon-[lucide--x]" aria-hidden="true">
        </span>
        </button>
        {/if}
      </span>
        </span>
    }
}
} }