{"version":3,"file":"badge.mjs","sources":["../../../../../../../packages/components/badge/src/badge.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  type PropType,\n  computed,\n  defineComponent,\n} from 'vue'\n\nimport {\n  type Numeric,\n  addUnit,\n  createNamespace,\n  isDef,\n  isNumeric,\n  makeStringProp,\n  numericProp,\n  truthProp,\n} from '@xzx-design/utils'\n\nconst [name, bem] = createNamespace('badge')\n\nexport type BadgePosition =\n  | 'top-left'\n  | 'top-right'\n  | 'bottom-left'\n  | 'bottom-right'\n\nexport const badgeProps = {\n  dot: Boolean,\n  max: numericProp,\n  tag: makeStringProp<keyof HTMLElementTagNameMap>('div'),\n  color: String,\n  offset: Array as unknown as PropType<[Numeric, Numeric]>,\n  content: numericProp,\n  showZero: truthProp,\n  position: makeStringProp<BadgePosition>('top-right'),\n}\n\nexport type BadgeProps = ExtractPropTypes<typeof badgeProps>\n\nexport default defineComponent({\n  name,\n\n  props: badgeProps,\n\n  setup(props, { slots }) {\n    const hasContent = () => {\n      if (slots.content) {\n        return true\n      }\n      const { content, showZero } = props\n      return (\n        isDef(content) &&\n        content !== '' &&\n        (showZero || (content !== 0 && content !== '0'))\n      )\n    }\n\n    const renderContent = () => {\n      const { dot, max, content } = props\n\n      if (!dot && hasContent()) {\n        if (slots.content) {\n          return slots.content()\n        }\n\n        if (isDef(max) && isNumeric(content!) && +content > +max) {\n          return `${max}+`\n        }\n\n        return content\n      }\n    }\n\n    const getOffsetWithMinusString = (val: string) =>\n      val.startsWith('-') ? val.replace('-', '') : `-${val}`\n\n    const style = computed(() => {\n      const style: CSSProperties = {\n        background: props.color,\n      }\n\n      if (props.offset) {\n        const [x, y] = props.offset\n        const { position } = props\n        const [offsetY, offsetX] = position.split('-') as [\n          'top' | 'bottom',\n          'left' | 'right'\n        ]\n\n        if (slots.default) {\n          if (typeof y === 'number') {\n            style[offsetY] = addUnit(offsetY === 'top' ? y : -y)\n          } else {\n            style[offsetY] =\n              offsetY === 'top' ? addUnit(y) : getOffsetWithMinusString(y)\n          }\n\n          if (typeof x === 'number') {\n            style[offsetX] = addUnit(offsetX === 'left' ? x : -x)\n          } else {\n            style[offsetX] =\n              offsetX === 'left' ? addUnit(x) : getOffsetWithMinusString(x)\n          }\n        } else {\n          style.marginTop = addUnit(y)\n          style.marginLeft = addUnit(x)\n        }\n      }\n\n      return style\n    })\n\n    const renderBadge = () => {\n      if (hasContent() || props.dot) {\n        return (\n          <div\n            class={bem([\n              props.position,\n              { dot: props.dot, fixed: !!slots.default },\n            ])}\n            style={style.value}\n          >\n            {renderContent()}\n          </div>\n        )\n      }\n    }\n\n    return () => {\n      if (slots.default) {\n        const { tag } = props\n        const Tag = tag\n        return (\n          <Tag class={bem('wrapper')}>\n            {slots.default()}\n            {renderBadge()}\n          </Tag>\n        )\n      }\n\n      return renderBadge()\n    }\n  },\n})\n"],"names":["name","bem","createNamespace","badgeProps","dot","Boolean","max","numericProp","tag","makeStringProp","color","String","offset","Array","content","showZero","truthProp","position","defineComponent","props","setup","slots","hasContent","isDef","renderContent","isNumeric","getOffsetWithMinusString","val","startsWith","replace","style","computed","background","x","y","offsetY","offsetX","split","default","addUnit","marginTop","marginLeft","renderBadge","_createVNode","fixed","value","Tag"],"mappings":"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"}