{"version":3,"file":"tag.mjs","sources":["../../../../../../../packages/components/tag/src/tag.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  Transition,\n  defineComponent,\n} from 'vue'\nimport {\n  HAPTICS_FEEDBACK,\n  createNamespace,\n  makeObjectProp,\n  makeStringProp,\n  truthProp,\n} from '@xzx-design/utils'\nimport { Icon } from '@xzx-design/components/icon'\nimport { CloseSmall } from '@xzx-design/icons-vue'\nimport type { IconsComponent } from '@xzx-design/components/icon'\n\nimport type { TagTheme, TagType } from './types'\n\nconst [name, bem] = createNamespace('tag')\n\nexport const tagProps = {\n  // size: String as PropType<TagSize>,\n  mark: Boolean,\n  show: truthProp,\n  icon: makeObjectProp<IconsComponent>(null),\n  type: makeStringProp<TagType>('default'),\n  theme: makeStringProp<TagTheme>('default'),\n  color: String,\n  round: Boolean,\n  textColor: String,\n  closeable: Boolean,\n}\n\nexport type TagProps = ExtractPropTypes<typeof tagProps>\n\nexport default defineComponent({\n  name,\n\n  props: tagProps,\n\n  emits: ['close'],\n\n  setup(props, { slots, emit }) {\n    const onClose = (event: MouseEvent) => {\n      event.stopPropagation()\n      emit('close', event)\n    }\n\n    const getStyle = (): CSSProperties => {\n      if (props.theme === 'plain') {\n        return {\n          color: props.textColor || props.color,\n          borderColor: props.color,\n        }\n      }\n      return {\n        color: props.textColor,\n        background: props.color,\n      }\n    }\n\n    const renderTag = () => {\n      const { type, mark, round, icon, closeable, theme } = props\n\n      const classes: Record<string, unknown> = {\n        mark,\n        round,\n        [theme]: true,\n      }\n      // if (size) {\n      //   classes[size] = size\n      // }\n\n      const CloseIcon = closeable && (\n        <Icon class={[bem('close'), HAPTICS_FEEDBACK]} onClick={onClose}>\n          <CloseSmall />\n        </Icon>\n      )\n\n      const prefixIcon = icon && (\n        <Icon class={[bem('icon')]}>\n          <icon />\n        </Icon>\n      )\n\n      return (\n        <span style={getStyle()} class={bem([classes, type])}>\n          {prefixIcon}\n          {slots.default?.()}\n          {CloseIcon}\n        </span>\n      )\n    }\n\n    return () => (\n      <Transition name={props.closeable ? 'xzx-fade' : undefined}>\n        {props.show ? renderTag() : null}\n      </Transition>\n    )\n  },\n})\n"],"names":["name","bem","createNamespace","tagProps","mark","Boolean","show","truthProp","icon","makeObjectProp","type","makeStringProp","theme","color","String","round","textColor","closeable","defineComponent","props","emits","setup","slots","emit","onClose","event","stopPropagation","getStyle","borderColor","background","renderTag","classes","CloseIcon","_createVNode","Icon","HAPTICS_FEEDBACK","default","CloseSmall","prefixIcon","Transition","undefined"],"mappings":"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"}