UNPKG

free-imui-neo

Version:

基于VUE3实现的即时通讯UI组件

1,075 lines (902 loc) 95.4 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("vue")); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["index"] = factory(require("vue")); else root["index"] = factory(root["Vue"]); })((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "fb15"); /******/ }) /************************************************************************/ /******/ ({ /***/ "2dd8": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "2e03": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "31a0": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "327d": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "34aa": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "72cb": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "7c7f": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "8875": /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// addapted from the document.currentScript polyfill by Adam Miller // MIT license // source: https://github.com/amiller-gh/currentScript-polyfill // added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505 (function (root, factory) { if (true) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} }(typeof self !== 'undefined' ? self : this, function () { function getCurrentScript () { var descriptor = Object.getOwnPropertyDescriptor(document, 'currentScript') // for chrome if (!descriptor && 'currentScript' in document && document.currentScript) { return document.currentScript } // for other browsers with native support for currentScript if (descriptor && descriptor.get !== getCurrentScript && document.currentScript) { return document.currentScript } // IE 8-10 support script readyState // IE 11+ & Firefox support stack trace try { throw new Error(); } catch (err) { // Find the second match for the "at" string to get file src url from stack. var ieStackRegExp = /.*at [^(]*\((.*):(.+):(.+)\)$/ig, ffStackRegExp = /@([^@]*):(\d+):(\d+)\s*$/ig, stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack), scriptLocation = (stackDetails && stackDetails[1]) || false, line = (stackDetails && stackDetails[2]) || false, currentLocation = document.location.href.replace(document.location.hash, ''), pageSource, inlineScriptSourceRegExp, inlineScriptSource, scripts = document.getElementsByTagName('script'); // Live NodeList collection if (scriptLocation === currentLocation) { pageSource = document.documentElement.outerHTML; inlineScriptSourceRegExp = new RegExp('(?:[^\\n]+?\\n){0,' + (line - 2) + '}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*', 'i'); inlineScriptSource = pageSource.replace(inlineScriptSourceRegExp, '$1').trim(); } for (var i = 0; i < scripts.length; i++) { // If ready state is interactive, return the script tag if (scripts[i].readyState === 'interactive') { return scripts[i]; } // If src matches, return the script tag if (scripts[i].src === scriptLocation) { return scripts[i]; } // If inline source matches, return the script tag if ( scriptLocation === currentLocation && scripts[i].innerHTML && scripts[i].innerHTML.trim() === inlineScriptSource ) { return scripts[i]; } } // If no match, return null return null; } }; return getCurrentScript })); /***/ }), /***/ "8bbf": /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__; /***/ }), /***/ "9c5a": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "9faf": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "a9a5": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "fb15": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, "FreeIM", function() { return /* reexport */ FreeIM; }); __webpack_require__.d(__webpack_exports__, "FreeAvatar", function() { return /* reexport */ packages_avatar_0; }); __webpack_require__.d(__webpack_exports__, "FreeButton", function() { return /* reexport */ packages_button_0; }); __webpack_require__.d(__webpack_exports__, "FreeContact", function() { return /* reexport */ FreeContact; }); __webpack_require__.d(__webpack_exports__, "FreeMessages", function() { return /* reexport */ FreeMessages; }); __webpack_require__.d(__webpack_exports__, "FreeEditor", function() { return /* reexport */ FreeEditor; }); __webpack_require__.d(__webpack_exports__, "FreeDialog", function() { return /* reexport */ FreeDialog; }); __webpack_require__.d(__webpack_exports__, "FreeMessageImage", function() { return /* reexport */ FreeMessageImage; }); __webpack_require__.d(__webpack_exports__, "FreeMessageTemplate", function() { return /* reexport */ FreeMessageTemplate; }); __webpack_require__.d(__webpack_exports__, "FreeMessageFile", function() { return /* reexport */ FreeMessageFile; }); __webpack_require__.d(__webpack_exports__, "FreeMessageText", function() { return /* reexport */ FreeMessageText; }); __webpack_require__.d(__webpack_exports__, "FreeMessageEvent", function() { return /* reexport */ FreeMessageEvent; }); // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js // This file is imported into lib/wc client bundles. if (typeof window !== 'undefined') { var currentScript = window.document.currentScript if (true) { var getCurrentScript = __webpack_require__("8875") currentScript = getCurrentScript() // for backward compatibility, because previously we directly included the polyfill if (!('currentScript' in document)) { Object.defineProperty(document, 'currentScript', { get: getCurrentScript }) } } var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/) if (src) { __webpack_require__.p = src[1] // eslint-disable-line } } // Indicate to webpack that this file can be concatenated /* harmony default export */ var setPublicPath = (null); // CONCATENATED MODULE: ./packages/utils/props.ts var numericProp = [Number, String]; var makeNumericProp = function makeNumericProp(defaultVal) { return { type: numericProp, default: defaultVal }; }; var makeNumberProp = function makeNumberProp(defaultVal) { return { type: [Number], default: defaultVal }; }; var makeStringProp = function makeStringProp(defaultVal) { return { type: [String], default: defaultVal }; }; var makeBooleanProp = function makeBooleanProp(defaultVal) { return { type: [Boolean], default: defaultVal }; }; var makeObjectProp = function makeObjectProp() { return { type: Object, required: true }; }; var makeArrayProp = function makeArrayProp() { return { type: Array, default: function _default() { return []; } }; }; // CONCATENATED MODULE: ./packages/utils/validate.ts var isArray = Array.isArray; var isString = function isString(val) { return typeof val === 'string'; }; var isFunction = function isFunction(val) { return typeof val === 'function'; }; var extend = Object.assign; var camelize = function camelize(str) { return str.replace(/-(\w)/g, function (_, c) { return c.toUpperCase(); }); }; // CONCATENATED MODULE: ./packages/utils/with-install.ts function withInstall(options) { options.install = function (app) { var name = options.name; app.component(name, options); app.component(camelize("-".concat(name)), options); }; return options; } // CONCATENATED MODULE: ./packages/utils/format.ts var formatDay = function formatDay(time) { var date = new Date(time); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); return year + '/' + month + '/' + day; }; var guid = function guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8; return v.toString(16); }); }; function formatByte(value) { if (!value) { return '0 Bytes'; } var unitArr = ['B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']; var index = 0; index = Math.floor(Math.log(value) / Math.log(1024)); var size = value / Math.pow(1024, index); size = parseFloat(size.toFixed(2)); return size + unitArr[index]; } function formatTime(value) { var date = new Date(value); var nDate = new Date(); var getFullYear = function getFullYear(t) { return t.getFullYear(); }; var getMD = function getMD(t) { return "".concat(t.getMonth() + 1, "-").concat(t.getDay()); }; var dateYear = getFullYear(date); var nDateYear = getFullYear(nDate); var f; if (dateYear !== nDateYear) { f = 'Y年M月D日 h:m'; } else if ("".concat(dateYear, "-").concat(getMD(date)) === "".concat(nDateYear, "-").concat(getMD(nDate))) { f = 'h:m'; } else { f = 'M月D日 h:m'; } return formatDate(value, f); } function formatDate(t, f) { if (!f) f = 'Y-M-D h:m:s'; if (t) { t = new Date(t); } else { t = new Date(); } var arr = [t.getFullYear().toString(), addZero(t.getMonth() + 1), addZero(t.getDate()), addZero(t.getHours()), addZero(t.getMinutes()), addZero(t.getSeconds())]; var fs = 'YMDhms'; for (var i = 0; i < arr.length; i++) { f = f.replace(fs.charAt(i), arr[i]); } return f; } function addZero(v) { return v < 10 ? "0".concat(v) : v.toString(); } // CONCATENATED MODULE: ./packages/utils/index.ts // EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"} var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf"); // CONCATENATED MODULE: ./packages/utils/constant.tsx var defaultMenus = [{ key: 'messages', title: '消息', unread: 0, click: null, bottom: false, render: function render() { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("i", { "class": "free-icon-messages" }, null); } }, { key: 'contacts', title: '联系人', unread: 0, click: null, bottom: false, render: function render() { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("i", { "class": "free-icon-contacts" }, null); } }, { key: 'settings', title: '联系人', unread: 0, click: null, bottom: true, render: function render() { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("i", { "class": "free-icon-menu" }, null); } }]; var defaultContacts = [{ id: 1, nickname: '猪小明', avatar: '猪小明', sort: 'Z', lastMessage: '今天几点下班?', lastMessageTime: 1655114917359, unread: 0 }, { id: 2, nickname: '茅台', avatar: '茅台', sort: 'M', lastMessage: '晚一点', lastMessageTime: 1655114917370, unread: 0 }, { id: 3, nickname: '冷檬', avatar: '冷檬', sort: 'L', lastMessage: '今晚一起看电影吗', lastMessageTime: 1655114917370, unread: 0 }, { id: 3, nickname: '米线', avatar: '米线', sort: 'M', lastMessage: '文件已经发给你了', lastMessageTime: 1655114917370, unread: 2 }]; // CONCATENATED MODULE: ./packages/hooks/useMenus.tsx var defaultMenusIndex = { messages: 0, contacts: 1 }; function useMenus() { var customMenus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; var menus = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])([]); if (Array.isArray(customMenus)) { menus.value = customMenus.map(function (menu) { if (Object.keys(defaultMenusIndex).includes(menu.key)) { return defaultMenus[defaultMenusIndex[menu.key]]; } return menu; }); } else { menus.value = defaultMenus; } return menus; } // CONCATENATED MODULE: ./packages/hooks/index.ts // CONCATENATED MODULE: ./packages/hooks/use-expose.ts function useExpose(apis) { var instance = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["getCurrentInstance"])(); if (instance) { extend(instance.proxy, apis); } } // CONCATENATED MODULE: ./packages/free/free.tsx function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _isSlot(s) { return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !Object(external_commonjs_vue_commonjs2_vue_root_Vue_["isVNode"])(s); } var freeProps = { width: makeNumericProp(860), height: makeNumericProp(580), shape: makeStringProp('square'), showMenu: makeBooleanProp(true), userInfo: makeObjectProp(), messageName: makeBooleanProp(false), menuAvatar: makeBooleanProp(true) }; /* harmony default export */ var free = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ name: 'free-im', props: freeProps, provide: function provide() { return { userInfo: this.userInfo, freeIM: this }; }, setup: function setup(props, _ref) { var slots = _ref.slots, emit = _ref.emit; var width = props.width, height = props.height; var wrapper_style = { width: width + 'px', height: height + 'px' }; var activeMenu = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])('messages'); var contacts = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])([]); var groups = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])([]); var curContact = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(); var currentContactId = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(); var messagesBucket = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])(new Map()); var messageLoadedBucket = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])(new Map()); var loadingBucket = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])(new Map()); var lockBucket = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])(new Map()); var menus = useMenus(); var msgRef = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(null); var currentContact = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { return contacts.value.find(function (contact) { return contact.id === currentContactId.value; }); }); var getCurrentMessages = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { if (!currentContactId.value) return []; return messagesBucket.get(currentContactId.value) || []; }); var lastMessages = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { var data = contacts.value.filter(function (contact) { return contact.lastMessage; }); data.sort(function (c1, c2) { return (c2.lastMessageTime ? c2.lastMessageTime : 0) - (c1.lastMessageTime ? c1.lastMessageTime : 0); }); return data; }); var allUnread = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { var unread = 0; lastMessages.value.forEach(function (contact) { unread += contact.unread; }); return unread; }); function renderMenuItem() { var top = []; var bottom = []; menus.value.forEach(function (menu) { var _slot; var node = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-menu-item ".concat(activeMenu.value === menu.key ? 'free-menu-active' : ''), "title": menu.title, "onClick": function onClick() { isFunction(menu.click) ? menu.click : changeMenuClick(menu); } }, [menu.key === 'messages' ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("free-badge"), { "unread": allUnread.value }, _isSlot(_slot = menu.render()) ? _slot : { default: function _default() { return [_slot]; } }) : menu.render()]); !menu.bottom ? top.push(node) : bottom.push(node); }); function changeMenuClick(menu) { if (menu.bottom) return; changeMenu(menu.key); } return { top: top, bottom: bottom }; } function renderMenu() { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-menu" }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-menu-top" }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("free-avatar"), { "class": "free-menu-avatar", "avatar": props.userInfo.avatar }, null), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], props.menuAvatar]]), renderMenuItem().top]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-menu-bottom" }, [renderMenuItem().bottom])]); } function renderSidebar() { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-sidebar free-sidebar-messages" }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-messages-fiexd_top" }, [slots['messages-fixed-top'] ? slots['messages-fixed-top']() : '']), renderMessages()]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], activeMenu.value === 'messages']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-sidebar free-sidebar-messages" }, [renderContacts()]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], activeMenu.value === 'contacts']])]); } function initContacts(_contacts) { _contacts.forEach(function (contact) { if (contact.group) { groups.value.push(contact); } else { contacts.value.push(contact); } }); sortContacts(); } function changeMenu(menuName) { emit('change-menu', menuName); activeMenu.value = menuName; } function changeContact(contactId, menuName) { if (menuName) { changeMenu(menuName); } else { if (contactId === currentContactId.value) return; } currentContactId.value = contactId; emit('change-contact', currentContact.value); if (!messagesBucket.has(contactId)) { pullMessages(function () { if (msgRef.value) { msgRef.value.scrollToBottom(); } }); } else { loadingBucket.set(contactId, false); } } function scrollToBottom() { msgRef.value && msgRef.value.scrollToBottom(); } function renderMessages() { var click = function click(contact) { updateUnread(contact); currentContactId.value = contact.id; if (!messagesBucket.has(contact.id)) { pullMessages(function () { if (msgRef.value) { msgRef.value.scrollToBottom(); } }); } else { var _msgRef$value; loadingBucket.set(contact.id, false); (_msgRef$value = msgRef.value) === null || _msgRef$value === void 0 ? void 0 : _msgRef$value.scrollToBottom(); } emit('change-contact-message', currentContact.value); }; return lastMessages.value.map(function (contact) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("free-contact"), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])(activeClass(contact.id, currentContactId.value), { "onClick": function onClick() { click(contact); }, "contact": contact, "is-message": true }), null); }); } function updateUnread(contact) { var index = findContactById(contact.id); contacts.value[index].unread = 0; } function pullMessages(isEnd) { var _messagesBucket$get; var contact = currentContact.value; if (!messagesBucket.has(contact.id)) messagesBucket.set(contact.id, []); if (lockBucket.has(contact.id)) return; var len = messagesBucket.has(contact.id) ? (_messagesBucket$get = messagesBucket.get(contact.id)) === null || _messagesBucket$get === void 0 ? void 0 : _messagesBucket$get.length : 0; loadingBucket.set(contact.id, true); lockBucket.set(contact.id, true); emit('pull-messages', contact, /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(messages, end) { return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (messages.length === 0) {} addMessage(messages, contact.id, 'unshift'); // messagesBucket.get(contact.id)?.unshift(...messages) messageLoadedBucket.set(contact.id, end); loadingBucket.set(contact.id, false); lockBucket.delete(contact.id); isEnd && isEnd(!!end); case 6: case "end": return _context.stop(); } } }, _callee); })); return function (_x, _x2) { return _ref2.apply(this, arguments); }; }(), len); } var activeClass = function activeClass(id, curCid) { return { class: curCid === id ? 'free-contact-active' : '' }; }; function renderContacts() { var click = function click(data) { curContact.value = data; }; var curIndex = ''; var contactNode = contacts.value.map(function (contact) { var _curContact$value; var node = [contact.sort !== curIndex ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-index" }, [contact.sort]) : '', Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("free-contact"), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])(activeClass(contact.id, (_curContact$value = curContact.value) === null || _curContact$value === void 0 ? void 0 : _curContact$value.id), { "onClick": click, "contact": contact, "base": true }), null)]; curIndex = contact.sort; return node; }); return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-contact-category-label" }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])("\u7FA4\u804A")]), groups.value.map(function (group) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("free-contact"), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])(activeClass(group.id), { "onClick": click, "contact": group, "base": true }), null); }), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])("div", { "class": "free-contact-category-label" }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])("\u8054\u7CFB\u4EBA")]), contactNode]; } function sortContacts() { contacts.value.sort(function (a, b) { if (a.group) { return a.sort.localeCompare(b.sort); } return a.sort.localeCompare(b.sort); }); } var currentLoadend = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { return messageLoadedBucket.has(currentContactId.value) ? messageLoadedBucket.get(currentContactId.value) : false; }); var currentLoading = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { if (loadingBucket.has(currentContactId.value)) { return loadingBucket.get(currentContactId.value); } return true; }); var lastMessageRender = function lastMessageRender(message) { if (message.type === 'file') { return '[文件]'; } else if (message.type === 'image') { return '[图片]'; } return message.content; }; var handleSend = function handleSend(content) { console.log(content); var message = createMessage({ content: content }); appendMessage(message); if (!currentContact.value) return; _emitSend(currentContact.value, message, function (contact) { updateContact({ id: contact.id, lastMessageTime: message.time, lastMessage: lastMessageRender(message), lastMessageStatus: message.status, unread: 0 }); }); }; function _emitSend(contact, message, next, file) { emit('send', contact, message, function (message, contact) { var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'success'; next(contact); updateMessage(Object.assign(message, { status: status })); }, file); } function updateMessage(message) { if (messagesBucket.has(message.toContactId)) { var _messagesBucket$get2; var index = (_messagesBucket$get2 = messagesBucket.get(message.toContactId)) === null || _messagesBucket$get2 === void 0 ? void 0 : _messagesBucket$get2.findIndex(function (item) { return item.id === message.id; }); if (index !== -1) { var findMessage = messagesBucket.get(message.toContactId)[index]; messagesBucket.get(message.toContactId)[index] = _objectSpread(_objectSpread(_objectSpread({}, findMessage), message), {}, { toContactId: findMessage.toContactId }); } } } function updateContact(data) { var id = data.id; delete data.id; var index = findContactById(id); if (index !== -1) { var unread = data.unread; if (isString(unread)) { if (unread.indexOf('+') === 0 || unread.indexOf('-') === 0) { data.unread = parseInt(unread) + contacts.value[index].unread; } else if (unread.length === 0) { data.unread = 0; } else { data.unread = parseInt(data.unread); } } // if (data.unread) { // data.unread = data.unread + contacts.value[index].unread // } contacts.value[index] = _objectSpread(_objectSpread({}, contacts.value[index]), data); } } function findContactById(id) { if (!id) return -1; return contacts.value.findIndex(function (item) { return item.id === id; }); } /* */ function appendMessage(message) { var scrollToBottom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; console.log(message); if (!messagesBucket.has(message.toContactId)) { updateContact({ id: message.toContactId, unread: '+1', lastMessageTime: message.time, lastMessage: lastMessageRender(message) }); } else { addMessage(message, message.toContactId, 'push'); var updateContactData = { id: message.toContactId, lastMessageTime: message.time, lastMessage: lastMessageRender(message), lastMessageStatus: message.status, unread: '' }; if (message.toContactId === currentContactId.value) { var _msgRef$value2; (_msgRef$value2 = msgRef.value) === null || _msgRef$value2 === void 0 ? void 0 : _msgRef$value2.scrollToBottom(); } else { updateContactData.unread = '+1'; } updateContact(updateContactData); } // if (scrollToBottom) { // msgRef.value?.scrollToBottom() // } } function addMessage(message, contactId, type) { var _messagesBucket$get3; if (!isArray(message)) message = [message]; messagesBucket.set(contactId, messagesBucket.get(contactId) || []); (_messagesBucket$get3 = messagesBucket.get(contactId))[type].apply(_messagesBucket$get3, _toConsumableArray(message)); } function createMessage(message) { return _objectSpread(_objectSpread({}, { id: guid(), time: new Date().getTime(), type: 'text', status: 'uploading', toContactId: currentContactId.value, from: props.userInfo }), message); } var handleUpload = function handleUpload(file) { var imageTypes = ['image/png', 'image/jpeg', 'image/gif']; var message; if (imageTypes.includes(file.type)) { var fileReader = new FileReader(); fileReader.readAsDataURL(file); fileReader.onload = function () { message = { content: fileReader.result, type: 'image' }; _emitUploadSend(message, file); }; } else { message = { type: 'file', fileSize: file.size, fileName: file.name, content: '' }; _emitUploadSend(message, file); } }; function _emitUploadSend(_message, file) { var message = createMessage(_message); appendMe