UNPKG

zmp-vue

Version:

Build full featured iOS & Android apps using ZMP & Vue

200 lines (185 loc) 7.81 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import { renderSlot as _renderSlot, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode } from "vue"; var _hoisted_1 = { class: "message-content" }; var _hoisted_2 = { key: 0, class: "message-image" }; var _hoisted_3 = { key: 1, class: "message-text-header" }; var _hoisted_4 = { key: 0, class: "message-typing-indicator" }; var _hoisted_5 = /*#__PURE__*/_createVNode("div", null, null, -1); var _hoisted_6 = /*#__PURE__*/_createVNode("div", null, null, -1); var _hoisted_7 = /*#__PURE__*/_createVNode("div", null, null, -1); var _hoisted_8 = { key: 3, class: "message-text-footer" }; function render(_ctx, _cache) { return _openBlock(), _createBlock("div", { class: _ctx.classes, onClick: _cache[7] || (_cache[7] = function () { return _ctx.onClick && _ctx.onClick.apply(_ctx, arguments); }) }, [_renderSlot(_ctx.$slots, "start"), _ctx.hasAvatar ? (_openBlock(), _createBlock("div", { key: 0, class: "message-avatar", style: { backgroundImage: _ctx.avatar && "url(" + _ctx.avatar + ")" }, onClick: _cache[1] || (_cache[1] = function () { return _ctx.onAvatarClick && _ctx.onAvatarClick.apply(_ctx, arguments); }) }, [_renderSlot(_ctx.$slots, "avatar")], 4)) : _createCommentVNode("", true), _createVNode("div", _hoisted_1, [_renderSlot(_ctx.$slots, "content-start"), _ctx.hasName ? (_openBlock(), _createBlock("div", { key: 0, class: "message-name", onClick: _cache[2] || (_cache[2] = function () { return _ctx.onNameClick && _ctx.onNameClick.apply(_ctx, arguments); }) }, [_createTextVNode(_toDisplayString(_ctx.name) + " ", 1), _renderSlot(_ctx.$slots, "name")])) : _createCommentVNode("", true), _ctx.hasHeader ? (_openBlock(), _createBlock("div", { key: 1, class: "message-header", onClick: _cache[3] || (_cache[3] = function () { return _ctx.onHeaderClick && _ctx.onHeaderClick.apply(_ctx, arguments); }) }, [_createTextVNode(_toDisplayString(_ctx.header) + " ", 1), _renderSlot(_ctx.$slots, "header")])) : _createCommentVNode("", true), _createVNode("div", { class: "message-bubble", onClick: _cache[5] || (_cache[5] = function () { return _ctx.onBubbleClick && _ctx.onBubbleClick.apply(_ctx, arguments); }) }, [_renderSlot(_ctx.$slots, "bubble-start"), _ctx.hasImage ? (_openBlock(), _createBlock("div", _hoisted_2, [_renderSlot(_ctx.$slots, "image", {}, function () { return [_createVNode("img", { src: _ctx.image }, null, 8, ["src"])]; })])) : _createCommentVNode("", true), _ctx.hasTextHeader ? (_openBlock(), _createBlock("div", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.textHeader) + " ", 1), _renderSlot(_ctx.$slots, "text-header")])) : _createCommentVNode("", true), _ctx.hasText ? (_openBlock(), _createBlock("div", { key: 2, class: "message-text", onClick: _cache[4] || (_cache[4] = function () { return _ctx.onTextClick && _ctx.onTextClick.apply(_ctx, arguments); }) }, [_createTextVNode(_toDisplayString(_ctx.text) + " ", 1), _renderSlot(_ctx.$slots, "text"), _ctx.typing ? (_openBlock(), _createBlock("div", _hoisted_4, [_hoisted_5, _hoisted_6, _hoisted_7])) : _createCommentVNode("", true)])) : _createCommentVNode("", true), _ctx.hasTextFooter ? (_openBlock(), _createBlock("div", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.textFooter) + " ", 1), _renderSlot(_ctx.$slots, "text-footer")])) : _createCommentVNode("", true), _renderSlot(_ctx.$slots, "bubble-end"), _renderSlot(_ctx.$slots, "default")]), _ctx.hasFooter ? (_openBlock(), _createBlock("div", { key: 2, class: "message-footer", onClick: _cache[6] || (_cache[6] = function () { return _ctx.onFooterClick && _ctx.onFooterClick.apply(_ctx, arguments); }) }, [_createTextVNode(_toDisplayString(_ctx.footer) + " ", 1), _renderSlot(_ctx.$slots, "footer")])) : _createCommentVNode("", true), _renderSlot(_ctx.$slots, "content-end")]), _renderSlot(_ctx.$slots, "end")], 2); } import { computed } from 'vue'; import { classNames } from '../shared/utils'; import { colorClasses, colorProps } from '../shared/mixins'; export default { name: 'zmp-message', render: render, props: _extends({ text: String, name: String, avatar: String, type: { type: String, default: 'sent' }, image: String, header: String, footer: String, textHeader: String, textFooter: String, first: Boolean, last: Boolean, tail: Boolean, sameName: Boolean, sameHeader: Boolean, sameFooter: Boolean, sameAvatar: Boolean, typing: Boolean }, colorProps), emits: ['click', 'click:name', 'click:text', 'click:avatar', 'click:header', 'click:footer', 'click:bubble'], setup: function setup(props, _ref) { var emit = _ref.emit, slots = _ref.slots; var onClick = function onClick(event) { emit('click', event); }; var onNameClick = function onNameClick(event) { emit('click:name', event); }; var onTextClick = function onTextClick(event) { emit('click:text', event); }; var onAvatarClick = function onAvatarClick(event) { emit('click:avatar', event); }; var onHeaderClick = function onHeaderClick(event) { emit('click:header', event); }; var onFooterClick = function onFooterClick(event) { emit('click:footer', event); }; var onBubbleClick = function onBubbleClick(event) { emit('click:bubble', event); }; var classes = computed(function () { return classNames('message', { 'message-sent': props.type === 'sent', 'message-received': props.type === 'received', 'message-typing': props.typing, 'message-first': props.first, 'message-last': props.last, 'message-tail': props.tail, 'message-same-name': props.sameName, 'message-same-header': props.sameHeader, 'message-same-footer': props.sameFooter, 'message-same-avatar': props.sameAvatar }, colorClasses(props)); }); var hasAvatar = computed(function () { return slots.avatar || props.avatar; }); var hasName = computed(function () { return slots.name || props.name; }); var hasHeader = computed(function () { return slots.header || props.header; }); var hasImage = computed(function () { return slots.image || props.image; }); var hasTextHeader = computed(function () { return slots['text-header'] || props.textHeader; }); var hasText = computed(function () { return slots.text || props.text || props.typing; }); var hasTextFooter = computed(function () { return slots['text-footer'] || props.textFooter; }); var hasFooter = computed(function () { return slots.footer || props.footer; }); return { classes: classes, onClick: onClick, onNameClick: onNameClick, onTextClick: onTextClick, onAvatarClick: onAvatarClick, onHeaderClick: onHeaderClick, onFooterClick: onFooterClick, onBubbleClick: onBubbleClick, hasAvatar: hasAvatar, hasName: hasName, hasHeader: hasHeader, hasImage: hasImage, hasTextHeader: hasTextHeader, hasText: hasText, hasTextFooter: hasTextFooter, hasFooter: hasFooter }; } };