{"version":3,"file":"notification2.mjs","sources":["../../../../../../packages/components/notification/src/notification.vue"],"sourcesContent":["<template>\n  <transition\n    :name=\"ns.b('fade')\"\n    @before-leave=\"onClose\"\n    @after-leave=\"$emit('destroy')\"\n  >\n    <div\n      v-show=\"visible\"\n      :id=\"id\"\n      :class=\"[ns.b(), customClass, horizontalClass, typeClass]\"\n      :style=\"positionStyle\"\n      role=\"alert\"\n      data-test-name=\"notification\"\n      data-test-variant=\"\"\n      data-test-state=\"\"\n      @mouseenter=\"clearTimer\"\n      @mouseleave=\"startTimer\"\n      @click=\"onClick\"\n    >\n      <div v-if=\"iconComponent\" :class=\"[ns.e('icon-wrapper')]\">\n        <b-icon :class=\"[ns.e('icon')]\">\n          <component :is=\"iconComponent\" />\n        </b-icon>\n      </div>\n      <div :class=\"ns.e('group')\">\n        <h5 :class=\"ns.e('title')\" v-text=\"title\" />\n        <div\n          v-show=\"message\"\n          :class=\"ns.e('content')\"\n          :style=\"!!title ? undefined : { marginTop: '4px' }\"\n        >\n          <slot>\n            <p v-if=\"!dangerouslyUseHTMLString\">{{ message }}</p>\n            <!-- Caution here, message could've been compromized, nerver use user's input as message -->\n            <!-- eslint-disable-next-line -->\n            <p v-else v-html=\"message\"></p>\n          </slot>\n        </div>\n        <b-button\n          v-if=\"showClose\"\n          primary\n          xsmall\n          :class=\"ns.e('closeBtn')\"\n          :icon=\"Close\"\n          @click.stop=\"close\"\n        />\n      </div>\n    </div>\n  </transition>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, onMounted, ref } from 'vue'\nimport { useEventListener, useTimeoutFn } from '@vueuse/core'\nimport { CloseComponents, TypeComponentsMap } from '@bigin/utils'\nimport { EVENT_CODE } from '@bigin/constants'\nimport { BIcon } from '@bigin/components/icon'\nimport { BButton } from '@bigin/components/button'\nimport { useNamespace } from '@bigin/hooks'\nimport { notificationEmits, notificationProps } from './notification'\n\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({\n  name: 'BNotification',\n})\n\nconst props = defineProps(notificationProps)\ndefineEmits(notificationEmits)\n\nconst ns = useNamespace('notification')\nconst { Close } = CloseComponents\n\nconst visible = ref(false)\nlet timer: (() => void) | undefined = undefined\n\nconst typeClass = computed(() => {\n  const type = props.type\n  return type && TypeComponentsMap[props.type] ? ns.m(type) : ''\n})\n\nconst iconComponent = computed(() => {\n  if (!props.type) return props.icon\n  return TypeComponentsMap[props.type] || props.icon\n})\n\nconst horizontalClass = computed(() =>\n  props.position.endsWith('right') ? 'right' : 'left'\n)\n\nconst verticalProperty = computed(() =>\n  props.position.startsWith('top') ? 'top' : 'bottom'\n)\n\nconst positionStyle = computed<CSSProperties>(() => {\n  return {\n    [verticalProperty.value]: `${props.offset}px`,\n    zIndex: props.zIndex,\n  }\n})\n\nfunction startTimer() {\n  if (props.duration > 0) {\n    ;({ stop: timer } = useTimeoutFn(() => {\n      if (visible.value) close()\n    }, props.duration))\n  }\n}\n\nfunction clearTimer() {\n  timer?.()\n}\n\nfunction close() {\n  visible.value = false\n}\n\nfunction onKeydown({ code }: KeyboardEvent) {\n  if (code === EVENT_CODE.delete || code === EVENT_CODE.backspace) {\n    clearTimer() // press delete/backspace clear timer\n  } else if (code === EVENT_CODE.esc) {\n    // press esc to close the notification\n    if (visible.value) {\n      close()\n    }\n  } else {\n    startTimer() // resume timer\n  }\n}\n\n// lifecycle\nonMounted(() => {\n  startTimer()\n  visible.value = true\n})\n\nuseEventListener(document, 'keydown', onKeydown)\n\ndefineExpose({\n  visible,\n  /** @description close notification */\n  close,\n})\n</script>\n"],"names":[],"mappings":"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"}