import { BADGE_KIND_MODIFIERS as l, BADGE_TYPE_MODIFIERS as d, BADGE_DECORATION_MODIFIERS as c } from "./badge-constants.js";
import { hasSlotContent as u } from "../../common/utils/index.js";
import { openBlock as o, createElementBlock as a, normalizeClass as h, createCommentVNode as n, renderSlot as r, createElementVNode as f, createTextVNode as b, toDisplayString as I } from "vue";
import { _ } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
import { ICON_SIZE_MODIFIERS as g } from "../icon/icon-constants.js";
const p = {
  compatConfig: { MODE: 3 },
  name: "DtBadge",
  props: {
    /**
     * The size of the left and right icons.
     * @values 100, 200, 300, 400, 500, 600, 700, 800
     */
    iconSize: {
      type: String,
      default: "200",
      validator: (e) => Object.keys(g).includes(e)
    },
    /**
     * Text for the badge content
     */
    text: {
      type: String,
      default: ""
    },
    /**
     * The kind of badge which determines the styling
     * @values label, count
     */
    kind: {
      type: String,
      default: "label",
      validator: (e) => Object.keys(l).includes(e)
    },
    /**
     * Color for the badge background
     * @values default, info, success, warning, critical, bulletin, ai
     */
    type: {
      type: String,
      default: "default",
      validator: (e) => Object.keys(d).includes(e)
    },
    /**
     * Decoration for the badge. This can be only used with kind: label and type: default
     * with no left and right icons
     * @values default, black-400, black-500, black-900, red-200, red-300, red-400, purple-200,
     * purple-300, purple-400, purple-500, blue-200, blue-300, blue-400, green-300, green-400,
     * green-500, gold-300, gold-400, gold-500, magenta-200, magenta-300, magenta-400
     */
    decoration: {
      type: String,
      default: void 0,
      validator: (e) => Object.keys(c).includes(e)
    },
    /**
     * Used to customize the label container
     */
    labelClass: {
      type: [String, Array, Object],
      default: ""
    },
    /**
     * Shows a subtle appearance for the badge
     * Currently only affects the badge when type is bulletin.
     */
    subtle: {
      type: Boolean,
      default: !1
    },
    /**
     * Outlines the badge with a border
     */
    outlined: {
      type: Boolean,
      default: !1
    }
  },
  data() {
    return {
      BADGE_TYPE_MODIFIERS: d,
      BADGE_KIND_MODIFIERS: l,
      BADGE_DECORATION_MODIFIERS: c
    };
  },
  computed: {
    hasLeftIcon() {
      return u(this.$slots.leftIcon);
    },
    hasRightIcon() {
      return u(this.$slots.rightIcon);
    },
    hasIcons() {
      return this.hasLeftIcon || this.hasRightIcon;
    }
  },
  updated() {
    this.validateProps();
  },
  methods: {
    validateProps() {
      this.validateTypePropCombination(), this.validateDecorationPropCombination();
    },
    validateTypePropCombination() {
      this.type === "ai" && this.kind === "count" && console.error("DtBadge error: type: 'ai' with kind: 'count' is an invalid combination."), this.type !== "bulletin" && this.subtle && console.error("DtBadge error: subtle can only be used with type 'bulletin'");
    },
    validateDecorationPropCombination() {
      this.decoration && ((this.kind !== "label" || this.type !== "default") && console.error("DtBadge error: decoration prop can only be used with kind: 'label' and type: 'default'."), this.hasIcons && console.error("DtBadge error: decoration prop cannot be used with leftIcon or rightIcon."));
    }
  }
}, y = {
  key: 0,
  class: "d-badge__decorative"
}, D = {
  key: 1,
  class: "d-badge__icon-left"
}, m = {
  key: 2,
  class: "d-badge__icon-right"
};
function S(e, E, t, O, i, s) {
  return o(), a("span", {
    class: h([
      "d-badge",
      i.BADGE_TYPE_MODIFIERS[t.type],
      i.BADGE_KIND_MODIFIERS[t.kind],
      i.BADGE_DECORATION_MODIFIERS[t.decoration],
      { "d-badge--subtle": t.subtle },
      { "d-badge--outlined": t.outlined }
    ]),
    "data-qa": "dt-badge"
  }, [
    t.decoration ? (o(), a("span", y)) : n("", !0),
    s.hasLeftIcon ? (o(), a("span", D, [
      r(e.$slots, "leftIcon", { iconSize: t.iconSize })
    ])) : n("", !0),
    f("span", {
      class: h(["d-badge__label", t.labelClass])
    }, [
      r(e.$slots, "default", {}, () => [
        b(I(t.text), 1)
      ])
    ], 2),
    s.hasRightIcon ? (o(), a("span", m, [
      r(e.$slots, "rightIcon", { iconSize: t.iconSize })
    ])) : n("", !0)
  ], 2);
}
const A = /* @__PURE__ */ _(p, [["render", S]]);
export {
  A as default
};
//# sourceMappingURL=badge.js.map
