UNPKG

song-ui-u

Version:

vue3 + js的PC前端组件库

204 lines (186 loc) 7.08 kB
'use strict'; var vue = require('vue'); var index$1 = require('../../../hook/use-namespace/index.cjs'); var index$2 = require('../../../hook/use-style/index.cjs'); var index = require('../../../hook/use-zindex/index.cjs'); var core = require('@vueuse/core'); require('../../button/index.cjs'); require('../../buttonGroup/index.cjs'); var index$3 = require('../../icon/index.cjs'); require('../../input/index.cjs'); require('../../textarea/index.cjs'); require('../../row/index.cjs'); require('../../col/index.cjs'); require('../../container/index.cjs'); require('../../checkbox/index.cjs'); require('../../switch/index.cjs'); require('../../form/index.cjs'); require('../index.cjs'); require('../../mask/src/mask.cjs'); require('../../modal/index.cjs'); require('../../messageBox/index.cjs'); require('../../drawer/index.cjs'); require('../../badge/index.cjs'); require('../../space/index.cjs'); require('../../image/index.cjs'); require('../../radio/index.cjs'); require('../../divider/index.cjs'); require('../../chat/index.cjs'); require('../../progress/index.cjs'); require('../../upload/index.cjs'); require('../../vTree/index.cjs'); require('../../table/index.cjs'); require('../../tabs/index.cjs'); require('../../menu/index.cjs'); require('../../steps/index.cjs'); require('../../header/index.cjs'); require('../../breadcrumble/index.cjs'); require('../../datePicker/index.cjs'); require('../../tooltip/index.cjs'); require('../../popover/index.cjs'); require('../../timePicker/index.cjs'); require('../../select/index.cjs'); require('../../collapse/index.cjs'); require('../../card/index.cjs'); require('../../timeline/index.cjs'); require('../../tag/index.cjs'); require('../../result/index.cjs'); require('../../sender/index.cjs'); var componentsType = require('../../../utils/componentsType.cjs'); var themeType = require('../../../utils/themeType.cjs'); var instance = require('./instance.cjs'); var _pluginVue_exportHelper = require('../../../_virtual/_plugin-vue_export-helper.cjs'); const __default__ = { name: "AlMessage" }; const _sfc_main = /*#__PURE__*/Object.assign(__default__, { props: { type: { type: String, default: "", }, id: { type: String, default: "", }, offset: { type: Number, default: 0, }, content: { type: String, default: "", }, duration: { type: Number, default: 3000, }, onClose: Function, onUnmount: Function, showClose: Boolean, background: Boolean, }, setup(__props, { expose: __expose }) { const ns = index$1.useNamespace("message"); const { nextZindex, currentZindex } = index.useZindex(); const uStyle = index$2.useStyle(); /** props */ const props = __props; const visible = vue.ref(false); const messageRef = vue.ref(null); const height = vue.ref(0); // 上一个message const prevButtonPosition = vue.computed(() => instance.getPrevBottomOffset(props.id)); // 偏移更新 const offsetTop = vue.computed(() => { return props.offset + prevButtonPosition.value; }); // 底部到可视区顶部的距离 const bottomPosition = vue.computed(() => height.value + offsetTop.value); // 自定义样式 const customStyle = vue.computed(() => { return { top: offsetTop.value + "px", zIndex: currentZindex.value, }; }); // icon const icon = vue.computed(() => { return componentsType.typeIcon[props.type] || props.type; }); const theme = vue.computed(() => themeType.themeType?.[props.type] || props.type); const startTime = async () => { if (props.duration === 0) { return false; } ({ stop } = core.useTimeoutFn(() => { close(); }, props.duration)); }; const onMouseEnter = () => stop?.(); const close = () => (visible.value = false); vue.onMounted(() => { visible.value = true; nextZindex(); startTime(); }); core.useResizeObserver(messageRef, (entries) => { const entry = entries[0]; height.value = entry.contentRect.height; }); __expose({ bottomPosition }); const __returned__ = { ns, nextZindex, currentZindex, uStyle, props, visible, messageRef, height, prevButtonPosition, offsetTop, bottomPosition, customStyle, icon, theme, startTime, onMouseEnter, close, computed: vue.computed, ref: vue.ref, onMounted: vue.onMounted, get useNamespace() { return index$1.useNamespace }, get useStyle() { return index$2.useStyle }, get tryOnBeforeUnmount() { return core.tryOnBeforeUnmount }, get useResizeObserver() { return core.useResizeObserver }, get useTimeoutFn() { return core.useTimeoutFn }, get XIcon() { return index$3.XIcon }, get typeIcon() { return componentsType.typeIcon }, get themeType() { return themeType.themeType }, get getPrevBottomOffset() { return instance.getPrevBottomOffset }, get useZindex() { return index.useZindex } }; Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true }); return __returned__ } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return (vue.openBlock(), vue.createBlock(vue.Transition, { name: $setup.ns.b(), onLeave: $props.onClose, onAfterLeave: $props.onUnmount, persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("div", { ref: "messageRef", class: vue.normalizeClass([$setup.ns.b(), $setup.ns.m($setup.theme), $setup.ns.is('background', $props.background)]), style: vue.normalizeStyle([$setup.customStyle]), onMouseenter: $setup.onMouseEnter, onMouseleave: $setup.startTime }, [ vue.createElementVNode("div", { class: vue.normalizeClass([$setup.ns.e('icon')]) }, [ vue.createVNode($setup["XIcon"], null, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($setup.icon))) ]), _: 1 /* STABLE */ }) ], 2 /* CLASS */), vue.createElementVNode("div", { class: vue.normalizeClass([$setup.ns.e('content')]) }, vue.toDisplayString($props.content), 3 /* TEXT, CLASS */), ($props.showClose) ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass([$setup.ns.e('close')]), onClick: vue.withModifiers($setup.close, ["stop"]) }, [ vue.createVNode($setup["XIcon"], null, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($setup.typeIcon['close']))) ]), _: 1 /* STABLE */ }) ], 2 /* CLASS */)) : vue.createCommentVNode("v-if", true) ], 38 /* CLASS, STYLE, NEED_HYDRATION */), [ [vue.vShow, $setup.visible] ]) ]), _: 1 /* STABLE */ }, 8 /* PROPS */, ["name", "onLeave", "onAfterLeave"])) } var MessageNode = /*#__PURE__*/_pluginVue_exportHelper(_sfc_main, [['render',_sfc_render],['__file',"E:\\code\\my-code\\song-ui-ultra\\packages\\components\\message\\src\\message.vue"]]); module.exports = MessageNode; //# sourceMappingURL=message.vue.cjs.map