{"version":3,"file":"toast.mjs","sources":["../../../../../../../packages/components/toast/src/toast.tsx"],"sourcesContent":["import { computed, defineComponent, onMounted, onUnmounted, watch } from 'vue'\n\n// Utils\nimport {\n  createNamespace,\n  isDef,\n  makeNumberProp,\n  makeObjectProp,\n  makeStringProp,\n  numericProp,\n  pick,\n  unknownProp,\n} from '@xzx-design/utils'\nimport { Icon, Loading, Popup } from '@xzx-design/components'\nimport { CheckSmall, CloseSmall } from '@xzx-design/icons-vue'\nimport { lockClick } from './lock-click'\n\n// Types\nimport type {\n  CSSProperties,\n  ExtractPropTypes,\n  PropType,\n  TeleportProps,\n} from 'vue'\nimport type { ToastPosition, ToastType, ToastWordBreak } from './types'\n\nimport type { IconsComponent, LoadingType } from '@xzx-design/components'\n\nconst [name, bem] = createNamespace('toast')\n\nconst popupInheritProps = [\n  'show',\n  'overlay',\n  'teleport',\n  'transition',\n  'overlayClass',\n  'overlayStyle',\n  'closeOnClickOverlay',\n  'zIndex',\n] as const\n\nexport const toastProps = {\n  icon: makeObjectProp<IconsComponent>(null),\n  show: Boolean,\n  type: makeStringProp<ToastType>('text'),\n  overlay: Boolean,\n  message: numericProp,\n  iconSize: numericProp,\n  duration: makeNumberProp(2000),\n  position: makeStringProp<ToastPosition>('middle'),\n  teleport: [String, Object] as PropType<TeleportProps['to']>,\n  wordBreak: String as PropType<ToastWordBreak>,\n  className: unknownProp,\n  iconPrefix: String,\n  transition: makeStringProp('xzx-fade'),\n  loadingType: String as PropType<LoadingType>,\n  forbidClick: Boolean,\n  overlayClass: unknownProp,\n  overlayStyle: Object as PropType<CSSProperties>,\n  closeOnClick: Boolean,\n  closeOnClickOverlay: Boolean,\n  zIndex: numericProp,\n}\n\nexport type ToastProps = ExtractPropTypes<typeof toastProps>\n\nexport default defineComponent({\n  name,\n\n  props: toastProps,\n\n  emits: ['update:show'],\n\n  setup(props, { emit, slots }) {\n    let timer: ReturnType<typeof setTimeout>\n    let clickable = false\n\n    const toggleClickable = () => {\n      const newValue = props.show && props.forbidClick\n      if (clickable !== newValue) {\n        clickable = newValue\n        lockClick(clickable)\n      }\n    }\n\n    const updateShow = (show: boolean) => emit('update:show', show)\n\n    const onClick = () => {\n      if (props.closeOnClick) {\n        updateShow(false)\n      }\n    }\n\n    const clearTimer = () => clearTimeout(timer)\n\n    const renderIcon = () => {\n      const { icon, type, iconSize, iconPrefix, loadingType } = props\n      const hasIcon = icon || type === 'success' || type === 'fail'\n\n      const iconMap: { [key: string]: any } = {\n        success: CheckSmall,\n        fail: CloseSmall,\n        loading: Loading,\n      }\n\n      const iconComponent = computed(() => icon || iconMap[type])\n\n      if (hasIcon) {\n        return (\n          <Icon size={iconSize} class={bem('icon')} classPrefix={iconPrefix}>\n            {iconComponent.value && <iconComponent.value />}\n          </Icon>\n        )\n      }\n\n      if (type === 'loading') {\n        return (\n          <Loading\n            class={[bem('loading'), bem('icon')]}\n            size={iconSize}\n            type={loadingType}\n          />\n        )\n      }\n    }\n\n    const renderMessage = () => {\n      const { type, message } = props\n\n      if (slots.message) {\n        return <div class={bem('text')}>{slots.message()}</div>\n      }\n\n      if (isDef(message) && message !== '') {\n        return type === 'html' ? (\n          <div key={0} class={bem('text')} innerHTML={String(message)} />\n        ) : (\n          <div class={bem('text')}>{message}</div>\n        )\n      }\n    }\n\n    watch(() => [props.show, props.forbidClick], toggleClickable)\n\n    watch(\n      () => [props.show, props.type, props.message, props.duration],\n      () => {\n        clearTimer()\n        if (props.show && props.duration > 0) {\n          timer = setTimeout(() => {\n            updateShow(false)\n          }, props.duration)\n        }\n      }\n    )\n\n    onMounted(toggleClickable)\n    onUnmounted(toggleClickable)\n\n    return () => (\n      <Popup\n        class={[\n          bem([\n            props.position,\n            props.wordBreak === 'normal' ? 'break-normal' : props.wordBreak,\n            { [props.type]: !props.icon },\n          ]),\n          props.className,\n        ]}\n        lockScroll={false}\n        onClick={onClick}\n        onClosed={clearTimer}\n        onUpdate:show={updateShow}\n        {...pick(props, popupInheritProps)}\n      >\n        {renderIcon()}\n        {renderMessage()}\n      </Popup>\n    )\n  },\n})\n"],"names":["name","bem","createNamespace","popupInheritProps","toastProps","icon","makeObjectProp","show","Boolean","type","makeStringProp","overlay","message","numericProp","iconSize","duration","makeNumberProp","position","teleport","String","Object","wordBreak","className","unknownProp","iconPrefix","transition","loadingType","forbidClick","overlayClass","overlayStyle","closeOnClick","closeOnClickOverlay","zIndex","defineComponent","props","emits","setup","emit","slots","timer","clickable","toggleClickable","newValue","lockClick","updateShow","onClick","clearTimer","clearTimeout","renderIcon","hasIcon","iconMap","success","CheckSmall","fail","CloseSmall","loading","Loading","iconComponent","computed","_createVNode","Icon","default","value","renderMessage","isDef","watch","setTimeout","onMounted","onUnmounted","Popup","_mergeProps","pick"],"mappings":"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"}