UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 11.7 kB
{"version":3,"file":"alert.vue2.cjs","sources":["../../../components/alert/alert.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, onMounted, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { adjustAlpha, getRangeWidth, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { alertProps } from './props'\nimport { alertTypes } from './symbol'\n\nimport type { AlertSlots } from './symbol'\n\ndefineOptions({ name: 'Alert' })\n\nconst _props = defineProps(alertProps)\nconst props = useProps('alert', _props, {\n type: {\n default: 'primary',\n validator: value => alertTypes.includes(value),\n },\n title: '',\n colorfulText: false,\n icon: {\n isFunc: true,\n default: false,\n },\n closable: false,\n iconColor: '',\n noBorder: false,\n banner: false,\n manual: false,\n scroll: false,\n scrollSpeed: 1,\n color: null,\n slots: () => ({}),\n})\n\nconst slots = defineSlots<AlertSlots>()\n\nconst nh = useNameHelper('alert')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n default: icons.value.alert,\n primary: icons.value.info,\n info: icons.value.info,\n success: icons.value.success,\n warning: icons.value.warning,\n error: icons.value.error,\n}))\n\nconst closed = ref(false)\nconst hidden = ref(false)\nconst scrollDuration = ref(0)\nconst scrollOffset = ref(0)\nconst scrollWidth = ref(0)\n\nconst content = ref<HTMLElement>()\nconst scrollEl = ref<HTMLElement>()\n\nconst hasTitle = computed(() => {\n return !!(props.title || slots.title)\n})\nconst hasIcon = computed(() => {\n return !!(props.icon || slots.icon)\n})\nconst className = computed(() => {\n return {\n [nh.b()]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.type)]: props.type,\n [nh.bm('colorful-text')]: props.colorfulText,\n [nh.bm('has-title')]: hasTitle.value,\n [nh.bm('has-icon')]: hasIcon.value,\n [nh.bm('closable')]: props.closable,\n [nh.bm('no-border')]: !props.banner && props.noBorder,\n [nh.bm('banner')]: props.banner,\n }\n})\nconst style = computed(() => {\n if (!props.color) return undefined\n\n const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\n const baseColor = parseColorToRgba(props.color)\n\n return nh.cvm({\n 'bg-color': adjustAlpha(baseColor, 0.2).toString(),\n 'b-color': adjustAlpha(baseColor, 0.5).toString(),\n 'icon-color': mixColor(black, baseColor, 0.2).toString(),\n ...(props.colorfulText\n ? {\n 'text-color': mixColor(black, baseColor, 0.2).toString(),\n 'title-color': mixColor(black, baseColor, 0.2).toString(),\n }\n : {}),\n })\n})\nconst iconComp = computed(() => {\n if (typeof props.icon === 'boolean') {\n return predefinedIcons.value[props.type] ?? {}\n }\n\n return { icon: props.icon }\n})\nconst scrollStyle = computed(() => {\n return {\n width: `${scrollWidth.value}px`,\n transitionDuration: `${scrollDuration.value}ms`,\n transform: `translateX(${scrollOffset.value}px)`,\n }\n})\n\nwatch(\n () => props.scroll,\n value => {\n value && startScroll()\n },\n)\n\nonMounted(() => {\n props.scroll && startScroll()\n})\n\nfunction handleClose() {\n if (!props.manual) {\n closed.value = true\n }\n\n emitEvent(props.onClose)\n}\n\nfunction handleAfterLeave() {\n emitEvent(props.onHide)\n hidden.value = true\n}\n\nfunction startScroll() {\n if (content.value && scrollEl.value) {\n const contentRect = content.value.getBoundingClientRect()\n const rangeWidth = getRangeWidth(scrollEl.value)\n const duration = ((contentRect.width + rangeWidth) * 12) / (Math.max(props.scrollSpeed, 0) || 1)\n\n scrollDuration.value = 0\n scrollOffset.value = contentRect.width\n scrollWidth.value = rangeWidth\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n scrollDuration.value = duration\n scrollOffset.value = -rangeWidth\n })\n })\n }\n}\n\nfunction handleScrollEnd() {\n emitEvent(props.onScrollEnd)\n requestAnimationFrame(startScroll)\n}\n</script>\n\n<template>\n <CollapseTransition v-if=\"!hidden\" fade-effect @after-leave=\"handleAfterLeave\">\n <div\n v-if=\"!closed\"\n :class=\"className\"\n role=\"alert\"\n :style=\"style\"\n >\n <div :class=\"nh.be('wrapper')\">\n <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n <slot name=\"title\">\n <Renderer :renderer=\"props.slots.title\">\n {{ title }}\n </Renderer>\n </slot>\n </div>\n <div ref=\"content\" :class=\"[nh.be('content'), props.scroll && nh.bem('content', 'scroll')]\">\n <span\n v-if=\"props.scroll\"\n ref=\"scrollEl\"\n :class=\"nh.be('scroll')\"\n :style=\"scrollStyle\"\n @transitionend=\"handleScrollEnd\"\n >\n <slot>\n <Renderer :renderer=\"props.slots.default\"></Renderer>\n </slot>\n </span>\n <slot v-else>\n <Renderer :renderer=\"props.slots.default\"></Renderer>\n </slot>\n </div>\n </div>\n <button\n v-if=\"props.closable\"\n type=\"button\"\n :class=\"nh.be('close')\"\n @click=\"handleClose\"\n >\n <slot name=\"close\">\n <Renderer :renderer=\"props.slots.close\">\n <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n </Renderer>\n </slot>\n </button>\n <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\n <slot name=\"icon\">\n <Renderer :renderer=\"props.slots.icon\">\n <Icon\n v-bind=\"iconComp\"\n :scale=\"hasTitle ? 2 : 1\"\n :style=\"{ color: props.iconColor }\"\n ></Icon>\n </Renderer>\n </slot>\n </div>\n </div>\n </CollapseTransition>\n</template>\n"],"names":["_props","__props","props","useProps","value","alertTypes","slots","_useSlots","nh","useNameHelper","icons","useIcons","predefinedIcons","computed","closed","ref","hidden","scrollDuration","scrollOffset","scrollWidth","content","scrollEl","hasTitle","hasIcon","className","style","rootStyle","isClient","black","parseColorToRgba","baseColor","adjustAlpha","mixColor","iconComp","scrollStyle","watch","startScroll","onMounted","handleClose","emitEvent","handleAfterLeave","contentRect","rangeWidth","getRangeWidth","duration","handleScrollEnd","_createBlock","_unref","CollapseTransition","_createElementBlock","_createElementVNode","_normalizeClass","_renderSlot","_ctx","_createVNode","Renderer","title","Icon","_mergeProps"],"mappings":"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"}